newgfx.mac
来自「linux下的任天堂模拟器代码。供大家参考。」· MAC 代码 · 共 3,357 行 · 第 1/5 页
MAC
3,357 行
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 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 drawtileng 8 ; 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%%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],8000h jnz near %%flipyfull test dword[vrama+eax],4000h jnz near %%flipxfull mov ebx,[ecx] add ebx,edx mov [edi],ebx mov ebx,[ecx+4] add ebx,edx mov [edi+4],ebx mov ebx,[ecx+8] add ebx,edx mov [edi+288],ebx mov ebx,[ecx+12] add ebx,edx mov [edi+288+4],ebx mov ebx,[ecx+16] add ebx,edx mov [edi+288*2],ebx mov ebx,[ecx+20] add ebx,edx mov [edi+288*2+4],ebx mov ebx,[ecx+24] add ebx,edx mov [edi+288*3],ebx mov ebx,[ecx+28] add ebx,edx mov [edi+288*3+4],ebx mov ebx,[ecx+32] add ebx,edx mov [edi+288*4],ebx mov ebx,[ecx+36] add ebx,edx mov [edi+288*4+4],ebx mov ebx,[ecx+40] add ebx,edx mov [edi+288*5],ebx mov ebx,[ecx+44] add ebx,edx mov [edi+288*5+4],ebx mov ebx,[ecx+48] add ebx,edx mov [edi+288*6],ebx mov ebx,[ecx+52] add ebx,edx mov [edi+288*6+4],ebx mov ebx,[ecx+56] add ebx,edx mov [edi+288*7],ebx mov ebx,[ecx+60] add ebx,edx mov [edi+288*7+4],ebx jmp %5%%flipxfull mov ebx,[ecx+4] bswap ebx add ebx,edx mov [edi],ebx mov ebx,[ecx] bswap ebx add ebx,edx mov [edi+4],ebx mov ebx,[ecx+12] bswap ebx add ebx,edx mov [edi+288],ebx mov ebx,[ecx+8] bswap ebx add ebx,edx mov [edi+288+4],ebx mov ebx,[ecx+20] bswap ebx add ebx,edx mov [edi+288*2],ebx mov ebx,[ecx+16] bswap ebx add ebx,edx mov [edi+288*2+4],ebx mov ebx,[ecx+28] bswap ebx add ebx,edx mov [edi+288*3],ebx mov ebx,[ecx+24] bswap ebx add ebx,edx mov [edi+288*3+4],ebx mov ebx,[ecx+36] bswap ebx add ebx,edx mov [edi+288*4],ebx mov ebx,[ecx+32] bswap ebx add ebx,edx mov [edi+288*4+4],ebx mov ebx,[ecx+44] bswap ebx add ebx,edx mov [edi+288*5],ebx mov ebx,[ecx+40] bswap ebx add ebx,edx mov [edi+288*5+4],ebx mov ebx,[ecx+52] bswap ebx add ebx,edx mov [edi+288*6],ebx mov ebx,[ecx+48] bswap ebx add ebx,edx mov [edi+288*6+4],ebx mov ebx,[ecx+60] bswap ebx add ebx,edx mov [edi+288*7],ebx mov ebx,[ecx+56] bswap ebx add ebx,edx mov [edi+288*7+4],ebx jmp %5%%flipyfull test word[vrama+eax],4000h jnz near %%flipxyfull mov ebx,[ecx] add ebx,edx mov [edi+288*7],ebx mov ebx,[ecx+4] add ebx,edx mov [edi+288*7+4],ebx mov ebx,[ecx+8] add ebx,edx mov [edi+288*6],ebx mov ebx,[ecx+12] add ebx,edx mov [edi+288*6+4],ebx mov ebx,[ecx+16] add ebx,edx mov [edi+288*5],ebx mov ebx,[ecx+20] add ebx,edx mov [edi+288*5+4],ebx mov ebx,[ecx+24] add ebx,edx mov [edi+288*4],ebx mov ebx,[ecx+28] add ebx,edx mov [edi+288*4+4],ebx mov ebx,[ecx+32] add ebx,edx mov [edi+288*3],ebx mov ebx,[ecx+36] add ebx,edx mov [edi+288*3+4],ebx mov ebx,[ecx+40] add ebx,edx mov [edi+288*2],ebx mov ebx,[ecx+44] add ebx,edx mov [edi+288*2+4],ebx mov ebx,[ecx+48] add ebx,edx mov [edi+288],ebx mov ebx,[ecx+52] add ebx,edx mov [edi+288+4],ebx mov ebx,[ecx+56] add ebx,edx mov [edi],ebx mov ebx,[ecx+60] add ebx,edx mov [edi+4],ebx jmp %5%%flipxyfull mov ebx,[ecx+4] bswap ebx add ebx,edx mov [edi+288*7],ebx mov ebx,[ecx] bswap ebx add ebx,edx mov [edi+288*7+4],ebx mov ebx,[ecx+12] bswap ebx add ebx,edx mov [edi+288*6],ebx mov ebx,[ecx+8] bswap ebx add ebx,edx mov [edi+288*6+4],ebx mov ebx,[ecx+20] bswap ebx add ebx,edx mov [edi+288*5],ebx mov ebx,[ecx+16] bswap ebx add ebx,edx mov [edi+288*5+4],ebx mov ebx,[ecx+28] bswap ebx add ebx,edx mov [edi+288*4],ebx mov ebx,[ecx+24] bswap ebx add ebx,edx mov [edi+288*4+4],ebx mov ebx,[ecx+36] bswap ebx add ebx,edx mov [edi+288*3],ebx mov ebx,[ecx+32] bswap ebx add ebx,edx mov [edi+288*3+4],ebx mov ebx,[ecx+44] bswap ebx add ebx,edx mov [edi+288*2],ebx mov ebx,[ecx+40] bswap ebx add ebx,edx mov [edi+288*2+4],ebx mov ebx,[ecx+52] bswap ebx add ebx,edx mov [edi+288],ebx mov ebx,[ecx+48] bswap ebx add ebx,edx mov [edi+288+4],ebx mov ebx,[ecx+60] bswap ebx add ebx,edx mov [edi],ebx mov ebx,[ecx+56] bswap ebx add ebx,edx mov [edi+4],ebx jmp %5%%parttile %2 ; start drawing from ecx to edi test word[vrama+eax],8000h jnz near %%flipypart test word[vrama+eax],4000h jnz near %%flipxpart mov dword[tleftnb],8%%nextb mov ebx,[ecx] or ebx,ebx jz %%drawd add ebx,edx test bl,%8 jz %%drawa mov [edi],bl%%drawa test bh,%8 jz %%drawb mov [edi+1],bh%%drawb shr ebx,16 test bl,%8 jz %%drawc mov [edi+2],bl%%drawc test bh,%8 jz %%drawd mov [edi+3],bh%%drawd mov ebx,[ecx+4] or ebx,ebx jz %%drawd2 add ebx,edx test bl,%8 jz %%drawa2 mov [edi+4],bl%%drawa2 test bh,%8 jz %%drawb2 mov [edi+5],bh%%drawb2 shr ebx,16 test bl,%8 jz %%drawc2 mov [edi+6],bl%%drawc2 test bh,%8 jz %%drawd2 mov [edi+7],bh%%drawd2 add ecx,8 add edi,288 dec dword[tleftnb] jnz %%nextb sub edi,288*8 jmp %5%%flipxpart mov dword[tleftnb],8%%nextbf mov ebx,[ecx] or ebx,ebx jz %%drawdf add ebx,edx test bl,%8 jz %%drawaf mov [edi+7],bl%%drawaf test bh,%8 jz %%drawbf mov [edi+6],bh%%drawbf shr ebx,16 test bl,%8 jz %%drawcf mov [edi+5],bl%%drawcf test bh,%8 jz %%drawdf mov [edi+4],bh%%drawdf mov ebx,[ecx+4] or ebx,ebx jz %%drawd2f add ebx,edx test bl,%8 jz %%drawa2f mov [edi+3],bl%%drawa2f test bh,%8 jz %%drawb2f mov [edi+2],bh%%drawb2f shr ebx,16 test bl,%8 jz %%drawc2f mov [edi+1],bl%%drawc2f test bh,%8 jz %%drawd2f mov [edi],bh%%drawd2f add ecx,8 add edi,288 dec dword[tleftnb] jnz %%nextbf sub edi,288*8 jmp %5%%flipypart add edi,288*7 test word[vrama+eax],4000h jnz near %%flipxypart mov dword[tleftnb],8%%nextbm mov ebx,[ecx] or ebx,ebx jz %%drawdm add ebx,edx test bl,%8 jz %%drawam mov [edi],bl%%drawam test bh,%8 jz %%drawbm mov [edi+1],bh%%drawbm shr ebx,16 test bl,%8 jz %%drawcm mov [edi+2],bl%%drawcm test bh,%8 jz %%drawdm mov [edi+3],bh%%drawdm mov ebx,[ecx+4] or ebx,ebx jz %%drawd2m add ebx,edx test bl,%8 jz %%drawa2m mov [edi+4],bl%%drawa2m test bh,%8 jz %%drawb2m mov [edi+5],bh%%drawb2m shr ebx,16 test bl,%8 jz %%drawc2m mov [edi+6],bl%%drawc2m test bh,%8 jz %%drawd2m mov [edi+7],bh%%drawd2m add ecx,8 sub edi,288 dec dword[tleftnb] jnz %%nextbm add edi,288 jmp %5%%flipxypart mov dword[tleftnb],8%%nextbfm mov ebx,[ecx] or ebx,ebx jz %%drawdfm add ebx,edx test bl,%8 jz %%drawafm mov [edi+7],bl%%drawafm test bh,%8 jz %%drawbfm mov [edi+6],bh%%drawbfm shr ebx,16 test bl,%8 jz %%drawcfm mov [edi+5],bl%%drawcfm test bh,%8 jz %%drawdfm mov [edi+4],bh%%drawdfm mov ebx,[ecx+4] or ebx,ebx jz %%drawd2fm add ebx,edx test bl,%8 jz %%drawa2fm mov [edi+3],bl%%drawa2fm test bh,%8 jz %%drawb2fm mov [edi+2],bh%%drawb2fm shr ebx,16 test bl,%8 jz %%drawc2fm mov [edi+1],bl%%drawc2fm test bh,%8 jz %%drawd2fm mov [edi],bh%%drawd2fm add ecx,8 sub edi,288 dec dword[tleftnb] jnz %%nextbfm add edi,288%5 mov ebx,[ng16bbgval] add ax,2 inc dword[bg1totng+ebx*4] add edi,8 test eax,03Fh jz %%tileadd%%next dec byte[tleftn] jnz near %4 pop ebx ret%%docache call %3 jmp %%returnfromcache%%tileadd add ax,[bgtxadd] jmp %%next%endmacro%macro drawtileng16x16 8 ; 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%%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],8000h jnz near %%flipyfull test dword[vrama+eax],4000h jnz near %%flipxfull push eax mov ebx,[ecx] mov eax,[ecx+4] add ebx,edx add eax,edx mov [edi],ebx mov [edi+4],eax mov ebx,[ecx+8] mov eax,[ecx+12] add ebx,edx add eax,edx mov [edi+288],ebx mov [edi+288+4],eax mov ebx,[ecx+16] mov eax,[ecx+20] add ebx,edx add eax,edx mov [edi+288*2],ebx mov [edi+288*2+4],eax mov ebx,[ecx+24] mov eax,[ecx+28] add ebx,edx add eax,edx mov [edi+288*3],ebx mov [edi+288*3+4],eax mov ebx,[ecx+32] mov eax,[ecx+36] add ebx,edx add eax,edx mov [edi+288*4],ebx mov [edi+288*4+4],eax mov ebx,[ecx+40] mov eax,[ecx+44] add ebx,edx add eax,edx mov [edi+288*5],ebx mov [edi+288*5+4],eax mov ebx,[ecx+48] mov eax,[ecx+52] add ebx,edx add eax,edx mov [edi+288*6],ebx mov [edi+288*6+4],eax mov ebx,[ecx+56] mov eax,[ecx+60] add ebx,edx add eax,edx mov [edi+288*7],ebx mov [edi+288*7+4],eax pop eax jmp %%done%%flipxfull push eax mov ebx,[ecx+4] mov eax,[ecx] bswap ebx bswap eax add ebx,edx add eax,edx mov [edi],ebx mov [edi+4],eax mov ebx,[ecx+12] mov eax,[ecx+8] bswap ebx bswap eax add ebx,edx add eax,edx mov [edi+288],ebx mov [edi+288+4],eax mov ebx,[ecx+20] mov eax,[ecx+16] bswap ebx bswap eax add ebx,edx add eax,edx mov [edi+288*2],ebx mov [edi+288*2+4],eax mov ebx,[ecx+28] mov eax,[ecx+24] bswap ebx bswap eax add ebx,edx add eax,edx mov [edi+288*3],ebx mov [edi+288*3+4],eax mov ebx,[ecx+36] mov eax,[ecx+32] bswap ebx bswap eax add ebx,edx add eax,edx mov [edi+288*4],ebx mov [edi+288*4+4],eax mov ebx,[ecx+44] mov eax,[ecx+40] bswap ebx bswap eax add ebx,edx add eax,edx mov [edi+288*5],ebx mov [edi+288*5+4],eax mov ebx,[ecx+52] mov eax,[ecx+48] bswap ebx bswap eax add ebx,edx add eax,edx mov [edi+288*6],ebx mov [edi+288*6+4],eax mov ebx,[ecx+60] mov eax,[ecx+56] bswap ebx bswap eax
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?