newgfx.mac

来自「linux下的任天堂模拟器代码。供大家参考。」· MAC 代码 · 共 3,357 行 · 第 1/5 页

MAC
3,357
字号
    add ebx,edx    add eax,edx    mov [edi+288*7],ebx    mov [edi+288*7+4],eax    pop eax    jmp %%done%%flipyfull    test word[vrama+eax],4000h    jnz near %%flipxyfull    push eax    mov ebx,[ecx]    mov eax,[ecx+4]    add ebx,edx    add eax,edx    mov [edi+288*7],ebx    mov [edi+288*7+4],eax    mov ebx,[ecx+8]    mov eax,[ecx+12]    add ebx,edx    add eax,edx    mov [edi+288*6],ebx    mov [edi+288*6+4],eax    mov ebx,[ecx+16]    mov eax,[ecx+20]    add ebx,edx    add eax,edx    mov [edi+288*5],ebx    mov [edi+288*5+4],eax    mov ebx,[ecx+24]    mov eax,[ecx+28]    add ebx,edx    add eax,edx    mov [edi+288*4],ebx    mov [edi+288*4+4],eax    mov ebx,[ecx+32]    mov eax,[ecx+36]    add ebx,edx    add eax,edx    mov [edi+288*3],ebx    mov [edi+288*3+4],eax    mov ebx,[ecx+40]    mov eax,[ecx+44]    add ebx,edx    add eax,edx    mov [edi+288*2],ebx    mov [edi+288*2+4],eax    mov ebx,[ecx+48]    mov eax,[ecx+52]    add ebx,edx    add eax,edx    mov [edi+288],ebx    mov [edi+288+4],eax    mov ebx,[ecx+56]    mov eax,[ecx+60]    add ebx,edx    add eax,edx    mov [edi],ebx    mov [edi+4],eax    pop eax    jmp %%done%%flipxyfull    push eax    mov ebx,[ecx+4]    mov eax,[ecx]    bswap ebx    bswap eax    add ebx,edx    add eax,edx    mov [edi+288*7],ebx    mov [edi+288*7+4],eax    mov ebx,[ecx+12]    mov eax,[ecx+8]    bswap ebx    bswap eax    add ebx,edx    add eax,edx    mov [edi+288*6],ebx    mov [edi+288*6+4],eax    mov ebx,[ecx+20]    mov eax,[ecx+16]    bswap ebx    bswap eax    add ebx,edx    add eax,edx    mov [edi+288*5],ebx    mov [edi+288*5+4],eax    mov ebx,[ecx+28]    mov eax,[ecx+24]    bswap ebx    bswap eax    add ebx,edx    add eax,edx    mov [edi+288*4],ebx    mov [edi+288*4+4],eax    mov ebx,[ecx+36]    mov eax,[ecx+32]    bswap ebx    bswap eax    add ebx,edx    add eax,edx    mov [edi+288*3],ebx    mov [edi+288*3+4],eax    mov ebx,[ecx+44]    mov eax,[ecx+40]    bswap ebx    bswap eax    add ebx,edx    add eax,edx    mov [edi+288*2],ebx    mov [edi+288*2+4],eax    mov ebx,[ecx+52]    mov eax,[ecx+48]    bswap ebx    bswap eax    add ebx,edx    add eax,edx    mov [edi+288],ebx    mov [edi+288+4],eax    mov ebx,[ecx+60]    mov eax,[ecx+56]    bswap ebx    bswap eax    add ebx,edx    add eax,edx    mov [edi],ebx    mov [edi+4],eax    pop eax    jmp %%done%%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 %%done%%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 %%done%%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 %%done%%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%%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    ret%5    add edi,16    jmp %%ntile%%docache    call %3    jmp %%returnfromcache%%tileadd    add ax,[bgtxadd]    jmp %%next%endmacro%macro ProcessBuildWindow 1    mov dword[ngwinen],0    test byte[winbg1enval+ebx+%1*256],0Ah    jz %%nowindowing    push eax    push ebx    mov al,[winlogicaval+ebx*2]    shr al,%1*2    and al,03h    mov [nglogicval],al    mov eax,ebx    add ebx,%1*256    call BuildWindow    mov eax,edi    sub eax,esi    cmp dword[ngwintable],0    jne %%notzero    sub [ngwintable+4],eax    jmp %%done%%notzero    sub [ngwintable],eax%%done    pop ebx    pop eax%%nowindowing%endmacro%macro drawbgtileng 2    mov dword[ng16bprval],0    mov dword[ng16bbgval],%1    cmp byte[t16x161+ebx+%1*256],1    je near .tiles16x16    push ebx    mov eax,[BGPT1+ebx*2+%1*512]    test ecx,100h    jz .noyinc    add eax,[BGPT1Y+ebx*2+%1*512].noyinc    lea ecx,[ecx*8]    and ecx,07C0h      ; 1Fh*40h    add eax,ecx    mov ecx,[BG1SXl+ebx*2+%1*512]    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 drawtileng4b.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 drawtileng2b.no2bit    cmp dl,3    jne near .no8bit    shr ecx,6    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 drawtileng8b.no8bit    pop ebx    ret.tiles16x16    mov dword[taddnfy16x16],0    mov dword[taddfy16x16],16    test ecx,08h    jz .nobottomy    mov dword[taddnfy16x16],16    mov dword[taddfy16x16],-16.nobottomy    push ebx    mov eax,[BGPT1+ebx*2+%1*512]    test ecx,200h    jz .noyinc2    add eax,[BGPT1Y+ebx*2+%1*512].noyinc2    lea ecx,[ecx*4]    and ecx,07C0h      ; 1Fh*40h    add eax,ecx    mov ecx,[BG1SXl+ebx*2+%1*512]    mov edx,[BGPT1X+ebx*2+%1*512]    test ecx,200h    jz .noxinc2    add eax,edx    neg dx.noxinc2    mov edi,ecx    sub dx,64    and ecx,1F0h    and eax,0FFFFh    shr ecx,3    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,0Fh    and edx,07h    and ecx,0FFFFh    mov edx,[colormodedef+edx*4+%1]    neg edi    cmp dl,2    jne near .no4bit2    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 drawtileng16x164b.no4bit2    cmp dl,1    jne near .no2bit2    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 .nomode02    mov ebx,[mode0ads]    mov [mode0add],ebx.nomode02    jmp drawtileng16x162b.no2bit2    cmp dl,3    jne near .no8bit    shr ecx,6    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 drawtileng16x168b.no8bit2    pop ebx    ret%endmacro%macro drawbgtilengpr1 2    mov dword[ng16bprval],2000h    mov dword[ng16bbgval],%1    cmp byte[t16x161+ebx+%1*256],1    je near .tiles16x16    push ebx    mov edx,[BGMA+ebx]    mov ecx,[bgtxad+ebx*2+%2*512]    and edx,07h    mov [bgtxadd],cx    mov ecx,[ngptrdat+%2*1024+ebx*4]    mov edx,[colormodedef+edx*4+%1]    mov [ngptrdat2],ecx    mov eax,[ngceax+%2*1024+ebx*4]    mov edi,[ngcedi+%2*1024+ebx*4]    cmp dl,2    jne near .no4bit    ; eax = pointer to beginning of tile area    ProcessBuildWindow %1    jmp drawtileng4b.no4bit    cmp dl,1    jne near .no2bit    ; 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 drawtileng2b.no2bit    cmp dl,3    jne near .no8bit    ; eax = pointer to beginning of tile area    ProcessBuildWindow %1    jmp drawtileng8b.no8bit    pop ebx    ret.tiles16x16    mov ecx,[BG1SYl+ebx*2+%1*512]    and ecx,0FFFFh    mov dword[taddnfy16x16],0    add ecx,ebx    mov dword[taddfy16x16],16    test ecx,08h    jz .nobottomy    mov dword[taddnfy16x16],16    mov dword[taddfy16x16],-16.nobottomy    push ebx    mov edx,[BGMA+ebx]    mov ecx,[bgtxad+ebx*2+%2*512]    and edx,07h    mov [bgtxadd],cx    mov ecx,[ngptrdat+%2*1024+ebx*4]    mov edx,[colormodedef+edx*4+%1]    mov [ngptrdat2],ecx    mov eax,[ngceax+%2*1024+ebx*4]    mov edi,[ngcedi+%2*1024+ebx*4]    cmp dl,2    jne near .no4bit2    ; eax = pointer to beginning of tile area    ProcessBuildWindow %1    jmp drawtileng16x164b.no4bit2    cmp dl,1    jne near .no2bit2    ; eax = pointer to beginning of tile area    mov dword[mode0add],0    ProcessBuildWindow %1    cmp byte[BGMA+ebx],0    jne .nomode02    mov ebx,[mode0ads]    mov [mode0add],ebx.nomode02    jmp drawtileng16x162b.no2bit2    cmp dl,3    jne near .no8bit2    ; eax = pointer to beginning of tile area    ProcessBuildWindow %1    jmp drawtileng16x168b.no8bit2    pop ebx    ret%endmacro%macro drawlineng 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

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?