📄 vidmacrb.mac
字号:
mov al,[edi+%1]
or al,al
jz %%loop
test byte[edx+%3],0FFh
jnz %%loop
add al,[coadder16]
mov ecx,[ebp+%2]
mov ebx,[pal16b+eax*4]
test ecx,0FFFFh
je %%noadd
and ebx,1111011111011110b ; [vesa2_clbit]
and ecx,1111011111011110b ; [vesa2_clbit]
add ebx,ecx
shr ebx,1
%%noadd
mov [esi+%2],bx
%%loop
%endmacro
%macro draw8x816tbwinon2 3
mov al,[edi+%1]
or al,al
jz %%loop
test byte[edx+%3],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 draw8x816tcwinon2 3
mov al,[edi+%1]
or al,al
jz %%loop
test byte[edx+%3],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 draw8x816tawinonb 2
mov al,[ebx+%1]
or al,al
jz %%loop
test byte[edx+7-%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 draw8x816tbwinonb 2
mov al,[edi+%1]
or al,al
jz %%loop
test byte[edx+7-%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 draw8x816tcwinonb 2
mov al,[edi+%1]
or al,al
jz %%loop
test byte[edx+7-%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
; end makev16t
; ****************************************************
; ****************************************************
%macro Draw16x1616bwin 3
mov al,[ebx+%1]
test al,0FFh
jz %%loop
test byte[ebp+%3],0FFh
jnz %%loop
add al,dh
mov ecx,[pal16b+eax*4]
mov [esi+%2],cx
%%loop
%endmacro
;*******************************************************
; Processes & Draws 16x16 tiles in 2, 4, & 8 bit mode
;*******************************************************
%macro Draw16x1616b 2
mov al,[ebx+%1]
test al,0FFh
jz %%loop
add al,dh
mov ecx,[pal16b+eax*4]
mov [esi+%2],cx
%%loop
%endmacro
%macro drawpixel16b8x8winon 4
mov al,[ebx+%1]
test al,0FFh
jz %2
test byte[ebp+%4],0FFh
jnz %2
add al,dh
mov ecx,[pal16b+eax*4]
mov [esi+%3],cx
%2
%endmacro
%macro drawpixel16b8x8 3
mov al,[ebx+%1]
test al,0FFh
jz %2
add al,dh
mov ecx,[pal16b+eax*4]
mov [esi+%3],cx
%2
%endmacro
%macro Draw8x816bwinmacro 1
mov al,[ebx+%1]
or al,al
jz %%loop
test byte[ebp+%1],0FFh
jnz %%loop
add al,dh
mov ecx,[pal16b+eax*4]
mov [esi+%1*2],cx
%%loop
%endmacro
%macro Draw8x816bwinflipmacro 1
mov al,[ebx+7-%1]
or al,al
jz %%loop
test byte[ebp+%1],0FFh
jnz %%loop
add al,dh
mov ecx,[pal16b+eax*4]
mov [esi+%1*2],cx
%%loop
%endmacro
;*******************************************************
; DrawLine 16bit Draws the current line
;*******************************************************
; use curypos+bg1scroly for y location and bg1scrolx for x location
; use bg1ptr(b,c,d) for the pointer to the tile number contents
; use bg1objptr for the pointer to the object tile contents
%macro procmode716b 3
xor eax,eax
xor edx,edx
mov ax,[curypos]
test byte[mode7set],02h
jz .noflip
mov ax,261
sub ax,[curypos]
dec ax
.noflip
mov byte[curmosaicsz],1
test byte[mosaicon],%3
jz .nomos
mov bl,[mosaicsz]
cmp bl,0
je .nomos
inc bl
mov [curmosaicsz],bl
xor bh,bh
div bx
xor edx,edx
mul bx
.nomos
add ax,%1
mov dx,%2
call drawmode716b
%endmacro
%macro sprdrawpra16b 1
or eax,eax
jz %%skip
test byte[sprpriodata+ebx-%1+16],cl
jnz %%skip
add al,ch
mov edx,[pal16b+eax*4]
mov [edi+ebx*2-%1*2],dx
or byte[sprpriodata+ebx-%1+16],cl
%%skip
%endmacro
%macro sprdrawprb16b 1
or eax,eax
jz %%skip
add al,ch
mov edx,[pal16b+eax*4]
mov [edi+ebx*2-%1*2],dx
%%skip
%endmacro
%macro sprdrawpraw16b 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,[pal16b+eax*4]
mov [edi+ebx*2-%1*2],dx
or byte[sprpriodata+ebx-%1+16],cl
%%skip
%endmacro
%macro sprdrawprbw16b 1
or eax,eax
jz %%skip
cmp byte[winspdata+ebx-%1+16],0
jne %%skip
add al,ch
mov edx,[pal16b+eax*4]
mov [edi+ebx*2-%1*2],dx
%%skip
%endmacro
;*******************************************************
; Processes & Draws 8x8 tiles in 2, 4, & 8 bit mode
;*******************************************************
%macro Draw8x816bmacro 1
mov al,[ebx+%1]
or al,al
jz %%loop
add al,dh
mov ecx,[pal16b+eax*4]
mov [esi+%1*2],cx
%%loop
%endmacro
%macro Draw8x816bflipmacro 1
mov al,[ebx+7-%1]
or al,al
jz %%loop
add al,dh
mov ecx,[pal16b+eax*4]
mov [esi+%1*2],cx
%%loop
%endmacro
%macro sprdrawa16b 1
mov al,[esi]
%1 8
mov al,[esi+1]
%1 7
mov al,[esi+2]
%1 6
mov al,[esi+3]
%1 5
mov al,[esi+4]
%1 4
mov al,[esi+5]
%1 3
mov al,[esi+6]
%1 2
mov al,[esi+7]
%1 1
%endmacro
%macro sprdrawaf16b 1
mov al,[esi]
%1 1
mov al,[esi+1]
%1 2
mov al,[esi+2]
%1 3
mov al,[esi+3]
%1 4
mov al,[esi+4]
%1 5
mov al,[esi+5]
%1 6
mov al,[esi+6]
%1 7
mov al,[esi+7]
%1 8
%endmacro
%macro sprdrawa 1
mov eax,[esi]
%1 8, al
%1 7, ah
mov eax,[esi+2]
%1 6, al
%1 5, ah
mov eax,[esi+4]
%1 4, al
%1 3, ah
mov eax,[esi+6]
%1 2, al
%1 1, ah
%endmacro
%macro sprdrawpra 2
or %2,%2
jz %%skip
test byte[sprpriodata+ebx-%1+16],dl
jnz %%skip
add %2,ch
mov [edi+ebx-%1],%2
or byte[sprpriodata+ebx-%1+16],dl
%%skip
%endmacro
%macro sprdrawprb 2
or %2,%2
jz %%skip
add %2,ch
mov [edi+ebx-%1],%2
%%skip
%endmacro
%macro sprdrawpra2 2
or %2,%2
jz %%skip
or byte[sprpriodata+ebx-%1+16],dl
%%skip
%endmacro
%macro sprdrawpraw 2
or %2,%2
jz %%skip
test byte[sprpriodata+ebx-%1+16],dl
jnz %%skip
cmp byte[winspdata+ebx-%1+16],0
jne %%skip
add %2,ch
mov [edi+ebx-%1],%2
or byte[sprpriodata+ebx-%1+16],dl
%%skip
%endmacro
%macro sprdrawprbw 2
or %2,%2
jz %%skip
cmp byte[winspdata+ebx-%1+16],0
jne %%skip
add %2,ch
mov [edi+ebx-%1],%2
%%skip
%endmacro
%macro sprdrawaf 1
mov eax,[esi]
%1 1, al
%1 2, ah
mov eax,[esi+2]
%1 3, al
%1 4, ah
mov eax,[esi+4]
%1 5, al
%1 6, ah
mov eax,[esi+6]
%1 7, al
%1 8, ah
%endmacro
%macro procoffsetmode 0
push ebx
push edx
add word[ofsmmptr],2
add word[ofsmtptr],2
mov ebx,[yposngom]
mov eax,[flipyposngom]
mov [yadder],ebx
mov [yrevadder],eax
mov ax,[ofsmmptr]
test eax,03Fh
jnz %%next
mov bx,[bgtxadd]
add ax,bx
add [ofsmmptr],bx
add [ofsmtptr],bx
%%next
add eax,[vram]
mov edi,eax
mov ebx,[ofsmcptr]
add ebx,[ofsmcptr2]
mov eax,[OMBGTestVal]
test dword[ebx],eax
jz %%noofsm
mov ebx,[ebx]
mov ax,[ofsmtptr]
and ebx,3FFh
add ebx,[ofsmcyps]
test ebx,100h
jz %%noupper
add ax,[ofsmady]
%%noupper
and ebx,0FFh
mov edx,ebx
shr ebx,3
and edx,07h
shl ebx,6
shl edx,3
add ax,bx
mov [yadder],edx
xor edx,38h
mov [yrevadder],edx
add eax,[vram]
mov edi,eax
%%noofsm
mov ebx,[ofsmcptr]
add ebx,[ofsmcptr2]
add dword[ofshvaladd],8
mov eax,[OMBGTestVal]
add dword[ofsmcptr2],2
and dword[ofsmcptr2],3Fh
test dword[ebx-40h],eax
jz %%noofsmh
mov eax,edi
sub eax,[vram]
mov ebx,[ebx-40h]
sub ax,[ofsmtptr]
add ax,[ofsmtptrs]
add ebx,[ofshvaladd]
test ebx,100h
jz %%noleft
add ax,[ofsmadx]
%%noleft
and ebx,0F8h
shr ebx,2
add ax,bx
add eax,[vram]
mov edi,eax
%%noofsmh
pop edx
pop ebx
%endmacro
;*******************************************************
; Processes & Draws 8x8 offset mode in Mode 2/4
;*******************************************************
%macro initoffsetmode 0
push ebx
push ecx
mov ebx,2000h
mov ecx,ebp
shl ebx,cl
mov [OMBGTestVal],ebx
mov ecx,[bg1scroly+ebp*2]
and ecx,0FFFFh
add ecx,ebx
push eax
push edx
xor edx,edx
mov dx,[bg3scroly]
; and dx,0F8h
shr edx,3
shl edx,6
xor eax,eax
mov ax,[bg3ptr]
add ax,dx
xor edx,edx
mov dx,[bg3scrolx]
and dx,0F8h
xor ebx,ebx
mov ebx,[curypos]
mov [ofsmcyps],ebx
shr edx,3
shl edx,1
add ax,dx
add eax,40h
mov edx,eax
mov [Testval],edx
and edx,0FFFFFFC0h
add edx,[vram]
mov [ofsmcptr],edx
and eax,3Fh
mov [ofsmcptr2],eax
mov eax,[bg1ptry+ebp*4]
mov [ofsmady],eax
mov eax,[bg1ptrx+ebp*4]
mov [ofsmadx],eax
mov eax,[bg1ptr+ebp*2]
mov [ofsmtptr],eax
mov [ofsmtptrs],eax
test ecx,100h
jz .noyincd
add eax,[bg1ptry+ebp*4]
.noyincd
lea ecx,[ecx*8]
and ecx,07C0h ; 1Fh*40h
add eax,ecx
mov edx,[yadder]
mov [yposngom],edx
mov edx,[yrevadder]
mov [flipyposngom],edx
mov ecx,[bg1scrolx+ebp*2]
mov edx,[bg1ptrx+ebp*4]
test ecx,100h
jz .noxincd
add eax,edx
add [ofsmtptr],edx
neg dx
.noxincd
sub dx,64
and ecx,0F8h
and eax,0FFFFh
shr ecx,2
mov [bgtxadd],edx
add eax,ecx
add [ofsmtptr],ecx
mov [ofsmmptr],eax
xor eax,eax
mov ax,[bg1objptr+ebp*2]
shr eax,5
mov [ngptrdat2],eax
mov eax,edi
sub eax,[vram]
mov [ofsmmptr],eax
mov dword[ofshvaladd],0
pop edx
pop eax
pop ecx
pop ebx
%endmacro
%macro offsetmcachechk 0
; Cache check
push ecx
mov ecx,eax
add ecx,[ngptrdat2]
and ecx,2047
cmp word[vidmemch4+ecx*2],0
je %%nocache
call cachesingle4bng
%%nocache
pop ecx
%endmacro
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -