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

📄 regs.inc

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 INC
📖 第 1 页 / 共 2 页
字号:

; 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 + -