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

📄 newgfx16.mac

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 MAC
📖 第 1 页 / 共 5 页
字号:
    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
    and eax,[UnusedBitXor]
    mov [edi+ebx*2-%1*2+75036*2],ax
    mov [edi+ebx*2-%1*2+75036*6],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprawb16bngmsthr 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
    and eax,[UnusedBitXor]
    mov [edi+ebx*2-%1*2+75036*2],ax
    mov [edi+ebx*2-%1*2+75036*6],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprbwb16bngmsthr 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
    and eax,[UnusedBitXor]
    mov [edi+ebx*2-%1*2+75036*2],ax
    mov [edi+ebx*2-%1*2+75036*6],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprawb16bngsthr 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
    mov [edi+ebx*2-%1*2+75036*4],ax
    cmp byte[ecx+ebx-%1],1
    je %%skip
    and eax,[UnusedBitXor]
    mov [edi+ebx*2-%1*2+75036*2],ax
    mov [edi+ebx*2-%1*2+75036*6],ax
%%skip
    xor eax,eax
%endmacro

%macro sprdrawprbwb16bngsthr 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
    mov [edi+ebx*2-%1*2+75036*4],ax
    cmp byte[ecx+ebx-%1],1
    je %%skip
    and eax,[UnusedBitXor]
    mov [edi+ebx*2-%1*2+75036*2],ax
    mov [edi+ebx*2-%1*2+75036*6],ax
%%skip
    xor eax,eax
%endmacro

%macro sprdrawprawb16bngmthr 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
    mov [edi+ebx*2-%1*2+75036*6],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
    mov [edi+ebx*2-%1*2+75036*4],ax
%%skip
    xor eax,eax
%endmacro

%macro sprdrawprbwb16bngmthr 1
    or al,al
    jz %%skip
    add al,dh
    mov ax,[ebp+eax*2]
    mov [edi+ebx*2-%1*2+75036*2],ax
    mov [edi+ebx*2-%1*2+75036*6],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
    mov [edi+ebx*2-%1*2+75036*4],ax
%%skip
    xor eax,eax
%endmacro

%macro sprdrawpra16bngnthr 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 sprdrawprb16bngnthr 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*4],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprawb16bngnthr 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*4],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprbwb16bngnthr 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*4],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawpra16bngmsnthr 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
    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 sprdrawprb16bngmsnthr 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*4],ax
    mov [edi+ebx*2-%1*2+75036*2],ax
    mov [edi+ebx*2-%1*2+75036*6],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprawb16bngmsnthr 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*4],ax
    mov [edi+ebx*2-%1*2+75036*2],ax
    mov [edi+ebx*2-%1*2+75036*6],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprbwb16bngmsnthr 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*4],ax
    mov [edi+ebx*2-%1*2+75036*2],ax
    mov [edi+ebx*2-%1*2+75036*6],ax
    xor eax,eax
%%skip
%endmacro

%macro sprdrawprawb16bngsnthr 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
    mov [edi+ebx*2-%1*2+75036*4],ax
    cmp byte[ecx+ebx-%1],1
    je %%skip
    mov [edi+ebx*2-%1*2+75036*2],ax
    mov [edi+ebx*2-%1*2+75036*6],ax
%%skip
    xor eax,eax
%endmacro

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

%macro sprdrawprawb16bngmnthr 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
    mov [edi+ebx*2-%1*2+75036*6],ax
    cmp byte[ecx+ebx-%1],1
    je %%skip
    mov [edi+ebx*2-%1*2],ax
    mov [edi+ebx*2-%1*2+75036*4],ax
%%skip
    xor eax,eax
%endmacro

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

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

%macro Procbgpr016b 5
    ; Draw BG 2
    ; Start line by line drawing/check
    mov esi,[vidbuffer]
    add esi,16*2
;    add esi,16*2+288*2
    xor ebx,ebx
%%nextline
    cmp byte[BGFB+ebx],0
    jne %%nogo
    %4 %5, %%nogo
    ; Check if at a tile alignment
    mov ecx,[BG1SYl+ebx*2+%1*512]
    and ecx,0FFFFh
    add ecx,ebx
    test ecx,07h
    jz %%tilecheck
%%proclinebyline
    ; process line by line
    push esi
    mov eax,[cpalval+ebx*4]
    mov [CPalPtrng],eax
    call %2
    pop esi
%%nogo
    inc ebx
    add esi,288*2
    cmp [resolutn],bx
    jne %%nextline
    jmp %%donextbg
%%tilecheck
    cmp dword[startlinet],ebx
    jae %%proclinebyline
    cmp dword[endlinet],ebx
    jbe %%proclinebyline
    test dword[bgwinchange+ebx],0FFFFFF00h
    jnz %%linebyline
    test dword[bgwinchange+ebx+4],0FFFFFFFFh
    jz %%tilebytile
%%linebyline
    test dword[winbg1enval+ebx+%1*256],0A0A0A0Ah
    jnz %%proclinebyline
    test dword[winbg1enval+ebx+%1*256+4],0A0A0A0Ah
    jnz %%proclinebyline
%%tilebytile
    cmp ebx,[reslbyl]
    jae %%proclinebyline
    test dword[bgallchange+ebx],0FFFFFF00h
    jnz %%proclinebyline
    test dword[bgallchange+ebx+4],0FFFFFFFFh
    jnz near %%proclinebyline
    test dword[bg1change+ebx+%1*256],0FFFFFF00h
    jnz near %%proclinebyline
    test dword[bg1change+ebx+%1*256+4],0FFFFFFFFh
    jnz near %%proclinebyline
    cmp byte[BGMA+ebx],5
    jae near %%proclinebyline
    cmp byte[BGMA+ebx],2
    je near %%proclinebyline
    test byte[mosenng+ebx],1 << %1
    jnz %%mosaic
%%nomosaic
    mov ax,[resolutn]
    sub ax,8
    cmp bx,ax
    jae near %%proclinebyline
    push esi
    call %3
    pop esi
    add ebx,8
    add esi,288*2*8
    cmp [resolutn],bx
    ja near %%nextline
    jmp %%donextbg
%%mosaic
    cmp byte[mosszng+ebx],0
    je %%nomosaic
    jmp %%proclinebyline
%%donextbg
%endmacro

%macro Procbg3pr016b 5
    ; Draw BG 2
    ; Start line by line drawing/check
    mov esi,[vidbuffer]
    add esi,16*2
;    add esi,16+288
    xor ebx,ebx
%%nextline
    cmp byte[BGFB+ebx],0
    jne %%nogo
    %4 %5, %%nogo
    ; Check if at a tile alignment
    mov ecx,[BG1SYl+ebx*2+%1*512]
    and ecx,0FFFFh
    add ecx,ebx
    test ecx,07h
    jz %%tilecheck
%%proclinebyline
    ; process line by line
    push esi
    mov eax,[cpalval+ebx*4]
    mov [CPalPtrng],eax
    call %2
    pop esi
%%nogo
    inc ebx
    add esi,288*2
    cmp [resolutn],bx
    jne %%nextline
    jmp %%donextbg
%%tilecheck
    cmp dword[startlinet],ebx
    jae %%proclinebyline
    cmp dword[endlinet],ebx
    jbe %%proclinebyline
    test dword[bgwinchange+ebx],0FFFFFF00h
    jnz %%linebyline
    test dword[bgwinchange+ebx+4],0FFFFFFFFh
    jz %%tilebytile
%%linebyline
    test dword[winbg1enval+ebx+%1*256],0A0A0A0Ah
    jnz %%proclinebyline
    test dword[winbg1enval+ebx+%1*256+4],0A0A0A0Ah
    jnz %%proclinebyline
%%tilebytile
    cmp ebx,[reslbyl]
    jae %%proclinebyline
    test dword[bgallchange+ebx],0FFFFFF00h
    jnz %%proclinebyline
    test dword[bgallchange+ebx+4],0FFFFFFFFh
    jnz near %%proclinebyline
    test dword[bg1change+ebx+%1*256],0FFFFFF00h
    jnz near %%proclinebyline
    test dword[bg1change+ebx+%1*256+4],0FFFFFFFFh
    jnz near %%proclinebyline
    mov eax,[BG3PRI+ebx]
    cmp eax,[BG3PRI+ebx+4]
    jne near %%proclinebyline
    test byte[mosenng+ebx],1 << %1
    jnz %%mosaic
%%nomosaic
    mov ax,[resolutn]
    sub ax,8
    cmp bx,ax
    jae near %%proclinebyline
    push esi
    call %3
    pop esi
    add ebx,8
    add esi,288*8*2
    cmp [resolutn],bx
    ja near %%nextline
    jmp %%donextbg
%%mosaic
    cmp byte[mosszng+ebx],0
    je %%nomosaic
    jmp %%proclinebyline
%%donextbg
%endmacro

%macro Procbgpr116b 6
    ; Draw BG
    ; Start line by line drawing/check
    mov esi,[vidbuffer]
    add esi,16*2
;    add esi,16*2+288*2
    xor ebx,ebx
%%nextline
    cmp byte[BGFB+ebx],0
    jne %%nogo
    %5 %6, %%nogo
    ; Check if at a tile alignment
    cmp byte[%4+ebx],1
    je %%tile
%%proclinebyline
    ; process line by line
    push esi
    mov eax,[cpalval+ebx*4]
    mov [CPalPtrng],eax
    call %2
    pop esi
%%nogo
    inc ebx
    add esi,288*2
    cmp [resolutn],bx
    jne %%nextline
    jmp %%donextbg
%%tile
    push esi
    mov eax,[cpalval+ebx*4]
    mov [CPalPtrng],eax
    call %3
    pop esi
    add ebx,8
    add esi,288*2*8
    cmp [resolutn],bx
    ja near %%nextline
%%donextbg
%endmacro

%macro Procbg3pr116b 6
    ; Draw BG 2
    ; Start line by line drawing/check
    mov esi,[vidbuffer]
    add esi,16*2
    xor ebx,ebx
%%nextline
    cmp byte[BGFB+ebx],0
    jne near %%nogo
    %5 %6, %%nogo
    cmp byte[BGMA+ebx],1
    jne %%nomode1
    cmp byte[BG3PRI+ebx],0
    jne %%nogo
%%nomode1
    ; Check if at a tile alignment
    cmp byte[%4+ebx],1
    je %%tile
%%proclinebyline
    ; process line by line
    push esi
    mov eax,[cpalval+ebx*4]
    mov [CPalPtrng],eax
    call %2
    pop esi
%%nogo
    inc ebx
    add esi,288*2
    cmp [resolutn],bx
    jne %%nextline
    jmp %%donextbg
%%tile
    push esi
    mov eax,[cpalval+ebx*4]
    mov [CPalPtrng],eax
    call %3
    pop esi
    add ebx,8
    add esi,288*2*8
    cmp [resolutn],bx
    ja near %%nextline
%%donextbg
%endmacro

%macro Procbg3pr1b16b 6
    ; Draw BG 2
    ; Start line by line drawing/check
    mov esi,[vidbuffer]
    add esi,16*2
    xor ebx,ebx
%%nextline
    cmp byte[BGFB+ebx],0
    jne near %%nogo
    %5 %6, %%nogo
    cmp byte[BGMA+ebx],1
    jne %%nogo
    cmp byte[BG3PRI+ebx],0
    je %%nogo
    ; Check if at a tile alignment
    cmp byte[%4+ebx],1
    je %%tile
%%proclinebyline
    ; process line by line
    push esi
    mov eax,[cpalval+ebx*4]
    mov [CPalPtrng],eax
    call %2
    pop esi
%%nogo
    inc ebx
    add esi,288*2
    cmp [resolutn],bx
    jne %%nextline
    jmp %%donextbg
%%tile
    push esi
    mov eax,[cpalval+ebx*4]
    mov [CPalPtrng],eax
    call %3
    pop esi
    add ebx,8
    add esi,288*2*8
    cmp [resolutn],bx
    ja near %%nextline
%%donextbg
%endmacro

%macro Procsprng16b 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

⌨️ 快捷键说明

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