newgfx16.mac

来自「十七种模拟器源代码 非常有用的作课程设计不可缺少的」· MAC 代码 · 共 3,159 行 · 第 1/5 页

MAC
3,159
字号
;Copyright (C) 1997-2001 ZSNES Team ( zsknight@zsnes.com / _demo_@zsnes.com )
;
;This program is free software; you can redistribute it and/or
;modify it under the terms of the GNU General Public License
;as published by the Free Software Foundation; either
;version 2 of the License, or (at your option) any later
;version.
;
;This program is distributed in the hope that it will be useful,
;but WITHOUT ANY WARRANTY; without even the implied warranty of
;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;GNU General Public License for more details.
;
;You should have received a copy of the GNU General Public License
;along with this program; if not, write to the Free Software
;Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.


EXTSYM mode7B, mode7D, processmode7hires16b, processmode7hires16bd
EXTSYM drawmode7ngextbg16b,drawmode7ngextbg216b
EXTSYM osm2dis






; drawtileng16b

%macro ngsub 2
    test dword[BGMS1+ebx*2+1],%1
    jz near %2
    test dword[BGMS1+ebx*2],%1
    jnz near %2
    test byte[FillSubScr+ebx],1
    jnz near %2
%endmacro

%macro ngmain 2
    test dword[BGMS1+ebx*2],%1
    jnz %%yesmain
    test byte[FillSubScr+ebx],1
    jz near %2
    test dword[BGMS1+ebx*2+1],%1
    jz near %2
%%yesmain
%endmacro

%macro sprdrawpra16bng 1
    or al,al
    jz %%skip
    add al,ch
    test byte[sprpriodata+ebx-%1+16],dl
    jnz %%skip
    mov ax,[ebp+eax*2]
    mov [edi+ebx*2-%1*2],ax
    xor eax,eax
    or byte[sprpriodata+ebx-%1+16],dl
%%skip
%endmacro

%macro sprdrawprb16bng 1
    or al,al
    jz %%skip
    add al,ch
    mov ax,[ebp+eax*2]
    mov [edi+ebx*2-%1*2],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprawb16bng 1
    or al,al
    jz %%skip
    add al,dh
    test byte[sprpriodata+ebx-%1+16],dl
    jnz %%skip
    cmp byte[ecx+ebx-%1],1
    je %%skip
    or byte[sprpriodata+ebx-%1+16],dl
    mov ax,[ebp+eax*2]
    mov [edi+ebx*2-%1*2],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprbwb16bng 1
    or al,al
    jz %%skip
    add al,dh
    cmp byte[ecx+ebx-%1],1
    je %%skip
    mov ax,[ebp+eax*2]
    mov [edi+ebx*2-%1*2],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawpra16bngt 1
    or al,al
    jz %%skip
    add al,ch
    test byte[sprpriodata+ebx-%1+16],dl
    jnz %%skip
    mov ax,[ebp+eax*2+512]
    or byte[sprpriodata+ebx-%1+16],dl
    cmp ch,128+64
    jae %%yestransp
    and eax,[UnusedBitXor]
%%yestransp
    mov [edi+ebx*2-%1*2],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprb16bngt 1
    or al,al
    jz %%skip
    add al,ch
    mov ax,[ebp+eax*2+512]
    cmp ch,128+64
    jae %%yestransp
    and eax,[UnusedBitXor]
%%yestransp
    mov [edi+ebx*2-%1*2],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprawb16bngt 1
    or al,al
    jz %%skip
    add al,dh
    test byte[sprpriodata+ebx-%1+16],dl
    jnz %%skip
    cmp byte[ecx+ebx-%1],1
    je %%skip
    or byte[sprpriodata+ebx-%1+16],dl
    mov ax,[ebp+eax*2+512]
    cmp dh,128+64
    jae %%yestransp
    and eax,[UnusedBitXor]
%%yestransp
    mov [edi+ebx*2-%1*2],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprbwb16bngt 1
    or al,al
    jz %%skip
    add al,dh
    cmp byte[ecx+ebx-%1],1
    je %%skip
    mov ax,[ebp+eax*2+512]
    cmp dh,128+64
    jae %%yestransp
    and eax,[UnusedBitXor]
%%yestransp
    mov [edi+ebx*2-%1*2],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawpra16bngmst 1
    or al,al
    jz %%skip
    add al,ch
    test byte[sprpriodata+ebx-%1+16],dl
    jnz %%skip
    mov ax,[ebp+eax*2+512]
    cmp ch,128+64
    jae %%yestransp
    and eax,[UnusedBitXor]
%%yestransp
    mov [edi+ebx*2-%1*2],ax
    and eax,[UnusedBitXor]
    mov [edi+ebx*2-%1*2+75036*2],ax
    xor eax,eax
    or byte[sprpriodata+ebx-%1+16],dl
%%skip
%endmacro

%macro sprdrawprb16bngmst 1
    or al,al
    jz %%skip
    add al,ch
    mov ax,[ebp+eax*2+512]
    cmp ch,128+64
    jae %%yestransp
    and eax,[UnusedBitXor]
%%yestransp
    mov [edi+ebx*2-%1*2],ax
    and eax,[UnusedBitXor]
    mov [edi+ebx*2-%1*2+75036*2],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprawb16bngmst 1
    or al,al
    jz %%skip
    add al,dh
    test byte[sprpriodata+ebx-%1+16],dl
    jnz %%skip
    cmp byte[ecx+ebx-%1],1
    je %%skip
    or byte[sprpriodata+ebx-%1+16],dl
    mov ax,[ebp+eax*2+512]
    cmp dh,128+64
    jae %%yestransp
    and eax,[UnusedBitXor]
%%yestransp
    mov [edi+ebx*2-%1*2],ax
    and eax,[UnusedBitXor]
    mov [edi+ebx*2-%1*2+75036*2],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprbwb16bngmst 1
    or al,al
    jz %%skip
    add al,dh
    cmp byte[ecx+ebx-%1],1
    je %%skip
    mov ax,[ebp+eax*2+512]
    cmp dh,128+64
    jae %%yestransp
    and eax,[UnusedBitXor]
%%yestransp
    mov [edi+ebx*2-%1*2],ax
    and eax,[UnusedBitXor]
    mov [edi+ebx*2-%1*2+75036*2],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprawb16bngst 1
    or al,al
    jz %%skip
    add al,dh
    test byte[sprpriodata+ebx-%1+16],dl
    jnz %%skip
    or byte[sprpriodata+ebx-%1+16],dl
    mov ax,[ebp+eax*2+512]
    cmp dh,128+64
    jae %%yestransp
    and eax,[UnusedBitXor]
%%yestransp
    mov [edi+ebx*2-%1*2],ax
    cmp byte[ecx+ebx-%1],1
    je %%skip
    and eax,[UnusedBitXor]
    mov [edi+ebx*2-%1*2+75036*2],ax
%%skip
    xor eax,eax
%endmacro

%macro sprdrawprbwb16bngst 1
    or al,al
    jz %%skip
    add al,dh
    mov ax,[ebp+eax*2+512]
    cmp dh,128+64
    jae %%yestransp
    and eax,[UnusedBitXor]
%%yestransp
    mov [edi+ebx*2-%1*2],ax
    cmp byte[ecx+ebx-%1],1
    je %%skip
    and eax,[UnusedBitXor]
    mov [edi+ebx*2-%1*2+75036*2],ax
%%skip
    xor eax,eax
%endmacro

%macro sprdrawprawb16bngmt 1
    or al,al
    jz %%skip
    add al,dh
    test byte[sprpriodata+ebx-%1+16],dl
    jnz %%skip
    or byte[sprpriodata+ebx-%1+16],dl
    mov ax,[ebp+eax*2]
    mov [edi+ebx*2-%1*2+75036*2],ax
    cmp byte[ecx+ebx-%1],1
    je %%skip
    cmp dh,128+64
    jae %%yestransp
    and eax,[UnusedBitXor]
%%yestransp
    or ax,[UnusedBit]
    mov [edi+ebx*2-%1*2],ax
%%skip
    xor eax,eax
%endmacro

%macro sprdrawprbwb16bngmt 1
    or al,al
    jz %%skip
    add al,dh
    mov ax,[ebp+eax*2]
    mov [edi+ebx*2-%1*2+75036*2],ax
    cmp byte[ecx+ebx-%1],1
    je %%skip
    or ax,[UnusedBit]
    cmp dh,128+64
    jae %%yestransp
    and eax,[UnusedBitXor]
%%yestransp
    mov [edi+ebx*2-%1*2],ax
%%skip
    xor eax,eax
%endmacro

%macro sprdrawpra16bngnt 1
    or al,al
    jz %%skip
    add al,ch
    test byte[sprpriodata+ebx-%1+16],dl
    jnz %%skip
    mov ax,[ebp+eax*2]
    mov [edi+ebx*2-%1*2],ax
    xor eax,eax
    or byte[sprpriodata+ebx-%1+16],dl
%%skip
%endmacro

%macro sprdrawprb16bngnt 1
    or al,al
    jz %%skip
    add al,ch
    mov ax,[ebp+eax*2]
    mov [edi+ebx*2-%1*2],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprawb16bngnt 1
    or al,al
    jz %%skip
    add al,dh
    test byte[sprpriodata+ebx-%1+16],dl
    jnz %%skip
    or byte[sprpriodata+ebx-%1+16],dl
    cmp byte[ecx+ebx-%1],1
    je %%skip
    mov ax,[ebp+eax*2]
    mov [edi+ebx*2-%1*2],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprbwb16bngnt 1
    or al,al
    jz %%skip
    add al,dh
    cmp byte[ecx+ebx-%1],1
    je %%skip
    mov ax,[ebp+eax*2]
    mov [edi+ebx*2-%1*2],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawpra16bngmsnt 1
    or al,al
    jz %%skip
    add al,ch
    test byte[sprpriodata+ebx-%1+16],dl
    jnz %%skip
    mov ax,[ebp+eax*2]
    mov [edi+ebx*2-%1*2],ax
    mov [edi+ebx*2-%1*2+75036*2],ax
    xor eax,eax
    or byte[sprpriodata+ebx-%1+16],dl
%%skip
%endmacro

%macro sprdrawprb16bngmsnt 1
    or al,al
    jz %%skip
    add al,ch
    mov ax,[ebp+eax*2]
    mov [edi+ebx*2-%1*2],ax
    mov [edi+ebx*2-%1*2+75036*2],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprawb16bngmsnt 1
    or al,al
    jz %%skip
    add al,dh
    test byte[sprpriodata+ebx-%1+16],dl
    jnz %%skip
    or byte[sprpriodata+ebx-%1+16],dl
    cmp byte[ecx+ebx-%1],1
    je %%skip
    mov ax,[ebp+eax*2]
    mov [edi+ebx*2-%1*2],ax
    mov [edi+ebx*2-%1*2+75036*2],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprbwb16bngmsnt 1
    or al,al
    jz %%skip
    add al,dh
    cmp byte[ecx+ebx-%1],1
    je %%skip
    mov ax,[ebp+eax*2]
    mov [edi+ebx*2-%1*2],ax
    mov [edi+ebx*2-%1*2+75036*2],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprawb16bngsnt 1
    or al,al
    jz %%skip
    add al,dh
    test byte[sprpriodata+ebx-%1+16],dl
    jnz %%skip
    or byte[sprpriodata+ebx-%1+16],dl
    mov ax,[ebp+eax*2]
    mov [edi+ebx*2-%1*2],ax
    cmp byte[ecx+ebx-%1],1
    je %%skip
    mov [edi+ebx*2-%1*2+75036*2],ax
%%skip
    xor eax,eax
%endmacro

%macro sprdrawprbwb16bngsnt 1
    or al,al
    jz %%skip
    add al,dh
    mov ax,[ebp+eax*2]
    mov [edi+ebx*2-%1*2],ax
    cmp byte[ecx+ebx-%1],1
    je %%skip
    mov [edi+ebx*2-%1*2+75036*2],ax
%%skip
    xor eax,eax
%endmacro

%macro sprdrawprawb16bngmnt 1
    or al,al
    jz %%skip
    add al,dh
    test byte[sprpriodata+ebx-%1+16],dl
    jnz %%skip
    or byte[sprpriodata+ebx-%1+16],dl
    mov ax,[ebp+eax*2]
    mov [edi+ebx*2-%1*2+75036*2],ax
    cmp byte[ecx+ebx-%1],1
    je %%skip
    mov [edi+ebx*2-%1*2],ax
%%skip
    xor eax,eax
%endmacro

%macro sprdrawprbwb16bngmnt 1
    or al,al
    jz %%skip
    add al,dh
    mov ax,[ebp+eax*2]
    mov [edi+ebx*2-%1*2+75036*2],ax
    cmp byte[ecx+ebx-%1],1
    je %%skip
    mov [edi+ebx*2-%1*2],ax
%%skip
    xor eax,eax
%endmacro

%macro sprdrawpra216bng 1
    or al,al
    jz %%skip
    or byte[sprpriodata+ebx-%1+16],dl
%%skip
%endmacro

%macro sprdrawpra16bnghr 1
    or al,al
    jz %%skip
    add al,ch
    test byte[sprpriodata+ebx-%1+16],dl
    jnz %%skip
    mov ax,[ebp+eax*2]
    mov [edi+ebx*2-%1*2],ax
    mov [edi+ebx*2-%1*2+75036*4],ax
    xor eax,eax
    or byte[sprpriodata+ebx-%1+16],dl
%%skip
%endmacro

%macro sprdrawprb16bnghr 1
    or al,al
    jz %%skip
    add al,ch
    mov ax,[ebp+eax*2]
    mov [edi+ebx*2-%1*2+75036*4],ax
    mov [edi+ebx*2-%1*2],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprawb16bnghr 1
    or al,al
    jz %%skip
    add al,dh
    test byte[sprpriodata+ebx-%1+16],dl
    jnz %%skip
    cmp byte[ecx+ebx-%1],1
    je %%skip
    or byte[sprpriodata+ebx-%1+16],dl
    mov ax,[ebp+eax*2]
    mov [edi+ebx*2-%1*2+75036*4],ax
    mov [edi+ebx*2-%1*2],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprbwb16bnghr 1
    or al,al
    jz %%skip
    add al,dh
    cmp byte[ecx+ebx-%1],1
    je %%skip
    mov ax,[ebp+eax*2]
    mov [edi+ebx*2-%1*2+75036*4],ax
    mov [edi+ebx*2-%1*2],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawpra16bngthr 1
    or al,al
    jz %%skip
    add al,ch
    test byte[sprpriodata+ebx-%1+16],dl
    jnz %%skip
    mov ax,[ebp+eax*2+512]
    or byte[sprpriodata+ebx-%1+16],dl
    cmp ch,128+64
    jae %%yestransp
    and eax,[UnusedBitXor]
%%yestransp
    mov [edi+ebx*2-%1*2],ax
    mov [edi+ebx*2-%1*2+75036*4],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprb16bngthr 1
    or al,al
    jz %%skip
    add al,ch
    mov ax,[ebp+eax*2+512]
    cmp ch,128+64
    jae %%yestransp
    and eax,[UnusedBitXor]
%%yestransp
    mov [edi+ebx*2-%1*2],ax
    mov [edi+ebx*2-%1*2+75036*4],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprawb16bngthr 1
    or al,al
    jz %%skip
    add al,dh
    test byte[sprpriodata+ebx-%1+16],dl
    jnz %%skip
    cmp byte[ecx+ebx-%1],1
    je %%skip
    or byte[sprpriodata+ebx-%1+16],dl
    mov ax,[ebp+eax*2+512]
    cmp dh,128+64
    jae %%yestransp
    and eax,[UnusedBitXor]
%%yestransp
    mov [edi+ebx*2-%1*2],ax
    mov [edi+ebx*2-%1*2+75036*4],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprbwb16bngthr 1
    or al,al
    jz %%skip
    add al,dh
    cmp byte[ecx+ebx-%1],1
    je %%skip
    mov ax,[ebp+eax*2+512]
    cmp dh,128+64
    jae %%yestransp
    and eax,[UnusedBitXor]
%%yestransp
    mov [edi+ebx*2-%1*2],ax
    mov [edi+ebx*2-%1*2+75036*4],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawpra16bngmsthr 1
    or al,al
    jz %%skip
    add al,ch
    test byte[sprpriodata+ebx-%1+16],dl
    jnz %%skip
    mov ax,[ebp+eax*2+512]
    cmp ch,128+64
    jae %%yestransp
    and eax,[UnusedBitXor]
%%yestransp
    mov [edi+ebx*2-%1*2],ax
    mov [edi+ebx*2-%1*2+75036*4],ax
    and eax,[UnusedBitXor]
    mov [edi+ebx*2-%1*2+75036*2],ax
    mov [edi+ebx*2-%1*2+75036*6],ax
    xor eax,eax
    or byte[sprpriodata+ebx-%1+16],dl
%%skip
%endmacro

%macro sprdrawprb16bngmsthr 1
    or al,al

⌨️ 快捷键说明

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