newgfx.mac
来自「linux下的任天堂模拟器代码。供大家参考。」· MAC 代码 · 共 3,357 行 · 第 1/5 页
MAC
3,357 行
je near %%parttile %2 ; start drawing from ecx test dword[vrama+eax],8000h jnz near %%flipyfull add ecx,[yposng] 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 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 jmp %5%%flipyfull add ecx,[flipyposng] test word[vrama+eax],4000h jnz near %%flipxyfull mov ebx,[ecx] add ebx,edx mov [edi],ebx mov ebx,[ecx+4] add ebx,edx mov [edi+4],ebx jmp %5%%flipxyfull mov ebx,[ecx+4] bswap ebx add ebx,edx mov [edi],ebx mov ebx,[ecx] 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 add ecx,[yposng] test word[vrama+eax],4000h jnz near %%flipxpart 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 jmp %5%%flipxpart 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 jmp %5%%flipypart add ecx,[flipyposng] test word[vrama+eax],4000h jnz near %%flipxypart 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 jmp %5%%flipxypart 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%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 cmp byte[curmosaicsz],1 jne near domosaicng ret%%docache call %3 jmp %%returnfromcache%%tileadd add ax,[bgtxadd] jmp %%next%endmacro%macro drawlineng16x16 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 add ecx,[yposng] 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 jmp %%done%%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 jmp %%done%%flipyfull add ecx,[flipyposng] test word[vrama+eax],4000h jnz near %%flipxyfull mov ebx,[ecx] add ebx,edx mov [edi],ebx mov ebx,[ecx+4] add ebx,edx mov [edi+4],ebx jmp %%done%%flipxyfull mov ebx,[ecx+4] bswap ebx add ebx,edx mov [edi],ebx mov ebx,[ecx] bswap ebx add ebx,edx mov [edi+4],ebx jmp %%done%%parttile %2 ; start drawing from ecx to edi test word[vrama+eax],8000h jnz near %%flipypart add ecx,[yposng] test word[vrama+eax],4000h jnz near %%flipxpart 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 jmp %%done%%flipxpart 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 jmp %%done%%flipypart add ecx,[flipyposng] test word[vrama+eax],4000h jnz near %%flipxypart 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 jmp %%done%%flipxypart 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%%done pop edx pop ecx inc cx test dword[vrama+eax],4000h jz %%noflipxb sub cx,2%%noflipxb add edi,8 xor dword[switch16x16],1 jnz near %%nexttile%%ntile mov ebx,[ng16bbgval] add ax,2 inc dword[bg1totng+ebx*4] test eax,03Fh jz %%tileadd%%next dec byte[tleftn] jnz near %4 pop ebx cmp byte[curmosaicsz],1 jne near domosaicng ret%5 add edi,16 jmp %%ntile%%docache call %3 jmp %%returnfromcache%%tileadd add ax,[bgtxadd] jmp %%next%endmacro%macro drawbglineng 2 mov dword[ng16bprval],0 mov dword[ng16bbgval],%1 cmp byte[bgmode],5 jb %%nointerl test byte[intrlng+ebx],01h jz %%nointerl add ecx,ebx add ecx,[cfieldad]%%nointerl push ebx mov byte[curmosaicsz],1 xor eax,eax test byte[mosenng+ebx],1 << %1 jz %%nomosaic mov al,[mosszng+ebx] or al,al jz %%nomosaic inc al mov [curmosaicsz],al mov cl,al mov al,bl div cl mul cl mov ebx,eax mov [pesimpng],esi mov edi,xtravbuf+16 mov ecx,64 xor eax,eax mov esi,xtravbuf+16 rep stosd or ebx,ebx jnz %%nozeroline inc ebx%%nozeroline mov ecx,[BG1SYl+ebx*2+%1*512] and ecx,0FFFFh add ecx,ebx jmp %%yesmosaic%%nomosaic cmp byte[BGMA+ebx],5 jae near .tiles16x8%%yesmosaic cmp byte[t16x161+ebx+%1*256],1 je near .tiles16x16 cmp byte[osm2dis],1 je .nooffsetm cmp byte[BGMA+ebx],2 je near .offsetm cmp byte[bgmode],4 je .nooffsetm cmp byte[BGMA+ebx],4 je near .offsetm.nooffsetm mov eax,[BGPT1+ebx*2+%1*512] test ecx,100h jz .noyinc add eax,[BGPT1Y+ebx*2+%1*512].noyinc lea ecx,[ecx*8] mov edx,ecx and ecx,07C0h ; 1Fh*40h and edx,38h add eax,ecx mov [yposng],edx xor edx,38h mov ecx,[BG1SXl+ebx*2+%1*512] mov [flipyposng],edx mov edx,[BGPT1X+ebx*2+%1*512] test ecx,100h jz .noxinc add eax,edx neg dx.noxinc mov edi,ecx sub dx,64 and ecx,0F8h and eax,0FFFFh shr ecx,2 mov [bgtxadd],edx mov [bgtxad+ebx*2+%2*512],dx add eax,ecx mov ecx,[BGOPT1+ebx*2+%1*512] mov edx,[BGMA+ebx] and edi,07h and edx,07h and ecx,0FFFFh mov edx,[colormodedef+edx*4+%1] neg edi cmp dl,2 jne near .no4bit shr ecx,5 add edi,esi mov [ngptrdat+%2*1024+ebx*4],ecx mov [ngptrdat2],ecx mov [ngceax+%2*1024+ebx*4],eax mov [ngcedi+%2*1024+ebx*4],edi ; eax = pointer to beginning of tile area ProcessBuildWindow %1 jmp drawlineng4b.no4bit cmp dl,1 jne near .no2bit shr ecx,4 add edi,esi mov [ngptrdat+%2*1024+ebx*4],ecx mov [ngptrdat2],ecx mov [ngceax+%2*1024+ebx*4],eax mov [ngcedi+%2*1024+ebx*4],edi ; eax = pointer to beginning of tile area mov dword[mode0add],0 ProcessBuildWindow %1 cmp byte[BGMA+ebx],0 jne .nomode0 mov ebx,[mode0ads] mov [mode0add],ebx.nomode0 jmp drawlineng2b.no2bit
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?