📄 regs.inc
字号:
; Read OAM Data (Low, High)
reg2138r:
xor ebx,ebx
mov bx,word[oamaddr]
add ebx,oamram
mov al,[ebx]
inc word[oamaddr]
cmp word[oamaddr],543
ja .wrapoam
ret
.wrapoam
mov word[oamaddr],0
ret
; Read VRAM Data (Low)
reg2139r:
mov al,[vramread]
xor ebx,ebx
mov bx,[vramaddr]
add ebx,[vram]
mov bl,[ebx]
mov [vramread],bl
cmp byte[vramincr],0
je near .noincr
mov bx,[addrincr]
add [vramaddr],bx
cmp byte[vramincby8on],1
jne .noincr
dec byte[vramincby8left]
jnz .noincr
add word[vramaddr],2
mov bl,byte[vramincby8totl]
mov byte[vramincby8left],bl
dec byte[vramincby8rowl]
jz .nextrow
mov bx,[vramincby8ptri]
sub [vramaddr],bx
jmp .noincr
.nextrow
mov byte[vramincby8rowl],8
sub word[vramaddr],16
.noincr
ret
; Read VRAM Data (High)
reg213Ar:
mov al,[vramread2]
xor ebx,ebx
mov bx,[vramaddr]
add ebx,[vram]
mov bl,[ebx+1]
mov [vramread2],bl
cmp byte[vramincr],1
je near .noincr
mov bx,[addrincr]
add [vramaddr],bx
cmp byte[vramincby8on],1
jne .noincr
dec byte[vramincby8left]
jnz .noincr
add word[vramaddr],2
mov bl,byte[vramincby8totl]
mov byte[vramincby8left],bl
dec byte[vramincby8rowl]
jz .nextrow
mov bx,[vramincby8ptri]
sub [vramaddr],bx
jmp .noincr
.nextrow
mov byte[vramincby8rowl],8
sub word[vramaddr],16
.noincr
ret
; Read CGRAM Data
reg213Br:
xor ebx,ebx
mov bx,[cgaddr]
mov al,[cgram+ebx]
inc word[cgaddr]
and word[cgaddr],01FFh
ret
; H counter data by external or software latch
reg213Cr:
cmp byte[latchxr],1
je .highv
mov al,byte[latchx]
mov byte[latchxr],1
ret
.highv
mov al,byte[latchx+1]
mov byte[latchxr],0
ret
; V counter data by external or software latch
reg213Dr:
cmp byte[latchyr],1
je .highv
mov al,byte[latchy]
mov byte[latchyr],1
ret
.highv
mov al,byte[latchy+1]
mov byte[latchyr],0
ret
; PPU Status Flag & Version number (OBJ over flags)
reg213Er:
mov al,01h
ret
; PPU Status Flag & Version number (NTSC/PAL/EXTRN Latch flag)
reg213Fr:
; mov byte[debstop3],1
mov al,[romispal]
shl al,4
or al,[cfield]
mov byte[latchxr],0
mov byte[latchyr],0
or al,[extlatch]
ret
; Sound Reg #1
reg2140r:
cmp byte[spcon],0
je .nosound
inc dword[SPC700read]
mov al,[reg1read]
mov byte[spcnumread],0
ret
.nosound
; Find for D0
mov ebx,esi
cmp word[ebx],0FB10h
jne .noret
mov word[ebx],0EAEAh
.noret
mov al,5
.tryagain
cmp byte[ebx],0D0h
je .foundit
inc ebx
dec al
jnz .tryagain
jmp .notfound
.foundit
mov byte[ebx],0EAh
mov byte[ebx+1],0EAh
.notfound
inc byte[sndrot2]
cmp byte[sndrot2],3
jne .a
mov byte[sndrot2],0
.a
xor al,al
test byte[sndrot2],01h
jz .n
mov al,[xa]
.n
ret
; Sound Reg #2
reg2141r:
cmp byte[spcon],0
je .nosound
inc dword[SPC700read]
mov al,[reg2read]
mov byte[spcnumread],0
ret
.nosound
; Find for D0
mov ebx,esi
mov al,3
.tryagain
cmp byte[ebx],0D0h
je .foundit
inc ebx
dec al
jnz .tryagain
jmp .notfound
.foundit
mov byte[ebx],0EAh
mov byte[ebx+1],0EAh
.notfound
xor byte[sndrot],01h
mov al,[xa+1]
test byte[sndrot],01h
jz .n
mov al,[xa]
.n
ret
; Sound Reg #3
reg2142r:
cmp byte[spcon],0
je .nosound
inc dword[SPC700read]
mov al,[reg3read]
mov byte[spcnumread],0
ret
.nosound
; Find for D0
mov ebx,esi
mov al,3
.tryagain
cmp byte[ebx],0D0h
je .foundit
inc ebx
dec al
jnz .tryagain
jmp .notfound
.foundit
mov byte[ebx],0EAh
mov byte[ebx+1],0EAh
.notfound
mov al,[xa]
test byte[sndrot],01h
jz .n
mov al,[xa+1]
.n
ret
; Sound Reg #4
reg2143r:
cmp byte[spcon],0
je .nosound
inc dword[SPC700read]
mov al,[reg4read]
mov byte[spcnumread],0
ret
.nosound
; Find for D0
mov ebx,esi
mov al,3
.tryagain
cmp byte[ebx],0D0h
je .foundit
inc ebx
dec al
jnz .tryagain
jmp .notfound
.foundit
mov byte[ebx],0EAh
mov byte[ebx+1],0EAh
.notfound
mov al,[xa+1]
ret
reg2144r:
xor al,al
ret
; WRAM Read
reg2180r:
mov ebx,[wramrwadr]
add ebx,[wramdata]
mov al,[ebx]
inc dword[wramrwadr]
and dword[wramrwadr],01FFFFh
ret
; Joystick Data for controller 1 and 2
reg4016r:
xor al,al
test dword[JoyANow],80000000h
jz .noal
mov al,1
.noal
rol dword[JoyANow],1
ret
NEWSYM MultiTap, db 0
; Joystick Data for controller 2 and 4
reg4017r:
cmp byte[snesmouse],0
jne .nomultitap
cmp byte[MultiTap],1
je .multitap
.nomultitap
xor al,al
test dword[JoyBNow],80000000h
jz .noal
mov al,1
.noal
rol dword[JoyBNow],1
ret
.multitap
test byte[MultiTapStat],1
jz .no1
mov al,0FFh
ret
.no1
test byte[MultiTapStat],80h
jz .contr45
xor al,al
test dword[JoyBNow],80000000h
jz .nojb
or al,01h
.nojb
test dword[JoyCNow],80000000h
jz .nojc
or al,02h
.nojc
rol dword[JoyBNow],1
rol dword[JoyCNow],1
ret
.contr45
xor al,al
test dword[JoyDNow],80000000h
jz .nojd
or al,1
.nojd
test dword[JoyENow],80000000h
jz .noje
or al,02h
.noje
rol dword[JoyDNow],1
rol dword[JoyENow],1
ret
reg420Ar:
reg420Br:
reg420Cr:
reg420Dr:
reg420Er:
reg420Fr:
xor al,al
ret
; NMI Check Register
reg4210r:
mov al,[NMIEnab]
cmp byte[curnmi],0
jne .nmi
mov byte[NMIEnab],01h
.nmi
mov byte[curnmi],0
ret
; Video IRQ Register
reg4211r:
mov al,[irqon]
mov byte[irqon],0
cmp dh,[cycphb]
jae .nohblank
or al,40h
.nohblank
ret
; H/V Blank Flag & Joystick Controller Enable Flag
; bit 7 = vblank, 0=out,1=in, bit 6 = hblank, 0=out,1=in, bit 0 = joystick on
reg4212r:
xor al,al
cmp byte[joycontren],25
jb .nojoyc
.yesjoy
mov al,1
.nojoyc
inc byte[joycontren]
cmp byte[joycontren],50
jne .n
mov byte[joycontren],0
.n
cmp byte[debuggeron],1
je .debugger
mov bx,[resolutn]
sub bx,[Reg4212hack]
inc bx
cmp word[curypos],bx
jb .novbl
mov bx,[totlines]
dec bx
cmp word[curypos],bx
jae .novbl
or al,80h
; jmp .nohblank
.novbl
cmp dh,[cycphb]
jae .nohblank
or al,40h
.nohblank
test byte[INTEnab],01h
jz .nojoy
mov bx,[resolutn]
add bx,2
cmp word[curypos],bx
jne .nojoy
cmp dh,5
ja .nojoy
ret
.nojoy
ret
.debugger
debblah2:
push edx
mov dh,[pdh]
mov bx,[resolutn]
sub bx,[Reg4212hack]
inc bx
cmp word[curypos],bx
jb .novbl
mov bx,[totlines]
dec bx
cmp word[curypos],bx
jae .novbl
or al,80h
; jmp .nohblank
.novbl
cmp dh,[cycphb]
jae .nohblank
or al,40h
.nohblank
test byte[INTEnab],01h
jz .nojoy
mov bx,[resolutn]
add bx,2
cmp word[curypos],bx
jne .nojoy
cmp dh,5
ja .nojoy
pop edx
ret
.nojoy
pop edx
ret
mov bx,[resolutn]
inc bx
cmp word[curypos],bx
jb .novbl2
or al,80h
jmp .nohblank2
.novbl2
mov bl,[pdh]
cmp bl,[cycphb]
jae .nohblank2
or al,40h
.nohblank2
test byte[INTEnab],01h
jz .nojoy2
mov bx,[resolutn]
add bx,2
cmp word[curypos],bx
jne .nojoy2
cmp byte[pdh],5
ja .nojoy
; or al,01h
ret
.nojoy2
ret
; Programmable I/O port
reg4213r:
; mov al,[mode7A]
; xor al,al
; mov al,0FFh
ret
; Quotent of Divide Result (Low)
reg4214r:
mov al,[divres]
ret
; Quotent of Divide Result (High)
reg4215r:
mov al,[divres+1]
ret
; Product of Multiplication Result or Remainder of Divide Result (Low)
reg4216r:
mov al,[multres]
ret
; Product of Multiplication Result or Remainder of Divide Result (High)
reg4217r:
mov al,[multres+1]
ret
; Joystick 1 Low
; bit7=X,bit6=Y,bit5=L,bit4=R
reg4218r:
mov al,[JoyAOrig+2]
ret
; Joystick 1 High
; bit7=A,bit6=B,bit5=Sel,bit4=Start,bit3=up,bit2=down,bit1=left,bit0=right
reg4219r:
mov al,[JoyAOrig+3]
ret
; Joystick 2 Low
reg421Ar:
mov al,[JoyBOrig+2]
ret
; Joystick 2 High
reg421Br:
mov al,[JoyBOrig+3]
ret
; Joystick 3 Low
reg421Cr:
mov al,[JoyDOrig+2]
ret
; Joystick 3 High
reg421Dr:
mov al,[JoyDOrig+3]
ret
; Joystick 4 Low
reg421Er:
mov al,[JoyCOrig+2]
ret
; Joystick 4 High
reg421Fr:
mov al,[JoyCOrig+3]
ret
; DMA Reader
reg43XXr:
xor ebx,ebx
mov bx,cx
sub bx,4300h
mov al,[dmadata+ebx]
ret
regINVALID: ; Invalid Register
cmp cx,2000h
je .cleared
mov al,ch
cmp byte[SPC7110Enable],0
je .nospc7110
.cleared
xor al,al
.nospc7110
; mov byte[debstop3],1
ret
mov al,[previdmode]
mov ah,0
int 10h
mov byte[invalid],1
mov [invreg],cx
mov ah,9
mov edx,.invalidreg
int 21h
xor eax,eax
mov ax,[invreg]
call printhex
mov ah,2
mov dl,13
int 21h
mov ah,2
mov dl,10
int 21h
mov eax,[numinst] ;Temporary
call printnum
jmp DosExit
.invalidreg db 'Invalid Read Register : $'
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -