📄 table.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 eramaccessbankr16,eramaccessbankr8,eramaccessbankw16
EXTSYM eramaccessbankw8,memaccessbankr16,memaccessbankr8
EXTSYM memaccessbankw16,memaccessbankw8
EXTSYM mosjmptab,mosdraw10,mosdraw11,mosdraw12,mosdraw13
EXTSYM mosdraw14,mosdraw15,mosdraw16,mosdraw2,mosdraw3
EXTSYM mosdraw4,mosdraw5,mosdraw6,mosdraw7,mosdraw8
EXTSYM mosdraw9,ngpalcon2b,ngpalcon4b
EXTSYM mosjmptab16b,mosdraw1016b,mosdraw1116b,mosdraw1216b,mosdraw1316b
EXTSYM mosdraw1416b,mosdraw1516b,mosdraw1616b,mosdraw216b,mosdraw316b
EXTSYM mosdraw416b,mosdraw516b,mosdraw616b,mosdraw716b,mosdraw816b
EXTSYM mosdraw916b
EXTSYM mosjmptab16bt,mosdraw1016bt,mosdraw1116bt,mosdraw1216bt,mosdraw1316bt
EXTSYM mosdraw1416bt,mosdraw1516bt,mosdraw1616bt,mosdraw216bt,mosdraw316bt
EXTSYM mosdraw416bt,mosdraw516bt,mosdraw616bt,mosdraw716bt,mosdraw816bt
EXTSYM mosdraw916bt
EXTSYM mosjmptab16btms,mosdraw1016btms,mosdraw1116btms,mosdraw1216btms,mosdraw1316btms
EXTSYM mosdraw1416btms,mosdraw1516btms,mosdraw1616btms,mosdraw216btms,mosdraw316btms
EXTSYM mosdraw416btms,mosdraw516btms,mosdraw616btms,mosdraw716btms,mosdraw816btms
EXTSYM mosdraw916btms
EXTSYM mosjmptab16bntms,mosdraw1016bntms,mosdraw1116bntms,mosdraw1216bntms,mosdraw1316bntms
EXTSYM mosdraw1416bntms,mosdraw1516bntms,mosdraw1616bntms,mosdraw216bntms,mosdraw316bntms
EXTSYM mosdraw416bntms,mosdraw516bntms,mosdraw616bntms,mosdraw716bntms,mosdraw816bntms
EXTSYM mosdraw916bntms
EXTSYM regaccessbankr16,regaccessbankw16,regaccessbankw8
EXTSYM sramaccessbankr16,sramaccessbankr8,sramaccessbankw16
EXTSYM sramaccessbankw8,tableA,tableB,tableC,tableD,tableE
EXTSYM tableF,tableG,tableH,wramaccessbankr16
EXTSYM wramaccessbankr8,wramaccessbankw16,wramaccessbankw8
EXTSYM regaccessbankr8SA1,regaccessbankr16SA1,regaccessbankw8SA1
EXTSYM regaccessbankw16SA1,SA1RAMaccessbankr8,SA1RAMaccessbankr16
EXTSYM SA1RAMaccessbankw8,SA1RAMaccessbankw16
EXTSYM SA1RAMaccessbankr8b,SA1RAMaccessbankr16b
EXTSYM SA1RAMaccessbankw8b,SA1RAMaccessbankw16b
EXTSYM DPageR8,DPageW8,DPageR16,DPageW16
EXTSYM SDD1Enable
EXTSYM JoyAOrig,JoyANow,JoyBOrig,JoyBNow,JoyCOrig,JoyCNow,JoyDOrig,JoyDNow
NEWSYM TableAsmStart
%include "cpu/65816d.inc"
%include "cpu/address.inc"
%include "cpu/addrni.inc"
%include "cpu/e65816.inc"
%include "cpu/regs.mac"
%include "cpu/regsw.mac"
%include "cpu/regs.inc" ; start problem here
%include "cpu/regsw.inc"
; global variables
;tableA times 256 dd 0 ; Table addresses (M:0,X:0,D:0)
;tableB times 256 dd 0 ; Table addresses (M:1,X:0,D:0)
;tableC times 256 dd 0 ; Table addresses (M:0,X:1,D:0)
;tableD times 256 dd 0 ; Table addresses (M:1,X:1,D:0)
;tableE times 256 dd 0 ; Table addresses (M:0,X:0,D:1)
;tableF times 256 dd 0 ; Table addresses (M:1,X:0,D:1)
;tableG times 256 dd 0 ; Table addresses (M:0,X:1,D:1)
;tableH times 256 dd 0 ; Table addresses (M:1,X:1,D:1)
NEWSYM addrmdef, times 27 dd 0 ; Address modes
;tablead times 256 dd 0 ; Table address location according to P
;memtabler8 times 256 dd 0 ; Memory Bank Locations for reading 8-bit
;memtablew8 times 256 dd 0 ; Memory Bank Locations for writing 8-bit
;memtabler16 times 256 dd 0 ; Memory Bank Locations for reading 16-bit
;memtablew16 times 256 dd 0 ; Memory Bank Locations for reading 16-bit
;*******************************************************
; Generate OpCode Table
;*******************************************************
NEWSYM inittable
; set up mosaic
mov dword[mosjmptab],mosdraw2
mov dword[mosjmptab+4],mosdraw3
mov dword[mosjmptab+8],mosdraw4
mov dword[mosjmptab+12],mosdraw5
mov dword[mosjmptab+16],mosdraw6
mov dword[mosjmptab+20],mosdraw7
mov dword[mosjmptab+24],mosdraw8
mov dword[mosjmptab+28],mosdraw9
mov dword[mosjmptab+32],mosdraw10
mov dword[mosjmptab+36],mosdraw11
mov dword[mosjmptab+40],mosdraw12
mov dword[mosjmptab+44],mosdraw13
mov dword[mosjmptab+48],mosdraw14
mov dword[mosjmptab+52],mosdraw15
mov dword[mosjmptab+56],mosdraw16
mov dword[mosjmptab16b],mosdraw216b
mov dword[mosjmptab16b+4],mosdraw316b
mov dword[mosjmptab16b+8],mosdraw416b
mov dword[mosjmptab16b+12],mosdraw516b
mov dword[mosjmptab16b+16],mosdraw616b
mov dword[mosjmptab16b+20],mosdraw716b
mov dword[mosjmptab16b+24],mosdraw816b
mov dword[mosjmptab16b+28],mosdraw916b
mov dword[mosjmptab16b+32],mosdraw1016b
mov dword[mosjmptab16b+36],mosdraw1116b
mov dword[mosjmptab16b+40],mosdraw1216b
mov dword[mosjmptab16b+44],mosdraw1316b
mov dword[mosjmptab16b+48],mosdraw1416b
mov dword[mosjmptab16b+52],mosdraw1516b
mov dword[mosjmptab16b+56],mosdraw1616b
mov dword[mosjmptab16bt],mosdraw216bt
mov dword[mosjmptab16bt+4],mosdraw316bt
mov dword[mosjmptab16bt+8],mosdraw416bt
mov dword[mosjmptab16bt+12],mosdraw516bt
mov dword[mosjmptab16bt+16],mosdraw616bt
mov dword[mosjmptab16bt+20],mosdraw716bt
mov dword[mosjmptab16bt+24],mosdraw816bt
mov dword[mosjmptab16bt+28],mosdraw916bt
mov dword[mosjmptab16bt+32],mosdraw1016bt
mov dword[mosjmptab16bt+36],mosdraw1116bt
mov dword[mosjmptab16bt+40],mosdraw1216bt
mov dword[mosjmptab16bt+44],mosdraw1316bt
mov dword[mosjmptab16bt+48],mosdraw1416bt
mov dword[mosjmptab16bt+52],mosdraw1516bt
mov dword[mosjmptab16bt+56],mosdraw1616bt
mov dword[mosjmptab16btms],mosdraw216btms
mov dword[mosjmptab16btms+4],mosdraw316btms
mov dword[mosjmptab16btms+8],mosdraw416btms
mov dword[mosjmptab16btms+12],mosdraw516btms
mov dword[mosjmptab16btms+16],mosdraw616btms
mov dword[mosjmptab16btms+20],mosdraw716btms
mov dword[mosjmptab16btms+24],mosdraw816btms
mov dword[mosjmptab16btms+28],mosdraw916btms
mov dword[mosjmptab16btms+32],mosdraw1016btms
mov dword[mosjmptab16btms+36],mosdraw1116btms
mov dword[mosjmptab16btms+40],mosdraw1216btms
mov dword[mosjmptab16btms+44],mosdraw1316btms
mov dword[mosjmptab16btms+48],mosdraw1416btms
mov dword[mosjmptab16btms+52],mosdraw1516btms
mov dword[mosjmptab16btms+56],mosdraw1616btms
mov dword[mosjmptab16bntms],mosdraw216bntms
mov dword[mosjmptab16bntms+4],mosdraw316bntms
mov dword[mosjmptab16bntms+8],mosdraw416bntms
mov dword[mosjmptab16bntms+12],mosdraw516bntms
mov dword[mosjmptab16bntms+16],mosdraw616bntms
mov dword[mosjmptab16bntms+20],mosdraw716bntms
mov dword[mosjmptab16bntms+24],mosdraw816bntms
mov dword[mosjmptab16bntms+28],mosdraw916bntms
mov dword[mosjmptab16bntms+32],mosdraw1016bntms
mov dword[mosjmptab16bntms+36],mosdraw1116bntms
mov dword[mosjmptab16bntms+40],mosdraw1216bntms
mov dword[mosjmptab16bntms+44],mosdraw1316bntms
mov dword[mosjmptab16bntms+48],mosdraw1416bntms
mov dword[mosjmptab16bntms+52],mosdraw1516bntms
mov dword[mosjmptab16bntms+56],mosdraw1616bntms
; set ngpalcon4b
mov ecx,20h
xor eax,eax
.loopng
mov bl,al
shr bl,2
shl bl,4
mov dl,bl
mov dh,bl
shl edx,16
mov dl,bl
mov dh,bl
mov [ngpalcon4b+eax*4],edx
inc eax
dec ecx
jnz .loopng
; set ngpalcon2b
mov ecx,20h
xor eax,eax
.loopngb
mov bl,al
shr bl,2
shl bl,2
mov dl,bl
mov dh,bl
shl edx,16
mov dl,bl
mov dh,bl
mov [ngpalcon2b+eax*4],edx
inc eax
dec ecx
jnz .loopngb
; set tablead (NVMXDIZC) ( MXD )
push es
xor ecx,ecx
xor al,al
mov cx,256
mov edi,tablead
.loopa
test al,08h ; D flag
jnz .decon
test al,10h ; X flag
jnz .xon
test al,20h ; M flag
jnz .mon
mov esi,tableA
jmp .done
.mon
mov esi,tableB
jmp .done
.xon
test al,20h ; M flag
jnz .mon2
mov esi,tableC
jmp .done
.mon2
mov esi,tableD
jmp .done
.decon
test al,10h ; X flag
jnz .xon3
test al,20h ; M flag
jnz .mon3
mov esi,tableE
jmp .done
.mon3
mov esi,tableF
jmp .done
.xon3
test al,20h
jnz .mon4
mov esi,tableG
jmp .done
.mon4
mov esi,tableH
.done
inc al
push eax
mov eax,esi
stosd
pop eax
loop .loopa
; Set CPU addresses
; First, set all addresses to invalid
mov eax,eopINVALID
mov edi,tableA
mov ecx,256
rep stosd
mov edi,tableB
mov ecx,256
rep stosd
mov edi,tableC
mov ecx,256
rep stosd
mov edi,tableD
mov ecx,256
rep stosd
mov edi,tableE
mov ecx,256
rep stosd
mov edi,tableF
mov ecx,256
rep stosd
mov edi,tableG
mov ecx,256
rep stosd
mov edi,tableH
mov ecx,256
rep stosd
mov edi,tableA
call settables
mov edi,tableB
call settables
mov edi,tableC
call settables
mov edi,tableD
call settables
mov edi,tableE
call settables
mov edi,tableF
call settables
mov edi,tableG
call settables
mov edi,tableH
call settables
; set proper functions
mov edi,tableA ; Table addresses (M:0,X:0,D:0)
call settablem16
mov edi,tableA
call settablex16
mov edi,tableB ; Table addresses (M:1,X:0,D:0)
call settablex16
mov edi,tableC ; Table addresses (M:0,X:1,D:0)
call settablem16
mov edi,tableE ; Table addresses (M:0,X:0,D:1)
call settablem16
mov edi,tableE
call settableDm16
mov edi,tableE
call settablex16
mov edi,tableF ; Table addresses (M:1,X:0,D:1)
call settablex16
mov edi,tableF
call settableDm8
mov edi,tableG ; Table addresses (M:0,X:1,D:1)
call settablem16
mov edi,tableG
call settableDm16
mov edi,tableH ; Table addresses (M:1,X:1,D:1)
call settableDm8
pop es
ret
NEWSYM SetAddressingModes
; set 8-bit read memory tables
mov edi,memtabler8
; banks 0-3Fh
mov eax,regaccessbankr8
mov ecx,$40
rep stosd
; banks 40-6Fh
mov eax,memaccessbankr8
mov ecx,$30
rep stosd
; bank 70-77h
mov eax,sramaccessbankr8
mov ecx,8
rep stosd
; bank 78-7D
mov eax,memaccessbankr8
mov ecx,6
rep stosd
; bank 7E
mov eax,wramaccessbankr8
stosd
; bank 7F
mov eax,eramaccessbankr8
stosd
; banks 80-BF
mov eax,regaccessbankr8
mov ecx,$40
rep stosd
; banks C0-FFh
mov eax,memaccessbankr8
mov ecx,$40
rep stosd
; set 8-bit write memory tables
mov edi,memtablew8
; banks 0-3Fh
mov eax,regaccessbankw8
mov ecx,$40
rep stosd
; banks 40-6Fh
mov eax,memaccessbankw8
mov ecx,$30
rep stosd
; bank 70-77h
mov eax,sramaccessbankw8
mov ecx,8
rep stosd
; bank 78-7D
mov eax,memaccessbankw8
mov ecx,6
rep stosd
; bank 7E
mov eax,wramaccessbankw8
stosd
; bank 7F
mov eax,eramaccessbankw8
stosd
; banks 80-BF
mov eax,regaccessbankw8
mov ecx,$40
rep stosd
; banks C0-FFh
mov eax,memaccessbankw8
mov ecx,$40
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -