📄 newg162.mac
字号:
;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.
; Finish up parttile
%macro procpixels16x8 3
mov bl,[esi+%2]
mov cl,[esi+%1]
add bl,dl
add cl,dl
mov bx,[eax+ebx*2]
mov [edi+%3+75036*4],bx
mov bx,[eax+ecx*2]
mov [edi+%3],bx
xor ebx,ebx
%endmacro
%macro procpixelst16x8 3
mov bl,[esi+%1]
add bl,dl
test bl,%3
jz %%nodraw
mov cx,[eax+ebx*2]
mov [edi+%2],cx
%%nodraw
%endmacro
%macro procpixelstr16x8 3
mov bl,[esi+%2]
mov cl,[esi+%1]
add bl,dl
add cl,dl
mov bx,[eax+ebx*2+512]
mov [edi+%3+75036*4],bx
mov bx,[eax+ecx*2+512]
mov [edi+%3],bx
xor ebx,ebx
%endmacro
%macro procpixelstt16x8 3
mov bl,[esi+%1]
add bl,dl
test bl,%3
jz %%nodraw
mov cx,[eax+ebx*2+512]
mov [edi+%2],cx
%%nodraw
%endmacro
%macro procpixelsmst16x8 3
mov bl,[esi+%2]
mov cl,[esi+%1]
add bl,dl
add cl,dl
mov bx,[eax+ebx*2+512]
mov [edi+%3+75036*4],bx
and ebx,[UnusedBitXor]
mov [edi+%3+75036*6],bx
mov bx,[eax+ecx*2+512]
mov [edi+%3],bx
and ebx,[UnusedBitXor]
mov [edi+%3+75036*2],bx
xor ebx,ebx
%endmacro
%macro procpixelstmst16x8 3
mov bl,[esi+%1]
add bl,dl
test bl,%3
jz %%nodraw
mov cx,[eax+ebx*2+512]
mov [edi+%2],cx
and cx,[UnusedBitXor]
mov [edi+%2+75036*2],cx
%%nodraw
%endmacro
%macro procpixelsmsnt16x8 3
mov bl,[esi+%2]
mov cl,[esi+%1]
add bl,dl
add cl,dl
mov bx,[eax+ebx*2]
mov [edi+%3+75036*4],bx
mov [edi+%3+75036*6],bx
mov bx,[eax+ecx*2]
mov [edi+%3],bx
mov [edi+%3+75036*2],bx
xor ebx,ebx
%endmacro
%macro procpixelstmsnt16x8 3
mov bl,[esi+%1]
add bl,dl
test bl,%3
jz %%nodraw
mov cx,[eax+ebx*2]
mov [edi+%2],cx
mov [edi+%2+75036*2],cx
%%nodraw
%endmacro
%macro procpixels16x8b 3
mov bl,[esi+%2]
add bl,dl
mov cx,[eax+ebx*2]
mov [edi+%3],cx
%endmacro
%macro procpixelst16x8b 3
%if %2<8
mov bl,[esi+%1]
add bl,dl
test bl,%3
jz %%nodraw
mov cx,[eax+ebx*2]
mov [edi+%2],cx
%%nodraw
%endif
%endmacro
%macro procpixelstr16x8b 3
mov bl,[esi+%2]
add bl,dl
mov cx,[eax+ebx*2+512]
mov [edi+%3],cx
%endmacro
%macro procpixelstt16x8b 3
%if %2<8
mov bl,[esi+%1]
add bl,dl
test bl,%3
jz %%nodraw
mov cx,[eax+ebx*2+512]
mov [edi+%2],cx
%%nodraw
%endif
%endmacro
%macro procpixelsmst16x8b 3
mov bl,[esi+%2]
add bl,dl
mov cx,[eax+ebx*2+512]
mov [edi+%3],cx
and ecx,[UnusedBitXor]
mov [edi+%3+75036*2],cx
%endmacro
%macro procpixelstmst16x8b 3
%if %2<8
mov bl,[esi+%1]
add bl,dl
test bl,%3
jz %%nodraw
mov cx,[eax+ebx*2+512]
mov [edi+%2],cx
and cx,[UnusedBitXor]
mov [edi+%2+75036*2],cx
%%nodraw
%endif
%endmacro
%macro procpixelsmsnt16x8b 3
mov bl,[esi+%2]
add bl,dl
mov cx,[eax+ebx*2]
mov [edi+%3],cx
mov [edi+%3+75036*2],cx
%endmacro
%macro procpixelstmsnt16x8b 3
%if %2<8
mov bl,[esi+%1]
add bl,dl
test bl,%3
jz %%nodraw
mov cx,[eax+ebx*2]
mov [edi+%2],cx
mov [edi+%2+75036*2],cx
%%nodraw
%endif
%endmacro
%macro drawlineng16x816b 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]
add cx,[taddnfy16x16]
test dword[vrama+eax],8000h
jz %%noflipy
add cx,[taddfy16x16]
%%noflipy
test dword[vrama+eax],4000h
jz %%noflipx
inc cx
%%noflipx
%%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 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,2
%9 4,5,4
%9 6,7,6
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,2
%9 3,2,4
%9 1,0,6
pop eax
jmp %%done
%%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,0+75036*4,%8
%10 2,2,%8
%10 3,2+75036*4,%8
%10 4,4,%8
%10 5,4+75036*4,%8
%10 6,6,%8
%10 7,6+75036*4,%8
pop eax
jmp %%done
%%flipxpart
push eax
mov eax,[CPalPtrng]
mov esi,ecx
xor ebx,ebx
%10 7,0,%8
%10 6,0+75036*4,%8
%10 5,2,%8
%10 4,2+75036*4,%8
%10 3,4,%8
%10 2,4+75036*4,%8
%10 1,6,%8
%10 0,6+75036*4,%8
pop eax
%%done
pop edx
pop ecx
inc cx
test dword[vrama+eax],4000h
jz %%noflipxb
sub cx,2
%%noflipxb
add edi,8
xor dword[switch16x16],1
jnz near %%nexttile
%%ntile
mov ebx,[cbgval]
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,16
jmp %%ntile
%%docache
call %3
jmp %%returnfromcache
%%tileadd
add ax,[bgtxadd]
jmp %%next
%endmacro
%macro drawlinengom216b 9
; tile value : bit 15 = flipy, bit 14 = flipx, bit 13 = priority value
; bit 10-12 = palette, 0-9=tile#
mov dl,ch
inc dword[bg1drwng+%9*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]
procpixels 0,1,0
procpixels 2,3,4
procpixels 4,5,8
procpixels 6,7,12
pop eax
jmp %5
%%flipxfull
push eax
mov esi,ecx
xor ecx,ecx
xor ebx,ebx
mov eax,[CPalPtrng]
procpixels 7,6,0
procpixels 5,4,4
procpixels 3,2,8
procpixels 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
procpixelst 0,0,%8
procpixelst 1,2,%8
procpixelst 2,4,%8
procpixelst 3,6,%8
procpixelst 4,8,%8
procpixelst 5,10,%8
procpixelst 6,12,%8
procpixelst 7,14,%8
pop eax
jmp %5
%%flipxpart
push eax
mov eax,[CPalPtrng]
mov esi,ecx
xor ebx,ebx
procpixelst 7,0,%8
procpixelst 6,2,%8
procpixelst 5,4,%8
procpixelst 4,6,%8
procpixelst 3,8,%8
procpixelst 2,10,%8
procpixelst 1,12,%8
procpixelst 0,14,%8
pop eax
%5
inc dword[bg1totng+%9*4]
add word[ofsmmptr],2
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]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -