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

📄 regsw.inc

📁 linux下的任天堂模拟器代码。供大家参考。
💻 INC
📖 第 1 页 / 共 3 页
字号:
    add word[bg2ptrb],800h    add word[bg2ptrc],1000h    add word[bg2ptrd],1800h    mov dword[bg2ptrx],800h    mov dword[bg2ptry],1000h.skipc    ret; BG3 VRAM location registerreg2109w:    xor ebx,ebx    mov bl,al    shr bl,2    shl bx,11    mov [bg3ptr],bx    mov [bg3ptrb],bx    mov [bg3ptrc],bx    mov [bg3ptrd],bx    mov dword[bg3ptrx],0    mov dword[bg3ptry],0    mov bl,al    and bl,00000011b    mov [bg3scsize],bl    cmp bl,1    jne .skipa    add word[bg3ptrb],800h    add word[bg3ptrd],800h    mov dword[bg3ptrx],800h.skipa    cmp bl,2    jne .skipb    add word[bg3ptrc],800h    add word[bg3ptrd],800h    mov dword[bg3ptry],800h.skipb    cmp bl,3    jne .skipc    add word[bg3ptrb],800h    add word[bg3ptrc],1000h    add word[bg3ptrd],1800h    mov dword[bg3ptrx],800h    mov dword[bg3ptry],1000h.skipc    ret; BG4 VRAM location registerreg210Aw:    xor ebx,ebx    mov bl,al    shr bl,2    shl bx,11    mov [bg4ptr],bx    mov [bg4ptrb],bx    mov [bg4ptrc],bx    mov [bg4ptrd],bx    mov dword[bg4ptrx],0    mov dword[bg4ptry],0    mov bl,al    and bl,00000011b    mov [bg4scsize],bl    cmp bl,1    jne .skipa    add word[bg4ptrb],800h    add word[bg4ptrd],800h    mov dword[bg4ptrx],800h.skipa    cmp bl,2    jne .skipb    add word[bg4ptrc],800h    add word[bg4ptrd],800h    mov dword[bg4ptry],800h.skipb    cmp bl,3    jne .skipc    add word[bg4ptrb],800h    add word[bg4ptrc],1000h    add word[bg4ptrd],1800h    mov dword[bg4ptrx],800h    mov dword[bg4ptry],1000h.skipc    ret; BG1 & BG2 VRAM location registerreg210Bw:    xor ebx,ebx    mov bl,al    and bl,0Fh    shl bx,13    mov [bg1objptr],bx    mov bl,al    shr bl,4    shl bx,13    mov [bg2objptr],bx    ret; BG3 & BG4 VRAM location registerreg210Cw:    xor ebx,ebx    mov bl,al    and bl,0Fh    shl bx,13    mov [bg3objptr],bx    mov bl,al    shr bl,4    shl bx,13    mov [bg4objptr],bx    retsection .dataNEWSYM bgscrolPrev, db 0NEWSYM bg1scrolx_m7, dw 0NEWSYM bg1scroly_m7, dw 0section .text%macro UpdateScrollRegX 1    mov bh,al    mov bl,[bgscrolPrev]    mov [bgscrolPrev],al    shl ebx,13    mov bh,[%1+1]    shl bh,5    shr ebx,13    mov [%1],bx%endmacro%macro UpdateScrollRegY 1    mov bl,[bgscrolPrev]    mov bh,al    mov [%1],bx    mov [bgscrolPrev],al%endmacro; BG1 horizontal scroll registerreg210Dw:    UpdateScrollRegX bg1scrolx;    mov bl,[m7byte]    mov [bg1scrolx_m7],bx;    mov [m7byte],al    ret; BG1 vertical scroll registerreg210Ew:    UpdateScrollRegY bg1scroly;    mov bl,[m7byte]    mov [bg1scroly_m7],bx;    mov [m7byte],al    ret; BG2 horizontal scroll registerreg210Fw:    UpdateScrollRegX bg2scrolx    ret; BG2 vertical scroll registerreg2110w:    UpdateScrollRegY bg2scroly    ret; BG3 horizontal scroll registerreg2111w:    UpdateScrollRegX bg3scrolx    ret; BG3 vertical scroll registerreg2112w:    UpdateScrollRegY bg3scroly    ret; BG4 horizontal scroll registerreg2113w:    UpdateScrollRegX bg4scrolx    ret; BG4 vertical scroll registerreg2114w:    UpdateScrollRegY bg4scroly    ret; Video port controlreg2115w:    and al,11111111b    mov [vraminctype],al    mov bl,al    and bl,00000011b    cmp bl,0    jne .skip1    mov word[addrincr],2.skip1    cmp bl,1    jne .skip2    mov word[addrincr],64.skip2    cmp bl,2    jne .skip3    mov word[addrincr],256.skip3    cmp bl,3    jne .skip4    mov word[addrincr],256.skip4    mov bl,al    mov byte[vramincby8on],0    and bl,00001100b    jz near .noincby8    mov byte[vramincby8on],1    cmp bl,4    jne .nextinc8    mov byte[vramincby8left],64-1    mov byte[vramincby8totl],5    mov word[vramincby8ptri],65535-511    mov word[vramincby8var],256+128+64.nextinc8    cmp bl,8    jne .nextinc8b    mov byte[vramincby8left],128-1    mov byte[vramincby8totl],6    mov word[vramincby8ptri],65535-1023    mov word[vramincby8var],512+256+128.nextinc8b    cmp bl,12    jne .nextinc8c    mov byte[vramincby8left],256-1    mov byte[vramincby8totl],7    mov word[vramincby8ptri],65535-2047    mov word[vramincby8var],1024+512+256.nextinc8c    mov ebx,[regptw]    test al,80h    jz .from2118    mov dword[ebx+2118h*4],reg2118inc8    mov dword[ebx+2119h*4],reg2119inc8inc    mov byte[vramincr],0    jmp .from2119.from2118    mov dword[ebx+2118h*4],reg2118inc8inc    mov dword[ebx+2119h*4],reg2119inc8    mov byte[vramincr],1.from2119    ret.noincby8    mov ebx,[regptw]    test al,80h    jz .from2118b    mov dword[ebx+2118h*4],reg2118    mov dword[ebx+2119h*4],reg2119inc    mov byte[vramincr],0    jmp .from2119b.from2118b    mov dword[ebx+2118h*4],reg2118inc    mov dword[ebx+2119h*4],reg2119    mov byte[vramincr],1.from2119b    ret; Video port address (Low)reg2116w:    shr word[vramaddr],1    mov [vramaddr],al    shl word[vramaddr],1    mov byte[vramread],0    ret; Video port address (High)reg2117w:    shr word[vramaddr],1    mov [vramaddr+1],al    shl word[vramaddr],1    mov byte[vramread],0    movzx ebx,word[vramaddr]    add ebx,[vram]    mov bl,[ebx]    mov [vramread],bl    movzx ebx,word[vramaddr]    add ebx,[vram]    mov bl,[ebx+1]    mov [vramread2],bl    ret; Video port data (Low)NEWSYM reg2118    mov ebx,[vramaddr]    mov [vrama+ebx],al    shr ebx,4    mov byte[vidmemch2+ebx],1    mov byte[vidmemch4+ebx],1    mov byte[vidmemch8+ebx],1    retNEWSYM reg2118inc    mov ebx,[vramaddr]    mov [vrama+ebx],al    shr ebx,4    mov byte[vidmemch2+ebx],1    mov byte[vidmemch4+ebx],1    mov byte[vidmemch8+ebx],1    mov ebx,[addrincr]    add [vramaddr],bx    retNEWSYM reg2118inc8    push ecx    mov ebx,[vramaddr]    movzx ecx,byte[vramincby8left]    and ebx,ecx    shl ebx,3    push eax    mov eax,[vramaddr]    and ax,[vramincby8var]    mov cl,[vramincby8totl]    shr eax,cl    add ebx,eax    mov eax,[vramaddr]    and ax,[vramincby8ptri]    add ebx,eax    pop eax    pop ecx    add ebx,[vram];    cmp [ebx],al;    je .nochange2    mov [ebx],al    sub ebx,[vram]    shr ebx,4    mov byte[vidmemch2+ebx],1    mov byte[vidmemch4+ebx],1    mov byte[vidmemch8+ebx],1.nochange2    retNEWSYM reg2118inc8inc    push ecx    mov ebx,[vramaddr]    movzx ecx,byte[vramincby8left]    and ebx,ecx    shl ebx,3    push eax    mov eax,[vramaddr]    and ax,[vramincby8var]    mov cl,[vramincby8totl]    shr eax,cl    add ebx,eax    mov eax,[vramaddr]    and ax,[vramincby8ptri]    add ebx,eax    pop eax    pop ecx    add ebx,[vram];    cmp [ebx],al;    je .nochange2    mov [ebx],al    sub ebx,[vram]    shr ebx,4    mov byte[vidmemch2+ebx],1    mov byte[vidmemch4+ebx],1    mov byte[vidmemch8+ebx],1.nochange2    mov ebx,[addrincr]    add [vramaddr],bx    retNEWSYM reg2119    cmp dword[vramaddr],0E000h    jb .skip%ifndef NO_DEBUGGER    mov byte[debstop],1%endif.skip    mov ebx,[vramaddr];    cmp [vrama+ebx+1],al;    je .nochange    mov [vrama+ebx+1],al    shr ebx,4    mov byte[vidmemch2+ebx],1    mov byte[vidmemch4+ebx],1    mov byte[vidmemch8+ebx],1.nochange    retNEWSYM reg2119inc    mov ebx,[vramaddr];    cmp [vrama+ebx+1],al;    je .nochange    mov [vrama+ebx+1],al    shr ebx,4    mov byte[vidmemch2+ebx],1    mov byte[vidmemch4+ebx],1    mov byte[vidmemch8+ebx],1.nochange    mov ebx,[addrincr]    add [vramaddr],bx    retNEWSYM reg2119inc8    push ecx    mov ebx,[vramaddr]    movzx ecx,byte[vramincby8left]    and ebx,ecx    shl ebx,3    push eax    mov eax,[vramaddr]    and ax,[vramincby8var]    mov cl,[vramincby8totl]    shr eax,cl    add ebx,eax    mov eax,[vramaddr]    and ax,[vramincby8ptri]    add ebx,eax    pop eax    pop ecx;    cmp [vrama+ebx+1],al;    je .nochange2    mov [vrama+ebx+1],al    shr ebx,4    mov byte[vidmemch2+ebx],1    mov byte[vidmemch4+ebx],1    mov byte[vidmemch8+ebx],1.nochange2    retNEWSYM reg2119inc8inc    push ecx    mov ebx,[vramaddr]    movzx ecx,byte[vramincby8left]    and ebx,ecx    shl ebx,3    push eax    mov eax,[vramaddr]    and ax,[vramincby8var]    mov cl,[vramincby8totl]    shr eax,cl    add ebx,eax    mov eax,[vramaddr]    and ax,[vramincby8ptri]    add ebx,eax    pop eax    pop ecx;    cmp [vrama+ebx+1],al;    je .nochange2    mov [vrama+ebx+1],al    shr ebx,4    mov byte[vidmemch2+ebx],1    mov byte[vidmemch4+ebx],1    mov byte[vidmemch8+ebx],1.nochange2    mov ebx,[addrincr]    add [vramaddr],bx    ret; MODE7 settings registerreg211Aw:    mov [mode7set],al    retSECTION .dataNEWSYM multchange, db 1NEWSYM m7byte, db 0SECTION .text%macro Mode7Regs 1    mov bl,[%1+1]    ;mov bl,[m7byte]    mov [%1],bl    mov [%1+1],al    ;mov [m7byte],al%endmacro; COS (COSINE) rotate angle / X Expansionreg211Bw:    Mode7Regs mode7A    mov byte[multchange],1    ret; SIN (SIN)    rotate angle / X Expansion & Complement Multiplication Startreg211Cw:    Mode7Regs mode7B    mov byte[multchange],1    ret; SIN (SIN)    rotate angle / Y Expansionreg211Dw:    Mode7Regs mode7C    ret; COS (COSINE) rotate angle / Y Expansionreg211Ew:    Mode7Regs mode7D    ret; Center position X (13-bit data only)reg211Fw:    Mode7Regs mode7X0    ret; Center position Y (13-bit data only)reg2120w:    Mode7Regs mode7Y0    ret; Colour # (or palette) selection registerreg2121w:    xor bh,bh    mov bl,al    shl bx,1    mov [cgaddr],bx    and word[cgaddr],01FFh    ret; Colour data registerreg2122w:    movzx ebx,word[cgaddr]    cmp [cgram+ebx],al    je .nomod    mov [cgram+ebx],al    mov byte[cgmod],1.nomod    inc word[cgaddr]    and word[cgaddr],01FFh    ret; Window mask settings register [W12SEL]reg2123w:    mov bl,al    and bl,0Fh    test bl,0Ah    jnz .nen1;    or bl,02h.nen1    mov [winbg1en],bl    mov bl,al    shr bl,4    test bl,0Ah    jnz .nen2;    or bl,02h.nen2    mov [winbg2en],bl    ret; Window mask settings register [W34SEL]reg2124w:    mov bl,al    and bl,0Fh    test bl,0Ah    jnz .nen1;    or bl,02h.nen1    mov [winbg3en],bl    mov bl,al    shr bl,4    test bl,0Ah    jnz .nen2;    or bl,02h.nen2    mov [winbg4en],bl    ret; Window mask settings register [WOBJSEL]reg2125w:    mov bl,al    and bl,0Fh    mov [winobjen],bl    mov bl,al

⌨️ 快捷键说明

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