📄 regsw.inc
字号:
mov bl,al
shr bl,2
shl bx,11
mov [bg1ptr],bx
mov [bg1ptrb],bx
mov [bg1ptrc],bx
mov [bg1ptrd],bx
mov dword[bg1ptrx],0
mov dword[bg1ptry],0
mov bl,al
and bl,00000011b
mov [bg1scsize],bl
cmp bl,1
jne .skipa
add word[bg1ptrb],800h
add word[bg1ptrd],800h
mov dword[bg1ptrx],800h
.skipa
cmp bl,2
jne .skipb
add word[bg1ptrc],800h
add word[bg1ptrd],800h
mov dword[bg1ptry],800h
.skipb
cmp bl,3
jne .skipc
add word[bg1ptrb],800h
add word[bg1ptrc],1000h
add word[bg1ptrd],1800h
mov dword[bg1ptrx],800h
mov dword[bg1ptry],1000h
.skipc
ret
; BG2 VRAM location register
reg2108w:
xor ebx,ebx
mov bl,al
shr bl,2
shl bx,11
mov [bg2ptr],bx
mov [bg2ptrb],bx
mov [bg2ptrc],bx
mov [bg2ptrd],bx
mov dword[bg2ptrx],0
mov dword[bg2ptry],0
mov bl,al
and bl,00000011b
mov [bg2scsize],bl
cmp bl,1
jne .skipa
add word[bg2ptrb],800h
add word[bg2ptrd],800h
mov dword[bg2ptrx],800h
.skipa
cmp bl,2
jne .skipb
add word[bg2ptrc],800h
add word[bg2ptrd],800h
mov dword[bg2ptry],800h
.skipb
cmp bl,3
jne .skipc
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 register
reg2109w:
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 register
reg210Aw:
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 register
reg210Bw:
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 register
reg210Cw:
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
ret
; BG1 horizontal scroll register
reg210Dw:
mov bl,byte[bg1scrolx+1]
mov byte[bg1scrolx],bl
mov byte[bg1scrolx+1],al
ret
; BG1 vertical scroll register
reg210Ew:
mov bl,byte[bg1scroly+1]
add bl,[bgscroltemp]
mov byte[bg1scroly],bl
mov byte[bg1scroly+1],al
ret
bgscroltemp db 0
; BG2 horizontal scroll register
reg210Fw:
mov bl,byte[bg2scrolx+1]
mov byte[bg2scrolx],bl
mov byte[bg2scrolx+1],al
ret
; BG2 vertical scroll register
reg2110w:
mov bl,byte[bg2scroly+1]
add bl,[bgscroltemp]
mov byte[bg2scroly],bl
mov byte[bg2scroly+1],al
ret
; BG3 horizontal scroll register
reg2111w:
mov bl,byte[bg3scrolx+1]
mov byte[bg3scrolx],bl
mov byte[bg3scrolx+1],al
ret
; BG3 vertical scroll register
reg2112w:
mov bl,byte[bg3scroly+1]
add bl,[bgscroltemp]
mov byte[bg3scroly],bl
mov byte[bg3scroly+1],al
ret
; BG4 horizontal scroll register
reg2113w:
mov bl,byte[bg4scrolx+1]
mov byte[bg4scrolx],bl
mov byte[bg4scrolx+1],al
ret
; BG4 vertical scroll register
reg2114w:
mov bl,byte[bg4scroly+1]
add bl,[bgscroltemp]
mov byte[bg4scroly],bl
mov byte[bg4scroly+1],al
ret
; Video port control
reg2115w:
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 byte[vramaddr],al
shl word[vramaddr],1
mov byte[vramread],0
ret
; Video port address (High)
reg2117w:
shr word[vramaddr],1
mov byte[vramaddr+1],al
shl word[vramaddr],1
mov byte[vramread],0
xor ebx,ebx
mov bx,[vramaddr]
add ebx,[vram]
mov bl,[ebx]
mov [vramread],bl
xor ebx,ebx
mov bx,[vramaddr]
add ebx,[vram]
mov bl,[ebx+1]
mov [vramread2],bl
ret
; Video port data (Low)
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
ret
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
ret
reg2118inc8:
push ecx
xor ecx,ecx
mov ebx,[vramaddr]
mov cl,[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
ret
reg2118inc8inc:
push ecx
xor ecx,ecx
mov ebx,[vramaddr]
mov cl,[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
ret
reg2119:
cmp dword[vramaddr],0E000h
jb .skip
mov byte[debstop],1
.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
ret
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
ret
reg2119inc8:
push ecx
xor ecx,ecx
mov ebx,[vramaddr]
mov cl,[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
ret
reg2119inc8inc:
push ecx
xor ecx,ecx
mov ebx,[vramaddr]
mov cl,[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 register
reg211Aw:
mov [mode7set],al
ret
NEWSYM multchange, db 1
; COS (COSINE) rotate angle / X Expansion
reg211Bw:
mov bl,[mode7A+1]
mov [mode7A],bl
mov [mode7A+1],al
mov byte[multchange],1
ret
; SIN (SIN) rotate angle / X Expansion & Complement Multiplication Start
reg211Cw:
mov bl,[mode7B+1]
mov [mode7B],bl
mov [mode7B+1],al
mov byte[multchange],1
ret
; SIN (SIN) rotate angle / Y Expansion
reg211Dw:
mov bl,[mode7C+1]
mov [mode7C],bl
mov [mode7C+1],al
ret
; COS (COSINE) rotate angle / Y Expansion
reg211Ew:
mov bl,[mode7D+1]
mov [mode7D],bl
mov [mode7D+1],al
ret
; Center position X (13-bit data only)
reg211Fw:
mov bl,[mode7X0+1]
mov [mode7X0],bl
mov [mode7X0+1],al
ret
; Center position Y (13-bit data only)
reg2120w:
mov bl,[mode7Y0+1]
mov [mode7Y0],bl
mov [mode7Y0+1],al
ret
; Colour # (or palette) selection register
reg2121w:
xor bh,bh
mov bl,al
shl bx,1
mov [cgaddr],bx
and word[cgaddr],01FFh
ret
; Colour data register
reg2122w:
xor ebx,ebx
mov bx,[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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -