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

📄 newgfx16.mac

📁 linux下的任天堂模拟器代码。供大家参考。
💻 MAC
📖 第 1 页 / 共 5 页
字号:
    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    cmp byte[%1+ecx],2    je near %%done    cmp byte[%1+ecx],0    je near %%parttile    %2    ; start drawing from ecx    test word[vrama+eax],8000h    jz %%noflipyfull    add ecx,[flipyposng]    jmp %%yesflipyfull%%noflipyfull    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 %%done%%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 %%done%%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 %%done%%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%%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    cmp byte[curmosaicsz],1    jne near domosaicng16b    ret%5    add edi,32    jmp %%ntile%%docache    call %3    jmp %%returnfromcache%%tileadd    add ax,[bgtxadd]    jmp %%next%endmacro%macro drawbglineng16b 2    mov dword[ng16bprval],0    mov [pesimpng],esi    mov dword[ng16bbgval],%1    cmp byte[bgmode],5    jb %%nointerl    test byte[intrlng+ebx],01h    jz %%nointerl    add ecx,ebx    add ecx,[cfieldad]%%nointerl    push ebx    mov byte[curmosaicsz],1    xor eax,eax    test byte[mosenng+ebx],1 << %1    jz %%nomosaic    mov al,[mosszng+ebx]    or al,al    jz %%nomosaic    inc al    mov [curmosaicsz],al    mov cl,al    mov al,bl    div cl    mul cl    mov ebx,eax    mov edi,xtravbuf+32    mov ecx,128    mov eax,0FFFFFFFFh    mov esi,xtravbuf+32    rep stosd    or ebx,ebx    jnz %%nozeroline    inc ebx%%nozeroline    mov ecx,[BG1SYl+ebx*2+%1*512]    and ecx,0FFFFh    add ecx,ebx    jmp %%yesmosaic%%nomosaic%%yesmosaic    cmp byte[BGMA+ebx],5    jae near .tiles16x8    cmp byte[osm2dis],1    je .nooffsetm    cmp byte[BGMA+ebx],2    je near .offsetm    cmp byte[bgmode],4    je .nooffsetm4    cmp byte[BGMA+ebx],4    je near .offsetm.nooffsetm4    cmp byte[t16x161+ebx+%1*256],1    je near .tiles16x16.nooffsetm    mov eax,[BGPT1+ebx*2+%1*512]    test ecx,100h    jz .noyinc    add eax,[BGPT1Y+ebx*2+%1*512].noyinc    lea ecx,[ecx*8]    mov edx,ecx    and ecx,07C0h      ; 1Fh*40h    and edx,38h    add eax,ecx    mov [yposng],edx    xor edx,38h    mov ecx,[BG1SXl+ebx*2+%1*512]    mov [flipyposng],edx    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 drawlineng4b16b.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 ecx,[mode0ads]    mov [mode0add],ecx.nomode0    mov ecx,ebx    mov dl,1 << %2    add ecx,%2*256    jmp drawlineng2b16b.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    mov dl,1 << %2    add ecx,%2*256    jmp drawlineng8b16b.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    mov eax,[BGPT1+ebx*2+%1*512]    test ecx,200h    jz .noyinc2    add eax,[BGPT1Y+ebx*2+%1*512].noyinc2    lea edx,[ecx*8]    lea ecx,[ecx*4]    and edx,38h    and ecx,07C0h      ; 1Fh*40h    mov [yposng],edx    xor edx,38h    add eax,ecx    mov [flipyposng],edx    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    mov dl,1 << %2    add ecx,%2*256    jmp drawlineng16x164b16b.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    mov dl,1 << %2    add ecx,%2*256    jmp drawlineng16x162b16b.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    mov dl,1 << %2    add ecx,%2*256    jmp drawlineng16x168b16b.no8bit2    pop ebx    ret.tiles16x8    cmp byte[t16x161+ebx+%1*256],1    je .tiles16x16hr    mov dword[taddnfy16x16],0    mov dword[taddfy16x16],0    mov eax,[BGPT1+ebx*2+%1*512]    test ecx,100h    jz .noyinc2c    add eax,[BGPT1Y+ebx*2+%1*512].noyinc2c    lea ecx,[ecx*8]    mov edx,ecx    and ecx,07C0h      ; 1Fh*40h    and edx,38h    jmp .tiles16x8hr.tiles16x16hr    mov dword[taddnfy16x16],0    mov dword[taddfy16x16],16    test ecx,08h    jz .nobottomy2    mov dword[taddnfy16x16],16    mov dword[taddfy16x16],-16.nobottomy2    mov eax,[BGPT1+ebx*2+%1*512]    test ecx,200h    jz .noyinc2b    add eax,[BGPT1Y+ebx*2+%1*512].noyinc2b    lea edx,[ecx*8]    lea ecx,[ecx*4]    and edx,38h    and ecx,07C0h      ; 1Fh*40h.tiles16x8hr    mov [yposng],edx    xor edx,38h    add eax,ecx    mov [flipyposng],edx    mov ecx,[BG1SXl+ebx*2+%1*512]    add ecx,ecx    mov edx,[BGPT1X+ebx*2+%1*512]    test ecx,200h    jz .noxinc2b    add eax,edx    neg dx.noxinc2b    mov edi,ecx    sub dx,64    and ecx,01F0h    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    shr edi,1    mov edx,[colormodedef+edx*4+%1]    neg edi    add edi,edi    cmp dl,2    jne near .no4bit2b    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    mov dword[cbgval],%1    mov ecx,ebx    mov dl,1 << %2    add ecx,%2*256    jmp drawlineng16x84b16b.no4bit2b    cmp dl,1    jne near .no2bit2b    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    mov dword[cbgval],%1    mov ecx,ebx    mov dl,1 << %2    add ecx,%2*256    jmp drawlineng16x82b16b.no2bit2b    pop ebx    ret.offsetm16x16    pushad    xor edx,edx    mov dx,[BG3SYl+ebx*2];    and dx,0F8h    shr edx,3    shl edx,6    xor eax,eax    mov ax,[BGPT3+ebx*2]    add ax,dx    xor edx,edx    mov dx,[BG3SXl+ebx*2]    and dx,0F8h    mov [ofsmcyps],ebx    shr edx,3    shl edx,1    add ax,dx    mov dx,[bg3scrolx]    test dx,1000h    jz .nooma16x16    and dx,0F000h    shr dx,5    add ax,dx.nooma16x16    cmp byte[BGMA+ebx],4    je .offsetm416x16    add eax,40h.offsetm416x16    mov edx,eax    and edx,0FFFFFFC0h    add edx,[vram]    mov [ofsmcptr],edx    and eax,3Fh    mov [ofsmcptr2],eax    mov eax,[BGPT1Y+ebx*2+%1*512]    mov [ofsmady],eax    mov eax,[BGPT1X+ebx*2+%1*512]    mov [ofsmadx],eax    mov eax,[BGPT1+ebx*2+%1*512]    mov [ofsmtptr],eax    mov [ofsmtptrs],eax    test ecx,100h    jz .noyincd16x16    add eax,[BGPT1Y+ebx*2+%1*512].noyincd16x16    lea ecx,[ecx*8]    mov edx,ecx    and ecx,07C0h      ; 1Fh*40h    and edx,38h    add eax,ecx    mov [yposng],edx    mov [yposngom],edx    xor edx,38h    mov ecx,[BG1SXl+ebx*2+%1*512]    mov [flipyposng],edx    mov [flipyposngom],edx    mov edx,[BGPT1X+ebx*2+%1*512]    test ecx,100h    jz .noxincd16x16    add eax,edx    add [ofsmtptr],edx    neg dx.noxincd16x16    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    add [ofsmtptr],ecx    mov [ofsmmptr],eax    mov dword[ofshvaladd],0    popad    mov eax,[BGPT1+ebx*2+%1*512]    mov [ofsmtptr],eax    mov [ofsmtptrs],eax    mov dword[taddnfy16x16],0    mov dword[taddfy16x16],16    test ecx,08h    jz .nobottomy16om    mov dword[taddnfy16x16],16    mov dword[taddfy16x16],-16.nobottomy16om    mov eax,[BGPT1+ebx*2+%1*512]    test ecx,200h    jz .noyinc216om    add eax,[BGPT1Y+ebx*2+%1*512].noyinc216om    lea edx,[ecx*8]    lea ecx,[ecx*4]    and edx,38h    and ecx,07C0h      ; 1Fh*40h    mov [yposng],edx    xor edx,38h    add eax,ecx    mov [flipyposng],edx    mov [flipyposngom],edx    mov ecx,[BG1SXl+ebx*2+%1*512]    mov edx,[BGPT1X+ebx*2+%1*512]    test ecx,200h    jz .noxinc216om    add eax,edx    add [ofsmtptr],edx    neg dx.noxinc216om    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    add [ofsmtptr],ecx    mov [ofsmmptr],eax    mov word[bgtxadd2],0    cmp word[BGPT3X+ebx*2],0    je .yesoverfl    mov cx,[BG3SXl+ebx*2]    add cx,16    test cx,100h    jz .notoverfl    add dword[ofsmcptr],800h    sub word[bgtxadd2],800h    jmp .yesoverfl.notoverfl    add word[bgtxadd2],800h.yesoverfl    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 .no4bitom16x16    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    mov dword[ofsmval],2000h << %1    mov dword[ofsmvalh],2000h << %1    mov dword[cbgval],%1    ProcessBuildWindow %1    mov ecx,ebx    mov dl,1 << %2    add ecx,%2*256    jmp drawlinengom16x164b16b.no4bitom16x16    pop ebx    ret    ; Offsetmode calculation : <b2-7,2109>*1024+<b3-7,2112>*32+<b3-7,2111>.offsetm    cmp byte[t16x161+ebx+%1*256],1    je near .offsetm16x16    xor edx,edx    mov dx,[BG3SYl+ebx*2]    test dx,08h    jz .overflow    and dx,0F8h.overflow    shr edx,3    shl edx,6    xor eax,eax    mov ax,[BGPT3+ebx*2]    add ax,dx    xor edx,edx    mov dx,[BG3SXl+ebx*2]    and dx,0F8h    mov [ofsmcyps],ebx    shr edx,3    shl edx,1    add ax,dx    mov dx,[bg3scrol

⌨️ 快捷键说明

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