newg16wn.mac
来自「linux下的任天堂模拟器代码。供大家参考。」· MAC 代码 · 共 1,189 行 · 第 1/2 页
MAC
1,189 行
;Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach );;http://www.zsnes.com;http://sourceforge.net/projects/zsnes;https://zsnes.bountysource.com;;This program is free software; you can redistribute it and/or;modify it under the terms of the GNU General Public License;version 2 as published by the Free Software Foundation.;;This program is distributed in the hope that it will be useful,;but WITHOUT ANY WARRANTY; without even the implied warranty of;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the;GNU General Public License for more details.;;You should have received a copy of the GNU General Public License;along with this program; if not, write to the Free Software;Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.%macro procpixelstw 3 dec dword[ngcpixleft] jnz %%notzero call Nextwinmode%%notzero cmp dword[ngcwinmode],1 je %%nodraw mov bl,[esi+%1] add bl,dl test bl,%3 jz %%nodraw mov cx,[eax+ebx*2] mov [edi+%2],cx%%nodraw%endmacro%macro procpixelstwt 3 dec dword[ngcpixleft] jnz %%notzero call Nextwinmode%%notzero cmp dword[ngcwinmode],1 je %%nodraw mov bl,[esi+%1] add bl,dl test bl,%3 jz %%nodraw mov cx,[eax+ebx*2+512] mov [edi+%2],cx%%nodraw%endmacro%macro procpixelstwnt 3 dec dword[ngcpixleft] jnz %%notzero call Nextwinmode%%notzero cmp dword[ngcwinmode],1 je %%nodraw mov bl,[esi+%1] add bl,dl test bl,%3 jz %%nodraw mov cx,[eax+ebx*2] mov [edi+%2],cx%%nodraw%endmacro%macro procpixelstwmst 3 dec dword[ngcpixleft] jnz %%notzero call Nextwinmode%%notzero cmp dword[ngcwinmode],1 je %%nodraw mov bl,[esi+%1] add bl,dl test bl,%3 jz %%nodraw mov cx,[eax+ebx*2+512] mov [edi+%2],cx and cx,[UnusedBitXor] mov [edi+75036*2+%2],cx%%nodraw%endmacro%macro procpixelstwmsnt 3 dec dword[ngcpixleft] jnz %%notzero call Nextwinmode%%notzero cmp dword[ngcwinmode],1 je %%nodraw mov bl,[esi+%1] add bl,dl test bl,%3 jz %%nodraw mov cx,[eax+ebx*2] mov [edi+%2],cx mov [edi+75036*2+%2],cx%%nodraw%endmacro%macro procpixelstwmsbt 3 dec dword[ngcpixleft] jnz %%notzero call Nextwinmode%%notzero mov bl,[esi+%1] add bl,dl test bl,%3 jz %%nodraw mov cx,[eax+ebx*2+512] mov [edi+%2],cx cmp dword[ngcwinmode],1 je %%nodraw and cx,[UnusedBitXor] mov [edi+75036*2+%2],cx%%nodraw%endmacro%macro procpixelstwmsbnt 3 dec dword[ngcpixleft] jnz %%notzero call Nextwinmode%%notzero mov bl,[esi+%1] add bl,dl test bl,%3 jz %%nodraw mov cx,[eax+ebx*2] mov [edi+%2],cx cmp dword[ngcwinmode],1 je %%nodraw mov [edi+75036*2+%2],cx%%nodraw%endmacro%macro procpixelstwsmt 3 dec dword[ngcpixleft] jnz %%notzero call Nextwinmode%%notzero mov bl,[esi+%1] add bl,dl test bl,%3 jz %%nodraw mov cx,[eax+ebx*2] mov [edi+75036*2+%2],cx cmp dword[ngcwinmode],1 je %%nodraw or cx,[UnusedBit] mov [edi+%2],cx%%nodraw%endmacro%macro procpixelstwsmnt 3 dec dword[ngcpixleft] jnz %%notzero call Nextwinmode%%notzero mov bl,[esi+%1] add bl,dl test bl,%3 jz %%nodraw mov cx,[eax+ebx*2] mov [edi+75036*2+%2],cx cmp dword[ngcwinmode],1 je %%nodraw mov [edi+%2],cx%%nodraw%endmacroSECTION .textNextwinmode: push ebx mov ebx,[ngcwinptr] xor dword[ngcwinmode],1 mov ebx,[ebx+4] add dword[ngcwinptr],4 mov [ngcpixleft],ebx pop ebx ret%macro processnextdrawwin 3 dec dword[ngcpixleft] jnz %%notzero call Nextwinmode%%notzero cmp dword[ngcwinmode],1 je %%nodraw test %1,%3 jz %%nodraw mov [edi+%2],%1%%nodraw%endmacro%macro processwinpixel 0 dec dword[ngcpixleft] jnz %%notzero call Nextwinmode%%notzero dec dword[ngcpixleft] jnz %%notzero2 call Nextwinmode%%notzero2%endmacro%macro drawlinengwin16b 9 ; 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 %2 ; start drawing from ecx to edi test word[vrama+eax],8000h jz %%noflipypart add ecx,[flipyposng] jmp %%flipypart%%noflipypart add ecx,[yposng]%%flipypart test word[vrama+eax],4000h jnz near %%flipxpart push eax xor ebx,ebx mov esi,ecx mov eax,[CPalPtrng] %9 0,0,%8 %9 1,2,%8 %9 2,4,%8 %9 3,6,%8 %9 4,8,%8 %9 5,10,%8 %9 6,12,%8 %9 7,14,%8 pop eax jmp .fin%%flipxpart push eax xor ebx,ebx mov esi,ecx mov eax,[CPalPtrng] %9 7,0,%8 %9 6,2,%8 %9 5,4,%8 %9 4,6,%8 %9 3,8,%8 %9 2,10,%8 %9 1,12,%8 %9 0,14,%8 pop eax jmp .fin%5 processwinpixel processwinpixel processwinpixel processwinpixel.fin 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 cmp byte[curmosaicsz],1 jne near domosaicng16b ret%%docache call %3 jmp %%returnfromcache%%tileadd add ax,[bgtxadd] jmp %%next%endmacro%macro drawlineng16x16win16b 9 ; 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 %2 ; start drawing from ecx to edi test word[vrama+eax],8000h jnz %%flipypart add ecx,[yposng] jmp %%noflipypart%%flipypart add ecx,[flipyposng]%%noflipypart test word[vrama+eax],4000h jnz near %%flipxpart push eax xor ebx,ebx mov esi,ecx mov eax,[CPalPtrng] %9 0,0,%8 %9 1,2,%8 %9 2,4,%8 %9 3,6,%8 %9 4,8,%8 %9 5,10,%8 %9 6,12,%8 %9 7,14,%8 pop eax jmp %%done%%flipxpart push eax xor ebx,ebx mov esi,ecx mov eax,[CPalPtrng] %9 7,0,%8 %9 6,2,%8 %9 5,4,%8 %9 4,6,%8 %9 3,8,%8 %9 2,10,%8 %9 1,12,%8 %9 0,14,%8 pop eax%%done pop edx pop ecx inc cx test dword[vrama+eax],4000h jz %%noflipxb sub cx,2%%noflipxb add edi,16 xor dword[switch16x16],1 jnz near %%nexttile%%ntile mov ebx,[ng16bbgval] add ax,2 inc dword[bg1totng+ebx*4] test eax,03Fh jz near %%tileadd%%next dec byte[tleftn] jnz near %4 pop ebx cmp byte[curmosaicsz],1 jne near domosaicng16b ret%5 processwinpixel processwinpixel processwinpixel processwinpixel processwinpixel processwinpixel processwinpixel processwinpixel add edi,32 jmp %%ntile%%docache call %3 jmp %%returnfromcache%%tileadd add ax,[bgtxadd] jmp %%next%endmacro%macro drawlinengomwin16b 9 ; tile value : bit 15 = flipy, bit 14 = flipx, bit 13 = priority value ; bit 10-12 = palette, 0-9=tile# mov ebx,[cbgval] 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 %2 ; start drawing from ecx to edi test word[vrama+eax],8000h jnz near %%flipypart add ecx,[yposng] jmp %%notflipypart%%flipypart add ecx,[flipyposng]%%notflipypart test word[vrama+eax],4000h jnz near %%flipxpart push eax xor ebx,ebx mov esi,ecx mov eax,[CPalPtrng] %9 0,0,%8 %9 1,2,%8 %9 2,4,%8 %9 3,6,%8 %9 4,8,%8 %9 5,10,%8 %9 6,12,%8 %9 7,14,%8 pop eax jmp %%endokay%%flipxpart push eax xor ebx,ebx mov esi,ecx mov eax,[CPalPtrng] %9 7,0,%8 %9 6,2,%8 %9 5,4,%8 %9 4,6,%8 %9 3,8,%8 %9 2,10,%8 %9 1,12,%8 %9 0,14,%8 pop eax jmp %%endokay%5 processwinpixel processwinpixel processwinpixel processwinpixel%%endokay mov ebx,[cbgval] add word[ofsmmptr],2 inc dword[bg1totng+ebx*4] add word[ofsmtptr],2 mov ax,[ofsmmptr] mov ebx,[yposngom] mov edx,[flipyposngom] mov [yposng],ebx mov [flipyposng],edx add edi,16 test eax,03Fh jz near %%tileadd%%next mov ebx,[ofsmcptr] add ebx,[ofsmcptr2] mov ecx,[ofsmval] add dword[ofshvaladd],8 test dword[ebx],ecx 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 [yposng],edx xor edx,38h mov [flipyposng],edx%%noofsm mov ebx,[ofsmcptr] add ebx,[ofsmcptr2] add dword[ofsmcptr2],2 mov ecx,[ofsmval] and dword[ofsmcptr2],3Fh test dword[ebx-40h],ecx jz %%noofsmh 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%%noofsmh dec byte[tleftn] jnz near %4%%fin pop ebx cmp byte[curmosaicsz],1 jne near domosaicng16b ret%%docache call %3 jmp %%returnfromcache%%tileadd mov bx,[bgtxadd] add ax,bx add [ofsmmptr],bx add word[ofsmtptr],bx jmp %%next%endmacro%macro parttilewin 2 cmp dword[ngcwinmode],1 je %%nodraw mov bl,[ecx+%1*8] or bl,bl jz %%nodraw add bl,dl mov [edi+%2*288*2],bl%%nodraw%endmacro%macro tilenormalw 2 cmp dword[ngcwinmode],1 je %%nodraw mov bx,[ecx+%2] mov [edi+%1],bx%%nodraw%endmacro%macro tilenormalwb 2 cmp dword[ngcwinmode],1 je %%nodraw mov bx,[ecx+%2] cmp bx,0FFFFh je %%nodraw mov [edi+%1],bx%%nodraw%endmacro%macro tilenormalwt 2 cmp dword[ngcwinmode],1 je %%nodraw mov bx,[ecx+%2] or bx,[UnusedBit] mov [edi+%1],bx%%nodraw%endmacro%macro tilenormalwbt 2 cmp dword[ngcwinmode],1 je %%nodraw mov bx,[ecx+%2] cmp bx,0FFFFh je %%nodraw or bx,[UnusedBit] mov [edi+%1],bx%%nodraw%endmacro%macro tilenormalwnt 2 cmp dword[ngcwinmode],1 je %%nodraw mov bx,[ecx+%2] mov [edi+%1],bx%%nodraw%endmacro%macro tilenormalwbnt 2 cmp dword[ngcwinmode],1 je %%nodraw mov bx,[ecx+%2] cmp bx,0FFFFh je %%nodraw mov [edi+%1],bx
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?