newg16wn.mac
来自「linux下的任天堂模拟器代码。供大家参考。」· MAC 代码 · 共 1,189 行 · 第 1/2 页
MAC
1,189 行
%%nodraw%endmacro%macro tilenormalwmst 2 cmp dword[ngcwinmode],1 je %%nodraw mov bx,[ecx+%2] mov [edi+%1+75036*2],bx or bx,[UnusedBit] mov [edi+%1],bx%%nodraw%endmacro%macro tilenormalwbmst 2 cmp dword[ngcwinmode],1 je %%nodraw mov bx,[ecx+%2] cmp bx,0FFFFh je %%nodraw mov [edi+%1+75036*2],bx or bx,[UnusedBit] mov [edi+%1],bx%%nodraw%endmacro%macro tilenormalwmsnt 2 cmp dword[ngcwinmode],1 je %%nodraw mov bx,[ecx+%2] mov [edi+%1+75036*2],bx mov [edi+%1],bx%%nodraw%endmacro%macro tilenormalwbmsnt 2 cmp dword[ngcwinmode],1 je %%nodraw mov bx,[ecx+%2] cmp bx,0FFFFh je %%nodraw mov [edi+%1+75036*2],bx mov [edi+%1],bx%%nodraw%endmacro%macro tilenormalwmsbt 2 mov bx,[ecx+%2] or bx,[UnusedBit] mov [edi+%1],bx cmp dword[ngcwinmode],1 je %%nodraw and bx,[UnusedBitXor] mov [edi+%1+75036*2],bx%%nodraw%endmacro%macro tilenormalwbmsbt 2 mov bx,[ecx+%2] cmp bx,0FFFFh je %%nodraw or bx,[UnusedBit] mov [edi+%1],bx cmp dword[ngcwinmode],1 je %%nodraw and bx,[UnusedBitXor] mov [edi+%1+75036*2],bx%%nodraw%endmacro%macro tilenormalwmsbnt 2 mov bx,[ecx+%2] mov [edi+%1],bx cmp dword[ngcwinmode],1 je %%nodraw mov [edi+%1+75036*2],bx%%nodraw%endmacro%macro tilenormalwbmsbnt 2 cmp bx,0FFFFh je %%nodraw mov bx,[ecx+%2] mov [edi+%1],bx cmp dword[ngcwinmode],1 je %%nodraw mov [edi+%1+75036*2],bx%%nodraw%endmacro%macro tilenormalwsmt 2 mov bx,[ecx+%2] mov [edi+%1+75036*2],bx cmp dword[ngcwinmode],1 je %%nodraw or bx,[UnusedBit] mov [edi+%1],bx%%nodraw%endmacro%macro tilenormalwbsmt 2 mov bx,[ecx+%2] cmp bx,0FFFFh je %%nodraw mov [edi+%1+75036*2],bx cmp dword[ngcwinmode],1 je %%nodraw or bx,[UnusedBit] mov [edi+%1],bx%%nodraw%endmacro%macro tilenormalwsmnt 2 mov bx,[ecx+%2] mov [edi+%1+75036*2],bx cmp dword[ngcwinmode],1 je %%nodraw mov [edi+%1],bx%%nodraw%endmacro%macro tilenormalwbsmnt 2 mov bx,[ecx+%2] cmp bx,0FFFFh je %%nodraw mov [edi+%1+75036*2],bx cmp dword[ngcwinmode],1 je %%nodraw mov [edi+%1],bx%%nodraw%endmacro%macro drawtilengwin16b 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 %%notflipxfull add ecx,128%%notflipxfull test dword[vrama+eax],8000h jnz near %%flipyfull mov dword[tleftnb],8%%loopfa dec dword[ngcpixleft] jnz %%notzero call Nextwinmode%%notzero %11 0,0 %11 288*2,16 %11 288*4,16*2 %11 288*6,16*3 %11 288*8,16*4 %11 288*10,16*5 %11 288*12,16*6 %11 288*14,16*7 add ecx,2 add edi,2 dec dword[tleftnb] jnz near %%loopfa sub edi,16 jmp %%end%%flipyfull mov dword[tleftnb],8%%loopfc dec dword[ngcpixleft] jnz %%notzeroc call Nextwinmode%%notzeroc %11 0,16*7 %11 288*2,16*6 %11 288*4,16*5 %11 288*6,16*4 %11 288*8,16*3 %11 288*10,16*2 %11 288*12,16*1 %11 288*14,0 add ecx,2 add edi,2 dec dword[tleftnb] jnz near %%loopfc sub edi,16 jmp %%end%%parttile %2 ; start drawing from ecx test dword[vrama+eax],4000h jz %%notflipxpart add ecx,128%%notflipxpart test dword[vrama+eax],8000h jnz near %%flipyfullp mov dword[tleftnb],8%%loopfap dec dword[ngcpixleft] jnz %%notzerop call Nextwinmode%%notzerop %12 0,0 %12 288*2,16 %12 288*4,16*2 %12 288*6,16*3 %12 288*8,16*4 %12 288*10,16*5 %12 288*12,16*6 %12 288*14,16*7 add ecx,2 add edi,2 dec dword[tleftnb] jnz near %%loopfap sub edi,16 jmp %%end%%flipyfullp mov dword[tleftnb],8%%loopfcp dec dword[ngcpixleft] jnz %%notzerocp call Nextwinmode%%notzerocp %12 0,16*7 %12 288*2,16*6 %12 288*4,16*5 %12 288*6,16*4 %12 288*8,16*3 %12 288*10,16*2 %12 288*12,16*1 %12 288*14,0 add ecx,2 add edi,2 dec dword[tleftnb] jnz near %%loopfcp sub edi,16 jmp %%end%5 processwinpixel processwinpixel processwinpixel processwinpixel%%end 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 drawtileng16x16win16b 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 %%skip cmp byte[%1+ecx],0 je near %%parttile %2 ; start drawing from ecx test dword[vrama+eax],4000h jz %%notflipxfull add ecx,128%%notflipxfull test dword[vrama+eax],8000h jnz near %%flipyfull mov dword[tleftnb],8%%loopfa dec dword[ngcpixleft] jnz %%notzero call Nextwinmode%%notzero %11 0,0 %11 288*2,16 %11 288*4,16*2 %11 288*6,16*3 %11 288*8,16*4 %11 288*10,16*5 %11 288*12,16*6 %11 288*14,16*7 add ecx,2 add edi,2 dec dword[tleftnb] jnz near %%loopfa sub edi,16 jmp %%end%%flipyfull mov dword[tleftnb],8%%loopfc dec dword[ngcpixleft] jnz %%notzeroc call Nextwinmode%%notzeroc %11 0,16*7 %11 288*2,16*6 %11 288*4,16*5 %11 288*6,16*4 %11 288*8,16*3 %11 288*10,16*2 %11 288*12,16*1 %11 288*14,0 add ecx,2 add edi,2 dec dword[tleftnb] jnz near %%loopfc sub edi,16 jmp %%end%%parttile %2 ; start drawing from ecx test dword[vrama+eax],4000h jz %%notflipxpart add ecx,128%%notflipxpart test dword[vrama+eax],8000h jnz near %%flipyfullp mov dword[tleftnb],8%%loopfap dec dword[ngcpixleft] jnz %%notzerop call Nextwinmode%%notzerop %12 0,0 %12 288*2,16 %12 288*4,16*2 %12 288*6,16*3 %12 288*8,16*4 %12 288*10,16*5 %12 288*12,16*6 %12 288*14,16*7 add ecx,2 add edi,2 dec dword[tleftnb] jnz near %%loopfap sub edi,16 jmp %%end%%flipyfullp mov dword[tleftnb],8%%loopfcp dec dword[ngcpixleft] jnz %%notzerocp call Nextwinmode%%notzerocp %12 0,16*7 %12 288*2,16*6 %12 288*4,16*5 %12 288*6,16*4 %12 288*8,16*3 %12 288*10,16*2 %12 288*12,16*1 %12 288*14,0 add ecx,2 add edi,2 dec dword[tleftnb] jnz near %%loopfcp sub edi,16 jmp %%end%%skip processwinpixel processwinpixel processwinpixel processwinpixel%%end 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 ret%%done%5 processwinpixel processwinpixel processwinpixel processwinpixel processwinpixel processwinpixel processwinpixel processwinpixel add edi,32 jmp %%ntile%%docache call %3 mov [%9+ecx],dl call %10 jmp %%returnfromcache%%tileadd add ax,[bgtxadd] jmp %%next%endmacro%macro drawlinengomwin16b16x16 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 jmp %%endokay %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
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?