First release of ZSNES sources

This commit is contained in:
teuf
2001-04-02 22:30:58 +00:00
commit 1fe183be02
138 changed files with 186213 additions and 0 deletions

1623
zsnes/src/cpu/65816d.inc Normal file

File diff suppressed because it is too large Load Diff

1621
zsnes/src/cpu/65816db.inc Normal file

File diff suppressed because it is too large Load Diff

1631
zsnes/src/cpu/65816dc.inc Normal file

File diff suppressed because it is too large Load Diff

812
zsnes/src/cpu/address.inc Normal file
View File

@@ -0,0 +1,812 @@
;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.
EXTSYM membank0w8ram
;*******************************************************
; Address Modes
;*******************************************************
; 1. Immediate Addressing -- # - DONE IN PROGRAM
%macro addr_I_8br 0
mov al,[esi]
inc esi
%endmacro
%macro addr_I_16br 0
mov eax,[esi]
add esi,2
%endmacro
; 2. Absolute -- a (TESTED)
%macro addr_a_8br 0
mov cx,[esi]
mov bl,[xdb]
add esi,2
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_a_16br 0
mov cx,[esi]
mov bl,[xdb]
add esi,2
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_a_8bw 0
mov cx,[esi]
mov bl,[xdb]
add esi,2
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_a_16bw 0
mov cx,[esi]
mov bl,[xdb]
add esi,2
call dword near [memtablew16+ebx*4]
%endmacro
; 3. Absolute Long -- al
%macro addr_al_8br 0
mov cx,[esi]
mov bl,[esi+2]
add esi,3
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_al_16br 0
mov cx,[esi]
mov bl,[esi+2]
add esi,3
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_al_8bw 0
mov cx,[esi]
mov bl,[esi+2]
add esi,3
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_al_16bw 0
mov cx,[esi]
mov bl,[esi+2]
add esi,3
call dword near [memtablew16+ebx*4]
%endmacro
; 4. Direct -- d (TESTED)
%macro addr_d_8br 0
mov bl,[esi]
mov ecx,[xd]
inc esi
call dword near [DPageR8]
%endmacro
%macro addr_d_16br 0
mov bl,[esi]
mov ecx,[xd]
inc esi
call dword near [DPageR16]
%endmacro
%macro addr_d_8bw 0
mov bl,[esi]
mov ecx,[xd]
inc esi
call dword near [DPageW8]
%endmacro
%macro addr_d_16bw 0
mov bl,[esi]
mov ecx,[xd]
inc esi
call dword near [DPageW16]
%endmacro
; 5. Accumulator -- A
%macro addr_A_8br 0
mov al,[xa]
%endmacro
%macro addr_A_16br 0
mov eax,[xa]
%endmacro
%macro addr_A_8bw 0
mov [xa],al
%endmacro
%macro addr_A_16bw 0
mov [xa],ax
%endmacro
; 7. Direct Indirect Indexed -- (d),y
%macro addr_BdBCy_8br 0
mov bl,[esi]
mov ecx,[xd]
inc esi
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
add cx,[xy]
jnc .np
inc bl
.np
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_BdBCy_16br 0
mov bl,[esi]
mov ecx,[xd]
inc esi
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
add cx,[xy]
jnc .np
inc bl
.np
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_BdBCy_8bw 0
push ax
mov bl,[esi]
mov ecx,[xd]
inc esi
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
add cx,[xy]
jnc .np
inc bl
.np
pop ax
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_BdBCy_16bw 0
push ax
mov bl,[esi]
mov ecx,[xd]
inc esi
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
add cx,[xy]
jnc .np
inc bl
.np
pop ax
call dword near [memtablew16+ebx*4]
%endmacro
; 8. Direct Indirect Indexed Long -- [d],y
%macro addr_LdLCy_8br 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
inc esi
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
add cx,[xy]
jnc .np
inc bl
.np
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_LdLCy_16br 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
inc esi
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
add cx,[xy]
jnc .np
inc bl
.np
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_LdLCy_8bw 0
push ax
mov ecx,[xd]
mov bl,[esi]
add cx,bx
inc esi
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
add cx,[xy]
pop ax
jnc .np
inc bl
.np
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_LdLCy_16bw 0
push ax
mov ecx,[xd]
mov bl,[esi]
add cx,bx
inc esi
push cx
call membank0r16
pop cx
add cx,2
xor bl,bl
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
add cx,[xy]
pop ax
jnc .np
inc bl
.np
call dword near [memtablew16+ebx*4]
%endmacro
; 9. Direct Indexed Indirect -- (d,x)
%macro addr_BdCxB_8br 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
inc esi
add cx,[xx]
call membank0r16
mov cx,ax
mov bl,[xdb]
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_BdCxB_16br 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
inc esi
add cx,[xx]
call membank0r16
mov cx,ax
mov bl,[xdb]
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_BdCxB_8bw 0
push ax
mov ecx,[xd]
mov bl,[esi]
add cx,bx
inc esi
add cx,[xx]
call membank0r16
mov cx,ax
mov bl,[xdb]
pop ax
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_BdCxB_16bw 0
push ax
mov ecx,[xd]
mov bl,[esi]
add cx,bx
inc esi
add cx,[xx]
call membank0r16
mov cx,ax
mov bl,[xdb]
pop ax
call dword near [memtablew16+ebx*4]
%endmacro
; 10. Direct Indexed With X -- d,x
%macro addr_dCx_8br 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
inc esi
add cx,[xx]
call membank0r8
%endmacro
%macro addr_dCx_16br 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
inc esi
add cx,[xx]
call membank0r16
%endmacro
%macro addr_dCx_8bw 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
inc esi
add cx,[xx]
call membank0w8
%endmacro
%macro addr_dCx_16bw 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
inc esi
add cx,[xx]
call membank0w16
%endmacro
; 11. Direct Indexed With Y -- d,y
%macro addr_dCy_8br 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
inc esi
add cx,[xy]
call membank0r8
%endmacro
%macro addr_dCy_16br 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
inc esi
add cx,[xy]
call membank0r16
%endmacro
%macro addr_dCy_8bw 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
inc esi
add cx,[xy]
call membank0w8
%endmacro
%macro addr_dCy_16bw 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
inc esi
add cx,[xy]
call membank0w16
%endmacro
; 12. Absolute Indexed With X -- a,x
%macro addr_aCx_8br 0
mov cx,[esi]
mov bl,[xdb]
add esi,2
add cx,[xx]
jnc .np
inc bl
.np
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_aCx_16br 0
mov cx,[esi]
mov bl,[xdb]
add esi,2
add cx,[xx]
jnc .np
inc bl
.np
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_aCx_8bw 0
mov cx,[esi]
mov bl,[xdb]
add esi,2
add cx,[xx]
jnc .np
inc bl
.np
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_aCx_16bw 0
mov cx,[esi]
mov bl,[xdb]
add esi,2
add cx,[xx]
jnc .np
inc bl
.np
call dword near [memtablew16+ebx*4]
%endmacro
; 13. Absolute Indexed With Y -- a,y
%macro addr_aCy_8br 0
mov cx,[esi]
mov bl,[xdb]
add esi,2
add cx,[xy]
jnc .np
inc bl
.np
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_aCy_16br 0
mov cx,[esi]
mov bl,[xdb]
add esi,2
add cx,[xy]
jnc .np
inc bl
.np
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_aCy_8bw 0
mov cx,[esi]
mov bl,[xdb]
add esi,2
add cx,[xy]
jnc .np
inc bl
.np
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_aCy_16bw 0
mov cx,[esi]
mov bl,[xdb]
add esi,2
add cx,[xy]
jnc .np
inc bl
.np
call dword near [memtablew16+ebx*4]
%endmacro
; 14. Absolute Long Indexed With X -- al,x
%macro addr_alCx_8br 0
mov cx,[esi]
mov bl,[esi+2]
add esi,3
add cx,[xx]
jnc .np
inc bl
.np
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_alCx_16br 0
mov cx,[esi]
mov bl,[esi+2]
add esi,3
add cx,[xx]
jnc .np
inc bl
.np
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_alCx_8bw 0
mov cx,[esi]
mov bl,[esi+2]
add esi,3
add cx,[xx]
jnc .np
inc bl
.np
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_alCx_16bw 0
mov cx,[esi]
mov bl,[esi+2]
add esi,3
add cx,[xx]
jnc .np
inc bl
.np
call dword near [memtablew16+ebx*4]
%endmacro
; 18. Direct Indirect -- (d)
; ___________________
; Instruction: | opcode | offset |
; ~~~~~~~~~~~~~~~~~~~
; | Direct Register |
; + | offset |
; ---------------------
; | 00 | direct address |
; then:
; | 00 | (direct address) |
; + | DB |
; -------------------------------
; Address: | effective address |
%macro addr_BdB_8br 0
mov bl,[esi]
mov ecx,[xd]
inc esi
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_BdB_16br 0
mov bl,[esi]
mov ecx,[xd]
inc esi
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_BdB_8bw 0
push ax
mov bl,[esi]
mov ecx,[xd]
inc esi
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
pop ax
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_BdB_16bw 0
push ax
mov bl,[esi]
mov ecx,[xd]
inc esi
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
pop ax
call dword near [memtablew16+ebx*4]
%endmacro
; 19. Direct Indirect Long -- [d]
; ___________________
; Instruction: | opcode | offset |
; ~~~~~~~~~~~~~~~~~~~
; | Direct Register |
; + | offset |
; ---------------------
; | 00 | direct address |
; then:
; -------------------------------
; Address: | (direct address) |
%macro addr_LdL_8br 0
mov bl,[esi]
mov ecx,[xd]
inc esi
add cx,bx
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_LdL_16br 0
mov bl,[esi]
mov ecx,[xd]
inc esi
add cx,bx
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_LdL_8bw 0
push ax
mov bl,[esi]
mov ecx,[xd]
inc esi
add cx,bx
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
pop ax
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_LdL_16bw 0
push ax
mov bl,[esi]
mov ecx,[xd]
inc esi
add cx,bx
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
pop ax
call dword near [memtablew16+ebx*4]
%endmacro
; 22. Stack Relative -- d,s
%macro addr_dCs_8br 0
mov bl,[esi]
mov cx,[xs]
inc esi
add cx,bx
call membank0r8
%endmacro
%macro addr_dCs_16br 0
mov bl,[esi]
mov cx,[xs]
inc esi
add cx,bx
call membank0r16
%endmacro
%macro addr_dCs_8bw 0
mov bl,[esi]
mov cx,[xs]
inc esi
add cx,bx
call membank0w8
%endmacro
%macro addr_dCs_16bw 0
mov bl,[esi]
mov cx,[xs]
inc esi
add cx,bx
call membank0w16
%endmacro
; 23. Stack Relative Indirect Indexed -- (d,s),y (TESTED)
%macro addr_BdCsBCy_8br 0
mov bl,[esi]
mov cx,[xs]
inc esi
add cx,bx
call membank0r16
mov cx,ax
mov bl,[xdb]
add cx,[xy]
jnc .np
inc bl
.np
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_BdCsBCy_16br 0
mov bl,[esi]
mov cx,[xs]
inc esi
add cx,bx
call membank0r16
mov cx,ax
mov bl,[xdb]
add cx,[xy]
jnc .np
inc bl
.np
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_BdCsBCy_8bw 0
push ax
mov bl,[esi]
mov cx,[xs]
inc esi
add cx,bx
call membank0r16
mov cx,ax
mov bl,[xdb]
pop ax
add cx,[xy]
jnc .np
inc bl
.np
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_BdCsBCy_16bw 0
push ax
mov bl,[esi]
mov cx,[xs]
inc esi
add cx,bx
call membank0r16
mov cx,ax
mov bl,[xdb]
pop ax
add cx,[xy]
jnc .np
inc bl
.np
call dword near [memtablew16+ebx*4]
%endmacro


792
zsnes/src/cpu/address2.inc Normal file
View File

@@ -0,0 +1,792 @@
;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.
EXTSYM DPageR8,DPageR16,DPageW8,DPageW16
;*******************************************************
; Address Modes
;*******************************************************
; 1. Immediate Addressing -- # - DONE IN PROGRAM
%macro addr_I_8br 0
mov al,[esi]
inc esi
%endmacro
%macro addr_I_16br 0
mov eax,[esi]
add esi,2
%endmacro
; 2. Absolute -- a (TESTED)
%macro addr_a_8br 0
mov cx,[esi]
mov bl,[xdb]
add esi,2
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_a_16br 0
mov cx,[esi]
mov bl,[xdb]
add esi,2
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_a_8bw 0
mov cx,[esi]
mov bl,[xdb]
add esi,2
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_a_16bw 0
mov cx,[esi]
mov bl,[xdb]
add esi,2
call dword near [memtablew16+ebx*4]
%endmacro
; 3. Absolute Long -- al
%macro addr_al_8br 0
mov cx,[esi]
mov bl,[esi+2]
add esi,3
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_al_16br 0
mov cx,[esi]
mov bl,[esi+2]
add esi,3
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_al_8bw 0
mov cx,[esi]
mov bl,[esi+2]
add esi,3
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_al_16bw 0
mov cx,[esi]
mov bl,[esi+2]
add esi,3
call dword near [memtablew16+ebx*4]
%endmacro
; 4. Direct -- d (TESTED)
%macro addr_d_8br 0
mov bl,[esi]
mov ecx,[xd]
inc esi
call dword near [DPageR8]
%endmacro
%macro addr_d_16br 0
mov bl,[esi]
mov ecx,[xd]
inc esi
call dword near [DPageR16]
%endmacro
%macro addr_d_8bw 0
mov bl,[esi]
mov ecx,[xd]
inc esi
call dword near [DPageW8]
%endmacro
%macro addr_d_16bw 0
mov bl,[esi]
mov ecx,[xd]
inc esi
call dword near [DPageW16]
%endmacro
; 5. Accumulator -- A
%macro addr_A_8br 0
mov al,[xa]
%endmacro
%macro addr_A_16br 0
mov eax,[xa]
%endmacro
%macro addr_A_8bw 0
mov [xa],al
%endmacro
%macro addr_A_16bw 0
mov [xa],ax
%endmacro
; 7. Direct Indirect Indexed -- (d),y
%macro addr_BdBCy_8br 0
mov bl,[esi]
mov ecx,[xd]
inc esi
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
add cx,[xy]
jnc .np
inc bl
.np
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_BdBCy_16br 0
mov bl,[esi]
mov ecx,[xd]
inc esi
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
add cx,[xy]
jnc .np
inc bl
.np
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_BdBCy_8bw 0
push ax
mov bl,[esi]
mov ecx,[xd]
inc esi
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
add cx,[xy]
jnc .np
inc bl
.np
pop ax
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_BdBCy_16bw 0
push ax
mov bl,[esi]
mov ecx,[xd]
inc esi
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
add cx,[xy]
jnc .np
inc bl
.np
pop ax
call dword near [memtablew16+ebx*4]
%endmacro
; 8. Direct Indirect Indexed Long -- [d],y
%macro addr_LdLCy_8br 0
mov ecx,[xd]
mov bl,[esi]
inc esi
push cx
call dword near [DPageR16]
pop cx
add cx,2
push ax
call dword near [DPageR8]
mov bl,al
pop ax
mov cx,ax
add cx,[xy]
jnc .np
inc bl
.np
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_LdLCy_16br 0
mov ecx,[xd]
mov bl,[esi]
inc esi
push cx
call dword near [DPageR16]
pop cx
add cx,2
push ax
call dword near [DPageR8]
mov bl,al
pop ax
mov cx,ax
add cx,[xy]
jnc .np
inc bl
.np
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_LdLCy_8bw 0
push ax
mov ecx,[xd]
mov bl,[esi]
inc esi
push cx
call dword near [DPageR16]
pop cx
add cx,2
push ax
call dword near [DPageR8]
mov bl,al
pop ax
mov cx,ax
add cx,[xy]
pop ax
jnc .np
inc bl
.np
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_LdLCy_16bw 0
push ax
mov ecx,[xd]
mov bl,[esi]
inc esi
push cx
call dword near [DPageR16]
pop cx
add cx,2
xor bl,bl
push ax
call dword near [DPageR8]
mov bl,al
pop ax
mov cx,ax
add cx,[xy]
pop ax
jnc .np
inc bl
.np
call dword near [memtablew16+ebx*4]
%endmacro
; 9. Direct Indexed Indirect -- (d,x)
%macro addr_BdCxB_8br 0
mov ecx,[xd]
mov bl,[esi]
inc esi
add cx,[xx]
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_BdCxB_16br 0
mov ecx,[xd]
mov bl,[esi]
inc esi
add cx,[xx]
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_BdCxB_8bw 0
push ax
mov ecx,[xd]
mov bl,[esi]
inc esi
add cx,[xx]
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
pop ax
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_BdCxB_16bw 0
push ax
mov ecx,[xd]
mov bl,[esi]
inc esi
add cx,[xx]
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
pop ax
call dword near [memtablew16+ebx*4]
%endmacro
; 10. Direct Indexed With X -- d,x
%macro addr_dCx_8br 0
mov ecx,[xd]
mov bl,[esi]
inc esi
add cx,[xx]
call dword near [DPageR8]
%endmacro
%macro addr_dCx_16br 0
mov ecx,[xd]
mov bl,[esi]
inc esi
add cx,[xx]
call dword near [DPageR16]
%endmacro
%macro addr_dCx_8bw 0
mov ecx,[xd]
mov bl,[esi]
inc esi
add cx,[xx]
call dword near [DPageW8]
%endmacro
%macro addr_dCx_16bw 0
mov ecx,[xd]
mov bl,[esi]
inc esi
add cx,[xx]
call dword near [DPageW16]
%endmacro
; 11. Direct Indexed With Y -- d,y
%macro addr_dCy_8br 0
mov ecx,[xd]
mov bl,[esi]
inc esi
add cx,[xy]
call dword near [DPageR8]
%endmacro
%macro addr_dCy_16br 0
mov ecx,[xd]
mov bl,[esi]
inc esi
add cx,[xy]
call dword near [DPageR16]
%endmacro
%macro addr_dCy_8bw 0
mov ecx,[xd]
mov bl,[esi]
inc esi
add cx,[xy]
call dword near [DPageW8]
%endmacro
%macro addr_dCy_16bw 0
mov ecx,[xd]
mov bl,[esi]
inc esi
add cx,[xy]
call dword near [DPageW16]
%endmacro
; 12. Absolute Indexed With X -- a,x
%macro addr_aCx_8br 0
mov cx,[esi]
mov bl,[xdb]
add esi,2
add cx,[xx]
jnc .np
inc bl
.np
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_aCx_16br 0
mov cx,[esi]
mov bl,[xdb]
add esi,2
add cx,[xx]
jnc .np
inc bl
.np
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_aCx_8bw 0
mov cx,[esi]
mov bl,[xdb]
add esi,2
add cx,[xx]
jnc .np
inc bl
.np
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_aCx_16bw 0
mov cx,[esi]
mov bl,[xdb]
add esi,2
add cx,[xx]
jnc .np
inc bl
.np
call dword near [memtablew16+ebx*4]
%endmacro
; 13. Absolute Indexed With Y -- a,y
%macro addr_aCy_8br 0
mov cx,[esi]
mov bl,[xdb]
add esi,2
add cx,[xy]
jnc .np
inc bl
.np
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_aCy_16br 0
mov cx,[esi]
mov bl,[xdb]
add esi,2
add cx,[xy]
jnc .np
inc bl
.np
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_aCy_8bw 0
mov cx,[esi]
mov bl,[xdb]
add esi,2
add cx,[xy]
jnc .np
inc bl
.np
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_aCy_16bw 0
mov cx,[esi]
mov bl,[xdb]
add esi,2
add cx,[xy]
jnc .np
inc bl
.np
call dword near [memtablew16+ebx*4]
%endmacro
; 14. Absolute Long Indexed With X -- al,x
%macro addr_alCx_8br 0
mov cx,[esi]
mov bl,[esi+2]
add esi,3
add cx,[xx]
jnc .np
inc bl
.np
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_alCx_16br 0
mov cx,[esi]
mov bl,[esi+2]
add esi,3
add cx,[xx]
jnc .np
inc bl
.np
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_alCx_8bw 0
mov cx,[esi]
mov bl,[esi+2]
add esi,3
add cx,[xx]
jnc .np
inc bl
.np
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_alCx_16bw 0
mov cx,[esi]
mov bl,[esi+2]
add esi,3
add cx,[xx]
jnc .np
inc bl
.np
call dword near [memtablew16+ebx*4]
%endmacro
; 18. Direct Indirect -- (d)
; ___________________
; Instruction: | opcode | offset |
; ~~~~~~~~~~~~~~~~~~~
; | Direct Register |
; + | offset |
; ---------------------
; | 00 | direct address |
; then:
; | 00 | (direct address) |
; + | DB |
; -------------------------------
; Address: | effective address |
%macro addr_BdB_8br 0
mov bl,[esi]
mov ecx,[xd]
inc esi
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_BdB_16br 0
mov bl,[esi]
mov ecx,[xd]
inc esi
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_BdB_8bw 0
push ax
mov bl,[esi]
mov ecx,[xd]
inc esi
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
pop ax
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_BdB_16bw 0
push ax
mov bl,[esi]
mov ecx,[xd]
inc esi
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
pop ax
call dword near [memtablew16+ebx*4]
%endmacro
; 19. Direct Indirect Long -- [d]
; ___________________
; Instruction: | opcode | offset |
; ~~~~~~~~~~~~~~~~~~~
; | Direct Register |
; + | offset |
; ---------------------
; | 00 | direct address |
; then:
; -------------------------------
; Address: | (direct address) |
%macro addr_LdL_8br 0
mov bl,[esi]
mov ecx,[xd]
inc esi
push cx
call dword near [DPageR16]
pop cx
add cx,2
push ax
call dword near [DPageR8]
mov bl,al
pop ax
mov cx,ax
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_LdL_16br 0
mov bl,[esi]
mov ecx,[xd]
inc esi
push cx
call dword near [DPageR16]
pop cx
add cx,2
push ax
call dword near [DPageR8]
mov bl,al
pop ax
mov cx,ax
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_LdL_8bw 0
push ax
mov bl,[esi]
mov ecx,[xd]
inc esi
push cx
call dword near [DPageR16]
pop cx
add cx,2
push ax
call dword near [DPageR8]
mov bl,al
pop ax
mov cx,ax
pop ax
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_LdL_16bw 0
push ax
mov bl,[esi]
mov ecx,[xd]
inc esi
push cx
call dword near [DPageR16]
pop cx
add cx,2
push ax
call dword near [DPageR8]
mov bl,al
pop ax
mov cx,ax
pop ax
call dword near [memtablew16+ebx*4]
%endmacro
; 22. Stack Relative -- d,s
%macro addr_dCs_8br 0
mov bl,[esi]
mov cx,[xs]
inc esi
add cx,bx
call membank0r8
%endmacro
%macro addr_dCs_16br 0
mov bl,[esi]
mov cx,[xs]
inc esi
add cx,bx
call membank0r16
%endmacro
%macro addr_dCs_8bw 0
mov bl,[esi]
mov cx,[xs]
inc esi
add cx,bx
call membank0w8
%endmacro
%macro addr_dCs_16bw 0
mov bl,[esi]
mov cx,[xs]
inc esi
add cx,bx
call membank0w16
%endmacro
; 23. Stack Relative Indirect Indexed -- (d,s),y (TESTED)
%macro addr_BdCsBCy_8br 0
mov bl,[esi]
mov cx,[xs]
inc esi
add cx,bx
call membank0r16
mov cx,ax
mov bl,[xdb]
add cx,[xy]
jnc .np
inc bl
.np
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_BdCsBCy_16br 0
mov bl,[esi]
mov cx,[xs]
inc esi
add cx,bx
call membank0r16
mov cx,ax
mov bl,[xdb]
add cx,[xy]
jnc .np
inc bl
.np
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_BdCsBCy_8bw 0
push ax
mov bl,[esi]
mov cx,[xs]
inc esi
add cx,bx
call membank0r16
mov cx,ax
mov bl,[xdb]
pop ax
add cx,[xy]
jnc .np
inc bl
.np
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_BdCsBCy_16bw 0
push ax
mov bl,[esi]
mov cx,[xs]
inc esi
add cx,bx
call membank0r16
mov cx,ax
mov bl,[xdb]
pop ax
add cx,[xy]
jnc .np
inc bl
.np
call dword near [memtablew16+ebx*4]
%endmacro


409
zsnes/src/cpu/addrni.asm Normal file
View File

@@ -0,0 +1,409 @@
;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.
;*******************************************************
; Address Modes
;*******************************************************
; 1. Immediate Addressing -- # - DONE IN PROGRAM
%macro addr_I_8brni 0
mov al,[esi]
%endmacro
%macro addr_I_16brni 0
mov ax,[esi]
%endmacro
; 2. Absolute -- a (TESTED)
%macro addr_a_8brni 0
mov cx,[esi]
mov bl,[xdb]
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_a_16brni 0
mov cx,[esi]
mov bl,[xdb]
call dword near [memtabler16+ebx*4]
%endmacro
; 3. Absolute Long -- al
%macro addr_al_8brni 0
mov cx,[esi]
mov bl,[esi+2]
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_al_16brni 0
mov cx,[esi]
mov bl,[esi+2]
call dword near [memtabler16+ebx*4]
%endmacro
; 4. Direct -- d (TESTED)
%macro addr_d_8brni 0
mov bl,[esi]
mov ecx,[xd]
call dword near [DPageR8]
%endmacro
%macro addr_d_16brni 0
mov bl,[esi]
mov ecx,[xd]
call dword near [DPageR16]
%endmacro
; 5. Accumulator -- A
%macro addr_A_8brni 0
mov al,[xa]
%endmacro
%macro addr_A_16brni 0
mov ax,[xa]
%endmacro
; 7. Direct Indirect Indexed -- (d),y
%macro addr_BdBCy_8brni 0
mov bl,[esi]
mov ecx,[xd]
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
add cx,[xy]
jnc .npb
inc bl
.npb
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_BdBCy_16brni 0
mov bl,[esi]
mov ecx,[xd]
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
add cx,[xy]
jnc .npb
inc bl
.npb
call dword near [memtabler16+ebx*4]
%endmacro
; 8. Direct Indirect Indexed Long -- [d],y
%macro addr_LdLCy_8brni 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
add cx,[xy]
jnc .npb
inc bl
.npb
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_LdLCy_16brni 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
add cx,[xy]
jnc .npb
inc bl
.npb
call dword near [memtabler16+ebx*4]
%endmacro
; 9. Direct Indexed Indirect -- (d,x)
%macro addr_BdCxB_8brni 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
add cx,[xx]
call membank0r16
mov cx,ax
mov bl,[xdb]
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_BdCxB_16brni 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
add cx,[xx]
call membank0r16
mov cx,ax
mov bl,[xdb]
call dword near [memtabler16+ebx*4]
%endmacro
; 10. Direct Indexed With X -- d,x
%macro addr_dCx_8brni 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
add cx,[xx]
call membank0r8
%endmacro
%macro addr_dCx_16brni 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
add cx,[xx]
call membank0r16
%endmacro
; 11. Direct Indexed With Y -- d,y
%macro addr_dCy_8brni 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
add cx,[xy]
call membank0r8
%endmacro
%macro addr_dCy_16brni 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
add cx,[xy]
call membank0r16
%endmacro
; 12. Absolute Indexed With X -- a,x
%macro addr_aCx_8brni 0
mov cx,[esi]
mov bl,[xdb]
add cx,[xx]
jnc .npb
inc bl
.npb
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_aCx_16brni 0
mov cx,[esi]
mov bl,[xdb]
add cx,[xx]
jnc .npb
inc bl
.npb
call dword near [memtabler16+ebx*4]
%endmacro
; 13. Absolute Indexed With Y -- a,y
%macro addr_aCy_8brni 0
mov cx,[esi]
mov bl,[xdb]
add cx,[xy]
jnc .npb
inc bl
.npb
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_aCy_16brni 0
mov cx,[esi]
mov bl,[xdb]
add cx,[xy]
jnc .npb
inc bl
.npb
call dword near [memtabler16+ebx*4]
%endmacro
; 14. Absolute Long Indexed With X -- al,x
%macro addr_alCx_8brni 0
mov cx,[esi]
mov bl,[esi+2]
add cx,[xx]
jnc .npb
inc bl
.npb
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_alCx_16brni 0
mov cx,[esi]
mov bl,[esi+2]
add cx,[xx]
jnc .npb
inc bl
.npb
call dword near [memtabler16+ebx*4]
%endmacro
; 18. Direct Indirect -- (d)
; ___________________
; Instruction: | opcode | offset |
; ~~~~~~~~~~~~~~~~~~~
; | Direct Register |
; + | offset |
; ---------------------
; | 00 | direct address |
; then:
; | 00 | (direct address) |
; + | DB |
; -------------------------------
; Address: | effective address |
%macro addr_BdB_8brni 0
mov bl,[esi]
mov ecx,[xd]
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_BdB_16brni 0
mov bl,[esi]
mov ecx,[xd]
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
call dword near [memtabler16+ebx*4]
%endmacro
; 19. Direct Indirect Long -- [d]
; ___________________
; Instruction: | opcode | offset |
; ~~~~~~~~~~~~~~~~~~~
; | Direct Register |
; + | offset |
; ---------------------
; | 00 | direct address |
; then:
; -------------------------------
; Address: | (direct address) |
%macro addr_LdL_8brni 0
mov bl,[esi]
mov ecx,[xd]
add cx,bx
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_LdL_16brni 0
mov bl,[esi]
mov ecx,[xd]
add cx,bx
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
call dword near [memtabler16+ebx*4]
%endmacro
; 22. Stack Relative -- d,s
%macro addr_dCs_8brni 0
mov bl,[esi]
mov cx,[xs]
add cx,bx
call membank0r8
%endmacro
%macro addr_dCs_16brni 0
mov bl,[esi]
mov cx,[xs]
add cx,bx
call membank0r16
%endmacro
; 23. Stack Relative Indirect Indexed -- (d,s),y (TESTED)
%macro addr_BdCsBCy_8brni 0
mov bl,[esi]
mov cx,[xs]
add cx,bx
call membank0r16
mov cx,ax
mov bl,[xdb]
add cx,[xy]
jnc .npb
inc bl
.npb
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_BdCsBCy_16brni 0
mov bl,[esi]
mov cx,[xs]
add cx,bx
call membank0r16
mov cx,ax
mov bl,[xdb]
add cx,[xy]
jnc .npb
inc bl
.npb
call dword near [memtabler16+ebx*4]
%endmacro


405
zsnes/src/cpu/addrni.inc Normal file
View File

@@ -0,0 +1,405 @@
;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.
;*******************************************************
; Address Modes
;*******************************************************
; 1. Immediate Addressing -- # - DONE IN PROGRAM
%macro addr_I_8brni 0
mov al,[esi]
%endmacro
%macro addr_I_16brni 0
mov ax,[esi]
%endmacro
; 2. Absolute -- a (TESTED)
%macro addr_a_8brni 0
mov cx,[esi]
mov bl,[xdb]
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_a_16brni 0
mov cx,[esi]
mov bl,[xdb]
call dword near [memtabler16+ebx*4]
%endmacro
; 3. Absolute Long -- al
%macro addr_al_8brni 0
mov cx,[esi]
mov bl,[esi+2]
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_al_16brni 0
mov cx,[esi]
mov bl,[esi+2]
call dword near [memtabler16+ebx*4]
%endmacro
; 4. Direct -- d (TESTED)
%macro addr_d_8brni 0
mov bl,[esi]
mov ecx,[xd]
call dword near [DPageR8]
%endmacro
%macro addr_d_16brni 0
mov bl,[esi]
mov ecx,[xd]
call dword near [DPageR16]
%endmacro
; 5. Accumulator -- A
%macro addr_A_8brni 0
mov al,[xa]
%endmacro
%macro addr_A_16brni 0
mov ax,[xa]
%endmacro
; 7. Direct Indirect Indexed -- (d),y
%macro addr_BdBCy_8brni 0
mov bl,[esi]
mov ecx,[xd]
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
add cx,[xy]
jnc .npb
inc bl
.npb
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_BdBCy_16brni 0
mov bl,[esi]
mov ecx,[xd]
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
add cx,[xy]
jnc .npb
inc bl
.npb
call dword near [memtabler16+ebx*4]
%endmacro
; 8. Direct Indirect Indexed Long -- [d],y
%macro addr_LdLCy_8brni 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
add cx,[xy]
jnc .npb
inc bl
.npb
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_LdLCy_16brni 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
add cx,[xy]
jnc .npb
inc bl
.npb
call dword near [memtabler16+ebx*4]
%endmacro
; 9. Direct Indexed Indirect -- (d,x)
%macro addr_BdCxB_8brni 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
add cx,[xx]
call membank0r16
mov cx,ax
mov bl,[xdb]
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_BdCxB_16brni 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
add cx,[xx]
call membank0r16
mov cx,ax
mov bl,[xdb]
call dword near [memtabler16+ebx*4]
%endmacro
; 10. Direct Indexed With X -- d,x
%macro addr_dCx_8brni 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
add cx,[xx]
call membank0r8
%endmacro
%macro addr_dCx_16brni 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
add cx,[xx]
call membank0r16
%endmacro
; 11. Direct Indexed With Y -- d,y
%macro addr_dCy_8brni 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
add cx,[xy]
call membank0r8
%endmacro
%macro addr_dCy_16brni 0
mov ecx,[xd]
mov bl,[esi]
add cx,bx
add cx,[xy]
call membank0r16
%endmacro
; 12. Absolute Indexed With X -- a,x
%macro addr_aCx_8brni 0
mov cx,[esi]
mov bl,[xdb]
add cx,[xx]
jnc .npb
inc bl
.npb
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_aCx_16brni 0
mov cx,[esi]
mov bl,[xdb]
add cx,[xx]
jnc .npb
inc bl
.npb
call dword near [memtabler16+ebx*4]
%endmacro
; 13. Absolute Indexed With Y -- a,y
%macro addr_aCy_8brni 0
mov cx,[esi]
mov bl,[xdb]
add cx,[xy]
jnc .npb
inc bl
.npb
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_aCy_16brni 0
mov cx,[esi]
mov bl,[xdb]
add cx,[xy]
jnc .npb
inc bl
.npb
call dword near [memtabler16+ebx*4]
%endmacro
; 14. Absolute Long Indexed With X -- al,x
%macro addr_alCx_8brni 0
mov cx,[esi]
mov bl,[esi+2]
add cx,[xx]
jnc .npb
inc bl
.npb
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_alCx_16brni 0
mov cx,[esi]
mov bl,[esi+2]
add cx,[xx]
jnc .npb
inc bl
.npb
call dword near [memtabler16+ebx*4]
%endmacro
; 18. Direct Indirect -- (d)
; ___________________
; Instruction: | opcode | offset |
; ~~~~~~~~~~~~~~~~~~~
; | Direct Register |
; + | offset |
; ---------------------
; | 00 | direct address |
; then:
; | 00 | (direct address) |
; + | DB |
; -------------------------------
; Address: | effective address |
%macro addr_BdB_8brni 0
mov bl,[esi]
mov ecx,[xd]
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_BdB_16brni 0
mov bl,[esi]
mov ecx,[xd]
call dword near [DPageR16]
mov cx,ax
mov bl,[xdb]
call dword near [memtabler16+ebx*4]
%endmacro
; 19. Direct Indirect Long -- [d]
; ___________________
; Instruction: | opcode | offset |
; ~~~~~~~~~~~~~~~~~~~
; | Direct Register |
; + | offset |
; ---------------------
; | 00 | direct address |
; then:
; -------------------------------
; Address: | (direct address) |
%macro addr_LdL_8brni 0
mov bl,[esi]
mov ecx,[xd]
add cx,bx
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_LdL_16brni 0
mov bl,[esi]
mov ecx,[xd]
add cx,bx
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
call dword near [memtabler16+ebx*4]
%endmacro
; 22. Stack Relative -- d,s
%macro addr_dCs_8brni 0
mov bl,[esi]
mov cx,[xs]
add cx,bx
call membank0r8
%endmacro
%macro addr_dCs_16brni 0
mov bl,[esi]
mov cx,[xs]
add cx,bx
call membank0r16
%endmacro
; 23. Stack Relative Indirect Indexed -- (d,s),y (TESTED)
%macro addr_BdCsBCy_8brni 0
mov bl,[esi]
mov cx,[xs]
add cx,bx
call membank0r16
mov cx,ax
mov bl,[xdb]
add cx,[xy]
jnc .npb
inc bl
.npb
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_BdCsBCy_16brni 0
mov bl,[esi]
mov cx,[xs]
add cx,bx
call membank0r16
mov cx,ax
mov bl,[xdb]
add cx,[xy]
jnc .npb
inc bl
.npb
call dword near [memtabler16+ebx*4]
%endmacro


1355
zsnes/src/cpu/dma.asm Normal file

File diff suppressed because it is too large Load Diff

3054
zsnes/src/cpu/dsp.asm Normal file

File diff suppressed because it is too large Load Diff

5698
zsnes/src/cpu/dspproc.asm Normal file

File diff suppressed because it is too large Load Diff

1995
zsnes/src/cpu/e65816.inc Normal file

File diff suppressed because it is too large Load Diff

1987
zsnes/src/cpu/e65816b.inc Normal file

File diff suppressed because it is too large Load Diff

1987
zsnes/src/cpu/e65816c.inc Normal file

File diff suppressed because it is too large Load Diff

4374
zsnes/src/cpu/execute.asm Normal file

File diff suppressed because it is too large Load Diff

524
zsnes/src/cpu/irq.asm Normal file
View File

@@ -0,0 +1,524 @@
;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 flagnz,flago,flagc
EXTSYM SfxSCMR,curnmi,execloop,initaddrl,nmiv,snesmap2
EXTSYM snesmmap,stackand,stackor,wramdata
EXTSYM xe,xirqb,xpb,xpc,xs
EXTSYM irqon,irqv
EXTSYM irqv8
EXTSYM execloopdeb
EXTSYM nmiv8
; NMI Hardware 00FFFA,B 00FFEA,B 3 -> 000108
; RES Hardware 00FFFC.D 00FFFC,D 1
; BRK Software 00FFFE,F 00FFE6,7 N/A
; IRQ Hardware 00FFFE,F 00FFEE,F 4 -> 00010C
%macro makedl 0
and dl,00111100b
test dword[flagnz],18000h
jz %%noneg
or dl,80h
%%noneg
test dword[flagnz],0FFFFh
jnz %%nozero
or dl,02h
%%nozero
test dword[flagc],0FFh
jz %%nocarry
or dl,01h
%%nocarry
test dword[flago],0FFh
jz %%nov
or dl,40h
%%nov
%endmacro
;*******************************************************
; SwitchToNMI/VIRQ Calls NMI/VIRQ
;*******************************************************
NEWSYM switchtonmi
mov byte[curnmi],1
test byte[xe],1
jne near NMIemulmode
mov ebx,esi
sub ebx,[initaddrl]
mov [xpc],bx
xor ebx,ebx
mov eax,[wramdata]
mov bx,[xs]
mov cl,[xpb]
mov [eax+ebx],cl
dec bx
and bx,word[stackand]
or bx,word[stackor]
mov cl,[xpc+1]
mov [eax+ebx],cl
dec bx
and bx,word[stackand]
or bx,word[stackor]
mov cl,[xpc]
mov [eax+ebx],cl
dec bx
and bx,word[stackand]
or bx,word[stackor]
makedl
mov [eax+ebx],dl
dec bx
and bx,word[stackand]
or bx,word[stackor]
mov [xs],bx
xor bh,bh
mov bl,byte[xirqb]
mov [xpb],bl
xor eax,eax
mov ax,[nmiv]
test byte[SfxSCMR],10h
jz .nosfxnmi
; mov ax,0108h
.nosfxnmi
mov [xpc],ax
and dl,11110011b
or dl,00000100b
test ax,8000h
jz .loweraddr
mov esi,[snesmmap+ebx*4]
mov [initaddrl],esi
add esi,eax
jmp execloop
.loweraddr
mov esi,[snesmap2+ebx*4]
mov [initaddrl],esi
add esi,eax
jmp execloop
NEWSYM NMIemulmode
mov ebx,esi
sub ebx,[initaddrl]
mov [xpc],bx
mov eax,[wramdata]
mov bx,[xs]
mov cl,[xpc+1]
mov [eax+ebx],cl
dec bx
and bx,word[stackand]
or bx,word[stackor]
mov cl,[xpc]
mov [eax+ebx],cl
dec bx
and bx,word[stackand]
or bx,word[stackor]
makedl
mov [eax+ebx],dl
dec bx
and bx,word[stackand]
or bx,word[stackor]
mov [xs],bx
xor bh,bh
mov bl,[xpb]
xor eax,eax
mov ax,[nmiv8]
mov [xpc],ax
and dl,11110011b
or dl,00000100b
test ax,8000h
jz .loweraddr
mov esi,[snesmmap+ebx*4]
mov [initaddrl],esi
add esi,eax
jmp execloop
.loweraddr
mov esi,[snesmap2+ebx*4]
mov [initaddrl],esi
add esi,eax
jmp execloop
NEWSYM switchtovirq
mov byte[irqon],80h
test byte[xe],1
jne near IRQemulmode
mov ebx,esi
sub ebx,[initaddrl]
mov [xpc],bx
xor ebx,ebx
mov eax,[wramdata]
mov bx,[xs]
mov cl,[xpb]
mov [eax+ebx],cl
dec bx
and bx,word[stackand]
or bx,word[stackor]
mov cl,[xpc+1]
mov [eax+ebx],cl
dec bx
and bx,word[stackand]
or bx,word[stackor]
mov cl,[xpc]
mov [eax+ebx],cl
dec bx
and bx,word[stackand]
or bx,word[stackor]
makedl
mov [eax+ebx],dl
dec bx
and bx,word[stackand]
or bx,word[stackor]
mov [xs],bx
xor bh,bh
mov bl,byte[xirqb]
mov [xpb],bl
xor eax,eax
mov ax,[irqv]
; test byte[SfxSCMR],10h
; jz .nosfxnmi
; mov ax,010Ch
;.nosfxnmi
mov [xpc],ax
and dl,11110011b
or dl,00000100b
test ax,8000h
jz .loweraddr
mov esi,[snesmmap+ebx*4]
mov [initaddrl],esi
add esi,eax
jmp execloop
.loweraddr
mov esi,[snesmap2+ebx*4]
mov [initaddrl],esi
add esi,eax
jmp execloop
NEWSYM switchtovirqret
mov byte[irqon],80h
test byte[xe],1
jne near IRQemulmode
mov ebx,esi
sub ebx,[initaddrl]
mov [xpc],bx
xor ebx,ebx
mov eax,[wramdata]
mov bx,[xs]
mov cl,[xpb]
mov [eax+ebx],cl
dec bx
and bx,word[stackand]
or bx,word[stackor]
mov cl,[xpc+1]
mov [eax+ebx],cl
dec bx
and bx,word[stackand]
or bx,word[stackor]
mov cl,[xpc]
mov [eax+ebx],cl
dec bx
and bx,word[stackand]
or bx,word[stackor]
makedl
mov [eax+ebx],dl
dec bx
and bx,word[stackand]
or bx,word[stackor]
mov [xs],bx
xor bh,bh
mov bl,byte[xirqb]
mov [xpb],bl
xor eax,eax
mov ax,[irqv]
; test byte[SfxSCMR],10h
; jz .nosfxnmi
; mov ax,010Ch
;.nosfxnmi
mov [xpc],ax
and dl,11110011b
or dl,00000100b
test ax,8000h
jz .loweraddr
mov esi,[snesmmap+ebx*4]
mov [initaddrl],esi
add esi,eax
ret
.loweraddr
mov esi,[snesmap2+ebx*4]
mov [initaddrl],esi
add esi,eax
ret
NEWSYM IRQemulmode
mov ebx,esi
sub ebx,[initaddrl]
mov [xpc],bx
mov eax,[wramdata]
mov bx,[xs]
mov cl,[xpc+1]
mov [eax+ebx],cl
dec bx
and bx,word[stackand]
or bx,word[stackor]
mov cl,[xpc]
mov [eax+ebx],cl
dec bx
and bx,word[stackand]
or bx,word[stackor]
makedl
mov [eax+ebx],dl
dec bx
and bx,word[stackand]
or bx,word[stackor]
mov [xs],bx
xor bh,bh
mov bl,[xpb]
xor eax,eax
mov ax,[irqv8]
mov [xpc],ax
and dl,11110011b
or dl,00000100b
test ax,8000h
jz .loweraddr
mov esi,[snesmmap+ebx*4]
mov [initaddrl],esi
add esi,eax
jmp execloop
.loweraddr
mov esi,[snesmap2+ebx*4]
mov [initaddrl],esi
add esi,eax
jmp execloop
NEWSYM switchtovirqdeb
mov byte[irqon],80h
test byte[xe],1
jne near IRQemulmodedeb
mov ebx,esi
sub ebx,[initaddrl]
mov [xpc],bx
xor ebx,ebx
mov eax,[wramdata]
mov bx,[xs]
mov cl,[xpb]
mov [eax+ebx],cl
dec bx
and bx,word[stackand]
or bx,word[stackor]
mov cl,[xpc+1]
mov [eax+ebx],cl
dec bx
and bx,word[stackand]
or bx,word[stackor]
mov cl,[xpc]
mov [eax+ebx],cl
dec bx
and bx,word[stackand]
or bx,word[stackor]
makedl
mov [eax+ebx],dl
dec bx
and bx,word[stackand]
or bx,word[stackor]
mov [xs],bx
xor bh,bh
mov bl,byte[xirqb]
mov [xpb],bl
xor eax,eax
mov ax,[irqv]
; test byte[SfxSCMR],10h
; jz .nosfxnmi
; mov ax,010Ch
;.nosfxnmi
mov [xpc],ax
and dl,11110011b
or dl,00000100b
test ax,8000h
jz .loweraddr
mov esi,[snesmmap+ebx*4]
mov [initaddrl],esi
add esi,eax
jmp execloopdeb
.loweraddr
mov esi,[snesmap2+ebx*4]
mov [initaddrl],esi
add esi,eax
jmp execloopdeb
NEWSYM IRQemulmodedeb
mov ebx,esi
sub ebx,[initaddrl]
mov [xpc],bx
mov eax,[wramdata]
mov bx,[xs]
mov cl,[xpc+1]
mov [eax+ebx],cl
dec bx
and bx,word[stackand]
or bx,word[stackor]
mov cl,[xpc]
mov [eax+ebx],cl
dec bx
and bx,word[stackand]
or bx,word[stackor]
makedl
mov [eax+ebx],dl
dec bx
and bx,word[stackand]
or bx,word[stackor]
mov [xs],bx
xor bh,bh
mov bl,[xpb]
xor eax,eax
mov ax,[irqv8]
mov [xpc],ax
and dl,11110011b
or dl,00000100b
test ax,8000h
jz .loweraddr
mov esi,[snesmmap+ebx*4]
mov [initaddrl],esi
add esi,eax
jmp execloopdeb
.loweraddr
mov esi,[snesmap2+ebx*4]
mov [initaddrl],esi
add esi,eax
jmp execloopdeb
NEWSYM switchtonmideb
mov byte[curnmi],1
test byte[xe],1
jne near NMIemulmodedeb
mov ebx,esi
sub ebx,[initaddrl]
mov [xpc],bx
xor ebx,ebx
mov eax,[wramdata]
mov bx,[xs]
mov cl,[xpb]
mov [eax+ebx],cl
dec bx
and bx,word[stackand]
or bx,word[stackor]
mov cl,[xpc+1]
mov [eax+ebx],cl
dec bx
and bx,word[stackand]
or bx,word[stackor]
mov cl,[xpc]
mov [eax+ebx],cl
dec bx
and bx,word[stackand]
or bx,word[stackor]
makedl
mov [eax+ebx],dl
dec bx
and bx,word[stackand]
or bx,word[stackor]
mov [xs],bx
xor bh,bh
mov bl,byte[xirqb]
mov [xpb],bl
xor eax,eax
mov ax,[nmiv]
test byte[SfxSCMR],10h
jz .nosfxnmi
; mov ax,0108h
.nosfxnmi
mov [xpc],ax
and dl,11110011b
or dl,00000100b
test ax,8000h
jz .loweraddr
mov esi,[snesmmap+ebx*4]
mov [initaddrl],esi
add esi,eax
jmp execloopdeb
.loweraddr
mov esi,[snesmap2+ebx*4]
mov [initaddrl],esi
add esi,eax
jmp execloopdeb
NEWSYM NMIemulmodedeb
mov ebx,esi
sub ebx,[initaddrl]
mov [xpc],bx
mov eax,[wramdata]
mov bx,[xs]
mov cl,[xpc+1]
mov [eax+ebx],cl
dec bx
and bx,word[stackand]
or bx,word[stackor]
mov cl,[xpc]
mov [eax+ebx],cl
dec bx
and bx,word[stackand]
or bx,word[stackor]
makedl
mov [eax+ebx],dl
dec bx
and bx,word[stackand]
or bx,word[stackor]
mov [xs],bx
xor bh,bh
mov bl,[xpb]
xor eax,eax
mov ax,[nmiv8]
mov [xpc],ax
and dl,11110011b
or dl,00000100b
test ax,8000h
jz .loweraddr
mov esi,[snesmmap+ebx*4]
mov [initaddrl],esi
add esi,eax
jmp execloopdeb
.loweraddr
mov esi,[snesmap2+ebx*4]
mov [initaddrl],esi
add esi,eax
jmp execloopdeb


4406
zsnes/src/cpu/memory.asm Normal file

File diff suppressed because it is too large Load Diff

1099
zsnes/src/cpu/regs.inc Normal file

File diff suppressed because it is too large Load Diff

101
zsnes/src/cpu/regs.mac Normal file
View File

@@ -0,0 +1,101 @@
;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.
;*******************************************************
; InitReg Initializes Registers
;*******************************************************
%macro setreg 2
mov edi,%1
add edi,[regptr]
mov eax,%2
mov [edi],eax
%endmacro
;*******************************************************
; Registers Note : Remember to restore AH, ECX, & DX
;*******************************************************
%macro checkmultchange 0
; execute multiplication
cmp byte[multchange],0
je .nomult
push edx
push eax
xor bh,bh
mov bl,[mode7B+1]
mov ax,[mode7A]
test bl,80h
jz .noneg
mov bh,0FFh
.noneg
imul bx
mov [compmult],ax
mov [compmult+2],dl
pop eax
pop edx
mov byte[multchange],0
.nomult
%endmacro
%macro mouse4016doxA 2
cmp byte[JoyAPos],%1
jne .nx7
mov bx,[mousexpos]
shr bx,%2
and bx,1
mov al,bl
.nx7
%endmacro
%macro mouse4016doyA 2
cmp byte[JoyAPos],%1
jne .ny7
mov bx,[mouseypos]
shr bx,%2
and bx,1
mov al,bl
.ny7
%endmacro
%macro mouse4017dox 2
cmp byte[JoyBPos],%1
jne .nx7
mov bx,[mousexpos]
shr bx,%2
and bx,1
mov al,bl
.nx7
%endmacro
%macro mouse4017doy 2
cmp byte[JoyBPos],%1
jne .ny7
mov bx,[mouseypos]
shr bx,%2
and bx,1
mov al,bl
.ny7
%endmacro


1772
zsnes/src/cpu/regsw.inc Normal file

File diff suppressed because it is too large Load Diff

52
zsnes/src/cpu/regsw.mac Normal file
View File

@@ -0,0 +1,52 @@
;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.
EXTSYM tableadc
;*******************************************************
; InitRegW Initializes Write Registers
;*******************************************************
%macro reenablespc 0
cmp dword[cycpbl],1000000h
jb %%enspc
mov dword[cycpbl],0
test byte[curexecstate],02h
jnz %%enspc
or byte[curexecstate],02h
push ebx
xor ebx,ebx
mov bl,dl
mov edi,[tableadc+ebx*4]
pop ebx
%%enspc
%endmacro
%macro setregw 2
mov edi,%1
add edi,[regptw]
mov eax,%2
mov [edi],eax
%endmacro


1574
zsnes/src/cpu/s65816d.inc Normal file

File diff suppressed because it is too large Load Diff

812
zsnes/src/cpu/saddress.inc Normal file
View File

@@ -0,0 +1,812 @@
;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.
EXTSYM SA1DPageR8,SA1DPageR16,SA1DPageW8,SA1DPageW16
;*******************************************************
; Address Modes
;*******************************************************
; 1. Immediate Addressing -- # - DONE IN PROGRAM
%macro addr_I_8br 0
mov al,[esi]
inc esi
%endmacro
%macro addr_I_16br 0
mov eax,[esi]
add esi,2
%endmacro
; 2. Absolute -- a (TESTED)
%macro addr_a_8br 0
mov cx,[esi]
mov bl,[SA1xdb]
add esi,2
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_a_16br 0
mov cx,[esi]
mov bl,[SA1xdb]
add esi,2
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_a_8bw 0
mov cx,[esi]
mov bl,[SA1xdb]
add esi,2
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_a_16bw 0
mov cx,[esi]
mov bl,[SA1xdb]
add esi,2
call dword near [memtablew16+ebx*4]
%endmacro
; 3. Absolute Long -- al
%macro addr_al_8br 0
mov cx,[esi]
mov bl,[esi+2]
add esi,3
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_al_16br 0
mov cx,[esi]
mov bl,[esi+2]
add esi,3
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_al_8bw 0
mov cx,[esi]
mov bl,[esi+2]
add esi,3
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_al_16bw 0
mov cx,[esi]
mov bl,[esi+2]
add esi,3
call dword near [memtablew16+ebx*4]
%endmacro
; 4. Direct -- d (TESTED)
%macro addr_d_8br 0
mov bl,[esi]
mov ecx,[SA1xd]
inc esi
call dword near [SA1DPageR8]
%endmacro
%macro addr_d_16br 0
mov bl,[esi]
mov ecx,[SA1xd]
inc esi
call dword near [SA1DPageR16]
%endmacro
%macro addr_d_8bw 0
mov bl,[esi]
mov ecx,[SA1xd]
inc esi
call dword near [SA1DPageW8]
%endmacro
%macro addr_d_16bw 0
mov bl,[esi]
mov ecx,[SA1xd]
inc esi
call dword near [SA1DPageW16]
%endmacro
; 5. Accumulator -- A
%macro addr_A_8br 0
mov al,[SA1xa]
%endmacro
%macro addr_A_16br 0
mov eax,[SA1xa]
%endmacro
%macro addr_A_8bw 0
mov [SA1xa],al
%endmacro
%macro addr_A_16bw 0
mov [SA1xa],ax
%endmacro
; 7. Direct Indirect Indexed -- (d),y
%macro addr_BdBCy_8br 0
mov bl,[esi]
mov ecx,[SA1xd]
inc esi
call dword near [SA1DPageR16]
mov cx,ax
mov bl,[SA1xdb]
add cx,[SA1xy]
jnc .np
inc bl
.np
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_BdBCy_16br 0
mov bl,[esi]
mov ecx,[SA1xd]
inc esi
call dword near [SA1DPageR16]
mov cx,ax
mov bl,[SA1xdb]
add cx,[SA1xy]
jnc .np
inc bl
.np
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_BdBCy_8bw 0
push ax
mov bl,[esi]
mov ecx,[SA1xd]
inc esi
call dword near [SA1DPageR16]
mov cx,ax
mov bl,[SA1xdb]
add cx,[SA1xy]
jnc .np
inc bl
.np
pop ax
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_BdBCy_16bw 0
push ax
mov bl,[esi]
mov ecx,[SA1xd]
inc esi
call dword near [SA1DPageR16]
mov cx,ax
mov bl,[SA1xdb]
add cx,[SA1xy]
jnc .np
inc bl
.np
pop ax
call dword near [memtablew16+ebx*4]
%endmacro
; 8. Direct Indirect Indexed Long -- [d],y
%macro addr_LdLCy_8br 0
mov ecx,[SA1xd]
mov bl,[esi]
add cx,bx
inc esi
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
add cx,[SA1xy]
jnc .np
inc bl
.np
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_LdLCy_16br 0
mov ecx,[SA1xd]
mov bl,[esi]
add cx,bx
inc esi
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
add cx,[SA1xy]
jnc .np
inc bl
.np
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_LdLCy_8bw 0
push ax
mov ecx,[SA1xd]
mov bl,[esi]
add cx,bx
inc esi
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
add cx,[SA1xy]
pop ax
jnc .np
inc bl
.np
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_LdLCy_16bw 0
push ax
mov ecx,[SA1xd]
mov bl,[esi]
add cx,bx
inc esi
push cx
call membank0r16
pop cx
add cx,2
xor bl,bl
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
add cx,[SA1xy]
pop ax
jnc .np
inc bl
.np
call dword near [memtablew16+ebx*4]
%endmacro
; 9. Direct Indexed Indirect -- (d,x)
%macro addr_BdCxB_8br 0
mov ecx,[SA1xd]
mov bl,[esi]
add cx,bx
inc esi
add cx,[SA1xx]
call membank0r16
mov cx,ax
mov bl,[SA1xdb]
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_BdCxB_16br 0
mov ecx,[SA1xd]
mov bl,[esi]
add cx,bx
inc esi
add cx,[SA1xx]
call membank0r16
mov cx,ax
mov bl,[SA1xdb]
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_BdCxB_8bw 0
push ax
mov ecx,[SA1xd]
mov bl,[esi]
add cx,bx
inc esi
add cx,[SA1xx]
call membank0r16
mov cx,ax
mov bl,[SA1xdb]
pop ax
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_BdCxB_16bw 0
push ax
mov ecx,[SA1xd]
mov bl,[esi]
add cx,bx
inc esi
add cx,[SA1xx]
call membank0r16
mov cx,ax
mov bl,[SA1xdb]
pop ax
call dword near [memtablew16+ebx*4]
%endmacro
; 10. Direct Indexed With X -- d,x
%macro addr_dCx_8br 0
mov ecx,[SA1xd]
mov bl,[esi]
add cx,bx
inc esi
add cx,[SA1xx]
call membank0r8
%endmacro
%macro addr_dCx_16br 0
mov ecx,[SA1xd]
mov bl,[esi]
add cx,bx
inc esi
add cx,[SA1xx]
call membank0r16
%endmacro
%macro addr_dCx_8bw 0
mov ecx,[SA1xd]
mov bl,[esi]
add cx,bx
inc esi
add cx,[SA1xx]
call membank0w8
%endmacro
%macro addr_dCx_16bw 0
mov ecx,[SA1xd]
mov bl,[esi]
add cx,bx
inc esi
add cx,[SA1xx]
call membank0w16
%endmacro
; 11. Direct Indexed With Y -- d,y
%macro addr_dCy_8br 0
mov ecx,[SA1xd]
mov bl,[esi]
add cx,bx
inc esi
add cx,[SA1xy]
call membank0r8
%endmacro
%macro addr_dCy_16br 0
mov ecx,[SA1xd]
mov bl,[esi]
add cx,bx
inc esi
add cx,[SA1xy]
call membank0r16
%endmacro
%macro addr_dCy_8bw 0
mov ecx,[SA1xd]
mov bl,[esi]
add cx,bx
inc esi
add cx,[SA1xy]
call membank0w8
%endmacro
%macro addr_dCy_16bw 0
mov ecx,[SA1xd]
mov bl,[esi]
add cx,bx
inc esi
add cx,[SA1xy]
call membank0w16
%endmacro
; 12. Absolute Indexed With X -- a,x
%macro addr_aCx_8br 0
mov cx,[esi]
mov bl,[SA1xdb]
add esi,2
add cx,[SA1xx]
jnc .np
inc bl
.np
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_aCx_16br 0
mov cx,[esi]
mov bl,[SA1xdb]
add esi,2
add cx,[SA1xx]
jnc .np
inc bl
.np
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_aCx_8bw 0
mov cx,[esi]
mov bl,[SA1xdb]
add esi,2
add cx,[SA1xx]
jnc .np
inc bl
.np
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_aCx_16bw 0
mov cx,[esi]
mov bl,[SA1xdb]
add esi,2
add cx,[SA1xx]
jnc .np
inc bl
.np
call dword near [memtablew16+ebx*4]
%endmacro
; 13. Absolute Indexed With Y -- a,y
%macro addr_aCy_8br 0
mov cx,[esi]
mov bl,[SA1xdb]
add esi,2
add cx,[SA1xy]
jnc .np
inc bl
.np
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_aCy_16br 0
mov cx,[esi]
mov bl,[SA1xdb]
add esi,2
add cx,[SA1xy]
jnc .np
inc bl
.np
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_aCy_8bw 0
mov cx,[esi]
mov bl,[SA1xdb]
add esi,2
add cx,[SA1xy]
jnc .np
inc bl
.np
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_aCy_16bw 0
mov cx,[esi]
mov bl,[SA1xdb]
add esi,2
add cx,[SA1xy]
jnc .np
inc bl
.np
call dword near [memtablew16+ebx*4]
%endmacro
; 14. Absolute Long Indexed With X -- al,x
%macro addr_alCx_8br 0
mov cx,[esi]
mov bl,[esi+2]
add esi,3
add cx,[SA1xx]
jnc .np
inc bl
.np
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_alCx_16br 0
mov cx,[esi]
mov bl,[esi+2]
add esi,3
add cx,[SA1xx]
jnc .np
inc bl
.np
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_alCx_8bw 0
mov cx,[esi]
mov bl,[esi+2]
add esi,3
add cx,[SA1xx]
jnc .np
inc bl
.np
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_alCx_16bw 0
mov cx,[esi]
mov bl,[esi+2]
add esi,3
add cx,[SA1xx]
jnc .np
inc bl
.np
call dword near [memtablew16+ebx*4]
%endmacro
; 18. Direct Indirect -- (d)
; ___________________
; Instruction: | opcode | offset |
; ~~~~~~~~~~~~~~~~~~~
; | Direct Register |
; + | offset |
; ---------------------
; | 00 | direct address |
; then:
; | 00 | (direct address) |
; + | DB |
; -------------------------------
; Address: | effective address |
%macro addr_BdB_8br 0
mov bl,[esi]
mov ecx,[SA1xd]
inc esi
call dword near [SA1DPageR16]
mov cx,ax
mov bl,[SA1xdb]
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_BdB_16br 0
mov bl,[esi]
mov ecx,[SA1xd]
inc esi
call dword near [SA1DPageR16]
mov cx,ax
mov bl,[SA1xdb]
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_BdB_8bw 0
push ax
mov bl,[esi]
mov ecx,[SA1xd]
inc esi
call dword near [SA1DPageR16]
mov cx,ax
mov bl,[SA1xdb]
pop ax
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_BdB_16bw 0
push ax
mov bl,[esi]
mov ecx,[SA1xd]
inc esi
call dword near [SA1DPageR16]
mov cx,ax
mov bl,[SA1xdb]
pop ax
call dword near [memtablew16+ebx*4]
%endmacro
; 19. Direct Indirect Long -- [d]
; ___________________
; Instruction: | opcode | offset |
; ~~~~~~~~~~~~~~~~~~~
; | Direct Register |
; + | offset |
; ---------------------
; | 00 | direct address |
; then:
; -------------------------------
; Address: | (direct address) |
%macro addr_LdL_8br 0
mov bl,[esi]
mov ecx,[SA1xd]
inc esi
add cx,bx
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_LdL_16br 0
mov bl,[esi]
mov ecx,[SA1xd]
inc esi
add cx,bx
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_LdL_8bw 0
push ax
mov bl,[esi]
mov ecx,[SA1xd]
inc esi
add cx,bx
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
pop ax
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_LdL_16bw 0
push ax
mov bl,[esi]
mov ecx,[SA1xd]
inc esi
add cx,bx
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
pop ax
call dword near [memtablew16+ebx*4]
%endmacro
; 22. Stack Relative -- d,s
%macro addr_dCs_8br 0
mov bl,[esi]
mov cx,[SA1xs]
inc esi
add cx,bx
call membank0r8
%endmacro
%macro addr_dCs_16br 0
mov bl,[esi]
mov cx,[SA1xs]
inc esi
add cx,bx
call membank0r16
%endmacro
%macro addr_dCs_8bw 0
mov bl,[esi]
mov cx,[SA1xs]
inc esi
add cx,bx
call membank0w8
%endmacro
%macro addr_dCs_16bw 0
mov bl,[esi]
mov cx,[SA1xs]
inc esi
add cx,bx
call membank0w16
%endmacro
; 23. Stack Relative Indirect Indexed -- (d,s),y (TESTED)
%macro addr_BdCsBCy_8br 0
mov bl,[esi]
mov cx,[SA1xs]
inc esi
add cx,bx
call membank0r16
mov cx,ax
mov bl,[SA1xdb]
add cx,[SA1xy]
jnc .np
inc bl
.np
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_BdCsBCy_16br 0
mov bl,[esi]
mov cx,[SA1xs]
inc esi
add cx,bx
call membank0r16
mov cx,ax
mov bl,[SA1xdb]
add cx,[SA1xy]
jnc .np
inc bl
.np
call dword near [memtabler16+ebx*4]
%endmacro
%macro addr_BdCsBCy_8bw 0
push ax
mov bl,[esi]
mov cx,[SA1xs]
inc esi
add cx,bx
call membank0r16
mov cx,ax
mov bl,[SA1xdb]
pop ax
add cx,[SA1xy]
jnc .np
inc bl
.np
call dword near [memtablew8+ebx*4]
%endmacro
%macro addr_BdCsBCy_16bw 0
push ax
mov bl,[esi]
mov cx,[SA1xs]
inc esi
add cx,bx
call membank0r16
mov cx,ax
mov bl,[SA1xdb]
pop ax
add cx,[SA1xy]
jnc .np
inc bl
.np
call dword near [memtablew16+ebx*4]
%endmacro


404
zsnes/src/cpu/saddrni.inc Normal file
View File

@@ -0,0 +1,404 @@
;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.
;*******************************************************
; Address Modes
;*******************************************************
; 1. Immediate Addressing -- # - DONE IN PROGRAM
%macro addr_I_8brni 0
mov al,[esi]
%endmacro
%macro addr_I_16brni 0
mov ax,[esi]
%endmacro
; 2. Absolute -- a (TESTED)
%macro addr_a_8brni 0
mov cx,[esi]
mov bl,[SA1xdb]
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_a_16brni 0
mov cx,[esi]
mov bl,[SA1xdb]
call dword near [memtabler16+ebx*4]
%endmacro
; 3. Absolute Long -- al
%macro addr_al_8brni 0
mov cx,[esi]
mov bl,[esi+2]
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_al_16brni 0
mov cx,[esi]
mov bl,[esi+2]
call dword near [memtabler16+ebx*4]
%endmacro
; 4. Direct -- d (TESTED)
%macro addr_d_8brni 0
mov bl,[esi]
mov ecx,[SA1xd]
call dword near [SA1DPageR8]
%endmacro
%macro addr_d_16brni 0
mov bl,[esi]
mov ecx,[SA1xd]
call dword near [SA1DPageR16]
%endmacro
; 5. Accumulator -- A
%macro addr_A_8brni 0
mov al,[SA1xa]
%endmacro
%macro addr_A_16brni 0
mov ax,[SA1xa]
%endmacro
; 7. Direct Indirect Indexed -- (d),y
%macro addr_BdBCy_8brni 0
mov bl,[esi]
mov ecx,[SA1xd]
call dword near [SA1DPageR16]
mov cx,ax
mov bl,[SA1xdb]
add cx,[SA1xy]
jnc .npb
inc bl
.npb
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_BdBCy_16brni 0
mov bl,[esi]
mov ecx,[SA1xd]
call dword near [SA1DPageR16]
mov cx,ax
mov bl,[SA1xdb]
add cx,[SA1xy]
jnc .npb
inc bl
.npb
call dword near [memtabler16+ebx*4]
%endmacro
; 8. Direct Indirect Indexed Long -- [d],y
%macro addr_LdLCy_8brni 0
mov ecx,[SA1xd]
mov bl,[esi]
add cx,bx
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
add cx,[SA1xy]
jnc .npb
inc bl
.npb
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_LdLCy_16brni 0
mov ecx,[SA1xd]
mov bl,[esi]
add cx,bx
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
add cx,[SA1xy]
jnc .npb
inc bl
.npb
call dword near [memtabler16+ebx*4]
%endmacro
; 9. Direct Indexed Indirect -- (d,x)
%macro addr_BdCxB_8brni 0
mov ecx,[SA1xd]
mov bl,[esi]
add cx,bx
add cx,[SA1xx]
call membank0r16
mov cx,ax
mov bl,[SA1xdb]
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_BdCxB_16brni 0
mov ecx,[SA1xd]
mov bl,[esi]
add cx,bx
add cx,[SA1xx]
call membank0r16
mov cx,ax
mov bl,[SA1xdb]
call dword near [memtabler16+ebx*4]
%endmacro
; 10. Direct Indexed With X -- d,x
%macro addr_dCx_8brni 0
mov ecx,[SA1xd]
mov bl,[esi]
add cx,bx
add cx,[SA1xx]
call membank0r8
%endmacro
%macro addr_dCx_16brni 0
mov ecx,[SA1xd]
mov bl,[esi]
add cx,bx
add cx,[SA1xx]
call membank0r16
%endmacro
; 11. Direct Indexed With Y -- d,y
%macro addr_dCy_8brni 0
mov ecx,[SA1xd]
mov bl,[esi]
add cx,bx
add cx,[SA1xy]
call membank0r8
%endmacro
%macro addr_dCy_16brni 0
mov ecx,[SA1xd]
mov bl,[esi]
add cx,bx
add cx,[SA1xy]
call membank0r16
%endmacro
; 12. Absolute Indexed With X -- a,x
%macro addr_aCx_8brni 0
mov cx,[esi]
mov bl,[SA1xdb]
add cx,[SA1xx]
jnc .npb
inc bl
.npb
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_aCx_16brni 0
mov cx,[esi]
mov bl,[SA1xdb]
add cx,[SA1xx]
jnc .npb
inc bl
.npb
call dword near [memtabler16+ebx*4]
%endmacro
; 13. Absolute Indexed With Y -- a,y
%macro addr_aCy_8brni 0
mov cx,[esi]
mov bl,[SA1xdb]
add cx,[SA1xy]
jnc .npb
inc bl
.npb
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_aCy_16brni 0
mov cx,[esi]
mov bl,[SA1xdb]
add cx,[SA1xy]
jnc .npb
inc bl
.npb
call dword near [memtabler16+ebx*4]
%endmacro
; 14. Absolute Long Indexed With X -- al,x
%macro addr_alCx_8brni 0
mov cx,[esi]
mov bl,[esi+2]
add cx,[SA1xx]
jnc .npb
inc bl
.npb
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_alCx_16brni 0
mov cx,[esi]
mov bl,[esi+2]
add cx,[SA1xx]
jnc .npb
inc bl
.npb
call dword near [memtabler16+ebx*4]
%endmacro
; 18. Direct Indirect -- (d)
; ___________________
; Instruction: | opcode | offset |
; ~~~~~~~~~~~~~~~~~~~
; | Direct Register |
; + | offset |
; ---------------------
; | 00 | direct address |
; then:
; | 00 | (direct address) |
; + | DB |
; -------------------------------
; Address: | effective address |
%macro addr_BdB_8brni 0
mov bl,[esi]
mov ecx,[SA1xd]
call dword near [SA1DPageR16]
mov cx,ax
mov bl,[SA1xdb]
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_BdB_16brni 0
mov bl,[esi]
mov ecx,[SA1xd]
call dword near [SA1DPageR16]
mov cx,ax
mov bl,[SA1xdb]
call dword near [memtabler16+ebx*4]
%endmacro
; 19. Direct Indirect Long -- [d]
; ___________________
; Instruction: | opcode | offset |
; ~~~~~~~~~~~~~~~~~~~
; | Direct Register |
; + | offset |
; ---------------------
; | 00 | direct address |
; then:
; -------------------------------
; Address: | (direct address) |
%macro addr_LdL_8brni 0
mov bl,[esi]
mov ecx,[SA1xd]
add cx,bx
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_LdL_16brni 0
mov bl,[esi]
mov ecx,[SA1xd]
add cx,bx
push cx
call membank0r16
pop cx
add cx,2
push ax
call membank0r8
mov bl,al
pop ax
mov cx,ax
call dword near [memtabler16+ebx*4]
%endmacro
; 22. Stack Relative -- d,s
%macro addr_dCs_8brni 0
mov bl,[esi]
mov cx,[SA1xs]
add cx,bx
call membank0r8
%endmacro
%macro addr_dCs_16brni 0
mov bl,[esi]
mov cx,[SA1xs]
add cx,bx
call membank0r16
%endmacro
; 23. Stack Relative Indirect Indexed -- (d,s),y (TESTED)
%macro addr_BdCsBCy_8brni 0
mov bl,[esi]
mov cx,[SA1xs]
add cx,bx
call membank0r16
mov cx,ax
mov bl,[SA1xdb]
add cx,[SA1xy]
jnc .npb
inc bl
.npb
call dword near [memtabler8+ebx*4]
%endmacro
%macro addr_BdCsBCy_16brni 0
mov bl,[esi]
mov cx,[SA1xs]
add cx,bx
call membank0r16
mov cx,ax
mov bl,[SA1xdb]
add cx,[SA1xy]
jnc .npb
inc bl
.npb
call dword near [memtabler16+ebx*4]
%endmacro


1990
zsnes/src/cpu/se65816.inc Normal file

File diff suppressed because it is too large Load Diff

2695
zsnes/src/cpu/spc700.asm Normal file

File diff suppressed because it is too large Load Diff

97
zsnes/src/cpu/spcaddr.inc Normal file
View File

@@ -0,0 +1,97 @@
;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.
; A,DP addressing mode
%macro SPCaddr_DP 0
mov bl,[ebp]
add ebx,[spcRamDP]
inc ebp
ReadByte
%endmacro
%macro SPCaddr_DP_X 0
mov bl,[ebp]
add bl,[spcX]
add ebx,[spcRamDP]
inc ebp
ReadByte
%endmacro
%macro SPCaddr_LABS 0
mov bx,[ebp]
add ebx,spcRam
ReadByte
add ebp,2
%endmacro
%macro SPCaddr_LABS_X 0
mov bl,[spcX]
add bx,[ebp]
add ebp,2
add ebx,spcRam
ReadByte
%endmacro
; A,(X)
%macro SPCaddr__X_ 0
mov bl,[spcX]
add ebx,[spcRamDP]
ReadByte
%endmacro
; A,labs+Y
%macro SPCaddr_LABS_Y 0
mov bl,[spcY]
add bx,[ebp]
add ebp,2
add ebx,spcRam
ReadByte
%endmacro
; A,(DP,X)
%macro SPCaddr_bDP_Xb 0
mov bl,[ebp]
add bl,[spcX]
xor eax,eax
add ebx,[spcRamDP]
inc ebp
mov ax, word [ebx]
mov ebx,eax
add ebx,spcRam
ReadByte
%endmacro
%macro SPCaddr_bDPb_Y 0
mov bl,[ebp]
xor eax,eax
add ebx,[spcRamDP]
inc ebp
mov ax,[ebx]
add ax,[spcY]
mov ebx,eax
add ebx,spcRam
ReadByte
%endmacro


168
zsnes/src/cpu/spcdef.inc Normal file
View File

@@ -0,0 +1,168 @@
;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.
; move al at address ebx
; branch instructions
%macro spcbrancher 0
inc ebp
ret
.branch
movsx ebx,byte [ebp]
inc ebp
add ebp,ebx
ret
%endmacro
; tcall instruction
%macro spctcall 1
mov ebx,ebp
sub ebx,spcRam
mov eax,[spcS]
mov [spcRam+eax],bh
dec byte [spcS]
mov eax,[spcS]
mov [spcRam+eax],bl
dec byte [spcS]
mov bx,[spcextraram+%1]
test byte[spcRam+0F1h],80h
jnz %%finished
mov bx,[spcRam+0FFC0h+%1]
%%finished
add ebx,spcRam
mov ebp,ebx
ret
%endmacro
; SET1 instruction
%macro set1 1
mov bl,[ebp]
add ebx,[spcRamDP]
inc ebp
push ebx
ReadByte
pop ebx
or al,%1
WriteByte
ret
%endmacro
; CLR1 instruction
%macro clr1 1
mov bl,[ebp]
add ebx,[spcRamDP]
inc ebp
push ebx
ReadByte
pop ebx
and al,%1
WriteByte
ret
%endmacro
; BBS instruction
%macro bbs 1
mov bl,[ebp]
add ebx,[spcRamDP]
ReadByte
test al,%1
jnz .dp0jump
add ebp,2
ret
.dp0jump
movsx ebx,byte [ebp+1]
add ebp,ebx
add ebp,2
ret
%endmacro
; BBC instruction
%macro bbc 1
mov bl,[ebp]
add ebx,[spcRamDP]
ReadByte
test al,%1
jz .dp0jump
add ebp,2
ret
.dp0jump
movsx ebx,byte [ebp+1]
add ebp,ebx
add ebp,2
ret
%endmacro
; OR A, instruction
%macro SPC_OR_A 0
or byte [spcA], al
mov al,[spcA]
mov [spcNZ],al
ret
%endmacro
; AND A, instruction
%macro SPC_AND_A 0
and byte [spcA], al
mov al,[spcA]
mov [spcNZ],al
ret
%endmacro
; EOR A, instruction
%macro SPC_EOR_A 0
xor byte [spcA], al
mov al,[spcA]
mov [spcNZ],al
ret
%endmacro
; CMP A, instruction
%macro SPC_CMP_A 0
cmp byte [spcA], al
cmc
SPCSetFlagnzc
%endmacro
%macro SPC_ADC_A 0
mov cl,[spcP]
shr cl,1
adc byte [spcA], al
SPCSetFlagnvhzc
%endmacro
%macro SPC_SBC_A 0
mov cl,[spcP]
xor cl,1
shr cl,1
sbb byte [spcA], al
cmc
SPCSetFlagnvhzc
%endmacro
%macro SPC_MOV_A 0
mov byte [spcA], al
mov [spcNZ],al
ret
%endmacro


699
zsnes/src/cpu/stable.asm Normal file
View File

@@ -0,0 +1,699 @@
;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
%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
mov dword[edi+0B7h*4],SA1COpB7m8
mov dword[edi+0B8h*4],SA1COpB8
mov dword[edi+0B9h*4],SA1COpB9m8
mov dword[edi+0BAh*4],SA1COpBAx8
mov dword[edi+0BBh*4],SA1COpBBx8
mov dword[edi+0BCh*4],SA1COpBCx8
mov dword[edi+0BDh*4],SA1COpBDm8
mov dword[edi+0BEh*4],SA1COpBEx8
mov dword[edi+0BFh*4],SA1COpBFm8
mov dword[edi+0C0h*4],SA1COpC0x8
mov dword[edi+0C1h*4],SA1COpC1m8
mov dword[edi+0C2h*4],SA1COpC2
mov dword[edi+0C3h*4],SA1COpC3m8
mov dword[edi+0C4h*4],SA1COpC4x8
mov dword[edi+0C5h*4],SA1COpC5m8
mov dword[edi+0C6h*4],SA1COpC6m8
mov dword[edi+0C7h*4],SA1COpC7m8
mov dword[edi+0C8h*4],SA1COpC8x8
mov dword[edi+0C9h*4],SA1COpC9m8
mov dword[edi+0CAh*4],SA1COpCAx8
mov dword[edi+0CBh*4],SA1COpCB
mov dword[edi+0CCh*4],SA1COpCCx8
mov dword[edi+0CDh*4],SA1COpCDm8
mov dword[edi+0CEh*4],SA1COpCEm8
mov dword[edi+0CFh*4],SA1COpCFm8
mov dword[edi+0D0h*4],SA1COpD0
mov dword[edi+0D1h*4],SA1COpD1m8
mov dword[edi+0D2h*4],SA1COpD2m8
mov dword[edi+0D3h*4],SA1COpD3m8
mov dword[edi+0D4h*4],SA1COpD4
mov dword[edi+0D5h*4],SA1COpD5m8
mov dword[edi+0D6h*4],SA1COpD6m8
mov dword[edi+0D7h*4],SA1COpD7m8
mov dword[edi+0D8h*4],SA1COpD8
mov dword[edi+0D9h*4],SA1COpD9m8
mov dword[edi+0DAh*4],SA1COpDAx8
mov dword[edi+0DBh*4],SA1COpDB
mov dword[edi+0DCh*4],SA1COpDC
mov dword[edi+0DDh*4],SA1COpDDm8
mov dword[edi+0DEh*4],SA1COpDEm8
mov dword[edi+0DFh*4],SA1COpDFm8
mov dword[edi+0E0h*4],SA1COpE0x8
mov dword[edi+0E1h*4],SA1COpE1m8nd
mov dword[edi+0E2h*4],SA1COpE2
mov dword[edi+0E3h*4],SA1COpE3m8nd
mov dword[edi+0E4h*4],SA1COpE4x8
mov dword[edi+0E5h*4],SA1COpE5m8nd
mov dword[edi+0E6h*4],SA1COpE6m8
mov dword[edi+0E7h*4],SA1COpE7m8nd
mov dword[edi+0E8h*4],SA1COpE8x8
mov dword[edi+0E9h*4],SA1COpE9m8nd
mov dword[edi+0EAh*4],SA1COpEA
mov dword[edi+0EBh*4],SA1COpEB
mov dword[edi+0ECh*4],SA1COpECx8
mov dword[edi+0EDh*4],SA1COpEDm8nd
mov dword[edi+0EEh*4],SA1COpEEm8
mov dword[edi+0EFh*4],SA1COpEFm8nd
mov dword[edi+0F0h*4],SA1COpF0
mov dword[edi+0F1h*4],SA1COpF1m8nd
mov dword[edi+0F2h*4],SA1COpF2m8nd
mov dword[edi+0F3h*4],SA1COpF3m8nd
mov dword[edi+0F4h*4],SA1COpF4
mov dword[edi+0F5h*4],SA1COpF5m8nd
mov dword[edi+0F6h*4],SA1COpF6m8
mov dword[edi+0F7h*4],SA1COpF7m8nd
mov dword[edi+0F8h*4],SA1COpF8
mov dword[edi+0F9h*4],SA1COpF9m8nd
mov dword[edi+0FAh*4],SA1COpFAx8
mov dword[edi+0FBh*4],SA1COpFB
mov dword[edi+0FCh*4],SA1COpFC
mov dword[edi+0FDh*4],SA1COpFDm8nd
mov dword[edi+0FEh*4],SA1COpFEm8
mov dword[edi+0FFh*4],SA1COpFFm8nd
ret
NEWSYM SA1settablem16
mov dword[edi+01h*4],SA1COp01m16
mov dword[edi+03h*4],SA1COp03m16
mov dword[edi+04h*4],SA1COp04m16
mov dword[edi+05h*4],SA1COp05m16
mov dword[edi+06h*4],SA1COp06m16
mov dword[edi+07h*4],SA1COp07m16
mov dword[edi+09h*4],SA1COp09m16
mov dword[edi+0Ah*4],SA1COp0Am16
mov dword[edi+0Ch*4],SA1COp0Cm16
mov dword[edi+0Dh*4],SA1COp0Dm16
mov dword[edi+0Eh*4],SA1COp0Em16
mov dword[edi+0Fh*4],SA1COp0Fm16
mov dword[edi+11h*4],SA1COp11m16
mov dword[edi+12h*4],SA1COp12m16
mov dword[edi+13h*4],SA1COp13m16
mov dword[edi+14h*4],SA1COp14m16
mov dword[edi+15h*4],SA1COp15m16
mov dword[edi+16h*4],SA1COp16m16
mov dword[edi+17h*4],SA1COp17m16
mov dword[edi+19h*4],SA1COp19m16
mov dword[edi+1Ah*4],SA1COp1Am16
mov dword[edi+1Ch*4],SA1COp1Cm16
mov dword[edi+1Dh*4],SA1COp1Dm16
mov dword[edi+1Eh*4],SA1COp1Em16
mov dword[edi+1Fh*4],SA1COp1Fm16
mov dword[edi+21h*4],SA1COp21m16
mov dword[edi+23h*4],SA1COp23m16
mov dword[edi+24h*4],SA1COp24m16
mov dword[edi+25h*4],SA1COp25m16
mov dword[edi+26h*4],SA1COp26m16
mov dword[edi+27h*4],SA1COp27m16
mov dword[edi+29h*4],SA1COp29m16
mov dword[edi+2Ah*4],SA1COp2Am16
mov dword[edi+2Ch*4],SA1COp2Cm16
mov dword[edi+2Dh*4],SA1COp2Dm16
mov dword[edi+2Eh*4],SA1COp2Em16
mov dword[edi+2Fh*4],SA1COp2Fm16
mov dword[edi+31h*4],SA1COp31m16
mov dword[edi+32h*4],SA1COp32m16
mov dword[edi+33h*4],SA1COp33m16
mov dword[edi+34h*4],SA1COp34m16
mov dword[edi+35h*4],SA1COp35m16
mov dword[edi+36h*4],SA1COp36m16
mov dword[edi+37h*4],SA1COp37m16
mov dword[edi+39h*4],SA1COp39m16
mov dword[edi+3Ah*4],SA1COp3Am16
mov dword[edi+3Ch*4],SA1COp3Cm16
mov dword[edi+3Dh*4],SA1COp3Dm16
mov dword[edi+3Eh*4],SA1COp3Em16
mov dword[edi+3Fh*4],SA1COp3Fm16
mov dword[edi+41h*4],SA1COp41m16
mov dword[edi+43h*4],SA1COp43m16
mov dword[edi+45h*4],SA1COp45m16
mov dword[edi+46h*4],SA1COp46m16
mov dword[edi+47h*4],SA1COp47m16
mov dword[edi+48h*4],SA1COp48m16
mov dword[edi+49h*4],SA1COp49m16
mov dword[edi+4Ah*4],SA1COp4Am16
mov dword[edi+4Dh*4],SA1COp4Dm16
mov dword[edi+4Eh*4],SA1COp4Em16
mov dword[edi+4Fh*4],SA1COp4Fm16
mov dword[edi+51h*4],SA1COp51m16
mov dword[edi+52h*4],SA1COp52m16
mov dword[edi+53h*4],SA1COp53m16
mov dword[edi+55h*4],SA1COp55m16
mov dword[edi+56h*4],SA1COp56m16
mov dword[edi+57h*4],SA1COp57m16
mov dword[edi+59h*4],SA1COp59m16
mov dword[edi+5Dh*4],SA1COp5Dm16
mov dword[edi+5Eh*4],SA1COp5Em16
mov dword[edi+5Fh*4],SA1COp5Fm16
mov dword[edi+61h*4],SA1COp61m16nd
mov dword[edi+63h*4],SA1COp63m16nd
mov dword[edi+64h*4],SA1COp64m16
mov dword[edi+65h*4],SA1COp65m16nd
mov dword[edi+66h*4],SA1COp66m16
mov dword[edi+67h*4],SA1COp67m16nd
mov dword[edi+68h*4],SA1COp68m16
mov dword[edi+69h*4],SA1COp69m16nd
mov dword[edi+6Ah*4],SA1COp6Am16
mov dword[edi+6Dh*4],SA1COp6Dm16nd
mov dword[edi+6Eh*4],SA1COp6Em16
mov dword[edi+6Fh*4],SA1COp6Fm16nd
mov dword[edi+71h*4],SA1COp71m16nd
mov dword[edi+72h*4],SA1COp72m16nd
mov dword[edi+73h*4],SA1COp73m16nd
mov dword[edi+74h*4],SA1COp74m16
mov dword[edi+75h*4],SA1COp75m16nd
mov dword[edi+76h*4],SA1COp76m16
mov dword[edi+77h*4],SA1COp77m16nd
mov dword[edi+79h*4],SA1COp79m16nd
mov dword[edi+7Dh*4],SA1COp7Dm16nd
mov dword[edi+7Eh*4],SA1COp7Em16
mov dword[edi+7Fh*4],SA1COp7Fm16nd
mov dword[edi+81h*4],SA1COp81m16
mov dword[edi+83h*4],SA1COp83m16
mov dword[edi+85h*4],SA1COp85m16
mov dword[edi+87h*4],SA1COp87m16
mov dword[edi+89h*4],SA1COp89m16
mov dword[edi+8Ah*4],SA1COp8Am16
mov dword[edi+8Dh*4],SA1COp8Dm16
mov dword[edi+8Fh*4],SA1COp8Fm16
mov dword[edi+91h*4],SA1COp91m16
mov dword[edi+92h*4],SA1COp92m16
mov dword[edi+93h*4],SA1COp93m16
mov dword[edi+95h*4],SA1COp95m16
mov dword[edi+97h*4],SA1COp97m16
mov dword[edi+98h*4],SA1COp98m16
mov dword[edi+99h*4],SA1COp99m16
mov dword[edi+9Ch*4],SA1COp9Cm16
mov dword[edi+9Dh*4],SA1COp9Dm16
mov dword[edi+9Eh*4],SA1COp9Em16
mov dword[edi+9Fh*4],SA1COp9Fm16
mov dword[edi+0A1h*4],SA1COpA1m16
mov dword[edi+0A3h*4],SA1COpA3m16
mov dword[edi+0A5h*4],SA1COpA5m16
mov dword[edi+0A7h*4],SA1COpA7m16
mov dword[edi+0A9h*4],SA1COpA9m16
mov dword[edi+0ADh*4],SA1COpADm16
mov dword[edi+0AFh*4],SA1COpAFm16
mov dword[edi+0B1h*4],SA1COpB1m16
mov dword[edi+0B2h*4],SA1COpB2m16
mov dword[edi+0B3h*4],SA1COpB3m16
mov dword[edi+0B5h*4],SA1COpB5m16
mov dword[edi+0B7h*4],SA1COpB7m16
mov dword[edi+0B9h*4],SA1COpB9m16
mov dword[edi+0BDh*4],SA1COpBDm16
mov dword[edi+0BFh*4],SA1COpBFm16
mov dword[edi+0C1h*4],SA1COpC1m16
mov dword[edi+0C3h*4],SA1COpC3m16
mov dword[edi+0C5h*4],SA1COpC5m16
mov dword[edi+0C6h*4],SA1COpC6m16
mov dword[edi+0C7h*4],SA1COpC7m16
mov dword[edi+0C9h*4],SA1COpC9m16
mov dword[edi+0CDh*4],SA1COpCDm16
mov dword[edi+0CEh*4],SA1COpCEm16
mov dword[edi+0CFh*4],SA1COpCFm16
mov dword[edi+0D1h*4],SA1COpD1m16
mov dword[edi+0D2h*4],SA1COpD2m16
mov dword[edi+0D3h*4],SA1COpD3m16
mov dword[edi+0D5h*4],SA1COpD5m16
mov dword[edi+0D6h*4],SA1COpD6m16
mov dword[edi+0D7h*4],SA1COpD7m16
mov dword[edi+0D9h*4],SA1COpD9m16
mov dword[edi+0DDh*4],SA1COpDDm16
mov dword[edi+0DEh*4],SA1COpDEm16
mov dword[edi+0DFh*4],SA1COpDFm16
mov dword[edi+0E1h*4],SA1COpE1m16nd
mov dword[edi+0E3h*4],SA1COpE3m16nd
mov dword[edi+0E5h*4],SA1COpE5m16nd
mov dword[edi+0E6h*4],SA1COpE6m16
mov dword[edi+0E7h*4],SA1COpE7m16nd
mov dword[edi+0E9h*4],SA1COpE9m16nd
mov dword[edi+0EDh*4],SA1COpEDm16nd
mov dword[edi+0EEh*4],SA1COpEEm16
mov dword[edi+0EFh*4],SA1COpEFm16nd
mov dword[edi+0F1h*4],SA1COpF1m16nd
mov dword[edi+0F2h*4],SA1COpF2m16nd
mov dword[edi+0F3h*4],SA1COpF3m16nd
mov dword[edi+0F5h*4],SA1COpF5m16nd
mov dword[edi+0F6h*4],SA1COpF6m16
mov dword[edi+0F7h*4],SA1COpF7m16nd
mov dword[edi+0F9h*4],SA1COpF9m16nd
mov dword[edi+0FDh*4],SA1COpFDm16nd
mov dword[edi+0FEh*4],SA1COpFEm16
mov dword[edi+0FFh*4],SA1COpFFm16nd
ret
NEWSYM SA1settablex16
mov dword[edi+5Ah*4],SA1COp5Ax16
mov dword[edi+7Ah*4],SA1COp7Ax16
mov dword[edi+84h*4],SA1COp84x16
mov dword[edi+86h*4],SA1COp86x16
mov dword[edi+88h*4],SA1COp88x16
mov dword[edi+8Ch*4],SA1COp8Cx16
mov dword[edi+8Eh*4],SA1COp8Ex16
mov dword[edi+94h*4],SA1COp94x16
mov dword[edi+96h*4],SA1COp96x16
mov dword[edi+9Bh*4],SA1COp9Bx16
mov dword[edi+0A0h*4],SA1COpA0x16
mov dword[edi+0A2h*4],SA1COpA2x16
mov dword[edi+0A4h*4],SA1COpA4x16
mov dword[edi+0A6h*4],SA1COpA6x16
mov dword[edi+0A8h*4],SA1COpA8x16
mov dword[edi+0AAh*4],SA1COpAAx16
mov dword[edi+0ACh*4],SA1COpACx16
mov dword[edi+0AEh*4],SA1COpAEx16
mov dword[edi+0B4h*4],SA1COpB4x16
mov dword[edi+0B6h*4],SA1COpB6x16
mov dword[edi+0BAh*4],SA1COpBAx16
mov dword[edi+0BBh*4],SA1COpBBx16
mov dword[edi+0BCh*4],SA1COpBCx16
mov dword[edi+0BEh*4],SA1COpBEx16
mov dword[edi+0C0h*4],SA1COpC0x16
mov dword[edi+0C4h*4],SA1COpC4x16
mov dword[edi+0C8h*4],SA1COpC8x16
mov dword[edi+0CAh*4],SA1COpCAx16
mov dword[edi+0CCh*4],SA1COpCCx16
mov dword[edi+0DAh*4],SA1COpDAx16
mov dword[edi+0E0h*4],SA1COpE0x16
mov dword[edi+0E4h*4],SA1COpE4x16
mov dword[edi+0E8h*4],SA1COpE8x16
mov dword[edi+0ECh*4],SA1COpECx16
mov dword[edi+0FAh*4],SA1COpFAx16
ret
NEWSYM SA1settableDm8
mov dword[edi+61h*4],SA1COp61m8d
mov dword[edi+63h*4],SA1COp63m8d
mov dword[edi+65h*4],SA1COp65m8d
mov dword[edi+67h*4],SA1COp67m8d
mov dword[edi+69h*4],SA1COp69m8d
mov dword[edi+6Dh*4],SA1COp6Dm8d
mov dword[edi+6Fh*4],SA1COp6Fm8d
mov dword[edi+71h*4],SA1COp71m8d
mov dword[edi+72h*4],SA1COp72m8d
mov dword[edi+73h*4],SA1COp73m8d
mov dword[edi+75h*4],SA1COp75m8d
mov dword[edi+77h*4],SA1COp77m8d
mov dword[edi+79h*4],SA1COp79m8d
mov dword[edi+7Dh*4],SA1COp7Dm8d
mov dword[edi+7Fh*4],SA1COp7Fm8d
mov dword[edi+0E1h*4],SA1COpE1m8d
mov dword[edi+0E3h*4],SA1COpE3m8d
mov dword[edi+0E5h*4],SA1COpE5m8d
mov dword[edi+0E7h*4],SA1COpE7m8d
mov dword[edi+0E9h*4],SA1COpE9m8d
mov dword[edi+0EDh*4],SA1COpEDm8d
mov dword[edi+0EFh*4],SA1COpEFm8d
mov dword[edi+0F1h*4],SA1COpF1m8d
mov dword[edi+0F2h*4],SA1COpF2m8d
mov dword[edi+0F3h*4],SA1COpF3m8d
mov dword[edi+0F5h*4],SA1COpF5m8d
mov dword[edi+0F7h*4],SA1COpF7m8d
mov dword[edi+0F9h*4],SA1COpF9m8d
mov dword[edi+0FDh*4],SA1COpFDm8d
mov dword[edi+0FFh*4],SA1COpFFm8d
ret
NEWSYM SA1settableDm16
mov dword[edi+61h*4],SA1COp61m16d
mov dword[edi+63h*4],SA1COp63m16d
mov dword[edi+65h*4],SA1COp65m16d
mov dword[edi+67h*4],SA1COp67m16d
mov dword[edi+69h*4],SA1COp69m16d
mov dword[edi+6Dh*4],SA1COp6Dm16d
mov dword[edi+6Fh*4],SA1COp6Fm16d
mov dword[edi+71h*4],SA1COp71m16d
mov dword[edi+72h*4],SA1COp72m16d
mov dword[edi+73h*4],SA1COp73m16d
mov dword[edi+75h*4],SA1COp75m16d
mov dword[edi+77h*4],SA1COp77m16d
mov dword[edi+79h*4],SA1COp79m16d
mov dword[edi+7Dh*4],SA1COp7Dm16d
mov dword[edi+7Fh*4],SA1COp7Fm16d
mov dword[edi+0E1h*4],SA1COpE1m16d
mov dword[edi+0E3h*4],SA1COpE3m16d
mov dword[edi+0E5h*4],SA1COpE5m16d
mov dword[edi+0E7h*4],SA1COpE7m16d
mov dword[edi+0E9h*4],SA1COpE9m16d
mov dword[edi+0EDh*4],SA1COpEDm16d
mov dword[edi+0EFh*4],SA1COpEFm16d
mov dword[edi+0F1h*4],SA1COpF1m16d
mov dword[edi+0F2h*4],SA1COpF2m16d
mov dword[edi+0F3h*4],SA1COpF3m16d
mov dword[edi+0F5h*4],SA1COpF5m16d
mov dword[edi+0F7h*4],SA1COpF7m16d
mov dword[edi+0F9h*4],SA1COpF9m16d
mov dword[edi+0FDh*4],SA1COpFDm16d
mov dword[edi+0FFh*4],SA1COpFFm16d
ret


1191
zsnes/src/cpu/table.asm Normal file

File diff suppressed because it is too large Load Diff

723
zsnes/src/cpu/tableb.asm Normal file
View File

@@ -0,0 +1,723 @@
;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 regaccessbankr16,regaccessbankw16,regaccessbankw8
EXTSYM sramaccessbankr16,sramaccessbankr8,sramaccessbankw16
EXTSYM sramaccessbankw8,tableAb,tableBb,tableCb,tableDb,tableEb
EXTSYM tableFb,tableGb,tableHb,wramaccessbankr16
EXTSYM wramaccessbankr8,wramaccessbankw16,wramaccessbankw8,tableadb
%include "cpu/65816db.inc"
%include "cpu/address.inc"
%include "cpu/addrni.inc"
%include "cpu/e65816b.inc"
; global variables
;*******************************************************
; Generate OpCode Table
;*******************************************************
NEWSYM inittableb
; set tablead (NVMXDIZC) ( MXD )
push es
xor ecx,ecx
xor al,al
mov cx,256
mov edi,tableadb
.loopa
test al,08h ; D flag
jnz .decon
test al,10h ; X flag
jnz .xon
test al,20h ; M flag
jnz .mon
mov esi,tableAb
jmp .done
.mon
mov esi,tableBb
jmp .done
.xon
test al,20h ; M flag
jnz .mon2
mov esi,tableCb
jmp .done
.mon2
mov esi,tableDb
jmp .done
.decon
test al,10h ; X flag
jnz .xon3
test al,20h ; M flag
jnz .mon3
mov esi,tableEb
jmp .done
.mon3
mov esi,tableFb
jmp .done
.xon3
test al,20h
jnz .mon4
mov esi,tableGb
jmp .done
.mon4
mov esi,tableHb
.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,tableAb
mov ecx,256
rep stosd
mov edi,tableBb
mov ecx,256
rep stosd
mov edi,tableCb
mov ecx,256
rep stosd
mov edi,tableDb
mov ecx,256
rep stosd
mov edi,tableEb
mov ecx,256
rep stosd
mov edi,tableFb
mov ecx,256
rep stosd
mov edi,tableGb
mov ecx,256
rep stosd
mov edi,tableHb
mov ecx,256
rep stosd
mov edi,tableAb
call settables
mov edi,tableBb
call settables
mov edi,tableCb
call settables
mov edi,tableDb
call settables
mov edi,tableEb
call settables
mov edi,tableFb
call settables
mov edi,tableGb
call settables
mov edi,tableHb
call settables
; set proper functions
mov edi,tableAb ; Table addresses (M:0,X:0,D:0)
call settablem16
mov edi,tableAb
call settablex16
mov edi,tableBb ; Table addresses (M:1,X:0,D:0)
call settablex16
mov edi,tableCb ; Table addresses (M:0,X:1,D:0)
call settablem16
mov edi,tableEb ; Table addresses (M:0,X:0,D:1)
call settablem16
mov edi,tableEb
call settableDm16
mov edi,tableEb
call settablex16
mov edi,tableFb ; Table addresses (M:1,X:0,D:1)
call settablex16
mov edi,tableFb
call settableDm8
mov edi,tableGb ; Table addresses (M:0,X:1,D:1)
call settablem16
mov edi,tableGb
call settableDm16
mov edi,tableHb ; Table addresses (M:1,X:1,D:1)
call settableDm8
pop es
ret
eopINVALID
ret
;*******************************************************
; Set Tables Sets the opcode tables according to EDI
;*******************************************************
; This function sets all the non-multiple entries
settables:
;row 0
mov dword[edi+00h*4],COp00
mov dword[edi+01h*4],COp01m8
mov dword[edi+02h*4],COp02
mov dword[edi+03h*4],COp03m8
mov dword[edi+04h*4],COp04m8
mov dword[edi+05h*4],COp05m8
mov dword[edi+06h*4],COp06m8
mov dword[edi+07h*4],COp07m8
mov dword[edi+08h*4],COp08
mov dword[edi+09h*4],COp09m8
mov dword[edi+0Ah*4],COp0Am8
mov dword[edi+0Bh*4],COp0B
mov dword[edi+0Ch*4],COp0Cm8
mov dword[edi+0Dh*4],COp0Dm8
mov dword[edi+0Eh*4],COp0Em8
mov dword[edi+0Fh*4],COp0Fm8
mov dword[edi+10h*4],COp10
mov dword[edi+11h*4],COp11m8
mov dword[edi+12h*4],COp12m8
mov dword[edi+13h*4],COp13m8
mov dword[edi+14h*4],COp14m8
mov dword[edi+15h*4],COp15m8
mov dword[edi+16h*4],COp16m8
mov dword[edi+17h*4],COp17m8
mov dword[edi+18h*4],COp18
mov dword[edi+19h*4],COp19m8
mov dword[edi+1Ah*4],COp1Am8
mov dword[edi+1Bh*4],COp1B
mov dword[edi+1Ch*4],COp1Cm8
mov dword[edi+1Dh*4],COp1Dm8
mov dword[edi+1Eh*4],COp1Em8
mov dword[edi+1Fh*4],COp1Fm8
mov dword[edi+20h*4],COp20
mov dword[edi+21h*4],COp21m8
mov dword[edi+22h*4],COp22
mov dword[edi+23h*4],COp23m8
mov dword[edi+24h*4],COp24m8
mov dword[edi+25h*4],COp25m8
mov dword[edi+26h*4],COp26m8
mov dword[edi+27h*4],COp27m8
mov dword[edi+28h*4],COp28
mov dword[edi+29h*4],COp29m8
mov dword[edi+2Ah*4],COp2Am8
mov dword[edi+2Bh*4],COp2B
mov dword[edi+2Ch*4],COp2Cm8
mov dword[edi+2Dh*4],COp2Dm8
mov dword[edi+2Eh*4],COp2Em8
mov dword[edi+2Fh*4],COp2Fm8
mov dword[edi+30h*4],COp30
mov dword[edi+31h*4],COp31m8
mov dword[edi+32h*4],COp32m8
mov dword[edi+33h*4],COp33m8
mov dword[edi+34h*4],COp34m8
mov dword[edi+35h*4],COp35m8
mov dword[edi+36h*4],COp36m8
mov dword[edi+37h*4],COp37m8
mov dword[edi+38h*4],COp38
mov dword[edi+39h*4],COp39m8
mov dword[edi+3Ah*4],COp3Am8
mov dword[edi+3Bh*4],COp3B
mov dword[edi+3Ch*4],COp3Cm8
mov dword[edi+3Dh*4],COp3Dm8
mov dword[edi+3Eh*4],COp3Em8
mov dword[edi+3Fh*4],COp3Fm8
mov dword[edi+40h*4],COp40
mov dword[edi+41h*4],COp41m8
mov dword[edi+42h*4],COp42
mov dword[edi+43h*4],COp43m8
mov dword[edi+44h*4],COp44
mov dword[edi+45h*4],COp45m8
mov dword[edi+46h*4],COp46m8
mov dword[edi+47h*4],COp47m8
mov dword[edi+48h*4],COp48m8
mov dword[edi+49h*4],COp49m8
mov dword[edi+4Ah*4],COp4Am8
mov dword[edi+4Bh*4],COp4B
mov dword[edi+4Ch*4],COp4C
mov dword[edi+4Dh*4],COp4Dm8
mov dword[edi+4Eh*4],COp4Em8
mov dword[edi+4Fh*4],COp4Fm8
mov dword[edi+50h*4],COp50
mov dword[edi+51h*4],COp51m8
mov dword[edi+52h*4],COp52m8
mov dword[edi+53h*4],COp53m8
mov dword[edi+54h*4],COp54
mov dword[edi+55h*4],COp55m8
mov dword[edi+56h*4],COp56m8
mov dword[edi+57h*4],COp57m8
mov dword[edi+58h*4],COp58
mov dword[edi+59h*4],COp59m8
mov dword[edi+5Ah*4],COp5Ax8
mov dword[edi+5Bh*4],COp5B
mov dword[edi+5Ch*4],COp5C
mov dword[edi+5Dh*4],COp5Dm8
mov dword[edi+5Eh*4],COp5Em8
mov dword[edi+5Fh*4],COp5Fm8
mov dword[edi+60h*4],COp60
mov dword[edi+61h*4],COp61m8nd
mov dword[edi+62h*4],COp62
mov dword[edi+63h*4],COp63m8nd
mov dword[edi+64h*4],COp64m8
mov dword[edi+65h*4],COp65m8nd
mov dword[edi+66h*4],COp66m8
mov dword[edi+67h*4],COp67m8nd
mov dword[edi+68h*4],COp68m8
mov dword[edi+69h*4],COp69m8nd
mov dword[edi+6Ah*4],COp6Am8
mov dword[edi+6Bh*4],COp6B
mov dword[edi+6Ch*4],COp6C
mov dword[edi+6Dh*4],COp6Dm8nd
mov dword[edi+6Eh*4],COp6Em8
mov dword[edi+6Fh*4],COp6Fm8nd
mov dword[edi+70h*4],COp70
mov dword[edi+71h*4],COp71m8nd
mov dword[edi+72h*4],COp72m8nd
mov dword[edi+73h*4],COp73m8nd
mov dword[edi+74h*4],COp74m8
mov dword[edi+75h*4],COp75m8nd
mov dword[edi+76h*4],COp76m8
mov dword[edi+77h*4],COp77m8nd
mov dword[edi+78h*4],COp78
mov dword[edi+79h*4],COp79m8nd
mov dword[edi+7Ah*4],COp7Ax8
mov dword[edi+7Bh*4],COp7B
mov dword[edi+7Ch*4],COp7C
mov dword[edi+7Dh*4],COp7Dm8nd
mov dword[edi+7Eh*4],COp7Em8
mov dword[edi+7Fh*4],COp7Fm8nd
mov dword[edi+80h*4],COp80
mov dword[edi+81h*4],COp81m8
mov dword[edi+82h*4],COp82
mov dword[edi+83h*4],COp83m8
mov dword[edi+84h*4],COp84x8
mov dword[edi+85h*4],COp85m8
mov dword[edi+86h*4],COp86x8
mov dword[edi+87h*4],COp87m8
mov dword[edi+88h*4],COp88x8
mov dword[edi+89h*4],COp89m8
mov dword[edi+8Ah*4],COp8Am8
mov dword[edi+8Bh*4],COp8B
mov dword[edi+8Ch*4],COp8Cx8
mov dword[edi+8Dh*4],COp8Dm8
mov dword[edi+8Eh*4],COp8Ex8
mov dword[edi+8Fh*4],COp8Fm8
mov dword[edi+90h*4],COp90
mov dword[edi+91h*4],COp91m8
mov dword[edi+92h*4],COp92m8
mov dword[edi+93h*4],COp93m8
mov dword[edi+94h*4],COp94x8
mov dword[edi+95h*4],COp95m8
mov dword[edi+96h*4],COp96x8
mov dword[edi+97h*4],COp97m8
mov dword[edi+98h*4],COp98m8
mov dword[edi+99h*4],COp99m8
mov dword[edi+9Ah*4],COp9A
mov dword[edi+9Bh*4],COp9Bx8
mov dword[edi+9Ch*4],COp9Cm8
mov dword[edi+9Dh*4],COp9Dm8
mov dword[edi+9Eh*4],COp9Em8
mov dword[edi+9Fh*4],COp9Fm8
mov dword[edi+0A0h*4],COpA0x8
mov dword[edi+0A1h*4],COpA1m8
mov dword[edi+0A2h*4],COpA2x8
mov dword[edi+0A3h*4],COpA3m8
mov dword[edi+0A4h*4],COpA4x8
mov dword[edi+0A5h*4],COpA5m8
mov dword[edi+0A6h*4],COpA6x8
mov dword[edi+0A7h*4],COpA7m8
mov dword[edi+0A8h*4],COpA8x8
mov dword[edi+0A9h*4],COpA9m8
mov dword[edi+0AAh*4],COpAAx8
mov dword[edi+0ABh*4],COpAB
mov dword[edi+0ACh*4],COpACx8
mov dword[edi+0ADh*4],COpADm8
mov dword[edi+0AEh*4],COpAEx8
mov dword[edi+0AFh*4],COpAFm8
mov dword[edi+0B0h*4],COpB0
mov dword[edi+0B1h*4],COpB1m8
mov dword[edi+0B2h*4],COpB2m8
mov dword[edi+0B3h*4],COpB3m8
mov dword[edi+0B4h*4],COpB4x8
mov dword[edi+0B5h*4],COpB5m8
mov dword[edi+0B6h*4],COpB6x8
mov dword[edi+0B7h*4],COpB7m8
mov dword[edi+0B8h*4],COpB8
mov dword[edi+0B9h*4],COpB9m8
mov dword[edi+0BAh*4],COpBAx8
mov dword[edi+0BBh*4],COpBBx8
mov dword[edi+0BCh*4],COpBCx8
mov dword[edi+0BDh*4],COpBDm8
mov dword[edi+0BEh*4],COpBEx8
mov dword[edi+0BFh*4],COpBFm8
mov dword[edi+0C0h*4],COpC0x8
mov dword[edi+0C1h*4],COpC1m8
mov dword[edi+0C2h*4],COpC2
mov dword[edi+0C3h*4],COpC3m8
mov dword[edi+0C4h*4],COpC4x8
mov dword[edi+0C5h*4],COpC5m8
mov dword[edi+0C6h*4],COpC6m8
mov dword[edi+0C7h*4],COpC7m8
mov dword[edi+0C8h*4],COpC8x8
mov dword[edi+0C9h*4],COpC9m8
mov dword[edi+0CAh*4],COpCAx8
mov dword[edi+0CBh*4],COpCB
mov dword[edi+0CCh*4],COpCCx8
mov dword[edi+0CDh*4],COpCDm8
mov dword[edi+0CEh*4],COpCEm8
mov dword[edi+0CFh*4],COpCFm8
mov dword[edi+0D0h*4],COpD0
mov dword[edi+0D1h*4],COpD1m8
mov dword[edi+0D2h*4],COpD2m8
mov dword[edi+0D3h*4],COpD3m8
mov dword[edi+0D4h*4],COpD4
mov dword[edi+0D5h*4],COpD5m8
mov dword[edi+0D6h*4],COpD6m8
mov dword[edi+0D7h*4],COpD7m8
mov dword[edi+0D8h*4],COpD8
mov dword[edi+0D9h*4],COpD9m8
mov dword[edi+0DAh*4],COpDAx8
mov dword[edi+0DBh*4],COpDB
mov dword[edi+0DCh*4],COpDC
mov dword[edi+0DDh*4],COpDDm8
mov dword[edi+0DEh*4],COpDEm8
mov dword[edi+0DFh*4],COpDFm8
mov dword[edi+0E0h*4],COpE0x8
mov dword[edi+0E1h*4],COpE1m8nd
mov dword[edi+0E2h*4],COpE2
mov dword[edi+0E3h*4],COpE3m8nd
mov dword[edi+0E4h*4],COpE4x8
mov dword[edi+0E5h*4],COpE5m8nd
mov dword[edi+0E6h*4],COpE6m8
mov dword[edi+0E7h*4],COpE7m8nd
mov dword[edi+0E8h*4],COpE8x8
mov dword[edi+0E9h*4],COpE9m8nd
mov dword[edi+0EAh*4],COpEA
mov dword[edi+0EBh*4],COpEB
mov dword[edi+0ECh*4],COpECx8
mov dword[edi+0EDh*4],COpEDm8nd
mov dword[edi+0EEh*4],COpEEm8
mov dword[edi+0EFh*4],COpEFm8nd
mov dword[edi+0F0h*4],COpF0
mov dword[edi+0F1h*4],COpF1m8nd
mov dword[edi+0F2h*4],COpF2m8nd
mov dword[edi+0F3h*4],COpF3m8nd
mov dword[edi+0F4h*4],COpF4
mov dword[edi+0F5h*4],COpF5m8nd
mov dword[edi+0F6h*4],COpF6m8
mov dword[edi+0F7h*4],COpF7m8nd
mov dword[edi+0F8h*4],COpF8
mov dword[edi+0F9h*4],COpF9m8nd
mov dword[edi+0FAh*4],COpFAx8
mov dword[edi+0FBh*4],COpFB
mov dword[edi+0FCh*4],COpFC
mov dword[edi+0FDh*4],COpFDm8nd
mov dword[edi+0FEh*4],COpFEm8
mov dword[edi+0FFh*4],COpFFm8nd
ret
settablem16:
mov dword[edi+01h*4],COp01m16
mov dword[edi+03h*4],COp03m16
mov dword[edi+04h*4],COp04m16
mov dword[edi+05h*4],COp05m16
mov dword[edi+06h*4],COp06m16
mov dword[edi+07h*4],COp07m16
mov dword[edi+09h*4],COp09m16
mov dword[edi+0Ah*4],COp0Am16
mov dword[edi+0Ch*4],COp0Cm16
mov dword[edi+0Dh*4],COp0Dm16
mov dword[edi+0Eh*4],COp0Em16
mov dword[edi+0Fh*4],COp0Fm16
mov dword[edi+11h*4],COp11m16
mov dword[edi+12h*4],COp12m16
mov dword[edi+13h*4],COp13m16
mov dword[edi+14h*4],COp14m16
mov dword[edi+15h*4],COp15m16
mov dword[edi+16h*4],COp16m16
mov dword[edi+17h*4],COp17m16
mov dword[edi+19h*4],COp19m16
mov dword[edi+1Ah*4],COp1Am16
mov dword[edi+1Ch*4],COp1Cm16
mov dword[edi+1Dh*4],COp1Dm16
mov dword[edi+1Eh*4],COp1Em16
mov dword[edi+1Fh*4],COp1Fm16
mov dword[edi+21h*4],COp21m16
mov dword[edi+23h*4],COp23m16
mov dword[edi+24h*4],COp24m16
mov dword[edi+25h*4],COp25m16
mov dword[edi+26h*4],COp26m16
mov dword[edi+27h*4],COp27m16
mov dword[edi+29h*4],COp29m16
mov dword[edi+2Ah*4],COp2Am16
mov dword[edi+2Ch*4],COp2Cm16
mov dword[edi+2Dh*4],COp2Dm16
mov dword[edi+2Eh*4],COp2Em16
mov dword[edi+2Fh*4],COp2Fm16
mov dword[edi+31h*4],COp31m16
mov dword[edi+32h*4],COp32m16
mov dword[edi+33h*4],COp33m16
mov dword[edi+34h*4],COp34m16
mov dword[edi+35h*4],COp35m16
mov dword[edi+36h*4],COp36m16
mov dword[edi+37h*4],COp37m16
mov dword[edi+39h*4],COp39m16
mov dword[edi+3Ah*4],COp3Am16
mov dword[edi+3Ch*4],COp3Cm16
mov dword[edi+3Dh*4],COp3Dm16
mov dword[edi+3Eh*4],COp3Em16
mov dword[edi+3Fh*4],COp3Fm16
mov dword[edi+41h*4],COp41m16
mov dword[edi+43h*4],COp43m16
mov dword[edi+45h*4],COp45m16
mov dword[edi+46h*4],COp46m16
mov dword[edi+47h*4],COp47m16
mov dword[edi+48h*4],COp48m16
mov dword[edi+49h*4],COp49m16
mov dword[edi+4Ah*4],COp4Am16
mov dword[edi+4Dh*4],COp4Dm16
mov dword[edi+4Eh*4],COp4Em16
mov dword[edi+4Fh*4],COp4Fm16
mov dword[edi+51h*4],COp51m16
mov dword[edi+52h*4],COp52m16
mov dword[edi+53h*4],COp53m16
mov dword[edi+55h*4],COp55m16
mov dword[edi+56h*4],COp56m16
mov dword[edi+57h*4],COp57m16
mov dword[edi+59h*4],COp59m16
mov dword[edi+5Dh*4],COp5Dm16
mov dword[edi+5Eh*4],COp5Em16
mov dword[edi+5Fh*4],COp5Fm16
mov dword[edi+61h*4],COp61m16nd
mov dword[edi+63h*4],COp63m16nd
mov dword[edi+64h*4],COp64m16
mov dword[edi+65h*4],COp65m16nd
mov dword[edi+66h*4],COp66m16
mov dword[edi+67h*4],COp67m16nd
mov dword[edi+68h*4],COp68m16
mov dword[edi+69h*4],COp69m16nd
mov dword[edi+6Ah*4],COp6Am16
mov dword[edi+6Dh*4],COp6Dm16nd
mov dword[edi+6Eh*4],COp6Em16
mov dword[edi+6Fh*4],COp6Fm16nd
mov dword[edi+71h*4],COp71m16nd
mov dword[edi+72h*4],COp72m16nd
mov dword[edi+73h*4],COp73m16nd
mov dword[edi+74h*4],COp74m16
mov dword[edi+75h*4],COp75m16nd
mov dword[edi+76h*4],COp76m16
mov dword[edi+77h*4],COp77m16nd
mov dword[edi+79h*4],COp79m16nd
mov dword[edi+7Dh*4],COp7Dm16nd
mov dword[edi+7Eh*4],COp7Em16
mov dword[edi+7Fh*4],COp7Fm16nd
mov dword[edi+81h*4],COp81m16
mov dword[edi+83h*4],COp83m16
mov dword[edi+85h*4],COp85m16
mov dword[edi+87h*4],COp87m16
mov dword[edi+89h*4],COp89m16
mov dword[edi+8Ah*4],COp8Am16
mov dword[edi+8Dh*4],COp8Dm16
mov dword[edi+8Fh*4],COp8Fm16
mov dword[edi+91h*4],COp91m16
mov dword[edi+92h*4],COp92m16
mov dword[edi+93h*4],COp93m16
mov dword[edi+95h*4],COp95m16
mov dword[edi+97h*4],COp97m16
mov dword[edi+98h*4],COp98m16
mov dword[edi+99h*4],COp99m16
mov dword[edi+9Ch*4],COp9Cm16
mov dword[edi+9Dh*4],COp9Dm16
mov dword[edi+9Eh*4],COp9Em16
mov dword[edi+9Fh*4],COp9Fm16
mov dword[edi+0A1h*4],COpA1m16
mov dword[edi+0A3h*4],COpA3m16
mov dword[edi+0A5h*4],COpA5m16
mov dword[edi+0A7h*4],COpA7m16
mov dword[edi+0A9h*4],COpA9m16
mov dword[edi+0ADh*4],COpADm16
mov dword[edi+0AFh*4],COpAFm16
mov dword[edi+0B1h*4],COpB1m16
mov dword[edi+0B2h*4],COpB2m16
mov dword[edi+0B3h*4],COpB3m16
mov dword[edi+0B5h*4],COpB5m16
mov dword[edi+0B7h*4],COpB7m16
mov dword[edi+0B9h*4],COpB9m16
mov dword[edi+0BDh*4],COpBDm16
mov dword[edi+0BFh*4],COpBFm16
mov dword[edi+0C1h*4],COpC1m16
mov dword[edi+0C3h*4],COpC3m16
mov dword[edi+0C5h*4],COpC5m16
mov dword[edi+0C6h*4],COpC6m16
mov dword[edi+0C7h*4],COpC7m16
mov dword[edi+0C9h*4],COpC9m16
mov dword[edi+0CDh*4],COpCDm16
mov dword[edi+0CEh*4],COpCEm16
mov dword[edi+0CFh*4],COpCFm16
mov dword[edi+0D1h*4],COpD1m16
mov dword[edi+0D2h*4],COpD2m16
mov dword[edi+0D3h*4],COpD3m16
mov dword[edi+0D5h*4],COpD5m16
mov dword[edi+0D6h*4],COpD6m16
mov dword[edi+0D7h*4],COpD7m16
mov dword[edi+0D9h*4],COpD9m16
mov dword[edi+0DDh*4],COpDDm16
mov dword[edi+0DEh*4],COpDEm16
mov dword[edi+0DFh*4],COpDFm16
mov dword[edi+0E1h*4],COpE1m16nd
mov dword[edi+0E3h*4],COpE3m16nd
mov dword[edi+0E5h*4],COpE5m16nd
mov dword[edi+0E6h*4],COpE6m16
mov dword[edi+0E7h*4],COpE7m16nd
mov dword[edi+0E9h*4],COpE9m16nd
mov dword[edi+0EDh*4],COpEDm16nd
mov dword[edi+0EEh*4],COpEEm16
mov dword[edi+0EFh*4],COpEFm16nd
mov dword[edi+0F1h*4],COpF1m16nd
mov dword[edi+0F2h*4],COpF2m16nd
mov dword[edi+0F3h*4],COpF3m16nd
mov dword[edi+0F5h*4],COpF5m16nd
mov dword[edi+0F6h*4],COpF6m16
mov dword[edi+0F7h*4],COpF7m16nd
mov dword[edi+0F9h*4],COpF9m16nd
mov dword[edi+0FDh*4],COpFDm16nd
mov dword[edi+0FEh*4],COpFEm16
mov dword[edi+0FFh*4],COpFFm16nd
ret
settablex16:
mov dword[edi+5Ah*4],COp5Ax16
mov dword[edi+7Ah*4],COp7Ax16
mov dword[edi+84h*4],COp84x16
mov dword[edi+86h*4],COp86x16
mov dword[edi+88h*4],COp88x16
mov dword[edi+8Ch*4],COp8Cx16
mov dword[edi+8Eh*4],COp8Ex16
mov dword[edi+94h*4],COp94x16
mov dword[edi+96h*4],COp96x16
mov dword[edi+9Bh*4],COp9Bx16
mov dword[edi+0A0h*4],COpA0x16
mov dword[edi+0A2h*4],COpA2x16
mov dword[edi+0A4h*4],COpA4x16
mov dword[edi+0A6h*4],COpA6x16
mov dword[edi+0A8h*4],COpA8x16
mov dword[edi+0AAh*4],COpAAx16
mov dword[edi+0ACh*4],COpACx16
mov dword[edi+0AEh*4],COpAEx16
mov dword[edi+0B4h*4],COpB4x16
mov dword[edi+0B6h*4],COpB6x16
mov dword[edi+0BAh*4],COpBAx16
mov dword[edi+0BBh*4],COpBBx16
mov dword[edi+0BCh*4],COpBCx16
mov dword[edi+0BEh*4],COpBEx16
mov dword[edi+0C0h*4],COpC0x16
mov dword[edi+0C4h*4],COpC4x16
mov dword[edi+0C8h*4],COpC8x16
mov dword[edi+0CAh*4],COpCAx16
mov dword[edi+0CCh*4],COpCCx16
mov dword[edi+0DAh*4],COpDAx16
mov dword[edi+0E0h*4],COpE0x16
mov dword[edi+0E4h*4],COpE4x16
mov dword[edi+0E8h*4],COpE8x16
mov dword[edi+0ECh*4],COpECx16
mov dword[edi+0FAh*4],COpFAx16
ret
settableDm8:
mov dword[edi+61h*4],COp61m8d
mov dword[edi+63h*4],COp63m8d
mov dword[edi+65h*4],COp65m8d
mov dword[edi+67h*4],COp67m8d
mov dword[edi+69h*4],COp69m8d
mov dword[edi+6Dh*4],COp6Dm8d
mov dword[edi+6Fh*4],COp6Fm8d
mov dword[edi+71h*4],COp71m8d
mov dword[edi+72h*4],COp72m8d
mov dword[edi+73h*4],COp73m8d
mov dword[edi+75h*4],COp75m8d
mov dword[edi+77h*4],COp77m8d
mov dword[edi+79h*4],COp79m8d
mov dword[edi+7Dh*4],COp7Dm8d
mov dword[edi+7Fh*4],COp7Fm8d
mov dword[edi+0E1h*4],COpE1m8d
mov dword[edi+0E3h*4],COpE3m8d
mov dword[edi+0E5h*4],COpE5m8d
mov dword[edi+0E7h*4],COpE7m8d
mov dword[edi+0E9h*4],COpE9m8d
mov dword[edi+0EDh*4],COpEDm8d
mov dword[edi+0EFh*4],COpEFm8d
mov dword[edi+0F1h*4],COpF1m8d
mov dword[edi+0F2h*4],COpF2m8d
mov dword[edi+0F3h*4],COpF3m8d
mov dword[edi+0F5h*4],COpF5m8d
mov dword[edi+0F7h*4],COpF7m8d
mov dword[edi+0F9h*4],COpF9m8d
mov dword[edi+0FDh*4],COpFDm8d
mov dword[edi+0FFh*4],COpFFm8d
ret
settableDm16:
mov dword[edi+61h*4],COp61m16d
mov dword[edi+63h*4],COp63m16d
mov dword[edi+65h*4],COp65m16d
mov dword[edi+67h*4],COp67m16d
mov dword[edi+69h*4],COp69m16d
mov dword[edi+6Dh*4],COp6Dm16d
mov dword[edi+6Fh*4],COp6Fm16d
mov dword[edi+71h*4],COp71m16d
mov dword[edi+72h*4],COp72m16d
mov dword[edi+73h*4],COp73m16d
mov dword[edi+75h*4],COp75m16d
mov dword[edi+77h*4],COp77m16d
mov dword[edi+79h*4],COp79m16d
mov dword[edi+7Dh*4],COp7Dm16d
mov dword[edi+7Fh*4],COp7Fm16d
mov dword[edi+0E1h*4],COpE1m16d
mov dword[edi+0E3h*4],COpE3m16d
mov dword[edi+0E5h*4],COpE5m16d
mov dword[edi+0E7h*4],COpE7m16d
mov dword[edi+0E9h*4],COpE9m16d
mov dword[edi+0EDh*4],COpEDm16d
mov dword[edi+0EFh*4],COpEFm16d
mov dword[edi+0F1h*4],COpF1m16d
mov dword[edi+0F2h*4],COpF2m16d
mov dword[edi+0F3h*4],COpF3m16d
mov dword[edi+0F5h*4],COpF5m16d
mov dword[edi+0F7h*4],COpF7m16d
mov dword[edi+0F9h*4],COpF9m16d
mov dword[edi+0FDh*4],COpFDm16d
mov dword[edi+0FFh*4],COpFFm16d
ret


723
zsnes/src/cpu/tablec.asm Normal file
View File

@@ -0,0 +1,723 @@
;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 regaccessbankr16,regaccessbankw16,regaccessbankw8
EXTSYM sramaccessbankr16,sramaccessbankr8,sramaccessbankw16
EXTSYM sramaccessbankw8,tableAc,tableBc,tableCc,tableDc,tableEc
EXTSYM tableFc,tableGc,tableHc,wramaccessbankr16
EXTSYM wramaccessbankr8,wramaccessbankw16,wramaccessbankw8,tableadc
%include "cpu/65816dc.inc"
%include "cpu/address.inc"
%include "cpu/addrni.inc"
%include "cpu/e65816c.inc"
; global variables
;*******************************************************
; Generate OpCode Table
;*******************************************************
NEWSYM inittablec
; set tablead (NVMXDIZC) ( MXD )
push es
xor ecx,ecx
xor al,al
mov cx,256
mov edi,tableadc
.loopa
test al,08h ; D flag
jnz .decon
test al,10h ; X flag
jnz .xon
test al,20h ; M flag
jnz .mon
mov esi,tableAc
jmp .done
.mon
mov esi,tableBc
jmp .done
.xon
test al,20h ; M flag
jnz .mon2
mov esi,tableCc
jmp .done
.mon2
mov esi,tableDc
jmp .done
.decon
test al,10h ; X flag
jnz .xon3
test al,20h ; M flag
jnz .mon3
mov esi,tableEc
jmp .done
.mon3
mov esi,tableFc
jmp .done
.xon3
test al,20h
jnz .mon4
mov esi,tableGc
jmp .done
.mon4
mov esi,tableHc
.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,tableAc
mov ecx,256
rep stosd
mov edi,tableBc
mov ecx,256
rep stosd
mov edi,tableCc
mov ecx,256
rep stosd
mov edi,tableDc
mov ecx,256
rep stosd
mov edi,tableEc
mov ecx,256
rep stosd
mov edi,tableFc
mov ecx,256
rep stosd
mov edi,tableGc
mov ecx,256
rep stosd
mov edi,tableHc
mov ecx,256
rep stosd
mov edi,tableAc
call settables
mov edi,tableBc
call settables
mov edi,tableCc
call settables
mov edi,tableDc
call settables
mov edi,tableEc
call settables
mov edi,tableFc
call settables
mov edi,tableGc
call settables
mov edi,tableHc
call settables
; set proper functions
mov edi,tableAc ; Table addresses (M:0,X:0,D:0)
call settablem16
mov edi,tableAc
call settablex16
mov edi,tableBc ; Table addresses (M:1,X:0,D:0)
call settablex16
mov edi,tableCc ; Table addresses (M:0,X:1,D:0)
call settablem16
mov edi,tableEc ; Table addresses (M:0,X:0,D:1)
call settablem16
mov edi,tableEc
call settableDm16
mov edi,tableEc
call settablex16
mov edi,tableFc ; Table addresses (M:1,X:0,D:1)
call settablex16
mov edi,tableFc
call settableDm8
mov edi,tableGc ; Table addresses (M:0,X:1,D:1)
call settablem16
mov edi,tableGc
call settableDm16
mov edi,tableHc ; Table addresses (M:1,X:1,D:1)
call settableDm8
pop es
ret
eopINVALID
ret
;*******************************************************
; Set Tables Sets the opcode tables according to EDI
;*******************************************************
; This function sets all the non-multiple entries
settables:
;row 0
mov dword[edi+00h*4],COp00
mov dword[edi+01h*4],COp01m8
mov dword[edi+02h*4],COp02
mov dword[edi+03h*4],COp03m8
mov dword[edi+04h*4],COp04m8
mov dword[edi+05h*4],COp05m8
mov dword[edi+06h*4],COp06m8
mov dword[edi+07h*4],COp07m8
mov dword[edi+08h*4],COp08
mov dword[edi+09h*4],COp09m8
mov dword[edi+0Ah*4],COp0Am8
mov dword[edi+0Bh*4],COp0B
mov dword[edi+0Ch*4],COp0Cm8
mov dword[edi+0Dh*4],COp0Dm8
mov dword[edi+0Eh*4],COp0Em8
mov dword[edi+0Fh*4],COp0Fm8
mov dword[edi+10h*4],COp10
mov dword[edi+11h*4],COp11m8
mov dword[edi+12h*4],COp12m8
mov dword[edi+13h*4],COp13m8
mov dword[edi+14h*4],COp14m8
mov dword[edi+15h*4],COp15m8
mov dword[edi+16h*4],COp16m8
mov dword[edi+17h*4],COp17m8
mov dword[edi+18h*4],COp18
mov dword[edi+19h*4],COp19m8
mov dword[edi+1Ah*4],COp1Am8
mov dword[edi+1Bh*4],COp1B
mov dword[edi+1Ch*4],COp1Cm8
mov dword[edi+1Dh*4],COp1Dm8
mov dword[edi+1Eh*4],COp1Em8
mov dword[edi+1Fh*4],COp1Fm8
mov dword[edi+20h*4],COp20
mov dword[edi+21h*4],COp21m8
mov dword[edi+22h*4],COp22
mov dword[edi+23h*4],COp23m8
mov dword[edi+24h*4],COp24m8
mov dword[edi+25h*4],COp25m8
mov dword[edi+26h*4],COp26m8
mov dword[edi+27h*4],COp27m8
mov dword[edi+28h*4],COp28
mov dword[edi+29h*4],COp29m8
mov dword[edi+2Ah*4],COp2Am8
mov dword[edi+2Bh*4],COp2B
mov dword[edi+2Ch*4],COp2Cm8
mov dword[edi+2Dh*4],COp2Dm8
mov dword[edi+2Eh*4],COp2Em8
mov dword[edi+2Fh*4],COp2Fm8
mov dword[edi+30h*4],COp30
mov dword[edi+31h*4],COp31m8
mov dword[edi+32h*4],COp32m8
mov dword[edi+33h*4],COp33m8
mov dword[edi+34h*4],COp34m8
mov dword[edi+35h*4],COp35m8
mov dword[edi+36h*4],COp36m8
mov dword[edi+37h*4],COp37m8
mov dword[edi+38h*4],COp38
mov dword[edi+39h*4],COp39m8
mov dword[edi+3Ah*4],COp3Am8
mov dword[edi+3Bh*4],COp3B
mov dword[edi+3Ch*4],COp3Cm8
mov dword[edi+3Dh*4],COp3Dm8
mov dword[edi+3Eh*4],COp3Em8
mov dword[edi+3Fh*4],COp3Fm8
mov dword[edi+40h*4],COp40
mov dword[edi+41h*4],COp41m8
mov dword[edi+42h*4],COp42
mov dword[edi+43h*4],COp43m8
mov dword[edi+44h*4],COp44
mov dword[edi+45h*4],COp45m8
mov dword[edi+46h*4],COp46m8
mov dword[edi+47h*4],COp47m8
mov dword[edi+48h*4],COp48m8
mov dword[edi+49h*4],COp49m8
mov dword[edi+4Ah*4],COp4Am8
mov dword[edi+4Bh*4],COp4B
mov dword[edi+4Ch*4],COp4C
mov dword[edi+4Dh*4],COp4Dm8
mov dword[edi+4Eh*4],COp4Em8
mov dword[edi+4Fh*4],COp4Fm8
mov dword[edi+50h*4],COp50
mov dword[edi+51h*4],COp51m8
mov dword[edi+52h*4],COp52m8
mov dword[edi+53h*4],COp53m8
mov dword[edi+54h*4],COp54
mov dword[edi+55h*4],COp55m8
mov dword[edi+56h*4],COp56m8
mov dword[edi+57h*4],COp57m8
mov dword[edi+58h*4],COp58
mov dword[edi+59h*4],COp59m8
mov dword[edi+5Ah*4],COp5Ax8
mov dword[edi+5Bh*4],COp5B
mov dword[edi+5Ch*4],COp5C
mov dword[edi+5Dh*4],COp5Dm8
mov dword[edi+5Eh*4],COp5Em8
mov dword[edi+5Fh*4],COp5Fm8
mov dword[edi+60h*4],COp60
mov dword[edi+61h*4],COp61m8nd
mov dword[edi+62h*4],COp62
mov dword[edi+63h*4],COp63m8nd
mov dword[edi+64h*4],COp64m8
mov dword[edi+65h*4],COp65m8nd
mov dword[edi+66h*4],COp66m8
mov dword[edi+67h*4],COp67m8nd
mov dword[edi+68h*4],COp68m8
mov dword[edi+69h*4],COp69m8nd
mov dword[edi+6Ah*4],COp6Am8
mov dword[edi+6Bh*4],COp6B
mov dword[edi+6Ch*4],COp6C
mov dword[edi+6Dh*4],COp6Dm8nd
mov dword[edi+6Eh*4],COp6Em8
mov dword[edi+6Fh*4],COp6Fm8nd
mov dword[edi+70h*4],COp70
mov dword[edi+71h*4],COp71m8nd
mov dword[edi+72h*4],COp72m8nd
mov dword[edi+73h*4],COp73m8nd
mov dword[edi+74h*4],COp74m8
mov dword[edi+75h*4],COp75m8nd
mov dword[edi+76h*4],COp76m8
mov dword[edi+77h*4],COp77m8nd
mov dword[edi+78h*4],COp78
mov dword[edi+79h*4],COp79m8nd
mov dword[edi+7Ah*4],COp7Ax8
mov dword[edi+7Bh*4],COp7B
mov dword[edi+7Ch*4],COp7C
mov dword[edi+7Dh*4],COp7Dm8nd
mov dword[edi+7Eh*4],COp7Em8
mov dword[edi+7Fh*4],COp7Fm8nd
mov dword[edi+80h*4],COp80
mov dword[edi+81h*4],COp81m8
mov dword[edi+82h*4],COp82
mov dword[edi+83h*4],COp83m8
mov dword[edi+84h*4],COp84x8
mov dword[edi+85h*4],COp85m8
mov dword[edi+86h*4],COp86x8
mov dword[edi+87h*4],COp87m8
mov dword[edi+88h*4],COp88x8
mov dword[edi+89h*4],COp89m8
mov dword[edi+8Ah*4],COp8Am8
mov dword[edi+8Bh*4],COp8B
mov dword[edi+8Ch*4],COp8Cx8
mov dword[edi+8Dh*4],COp8Dm8
mov dword[edi+8Eh*4],COp8Ex8
mov dword[edi+8Fh*4],COp8Fm8
mov dword[edi+90h*4],COp90
mov dword[edi+91h*4],COp91m8
mov dword[edi+92h*4],COp92m8
mov dword[edi+93h*4],COp93m8
mov dword[edi+94h*4],COp94x8
mov dword[edi+95h*4],COp95m8
mov dword[edi+96h*4],COp96x8
mov dword[edi+97h*4],COp97m8
mov dword[edi+98h*4],COp98m8
mov dword[edi+99h*4],COp99m8
mov dword[edi+9Ah*4],COp9A
mov dword[edi+9Bh*4],COp9Bx8
mov dword[edi+9Ch*4],COp9Cm8
mov dword[edi+9Dh*4],COp9Dm8
mov dword[edi+9Eh*4],COp9Em8
mov dword[edi+9Fh*4],COp9Fm8
mov dword[edi+0A0h*4],COpA0x8
mov dword[edi+0A1h*4],COpA1m8
mov dword[edi+0A2h*4],COpA2x8
mov dword[edi+0A3h*4],COpA3m8
mov dword[edi+0A4h*4],COpA4x8
mov dword[edi+0A5h*4],COpA5m8
mov dword[edi+0A6h*4],COpA6x8
mov dword[edi+0A7h*4],COpA7m8
mov dword[edi+0A8h*4],COpA8x8
mov dword[edi+0A9h*4],COpA9m8
mov dword[edi+0AAh*4],COpAAx8
mov dword[edi+0ABh*4],COpAB
mov dword[edi+0ACh*4],COpACx8
mov dword[edi+0ADh*4],COpADm8
mov dword[edi+0AEh*4],COpAEx8
mov dword[edi+0AFh*4],COpAFm8
mov dword[edi+0B0h*4],COpB0
mov dword[edi+0B1h*4],COpB1m8
mov dword[edi+0B2h*4],COpB2m8
mov dword[edi+0B3h*4],COpB3m8
mov dword[edi+0B4h*4],COpB4x8
mov dword[edi+0B5h*4],COpB5m8
mov dword[edi+0B6h*4],COpB6x8
mov dword[edi+0B7h*4],COpB7m8
mov dword[edi+0B8h*4],COpB8
mov dword[edi+0B9h*4],COpB9m8
mov dword[edi+0BAh*4],COpBAx8
mov dword[edi+0BBh*4],COpBBx8
mov dword[edi+0BCh*4],COpBCx8
mov dword[edi+0BDh*4],COpBDm8
mov dword[edi+0BEh*4],COpBEx8
mov dword[edi+0BFh*4],COpBFm8
mov dword[edi+0C0h*4],COpC0x8
mov dword[edi+0C1h*4],COpC1m8
mov dword[edi+0C2h*4],COpC2
mov dword[edi+0C3h*4],COpC3m8
mov dword[edi+0C4h*4],COpC4x8
mov dword[edi+0C5h*4],COpC5m8
mov dword[edi+0C6h*4],COpC6m8
mov dword[edi+0C7h*4],COpC7m8
mov dword[edi+0C8h*4],COpC8x8
mov dword[edi+0C9h*4],COpC9m8
mov dword[edi+0CAh*4],COpCAx8
mov dword[edi+0CBh*4],COpCB
mov dword[edi+0CCh*4],COpCCx8
mov dword[edi+0CDh*4],COpCDm8
mov dword[edi+0CEh*4],COpCEm8
mov dword[edi+0CFh*4],COpCFm8
mov dword[edi+0D0h*4],COpD0
mov dword[edi+0D1h*4],COpD1m8
mov dword[edi+0D2h*4],COpD2m8
mov dword[edi+0D3h*4],COpD3m8
mov dword[edi+0D4h*4],COpD4
mov dword[edi+0D5h*4],COpD5m8
mov dword[edi+0D6h*4],COpD6m8
mov dword[edi+0D7h*4],COpD7m8
mov dword[edi+0D8h*4],COpD8
mov dword[edi+0D9h*4],COpD9m8
mov dword[edi+0DAh*4],COpDAx8
mov dword[edi+0DBh*4],COpDB
mov dword[edi+0DCh*4],COpDC
mov dword[edi+0DDh*4],COpDDm8
mov dword[edi+0DEh*4],COpDEm8
mov dword[edi+0DFh*4],COpDFm8
mov dword[edi+0E0h*4],COpE0x8
mov dword[edi+0E1h*4],COpE1m8nd
mov dword[edi+0E2h*4],COpE2
mov dword[edi+0E3h*4],COpE3m8nd
mov dword[edi+0E4h*4],COpE4x8
mov dword[edi+0E5h*4],COpE5m8nd
mov dword[edi+0E6h*4],COpE6m8
mov dword[edi+0E7h*4],COpE7m8nd
mov dword[edi+0E8h*4],COpE8x8
mov dword[edi+0E9h*4],COpE9m8nd
mov dword[edi+0EAh*4],COpEA
mov dword[edi+0EBh*4],COpEB
mov dword[edi+0ECh*4],COpECx8
mov dword[edi+0EDh*4],COpEDm8nd
mov dword[edi+0EEh*4],COpEEm8
mov dword[edi+0EFh*4],COpEFm8nd
mov dword[edi+0F0h*4],COpF0
mov dword[edi+0F1h*4],COpF1m8nd
mov dword[edi+0F2h*4],COpF2m8nd
mov dword[edi+0F3h*4],COpF3m8nd
mov dword[edi+0F4h*4],COpF4
mov dword[edi+0F5h*4],COpF5m8nd
mov dword[edi+0F6h*4],COpF6m8
mov dword[edi+0F7h*4],COpF7m8nd
mov dword[edi+0F8h*4],COpF8
mov dword[edi+0F9h*4],COpF9m8nd
mov dword[edi+0FAh*4],COpFAx8
mov dword[edi+0FBh*4],COpFB
mov dword[edi+0FCh*4],COpFC
mov dword[edi+0FDh*4],COpFDm8nd
mov dword[edi+0FEh*4],COpFEm8
mov dword[edi+0FFh*4],COpFFm8nd
ret
settablem16:
mov dword[edi+01h*4],COp01m16
mov dword[edi+03h*4],COp03m16
mov dword[edi+04h*4],COp04m16
mov dword[edi+05h*4],COp05m16
mov dword[edi+06h*4],COp06m16
mov dword[edi+07h*4],COp07m16
mov dword[edi+09h*4],COp09m16
mov dword[edi+0Ah*4],COp0Am16
mov dword[edi+0Ch*4],COp0Cm16
mov dword[edi+0Dh*4],COp0Dm16
mov dword[edi+0Eh*4],COp0Em16
mov dword[edi+0Fh*4],COp0Fm16
mov dword[edi+11h*4],COp11m16
mov dword[edi+12h*4],COp12m16
mov dword[edi+13h*4],COp13m16
mov dword[edi+14h*4],COp14m16
mov dword[edi+15h*4],COp15m16
mov dword[edi+16h*4],COp16m16
mov dword[edi+17h*4],COp17m16
mov dword[edi+19h*4],COp19m16
mov dword[edi+1Ah*4],COp1Am16
mov dword[edi+1Ch*4],COp1Cm16
mov dword[edi+1Dh*4],COp1Dm16
mov dword[edi+1Eh*4],COp1Em16
mov dword[edi+1Fh*4],COp1Fm16
mov dword[edi+21h*4],COp21m16
mov dword[edi+23h*4],COp23m16
mov dword[edi+24h*4],COp24m16
mov dword[edi+25h*4],COp25m16
mov dword[edi+26h*4],COp26m16
mov dword[edi+27h*4],COp27m16
mov dword[edi+29h*4],COp29m16
mov dword[edi+2Ah*4],COp2Am16
mov dword[edi+2Ch*4],COp2Cm16
mov dword[edi+2Dh*4],COp2Dm16
mov dword[edi+2Eh*4],COp2Em16
mov dword[edi+2Fh*4],COp2Fm16
mov dword[edi+31h*4],COp31m16
mov dword[edi+32h*4],COp32m16
mov dword[edi+33h*4],COp33m16
mov dword[edi+34h*4],COp34m16
mov dword[edi+35h*4],COp35m16
mov dword[edi+36h*4],COp36m16
mov dword[edi+37h*4],COp37m16
mov dword[edi+39h*4],COp39m16
mov dword[edi+3Ah*4],COp3Am16
mov dword[edi+3Ch*4],COp3Cm16
mov dword[edi+3Dh*4],COp3Dm16
mov dword[edi+3Eh*4],COp3Em16
mov dword[edi+3Fh*4],COp3Fm16
mov dword[edi+41h*4],COp41m16
mov dword[edi+43h*4],COp43m16
mov dword[edi+45h*4],COp45m16
mov dword[edi+46h*4],COp46m16
mov dword[edi+47h*4],COp47m16
mov dword[edi+48h*4],COp48m16
mov dword[edi+49h*4],COp49m16
mov dword[edi+4Ah*4],COp4Am16
mov dword[edi+4Dh*4],COp4Dm16
mov dword[edi+4Eh*4],COp4Em16
mov dword[edi+4Fh*4],COp4Fm16
mov dword[edi+51h*4],COp51m16
mov dword[edi+52h*4],COp52m16
mov dword[edi+53h*4],COp53m16
mov dword[edi+55h*4],COp55m16
mov dword[edi+56h*4],COp56m16
mov dword[edi+57h*4],COp57m16
mov dword[edi+59h*4],COp59m16
mov dword[edi+5Dh*4],COp5Dm16
mov dword[edi+5Eh*4],COp5Em16
mov dword[edi+5Fh*4],COp5Fm16
mov dword[edi+61h*4],COp61m16nd
mov dword[edi+63h*4],COp63m16nd
mov dword[edi+64h*4],COp64m16
mov dword[edi+65h*4],COp65m16nd
mov dword[edi+66h*4],COp66m16
mov dword[edi+67h*4],COp67m16nd
mov dword[edi+68h*4],COp68m16
mov dword[edi+69h*4],COp69m16nd
mov dword[edi+6Ah*4],COp6Am16
mov dword[edi+6Dh*4],COp6Dm16nd
mov dword[edi+6Eh*4],COp6Em16
mov dword[edi+6Fh*4],COp6Fm16nd
mov dword[edi+71h*4],COp71m16nd
mov dword[edi+72h*4],COp72m16nd
mov dword[edi+73h*4],COp73m16nd
mov dword[edi+74h*4],COp74m16
mov dword[edi+75h*4],COp75m16nd
mov dword[edi+76h*4],COp76m16
mov dword[edi+77h*4],COp77m16nd
mov dword[edi+79h*4],COp79m16nd
mov dword[edi+7Dh*4],COp7Dm16nd
mov dword[edi+7Eh*4],COp7Em16
mov dword[edi+7Fh*4],COp7Fm16nd
mov dword[edi+81h*4],COp81m16
mov dword[edi+83h*4],COp83m16
mov dword[edi+85h*4],COp85m16
mov dword[edi+87h*4],COp87m16
mov dword[edi+89h*4],COp89m16
mov dword[edi+8Ah*4],COp8Am16
mov dword[edi+8Dh*4],COp8Dm16
mov dword[edi+8Fh*4],COp8Fm16
mov dword[edi+91h*4],COp91m16
mov dword[edi+92h*4],COp92m16
mov dword[edi+93h*4],COp93m16
mov dword[edi+95h*4],COp95m16
mov dword[edi+97h*4],COp97m16
mov dword[edi+98h*4],COp98m16
mov dword[edi+99h*4],COp99m16
mov dword[edi+9Ch*4],COp9Cm16
mov dword[edi+9Dh*4],COp9Dm16
mov dword[edi+9Eh*4],COp9Em16
mov dword[edi+9Fh*4],COp9Fm16
mov dword[edi+0A1h*4],COpA1m16
mov dword[edi+0A3h*4],COpA3m16
mov dword[edi+0A5h*4],COpA5m16
mov dword[edi+0A7h*4],COpA7m16
mov dword[edi+0A9h*4],COpA9m16
mov dword[edi+0ADh*4],COpADm16
mov dword[edi+0AFh*4],COpAFm16
mov dword[edi+0B1h*4],COpB1m16
mov dword[edi+0B2h*4],COpB2m16
mov dword[edi+0B3h*4],COpB3m16
mov dword[edi+0B5h*4],COpB5m16
mov dword[edi+0B7h*4],COpB7m16
mov dword[edi+0B9h*4],COpB9m16
mov dword[edi+0BDh*4],COpBDm16
mov dword[edi+0BFh*4],COpBFm16
mov dword[edi+0C1h*4],COpC1m16
mov dword[edi+0C3h*4],COpC3m16
mov dword[edi+0C5h*4],COpC5m16
mov dword[edi+0C6h*4],COpC6m16
mov dword[edi+0C7h*4],COpC7m16
mov dword[edi+0C9h*4],COpC9m16
mov dword[edi+0CDh*4],COpCDm16
mov dword[edi+0CEh*4],COpCEm16
mov dword[edi+0CFh*4],COpCFm16
mov dword[edi+0D1h*4],COpD1m16
mov dword[edi+0D2h*4],COpD2m16
mov dword[edi+0D3h*4],COpD3m16
mov dword[edi+0D5h*4],COpD5m16
mov dword[edi+0D6h*4],COpD6m16
mov dword[edi+0D7h*4],COpD7m16
mov dword[edi+0D9h*4],COpD9m16
mov dword[edi+0DDh*4],COpDDm16
mov dword[edi+0DEh*4],COpDEm16
mov dword[edi+0DFh*4],COpDFm16
mov dword[edi+0E1h*4],COpE1m16nd
mov dword[edi+0E3h*4],COpE3m16nd
mov dword[edi+0E5h*4],COpE5m16nd
mov dword[edi+0E6h*4],COpE6m16
mov dword[edi+0E7h*4],COpE7m16nd
mov dword[edi+0E9h*4],COpE9m16nd
mov dword[edi+0EDh*4],COpEDm16nd
mov dword[edi+0EEh*4],COpEEm16
mov dword[edi+0EFh*4],COpEFm16nd
mov dword[edi+0F1h*4],COpF1m16nd
mov dword[edi+0F2h*4],COpF2m16nd
mov dword[edi+0F3h*4],COpF3m16nd
mov dword[edi+0F5h*4],COpF5m16nd
mov dword[edi+0F6h*4],COpF6m16
mov dword[edi+0F7h*4],COpF7m16nd
mov dword[edi+0F9h*4],COpF9m16nd
mov dword[edi+0FDh*4],COpFDm16nd
mov dword[edi+0FEh*4],COpFEm16
mov dword[edi+0FFh*4],COpFFm16nd
ret
settablex16:
mov dword[edi+5Ah*4],COp5Ax16
mov dword[edi+7Ah*4],COp7Ax16
mov dword[edi+84h*4],COp84x16
mov dword[edi+86h*4],COp86x16
mov dword[edi+88h*4],COp88x16
mov dword[edi+8Ch*4],COp8Cx16
mov dword[edi+8Eh*4],COp8Ex16
mov dword[edi+94h*4],COp94x16
mov dword[edi+96h*4],COp96x16
mov dword[edi+9Bh*4],COp9Bx16
mov dword[edi+0A0h*4],COpA0x16
mov dword[edi+0A2h*4],COpA2x16
mov dword[edi+0A4h*4],COpA4x16
mov dword[edi+0A6h*4],COpA6x16
mov dword[edi+0A8h*4],COpA8x16
mov dword[edi+0AAh*4],COpAAx16
mov dword[edi+0ACh*4],COpACx16
mov dword[edi+0AEh*4],COpAEx16
mov dword[edi+0B4h*4],COpB4x16
mov dword[edi+0B6h*4],COpB6x16
mov dword[edi+0BAh*4],COpBAx16
mov dword[edi+0BBh*4],COpBBx16
mov dword[edi+0BCh*4],COpBCx16
mov dword[edi+0BEh*4],COpBEx16
mov dword[edi+0C0h*4],COpC0x16
mov dword[edi+0C4h*4],COpC4x16
mov dword[edi+0C8h*4],COpC8x16
mov dword[edi+0CAh*4],COpCAx16
mov dword[edi+0CCh*4],COpCCx16
mov dword[edi+0DAh*4],COpDAx16
mov dword[edi+0E0h*4],COpE0x16
mov dword[edi+0E4h*4],COpE4x16
mov dword[edi+0E8h*4],COpE8x16
mov dword[edi+0ECh*4],COpECx16
mov dword[edi+0FAh*4],COpFAx16
ret
settableDm8:
mov dword[edi+61h*4],COp61m8d
mov dword[edi+63h*4],COp63m8d
mov dword[edi+65h*4],COp65m8d
mov dword[edi+67h*4],COp67m8d
mov dword[edi+69h*4],COp69m8d
mov dword[edi+6Dh*4],COp6Dm8d
mov dword[edi+6Fh*4],COp6Fm8d
mov dword[edi+71h*4],COp71m8d
mov dword[edi+72h*4],COp72m8d
mov dword[edi+73h*4],COp73m8d
mov dword[edi+75h*4],COp75m8d
mov dword[edi+77h*4],COp77m8d
mov dword[edi+79h*4],COp79m8d
mov dword[edi+7Dh*4],COp7Dm8d
mov dword[edi+7Fh*4],COp7Fm8d
mov dword[edi+0E1h*4],COpE1m8d
mov dword[edi+0E3h*4],COpE3m8d
mov dword[edi+0E5h*4],COpE5m8d
mov dword[edi+0E7h*4],COpE7m8d
mov dword[edi+0E9h*4],COpE9m8d
mov dword[edi+0EDh*4],COpEDm8d
mov dword[edi+0EFh*4],COpEFm8d
mov dword[edi+0F1h*4],COpF1m8d
mov dword[edi+0F2h*4],COpF2m8d
mov dword[edi+0F3h*4],COpF3m8d
mov dword[edi+0F5h*4],COpF5m8d
mov dword[edi+0F7h*4],COpF7m8d
mov dword[edi+0F9h*4],COpF9m8d
mov dword[edi+0FDh*4],COpFDm8d
mov dword[edi+0FFh*4],COpFFm8d
ret
settableDm16:
mov dword[edi+61h*4],COp61m16d
mov dword[edi+63h*4],COp63m16d
mov dword[edi+65h*4],COp65m16d
mov dword[edi+67h*4],COp67m16d
mov dword[edi+69h*4],COp69m16d
mov dword[edi+6Dh*4],COp6Dm16d
mov dword[edi+6Fh*4],COp6Fm16d
mov dword[edi+71h*4],COp71m16d
mov dword[edi+72h*4],COp72m16d
mov dword[edi+73h*4],COp73m16d
mov dword[edi+75h*4],COp75m16d
mov dword[edi+77h*4],COp77m16d
mov dword[edi+79h*4],COp79m16d
mov dword[edi+7Dh*4],COp7Dm16d
mov dword[edi+7Fh*4],COp7Fm16d
mov dword[edi+0E1h*4],COpE1m16d
mov dword[edi+0E3h*4],COpE3m16d
mov dword[edi+0E5h*4],COpE5m16d
mov dword[edi+0E7h*4],COpE7m16d
mov dword[edi+0E9h*4],COpE9m16d
mov dword[edi+0EDh*4],COpEDm16d
mov dword[edi+0EFh*4],COpEFm16d
mov dword[edi+0F1h*4],COpF1m16d
mov dword[edi+0F2h*4],COpF2m16d
mov dword[edi+0F3h*4],COpF3m16d
mov dword[edi+0F5h*4],COpF5m16d
mov dword[edi+0F7h*4],COpF7m16d
mov dword[edi+0F9h*4],COpF9m16d
mov dword[edi+0FDh*4],COpFDm16d
mov dword[edi+0FFh*4],COpFFm16d
ret