📄 regsw.inc
字号:
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 + -