📄 newg162.mac
字号:
add ebx,[ofsmcptr2]
add dword[ofshvaladd],8
test dword[ebx-40h],8000h
jz near %%noofsm
test dword[ebx-40h],2000h << %9
jz %%noofsm
mov ebx,[ebx-40h]
mov ax,[ofsmtptr]
and ebx,3FFh
add ebx,[ofsmcyps]
test ebx,100h
jz %%noupper
add ax,[ofsmady]
%%noupper
and ebx,0FFh
mov edx,ebx
shr ebx,3
and edx,07h
shl ebx,6
shl edx,3
add ax,bx
mov [yposng],edx
xor edx,38h
mov [flipyposng],edx
%%noofsm
mov ebx,[ofsmcptr]
add ebx,[ofsmcptr2]
add dword[ofsmcptr2],2
and dword[ofsmcptr2],3Fh
test dword[ofsmcptr2],3Fh
jnz %%notzeroed
mov bx,[bgtxadd2]
add word[ofsmcptr],bx
%%notzeroed
test dword[ebx-40h],8000h
jnz near %%noofsmh
test dword[ebx-40h],2000h << %9
jz %%noofsmh
mov ebx,[ebx-40h]
sub ax,[ofsmtptr]
add ax,[ofsmtptrs]
add ebx,[ofshvaladd]
test ebx,100h
jz %%noleft
add ax,[ofsmadx]
%%noleft
and ebx,0F8h
shr ebx,2
add ax,bx
%%noofsmh
dec byte[tleftn]
jnz near %4
%%fin
pop ebx
cmp byte[curmosaicsz],1
jne near domosaicng16b
ret
%%docache
call %3
jmp %%returnfromcache
%%tileadd
mov bx,[bgtxadd]
add ax,bx
add [ofsmmptr],bx
add word[ofsmtptr],bx
jmp %%next
%endmacro
%macro drawlinengom16b 10
; tile value : bit 15 = flipy, bit 14 = flipx, bit 13 = priority value
; bit 10-12 = palette, 0-9=tile#
mov ebx,[cbgval]
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
%%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],8000h
jz %%notflipyfull
add ecx,[flipyposng]
jmp %%yesflipyfull
%%notflipyfull
add ecx,[yposng]
%%yesflipyfull
test dword[vrama+eax],4000h
jnz near %%flipxfull
push eax
mov esi,ecx
xor ecx,ecx
xor ebx,ebx
mov eax,[CPalPtrng]
%9 0,1,0
%9 2,3,4
%9 4,5,8
%9 6,7,12
pop eax
jmp %5
%%flipxfull
push eax
mov esi,ecx
xor ecx,ecx
xor ebx,ebx
mov eax,[CPalPtrng]
%9 7,6,0
%9 5,4,4
%9 3,2,8
%9 1,0,12
pop eax
jmp %5
%%parttile
%2
; start drawing from ecx to edi
test dword[vrama+eax],8000h
jz %%notflipypart
add ecx,[flipyposng]
jmp %%yesflipypart
%%notflipypart
add ecx,[yposng]
%%yesflipypart
test word[vrama+eax],4000h
jnz near %%flipxpart
push eax
mov eax,[CPalPtrng]
mov esi,ecx
xor ebx,ebx
%10 0,0,%8
%10 1,2,%8
%10 2,4,%8
%10 3,6,%8
%10 4,8,%8
%10 5,10,%8
%10 6,12,%8
%10 7,14,%8
pop eax
jmp %5
%%flipxpart
push eax
mov eax,[CPalPtrng]
mov esi,ecx
xor ebx,ebx
%10 7,0,%8
%10 6,2,%8
%10 5,4,%8
%10 4,6,%8
%10 3,8,%8
%10 2,10,%8
%10 1,12,%8
%10 0,14,%8
pop eax
%5
mov ebx,[cbgval]
add word[ofsmmptr],2
inc dword[bg1totng+ebx*4]
add word[ofsmtptr],2
mov ax,[ofsmmptr]
mov ebx,[yposngom]
mov edx,[flipyposngom]
mov [yposng],ebx
mov [flipyposng],edx
add edi,16
test eax,03Fh
jz near %%tileadd
%%next
mov ebx,[ofsmcptr]
add ebx,[ofsmcptr2]
mov ecx,[ofsmval]
add dword[ofshvaladd],8
test dword[ebx],ecx
jz %%noofsm
mov ebx,[ebx]
mov ax,[ofsmtptr]
and ebx,3FFh
add ebx,[ofsmcyps]
test ebx,100h
jz %%noupper
add ax,[ofsmady]
%%noupper
and ebx,0FFh
mov edx,ebx
shr ebx,3
and edx,07h
shl ebx,6
shl edx,3
add ax,bx
mov [yposng],edx
xor edx,38h
mov [flipyposng],edx
%%noofsm
mov ebx,[ofsmcptr]
add ebx,[ofsmcptr2]
add dword[ofsmcptr2],2
mov ecx,[ofsmvalh]
and dword[ofsmcptr2],3Fh
test dword[ofsmcptr2],3Fh
jnz %%notzeroed
mov bx,[bgtxadd2]
add word[ofsmcptr],bx
%%notzeroed
test dword[ebx-40h],ecx
jz %%noofsmh
mov ebx,[ebx-40h]
sub ax,[ofsmtptr]
add ax,[ofsmtptrs]
add ebx,[ofshvaladd]
test ebx,100h
jz %%noleft
add ax,[ofsmadx]
%%noleft
and ebx,0F8h
shr ebx,2
add ax,bx
%%noofsmh
dec byte[tleftn]
jnz near %4
%%fin
pop ebx
cmp byte[curmosaicsz],1
jne near domosaicng16b
ret
%%docache
call %3
jmp %%returnfromcache
%%tileadd
mov bx,[bgtxadd]
add ax,bx
add [ofsmmptr],bx
add word[ofsmtptr],bx
jmp %%next
%endmacro
%macro drawlinengom16b16x16 10
; 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
test byte[switch16x16],1
jz %%noflipxb
inc cx
test dword[vrama+eax],4000h
jz %%noflipxb
sub cx,2
%%noflipxb
%%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 word[vrama+eax],8000h
jz %%noflipyfull
add ecx,[flipyposng]
jmp %%yesflipyfull
%%noflipyfull
add ecx,[yposng]
%%yesflipyfull
test dword[vrama+eax],4000h
jnz near %%flipxfull
push eax
mov esi,ecx
xor ecx,ecx
xor ebx,ebx
mov eax,[CPalPtrng]
%9 0,1,0
%9 2,3,4
%9 4,5,8
%9 6,7,12
pop eax
jmp %%done
%%flipxfull
push eax
mov esi,ecx
xor ecx,ecx
xor ebx,ebx
mov eax,[CPalPtrng]
%9 7,6,0
%9 5,4,4
%9 3,2,8
%9 1,0,12
pop eax
jmp %%done
%%parttile
%2
; start drawing from ecx to edi
test word[vrama+eax],8000h
jz %%noflipypart
add ecx,[flipyposng]
jmp %%yesflipypart
%%noflipypart
add ecx,[yposng]
%%yesflipypart
test word[vrama+eax],4000h
jnz near %%flipxpart
push eax
mov eax,[CPalPtrng]
mov esi,ecx
xor ebx,ebx
%10 0,0,%8
%10 1,2,%8
%10 2,4,%8
%10 3,6,%8
%10 4,8,%8
%10 5,10,%8
%10 6,12,%8
%10 7,14,%8
pop eax
jmp %%done
%%flipxpart
push eax
mov eax,[CPalPtrng]
mov esi,ecx
xor ebx,ebx
%10 7,0,%8
%10 6,2,%8
%10 5,4,%8
%10 4,6,%8
%10 3,8,%8
%10 2,10,%8
%10 1,12,%8
%10 0,14,%8
pop eax
%%done
pop edx
pop ecx
test byte[switch16x16],1
jz %%nextb
add word[ofsmmptr],2
add word[ofsmtptr],2
mov ax,[ofsmmptr]
test eax,03Fh
jz near %%tileaddb
%%nextb
mov ebx,[cbgval]
inc dword[bg1totng+ebx*4]
mov ebx,[yposngom]
mov edx,[flipyposngom]
mov [yposng],ebx
mov [flipyposng],edx
mov ebx,[ofsmcptr]
add ebx,[ofsmcptr2]
mov ecx,[ofsmval]
add dword[ofshvaladd],8
test dword[ebx],ecx
jz %%noofsm
mov ebx,[ebx]
mov ax,[ofsmtptr]
and ebx,3FFh
add ebx,[ofsmcyps]
test ebx,200h
jz %%noupper
add ax,[ofsmady]
%%noupper
and ebx,01FFh
mov dword[taddnfy16x16],0
mov dword[taddfy16x16],16
test ebx,8
jz %%noflipy16x16
mov dword[taddnfy16x16],16
mov dword[taddfy16x16],-16
%%noflipy16x16
mov edx,ebx
shr ebx,4
and edx,07h
shl ebx,6
shl edx,3
add ax,bx
mov [yposng],edx
xor edx,38h
mov [flipyposng],edx
%%noofsm
add dword[ofsmcptr2],2
and dword[ofsmcptr2],3Fh
test dword[ofsmcptr2],3Fh
jnz %%notzeroed
mov bx,[bgtxadd2]
add word[ofsmcptr],bx
%%notzeroed
add edi,16
xor dword[switch16x16],1
jnz near %4
%%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 domosaicng16b
ret
%5
add edi,32
jmp %%ntile
%%docache
call %3
jmp %%returnfromcache
%%tileadd
add ax,[bgtxadd]
jmp %%next
%%tileaddb
mov bx,[bgtxadd]
add ax,bx
add [ofsmmptr],bx
add word[ofsmtptr],bx
jmp %%nextb
%endmacro
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -