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 + -
显示快捷键?