📄 newgfx16.mac
字号:
%macro Procsprng23456716b 2 ; Draw BG 2 ; Start line by line drawing/check mov esi,[vidbuffer] add esi,16*2+288*2 mov ebx,1%%nextline cmp byte[BGFB+ebx],0 jne near %%nogo %1 %2, %%nogo cmp byte[BGMA+ebx],1 jbe %%nogo xor eax,eax mov al,[sprtlng+ebx] mov cl,[sprlefttot+ebx] mov [csprival],eax inc byte[sprtlng+ebx] test byte[sprleftpr+ebx*4+eax],1 jz %%nogo or cl,cl jz %%nogo test byte[SpecialLine+ebx],2 jnz %%hires push esi call drawsprng16b pop esi jmp %%nogo%%hires mov cl,[sprlefttot+ebx] push esi call drawsprng16bhr pop esi%%nogo inc ebx add esi,288*2 cmp [resolutn],bx jne near %%nextline%endmacro%macro ProcMode7ng16b 2 mov byte[winon],0 ; Draw BG ; Start line by line drawing/check mov esi,[vidbuffer] add esi,16*2+288*2 mov ebx,[mode7A] mov [Mode7BackA],ebx mov ebx,[mode7C] mov [Mode7BackC],ebx mov ebx,[mode7X0] mov [Mode7BackX0],ebx mov bl,[mode7set] mov [Mode7BackSet],ebx mov ebx,1%%nextline cmp byte[BGFB+ebx],0 jne near %%nogo cmp byte[BGMA+ebx],7 jne near %%nogo test byte[intrlng+ebx],40h jnz near %%nogo %1 %2, %%nogo push ebx mov ebp,[cpalval+ebx*4] ; Process mosaic mov byte[curmosaicsz],1 xor ecx,ecx test byte[mosenng+ebx],1 jz %%nomosaic mov cl,[mosszng+ebx] or cl,cl jz %%nomosaic inc cl mov [curmosaicsz],cl xor edx,edx mov eax,ebx div cl xor edx,edx mul cl mov ebx,eax%%nomosaic ; process line by line mov edx,[mode7ab+ebx*4] mov [mode7A],edx mov edx,[mode7cd+ebx*4] mov [mode7C],edx mov edx,[mode7xy+ebx*4] mov [mode7X0],edx mov edx,[mode7st+ebx] mov [mode7set],dl xor edx,edx mov eax,ebx test byte[mode7set],02h jz %%noflip mov eax,255 sub eax,ebx%%noflip mov dx,[BG1SXl+ebx*2] mov [m7starty],ax mov ax,[BG1SYl+ebx*2] mov [curvidoffset],esi pop ebx push eax push edx push esi push ebx test byte[scadsng+ebx],1 jnz %%directmode push esi push ebx call drawmode7win16b pop ebx pop esi jmp %%donemode7%%directmode push esi push ebx call drawmode7win16bd pop ebx pop esi%%donemode7 pop ebx pop esi pop edx pop eax cmp byte[Mode7HiRes16b],0 je %%nogoc cmp byte[scanlines],0 jne %%nogoc test byte[scadsng+ebx],1 jnz %%directmodeb call processmode7hires16b jmp %%nogoc%%directmodeb call processmode7hires16bd%%nogoc%%nogo inc ebx add esi,288*2 cmp [resolutn],bx jne near %%nextline mov ebx,[Mode7BackA] mov [mode7A],ebx mov ebx,[Mode7BackC] mov [mode7C],ebx mov ebx,[Mode7BackX0] mov [mode7X0],ebx mov ebx,[Mode7BackSet] mov [mode7set],bl%endmacro%macro ProcMode7ngextbg16b 2 mov byte[winon],0 ; Draw BG ; Start line by line drawing/check mov esi,[vidbuffer] add esi,16*2+288*2 mov ebx,[mode7A] mov [Mode7BackA],ebx mov ebx,[mode7C] mov [Mode7BackC],ebx mov ebx,[mode7X0] mov [Mode7BackX0],ebx mov bl,[mode7set] mov [Mode7BackSet],ebx mov ebx,1%%nextline mov byte[esi-1],0 cmp byte[BGFB+ebx],0 jne near %%nogo cmp byte[BGMA+ebx],7 jne near %%nogo %1 %2, %%nogo test byte[intrlng+ebx],40h jz near %%nogo mov byte[esi-1],1 push ebx mov ebp,[cpalval+ebx*4] ; Process mosaic mov byte[curmosaicsz],1 xor ecx,ecx test byte[mosenng+ebx],1 jz %%nomosaic mov cl,[mosszng+ebx] or cl,cl jz %%nomosaic inc cl mov [curmosaicsz],cl xor edx,edx mov eax,ebx div cl xor edx,edx mul cl mov ebx,eax%%nomosaic ; process line by line mov edx,[mode7ab+ebx*4] mov [mode7A],edx mov edx,[mode7cd+ebx*4] mov [mode7C],edx mov edx,[mode7xy+ebx*4] mov [mode7X0],edx mov edx,[mode7st+ebx] mov [mode7set],dl xor edx,edx mov eax,ebx test byte[mode7set],02h jz %%noflip mov eax,255 sub eax,ebx%%noflip mov dx,[BG1SXl+ebx*2] mov [m7starty],ax mov ax,[BG1SYl+ebx*2] mov [curvidoffset],esi push esi call drawmode7ngextbg16b pop esi pop ebx%%nogo inc ebx add esi,288*2 cmp [resolutn],bx jne near %%nextline mov ebx,[Mode7BackA] mov [mode7A],ebx mov ebx,[Mode7BackC] mov [mode7C],ebx mov ebx,[Mode7BackX0] mov [mode7X0],ebx mov ebx,[Mode7BackSet] mov [mode7set],bl%endmacro%macro ProcMode7ngextbg216b 2 mov byte[winon],0 ; Draw BG ; Start line by line drawing/check mov esi,[vidbuffer] add esi,16*2+288*2 mov ebx,[mode7A] mov [Mode7BackA],ebx mov ebx,[mode7C] mov [Mode7BackC],ebx mov ebx,[mode7X0] mov [Mode7BackX0],ebx mov bl,[mode7set] mov [Mode7BackSet],ebx mov ebx,1%%nextline cmp byte[BGFB+ebx],0 jne near %%nogo cmp byte[BGMA+ebx],7 jne near %%nogo %1 %2, %%nogo test byte[intrlng+ebx],40h jz near %%nogo push ebx mov ebp,[cpalval+ebx*4] ; Process mosaic mov byte[curmosaicsz],1 xor ecx,ecx test byte[mosenng+ebx],1 jz %%nomosaic mov cl,[mosszng+ebx] or cl,cl jz %%nomosaic inc cl mov [curmosaicsz],cl xor edx,edx mov eax,ebx div cl xor edx,edx mul cl mov ebx,eax%%nomosaic ; process line by line mov edx,[mode7ab+ebx*4] mov [mode7A],edx mov edx,[mode7cd+ebx*4] mov [mode7C],edx mov edx,[mode7xy+ebx*4] mov [mode7X0],edx mov edx,[mode7st+ebx] mov [mode7set],dl xor edx,edx mov eax,ebx test byte[mode7set],02h jz %%noflip mov eax,255 sub eax,ebx%%noflip mov dx,[BG1SXl+ebx*2] mov [m7starty],ax mov ax,[BG1SYl+ebx*2] mov [curvidoffset],esi push esi jmp %%drawb cmp byte[esi-1],1 je %%drawb call drawmode7ngextbg16b jmp %%drawa%%drawb call drawmode7ngextbg216b%%drawa pop esi pop ebx%%nogo inc ebx add esi,288*2 cmp [resolutn],bx jne near %%nextline mov ebx,[Mode7BackA] mov [mode7A],ebx mov ebx,[Mode7BackC] mov [mode7C],ebx mov ebx,[Mode7BackX0] mov [mode7X0],ebx mov ebx,[Mode7BackSet] mov [mode7set],bl%endmacro%macro preparet4ba 0 shl cx,5 add ecx,ecx add ecx,[vcache4b]%endmacro%macro preparet2ba 0 shl cx,4 shl ecx,2 add ecx,[vcache2b]%endmacro%macro preparet8ba 0 shl cx,6 add ecx,[vcache8b]%endmacro%macro preparet2batile 0 shl ecx,8 add ecx,[vcache2bs]%endmacro%macro preparet4batile 0 shl ecx,8 add ecx,[vcache4bs]%endmacro%macro preparet8batile 0 shl ecx,8 add ecx,[vcache8bs]%endmacro%macro test4ba 0 and ecx,2047 test dword[vidmemch4+ecx*2],0FFFFh%endmacro%macro test2ba 0 and ecx,4095 add edx,dword[mode0add] test dword[vidmemch2+ecx],0FFh%endmacro%macro test8ba 0 and ecx,1023 test dword[vidmemch8+ecx*4],0FFFFFFFFh%endmacro%macro tilenormal 2 mov ebx,[ecx+%2] mov [edi+%1],ebx mov ebx,[ecx+%2+4] mov [edi+%1+4],ebx mov ebx,[ecx+%2+8] mov [edi+%1+8],ebx mov ebx,[ecx+%2+12] mov [edi+%1+12],ebx%endmacro%macro tilenormalb 1 cmp word[ecx+%1],0FFFFh je %%nott mov bx,[ecx+%1] mov [edi+%1],bx%%nott%endmacro%macro tilenormals 2 mov ebx,[ecx+%2] mov [edi+%1+75036*2],ebx mov ebx,[ecx+%2+4] mov [edi+%1+4+75036*2],ebx mov ebx,[ecx+%2+8] mov [edi+%1+8+75036*2],ebx mov ebx,[ecx+%2+12] mov [edi+%1+12+75036*2],ebx%endmacro%macro tilenormalbs 1 cmp word[ecx+%1],0FFFFh je %%nott mov bx,[ecx+%1] mov [edi+%1+75036*2],bx%%nott%endmacro%macro tilenormalt 2 mov ebx,[ecx+%2] or ebx,[UnusedBit] mov [edi+%1],ebx mov ebx,[ecx+%2+4] or ebx,[UnusedBit] mov [edi+%1+4],ebx mov ebx,[ecx+%2+8] or ebx,[UnusedBit] mov [edi+%1+8],ebx mov ebx,[ecx+%2+12] or ebx,[UnusedBit] mov [edi+%1+12],ebx%endmacro%macro tilenormalbt 1 cmp word[ecx+%1],0FFFFh je %%nott mov bx,[ecx+%1] or bx,[UnusedBit] mov [edi+%1],bx%%nott%endmacro%macro tilenormalmsnt 2 mov ebx,[ecx+%2] mov [edi+%1],ebx mov [edi+%1+75036*2],ebx mov ebx,[ecx+%2+4] mov [edi+%1+4],ebx mov [edi+%1+4+75036*2],ebx mov ebx,[ecx+%2+8] mov [edi+%1+8],ebx mov [edi+%1+8+75036*2],ebx mov ebx,[ecx+%2+12] mov [edi+%1+12],ebx mov [edi+%1+12+75036*2],ebx%endmacro%macro tilenormalbmsnt 1 cmp word[ecx+%1],0FFFFh je %%nott mov bx,[ecx+%1] mov [edi+%1],bx mov [edi+%1+75036*2],bx%%nott%endmacro%macro tilenormalmst 2 mov ebx,[ecx+%2] mov [edi+%1+75036*2],ebx or ebx,[UnusedBit] mov [edi+%1],ebx mov ebx,[ecx+%2+4] mov [edi+%1+4+75036*2],ebx or ebx,[UnusedBit] mov [edi+%1+4],ebx mov ebx,[ecx+%2+8] mov [edi+%1+8+75036*2],ebx or ebx,[UnusedBit] mov [edi+%1+8],ebx mov ebx,[ecx+%2+12] mov [edi+%1+12+75036*2],ebx or ebx,[UnusedBit] mov [edi+%1+12],ebx%endmacro%macro tilenormalbmst 1 cmp word[ecx+%1],0FFFFh je %%nott mov bx,[ecx+%1] mov [edi+%1+75036*2],bx or bx,[UnusedBit] mov [edi+%1],bx%%nott%endmacro%macro drawtileng16b 12 ; tile value : bit 15 = flipy, bit 14 = flipx, bit 13 = priority value ; bit 10-12 = palette, 0-9=tile# mov ebx,[ng16bbgval] mov dl,ch inc dword[bg1drwng+ebx*4] and ecx,3FFh and edx,1Fh add ecx,[ngptrdat2] mov edx,[%6+edx*4] %7 jnz near %%docache cmp byte[%9+ecx],dl je %%returnfromcache mov [%9+ecx],dl call %10%%returnfromcache cmp byte[%1+ecx],2 je near %5 cmp byte[%1+ecx],0 je near %%parttile %2 ; start drawing from ecx test dword[vrama+eax],4000h jz %%noflipxfull add ecx,128%%noflipxfull test dword[vrama+eax],8000h jnz near %%flipyfull %11 0,0 %11 288*2,16 %11 288*4,32 %11 288*6,48 %11 288*8,64 %11 288*10,80 %11 288*12,96 %11 288*14,112 jmp %5%%flipyfull %11 288*14,0 %11 288*12,16 %11 288*10,32 %11 288*8,48 %11 288*6,64 %11 288*4,80 %11 288*2,96 %11 0,112 jmp %5%%parttile %2 ; start drawing from ecx to edi test word[vrama+eax],4000h jz %%noflipxpart add ecx,128%%noflipxpart test word[vrama+eax],8000h jnz near %%flipypart mov dword[tleftnb],8%%nextb %12 0 %12 2 %12 4 %12 6 %12 8 %12 10 %12 12 %12 14 add ecx,16 add edi,288*2 dec dword[tleftnb] jnz near %%nextb sub edi,288*2*8 jmp %5%%flipypart add edi,288*2*7 mov dword[tleftnb],8%%nextbm %12 0 %12 2 %12 4 %12 6 %12 8 %12 10 %12 12 %12 14 add ecx,16 sub edi,288*2 dec dword[tleftnb] jnz near %%nextbm add edi,288*2%5 mov ebx,[ng16bbgval] add ax,2 inc dword[bg1totng+ebx*4] add edi,16 test eax,03Fh jz %%tileadd%%next dec byte[tleftn] jnz near %4 pop ebx ret%%docache call %3 mov [%9+ecx],dl call %10 jmp %%returnfromcache%%tileadd add ax,[bgtxadd] jmp %%next%endmacro%macro drawtileng16x1616b 12 ; tile value : bit 15 = flipy, bit 14 = flipx, bit 13 = priority value ; bit 10-12 = palette, 0-9=tile# mov ebx,[ng16bbgval] mov dl,ch inc dword[bg1drwng+ebx*4] and ecx,3FFh and edx,1Fh add ecx,[ngptrdat2] add cx,[taddnfy16x16] test dword[vrama+eax],8000h jz %%noflipy add cx,[taddfy16x16]%%noflipy test dword[vrama+eax],4000h jz %%noflipx inc cx%%noflipx%%nexttile push ecx push edx mov edx,[%6+edx*4] %7 jnz near %%docache cmp byte[%9+ecx],dl je %%returnfromcache mov [%9+ecx],dl call %10%%returnfromcache cmp byte[%1+ecx],2 je near %%done cmp byte[%1+ecx],0 je near %%parttile %2 ; start drawing from ecx test dword[vrama+eax],4000h jz %%noflipxfull add ecx,128%%noflipxfull test dword[vrama+eax],8000h jnz near %%flipyfull %11 0,0 %11 288*2,16 %11 288*4,32 %11 288*6,48 %11 288*8,64 %11 288*10,80 %11 288*12,96 %11 288*14,112 jmp %%done%%flipyfull %11 288*14,0 %11 288*12,16 %11 288*10,32 %11 288*8,48 %11 288*6,64 %11 288*4,80 %11 288*2,96 %11 0,112 jmp %%done%%parttile %2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -