regsw.inc

来自「linux下的任天堂模拟器代码。供大家参考。」· INC 代码 · 共 1,683 行 · 第 1/3 页

INC
1,683
字号
    shr bl,4    mov [wincolen],bl    ret; Window 1 left position registerreg2126w:    mov [winl1],al    ret; Window 1 right position registerreg2127w:    mov [winr1],al    ret; Window 2 left position registerreg2128w:    mov [winl2],al    ret; Window 2 right position registerreg2129w:    mov [winr2],al    ret; Mask logic settings for Window 1 & 2 per screenreg212Aw:    mov [winlogica],al    ret; Mask logic settings for Colour Windows & OBJ Windowsreg212Bw:    mov [winlogicb],al    ret; Main screen designationreg212Cw:    mov [scrnon],al    ret; Sub-screen designationreg212Dw:    mov [scrnon+1],al    ret; Window mask main screen designation registerreg212Ew:    mov [winenabm],al    ret; Window mask sub screen designation registerreg212Fw:    mov [winenabs],al    ret; Fixed color addition or screen addition registerreg2130w:    mov [scaddset],al    ret; Addition/subtraction for screens, BGs, & OBJsreg2131w:    mov [scaddtype],al    ret; Fixed colour data for fixed colour +/-reg2132w:    mov bl,al    and bl,1Fh    test al,20h    jz .nored    mov [coladdr],bl.nored    test al,40h    jz .nogreen    mov [coladdg],bl.nogreen    test al,80h    jz .noblue    mov [coladdb],bl.noblue    ret; Screen mode/video select registerreg2133w:    mov [interlval],al    and byte[interlval],41h    test al,04h    jnz .line239    mov word[resolutn],224    ret.line239    mov word[resolutn],239    ret; Sound Register #1reg2140w:%ifndef NO_DEBUGGER    mov byte[sndwrit],1%endif    cmp byte[nmistatus],2    jne .n    mov byte[nmirept],0.n    mov [SPCRAM+0F4h],al    inc dword[SPC700write]    reenablespc    ret;    cmp dword[cycpbl],0FFFFh;    ja .spcreset;    ret;.spcreset;    mov dword[cycpbl],100;    ret; Sound Register #2reg2141w:%ifndef NO_DEBUGGER    mov byte[sndwrit],1%endif    mov [SPCRAM+0F5h],al    inc dword[SPC700write]    reenablespc    ret;    cmp dword[cycpbl],0FFFFh;    ja .spcreset;    ret;.spcreset;    mov dword[cycpbl],100;    ret; Sound Register #3reg2142w:%ifndef NO_DEBUGGER    mov byte[sndwrit],1%endif    mov [SPCRAM+0F6h],al    inc dword[SPC700write]    reenablespc    ret;    cmp dword[cycpbl],0FFFFh;    ja .spcreset;    ret;.spcreset;    mov dword[cycpbl],100;    ret; Sound Register #4reg2143w:%ifndef NO_DEBUGGER    mov byte[sndwrit],1%endif    mov [SPCRAM+0F7h],al    inc dword[SPC700write]    reenablespc    ret;    cmp dword[cycpbl],0FFFFh;    ja .spcreset;    ret;.spcreset;    mov dword[cycpbl],100;    ret; Read/write WRAM registerreg2180w:    mov ebx,[wramrwadr]    add ebx,[wramdata]    mov [ebx],al    inc dword[wramrwadr]    and dword[wramrwadr],01FFFFh    ret; WRAM data register (low byte)reg2181w:    mov [wramrwadr],al    ret; WRAM data register (middle byte)reg2182w:    mov [wramrwadr+1],al    ret; WRAM data register (high byte)reg2183w:    mov bl,al    and bl,01h    mov [wramrwadr+2],bl    ret; Joystick 1 & 2 status bytesSECTION .bssNEWSYM MultiTapStat, resb 1SECTION .textreg4016w:    test byte[INTEnab],1    jnz .nointenab    mov ebx,[JoyAOrig]    or ebx,0FFFFh    mov [JoyANow],ebx    mov ebx,[JoyBOrig]    or ebx,0FFFFh    mov [JoyBNow],ebx    mov ebx,[JoyCOrig]    or ebx,0FFFFh    mov [JoyCNow],ebx    mov ebx,[JoyDOrig]    or ebx,0FFFFh    mov [JoyDNow],ebx    mov ebx,[JoyEOrig]    or ebx,0FFFFh    mov [JoyENow],ebx    cmp al,01h    jne .noreset    or byte[MultiTapStat],1    ret.noreset    and byte[MultiTapStat],0FEh    ret.nointenab    cmp al,01h    jne .noone    or byte[MultiTapStat],1    or byte[JoyCRead],2    ret.noone    and byte[MultiTapStat],0FEh    cmp al,0    jne near .nozero    or byte[JoyCRead],1    cmp byte[JoyCRead],3    jne near .nozero.resetports    mov ebx,[JoyAOrig]    or ebx,0FFFFh    mov [JoyANow],ebx    or ebx,0FFFFh    mov ebx,[JoyBOrig]    or ebx,0FFFFh    mov [JoyBNow],ebx    or ebx,0FFFFh    mov ebx,[JoyCOrig]    or ebx,0FFFFh    mov [JoyCNow],ebx    or ebx,0FFFFh    mov ebx,[JoyDOrig]    or ebx,0FFFFh    mov [JoyDNow],ebx    or ebx,0FFFFh    mov ebx,[JoyEOrig]    or ebx,0FFFFh    mov [JoyENow],ebx.nozero    ret; Counter enablereg4200w:    mov [INTEnab],al    ret; Programmable I/O port (out-port)reg4201w:    cmp byte[iohvlatch],1    jne .noiohvlatch    test al,80h    jnz .noiohvlatch    mov byte[iohvlatch],0.noiohvlatch    test byte[ioportval],80h    jnz .nolatch    test al,80h    jz .nolatch    mov byte[iohvlatch],1.nolatch    mov [ioportval],al    mov bl,al    and bl,80h    and byte[MultiTapStat],07Fh    or byte[MultiTapStat],bl    ret; Multiplicand 'A'reg4202w:    mov [multa],al    ret; Multiplier 'B'reg4203w:    push edx    push eax    xor ah,ah    xor bh,bh    mov bl,[multa]    mul bx    mov [multres],ax    pop eax    pop edx    ret; Dividend C (Low)reg4204w:    mov [diva],al    ret; Dividend C (High)reg4205w:    mov [diva+1],al    ret; Divisor Breg4206w:    cmp al,0    je .divby0    push eax    push edx    xor edx,edx    movzx ebx,al    mov ax,[diva]    div bx    mov [divres],ax    mov [multres],dx    pop edx    pop eax    ret.divby0    push eax    mov word[divres],0FFFFh    mov ax,[diva]    mov [multres],ax    pop eax    retDetermineHIRQExec    add dh,[HIRQCycNext]    mov byte[HIRQCycNext],0    mov byte[HIRQNextExe],0    push eax    push ecx    push edx    mov ax,[HIRQLoc]    movzx ecx,byte[cycpl]    mul cx    mov cx,340    div cx    mov cl,[cycpl]    sub cl,al    pop edx    cmp dh,cl    ja .hirqokay.notokay    pop ecx    pop eax    ret.hirqokay    sub dh,cl    add dh,30    add cl,16    mov [HIRQCycNext],cl    mov byte[HIRQNextExe],1    pop ecx    pop eax    ret; Video horizontal IRQ beam position/pointer (Low)reg4207w:    cmp [HIRQLoc],al    je .nohirqc    mov [HIRQLoc],al    mov bx,[curypos]    cmp bx,[VIRQLoc]    je near DetermineHIRQExec.nohirqc    ret; Video horizontal IRQ beam position/pointer (High)reg4208w:    cmp [HIRQLoc+1],al    je .nohirqc    mov [HIRQLoc+1],al    mov bx,[curypos]    cmp bx,[VIRQLoc]    je near DetermineHIRQExec.nohirqc    ret; Video vertical IRQ beam position/pointer (Low)reg4209w:    mov [VIRQLoc],al;    mov bx,[curypos]    cmp byte[HIRQNextExe],1    je .nohirq    ret.nohirq    mov bx,[curypos]    cmp bx,[VIRQLoc]    je .nocancelhirq    add dh,[HIRQCycNext]    mov byte[HIRQCycNext],0    mov byte[HIRQNextExe],0.nocancelhirq    ret; Video vertical IRQ beam position/pointer (High)reg420Aw:    and al,01h    mov [VIRQLoc+1],al    mov bx,[totlines]    sub bx,1    cmp word[VIRQLoc],bx    jb .okvirqpos    mov word[VIRQLoc],07FFFh.okvirqpos    cmp byte[HIRQNextExe],1    je .nohirq    ret.nohirq    mov bx,[curypos]    cmp bx,[VIRQLoc]    je .nocancelhirq    add dh,[HIRQCycNext]    mov byte[HIRQCycNext],0    mov byte[HIRQNextExe],0.nocancelhirq    ret; Cycle speed registerreg420Dw:    test al,01h    jnz .speed358    ; 2.68 Mhz    mov al,[opexec268]    mov [cycpl],al      ; 2.68 Mhz    mov al,[opexec268cph]    mov [cycphb],al     ; 2.68 Mhz    and byte[xirqb],00h    mov bl,[cycpb268]    mov [cycpblt],bl  ; percentage of CPU/SPC to run    ret.speed358    ; 3.58 Mhz    mov al,[opexec358]    mov [cycpl],al      ; 3.58 Mhz    mov al,[opexec358cph]    mov [cycphb],al     ; 3.58 Mhz    or byte[xirqb],80h    mov bl,[cycpb358]    mov [cycpblt],bl  ; percentage of CPU/SPC to run    ret; DMA Control registerreg43X0w:    xor ebx,ebx    mov bx,cx    sub bx,4300h    mov [dmadata+ebx],al    mov byte[hdmarestart],1    ret; DMA Destination registerreg43X1w:    xor ebx,ebx    mov bx,cx    sub bx,4300h    mov [dmadata+ebx],al    mov byte[hdmarestart],1    ret; Source address (Low)reg43x2w:    xor ebx,ebx    mov bx,cx    sub bx,4300h    mov [dmadata+ebx],al;    mov [dmadata+ebx+6],al    ret; Source address (High)reg43x3w:    xor ebx,ebx    mov bx,cx    sub bx,4300h    mov [dmadata+ebx],al;    mov [dmadata+ebx+6],al    ret; Source bank addressreg43x4w    xor ebx,ebx    mov bx,cx    sub bx,4300h    mov [dmadata+ebx],al    ret; DMA transfer size & HDMA address register (Low)reg43x5w:    xor ebx,ebx    mov bx,cx    sub bx,4300h    mov [dmadata+ebx],al    ret; DMA transfer size & HDMA address register (High)reg43x6w:    xor ebx,ebx    mov bx,cx    sub bx,4300h    mov [dmadata+ebx],al    ret; DMA transfer size & HDMA address register (Bank)reg43x7w:    xor ebx,ebx    mov bx,cx    sub bx,4300h    mov [dmadata+ebx],al    ret; Table Address of A-BUS by DMA < A2 Table Address (Low)reg43x8w:    xor ebx,ebx    mov bx,cx    sub bx,4300h    mov [dmadata+ebx],al    ret; Table Address of A-BUS by DMA < A2 Table Address (High)reg43x9w:    xor ebx,ebx    mov bx,cx    sub bx,4300h    mov [dmadata+ebx],al    ret; Number of lines for HDMA transferreg43XAw:    mov byte[nohdmaframe],0    xor ebx,ebx    mov bx,cx    sub bx,4300h    mov [dmadata+ebx],al    mov bx,[resolutn]    cmp word[curypos],bx    jb .nodma    cmp al,0    je .nodma    mov byte[nohdmaframe],1    inc byte[hdmadelay].nodma    ret; Unknown DMA bytereg43XBw:    xor ebx,ebx    mov bx,cx    sub bx,4300h    mov [dmadata+ebx],al    retregINVALIDw:     ; Invalid Register    ret

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?