newgfx.mac

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

MAC
3,357
字号
    je near %%parttile    %2    ; start drawing from ecx    test dword[vrama+eax],8000h    jnz near %%flipyfull    add ecx,[yposng]    test dword[vrama+eax],4000h    jnz near %%flipxfull    mov ebx,[ecx]    add ebx,edx    mov [edi],ebx    mov ebx,[ecx+4]    add ebx,edx    mov [edi+4],ebx    jmp %5%%flipxfull    mov ebx,[ecx+4]    bswap ebx    add ebx,edx    mov [edi],ebx    mov ebx,[ecx]    bswap ebx    add ebx,edx    mov [edi+4],ebx    jmp %5%%flipyfull    add ecx,[flipyposng]    test word[vrama+eax],4000h    jnz near %%flipxyfull    mov ebx,[ecx]    add ebx,edx    mov [edi],ebx    mov ebx,[ecx+4]    add ebx,edx    mov [edi+4],ebx    jmp %5%%flipxyfull    mov ebx,[ecx+4]    bswap ebx    add ebx,edx    mov [edi],ebx    mov ebx,[ecx]    bswap ebx    add ebx,edx    mov [edi+4],ebx    jmp %5%%parttile    %2    ; start drawing from ecx to edi    test word[vrama+eax],8000h    jnz near %%flipypart    add ecx,[yposng]    test word[vrama+eax],4000h    jnz near %%flipxpart    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    jmp %5%%flipxpart    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    jmp %5%%flipypart    add ecx,[flipyposng]    test word[vrama+eax],4000h    jnz near %%flipxypart    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    jmp %5%%flipxypart    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%5    mov ebx,[ng16bbgval]    add ax,2    inc dword[bg1totng+ebx*4]    add edi,8    test eax,03Fh    jz %%tileadd%%next    dec byte[tleftn]    jnz near %4    pop ebx    cmp byte[curmosaicsz],1    jne near domosaicng    ret%%docache    call %3    jmp %%returnfromcache%%tileadd    add ax,[bgtxadd]    jmp %%next%endmacro%macro drawlineng16x16 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]    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 dword[vrama+eax],8000h    jnz near %%flipyfull    add ecx,[yposng]    test dword[vrama+eax],4000h    jnz near %%flipxfull    mov ebx,[ecx]    add ebx,edx    mov [edi],ebx    mov ebx,[ecx+4]    add ebx,edx    mov [edi+4],ebx    jmp %%done%%flipxfull    mov ebx,[ecx+4]    bswap ebx    add ebx,edx    mov [edi],ebx    mov ebx,[ecx]    bswap ebx    add ebx,edx    mov [edi+4],ebx    jmp %%done%%flipyfull    add ecx,[flipyposng]    test word[vrama+eax],4000h    jnz near %%flipxyfull    mov ebx,[ecx]    add ebx,edx    mov [edi],ebx    mov ebx,[ecx+4]    add ebx,edx    mov [edi+4],ebx    jmp %%done%%flipxyfull    mov ebx,[ecx+4]    bswap ebx    add ebx,edx    mov [edi],ebx    mov ebx,[ecx]    bswap ebx    add ebx,edx    mov [edi+4],ebx    jmp %%done%%parttile    %2    ; start drawing from ecx to edi    test word[vrama+eax],8000h    jnz near %%flipypart    add ecx,[yposng]    test word[vrama+eax],4000h    jnz near %%flipxpart    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    jmp %%done%%flipxpart    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    jmp %%done%%flipypart    add ecx,[flipyposng]    test word[vrama+eax],4000h    jnz near %%flipxypart    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    jmp %%done%%flipxypart    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%%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    cmp byte[curmosaicsz],1    jne near domosaicng    ret%5    add edi,16    jmp %%ntile%%docache    call %3    jmp %%returnfromcache%%tileadd    add ax,[bgtxadd]    jmp %%next%endmacro%macro drawbglineng 2    mov dword[ng16bprval],0    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 [pesimpng],esi    mov edi,xtravbuf+16    mov ecx,64    xor eax,eax    mov esi,xtravbuf+16    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    cmp byte[BGMA+ebx],5    jae near .tiles16x8%%yesmosaic    cmp byte[t16x161+ebx+%1*256],1    je near .tiles16x16    cmp byte[osm2dis],1    je .nooffsetm    cmp byte[BGMA+ebx],2    je near .offsetm    cmp byte[bgmode],4    je .nooffsetm    cmp byte[BGMA+ebx],4    je near .offsetm.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    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 drawlineng4b.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 drawlineng2b.no2bit

⌨️ 快捷键说明

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