📄 makev16b.asm
字号:
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_m7],[bg1scrolx_m7],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_m7],[bg1scrolx_m7],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] mov ecx,128 rep stosd xor eax,eax ret.noaddition mov edi,[curvidoffset] mov ax,[pal16b] shl eax,16 mov ax,[pal16b] mov ecx,128 rep stosd 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 retSECTION .bssNEWSYM colleft16b, resb 1SECTION .textNEWSYM 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 retNEWSYM 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 retNEWSYM 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] test al,0Fh jz .skipb2 add al,ch mov edx,[pal16b+eax*4] mov [edi+ebx-14],dx.skipb2 mov al,[esi+5] test al,0Fh jz .skipc2 add al,ch mov edx,[pal16b+eax*4] mov [edi+ebx-12],dx.skipc2 mov al,[esi+4] test al,0Fh jz .skipd2 add al,ch mov edx,[pal16b+eax*4] mov [edi+ebx-10],dx.skipd2 mov al,[esi+3] test al,0Fh jz .skipe2 add al,ch mov edx,[pal16b+eax*4] mov [edi+ebx-8],dx.skipe2 mov al,[esi+2] test al,0Fh jz .skipf2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -