📄 mode716.asm
字号:
;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.
%include "macros.mac"
EXTSYM mode7tab,winptrref,nglogicval,winlogicaval
EXTSYM curmosaicsz,curvidoffset,cwinptr,domosaic,mode7A,mode7B
EXTSYM mode7C,mode7D,mode7X0,mode7Y0,mode7set,vram,vrama,winon,xtravbuf
EXTSYM ngwleft,ngwleftb,mode7xpos,mode7ypos,mode7xrpos,mode7yrpos
EXTSYM mode7xadder,mode7yadder,mode7hr,drawmode7winhr,dcolortab
EXTSYM UnusedBitXor,UnusedBit
EXTSYM scrndis
EXTSYM vidbright,prevbrightdc,Gendcolortable
EXTSYM mode7ab,mode7cd,BGMA
EXTSYM BG1SXl,BG1SYl
EXTSYM processmode7hires
NEWSYM Mode716AsmStart
%include "video/mode716.mac"
;*******************************************************
; Processes & Draws Mode 7
;*******************************************************
%macro Mode7Normal 0
or dl,dl
jz %%nodrawb
mov dx,[ebp+edx*2]
mov [esi],dx
xor edx,edx
%%nodrawb
add esi,2
%endmacro
%macro Mode7Normalnt 0
or dl,dl
jz %%nodrawb
mov dx,[ebp+edx*2]
mov [esi],dx
xor edx,edx
%%nodrawb
add esi,2
%endmacro
%macro Mode7Normalt 0
or dl,dl
jz %%nodrawb
mov dx,[ebp+edx*2+512]
mov [esi],dx
xor edx,edx
%%nodrawb
add esi,2
%endmacro
%macro Mode7Normalmsnt 0
or dl,dl
jz %%nodrawb
mov dx,[ebp+edx*2]
mov [esi],dx
mov [esi+75036*2],dx
xor edx,edx
%%nodrawb
add esi,2
%endmacro
%macro Mode7Normalmst 0
or dl,dl
jz %%nodrawb
mov dx,[ebp+edx*2+512]
mov [esi],dx
and dx,[UnusedBitXor]
mov [esi+75036*2],dx
xor edx,edx
%%nodrawb
add esi,2
%endmacro
%macro Mode7Normalsnt 0
or dl,dl
jz %%nodrawb
mov dx,[ebp+edx*2]
mov [esi+75036*2],dx
xor edx,edx
%%nodrawb
add esi,2
%endmacro
%macro Mode7Normalst 0
or dl,dl
jz %%nodrawb
mov dx,[ebp+edx*2]
mov [esi+75036*2],dx
xor edx,edx
%%nodrawb
add esi,2
%endmacro
%macro Mode7Direct 0
or dl,dl
jz %%nodrawb
mov dx,[dcolortab+edx*4]
mov [esi],dx
xor edx,edx
%%nodrawb
add esi,2
%endmacro
%macro Mode7Directnt 0
or dl,dl
jz %%nodrawb
mov dx,[dcolortab+edx*4]
mov [esi],dx
xor edx,edx
%%nodrawb
add esi,2
%endmacro
%macro Mode7Directt 0
or dl,dl
jz %%nodrawb
mov dx,[dcolortab+edx*4]
or dx,[UnusedBit]
mov [esi],dx
xor edx,edx
%%nodrawb
add esi,2
%endmacro
%macro Mode7Directmsnt 0
or dl,dl
jz %%nodrawb
mov dx,[dcolortab+edx*4]
mov [esi],dx
mov [esi+75036*2],dx
xor edx,edx
%%nodrawb
add esi,2
%endmacro
%macro Mode7Directmst 0
or dl,dl
jz %%nodrawb
mov dx,[dcolortab+edx*4]
mov [esi+75036*2],dx
or dx,[UnusedBit]
mov [esi],dx
xor edx,edx
%%nodrawb
add esi,2
%endmacro
%macro Mode7Directsnt 0
or dl,dl
jz %%nodrawb
mov dx,[dcolortab+edx*4]
mov [esi+75036*2],dx
xor edx,edx
%%nodrawb
add esi,2
%endmacro
%macro Mode7Directst 0
or dl,dl
jz %%nodrawb
mov dx,[dcolortab+edx*4]
mov [esi+75036*2],dx
xor edx,edx
%%nodrawb
add esi,2
%endmacro
%macro Mode7ExtBG 0
mov [esi+75036*8],dl
or dl,dl
jz %%nodrawb
test dl,80h
jnz %%nodrawb
mov dx,[ebp+edx*2]
mov [esi],dx
xor edx,edx
%%nodrawb
add esi,2
%endmacro
%macro Mode7ExtBGnt 0
mov [esi+75036*8],dl
or dl,dl
jz %%nodrawb
test dl,80h
jnz %%nodrawb
mov dx,[ebp+edx*2]
mov [esi],dx
xor edx,edx
%%nodrawb
add esi,2
%endmacro
%macro Mode7ExtBGt 0
mov [esi+75036*8],dl
or dl,dl
jz %%nodrawb
test dl,80h
jnz %%nodrawb
mov dx,[ebp+edx*2+512]
mov [esi],dx
xor edx,edx
%%nodrawb
add esi,2
%endmacro
%macro Mode7ExtBGmsnt 0
mov [esi+75036*8],dl
or dl,dl
jz %%nodrawb
test dl,80h
jnz %%nodrawb
mov dx,[ebp+edx*2]
mov [esi],dx
mov [esi+75036*2],dx
xor edx,edx
%%nodrawb
add esi,2
%endmacro
%macro Mode7ExtBGmst 0
mov [esi+75036*8],dl
or dl,dl
jz %%nodrawb
test dl,80h
jnz %%nodrawb
mov dx,[ebp+edx*2+512]
mov [esi+75036*2],dx
or dx,[UnusedBit]
mov [esi],dx
xor edx,edx
%%nodrawb
add esi,2
%endmacro
%macro Mode7ExtBGsnt 0
mov [esi+75036*8],dl
or dl,dl
jz %%nodrawb
test dl,80h
jnz %%nodrawb
mov dx,[ebp+edx*2]
mov [esi+75036*2],dx
xor edx,edx
%%nodrawb
add esi,2
%endmacro
%macro Mode7ExtBGst 0
mov [esi+75036*8],dl
or dl,dl
jz %%nodrawb
test dl,80h
jnz %%nodrawb
mov dx,[ebp+edx*2]
mov [esi+75036*2],dx
xor edx,edx
%%nodrawb
add esi,2
%endmacro
NEWSYM drawmode7win16b
test byte[scrndis],1
jz .notdisabled
ret
.notdisabled
CheckTransparency 01h,drawmode7win16bt
normal
Mode7NonMainSub Mode7Normal
drawmode7win16bt
test byte[scadtng+ebx],1h
jz near drawmode7win16bnt
test byte[BGMS1+ebx*2+1],1h
jnz near drawmode716bmst
Mode7NonMainSub Mode7Normalt
drawmode716bmst:
mov edi,[CMainWinScr]
cmp byte[edi+ebx],0
jne near drawmode7w16bmt
mov edi,[CSubWinScr]
cmp byte[edi+ebx],0
jne near drawmode7w16bst
drawmode7w16bmst
Mode7NonMainSub Mode7Normalmst
drawmode7w16bmt
mov edi,[CSubWinScr]
cmp byte[edi+ebx],0
jne near drawmode7w16bmst
Mode7MainSub Mode7Normalmst,Mode7Normalst
drawmode7w16bst
Mode7MainSub Mode7Normalmst,Mode7Normalt
drawmode7win16bnt:
test byte[BGMS1+ebx*2+1],1h
jnz near drawsprngm716bmsnt
Mode7NonMainSub Mode7Normalnt
drawsprngm716bmsnt:
cmp dword[ngwinen],0
je drawmode7w16bmsnt
mov edi,[CMainWinScr]
cmp byte[edi+ebx],0
jne near drawmode7w16bmnt
mov edi,[CSubWinScr]
cmp byte[edi+ebx],0
jne near drawmode7w16bsnt
drawmode7w16bmsnt
Mode7NonMainSub Mode7Normalmsnt
drawmode7w16bmnt
mov edi,[CSubWinScr]
cmp byte[edi+ebx],0
jne near drawmode7w16bmsnt
Mode7MainSub Mode7Normalmsnt,Mode7Normalsnt
drawmode7w16bsnt
Mode7MainSub Mode7Normalmsnt,Mode7Normalnt
NEWSYM drawmode7win16bd
test byte[scrndis],1
jz .notdisabled
ret
.notdisabled
mov bl,[vidbright]
cmp bl,[prevbrightdc]
je .nodcchange
mov [prevbrightdc],bl
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -