⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 newgfx16.mac

📁 linux下的任天堂模拟器代码。供大家参考。
💻 MAC
📖 第 1 页 / 共 5 页
字号:
    ; start drawing from ecx to edi    test word[vrama+eax],4000h    jz %%noflipxpart    add ecx,128%%noflipxpart    test word[vrama+eax],8000h    jnz near %%flipypart    mov dword[tleftnb],8%%nextb    %12 0    %12 2    %12 4    %12 6    %12 8    %12 10    %12 12    %12 14    add ecx,16    add edi,288*2    dec dword[tleftnb]    jnz near %%nextb    sub edi,288*2*8    jmp %%done%%flipypart    add edi,288*2*7    mov dword[tleftnb],8%%nextbm    %12 0    %12 2    %12 4    %12 6    %12 8    %12 10    %12 12    %12 14    add ecx,16    sub edi,288*2    dec dword[tleftnb]    jnz near %%nextbm    add edi,288*2%%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 %%tileadd%%next    dec byte[tleftn]    jnz near %4    pop ebx    ret%5    add edi,32    jmp %%ntile%%docache    call %3    mov [%9+ecx],dl    call %10    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    sar eax,1    cmp dword[ngwintable],0    jne %%notzero    sub [ngwintable+4],eax    jmp %%done%%notzero    sub [ngwintable],eax%%done    pop ebx    pop eax%%nowindowing%endmacro%macro drawbgtileng16b 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    add edi,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    mov ecx,ebx    add ecx,%2*256    mov dl,1 << %2    jmp drawtileng4b16b.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    push ebx    mov ebx,[mode0ads]    mov [mode0add],ebx    pop ebx.nomode0    mov ecx,ebx    add ecx,%2*256    mov dl,1 << %2    jmp drawtileng2b16b.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    mov ecx,ebx    add ecx,%2*256    mov dl,1 << %2    jmp drawtileng8b16b.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    add edi,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    mov ecx,ebx    add ecx,%2*256    mov dl,1 << %2    jmp drawtileng16x164b16b.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    push ebx    mov ebx,[mode0ads]    mov [mode0add],ebx    pop ebx.nomode02    mov ecx,ebx    add ecx,%2*256    mov dl,1 << %2    jmp drawtileng16x162b16b.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    mov ecx,ebx    add ecx,%2*256    mov dl,1 << %2    jmp drawtileng16x168b16b.no8bit2    pop ebx    ret%endmacro%macro drawbgtilengpr116b 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    mov ecx,ebx    add ecx,%2*256    mov dl,1 << %2    jmp drawtileng4b16b.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    push ebx    mov ebx,[mode0ads]    mov [mode0add],ebx    pop ebx.nomode0    mov ecx,ebx    add ecx,%2*256    mov dl,1 << %2    jmp drawtileng2b16b.no2bit    cmp dl,3    jne near .no8bit    ; eax = pointer to beginning of tile area    ProcessBuildWindow %1    mov ecx,ebx    add ecx,%2*256    mov dl,1 << %2    jmp drawtileng8b16b.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    mov ecx,ebx    add ecx,%2*256    mov dl,1 << %2    jmp drawtileng16x164b16b.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    push ebx    mov ebx,[mode0ads]    mov [mode0add],ebx    pop ebx.nomode02    mov ecx,ebx    add ecx,%2*256    mov dl,1 << %2    jmp drawtileng16x162b16b.no2bit2    cmp dl,3    jne near .no8bit2    ; eax = pointer to beginning of tile area    ProcessBuildWindow %1    mov ecx,ebx    add ecx,%2*256    mov dl,1 << %2    jmp drawtileng16x168b16b.no8bit2    pop ebx    ret%endmacro%macro procpixels 3    mov bl,[esi+%2]    mov cl,[esi+%1]    add bl,dl    add cl,dl    mov bx,[eax+ebx*2]    shl ebx,16    mov bx,[eax+ecx*2]    mov [edi+%3],ebx    xor ebx,ebx%endmacro%macro procpixelst 3    mov bl,[esi+%1]    add bl,dl    test bl,%3    jz %%nodraw    mov cx,[eax+ebx*2]    mov [edi+%2],cx%%nodraw%endmacro%macro procpixelstr 3    mov bl,[esi+%2]    mov cl,[esi+%1]    add bl,dl    add cl,dl    mov bx,[eax+ebx*2+512]    shl ebx,16    mov bx,[eax+ecx*2+512]    mov [edi+%3],ebx    xor ebx,ebx%endmacro%macro procpixelstt 3    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 procpixelsnt 3    mov bl,[esi+%2]    mov cl,[esi+%1]    add bl,dl    add cl,dl    mov bx,[eax+ebx*2]    shl ebx,16    mov bx,[eax+ecx*2]    mov [edi+%3],ebx    xor ebx,ebx%endmacro%macro procpixelstnt 3    mov bl,[esi+%1]    add bl,dl    test bl,%3    jz %%nodraw    mov cx,[eax+ebx*2]    mov [edi+%2],cx%%nodraw%endmacro%macro procpixelsmst 3    mov bl,[esi+%2]    mov cl,[esi+%1]    add bl,dl    add cl,dl    mov bx,[eax+ebx*2+512]    shl ebx,16    mov bx,[eax+ecx*2+512]    and ebx,[UnusedBitXor]    mov [edi+%3],ebx    mov [edi+%3+75036*2],ebx    xor ebx,ebx%endmacro%macro procpixelstmst 3    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+%2+75036*2],cx%%nodraw%endmacro%macro procpixelsmsnt 3    mov bl,[esi+%2]    mov cl,[esi+%1]    add bl,dl    add cl,dl    mov bx,[eax+ebx*2]    shl ebx,16    mov bx,[eax+ecx*2]    mov [edi+%3],ebx    mov [edi+%3+75036*2],ebx    xor ebx,ebx%endmacro%macro procpixelstmsnt 3    mov bl,[esi+%1]    add bl,dl    test bl,%3    jz %%nodraw    mov cx,[eax+ebx*2]    mov [edi+%2],cx    mov [edi+%2+75036*2],cx%%nodraw%endmacro%macro procpixelss 3    mov bl,[esi+%2]    mov cl,[esi+%1]    add bl,dl    add cl,dl    mov bx,[eax+ebx*2]    shl ebx,16    mov bx,[eax+ecx*2]    mov [edi+%3+75036*2],ebx    xor ebx,ebx%endmacro%macro procpixelsts 3    mov bl,[esi+%1]    add bl,dl    test bl,%3    jz %%nodraw    mov cx,[eax+ebx*2]    mov [edi+%2+75036*2],cx%%nodraw%endmacro%macro drawlineng16b 10    ; 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    je near %%parttile    jmp %%parttile    %2    ; start drawing from ecx    test dword[vrama+eax],8000h    jz %%notflipyfull    add ecx,[flipyposng]    jmp %%yesflipyfull%%notflipyfull    add ecx,[yposng]%%yesflipyfull    test dword[vrama+eax],4000h    jnz near %%flipxfull    push eax    mov esi,ecx    xor ecx,ecx    xor ebx,ebx    mov eax,[CPalPtrng]    %9 0,1,0    %9 2,3,4    %9 4,5,8    %9 6,7,12    pop eax    jmp %5%%flipxfull    push eax    mov esi,ecx    xor ecx,ecx    xor ebx,ebx    mov eax,[CPalPtrng]    %9 7,6,0    %9 5,4,4    %9 3,2,8    %9 1,0,12    pop eax    jmp %5%%parttile    %2    ; start drawing from ecx to edi    test word[vrama+eax],8000h    jz %%noflipypart    add ecx,[flipyposng]    jmp %%yesflipypart%%noflipypart    add ecx,[yposng]%%yesflipypart    test word[vrama+eax],4000h    jnz near %%flipxpart    push eax    mov eax,[CPalPtrng]    mov esi,ecx    xor ebx,ebx    %10 0,0,%8    %10 1,2,%8    %10 2,4,%8    %10 3,6,%8    %10 4,8,%8    %10 5,10,%8    %10 6,12,%8    %10 7,14,%8    pop eax    jmp %5%%flipxpart    push eax    mov eax,[CPalPtrng]    mov esi,ecx    xor ebx,ebx    %10 7,0,%8    %10 6,2,%8    %10 5,4,%8    %10 4,6,%8    %10 3,8,%8    %10 2,10,%8    %10 1,12,%8    %10 0,14,%8    pop eax%5    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 drawlineng16x1616b 10    ; 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

⌨️ 快捷键说明

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