📄 vidmacro.mac
字号:
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] inc ax test byte[mode7set],02h jz .noflip neg ax add ax,255.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 mov [m7starty],ax mov 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 xor eax,eax 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 xor eax,eax 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 ax,[esi] %1 8, al %1 7, ah mov ax,[esi+2] %1 6, al %1 5, ah mov ax,[esi+4] %1 4, al %1 3, ah mov ax,[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 sprdrawprawb 2 or %2,%2 jz %%skip test byte[sprpriodata+ebx-%1+16],dl jnz %%skip cmp byte[ecx+ebx-%1],1 je %%skip add %2,dh 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 sprdrawprbwb 2 or %2,%2 jz %%skip add %2,dh cmp byte[ecx+ebx-%1],1 je %%skip 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 ax,[esi] %1 1, al %1 2, ah mov ax,[esi+2] %1 3, al %1 4, ah mov ax,[esi+4] %1 5, al %1 6, ah mov ax,[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 mov dx,[bg3scrolx] test dx,8000h jz .nooma and dx,0F000h shr dx,5 add ax,dx.nooma 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 + -