📄 stable.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 SA1tableA,SA1tableB,SA1tableC,SA1tableD,SA1tableE
EXTSYM SA1tableF,SA1tableG,SA1tableH,SA1tablead
EXTSYM cpucycle, SA1UpdateDPage, intrset
NEWSYM StableAsmStart
%include "cpu/s65816d.inc"
%include "cpu/saddress.inc"
%include "cpu/saddrni.inc"
%include "cpu/se65816.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)
;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 SA1inittable
; set tablead (NVMXDIZC) ( MXD )
push es
xor ecx,ecx
xor al,al
mov cx,256
mov edi,SA1tablead
.loopa
test al,08h ; D flag
jnz .decon
test al,10h ; X flag
jnz .xon
test al,20h ; M flag
jnz .mon
mov esi,SA1tableA
jmp .done
.mon
mov esi,SA1tableB
jmp .done
.xon
test al,20h ; M flag
jnz .mon2
mov esi,SA1tableC
jmp .done
.mon2
mov esi,SA1tableD
jmp .done
.decon
test al,10h ; X flag
jnz .xon3
test al,20h ; M flag
jnz .mon3
mov esi,SA1tableE
jmp .done
.mon3
mov esi,SA1tableF
jmp .done
.xon3
test al,20h
jnz .mon4
mov esi,SA1tableG
jmp .done
.mon4
mov esi,SA1tableH
.done
inc al
push eax
mov eax,esi
stosd
pop eax
loop .loopa
; Set CPU addresses
mov edi,SA1tableA
call SA1settables
mov edi,SA1tableB
call SA1settables
mov edi,SA1tableC
call SA1settables
mov edi,SA1tableD
call SA1settables
mov edi,SA1tableE
call SA1settables
mov edi,SA1tableF
call SA1settables
mov edi,SA1tableG
call SA1settables
mov edi,SA1tableH
call SA1settables
; set proper functions
mov edi,SA1tableA ; Table addresses (M:0,X:0,D:0)
call SA1settablem16
mov edi,SA1tableA
call SA1settablex16
mov edi,SA1tableB ; Table addresses (M:1,X:0,D:0)
call SA1settablex16
mov edi,SA1tableC ; Table addresses (M:0,X:1,D:0)
call SA1settablem16
mov edi,SA1tableE ; Table addresses (M:0,X:0,D:1)
call SA1settablem16
mov edi,SA1tableE
call SA1settableDm16
mov edi,SA1tableE
call SA1settablex16
mov edi,SA1tableF ; Table addresses (M:1,X:0,D:1)
call SA1settablex16
mov edi,SA1tableF
call SA1settableDm8
mov edi,SA1tableG ; Table addresses (M:0,X:1,D:1)
call SA1settablem16
mov edi,SA1tableG
call SA1settableDm16
mov edi,SA1tableH ; Table addresses (M:1,X:1,D:1)
call SA1settableDm8
pop es
ret
;*******************************************************
; Set Tables Sets the opcode tables according to EDI
;*******************************************************
; This function sets all the non-multiple entries
NEWSYM SA1settables
;row 0
mov dword[edi+00h*4],SA1COp00
mov dword[edi+01h*4],SA1COp01m8
mov dword[edi+02h*4],SA1COp02
mov dword[edi+03h*4],SA1COp03m8
mov dword[edi+04h*4],SA1COp04m8
mov dword[edi+05h*4],SA1COp05m8
mov dword[edi+06h*4],SA1COp06m8
mov dword[edi+07h*4],SA1COp07m8
mov dword[edi+08h*4],SA1COp08
mov dword[edi+09h*4],SA1COp09m8
mov dword[edi+0Ah*4],SA1COp0Am8
mov dword[edi+0Bh*4],SA1COp0B
mov dword[edi+0Ch*4],SA1COp0Cm8
mov dword[edi+0Dh*4],SA1COp0Dm8
mov dword[edi+0Eh*4],SA1COp0Em8
mov dword[edi+0Fh*4],SA1COp0Fm8
mov dword[edi+10h*4],SA1COp10
mov dword[edi+11h*4],SA1COp11m8
mov dword[edi+12h*4],SA1COp12m8
mov dword[edi+13h*4],SA1COp13m8
mov dword[edi+14h*4],SA1COp14m8
mov dword[edi+15h*4],SA1COp15m8
mov dword[edi+16h*4],SA1COp16m8
mov dword[edi+17h*4],SA1COp17m8
mov dword[edi+18h*4],SA1COp18
mov dword[edi+19h*4],SA1COp19m8
mov dword[edi+1Ah*4],SA1COp1Am8
mov dword[edi+1Bh*4],SA1COp1B
mov dword[edi+1Ch*4],SA1COp1Cm8
mov dword[edi+1Dh*4],SA1COp1Dm8
mov dword[edi+1Eh*4],SA1COp1Em8
mov dword[edi+1Fh*4],SA1COp1Fm8
mov dword[edi+20h*4],SA1COp20
mov dword[edi+21h*4],SA1COp21m8
mov dword[edi+22h*4],SA1COp22
mov dword[edi+23h*4],SA1COp23m8
mov dword[edi+24h*4],SA1COp24m8
mov dword[edi+25h*4],SA1COp25m8
mov dword[edi+26h*4],SA1COp26m8
mov dword[edi+27h*4],SA1COp27m8
mov dword[edi+28h*4],SA1COp28
mov dword[edi+29h*4],SA1COp29m8
mov dword[edi+2Ah*4],SA1COp2Am8
mov dword[edi+2Bh*4],SA1COp2B
mov dword[edi+2Ch*4],SA1COp2Cm8
mov dword[edi+2Dh*4],SA1COp2Dm8
mov dword[edi+2Eh*4],SA1COp2Em8
mov dword[edi+2Fh*4],SA1COp2Fm8
mov dword[edi+30h*4],SA1COp30
mov dword[edi+31h*4],SA1COp31m8
mov dword[edi+32h*4],SA1COp32m8
mov dword[edi+33h*4],SA1COp33m8
mov dword[edi+34h*4],SA1COp34m8
mov dword[edi+35h*4],SA1COp35m8
mov dword[edi+36h*4],SA1COp36m8
mov dword[edi+37h*4],SA1COp37m8
mov dword[edi+38h*4],SA1COp38
mov dword[edi+39h*4],SA1COp39m8
mov dword[edi+3Ah*4],SA1COp3Am8
mov dword[edi+3Bh*4],SA1COp3B
mov dword[edi+3Ch*4],SA1COp3Cm8
mov dword[edi+3Dh*4],SA1COp3Dm8
mov dword[edi+3Eh*4],SA1COp3Em8
mov dword[edi+3Fh*4],SA1COp3Fm8
mov dword[edi+40h*4],SA1COp40
mov dword[edi+41h*4],SA1COp41m8
mov dword[edi+42h*4],SA1COp42
mov dword[edi+43h*4],SA1COp43m8
mov dword[edi+44h*4],SA1COp44
mov dword[edi+45h*4],SA1COp45m8
mov dword[edi+46h*4],SA1COp46m8
mov dword[edi+47h*4],SA1COp47m8
mov dword[edi+48h*4],SA1COp48m8
mov dword[edi+49h*4],SA1COp49m8
mov dword[edi+4Ah*4],SA1COp4Am8
mov dword[edi+4Bh*4],SA1COp4B
mov dword[edi+4Ch*4],SA1COp4C
mov dword[edi+4Dh*4],SA1COp4Dm8
mov dword[edi+4Eh*4],SA1COp4Em8
mov dword[edi+4Fh*4],SA1COp4Fm8
mov dword[edi+50h*4],SA1COp50
mov dword[edi+51h*4],SA1COp51m8
mov dword[edi+52h*4],SA1COp52m8
mov dword[edi+53h*4],SA1COp53m8
mov dword[edi+54h*4],SA1COp54
mov dword[edi+55h*4],SA1COp55m8
mov dword[edi+56h*4],SA1COp56m8
mov dword[edi+57h*4],SA1COp57m8
mov dword[edi+58h*4],SA1COp58
mov dword[edi+59h*4],SA1COp59m8
mov dword[edi+5Ah*4],SA1COp5Ax8
mov dword[edi+5Bh*4],SA1COp5B
mov dword[edi+5Ch*4],SA1COp5C
mov dword[edi+5Dh*4],SA1COp5Dm8
mov dword[edi+5Eh*4],SA1COp5Em8
mov dword[edi+5Fh*4],SA1COp5Fm8
mov dword[edi+60h*4],SA1COp60
mov dword[edi+61h*4],SA1COp61m8nd
mov dword[edi+62h*4],SA1COp62
mov dword[edi+63h*4],SA1COp63m8nd
mov dword[edi+64h*4],SA1COp64m8
mov dword[edi+65h*4],SA1COp65m8nd
mov dword[edi+66h*4],SA1COp66m8
mov dword[edi+67h*4],SA1COp67m8nd
mov dword[edi+68h*4],SA1COp68m8
mov dword[edi+69h*4],SA1COp69m8nd
mov dword[edi+6Ah*4],SA1COp6Am8
mov dword[edi+6Bh*4],SA1COp6B
mov dword[edi+6Ch*4],SA1COp6C
mov dword[edi+6Dh*4],SA1COp6Dm8nd
mov dword[edi+6Eh*4],SA1COp6Em8
mov dword[edi+6Fh*4],SA1COp6Fm8nd
mov dword[edi+70h*4],SA1COp70
mov dword[edi+71h*4],SA1COp71m8nd
mov dword[edi+72h*4],SA1COp72m8nd
mov dword[edi+73h*4],SA1COp73m8nd
mov dword[edi+74h*4],SA1COp74m8
mov dword[edi+75h*4],SA1COp75m8nd
mov dword[edi+76h*4],SA1COp76m8
mov dword[edi+77h*4],SA1COp77m8nd
mov dword[edi+78h*4],SA1COp78
mov dword[edi+79h*4],SA1COp79m8nd
mov dword[edi+7Ah*4],SA1COp7Ax8
mov dword[edi+7Bh*4],SA1COp7B
mov dword[edi+7Ch*4],SA1COp7C
mov dword[edi+7Dh*4],SA1COp7Dm8nd
mov dword[edi+7Eh*4],SA1COp7Em8
mov dword[edi+7Fh*4],SA1COp7Fm8nd
mov dword[edi+80h*4],SA1COp80
mov dword[edi+81h*4],SA1COp81m8
mov dword[edi+82h*4],SA1COp82
mov dword[edi+83h*4],SA1COp83m8
mov dword[edi+84h*4],SA1COp84x8
mov dword[edi+85h*4],SA1COp85m8
mov dword[edi+86h*4],SA1COp86x8
mov dword[edi+87h*4],SA1COp87m8
mov dword[edi+88h*4],SA1COp88x8
mov dword[edi+89h*4],SA1COp89m8
mov dword[edi+8Ah*4],SA1COp8Am8
mov dword[edi+8Bh*4],SA1COp8B
mov dword[edi+8Ch*4],SA1COp8Cx8
mov dword[edi+8Dh*4],SA1COp8Dm8
mov dword[edi+8Eh*4],SA1COp8Ex8
mov dword[edi+8Fh*4],SA1COp8Fm8
mov dword[edi+90h*4],SA1COp90
mov dword[edi+91h*4],SA1COp91m8
mov dword[edi+92h*4],SA1COp92m8
mov dword[edi+93h*4],SA1COp93m8
mov dword[edi+94h*4],SA1COp94x8
mov dword[edi+95h*4],SA1COp95m8
mov dword[edi+96h*4],SA1COp96x8
mov dword[edi+97h*4],SA1COp97m8
mov dword[edi+98h*4],SA1COp98m8
mov dword[edi+99h*4],SA1COp99m8
mov dword[edi+9Ah*4],SA1COp9A
mov dword[edi+9Bh*4],SA1COp9Bx8
mov dword[edi+9Ch*4],SA1COp9Cm8
mov dword[edi+9Dh*4],SA1COp9Dm8
mov dword[edi+9Eh*4],SA1COp9Em8
mov dword[edi+9Fh*4],SA1COp9Fm8
mov dword[edi+0A0h*4],SA1COpA0x8
mov dword[edi+0A1h*4],SA1COpA1m8
mov dword[edi+0A2h*4],SA1COpA2x8
mov dword[edi+0A3h*4],SA1COpA3m8
mov dword[edi+0A4h*4],SA1COpA4x8
mov dword[edi+0A5h*4],SA1COpA5m8
mov dword[edi+0A6h*4],SA1COpA6x8
mov dword[edi+0A7h*4],SA1COpA7m8
mov dword[edi+0A8h*4],SA1COpA8x8
mov dword[edi+0A9h*4],SA1COpA9m8
mov dword[edi+0AAh*4],SA1COpAAx8
mov dword[edi+0ABh*4],SA1COpAB
mov dword[edi+0ACh*4],SA1COpACx8
mov dword[edi+0ADh*4],SA1COpADm8
mov dword[edi+0AEh*4],SA1COpAEx8
mov dword[edi+0AFh*4],SA1COpAFm8
mov dword[edi+0B0h*4],SA1COpB0
mov dword[edi+0B1h*4],SA1COpB1m8
mov dword[edi+0B2h*4],SA1COpB2m8
mov dword[edi+0B3h*4],SA1COpB3m8
mov dword[edi+0B4h*4],SA1COpB4x8
mov dword[edi+0B5h*4],SA1COpB5m8
mov dword[edi+0B6h*4],SA1COpB6x8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -