📄 newgfx16.mac
字号:
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 + -