📄 newg16wn.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.
%macro procpixelstw 3
dec dword[ngcpixleft]
jnz %%notzero
call Nextwinmode
%%notzero
cmp dword[ngcwinmode],1
je %%nodraw
mov bl,[esi+%1]
add bl,dl
test bl,%3
jz %%nodraw
mov cx,[eax+ebx*2]
mov [edi+%2],cx
%%nodraw
%endmacro
%macro procpixelstwt 3
dec dword[ngcpixleft]
jnz %%notzero
call Nextwinmode
%%notzero
cmp dword[ngcwinmode],1
je %%nodraw
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 procpixelstwnt 3
dec dword[ngcpixleft]
jnz %%notzero
call Nextwinmode
%%notzero
cmp dword[ngcwinmode],1
je %%nodraw
mov bl,[esi+%1]
add bl,dl
test bl,%3
jz %%nodraw
mov cx,[eax+ebx*2]
mov [edi+%2],cx
%%nodraw
%endmacro
%macro procpixelstwmst 3
dec dword[ngcpixleft]
jnz %%notzero
call Nextwinmode
%%notzero
cmp dword[ngcwinmode],1
je %%nodraw
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+75036*2+%2],cx
%%nodraw
%endmacro
%macro procpixelstwmsnt 3
dec dword[ngcpixleft]
jnz %%notzero
call Nextwinmode
%%notzero
cmp dword[ngcwinmode],1
je %%nodraw
mov bl,[esi+%1]
add bl,dl
test bl,%3
jz %%nodraw
mov cx,[eax+ebx*2]
mov [edi+%2],cx
mov [edi+75036*2+%2],cx
%%nodraw
%endmacro
%macro procpixelstwmsbt 3
dec dword[ngcpixleft]
jnz %%notzero
call Nextwinmode
%%notzero
mov bl,[esi+%1]
add bl,dl
test bl,%3
jz %%nodraw
mov cx,[eax+ebx*2+512]
mov [edi+%2],cx
cmp dword[ngcwinmode],1
je %%nodraw
and cx,[UnusedBitXor]
mov [edi+75036*2+%2],cx
%%nodraw
%endmacro
%macro procpixelstwmsbnt 3
dec dword[ngcpixleft]
jnz %%notzero
call Nextwinmode
%%notzero
mov bl,[esi+%1]
add bl,dl
test bl,%3
jz %%nodraw
mov cx,[eax+ebx*2]
mov [edi+%2],cx
cmp dword[ngcwinmode],1
je %%nodraw
mov [edi+75036*2+%2],cx
%%nodraw
%endmacro
%macro procpixelstwsmt 3
dec dword[ngcpixleft]
jnz %%notzero
call Nextwinmode
%%notzero
mov bl,[esi+%1]
add bl,dl
test bl,%3
jz %%nodraw
mov cx,[eax+ebx*2]
mov [edi+75036*2+%2],cx
cmp dword[ngcwinmode],1
je %%nodraw
or cx,[UnusedBit]
mov [edi+%2],cx
%%nodraw
%endmacro
%macro procpixelstwsmnt 3
dec dword[ngcpixleft]
jnz %%notzero
call Nextwinmode
%%notzero
mov bl,[esi+%1]
add bl,dl
test bl,%3
jz %%nodraw
mov cx,[eax+ebx*2]
mov [edi+75036*2+%2],cx
cmp dword[ngcwinmode],1
je %%nodraw
mov [edi+%2],cx
%%nodraw
%endmacro
Nextwinmode:
push ebx
mov ebx,[ngcwinptr]
xor dword[ngcwinmode],1
mov ebx,[ebx+4]
add dword[ngcwinptr],4
mov [ngcpixleft],ebx
pop ebx
ret
%macro processnextdrawwin 3
dec dword[ngcpixleft]
jnz %%notzero
call Nextwinmode
%%notzero
cmp dword[ngcwinmode],1
je %%nodraw
test %1,%3
jz %%nodraw
mov [edi+%2],%1
%%nodraw
%endmacro
%macro processwinpixel 0
dec dword[ngcpixleft]
jnz %%notzero
call Nextwinmode
%%notzero
dec dword[ngcpixleft]
jnz %%notzero2
call Nextwinmode
%%notzero2
%endmacro
%macro drawlinengwin16b 9
; 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
%%returnfromcache
%2
; start drawing from ecx to edi
test word[vrama+eax],8000h
jz %%noflipypart
add ecx,[flipyposng]
jmp %%flipypart
%%noflipypart
add ecx,[yposng]
%%flipypart
test word[vrama+eax],4000h
jnz near %%flipxpart
push eax
xor ebx,ebx
mov esi,ecx
mov eax,[CPalPtrng]
%9 0,0,%8
%9 1,2,%8
%9 2,4,%8
%9 3,6,%8
%9 4,8,%8
%9 5,10,%8
%9 6,12,%8
%9 7,14,%8
pop eax
jmp .fin
%%flipxpart
push eax
xor ebx,ebx
mov esi,ecx
mov eax,[CPalPtrng]
%9 7,0,%8
%9 6,2,%8
%9 5,4,%8
%9 4,6,%8
%9 3,8,%8
%9 2,10,%8
%9 1,12,%8
%9 0,14,%8
pop eax
jmp .fin
%5
processwinpixel
processwinpixel
processwinpixel
processwinpixel
.fin
mov ebx,[ng16bbgval]
add ax,2
inc dword[bg1totng+ebx*4]
add edi,16
test eax,03Fh
jz %%tileadd
%%next
dec byte[tleftn]
jnz near %4
pop ebx
cmp byte[curmosaicsz],1
jne near domosaicng16b
ret
%%docache
call %3
jmp %%returnfromcache
%%tileadd
add ax,[bgtxadd]
jmp %%next
%endmacro
%macro drawlineng16x16win16b 9
; 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
%%nexttile
push ecx
push edx
mov edx,[%6+edx*4]
%7
jnz near %%docache
%%returnfromcache
%2
; start drawing from ecx to edi
test word[vrama+eax],8000h
jnz %%flipypart
add ecx,[yposng]
jmp %%noflipypart
%%flipypart
add ecx,[flipyposng]
%%noflipypart
test word[vrama+eax],4000h
jnz near %%flipxpart
push eax
xor ebx,ebx
mov esi,ecx
mov eax,[CPalPtrng]
%9 0,0,%8
%9 1,2,%8
%9 2,4,%8
%9 3,6,%8
%9 4,8,%8
%9 5,10,%8
%9 6,12,%8
%9 7,14,%8
pop eax
jmp %%done
%%flipxpart
push eax
xor ebx,ebx
mov esi,ecx
mov eax,[CPalPtrng]
%9 7,0,%8
%9 6,2,%8
%9 5,4,%8
%9 4,6,%8
%9 3,8,%8
%9 2,10,%8
%9 1,12,%8
%9 0,14,%8
pop eax
%%done
pop edx
pop ecx
inc cx
test dword[vrama+eax],4000h
jz %%noflipxb
sub cx,2
%%noflipxb
add edi,16
xor dword[switch16x16],1
jnz near %%nexttile
%%ntile
mov ebx,[ng16bbgval]
add ax,2
inc dword[bg1totng+ebx*4]
test eax,03Fh
jz near %%tileadd
%%next
dec byte[tleftn]
jnz near %4
pop ebx
cmp byte[curmosaicsz],1
jne near domosaicng16b
ret
%5
processwinpixel
processwinpixel
processwinpixel
processwinpixel
processwinpixel
processwinpixel
processwinpixel
processwinpixel
add edi,32
jmp %%ntile
%%docache
call %3
jmp %%returnfromcache
%%tileadd
add ax,[bgtxadd]
jmp %%next
%endmacro
%macro drawlinengomwin16b 9
; 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
%2
; start drawing from ecx to edi
test word[vrama+eax],8000h
jnz near %%flipypart
add ecx,[yposng]
jmp %%notflipypart
%%flipypart
add ecx,[flipyposng]
%%notflipypart
test word[vrama+eax],4000h
jnz near %%flipxpart
push eax
xor ebx,ebx
mov esi,ecx
mov eax,[CPalPtrng]
%9 0,0,%8
%9 1,2,%8
%9 2,4,%8
%9 3,6,%8
%9 4,8,%8
%9 5,10,%8
%9 6,12,%8
%9 7,14,%8
pop eax
jmp %%endokay
%%flipxpart
push eax
xor ebx,ebx
mov esi,ecx
mov eax,[CPalPtrng]
%9 7,0,%8
%9 6,2,%8
%9 5,4,%8
%9 4,6,%8
%9 3,8,%8
%9 2,10,%8
%9 1,12,%8
%9 0,14,%8
pop eax
jmp %%endokay
%5
processwinpixel
processwinpixel
processwinpixel
processwinpixel
%%endokay
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,[ofsmval]
and dword[ofsmcptr2],3Fh
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 parttilewin 2
cmp dword[ngcwinmode],1
je %%nodraw
mov bl,[ecx+%1*8]
or bl,bl
jz %%nodraw
add bl,dl
mov [edi+%2*288*2],bl
%%nodraw
%endmacro
%macro tilenormalw 2
cmp dword[ngcwinmode],1
je %%nodraw
mov bx,[ecx+%2]
mov [edi+%1],bx
%%nodraw
%endmacro
%macro tilenormalwb 2
cmp dword[ngcwinmode],1
je %%nodraw
mov bx,[ecx+%2]
cmp bx,0FFFFh
je %%nodraw
mov [edi+%1],bx
%%nodraw
%endmacro
%macro tilenormalwt 2
cmp dword[ngcwinmode],1
je %%nodraw
mov bx,[ecx+%2]
or bx,[UnusedBit]
mov [edi+%1],bx
%%nodraw
%endmacro
%macro tilenormalwbt 2
cmp dword[ngcwinmode],1
je %%nodraw
mov bx,[ecx+%2]
cmp bx,0FFFFh
je %%nodraw
or bx,[UnusedBit]
mov [edi+%1],bx
%%nodraw
%endmacro
%macro tilenormalwnt 2
cmp dword[ngcwinmode],1
je %%nodraw
mov bx,[ecx+%2]
mov [edi+%1],bx
%%nodraw
%endmacro
%macro tilenormalwbnt 2
cmp dword[ngcwinmode],1
je %%nodraw
mov bx,[ecx+%2]
cmp bx,0FFFFh
je %%nodraw
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -