📄 makev16b.asm
字号:
jz near .noback1
mov byte[winon],0
test word[winenabm],0001h
jz near .nobackwin1
test word[winenabm],0100h
jnz near .nobackwin1
mov al,[winbg1en]
call makewindow
cmp byte[winon],0FFh
je near .noback1
.nobackwin1
procmode716b [bg1scroly],[bg1scrolx],1
.noback1
; do objects
test byte[scrndis],10h
jnz near .nosprites2
test word[scrnon],1010h
jz near .nosprites2
cmp byte[winonsp],0FFh
je .nosprites2
xor ebx,ebx
mov bl,[curypos]
mov cl,[sprleftpr1+ebx]
cmp byte[sprprifix],0
je .nosprprio3
mov cl,[sprlefttot+ebx]
.nosprprio3
cmp cl,0
je .nosprites2
mov ebp,1
call drawsprites16b
.nosprites2
test byte[interlval],40h
jz near .noback0b
test byte[scrndis],01h
jnz near .noback0b
cmp byte[extbgdone],0
jne near .noback0b
; do background 1
test word[scrnon],0101h
jz near .noback0b
mov byte[winon],0
test word[winenabm],0002h
jz near .nobackwin0b
test word[winenabm],0200h
jnz near .nobackwin0b
mov al,[winbg1en]
call makewindow
cmp byte[winon],0FFh
je near .noback0b
.nobackwin0b
mov byte[extbgdone],1
procmode716bextbg [bg1scroly],[bg1scrolx],1
.noback0b
; mode 7 extbg
test byte[interlval],40h
jz near .noback2
cmp byte[extbgdone],0
je near .noback2
test byte[scrndis],01h
jnz near .noback2
; do background 1
mov byte[winon],0
test word[winenabm],0001h
jz near .nobackwin2
test word[winenabm],0100h
jnz near .nobackwin2
mov al,[winbg1en]
call makewindow
cmp byte[winon],0FFh
je near .noback2
.nobackwin2
procmode716bextbg2 [bg1scroly],[bg1scrolx],1
.noback2
; do objects
test byte[scrndis],10h
jnz near .nosprites3
test word[scrnon],1010h
jz near .nosprites3
cmp byte[winonsp],0FFh
je .nosprites3
xor ebx,ebx
mov bl,[curypos]
mov cl,[sprleftpr2+ebx]
cmp byte[sprprifix],0
je .nosprprio4
mov cl,[sprlefttot+ebx]
.nosprprio4
cmp cl,0
je .nosprites3
mov ebp,2
call drawsprites16b
.nosprites3
; do objects
test byte[scrndis],10h
jnz near .nosprites4
test word[scrnon],1010h
jz near .nosprites4
cmp byte[winonsp],0FFh
je .nosprites4
xor ebx,ebx
mov bl,[curypos]
mov cl,[sprleftpr3+ebx]
cmp byte[sprprifix],0
je .nosprprio5
mov cl,[sprlefttot+ebx]
.nosprprio5
cmp cl,0
je .nosprites4
mov ebp,3
call drawsprites16b
.nosprites4
pop ebp
pop edx
pop ebx
pop edi
pop esi
xor eax,eax
xor ecx,ecx
ret
;*******************************************************
; Clear Backarea, 16-bit mode
;*******************************************************
NEWSYM clearback16b
test byte[scaddtype],00100000b
jz near .noaddition
test byte[scaddtype],10000000b
jnz near .noaddition
mov dx,[cgram]
mov ax,dx
and ax,001Fh
add al,[coladdr]
cmp al,01Fh
jb .noadd
mov al,01Fh
.noadd
mov cl,[vidbright]
mul cl
mov cl,15
div cl
xor ah,ah
mov cl,[vesa2_rpos]
shl ax,cl
mov bx,ax
mov ax,dx
shr ax,5
and ax,001Fh
add al,[coladdg]
cmp al,01Fh
jb .noaddb
mov al,01Fh
.noaddb
mov cl,[vidbright]
mul cl
mov cl,15
div cl
xor ah,ah
mov cl,[vesa2_gpos]
shl ax,cl
add bx,ax
mov ax,dx
shr ax,10
and ax,001Fh
add al,[coladdb]
cmp al,01Fh
jb .noaddc
mov al,01Fh
.noaddc
mov cl,[vidbright]
mul cl
mov cl,15
div cl
xor ah,ah
mov cl,[vesa2_bpos]
shl ax,cl
add bx,ax
mov ax,bx
shl eax,16
mov ax,bx
mov edi,[curvidoffset]
; cmp byte[FPUCopy],1
; je .dofpuclear
mov ecx,128
rep stosd
xor eax,eax
ret
.noaddition
mov edi,[curvidoffset]
mov ax,[pal16b]
shl eax,16
mov ax,[pal16b]
; cmp byte[FPUCopy],1
; je .dofpuclear
mov ecx,128
rep stosd
xor eax,eax
ret
.dofpuclear
mov ecx,32
call FPUZero
xor eax,eax
ret
;*******************************************************
; Set palette 16bit
;*******************************************************
NEWSYM setpalall
cmp byte[V8Mode],1
jne .noveg
call doveg
.noveg
xor esi,esi
mov byte[colleft16b],0
.loopa
mov dx,[cgram+esi]
mov [prevpal+esi],dx
mov ax,dx
and al,01Fh
mov cl,[vidbright]
mul cl
mov cl,15
div cl
xor ah,ah
mov cl,[vesa2_rpos]
xor bx,bx
shl ax,cl
add bx,ax
mov ax,dx
shr ax,5
and al,01Fh
mov cl,[vidbright]
mul cl
mov cl,15
div cl
xor ah,ah
mov cl,[vesa2_gpos]
shl ax,cl
add bx,ax
mov ax,dx
shr ax,10
and al,01Fh
mov cl,[vidbright]
mul cl
mov cl,15
div cl
xor ah,ah
mov cl,[vesa2_bpos]
shl ax,cl
add bx,ax
cmp bx,0
jne .col0
cmp byte[vidbright],0
je .col0
or bx,0000000000100000b
.col0
mov ax,bx
mov [pal16b+esi*2],bx
and bx,[vesa2_clbit]
mov [pal16bcl+esi*2],bx
xor ax,0FFFFh
and ax,[vesa2_clbit]
mov [pal16bxcl+esi*2],ax
add esi,2
inc byte[colleft16b]
jnz near .loopa
mov al,[vidbright]
mov [prevbright],al
cmp byte[V8Mode],1
jne .noveg2
call dovegrest
.noveg2
ret
NEWSYM colleft16b, db 0
NEWSYM setpalette16b
cmp byte[gammalevel16b],0
jne near setpalette16bgamma
cmp byte[V8Mode],1
jne .noveg
call doveg
.noveg
mov al,[vidbright]
cmp al,[prevbright]
jne near setpalall
cmp byte[cgmod],0
je near .skipall
mov byte[cgmod],0
xor esi,esi
mov byte[colleft16b],0
.loopa
mov dx,[cgram+esi]
cmp [prevpal+esi],dx
je near .skipa
mov [prevpal+esi],dx
mov ax,dx
and al,01Fh
mov cl,[vidbright]
mul cl
mov cl,15
div cl
xor ah,ah
mov cl,[vesa2_rpos]
xor bx,bx
shl ax,cl
add bx,ax
mov ax,dx
shr ax,5
and al,01Fh
mov cl,[vidbright]
mul cl
mov cl,15
div cl
xor ah,ah
mov cl,[vesa2_gpos]
shl ax,cl
add bx,ax
mov ax,dx
shr ax,10
and al,01Fh
mov cl,[vidbright]
mul cl
mov cl,15
div cl
xor ah,ah
mov cl,[vesa2_bpos]
shl ax,cl
add bx,ax
cmp bx,0
jne .col0
cmp byte[vidbright],0
je .col0
or bx,0000000000100000b
.col0
mov [pal16b+esi*2],bx
mov ax,bx
and bx,[vesa2_clbit]
mov [pal16bcl+esi*2],bx
xor ax,0FFFFh
and ax,[vesa2_clbit]
mov [pal16bxcl+esi*2],ax
.skipa
add esi,2
inc byte[colleft16b]
jnz near .loopa
.skipall
cmp byte[V8Mode],1
jne .noveg2
call dovegrest
.noveg2
ret
;pal16b times 256 dw 0
;pal16bcl times 256 dw 0 ; w/ cl bit
;pal16bclha times 256 dw 0 ; w/ cl bit
;pal16bxcl times 256 dw 0FFFFh ; xored w/ cl bit
NEWSYM setpalallgamma
xor esi,esi
mov byte[colleft16b],0
.loopa
mov dx,[cgram+esi]
mov [prevpal+esi],dx
mov ax,dx
and al,01Fh
add al,[gammalevel16b]
cmp al,31
jbe .norr
mov al,31
.norr
mov cl,[vidbright]
mul cl
mov cl,15
div cl
xor ah,ah
mov cl,[vesa2_rpos]
xor bx,bx
shl ax,cl
add bx,ax
mov ax,dx
shr ax,5
and al,01Fh
add al,[gammalevel16b]
cmp al,31
jbe .nogr
mov al,31
.nogr
mov cl,[vidbright]
mul cl
mov cl,15
div cl
xor ah,ah
mov cl,[vesa2_gpos]
shl ax,cl
add bx,ax
mov ax,dx
shr ax,10
and al,01Fh
add al,[gammalevel16b]
cmp al,31
jbe .nobr
mov al,31
.nobr
mov cl,[vidbright]
mul cl
mov cl,15
div cl
xor ah,ah
mov cl,[vesa2_bpos]
shl ax,cl
add bx,ax
cmp bx,0
jne .col0
cmp byte[vidbright],0
je .col0
or bx,0000000000100000b
.col0
mov ax,bx
mov [pal16b+esi*2],bx
and bx,[vesa2_clbit]
mov [pal16bcl+esi*2],bx
xor ax,0FFFFh
and ax,[vesa2_clbit]
mov [pal16bxcl+esi*2],ax
add esi,2
inc byte[colleft16b]
jnz near .loopa
mov al,[vidbright]
mov [prevbright],al
ret
NEWSYM setpalette16bgamma
mov al,[vidbright]
cmp al,[prevbright]
jne near setpalallgamma
cmp byte[cgmod],0
je near .skipall
mov byte[cgmod],0
xor esi,esi
mov byte[colleft16b],0
.loopa
mov dx,[cgram+esi]
cmp [prevpal+esi],dx
je near .skipa
mov [prevpal+esi],dx
mov ax,dx
and al,01Fh
add al,[gammalevel16b]
cmp al,31
jbe .norb
mov al,31
.norb
mov cl,[vidbright]
mul cl
mov cl,15
div cl
xor ah,ah
mov cl,[vesa2_rpos]
xor bx,bx
shl ax,cl
add bx,ax
mov ax,dx
shr ax,5
and al,01Fh
add al,[gammalevel16b]
cmp al,31
jbe .norr
mov al,31
.norr
mov cl,[vidbright]
mul cl
mov cl,15
div cl
xor ah,ah
mov cl,[vesa2_gpos]
shl ax,cl
add bx,ax
mov ax,dx
shr ax,10
and al,01Fh
add al,[gammalevel16b]
cmp al,31
jbe .norg
mov al,31
.norg
mov cl,[vidbright]
mul cl
mov cl,15
div cl
xor ah,ah
mov cl,[vesa2_bpos]
shl ax,cl
add bx,ax
cmp bx,0
jne .col0
cmp byte[vidbright],0
je .col0
or bx,0000000000100000b
.col0
mov [pal16b+esi*2],bx
mov ax,bx
and bx,[vesa2_clbit]
mov [pal16bcl+esi*2],bx
xor ax,0FFFFh
and ax,[vesa2_clbit]
mov [pal16bxcl+esi*2],ax
.skipa
add esi,2
inc byte[colleft16b]
jnz near .loopa
.skipall
ret
;*******************************************************
; Processes & Draws 4-bit sprites
;*******************************************************
NEWSYM drawsprites16b
cmp byte[sprprifix],1
je near drawsprites16bprio
test byte[cwinenabm],10h
jz .drawnowin
cmp byte[winonsp],0
jne near drawsprites16bwinon
.drawnowin
mov esi,[currentobjptr]
mov edi,[curvidoffset]
xor ebx,ebx
xor eax,eax
.loopobj
test byte[esi+7],20h
jnz near .drawspriteflipx
push esi
mov bx,[esi]
mov ch,[esi+6]
mov esi,[esi+2]
shl bx,1
mov al,[esi]
test al,0Fh
jz .skipa
add al,ch
mov edx,[pal16b+eax*4]
mov [edi+ebx-16],dx
.skipa
mov al,[esi+1]
test al,0Fh
jz .skipb
add al,ch
mov edx,[pal16b+eax*4]
mov [edi+ebx-14],dx
.skipb
mov al,[esi+2]
test al,0Fh
jz .skipc
add al,ch
mov edx,[pal16b+eax*4]
mov [edi+ebx-12],dx
.skipc
mov al,[esi+3]
test al,0Fh
jz .skipd
add al,ch
mov edx,[pal16b+eax*4]
mov [edi+ebx-10],dx
.skipd
mov al,[esi+4]
test al,0Fh
jz .skipe
add al,ch
mov edx,[pal16b+eax*4]
mov [edi+ebx-8],dx
.skipe
mov al,[esi+5]
test al,0Fh
jz .skipf
add al,ch
mov edx,[pal16b+eax*4]
mov [edi+ebx-6],dx
.skipf
mov al,[esi+6]
test al,0Fh
jz .skipg
add al,ch
mov edx,[pal16b+eax*4]
mov [edi+ebx-4],dx
.skipg
mov al,[esi+7]
test al,0Fh
jz .skiph
add al,ch
mov edx,[pal16b+eax*4]
mov [edi+ebx-2],dx
.skiph
pop esi
add esi,8
dec cl
jnz near .loopobj
mov [currentobjptr],esi
ret
.drawspriteflipx
push esi
mov bx,[esi]
mov ch,[esi+6]
mov esi,[esi+2]
shl bx,1
mov al,[esi+7]
test al,0Fh
jz .skipa2
add al,ch
mov edx,[pal16b+eax*4]
mov [edi+ebx-16],dx
.skipa2
mov al,[esi+6]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -