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

📄 newgfx16.mac

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 MAC
📖 第 1 页 / 共 5 页
字号:
    xor eax,eax
    mov al,[sprtlng+ebx]
    mov cl,byte[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,byte[sprlefttot+ebx]
    push esi
    call drawsprng16bhr
    pop esi
%%nogo
    inc ebx
    add esi,288*2
    cmp [resolutn],bx
    jne near %%nextline
%endmacro

%macro Procsprng0116b 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
    ja %%nogo
    xor eax,eax
    mov al,[sprtlng+ebx]
    mov cl,byte[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,byte[sprlefttot+ebx]
    push esi
    call drawsprng16bhr
    pop esi
%%nogo
    inc ebx
    add esi,288*2
    cmp [resolutn],bx
    jne near %%nextline
%endmacro

%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,byte[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,byte[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 byte[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,261
    sub eax,ebx
%%noflip
    mov dx,[BG1SXl+ebx*2]
    add 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 byte[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,261
    sub eax,ebx
%%noflip
    mov dx,[BG1SXl+ebx*2]
    add 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 byte[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,261
    sub eax,ebx
%%noflip
    mov dx,[BG1SXl+ebx*2]
    add 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 byte[%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

⌨️ 快捷键说明

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