Diff for /np2/i286x/Attic/dmap.x86 between versions 1.3 and 1.4

version 1.3, 2004/01/31 20:05:23 version 1.4, 2005/02/08 09:57:26
Line 1 Line 1
   
                                 struc   dmach_t  #error  move: /mem/x86/dmax86.x86
 .adrs                   resd    1               ; 00  
 .leng                   resw    1               ; 04  
 .adrsorg                resw    1               ; 06  
 .lengorg                resw    1               ; 08  
 .action                 resw    1               ; 0a  
 .outproc                resd    1               ; 0c  
 .inproc                 resd    1               ; 10  
 .extproc                resd    1               ; 14  
 .mode                   resb    1               ; 18  
 .sreq                   resb    1               ; 19  
 .ready                  resb    1               ; 1a  
 .mask                   resb    1               ; 1b  
 .size                                                   ; 1c  
                                 endstruc  
   
                                 struc   dmac_t  
 .dmach                  resb    (dmach_t.size * 4)  
 .lh                             resd    1  
 .work                   resb    1  
 .working                resb    1  
 .mask                   resb    1  
 .stat                   resb    1  
                                 endstruc  
   
 DMAEXT_START            equ             0  
 DMAEXT_END                      equ             1  
 DMAEXT_BREAK            equ             2  
 DMA_INITSIGNALONLY      equ             1  
   
   
 section .bss  
   
         extern  _dmac  
   
 section .text  
   
         global  _dmap_i286  
         extern  @i286_memoryread@4  
         extern  @i286_memorywrite@8  
   
   
                                 align   16  
 _dmap_i286:             cmp             byte [_dmac + dmac_t.working], byte 0  
                                 je              short dmap_nowork  
                                 mov             eax, _dmac + dmac_t.dmach  
                                 mov             cl, 1  
 dmap_sea:               test    [_dmac + dmac_t.working], cl  
                                 jne             short dmap_hit  
                                 add             cl, cl  
                                 add             eax, dmach_t.size  
                                 and             cl, 15  
                                 jne             short dmap_sea  
 dmap_nowork:    ret  
   
 dmap_hit:               push    edi  
                                 sub             word [eax + dmach_t.leng], byte 1  
                                 mov             edi, eax  
                                 jnc             short dmap_exec  
                                 or              [_dmac + dmac_t.stat], cl  
                                 not             cl  
                                 and             [_dmac + dmac_t.working], cl  
                                 mov             ecx, DMAEXT_END  
                                 call    dword [edi + dmach_t.extproc]  
 dmap_exec:              mov             al, [edi + dmach_t.mode]  
                                 and             al, 0ch  
                                 je              short dmap_verify  
                                 cmp             al, 04h  
                                 je              short dmap_port2mem  
                                 mov             ecx, [edi + dmach_t.adrs]  
                                 call    @i286_memoryread@4  
                                 mov             cl, al  
                                 call    dword [edi + dmach_t.outproc]  
                                 jmp             short dmap_inccnt  
 dmap_verify:    call    dword [edi + dmach_t.inproc]  
                                 jmp             short dmap_inccnt  
 dmap_port2mem:  call    dword [edi + dmach_t.inproc]  
                                 mov             ecx, [edi + dmach_t.adrs]  
                                 mov             dl, al  
                                 call    @i286_memorywrite@8  
 dmap_inccnt:    test    byte [edi + dmach_t.mode], 20h  
                                 jne             short dmap_adrsdec  
                                 inc             dword [edi + dmach_t.adrs]  
                                 pop             edi  
                                 ret  
 dmap_adrsdec:   dec             dword [edi + dmach_t.adrs]  
                                 pop             edi  
                                 ret  
   
         ends  
   

Removed from v.1.3  
changed lines
  Added in v.1.4


RetroPC.NET-CVS <cvs@retropc.net>