⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 regsw.inc

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 INC
📖 第 1 页 / 共 3 页
字号:
;Copyright (C) 1997-2001 ZSNES Team ( zsknight@zsnes.com / _demo_@zsnes.com )
;
;This program is free software; you can redistribute it and/or
;modify it under the terms of the GNU General Public License
;as published by the Free Software Foundation; either
;version 2 of the License, or (at your option) any later
;version.
;
;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,SDD1Reset
EXTSYM SPC7110Reset,RTCReset2
EXTSYM xat,xdbt,xdt,xpbt,xst,xxt,xyt
EXTSYM DSPMem,WDSPReg0C,WDSPReg0D,WDSPReg0F,WDSPReg1C,WDSPReg1F
EXTSYM WDSPReg2C,WDSPReg2F,WDSPReg3C,WDSPReg3D,WDSPReg3F,WDSPReg4F
EXTSYM WDSPReg5F,WDSPReg6C,WDSPReg6F,WDSPReg7D,WDSPReg7F
EXTSYM debstop
EXTSYM cachesprites,curblank,processsprites,sprleftpr,sprlefttot,NextLineCache
EXTSYM vidmemch2,vidmemch4,vidmemch8,vrama
EXTSYM nmirept,sndwrit,spcRam
EXTSYM HIRQCycNext,HIRQNextExe,HIRQSkip
EXTSYM cycpb268,cycpb358,cycpbl,cycpblt,opexec268,opexec268cph
EXTSYM opexec358,opexec358cph
EXTSYM hdmarestart
EXTSYM printhex8






NEWSYM testgfxv1, db 0
NEWSYM testgfxv2, db 0


NEWSYM 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
    loop .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 2180h*4,reg2180w
    setregw 2181h*4,reg2181w
    setregw 2182h*4,reg2182w
    setregw 2183h*4,reg2183w
    setregw 4016h*4,reg4016w
    setregw 4017h*4,reg4017w
    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 420Eh*4,reg420Ew
    setregw 4210h*4,reg4210w
    setregw 4211h*4,reg4211w
    setregw 4212h*4,reg4212w
    setregw 4216h*4,reg4216w
    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,reg43XAw
    setregw 430Ch*4,reg43XAw
    setregw 430Dh*4,reg43XAw
    setregw 430Eh*4,reg43XAw
    setregw 430Fh*4,reg43XAw
    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,reg43XAw
    setregw 431Ch*4,reg43XAw
    setregw 431Dh*4,reg43XAw
    setregw 431Eh*4,reg43XAw
    setregw 431Fh*4,reg43XAw
    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,reg43XAw
    setregw 432Ch*4,reg43XAw
    setregw 432Dh*4,reg43XAw
    setregw 432Eh*4,reg43XAw
    setregw 432Fh*4,reg43XAw
    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,reg43XAw
    setregw 433Ch*4,reg43XAw
    setregw 433Dh*4,reg43XAw
    setregw 433Eh*4,reg43XAw
    setregw 433Fh*4,reg43XAw
    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,reg43XAw
    setregw 434Ch*4,reg43XAw
    setregw 434Dh*4,reg43XAw
    setregw 434Eh*4,reg43XAw
    setregw 434Fh*4,reg43XAw
    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,reg43XAw
    setregw 435Ch*4,reg43XAw
    setregw 435Dh*4,reg43XAw
    setregw 435Eh*4,reg43XAw
    setregw 435Fh*4,reg43XAw
    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,reg43XAw
    setregw 436Ch*4,reg43XAw
    setregw 436Dh*4,reg43XAw
    setregw 436Eh*4,reg43XAw
    setregw 436Fh*4,reg43XAw
    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,reg43XAw
    setregw 437Ch*4,reg43XAw
    setregw 437Dh*4,reg43XAw
    setregw 437Eh*4,reg43XAw
    setregw 437Fh*4,reg43XAw
    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 times 4096 db 0
;vidmemch4 times 4096 db 0
;vidmemch8 times 4096 db 0


NEWSYM unpackfunct
    mov ebx,[oamaddr]
    mov [oamaddrt],bx

    mov ax,[xa]
    mov [xat],ax
    mov al,[xdb]
    mov [xdbt],al
    mov al,[xpb]
    mov [xpbt],al
    mov ax,[xs]
    mov [xst],ax
    mov ax,[xd]
    mov [xdt],ax
    mov ax,[xx]
    mov [xxt],ax
    mov ax,[xy]
    mov [xyt],ax
    ret


NEWSYM repackfunct
    ; Global/Echo Volumes
    mov al,[DSPMem+0Ch]
    call WDSPReg0C
    mov al,[DSPMem+1Ch]
    call WDSPReg1C
    mov al,[DSPMem+2Ch]
    call WDSPReg2C
    mov al,[DSPMem+3Ch]
    call WDSPReg3C
    ; Echo Values
    mov al,[DSPMem+7Dh]
    call WDSPReg7D
    mov al,[DSPMem+0Dh]
    call WDSPReg0D
    ; FIR Filter Values
    mov al,[DSPMem+00Fh]
    call WDSPReg0F
    mov al,[DSPMem+01Fh]
    call WDSPReg1F
    mov al,[DSPMem+02Fh]
    call WDSPReg2F
    mov al,[DSPMem+03Fh]
    call WDSPReg3F
    mov al,[DSPMem+04Fh]
    call WDSPReg4F
    mov al,[DSPMem+05Fh]
    call WDSPReg5F
    mov al,[DSPMem+06Fh]
    call WDSPReg6F
    mov al,[DSPMem+07Fh]
    call WDSPReg7F
    ; Noise
    mov al,[DSPMem+6Ch]
    call WDSPReg6C
    mov al,[DSPMem+3Dh]
    call WDSPReg3D

    mov bx,[bg1ptrb]
    sub bx,[bg1ptr]
    mov [bg1ptrx],bx
    mov bx,[bg1ptrc]
    sub bx,[bg1ptr]
    mov [bg1ptry],bx
    mov bx,[bg2ptrb]
    sub bx,[bg2ptr]
    mov [bg2ptrx],bx
    mov bx,[bg2ptrc]
    sub bx,[bg2ptr]
    mov [bg2ptry],bx
    mov bx,[bg3ptrb]
    sub bx,[bg3ptr]
    mov [bg3ptrx],bx
    mov bx,[bg3ptrc]
    sub bx,[bg3ptr]
    mov [bg3ptry],bx
    mov bx,[bg4ptrb]
    sub bx,[bg4ptr]
    mov [bg4ptrx],bx
    mov bx,[bg4ptrc]
    sub bx,[bg4ptr]
    mov [bg4ptry],bx

    ; 16x16 tiles
    mov bl,[bgtilesz]
    shl bl,4
    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

    mov ebx,[oamaddrt]
    and ebx,0FFFFh
    mov [oamaddr],ebx

    mov ax,[xat]
    mov [xa],ax
    mov al,[xdbt]
    mov [xdb],al
    mov al,[xpbt]
    mov [xpb],al
    mov ax,[xst]
    mov [xs],ax
    mov ax,[xdt]
    mov [xd],ax
    mov ax,[xxt]
    mov [xx],ax
    mov ax,[xyt]
    mov [xy],ax

    cmp byte[vramincby8on],1
    je near .incby8
    mov ebx,[regptw]
    cmp byte[vramincr],1
    je .from2118
    mov dword[ebx+2118h*4],reg2118
    mov dword[ebx+2119h*4],reg2119inc
    ret
.from2118
    mov dword[ebx+2118h*4],reg2118inc
    mov dword[ebx+2119h*4],reg2119
    ret
.incby8
    mov ebx,[regptw]
    cmp byte[vramincr],1
    je .from2118b
    mov dword[ebx+2118h*4],reg2118inc8
    mov dword[ebx+2119h*4],reg2119inc8inc
    ret
.from2118b
    mov dword[ebx+2118h*4],reg2118inc8inc
    mov dword[ebx+2119h*4],reg2119inc8
    ret

;*******************************************************
; Registers    Note : restore AH, ECX, ESI, EDI, *S & DX
;*******************************************************


; Screen display register
reg2100w:
    mov [vidbright],al
    and byte[vidbright],0Fh
    mov [forceblnk],al
    and byte[forceblnk],80h
    ret

NEWSYM prevoamptr, db 0

; OAM size register
reg2101w:
    cmp byte[prevoamptr],0FFh
    je .noskip
    cmp byte[prevoamptr],al
    je near .noproc
.noskip
    mov byte[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
    ret

.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,14

; OAM address register
reg2102w:
    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 bl,al
    cmp bl,80h
    jae .noreset
;    xor bl,bl
.noreset
    mov [objhipr],bl
    mov byte[nexthprior],0
.cachespr
    ret

; OAM address register
reg2103w:
    mov bl,al
    and bl,01h
    shr word[oamaddr],1
    mov [oamaddr+1],bl
    shl word[oamaddr],1
    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
    mov byte[NextLineCache],1
    ret
.hipri
    mov byte[nexthprior],1
    mov byte[NextLineCache],1
    ret

; OAM data register
reg2104w:
    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 register
reg2105w:
    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 register
reg2106w:
    mov bl,al
    and bl,0Fh
    mov [mosaicon],bl
    mov bl,al
    shr bl,4
    mov [mosaicsz],bl
    ret

; BG1 VRAM location register
reg2107w:
    xor ebx,ebx

⌨️ 快捷键说明

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