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 + -
显示快捷键?