📄 regsw.inc
字号:
;Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach );;http://www.zsnes.com;http://sourceforge.net/projects/zsnes;https://zsnes.bountysource.com;;This program is free software; you can redistribute it and/or;modify it under the terms of the GNU General Public License;version 2 as published by the Free Software Foundation.;;This program is distributed in the hope that it will be useful,;but WITHOUT ANY WARRANTY; without even the implied warranty of;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the;GNU General Public License for more details.;;You should have received a copy of the GNU General Public License;along with this program; if not, write to the Free Software;Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.EXTSYM initsfxregsw,reg420Bw,reg420Cw,regptw,initSA1regsw,SDD1ResetEXTSYM SPC7110Reset,RTCReset2,NextLineCache,vidmemch2,vidmemch4EXTSYM vidmemch8,vrama,nmirept,SPCRAM,HIRQCycNext,HIRQNextExe,tableadcEXTSYM cycpb268,cycpb358,cycpbl,cycpblt,opexec268,opexec268cph,opexec358EXTSYM opexec358cph%ifndef NO_DEBUGGEREXTSYM sndwrit,debstop%endifSECTION .textNEWSYM initregw ; Fill register pointer with invalid register accesses mov edi,[regptw] add edi,8000h mov ecx,3000h mov eax,regINVALIDw.loopa mov [edi],eax add edi,4 dec ecx jnz .loopa ; Set all valid register accesses setregw 2100h*4,reg2100w setregw 2101h*4,reg2101w setregw 2102h*4,reg2102w setregw 2103h*4,reg2103w setregw 2104h*4,reg2104w setregw 2105h*4,reg2105w setregw 2106h*4,reg2106w setregw 2107h*4,reg2107w setregw 2108h*4,reg2108w setregw 2109h*4,reg2109w setregw 210Ah*4,reg210Aw setregw 210Bh*4,reg210Bw setregw 210Ch*4,reg210Cw setregw 210Dh*4,reg210Dw setregw 210Eh*4,reg210Ew setregw 210Fh*4,reg210Fw setregw 2110h*4,reg2110w setregw 2111h*4,reg2111w setregw 2112h*4,reg2112w setregw 2113h*4,reg2113w setregw 2114h*4,reg2114w setregw 2115h*4,reg2115w setregw 2116h*4,reg2116w setregw 2117h*4,reg2117w setregw 2118h*4,reg2118 setregw 2119h*4,reg2119inc setregw 211Ah*4,reg211Aw setregw 211Bh*4,reg211Bw setregw 211Ch*4,reg211Cw setregw 211Dh*4,reg211Dw setregw 211Eh*4,reg211Ew setregw 211Fh*4,reg211Fw setregw 2120h*4,reg2120w setregw 2121h*4,reg2121w setregw 2122h*4,reg2122w setregw 2123h*4,reg2123w setregw 2124h*4,reg2124w setregw 2125h*4,reg2125w setregw 2126h*4,reg2126w setregw 2127h*4,reg2127w setregw 2128h*4,reg2128w setregw 2129h*4,reg2129w setregw 212Ah*4,reg212Aw setregw 212Bh*4,reg212Bw setregw 212Ch*4,reg212Cw setregw 212Dh*4,reg212Dw setregw 212Eh*4,reg212Ew setregw 212Fh*4,reg212Fw setregw 2130h*4,reg2130w setregw 2131h*4,reg2131w setregw 2132h*4,reg2132w setregw 2133h*4,reg2133w setregw 2140h*4,reg2140w setregw 2141h*4,reg2141w setregw 2142h*4,reg2142w setregw 2143h*4,reg2143w setregw 2144h*4,reg2140w setregw 2145h*4,reg2141w setregw 2146h*4,reg2142w setregw 2147h*4,reg2143w setregw 2148h*4,reg2140w setregw 2149h*4,reg2141w setregw 214Ah*4,reg2142w setregw 214Bh*4,reg2143w setregw 214Ch*4,reg2140w setregw 214Dh*4,reg2141w setregw 214Eh*4,reg2142w setregw 214Fh*4,reg2143w setregw 2150h*4,reg2140w setregw 2151h*4,reg2141w setregw 2152h*4,reg2142w setregw 2153h*4,reg2143w setregw 2154h*4,reg2140w setregw 2155h*4,reg2141w setregw 2156h*4,reg2142w setregw 2157h*4,reg2143w setregw 2158h*4,reg2140w setregw 2159h*4,reg2141w setregw 215Ah*4,reg2142w setregw 215Bh*4,reg2143w setregw 215Ch*4,reg2140w setregw 215Dh*4,reg2141w setregw 215Eh*4,reg2142w setregw 215Fh*4,reg2143w setregw 2160h*4,reg2140w setregw 2161h*4,reg2141w setregw 2162h*4,reg2142w setregw 2163h*4,reg2143w setregw 2164h*4,reg2140w setregw 2165h*4,reg2141w setregw 2166h*4,reg2142w setregw 2167h*4,reg2143w setregw 2168h*4,reg2140w setregw 2169h*4,reg2141w setregw 216Ah*4,reg2142w setregw 216Bh*4,reg2143w setregw 216Ch*4,reg2140w setregw 216Dh*4,reg2141w setregw 216Eh*4,reg2142w setregw 216Fh*4,reg2143w setregw 2170h*4,reg2140w setregw 2171h*4,reg2141w setregw 2172h*4,reg2142w setregw 2173h*4,reg2143w setregw 2174h*4,reg2140w setregw 2175h*4,reg2141w setregw 2176h*4,reg2142w setregw 2177h*4,reg2143w setregw 2178h*4,reg2140w setregw 2179h*4,reg2141w setregw 217Ah*4,reg2142w setregw 217Bh*4,reg2143w setregw 217Ch*4,reg2140w setregw 217Dh*4,reg2141w setregw 217Eh*4,reg2142w setregw 217Fh*4,reg2143w setregw 2180h*4,reg2180w setregw 2181h*4,reg2181w setregw 2182h*4,reg2182w setregw 2183h*4,reg2183w setregw 4016h*4,reg4016w setregw 4200h*4,reg4200w setregw 4201h*4,reg4201w setregw 4202h*4,reg4202w setregw 4203h*4,reg4203w setregw 4204h*4,reg4204w setregw 4205h*4,reg4205w setregw 4206h*4,reg4206w setregw 4207h*4,reg4207w setregw 4208h*4,reg4208w setregw 4209h*4,reg4209w setregw 420Ah*4,reg420Aw setregw 420Bh*4,reg420Bw setregw 420Ch*4,reg420Cw setregw 420Dh*4,reg420Dw setregw 4300h*4,reg43X0w setregw 4301h*4,reg43X1w setregw 4302h*4,reg43x2w setregw 4303h*4,reg43x3w setregw 4304h*4,reg43x4w setregw 4305h*4,reg43x5w setregw 4306h*4,reg43x6w setregw 4307h*4,reg43x7w setregw 4308h*4,reg43x8w setregw 4309h*4,reg43x9w setregw 430Ah*4,reg43XAw setregw 430Bh*4,reg43XBw setregw 430Fh*4,reg43XBw setregw 4310h*4,reg43X0w setregw 4311h*4,reg43X1w setregw 4312h*4,reg43x2w setregw 4313h*4,reg43x3w setregw 4314h*4,reg43x4w setregw 4315h*4,reg43x5w setregw 4316h*4,reg43x6w setregw 4317h*4,reg43x7w setregw 4318h*4,reg43x8w setregw 4319h*4,reg43x9w setregw 431Ah*4,reg43XAw setregw 431Bh*4,reg43XBw setregw 431Fh*4,reg43XBw setregw 4320h*4,reg43X0w setregw 4321h*4,reg43X1w setregw 4322h*4,reg43x2w setregw 4323h*4,reg43x3w setregw 4324h*4,reg43x4w setregw 4325h*4,reg43x5w setregw 4326h*4,reg43x6w setregw 4327h*4,reg43x7w setregw 4328h*4,reg43x8w setregw 4329h*4,reg43x9w setregw 432Ah*4,reg43XAw setregw 432Bh*4,reg43XBw setregw 432Fh*4,reg43XBw setregw 4330h*4,reg43X0w setregw 4331h*4,reg43X1w setregw 4332h*4,reg43x2w setregw 4333h*4,reg43x3w setregw 4334h*4,reg43x4w setregw 4335h*4,reg43x5w setregw 4336h*4,reg43x6w setregw 4337h*4,reg43x7w setregw 4338h*4,reg43x8w setregw 4339h*4,reg43x9w setregw 433Ah*4,reg43XAw setregw 433Bh*4,reg43XBw setregw 433Fh*4,reg43XBw setregw 4340h*4,reg43X0w setregw 4341h*4,reg43X1w setregw 4342h*4,reg43x2w setregw 4343h*4,reg43x3w setregw 4344h*4,reg43x4w setregw 4345h*4,reg43x5w setregw 4346h*4,reg43x6w setregw 4347h*4,reg43x7w setregw 4348h*4,reg43x8w setregw 4349h*4,reg43x9w setregw 434Ah*4,reg43XAw setregw 434Bh*4,reg43XBw setregw 434Fh*4,reg43XBw setregw 4350h*4,reg43X0w setregw 4351h*4,reg43X1w setregw 4352h*4,reg43x2w setregw 4353h*4,reg43x3w setregw 4354h*4,reg43x4w setregw 4355h*4,reg43x5w setregw 4356h*4,reg43x6w setregw 4357h*4,reg43x7w setregw 4358h*4,reg43x8w setregw 4359h*4,reg43x9w setregw 435Ah*4,reg43XAw setregw 435Bh*4,reg43XBw setregw 435Fh*4,reg43XBw setregw 4360h*4,reg43X0w setregw 4361h*4,reg43X1w setregw 4362h*4,reg43x2w setregw 4363h*4,reg43x3w setregw 4364h*4,reg43x4w setregw 4365h*4,reg43x5w setregw 4366h*4,reg43x6w setregw 4367h*4,reg43x7w setregw 4368h*4,reg43x8w setregw 4369h*4,reg43x9w setregw 436Ah*4,reg43XAw setregw 436Bh*4,reg43XBw setregw 436Fh*4,reg43XBw setregw 4370h*4,reg43X0w setregw 4371h*4,reg43X1w setregw 4372h*4,reg43x2w setregw 4373h*4,reg43x3w setregw 4374h*4,reg43x4w setregw 4375h*4,reg43x5w setregw 4376h*4,reg43x6w setregw 4377h*4,reg43x7w setregw 4378h*4,reg43x8w setregw 4379h*4,reg43x9w setregw 437Ah*4,reg43XAw setregw 437Bh*4,reg43XBw setregw 437Fh*4,reg43XBw cmp byte[SFXEnable],0 je .nosfx call initsfxregsw.nosfx cmp byte[SA1Enable],0 je .nosa1 call initSA1regsw.nosa1 cmp byte[SDD1Enable],0 je .nosdd1 call SDD1Reset.nosdd1 cmp byte[SPC7110Enable],0 je .nospc7110 call SPC7110Reset.nospc7110 cmp byte[RTCEnable],0 je .nortc call RTCReset2.nortc ret; video memory change buffer for caching (65536/16=4096);vidmemch2, vidmemch4, vidmemch8. 4096 bytes each;*******************************************************; Registers Note : restore AH, ECX, ESI, EDI, *S & DX;*******************************************************; Screen display registerreg2100w: mov [vidbright],al and byte[vidbright],0Fh mov [forceblnk],al and byte[forceblnk],80h retSECTION .bssNEWSYM prevoamptr, resb 1SECTION .text; OAM size registerreg2101w: cmp byte[prevoamptr],0FFh je .noskip cmp byte[prevoamptr],al je near .noproc.noskip mov [prevoamptr],al xor ebx,ebx mov bl,al and bl,03h shl bx,14 mov [objptr],bx mov [objptrn],bx xor ebx,ebx mov bl,al and bl,18h shr bl,3 shl bx,13 add [objptrn],bx xor ebx,ebx mov bl,al shr bl,5 push eax mov byte[NextLineCache],1 mov al,[.objsize1+ebx] mov [objsize1],al mov al,[.objsize2+ebx] mov [objsize2],al mov al,[.objmovs1+ebx] mov [objmovs1],al mov al,[.objmovs2+ebx] mov [objmovs2],al mov ax,[.objadds1+ebx*2] mov [objadds1],ax mov ax,[.objadds2+ebx*2] mov [objadds2],ax pop eax.noproc retSECTION .data.objsize1 db 1,1,1,4,4,16,1,1.objsize2 db 4,16,64,16,64,64,4,4.objmovs1 db 2,2,2,2,2,4,2,2.objmovs2 db 2,4,8,4,8,8,2,2.objadds1 dw 14,14,14,14,14,12,14,14.objadds2 dw 14,12,8,12,8,8,14,14SECTION .bssNEWSYM oamlow, resb 1SECTION .text; OAM address registerreg2102w: mov byte[oamlow],1 mov word[oamaddr],0 shr word[oamaddr],1 mov [oamaddr],al shl word[oamaddr],1; or al,al; jz .skipstore mov bx,[oamaddrs] mov [poamaddrs],bx mov bx,[oamaddr] mov [oamaddrs],bx.skipstore cmp byte[nexthprior],1 je .priorset mov byte[objhipr],0 jmp .cachespr.priorset mov bx,[oamaddr] shr bx,2 and bl,0x7F; cmp bl,80h; jae .noreset; xor bl,bl.noreset mov [objhipr],bl.cachespr ret; OAM address registerreg2103w: cmp byte[oamlow],1 jne .afteroamlow mov byte[oamlow],0 mov bl,al and bl,01h shr word[oamaddr],1 mov [oamaddr+1],bl shl word[oamaddr],1.afteroamlow cmp word[poamaddrs],200h jbe .notinvptr cmp word[oamaddr],200h jne .notinvptr mov bx,[poamaddrs] mov [oamaddr],bx mov byte[nosprincr],1.notinvptr mov bx,[oamaddr] mov [oamaddrs],bx test al,80h jnz .hipri test bl,0FFh jz .lowpri mov byte[nexthprior],0.lowpri mov byte[NextLineCache],1 ret.hipri mov byte[nexthprior],1 mov byte[NextLineCache],1 ret; OAM data registerreg2104w: mov byte[NextLineCache],1 mov ebx,[oamaddr] cmp byte[nosprincr],1 je .noinc inc dword[oamaddr] cmp ebx,544 jae .overflow.noinc mov [oamram+ebx],al ret.overflow xor ebx,ebx mov dword[oamaddr],1 mov [oamram+ebx],al ret; Screen mode registerreg2105w: mov bl,al and bl,00000111b mov [bgmode],bl mov bl,al shr bl,3 and bl,01h mov [bg3highst],bl mov bl,al shr bl,4 mov [bgtilesz],bl mov bl,al mov dword[BG116x16t],0 add bl,bl adc byte[BG416x16t],0 add bl,bl adc byte[BG316x16t],0 add bl,bl adc byte[BG216x16t],0 add bl,bl adc byte[BG116x16t],0 ret; Screen pixelation registerreg2106w: mov bl,al and bl,0Fh mov [mosaicon],bl mov bl,al shr bl,4 mov [mosaicsz],bl ret; BG1 VRAM location registerreg2107w: xor ebx,ebx mov bl,al shr bl,2 shl bx,11 mov [bg1ptr],bx mov [bg1ptrb],bx mov [bg1ptrc],bx mov [bg1ptrd],bx mov dword[bg1ptrx],0 mov dword[bg1ptry],0 mov bl,al and bl,00000011b mov [bg1scsize],bl cmp bl,1 jne .skipa add word[bg1ptrb],800h add word[bg1ptrd],800h mov dword[bg1ptrx],800h.skipa cmp bl,2 jne .skipb add word[bg1ptrc],800h add word[bg1ptrd],800h mov dword[bg1ptry],800h.skipb cmp bl,3 jne .skipc add word[bg1ptrb],800h add word[bg1ptrc],1000h add word[bg1ptrd],1800h mov dword[bg1ptrx],800h mov dword[bg1ptry],1000h.skipc ret; BG2 VRAM location registerreg2108w: xor ebx,ebx mov bl,al shr bl,2 shl bx,11 mov [bg2ptr],bx mov [bg2ptrb],bx mov [bg2ptrc],bx mov [bg2ptrd],bx mov dword[bg2ptrx],0 mov dword[bg2ptry],0 mov bl,al and bl,00000011b mov [bg2scsize],bl cmp bl,1 jne .skipa add word[bg2ptrb],800h add word[bg2ptrd],800h mov dword[bg2ptrx],800h.skipa cmp bl,2 jne .skipb add word[bg2ptrc],800h add word[bg2ptrd],800h mov dword[bg2ptry],800h.skipb cmp bl,3 jne .skipc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -