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

📄 newgfx16.mac

📁 linux下的任天堂模拟器代码。供大家参考。
💻 MAC
📖 第 1 页 / 共 5 页
字号:
%macro Procsprng23456716b 2    ; Draw BG 2    ; Start line by line drawing/check    mov esi,[vidbuffer]    add esi,16*2+288*2    mov ebx,1%%nextline    cmp byte[BGFB+ebx],0    jne near %%nogo    %1 %2, %%nogo    cmp byte[BGMA+ebx],1    jbe %%nogo    xor eax,eax    mov al,[sprtlng+ebx]    mov cl,[sprlefttot+ebx]    mov [csprival],eax    inc byte[sprtlng+ebx]    test byte[sprleftpr+ebx*4+eax],1    jz %%nogo    or cl,cl    jz %%nogo    test byte[SpecialLine+ebx],2    jnz %%hires    push esi    call drawsprng16b    pop esi    jmp %%nogo%%hires    mov cl,[sprlefttot+ebx]    push esi    call drawsprng16bhr    pop esi%%nogo    inc ebx    add esi,288*2    cmp [resolutn],bx    jne near %%nextline%endmacro%macro ProcMode7ng16b 2    mov byte[winon],0    ; Draw BG    ; Start line by line drawing/check    mov esi,[vidbuffer]    add esi,16*2+288*2    mov ebx,[mode7A]    mov [Mode7BackA],ebx    mov ebx,[mode7C]    mov [Mode7BackC],ebx    mov ebx,[mode7X0]    mov [Mode7BackX0],ebx    mov bl,[mode7set]    mov [Mode7BackSet],ebx    mov ebx,1%%nextline    cmp byte[BGFB+ebx],0    jne near %%nogo    cmp byte[BGMA+ebx],7    jne near %%nogo    test byte[intrlng+ebx],40h    jnz near %%nogo    %1 %2, %%nogo    push ebx    mov ebp,[cpalval+ebx*4]    ; Process mosaic    mov byte[curmosaicsz],1    xor ecx,ecx    test byte[mosenng+ebx],1    jz %%nomosaic    mov cl,[mosszng+ebx]    or cl,cl    jz %%nomosaic    inc cl    mov [curmosaicsz],cl    xor edx,edx    mov eax,ebx    div cl    xor edx,edx    mul cl    mov ebx,eax%%nomosaic    ; process line by line    mov edx,[mode7ab+ebx*4]    mov [mode7A],edx    mov edx,[mode7cd+ebx*4]    mov [mode7C],edx    mov edx,[mode7xy+ebx*4]    mov [mode7X0],edx    mov edx,[mode7st+ebx]    mov [mode7set],dl    xor edx,edx    mov eax,ebx    test byte[mode7set],02h    jz %%noflip    mov eax,255    sub eax,ebx%%noflip    mov dx,[BG1SXl+ebx*2]    mov [m7starty],ax    mov ax,[BG1SYl+ebx*2]    mov [curvidoffset],esi    pop ebx    push eax    push edx    push esi    push ebx    test byte[scadsng+ebx],1    jnz %%directmode    push esi    push ebx    call drawmode7win16b    pop ebx    pop esi    jmp %%donemode7%%directmode    push esi    push ebx    call drawmode7win16bd    pop ebx    pop esi%%donemode7    pop ebx    pop esi    pop edx    pop eax    cmp byte[Mode7HiRes16b],0    je %%nogoc    cmp byte[scanlines],0    jne %%nogoc    test byte[scadsng+ebx],1    jnz %%directmodeb    call processmode7hires16b    jmp %%nogoc%%directmodeb    call processmode7hires16bd%%nogoc%%nogo    inc ebx    add esi,288*2    cmp [resolutn],bx    jne near %%nextline    mov ebx,[Mode7BackA]    mov [mode7A],ebx    mov ebx,[Mode7BackC]    mov [mode7C],ebx    mov ebx,[Mode7BackX0]    mov [mode7X0],ebx    mov ebx,[Mode7BackSet]    mov [mode7set],bl%endmacro%macro ProcMode7ngextbg16b 2    mov byte[winon],0    ; Draw BG    ; Start line by line drawing/check    mov esi,[vidbuffer]    add esi,16*2+288*2    mov ebx,[mode7A]    mov [Mode7BackA],ebx    mov ebx,[mode7C]    mov [Mode7BackC],ebx    mov ebx,[mode7X0]    mov [Mode7BackX0],ebx    mov bl,[mode7set]    mov [Mode7BackSet],ebx    mov ebx,1%%nextline    mov byte[esi-1],0    cmp byte[BGFB+ebx],0    jne near %%nogo    cmp byte[BGMA+ebx],7    jne near %%nogo    %1 %2, %%nogo    test byte[intrlng+ebx],40h    jz near %%nogo    mov byte[esi-1],1    push ebx    mov ebp,[cpalval+ebx*4]    ; Process mosaic    mov byte[curmosaicsz],1    xor ecx,ecx    test byte[mosenng+ebx],1    jz %%nomosaic    mov cl,[mosszng+ebx]    or cl,cl    jz %%nomosaic    inc cl    mov [curmosaicsz],cl    xor edx,edx    mov eax,ebx    div cl    xor edx,edx    mul cl    mov ebx,eax%%nomosaic    ; process line by line    mov edx,[mode7ab+ebx*4]    mov [mode7A],edx    mov edx,[mode7cd+ebx*4]    mov [mode7C],edx    mov edx,[mode7xy+ebx*4]    mov [mode7X0],edx    mov edx,[mode7st+ebx]    mov [mode7set],dl    xor edx,edx    mov eax,ebx    test byte[mode7set],02h    jz %%noflip    mov eax,255    sub eax,ebx%%noflip    mov dx,[BG1SXl+ebx*2]    mov [m7starty],ax    mov ax,[BG1SYl+ebx*2]    mov [curvidoffset],esi    push esi    call drawmode7ngextbg16b    pop esi    pop ebx%%nogo    inc ebx    add esi,288*2    cmp [resolutn],bx    jne near %%nextline    mov ebx,[Mode7BackA]    mov [mode7A],ebx    mov ebx,[Mode7BackC]    mov [mode7C],ebx    mov ebx,[Mode7BackX0]    mov [mode7X0],ebx    mov ebx,[Mode7BackSet]    mov [mode7set],bl%endmacro%macro ProcMode7ngextbg216b 2    mov byte[winon],0    ; Draw BG    ; Start line by line drawing/check    mov esi,[vidbuffer]    add esi,16*2+288*2    mov ebx,[mode7A]    mov [Mode7BackA],ebx    mov ebx,[mode7C]    mov [Mode7BackC],ebx    mov ebx,[mode7X0]    mov [Mode7BackX0],ebx    mov bl,[mode7set]    mov [Mode7BackSet],ebx    mov ebx,1%%nextline    cmp byte[BGFB+ebx],0    jne near %%nogo    cmp byte[BGMA+ebx],7    jne near %%nogo    %1 %2, %%nogo    test byte[intrlng+ebx],40h    jz near %%nogo    push ebx    mov ebp,[cpalval+ebx*4]    ; Process mosaic    mov byte[curmosaicsz],1    xor ecx,ecx    test byte[mosenng+ebx],1    jz %%nomosaic    mov cl,[mosszng+ebx]    or cl,cl    jz %%nomosaic    inc cl    mov [curmosaicsz],cl    xor edx,edx    mov eax,ebx    div cl    xor edx,edx    mul cl    mov ebx,eax%%nomosaic    ; process line by line    mov edx,[mode7ab+ebx*4]    mov [mode7A],edx    mov edx,[mode7cd+ebx*4]    mov [mode7C],edx    mov edx,[mode7xy+ebx*4]    mov [mode7X0],edx    mov edx,[mode7st+ebx]    mov [mode7set],dl    xor edx,edx    mov eax,ebx    test byte[mode7set],02h    jz %%noflip    mov eax,255    sub eax,ebx%%noflip    mov dx,[BG1SXl+ebx*2]    mov [m7starty],ax    mov ax,[BG1SYl+ebx*2]    mov [curvidoffset],esi    push esi    jmp %%drawb    cmp byte[esi-1],1    je %%drawb    call drawmode7ngextbg16b    jmp %%drawa%%drawb    call drawmode7ngextbg216b%%drawa    pop esi    pop ebx%%nogo    inc ebx    add esi,288*2    cmp [resolutn],bx    jne near %%nextline    mov ebx,[Mode7BackA]    mov [mode7A],ebx    mov ebx,[Mode7BackC]    mov [mode7C],ebx    mov ebx,[Mode7BackX0]    mov [mode7X0],ebx    mov ebx,[Mode7BackSet]    mov [mode7set],bl%endmacro%macro preparet4ba 0    shl cx,5    add ecx,ecx    add ecx,[vcache4b]%endmacro%macro preparet2ba 0    shl cx,4    shl ecx,2    add ecx,[vcache2b]%endmacro%macro preparet8ba 0    shl cx,6    add ecx,[vcache8b]%endmacro%macro preparet2batile 0    shl ecx,8    add ecx,[vcache2bs]%endmacro%macro preparet4batile 0    shl ecx,8    add ecx,[vcache4bs]%endmacro%macro preparet8batile 0    shl ecx,8    add ecx,[vcache8bs]%endmacro%macro test4ba 0    and ecx,2047    test dword[vidmemch4+ecx*2],0FFFFh%endmacro%macro test2ba 0    and ecx,4095    add edx,dword[mode0add]    test dword[vidmemch2+ecx],0FFh%endmacro%macro test8ba 0    and ecx,1023    test dword[vidmemch8+ecx*4],0FFFFFFFFh%endmacro%macro tilenormal 2    mov ebx,[ecx+%2]    mov [edi+%1],ebx    mov ebx,[ecx+%2+4]    mov [edi+%1+4],ebx    mov ebx,[ecx+%2+8]    mov [edi+%1+8],ebx    mov ebx,[ecx+%2+12]    mov [edi+%1+12],ebx%endmacro%macro tilenormalb 1    cmp word[ecx+%1],0FFFFh    je %%nott    mov bx,[ecx+%1]    mov [edi+%1],bx%%nott%endmacro%macro tilenormals 2    mov ebx,[ecx+%2]    mov [edi+%1+75036*2],ebx    mov ebx,[ecx+%2+4]    mov [edi+%1+4+75036*2],ebx    mov ebx,[ecx+%2+8]    mov [edi+%1+8+75036*2],ebx    mov ebx,[ecx+%2+12]    mov [edi+%1+12+75036*2],ebx%endmacro%macro tilenormalbs 1    cmp word[ecx+%1],0FFFFh    je %%nott    mov bx,[ecx+%1]    mov [edi+%1+75036*2],bx%%nott%endmacro%macro tilenormalt 2    mov ebx,[ecx+%2]    or ebx,[UnusedBit]    mov [edi+%1],ebx    mov ebx,[ecx+%2+4]    or ebx,[UnusedBit]    mov [edi+%1+4],ebx    mov ebx,[ecx+%2+8]    or ebx,[UnusedBit]    mov [edi+%1+8],ebx    mov ebx,[ecx+%2+12]    or ebx,[UnusedBit]    mov [edi+%1+12],ebx%endmacro%macro tilenormalbt 1    cmp word[ecx+%1],0FFFFh    je %%nott    mov bx,[ecx+%1]    or bx,[UnusedBit]    mov [edi+%1],bx%%nott%endmacro%macro tilenormalmsnt 2    mov ebx,[ecx+%2]    mov [edi+%1],ebx    mov [edi+%1+75036*2],ebx    mov ebx,[ecx+%2+4]    mov [edi+%1+4],ebx    mov [edi+%1+4+75036*2],ebx    mov ebx,[ecx+%2+8]    mov [edi+%1+8],ebx    mov [edi+%1+8+75036*2],ebx    mov ebx,[ecx+%2+12]    mov [edi+%1+12],ebx    mov [edi+%1+12+75036*2],ebx%endmacro%macro tilenormalbmsnt 1    cmp word[ecx+%1],0FFFFh    je %%nott    mov bx,[ecx+%1]    mov [edi+%1],bx    mov [edi+%1+75036*2],bx%%nott%endmacro%macro tilenormalmst 2    mov ebx,[ecx+%2]    mov [edi+%1+75036*2],ebx    or ebx,[UnusedBit]    mov [edi+%1],ebx    mov ebx,[ecx+%2+4]    mov [edi+%1+4+75036*2],ebx    or ebx,[UnusedBit]    mov [edi+%1+4],ebx    mov ebx,[ecx+%2+8]    mov [edi+%1+8+75036*2],ebx    or ebx,[UnusedBit]    mov [edi+%1+8],ebx    mov ebx,[ecx+%2+12]    mov [edi+%1+12+75036*2],ebx    or ebx,[UnusedBit]    mov [edi+%1+12],ebx%endmacro%macro tilenormalbmst 1    cmp word[ecx+%1],0FFFFh    je %%nott    mov bx,[ecx+%1]    mov [edi+%1+75036*2],bx    or bx,[UnusedBit]    mov [edi+%1],bx%%nott%endmacro%macro drawtileng16b 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 %%noflipxfull    add ecx,128%%noflipxfull    test dword[vrama+eax],8000h    jnz near %%flipyfull    %11 0,0    %11 288*2,16    %11 288*4,32    %11 288*6,48    %11 288*8,64    %11 288*10,80    %11 288*12,96    %11 288*14,112    jmp %5%%flipyfull    %11 288*14,0    %11 288*12,16    %11 288*10,32    %11 288*8,48    %11 288*6,64    %11 288*4,80    %11 288*2,96    %11 0,112    jmp %5%%parttile    %2    ; 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 %5%%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%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    ret%%docache    call %3    mov [%9+ecx],dl    call %10    jmp %%returnfromcache%%tileadd    add ax,[bgtxadd]    jmp %%next%endmacro%macro drawtileng16x1616b 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 %%done    cmp byte[%1+ecx],0    je near %%parttile    %2    ; start drawing from ecx    test dword[vrama+eax],4000h    jz %%noflipxfull    add ecx,128%%noflipxfull    test dword[vrama+eax],8000h    jnz near %%flipyfull    %11 0,0    %11 288*2,16    %11 288*4,32    %11 288*6,48    %11 288*8,64    %11 288*10,80    %11 288*12,96    %11 288*14,112    jmp %%done%%flipyfull    %11 288*14,0    %11 288*12,16    %11 288*10,32    %11 288*8,48    %11 288*6,64    %11 288*4,80    %11 288*2,96    %11 0,112    jmp %%done%%parttile    %2

⌨️ 快捷键说明

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