📄 vidmacrb.mac
字号:
mov esi,[esi+2]
mov dl,[csprbit]
sprdrawa sprdrawpra2
pop esi
add esi,8
dec byte[csprprlft]
jnz near .loopobj
rol byte[csprbit],1
cmp byte[csprbit],1
je near .clearcsprmem
ret
.drawspriteflipx
mov bx,[esi]
push esi
mov ch,[esi+6]
mov dl,[esi+7]
xor eax,eax
and edx,03h
cmp edx,ebp
jne near .notpriof
cmp ch,12*16
jae near .transpobjf
mov esi,[esi+2]
mov cl,[csprbit]
sprdrawaf16b %3
pop esi
add esi,8
dec byte[csprprlft]
jnz near .loopobj
rol byte[csprbit],1
cmp byte[csprbit],1
je near .clearcsprmem
.endobj
ret
.transpobjf
mov esi,[esi+2]
mov cl,[csprbit]
sprdrawaf16b %1
pop esi
add esi,8
dec byte[csprprlft]
jnz near .loopobj
rol byte[csprbit],1
cmp byte[csprbit],1
je near .clearcsprmem
ret
.notpriof
mov esi,[esi+2]
mov dl,[csprbit]
sprdrawaf sprdrawpra2
pop esi
add esi,8
dec byte[csprprlft]
jnz near .loopobj
rol byte[csprbit],1
cmp byte[csprbit],1
je near .clearcsprmem
ret
.clearcsprmem
xor eax,eax
mov ecx,64
mov edi,sprpriodata+16
rep stosd
ret
.drawsingle
mov esi,[currentobjptr]
mov edi,[curvidoffset]
mov edx,ecx
and edx,0FFh
xor eax,eax
shl edx,3
sub edx,8
add edx,esi
mov esi,edx
xor ebx,ebx
.loopobj2
test byte[esi+7],20h
jnz near .drawspriteflipx2
mov bx,[esi]
push esi
mov ch,[esi+6]
mov esi,[esi+2]
cmp ch,12*16
jae near .transpobj2
sprdrawa16b %4
pop esi
sub esi,8
dec cl
jnz near .loopobj2
ret
.transpobj2
sprdrawa16b %2
pop esi
sub esi,8
dec cl
jnz near .loopobj2
ret
.drawspriteflipx2
mov bx,[esi]
push esi
mov ch,[esi+6]
mov esi,[esi+2]
cmp ch,12*16
jae near .transpobj2f
sprdrawaf16b %4
pop esi
sub esi,8
dec cl
jnz near .loopobj2
ret
.transpobj2f
sprdrawaf16b %2
pop esi
sub esi,8
dec cl
jnz near .loopobj2
ret
%endmacro
%macro sprdrawpra16bha 1
or eax,eax
jz %%skip
test byte[sprpriodata+ebx-%1+16],cl
jnz %%skip
add al,ch
mov edx,[transpbuf+32+ebx*2-%1*2]
mov eax,[pal16b+eax*4]
cmp dx,0
je %%noadd
and edx,[vesa2_clbit]
and eax,[vesa2_clbit]
add eax,edx
shr eax,1
%%noadd
mov [edi+ebx*2-%1*2],ax
or byte[sprpriodata+ebx-%1+16],cl
xor eax,eax
%%skip
%endmacro
%macro sprdrawprb16bha 1
or eax,eax
jz %%skip
add al,ch
mov edx,[transpbuf+32+ebx*2-%1*2]
mov eax,[pal16b+eax*4]
cmp dx,0
je %%noadd
and edx,[vesa2_clbit]
and eax,[vesa2_clbit]
add eax,edx
shr eax,1
%%noadd
mov [edi+ebx*2-%1*2],ax
xor eax,eax
%%skip
%endmacro
%macro sprdrawpraw16bha 1
or eax,eax
jz %%skip
test byte[sprpriodata+ebx-%1+16],cl
jnz %%skip
cmp byte[winspdata+ebx-%1+16],0
jne %%skip
add al,ch
mov edx,[transpbuf+32+ebx*2-%1*2]
mov eax,[pal16b+eax*4]
cmp dx,0
je %%noadd
and edx,[vesa2_clbit]
and eax,[vesa2_clbit]
add eax,edx
shr eax,1
%%noadd
mov [edi+ebx*2-%1*2],ax
or byte[sprpriodata+ebx-%1+16],cl
xor eax,eax
%%skip
%endmacro
%macro sprdrawprbw16bha 1
or eax,eax
jz %%skip
cmp byte[winspdata+ebx-%1+16],0
jne %%skip
add al,ch
mov edx,[transpbuf+32+ebx*2-%1*2]
mov eax,[pal16b+eax*4]
cmp dx,0
je %%noadd
and edx,[vesa2_clbit]
and eax,[vesa2_clbit]
add eax,edx
shr eax,1
%%noadd
mov [edi+ebx*2-%1*2],ax
xor eax,eax
%%skip
%endmacro
%macro sprdrawpra16bfa 1
or eax,eax
jz %%skip
test byte[sprpriodata+ebx-%1+16],cl
jnz %%skip
add al,ch
mov edx,[transpbuf+32+ebx*2-%1*2]
mov eax,[pal16bcl+eax*4]
and edx,[vesa2_clbit]
add edx,eax
shr edx,1
xor eax,eax
mov edx,[fulladdtab+edx*2]
mov [edi+ebx*2-%1*2],dx
or byte[sprpriodata+ebx-%1+16],cl
%%skip
%endmacro
%macro sprdrawprb16bfa 1
or eax,eax
jz %%skip
add al,ch
mov edx,[transpbuf+32+ebx*2-%1*2]
mov eax,[pal16bcl+eax*4]
and edx,[vesa2_clbit]
add edx,eax
shr edx,1
xor eax,eax
mov edx,[fulladdtab+edx*2]
mov [edi+ebx*2-%1*2],dx
%%skip
%endmacro
%macro sprdrawpraw16bfa 1
or eax,eax
jz %%skip
test byte[sprpriodata+ebx-%1+16],cl
jnz %%skip
cmp byte[winspdata+ebx-%1+16],0
jne %%skip
add al,ch
mov edx,[transpbuf+32+ebx*2-%1*2]
mov eax,[pal16bcl+eax*4]
and edx,[vesa2_clbit]
add edx,eax
shr edx,1
xor eax,eax
mov edx,[fulladdtab+edx*2]
mov [edi+ebx*2-%1*2],dx
or byte[sprpriodata+ebx-%1+16],cl
%%skip
%endmacro
%macro sprdrawprbw16bfa 1
or eax,eax
jz %%skip
cmp byte[winspdata+ebx-%1+16],0
jne %%skip
add al,ch
mov edx,[transpbuf+32+ebx*2-%1*2]
mov eax,[pal16bcl+eax*4]
and edx,[vesa2_clbit]
add edx,eax
shr edx,1
xor eax,eax
mov edx,[fulladdtab+edx*2]
mov [edi+ebx*2-%1*2],dx
%%skip
%endmacro
%macro sprdrawpra16bfs 1
or eax,eax
jz %%skip
test byte[sprpriodata+ebx-%1+16],cl
jnz %%skip
add al,ch
mov edx,[transpbuf+32+ebx*2-%1*2]
mov eax,[pal16bxcl+eax*4]
and edx,[vesa2_clbit]
add edx,eax
shr edx,1
xor eax,eax
mov edx,[fulladdtab+edx*2]
xor edx,0FFFFh
mov [edi+ebx*2-%1*2],dx
or byte[sprpriodata+ebx-%1+16],cl
%%skip
%endmacro
%macro sprdrawprb16bfs 1
or eax,eax
jz %%skip
add al,ch
mov edx,[transpbuf+32+ebx*2-%1*2]
mov eax,[pal16bxcl+eax*4]
and edx,[vesa2_clbit]
add edx,eax
shr edx,1
xor eax,eax
mov edx,[fulladdtab+edx*2]
xor edx,0FFFFh
mov [edi+ebx*2-%1*2],dx
%%skip
%endmacro
%macro sprdrawpraw16bfs 1
or eax,eax
jz %%skip
test byte[sprpriodata+ebx-%1+16],cl
jnz %%skip
cmp byte[winspdata+ebx-%1+16],0
jne %%skip
add al,ch
mov edx,[transpbuf+32+ebx*2-%1*2]
mov eax,[pal16bxcl+eax*4]
and edx,[vesa2_clbit]
add edx,eax
shr edx,1
xor eax,eax
mov edx,[fulladdtab+edx*2]
xor edx,0FFFFh
mov [edi+ebx*2-%1*2],dx
or byte[sprpriodata+ebx-%1+16],cl
%%skip
%endmacro
%macro sprdrawprbw16bfs 1
or eax,eax
jz %%skip
cmp byte[winspdata+ebx-%1+16],0
jne %%skip
add al,ch
mov edx,[transpbuf+32+ebx*2-%1*2]
mov eax,[pal16bxcl+eax*4]
and edx,[vesa2_clbit]
add edx,eax
shr edx,1
xor eax,eax
mov edx,[fulladdtab+edx*2]
xor edx,0FFFFh
mov [edi+ebx*2-%1*2],dx
%%skip
%endmacro
;*******************************************************
; Processes & Draws 8x8 tiles for both main & sub screen
;*******************************************************
%macro draw8x816bta 2
mov al,[ebx+%1]
or al,al
jz %%loop
add al,dh
mov ecx,[pal16b+eax*4]
mov [esi+%2],cx
mov [ebp+%2],cx
%%loop
%endmacro
%macro draw8x816btawinon 2
mov al,[ebx+%1]
or al,al
jz %%loop
test byte[ecx+%1],0FFh
jnz %%loop
add al,dh
mov eax,[pal16b+eax*4]
mov [esi+%2],ax
mov [ebp+%2],ax
xor eax,eax
%%loop
%endmacro
%macro draw8x816btawinonb 2
mov al,[ebx+%1]
or al,al
jz %%loop
test byte[ecx+7-%1],0FFh
jnz %%loop
add al,dh
mov eax,[pal16b+eax*4]
mov [esi+%2],ax
mov [ebp+%2],ax
xor eax,eax
%%loop
%endmacro
%macro drawtilegrp 1
cmp dword[ebx],0
je near %%loop
%1 0, 0
%1 1, 2
%1 2, 4
%1 3, 6
%%loop
cmp dword[ebx+4],0
je near %%loop2
%1 4, 8
%1 5, 10
%1 6, 12
%1 7, 14
%%loop2
%endmacro
%macro drawtilegrpf 1
cmp dword[ebx+4],0
je near %%loop
%1 7, 0
%1 6, 2
%1 5, 4
%1 4, 6
%%loop
cmp dword[ebx],0
je near %%loop2
%1 3, 8
%1 2, 10
%1 1, 12
%1 0, 14
%%loop2
%endmacro
%macro drawtilegrpfull 1
cmp dword[edi],0
je near %%loop
%1 0, 0
%1 1, 2
%1 2, 4
%1 3, 6
%%loop
cmp dword[edi+4],0
je near %%loop2
%1 4, 8
%1 5, 10
%1 6, 12
%1 7, 14
%%loop2
%endmacro
%macro drawtilegrpfullf 1
cmp dword[edi+4],0
je near %%loop
%1 7, 0
%1 6, 2
%1 5, 4
%1 4, 6
%%loop
cmp dword[edi],0
je near %%loop2
%1 3, 8
%1 2, 10
%1 1, 12
%1 0, 14
%%loop2
%endmacro
;*******************************************************
; Processes & Draws 8x8 tiles in 2, 4, & 8 bit mode
;*******************************************************
%macro draw8x816ta 2
mov al,[ebx+%1]
or al,al
jz %%loop
add al,dh
mov ecx,[ebp+%2]
mov eax,[pal16b+eax*4]
test ecx,0FFFFh
je %%noadd
and eax,1111011111011110b ; [vesa2_clbit]
and ecx,1111011111011110b ; [vesa2_clbit]
add eax,ecx
shr eax,1
%%noadd
mov [esi+%2],ax
xor eax,eax
%%loop
%endmacro
%macro draw8x816ta2 2
mov al,[edi+%1]
or al,al
jz %%loop
add al,dh
mov ebx,[ebp+%2]
mov ecx,[pal16b+eax*4]
test ebx,0FFFFh
je %%noadd
and ecx,1111011111011110b ; [vesa2_clbit]
and ebx,1111011111011110b ; [vesa2_clbit]
add ecx,ebx
shr ecx,1
%%noadd
mov [esi+%2],cx
%%loop
%endmacro
%macro draw8x816tb 2
mov al,[edi+%1]
or al,al
jz %%loop
add al,dh
mov ebx,[ebp+%2]
mov ecx,[pal16bcl+eax*4]
and ebx,1111011111011110b ; [vesa2_clbit]
add ecx,ebx
shr ecx,1
mov ecx,[fulladdtab+ecx*2]
mov [esi+%2],cx
%%loop
%endmacro
%macro draw8x816tc 2
mov al,[edi+%1]
or al,al
jz %%loop
add al,dh
mov ebx,[ebp+%2]
mov ecx,[pal16bxcl+eax*4]
and ebx,1111011111011110b ; [vesa2_clbit]
add ecx,ebx
shr ecx,1
mov ecx,[fulladdtab+ecx*2]
xor ecx,0FFFFh
mov [esi+%2],cx
%%loop
%endmacro
%macro draw8x816tawinon 2
mov al,[ebx+%1]
or al,al
jz %%loop
test byte[edx+%1],0FFh
jnz %%loop
add al,[coadder16]
mov ecx,[ebp+%2]
mov eax,[pal16b+eax*4]
test ecx,0FFFFh
je %%noadd
and eax,1111011111011110b ; [vesa2_clbit]
and ecx,1111011111011110b ; [vesa2_clbit]
add eax,ecx
shr eax,1
%%noadd
mov [esi+%2],ax
xor eax,eax
%%loop
%endmacro
%macro draw8x816tbwinon 2
mov al,[edi+%1]
or al,al
jz %%loop
test byte[edx+%1],0FFh
jnz %%loop
add al,[coadder16]
mov ebx,[ebp+%2]
mov ecx,[pal16bcl+eax*4]
and ebx,1111011111011110b ; [vesa2_clbit]
add ecx,ebx
shr ecx,1
mov ecx,[fulladdtab+ecx*2]
mov [esi+%2],cx
%%loop
%endmacro
%macro draw8x816tcwinon 2
mov al,[edi+%1]
or al,al
jz %%loop
test byte[edx+%1],0FFh
jnz %%loop
add al,[coadder16]
mov ebx,[ebp+%2]
mov ecx,[pal16bxcl+eax*4]
and ebx,1111011111011110b ; [vesa2_clbit]
add ecx,ebx
shr ecx,1
mov ecx,[fulladdtab+ecx*2]
xor ecx,0FFFFh
mov [esi+%2],cx
%%loop
%endmacro
%macro draw8x816tawinon2 3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -