o cleanup
This commit is contained in:
1693
tools/zsnes/src/cpu/65816d.inc
Normal file
1693
tools/zsnes/src/cpu/65816d.inc
Normal file
File diff suppressed because it is too large
Load Diff
1707
tools/zsnes/src/cpu/65816dc.inc
Normal file
1707
tools/zsnes/src/cpu/65816dc.inc
Normal file
File diff suppressed because it is too large
Load Diff
810
tools/zsnes/src/cpu/address.inc
Normal file
810
tools/zsnes/src/cpu/address.inc
Normal file
@@ -0,0 +1,810 @@
|
||||
;Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach )
|
||||
;
|
||||
;http://www.zsnes.com
|
||||
;http://sourceforge.net/projects/zsnes
|
||||
;https://zsnes.bountysource.com
|
||||
;
|
||||
;This program is free software; you can redistribute it and/or
|
||||
;modify it under the terms of the GNU General Public License
|
||||
;version 2 as published by the Free Software Foundation.
|
||||
;
|
||||
;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_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
|
||||
|
||||
|
||||
795
tools/zsnes/src/cpu/address2.inc
Normal file
795
tools/zsnes/src/cpu/address2.inc
Normal file
@@ -0,0 +1,795 @@
|
||||
;Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach )
|
||||
;
|
||||
;http://www.zsnes.com
|
||||
;http://sourceforge.net/projects/zsnes
|
||||
;https://zsnes.bountysource.com
|
||||
;
|
||||
;This program is free software; you can redistribute it and/or
|
||||
;modify it under the terms of the GNU General Public License
|
||||
;version 2 as published by the Free Software Foundation.
|
||||
;
|
||||
;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
|
||||
|
||||
|
||||
408
tools/zsnes/src/cpu/addrni.inc
Normal file
408
tools/zsnes/src/cpu/addrni.inc
Normal file
@@ -0,0 +1,408 @@
|
||||
;Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach )
|
||||
;
|
||||
;http://www.zsnes.com
|
||||
;http://sourceforge.net/projects/zsnes
|
||||
;https://zsnes.bountysource.com
|
||||
;
|
||||
;This program is free software; you can redistribute it and/or
|
||||
;modify it under the terms of the GNU General Public License
|
||||
;version 2 as published by the Free Software Foundation.
|
||||
;
|
||||
;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
|
||||
|
||||
|
||||
|
||||
1310
tools/zsnes/src/cpu/dma.asm
Normal file
1310
tools/zsnes/src/cpu/dma.asm
Normal file
File diff suppressed because it is too large
Load Diff
2836
tools/zsnes/src/cpu/dsp.asm
Normal file
2836
tools/zsnes/src/cpu/dsp.asm
Normal file
File diff suppressed because it is too large
Load Diff
5203
tools/zsnes/src/cpu/dspproc.asm
Normal file
5203
tools/zsnes/src/cpu/dspproc.asm
Normal file
File diff suppressed because it is too large
Load Diff
2001
tools/zsnes/src/cpu/e65816.inc
Normal file
2001
tools/zsnes/src/cpu/e65816.inc
Normal file
File diff suppressed because it is too large
Load Diff
1992
tools/zsnes/src/cpu/e65816c.inc
Normal file
1992
tools/zsnes/src/cpu/e65816c.inc
Normal file
File diff suppressed because it is too large
Load Diff
2206
tools/zsnes/src/cpu/execute.asm
Normal file
2206
tools/zsnes/src/cpu/execute.asm
Normal file
File diff suppressed because it is too large
Load Diff
46
tools/zsnes/src/cpu/executec.c
Normal file
46
tools/zsnes/src/cpu/executec.c
Normal file
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach )
|
||||
|
||||
http://www.zsnes.com
|
||||
http://sourceforge.net/projects/zsnes
|
||||
https://zsnes.bountysource.com
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
version 2 as published by the Free Software Foundation.
|
||||
|
||||
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.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#ifdef __UNIXSDL__
|
||||
#include "../gblhdr.h"
|
||||
#define DIR_SLASH "/"
|
||||
#else
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#define DIR_SLASH "\\"
|
||||
#endif
|
||||
#include "../gblvars.h"
|
||||
|
||||
|
||||
//Start of execute.asm goodness
|
||||
extern unsigned char t1cc; // not sure about this one
|
||||
extern unsigned short int nextframe; // framecounter for frameskipping
|
||||
|
||||
void Game60hzcall()
|
||||
{
|
||||
t1cc++;
|
||||
nextframe++;
|
||||
}
|
||||
|
||||
6171
tools/zsnes/src/cpu/firtable.inc
Normal file
6171
tools/zsnes/src/cpu/firtable.inc
Normal file
File diff suppressed because it is too large
Load Diff
553
tools/zsnes/src/cpu/irq.asm
Normal file
553
tools/zsnes/src/cpu/irq.asm
Normal file
@@ -0,0 +1,553 @@
|
||||
;Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach )
|
||||
;
|
||||
;http://www.zsnes.com
|
||||
;http://sourceforge.net/projects/zsnes
|
||||
;https://zsnes.bountysource.com
|
||||
;
|
||||
;This program is free software; you can redistribute it and/or
|
||||
;modify it under the terms of the GNU General Public License
|
||||
;version 2 as published by the Free Software Foundation.
|
||||
;
|
||||
;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,SfxSCMR,curnmi,execloop,initaddrl,nmiv,snesmap2
|
||||
EXTSYM snesmmap,stackand,stackor,xe,xirqb,xpb,xpc,xs,irqon,irqv,irqv8
|
||||
EXTSYM execloopdeb,nmiv8,membank0w8
|
||||
|
||||
; 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
|
||||
|
||||
SECTION .text
|
||||
|
||||
;*******************************************************
|
||||
; SwitchToNMI/VIRQ Calls NMI/VIRQ
|
||||
;*******************************************************
|
||||
NEWSYM switchtonmi
|
||||
mov byte[curnmi],1
|
||||
sub dh,100
|
||||
test byte[xe],1
|
||||
jne near NMIemulmode
|
||||
mov ebx,esi
|
||||
sub ebx,[initaddrl]
|
||||
mov [xpc],bx
|
||||
|
||||
xor ebx,ebx
|
||||
|
||||
mov cx,[xs]
|
||||
mov al,[xpb]
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
mov al,[xpc+1]
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
mov al,[xpc]
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
makedl
|
||||
mov al,dl
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
mov [xs],cx
|
||||
|
||||
xor bh,bh
|
||||
mov bl,[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 cx,[xs]
|
||||
mov al,[xpc+1]
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
mov al,[xpc]
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
makedl
|
||||
mov al,dl
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
mov [xs],cx
|
||||
|
||||
xor bh,bh
|
||||
mov [xpb],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
|
||||
sub dh,3
|
||||
test byte[xe],1
|
||||
jne near IRQemulmode
|
||||
|
||||
mov ebx,esi
|
||||
sub ebx,[initaddrl]
|
||||
mov [xpc],bx
|
||||
|
||||
mov cx,[xs]
|
||||
mov al,[xpb]
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
mov al,[xpc+1]
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
mov al,[xpc]
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
makedl
|
||||
mov al,dl
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
mov [xs],cx
|
||||
|
||||
xor bh,bh
|
||||
mov bl,[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
|
||||
|
||||
mov cx,[xs]
|
||||
mov al,[xpb]
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
mov al,[xpc+1]
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
mov al,[xpc]
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
makedl
|
||||
mov al,dl
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
mov [xs],cx
|
||||
|
||||
xor bh,bh
|
||||
mov bl,[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 cx,[xs]
|
||||
mov al,[xpc+1]
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
mov al,[xpc]
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
makedl
|
||||
mov al,dl
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
mov [xs],cx
|
||||
|
||||
xor bh,bh
|
||||
mov [xpb],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
|
||||
|
||||
mov cx,[xs]
|
||||
mov al,[xpb]
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
mov al,[xpc+1]
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
mov al,[xpc]
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
makedl
|
||||
mov al,dl
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
mov [xs],cx
|
||||
|
||||
xor bh,bh
|
||||
mov bl,[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 cx,[xs]
|
||||
mov al,[xpc+1]
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
mov al,[xpc]
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
makedl
|
||||
mov al,dl
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
mov [xs],cx
|
||||
|
||||
xor bh,bh
|
||||
mov [xpb],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
|
||||
|
||||
mov cx,[xs]
|
||||
mov al,[xpb]
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
mov al,[xpc+1]
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
mov al,[xpc]
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
makedl
|
||||
mov al,dl
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
mov [xs],cx
|
||||
|
||||
xor bh,bh
|
||||
mov bl,[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 cx,[xs]
|
||||
mov al,[xpc+1]
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
mov al,[xpc]
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
makedl
|
||||
mov al,dl
|
||||
call membank0w8
|
||||
dec cx
|
||||
and cx,word[stackand]
|
||||
or cx,word[stackor]
|
||||
|
||||
mov [xs],cx
|
||||
|
||||
xor bh,bh
|
||||
mov [xpb],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
|
||||
2271
tools/zsnes/src/cpu/memory.asm
Normal file
2271
tools/zsnes/src/cpu/memory.asm
Normal file
File diff suppressed because it is too large
Load Diff
365
tools/zsnes/src/cpu/memtable.c
Normal file
365
tools/zsnes/src/cpu/memtable.c
Normal file
@@ -0,0 +1,365 @@
|
||||
/*
|
||||
Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach )
|
||||
|
||||
http://www.zsnes.com
|
||||
http://sourceforge.net/projects/zsnes
|
||||
https://zsnes.bountysource.com
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
version 2 as published by the Free Software Foundation.
|
||||
|
||||
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.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#ifdef __UNIXSDL__
|
||||
#include "../gblhdr.h"
|
||||
#define DIR_SLASH "/"
|
||||
#else
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#define DIR_SLASH "\\"
|
||||
#endif
|
||||
#include "memtable.h"
|
||||
#include "../gblvars.h"
|
||||
|
||||
extern unsigned int Curtableaddr, tableA[256];
|
||||
|
||||
void PrepareOffset()
|
||||
{
|
||||
Curtableaddr -= (unsigned int)tableA;
|
||||
}
|
||||
|
||||
void ResetOffset()
|
||||
{
|
||||
Curtableaddr += (unsigned int)tableA;
|
||||
}
|
||||
|
||||
extern unsigned int snesmmap[256], snesmap2[256];
|
||||
|
||||
void BankSwitchSDD1C (unsigned char bankval, unsigned int offset)
|
||||
{
|
||||
unsigned int curbankval = bankval, i;
|
||||
|
||||
curbankval &= 7;
|
||||
curbankval <<= 20;
|
||||
curbankval += (unsigned int)romdata;
|
||||
|
||||
for (i=0; i<16 ; i++)
|
||||
{
|
||||
snesmap2[offset+i] = curbankval;
|
||||
snesmmap[offset+i] = curbankval;
|
||||
curbankval += 0x10000;
|
||||
}
|
||||
}
|
||||
|
||||
extern unsigned char SDD1BankA, SDD1BankB, SDD1BankC, SDD1BankD;
|
||||
|
||||
void UpdateBanksSDD1()
|
||||
{
|
||||
if (SDD1BankA)
|
||||
{
|
||||
BankSwitchSDD1C(SDD1BankA, 0x0C0);
|
||||
BankSwitchSDD1C(SDD1BankB, 0x0D0);
|
||||
BankSwitchSDD1C(SDD1BankC, 0x0E0);
|
||||
BankSwitchSDD1C(SDD1BankD, 0x0F0);
|
||||
}
|
||||
}
|
||||
|
||||
extern void (*Bank0datr8[256])(), (*Bank0datr16[256])(), (*Bank0datw8[256])(), (*Bank0datw16[256])();
|
||||
extern void *DPageR8, *DPageR16, *DPageW8, *DPageW16;
|
||||
|
||||
extern unsigned int xdb, xpb, xs, xx, xy, xd;
|
||||
extern unsigned short oamaddrt, xat, xst, xdt, xxt, xyt;
|
||||
extern unsigned char xdbt, xpbt;
|
||||
|
||||
void UpdateDPageC()
|
||||
{
|
||||
DPageR8 = Bank0datr8[(xd >> 8) & 0xFF];
|
||||
DPageR16 = Bank0datr16[(xd >> 8) & 0xFF];
|
||||
DPageW8 = Bank0datw8[(xd >> 8) & 0xFF];
|
||||
DPageW16 = Bank0datw16[(xd >> 8) & 0xFF];
|
||||
}
|
||||
|
||||
extern unsigned int SA1xd;
|
||||
extern void *SA1DPageR8, *SA1DPageR16, *SA1DPageW8, *SA1DPageW16;
|
||||
|
||||
void SA1UpdateDPageC()
|
||||
{
|
||||
SA1DPageR8 = Bank0datr8[(SA1xd >> 8) & 0xFF];
|
||||
SA1DPageR16 = Bank0datr16[(SA1xd >> 8) & 0xFF];
|
||||
SA1DPageW8 = Bank0datw8[(SA1xd >> 8) & 0xFF];
|
||||
SA1DPageW16 = Bank0datw16[(SA1xd >> 8) & 0xFF];
|
||||
}
|
||||
|
||||
void unpackfunct()
|
||||
{
|
||||
oamaddrt = (oamaddr & 0xFFFF);
|
||||
xat = (xa & 0xFFFF);
|
||||
xdbt = (xdb & 0xFF);
|
||||
xpbt = (xpb & 0xFF);
|
||||
xst = (xs & 0xFFFF);
|
||||
xdt = (xd & 0xFFFF);
|
||||
xxt = (xx & 0xFFFF);
|
||||
xyt = (xy & 0xFFFF);
|
||||
}
|
||||
|
||||
#define bit_test(byte, checkbit) (byte & (1 << checkbit)) ? 1 : 0
|
||||
|
||||
extern unsigned int GlobalVL, GlobalVR, EchoVL, EchoVR, EchoRate[16], MaxEcho;
|
||||
extern unsigned int EchoFB, NoiseSpeeds[32], dspPAdj, NoiseInc, bg1ptrx;
|
||||
extern unsigned int bg1ptry, bg2ptrx, bg2ptry, bg3ptrx, bg3ptry, bg4ptrx;
|
||||
extern unsigned int bg4ptry;
|
||||
extern int FIRTAPVal0, FIRTAPVal1, FIRTAPVal2, FIRTAPVal3, FIRTAPVal4;
|
||||
extern int FIRTAPVal5, FIRTAPVal6, FIRTAPVal7;
|
||||
extern unsigned short VolumeConvTable[32768], bg1ptr, bg1ptrb, bg1ptrc;
|
||||
extern unsigned short bg2ptr, bg2ptrb, bg2ptrc, bg3ptr, bg3ptrb, bg3ptrc;
|
||||
extern unsigned short bg4ptr, bg4ptrb, bg4ptrc;
|
||||
extern unsigned char VolumeTableb[256], MusicVol, Voice0Status;
|
||||
extern unsigned char Voice1Status, Voice2Status, Voice3Status, Voice4Status;
|
||||
extern unsigned char Voice5Status, Voice6Status, Voice7Status, Voice0Noise;
|
||||
extern unsigned char Voice1Noise, Voice2Noise, Voice3Noise, Voice4Noise;
|
||||
extern unsigned char Voice5Noise, Voice6Noise, Voice7Noise, bgtilesz;
|
||||
extern unsigned char BG116x16t, BG216x16t, BG316x16t, BG416x16t, vramincby8on;
|
||||
extern unsigned char vramincr;
|
||||
|
||||
extern void (**regptw)();
|
||||
void reg2118();
|
||||
void reg2118inc();
|
||||
void reg2118inc8();
|
||||
void reg2118inc8inc();
|
||||
void reg2119();
|
||||
void reg2119inc();
|
||||
void reg2119inc8();
|
||||
void reg2119inc8inc();
|
||||
|
||||
void repackfunct()
|
||||
{
|
||||
unsigned char block;
|
||||
|
||||
// Global/Echo Volumes
|
||||
GlobalVL = (VolumeConvTable[(MusicVol << 8) + VolumeTableb[DSPMem[0x0C]]] & 0xFF);
|
||||
GlobalVR = (VolumeConvTable[(MusicVol << 8) + VolumeTableb[DSPMem[0x1C]]] & 0xFF);
|
||||
EchoVL = (VolumeConvTable[(MusicVol << 8) + VolumeTableb[DSPMem[0x2C]]] & 0xFF);
|
||||
EchoVR = (VolumeConvTable[(MusicVol << 8) + VolumeTableb[DSPMem[0x3C]]] & 0xFF);
|
||||
|
||||
// Echo Values
|
||||
MaxEcho = EchoRate[(DSPMem[0x7D] & 0xF)];
|
||||
EchoFB = VolumeTableb[DSPMem[0x0D]];
|
||||
|
||||
// FIR Filter Values
|
||||
FIRTAPVal0 = (char)DSPMem[0x0F];
|
||||
FIRTAPVal1 = (char)DSPMem[0x1F];
|
||||
FIRTAPVal2 = (char)DSPMem[0x2F];
|
||||
FIRTAPVal3 = (char)DSPMem[0x3F];
|
||||
FIRTAPVal4 = (char)DSPMem[0x4F];
|
||||
FIRTAPVal5 = (char)DSPMem[0x5F];
|
||||
FIRTAPVal6 = (char)DSPMem[0x6F];
|
||||
FIRTAPVal7 = (char)DSPMem[0x7F];
|
||||
|
||||
// Noise
|
||||
block = DSPMem[0x6C];
|
||||
DSPMem[0x6C] &= 0x7F;
|
||||
|
||||
if (block & 0xC0)
|
||||
{
|
||||
Voice0Status = Voice1Status = Voice2Status = Voice3Status = 0;
|
||||
Voice4Status = Voice5Status = Voice6Status = Voice7Status = 0;
|
||||
}
|
||||
|
||||
NoiseInc = (((NoiseSpeeds[(block & 0x1F)] * dspPAdj) >> 17) & 0xFFFFFFFF);
|
||||
|
||||
Voice0Noise = bit_test(DSPMem[0x3D], 0);
|
||||
Voice1Noise = bit_test(DSPMem[0x3D], 1);
|
||||
Voice2Noise = bit_test(DSPMem[0x3D], 2);
|
||||
Voice3Noise = bit_test(DSPMem[0x3D], 3);
|
||||
Voice4Noise = bit_test(DSPMem[0x3D], 4);
|
||||
Voice5Noise = bit_test(DSPMem[0x3D], 5);
|
||||
Voice6Noise = bit_test(DSPMem[0x3D], 6);
|
||||
Voice7Noise = bit_test(DSPMem[0x3D], 7);
|
||||
|
||||
bg1ptrx = bg1ptrb - bg1ptr;
|
||||
bg1ptry = bg1ptrc - bg1ptr;
|
||||
bg2ptrx = bg2ptrb - bg2ptr;
|
||||
bg2ptry = bg2ptrc - bg2ptr;
|
||||
bg3ptrx = bg3ptrb - bg3ptr;
|
||||
bg3ptry = bg3ptrc - bg3ptr;
|
||||
bg4ptrx = bg4ptrb - bg4ptr;
|
||||
bg4ptry = bg4ptrc - bg4ptr;
|
||||
|
||||
// 16x16 tiles
|
||||
BG116x16t = bit_test(bgtilesz, 0);
|
||||
BG216x16t = bit_test(bgtilesz, 1);
|
||||
BG316x16t = bit_test(bgtilesz, 2);
|
||||
BG416x16t = bit_test(bgtilesz, 3);
|
||||
|
||||
oamaddr = oamaddrt;
|
||||
xa = xat;
|
||||
xdb = xdbt;
|
||||
xpb = xpbt;
|
||||
xs = xst;
|
||||
xd = xdt;
|
||||
xx = xxt;
|
||||
xy = xyt;
|
||||
|
||||
if (vramincby8on == 1)
|
||||
{
|
||||
if (vramincr == 1)
|
||||
{
|
||||
regptw[0x2118] = reg2118inc8inc;
|
||||
regptw[0x2119] = reg2119inc8;
|
||||
}
|
||||
else
|
||||
{
|
||||
regptw[0x2118] = reg2118inc8;
|
||||
regptw[0x2119] = reg2119inc8inc;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (vramincr == 1)
|
||||
{
|
||||
regptw[0x2118] = reg2118inc;
|
||||
regptw[0x2119] = reg2119;
|
||||
}
|
||||
else
|
||||
{
|
||||
regptw[0x2118] = reg2118;
|
||||
regptw[0x2119] = reg2119inc;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void regaccessbankr8(), regaccessbankw8(), regaccessbankr16(), regaccessbankw16();
|
||||
void memaccessbankr8(), memaccessbankw8(), memaccessbankr16(), memaccessbankw16();
|
||||
void wramaccessbankr8(), wramaccessbankw8(), wramaccessbankr16(), wramaccessbankw16();
|
||||
void sramaccessbankr8(), sramaccessbankw8(), sramaccessbankr16(), sramaccessbankw16();
|
||||
void eramaccessbankr8(), eramaccessbankw8(), eramaccessbankr16(), eramaccessbankw16();
|
||||
|
||||
void regaccessbankr8SA1(), regaccessbankw8SA1(), regaccessbankr16SA1(), regaccessbankw16SA1();
|
||||
void SA1RAMaccessbankr8(), SA1RAMaccessbankw8(), SA1RAMaccessbankr16(), SA1RAMaccessbankw16();
|
||||
void SA1RAMaccessbankr8b(), SA1RAMaccessbankw8b(), SA1RAMaccessbankr16b(), SA1RAMaccessbankw16b();
|
||||
|
||||
void sramaccessbankr8s(), sramaccessbankw8s(), sramaccessbankr16s(), sramaccessbankw16s();
|
||||
void DSP1Read8b3F(), DSP1Write8b3F(), DSP1Read16b3F(), DSP1Write16b3F();
|
||||
void DSP2Read8b(), DSP2Write8b(), DSP2Read16b(), DSP2Write16b();
|
||||
void DSP3Read8b(), DSP3Write8b(), DSP3Read16b(), DSP3Write16b();
|
||||
void DSP4Read8b(), DSP4Write8b(), DSP4Read16b(), DSP4Write16b();
|
||||
void setaaccessbankr8(), setaaccessbankw8(), setaaccessbankr16(), setaaccessbankw16();
|
||||
void setaaccessbankr8a(), setaaccessbankw8a(), setaaccessbankr16a(), setaaccessbankw16a();
|
||||
void Seta11Read8_60(), Seta11Write8_60(), Seta11Read16_60(), Seta11Write16_60();
|
||||
void Seta11Read8_68(), Seta11Write8_68(), Seta11Read16_68(), Seta11Write16_68();
|
||||
void sfxaccessbankr8(), sfxaccessbankw8(), sfxaccessbankr16(), sfxaccessbankw16();
|
||||
void sfxaccessbankr8b(), sfxaccessbankw8b(), sfxaccessbankr16b(), sfxaccessbankw16b();
|
||||
void sfxaccessbankr8c(), sfxaccessbankw8c(), sfxaccessbankr16c(), sfxaccessbankw16c();
|
||||
void sfxaccessbankr8d(), sfxaccessbankw8d(), sfxaccessbankr16d(), sfxaccessbankw16d();
|
||||
void OBC1Read8b(), OBC1Write8b(), OBC1Read16b(), OBC1Write16b();
|
||||
void C4Read8b(), C4Write8b(), C4Read16b(), C4Write16b();
|
||||
void memaccessspc7110r8(), memaccessspc7110r16(), memaccessspc7110w8(), memaccessspc7110w16();
|
||||
void SPC7110ReadSRAM8b(), SPC7110ReadSRAM16b(), SPC7110WriteSRAM8b(), SPC7110WriteSRAM16b();
|
||||
void stsramr8(), stsramr16(), stsramw8(), stsramw16();
|
||||
void stsramr8b(), stsramr16b(), stsramw8b(), stsramw16b();
|
||||
|
||||
mrwp regbank = { regaccessbankr8, regaccessbankw8, regaccessbankr16, regaccessbankw16 };
|
||||
mrwp membank = { memaccessbankr8, memaccessbankw8, memaccessbankr16, memaccessbankw16 };
|
||||
mrwp wrambank = { wramaccessbankr8, wramaccessbankw8, wramaccessbankr16, wramaccessbankw16 };
|
||||
mrwp srambank = { sramaccessbankr8, sramaccessbankw8, sramaccessbankr16, sramaccessbankw16 };
|
||||
mrwp erambank = { eramaccessbankr8, eramaccessbankw8, eramaccessbankr16, eramaccessbankw16 };
|
||||
|
||||
mrwp sa1regbank = { regaccessbankr8SA1, regaccessbankw8SA1, regaccessbankr16SA1, regaccessbankw16SA1 };
|
||||
mrwp sa1rambank = { SA1RAMaccessbankr8, SA1RAMaccessbankw8, SA1RAMaccessbankr16, SA1RAMaccessbankw16 };
|
||||
mrwp sa1rambankb = { SA1RAMaccessbankr8b, SA1RAMaccessbankw8b, SA1RAMaccessbankr16b, SA1RAMaccessbankw16b };
|
||||
|
||||
mrwp sramsbank = { sramaccessbankr8s, sramaccessbankw8s, sramaccessbankr16s, sramaccessbankw16s };
|
||||
mrwp dsp1bank = { DSP1Read8b3F, DSP1Write8b3F, DSP1Read16b3F, DSP1Write16b3F };
|
||||
mrwp dsp2bank = { DSP2Read8b, DSP2Write8b, DSP2Read16b, DSP2Write16b };
|
||||
mrwp dsp3bank = { DSP3Read8b, DSP3Write8b, DSP3Read16b, DSP3Write16b };
|
||||
mrwp dsp4bank = { DSP4Read8b, DSP4Write8b, DSP4Read16b, DSP4Write16b };
|
||||
mrwp setabank = { setaaccessbankr8, setaaccessbankw8, setaaccessbankr16, setaaccessbankw16 };
|
||||
mrwp setabanka = { setaaccessbankr8a, setaaccessbankw8a, setaaccessbankr16a, setaaccessbankw16a };
|
||||
mrwp seta11bank = { Seta11Read8_68, Seta11Write8_68, Seta11Read16_68, Seta11Write16_68 };
|
||||
mrwp seta11banka = { Seta11Read8_60, Seta11Write8_60, Seta11Read16_60, Seta11Write16_60 };
|
||||
mrwp sfxbank = { sfxaccessbankr8, sfxaccessbankw8, sfxaccessbankr16, sfxaccessbankw16 };
|
||||
mrwp sfxbankb = { sfxaccessbankr8b, sfxaccessbankw8b, sfxaccessbankr16b, sfxaccessbankw16b };
|
||||
mrwp sfxbankc = { sfxaccessbankr8c, sfxaccessbankw8c, sfxaccessbankr16c, sfxaccessbankw16c };
|
||||
mrwp sfxbankd = { sfxaccessbankr8d, sfxaccessbankw8d, sfxaccessbankr16d, sfxaccessbankw16d };
|
||||
mrwp obc1bank = { OBC1Read8b, OBC1Write8b, OBC1Read16b, OBC1Write16b };
|
||||
mrwp c4bank = { C4Read8b, C4Write8b, C4Read16b, C4Write16b };
|
||||
mrwp SPC7110bank = { memaccessspc7110r8, memaccessspc7110w8, memaccessspc7110r16, memaccessspc7110w16 };
|
||||
mrwp SPC7110SRAMBank = { SPC7110ReadSRAM8b, SPC7110WriteSRAM8b, SPC7110ReadSRAM16b, SPC7110WriteSRAM16b };
|
||||
mrwp stbanka = { stsramr8, stsramw8, stsramr16, stsramw16 };
|
||||
mrwp stbankb = { stsramr8b, stsramw8b, stsramr16b, stsramw16b };
|
||||
|
||||
|
||||
void SetAddressingModes()
|
||||
{ // Banks
|
||||
map_mem(0x00, ®bank, 0x40); // 00 - 3F
|
||||
map_mem(0x40, &membank, 0x3E); // 40 - 7D
|
||||
map_mem(0x7E, &wrambank, 0x01); // 7E
|
||||
map_mem(0x7F, &erambank, 0x01); // 7F
|
||||
map_mem(0x80, ®bank, 0x40); // 80 - BF
|
||||
map_mem(0xC0, &membank, 0x40); // C0 - FF
|
||||
}
|
||||
|
||||
void SetAddressingModesSA1()
|
||||
{
|
||||
map_mem(0x00, &sa1regbank, 0x40); // 00 - 3F
|
||||
map_mem(0x40, &sa1rambank, 0x20); // 40 - 5F
|
||||
map_mem(0x60, &sa1rambankb, 0x10); // 60 - 6F
|
||||
map_mem(0x70, &srambank, 0x08); // 70 - 77
|
||||
map_mem(0x78, &membank, 0x06); // 78 - 7D
|
||||
map_mem(0x7E, &wrambank, 0x01); // 7E
|
||||
map_mem(0x7F, &erambank, 0x01); // 7F
|
||||
map_mem(0x80, &sa1regbank, 0x40); // 80 - BF
|
||||
map_mem(0xC0, &membank, 0x40); // C0 - FF
|
||||
}
|
||||
|
||||
void membank0r8reg(), membank0w8reg(), membank0r16reg(), membank0w16reg();
|
||||
void membank0r8ram(), membank0w8ram(), membank0r16ram(), membank0w16ram();
|
||||
void membank0r8rom(), membank0w8rom(), membank0r16rom(), membank0w16rom();
|
||||
void membank0r8romram(), membank0w8romram(), membank0r16romram(), membank0w16romram();
|
||||
void membank0r8inv(), membank0w8inv(), membank0r16inv(), membank0w16inv();
|
||||
void membank0r8chip(), membank0w8chip(), membank0r16chip(), membank0w16chip();
|
||||
void membank0r8ramSA1(), membank0w8ramSA1(), membank0r16ramSA1(), membank0w16ramSA1();
|
||||
|
||||
mrwp regbank0 = { membank0r8reg, membank0w8reg, membank0r16reg, membank0w16reg };
|
||||
mrwp rambank0 = { membank0r8ram, membank0w8ram, membank0r16ram, membank0w16ram };
|
||||
mrwp rombank0 = { membank0r8rom, membank0w8rom, membank0r16rom, membank0w16rom };
|
||||
mrwp romrambank0 = { membank0r8romram, membank0w8romram, membank0r16romram, membank0w16romram };
|
||||
mrwp invbank0 = { membank0r8inv, membank0w8inv, membank0r16inv, membank0w16inv };
|
||||
mrwp chipbank0 = { membank0r8chip, membank0w8chip, membank0r16chip, membank0w16chip };
|
||||
mrwp sa1rambank0 = { membank0r8ramSA1, membank0w8ramSA1, membank0r16ramSA1, membank0w16ramSA1 };
|
||||
|
||||
static void map_bank0(size_t dest, mrwp *src, size_t num)
|
||||
{
|
||||
rep_stosd(Bank0datr8+dest, src->memr8, num);
|
||||
rep_stosd(Bank0datw8+dest, src->memw8, num);
|
||||
rep_stosd(Bank0datr16+dest, src->memr16, num);
|
||||
rep_stosd(Bank0datw16+dest, src->memw16, num);
|
||||
}
|
||||
|
||||
void GenerateBank0Table()
|
||||
{
|
||||
map_bank0(0x00, &rambank0, 0x20); // 00 - 1F
|
||||
map_bank0(0x20, ®bank0, 0x28); // 20 - 47
|
||||
map_bank0(0x48, &invbank0, 0x17); // 48 - 5E
|
||||
map_bank0(0x5F, &chipbank0, 0x1F); // 5F - 7D
|
||||
map_bank0(0x7E, &rombank0, 0x81); // 7E - FE
|
||||
map_bank0(0xFF, &romrambank0, 0x01); // FF
|
||||
}
|
||||
|
||||
void GenerateBank0TableSA1()
|
||||
{
|
||||
map_bank0(0x00, &sa1rambank0, 0x20); // 00 - 1F
|
||||
}
|
||||
66
tools/zsnes/src/cpu/memtable.h
Normal file
66
tools/zsnes/src/cpu/memtable.h
Normal file
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach )
|
||||
|
||||
http://www.zsnes.com
|
||||
http://sourceforge.net/projects/zsnes
|
||||
https://zsnes.bountysource.com
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
version 2 as published by the Free Software Foundation.
|
||||
|
||||
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.
|
||||
*/
|
||||
|
||||
#ifndef MEMTABLE_H
|
||||
#define MEMTABLE_H
|
||||
|
||||
extern void (*memtabler8[256])();
|
||||
extern void (*memtablew8[256])();
|
||||
extern void (*memtabler16[256])();
|
||||
extern void (*memtablew16[256])();
|
||||
|
||||
typedef struct
|
||||
{
|
||||
void (*memr8)();
|
||||
void (*memw8)();
|
||||
void (*memr16)();
|
||||
void (*memw16)();
|
||||
} mrwp;
|
||||
|
||||
extern mrwp regbank, membank, wrambank, srambank, erambank, sramsbank;
|
||||
extern mrwp sa1regbank, sa1rambank, sa1rambankb;
|
||||
extern mrwp dsp1bank, dsp2bank, dsp3bank, dsp4bank;
|
||||
extern mrwp setabank, setabanka, seta11bank, seta11banka;
|
||||
extern mrwp sfxbank, sfxbankb, sfxbankc, sfxbankd;
|
||||
extern mrwp obc1bank, c4bank, SPC7110bank, SPC7110SRAMBank;
|
||||
extern mrwp stbanka, stbankb;
|
||||
|
||||
/*
|
||||
rep_stosd is my name for a 'copy <num> times a function pointer <func_ptr> into
|
||||
a function pointer array <dest>' function, in honour of the almighty asm
|
||||
instruction rep stosd, which is able to do that (and much more).
|
||||
Since ZSNES is just full of func pointer arrays, it'll probably come in handy.
|
||||
*/
|
||||
|
||||
static void rep_stosd(void (**dest)(), void (*func_ptr), size_t num)
|
||||
{
|
||||
while (num--) { dest[num] = func_ptr; }
|
||||
}
|
||||
|
||||
static void map_mem(size_t dest, mrwp *src, size_t num)
|
||||
{
|
||||
rep_stosd(memtabler8+dest, src->memr8, num);
|
||||
rep_stosd(memtablew8+dest, src->memw8, num);
|
||||
rep_stosd(memtabler16+dest, src->memr16, num);
|
||||
rep_stosd(memtablew16+dest, src->memw16, num);
|
||||
}
|
||||
|
||||
#endif
|
||||
1260
tools/zsnes/src/cpu/regs.inc
Normal file
1260
tools/zsnes/src/cpu/regs.inc
Normal file
File diff suppressed because it is too large
Load Diff
57
tools/zsnes/src/cpu/regs.mac
Normal file
57
tools/zsnes/src/cpu/regs.mac
Normal file
@@ -0,0 +1,57 @@
|
||||
;Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach )
|
||||
;
|
||||
;http://www.zsnes.com
|
||||
;http://sourceforge.net/projects/zsnes
|
||||
;https://zsnes.bountysource.com
|
||||
;
|
||||
;This program is free software; you can redistribute it and/or
|
||||
;modify it under the terms of the GNU General Public License
|
||||
;version 2 as published by the Free Software Foundation.
|
||||
;
|
||||
;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
|
||||
1682
tools/zsnes/src/cpu/regsw.inc
Normal file
1682
tools/zsnes/src/cpu/regsw.inc
Normal file
File diff suppressed because it is too large
Load Diff
46
tools/zsnes/src/cpu/regsw.mac
Normal file
46
tools/zsnes/src/cpu/regsw.mac
Normal file
@@ -0,0 +1,46 @@
|
||||
;Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach )
|
||||
;
|
||||
;http://www.zsnes.com
|
||||
;http://sourceforge.net/projects/zsnes
|
||||
;https://zsnes.bountysource.com
|
||||
;
|
||||
;This program is free software; you can redistribute it and/or
|
||||
;modify it under the terms of the GNU General Public License
|
||||
;version 2 as published by the Free Software Foundation.
|
||||
;
|
||||
;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.
|
||||
|
||||
|
||||
|
||||
;*******************************************************
|
||||
; 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
tools/zsnes/src/cpu/s65816d.inc
Normal file
1574
tools/zsnes/src/cpu/s65816d.inc
Normal file
File diff suppressed because it is too large
Load Diff
811
tools/zsnes/src/cpu/saddress.inc
Normal file
811
tools/zsnes/src/cpu/saddress.inc
Normal file
@@ -0,0 +1,811 @@
|
||||
;Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach )
|
||||
;
|
||||
;http://www.zsnes.com
|
||||
;http://sourceforge.net/projects/zsnes
|
||||
;https://zsnes.bountysource.com
|
||||
;
|
||||
;This program is free software; you can redistribute it and/or
|
||||
;modify it under the terms of the GNU General Public License
|
||||
;version 2 as published by the Free Software Foundation.
|
||||
;
|
||||
;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
|
||||
|
||||
|
||||
407
tools/zsnes/src/cpu/saddrni.inc
Normal file
407
tools/zsnes/src/cpu/saddrni.inc
Normal file
@@ -0,0 +1,407 @@
|
||||
;Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach )
|
||||
;
|
||||
;http://www.zsnes.com
|
||||
;http://sourceforge.net/projects/zsnes
|
||||
;https://zsnes.bountysource.com
|
||||
;
|
||||
;This program is free software; you can redistribute it and/or
|
||||
;modify it under the terms of the GNU General Public License
|
||||
;version 2 as published by the Free Software Foundation.
|
||||
;
|
||||
;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
|
||||
|
||||
|
||||
|
||||
2027
tools/zsnes/src/cpu/se65816.inc
Normal file
2027
tools/zsnes/src/cpu/se65816.inc
Normal file
File diff suppressed because it is too large
Load Diff
2649
tools/zsnes/src/cpu/spc700.asm
Normal file
2649
tools/zsnes/src/cpu/spc700.asm
Normal file
File diff suppressed because it is too large
Load Diff
92
tools/zsnes/src/cpu/spcaddr.inc
Normal file
92
tools/zsnes/src/cpu/spcaddr.inc
Normal file
@@ -0,0 +1,92 @@
|
||||
;Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach )
|
||||
;
|
||||
;http://www.zsnes.com
|
||||
;http://sourceforge.net/projects/zsnes
|
||||
;https://zsnes.bountysource.com
|
||||
;
|
||||
;This program is free software; you can redistribute it and/or
|
||||
;modify it under the terms of the GNU General Public License
|
||||
;version 2 as published by the Free Software Foundation.
|
||||
;
|
||||
;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, [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
|
||||
164
tools/zsnes/src/cpu/spcdef.inc
Normal file
164
tools/zsnes/src/cpu/spcdef.inc
Normal file
@@ -0,0 +1,164 @@
|
||||
;Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach )
|
||||
;
|
||||
;http://www.zsnes.com
|
||||
;http://sourceforge.net/projects/zsnes
|
||||
;https://zsnes.bountysource.com
|
||||
;
|
||||
;This program is free software; you can redistribute it and/or
|
||||
;modify it under the terms of the GNU General Public License
|
||||
;version 2 as published by the Free Software Foundation.
|
||||
;
|
||||
;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 [spcA], al
|
||||
mov [spcNZ],al
|
||||
ret
|
||||
%endmacro
|
||||
698
tools/zsnes/src/cpu/stable.asm
Normal file
698
tools/zsnes/src/cpu/stable.asm
Normal file
@@ -0,0 +1,698 @@
|
||||
;Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach )
|
||||
;
|
||||
;http://www.zsnes.com
|
||||
;http://sourceforge.net/projects/zsnes
|
||||
;https://zsnes.bountysource.com
|
||||
;
|
||||
;This program is free software; you can redistribute it and/or
|
||||
;modify it under the terms of the GNU General Public License
|
||||
;version 2 as published by the Free Software Foundation.
|
||||
;
|
||||
;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 ; Table addresses (M:0,X:0,D:0)
|
||||
;tableB times 256 ; Table addresses (M:1,X:0,D:0)
|
||||
;tableC times 256 ; Table addresses (M:0,X:1,D:0)
|
||||
;tableD times 256 ; Table addresses (M:1,X:1,D:0)
|
||||
;tableE times 256 ; Table addresses (M:0,X:0,D:1)
|
||||
;tableF times 256 ; Table addresses (M:1,X:0,D:1)
|
||||
;tableG times 256 ; Table addresses (M:0,X:1,D:1)
|
||||
;tableH times 256 ; Table addresses (M:1,X:1,D:1)
|
||||
;tablead times 256 ; Table address location according to P
|
||||
;memtabler8 times 256 ; Memory Bank Locations for reading 8-bit
|
||||
;memtablew8 times 256 ; Memory Bank Locations for writing 8-bit
|
||||
;memtabler16 times 256 ; Memory Bank Locations for reading 16-bit
|
||||
;memtablew16 times 256 ; Memory Bank Locations for reading 16-bit
|
||||
|
||||
;*******************************************************
|
||||
; Generate OpCode Table
|
||||
;*******************************************************
|
||||
|
||||
SECTION .text
|
||||
|
||||
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
|
||||
dec ecx
|
||||
jnz .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
|
||||
|
||||
|
||||
902
tools/zsnes/src/cpu/table.asm
Normal file
902
tools/zsnes/src/cpu/table.asm
Normal file
@@ -0,0 +1,902 @@
|
||||
;Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach )
|
||||
;
|
||||
;http://www.zsnes.com
|
||||
;http://sourceforge.net/projects/zsnes
|
||||
;https://zsnes.bountysource.com
|
||||
;
|
||||
;This program is free software; you can redistribute it and/or
|
||||
;modify it under the terms of the GNU General Public License
|
||||
;version 2 as published by the Free Software Foundation.
|
||||
;
|
||||
;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 mosjmptab,mosdraw10,mosdraw11,mosdraw12,mosdraw13
|
||||
EXTSYM mosdraw14,mosdraw15,mosdraw16,mosdraw2,mosdraw3
|
||||
EXTSYM mosdraw4,mosdraw5,mosdraw6,mosdraw7,mosdraw8
|
||||
EXTSYM mosdraw9,ngpalcon2b,ngpalcon4b
|
||||
EXTSYM mosjmptab16b,mosdraw1016b,mosdraw1116b,mosdraw1216b,mosdraw1316b
|
||||
EXTSYM mosdraw1416b,mosdraw1516b,mosdraw1616b,mosdraw216b,mosdraw316b
|
||||
EXTSYM mosdraw416b,mosdraw516b,mosdraw616b,mosdraw716b,mosdraw816b
|
||||
EXTSYM mosdraw916b
|
||||
EXTSYM mosjmptab16bt,mosdraw1016bt,mosdraw1116bt,mosdraw1216bt,mosdraw1316bt
|
||||
EXTSYM mosdraw1416bt,mosdraw1516bt,mosdraw1616bt,mosdraw216bt,mosdraw316bt
|
||||
EXTSYM mosdraw416bt,mosdraw516bt,mosdraw616bt,mosdraw716bt,mosdraw816bt
|
||||
EXTSYM mosdraw916bt
|
||||
EXTSYM mosjmptab16btms,mosdraw1016btms,mosdraw1116btms,mosdraw1216btms,mosdraw1316btms
|
||||
EXTSYM mosdraw1416btms,mosdraw1516btms,mosdraw1616btms,mosdraw216btms,mosdraw316btms
|
||||
EXTSYM mosdraw416btms,mosdraw516btms,mosdraw616btms,mosdraw716btms,mosdraw816btms
|
||||
EXTSYM mosdraw916btms
|
||||
EXTSYM mosjmptab16bntms,mosdraw1016bntms,mosdraw1116bntms,mosdraw1216bntms,mosdraw1316bntms
|
||||
EXTSYM mosdraw1416bntms,mosdraw1516bntms,mosdraw1616bntms,mosdraw216bntms,mosdraw316bntms
|
||||
EXTSYM mosdraw416bntms,mosdraw516bntms,mosdraw616bntms,mosdraw716bntms,mosdraw816bntms
|
||||
EXTSYM mosdraw916bntms
|
||||
EXTSYM tableA,tableB,tableC,tableD,tableE,tableF,tableG,tableH
|
||||
EXTSYM DPageR8,DPageW8,DPageR16,DPageW16
|
||||
EXTSYM SDD1Enable
|
||||
EXTSYM JoyAOrig,JoyANow,JoyBOrig,JoyBNow,JoyCOrig,JoyCNow,JoyDOrig,JoyDNow
|
||||
|
||||
%include "cpu/65816d.inc"
|
||||
%include "cpu/address.inc"
|
||||
%include "cpu/addrni.inc"
|
||||
%include "cpu/e65816.inc"
|
||||
%include "cpu/regs.mac"
|
||||
%include "cpu/regsw.mac"
|
||||
%include "cpu/regs.inc" ; start problem here
|
||||
%include "cpu/regsw.inc"
|
||||
|
||||
section .data
|
||||
|
||||
; global variables
|
||||
;tableA times 256 dd 0 ; Table addresses (M:0,X:0,D:0)
|
||||
;tableB times 256 dd 0 ; Table addresses (M:1,X:0,D:0)
|
||||
;tableC times 256 dd 0 ; Table addresses (M:0,X:1,D:0)
|
||||
;tableD times 256 dd 0 ; Table addresses (M:1,X:1,D:0)
|
||||
;tableE times 256 dd 0 ; Table addresses (M:0,X:0,D:1)
|
||||
;tableF times 256 dd 0 ; Table addresses (M:1,X:0,D:1)
|
||||
;tableG times 256 dd 0 ; Table addresses (M:0,X:1,D:1)
|
||||
;tableH times 256 dd 0 ; Table addresses (M:1,X:1,D:1)
|
||||
NEWSYM addrmdef, times 27 dd 0 ; Address modes
|
||||
;tablead times 256 dd 0 ; Table address location according to P
|
||||
;memtabler8 times 256 dd 0 ; Memory Bank Locations for reading 8-bit
|
||||
;memtablew8 times 256 dd 0 ; Memory Bank Locations for writing 8-bit
|
||||
;memtabler16 times 256 dd 0 ; Memory Bank Locations for reading 16-bit
|
||||
;memtablew16 times 256 dd 0 ; Memory Bank Locations for reading 16-bit
|
||||
|
||||
section .text
|
||||
|
||||
;*******************************************************
|
||||
; Generate OpCode Table
|
||||
;*******************************************************
|
||||
|
||||
NEWSYM inittable
|
||||
; set up mosaic
|
||||
mov dword[mosjmptab],mosdraw2
|
||||
mov dword[mosjmptab+4],mosdraw3
|
||||
mov dword[mosjmptab+8],mosdraw4
|
||||
mov dword[mosjmptab+12],mosdraw5
|
||||
mov dword[mosjmptab+16],mosdraw6
|
||||
mov dword[mosjmptab+20],mosdraw7
|
||||
mov dword[mosjmptab+24],mosdraw8
|
||||
mov dword[mosjmptab+28],mosdraw9
|
||||
mov dword[mosjmptab+32],mosdraw10
|
||||
mov dword[mosjmptab+36],mosdraw11
|
||||
mov dword[mosjmptab+40],mosdraw12
|
||||
mov dword[mosjmptab+44],mosdraw13
|
||||
mov dword[mosjmptab+48],mosdraw14
|
||||
mov dword[mosjmptab+52],mosdraw15
|
||||
mov dword[mosjmptab+56],mosdraw16
|
||||
mov dword[mosjmptab16b],mosdraw216b
|
||||
mov dword[mosjmptab16b+4],mosdraw316b
|
||||
mov dword[mosjmptab16b+8],mosdraw416b
|
||||
mov dword[mosjmptab16b+12],mosdraw516b
|
||||
mov dword[mosjmptab16b+16],mosdraw616b
|
||||
mov dword[mosjmptab16b+20],mosdraw716b
|
||||
mov dword[mosjmptab16b+24],mosdraw816b
|
||||
mov dword[mosjmptab16b+28],mosdraw916b
|
||||
mov dword[mosjmptab16b+32],mosdraw1016b
|
||||
mov dword[mosjmptab16b+36],mosdraw1116b
|
||||
mov dword[mosjmptab16b+40],mosdraw1216b
|
||||
mov dword[mosjmptab16b+44],mosdraw1316b
|
||||
mov dword[mosjmptab16b+48],mosdraw1416b
|
||||
mov dword[mosjmptab16b+52],mosdraw1516b
|
||||
mov dword[mosjmptab16b+56],mosdraw1616b
|
||||
mov dword[mosjmptab16bt],mosdraw216bt
|
||||
mov dword[mosjmptab16bt+4],mosdraw316bt
|
||||
mov dword[mosjmptab16bt+8],mosdraw416bt
|
||||
mov dword[mosjmptab16bt+12],mosdraw516bt
|
||||
mov dword[mosjmptab16bt+16],mosdraw616bt
|
||||
mov dword[mosjmptab16bt+20],mosdraw716bt
|
||||
mov dword[mosjmptab16bt+24],mosdraw816bt
|
||||
mov dword[mosjmptab16bt+28],mosdraw916bt
|
||||
mov dword[mosjmptab16bt+32],mosdraw1016bt
|
||||
mov dword[mosjmptab16bt+36],mosdraw1116bt
|
||||
mov dword[mosjmptab16bt+40],mosdraw1216bt
|
||||
mov dword[mosjmptab16bt+44],mosdraw1316bt
|
||||
mov dword[mosjmptab16bt+48],mosdraw1416bt
|
||||
mov dword[mosjmptab16bt+52],mosdraw1516bt
|
||||
mov dword[mosjmptab16bt+56],mosdraw1616bt
|
||||
mov dword[mosjmptab16btms],mosdraw216btms
|
||||
mov dword[mosjmptab16btms+4],mosdraw316btms
|
||||
mov dword[mosjmptab16btms+8],mosdraw416btms
|
||||
mov dword[mosjmptab16btms+12],mosdraw516btms
|
||||
mov dword[mosjmptab16btms+16],mosdraw616btms
|
||||
mov dword[mosjmptab16btms+20],mosdraw716btms
|
||||
mov dword[mosjmptab16btms+24],mosdraw816btms
|
||||
mov dword[mosjmptab16btms+28],mosdraw916btms
|
||||
mov dword[mosjmptab16btms+32],mosdraw1016btms
|
||||
mov dword[mosjmptab16btms+36],mosdraw1116btms
|
||||
mov dword[mosjmptab16btms+40],mosdraw1216btms
|
||||
mov dword[mosjmptab16btms+44],mosdraw1316btms
|
||||
mov dword[mosjmptab16btms+48],mosdraw1416btms
|
||||
mov dword[mosjmptab16btms+52],mosdraw1516btms
|
||||
mov dword[mosjmptab16btms+56],mosdraw1616btms
|
||||
mov dword[mosjmptab16bntms],mosdraw216bntms
|
||||
mov dword[mosjmptab16bntms+4],mosdraw316bntms
|
||||
mov dword[mosjmptab16bntms+8],mosdraw416bntms
|
||||
mov dword[mosjmptab16bntms+12],mosdraw516bntms
|
||||
mov dword[mosjmptab16bntms+16],mosdraw616bntms
|
||||
mov dword[mosjmptab16bntms+20],mosdraw716bntms
|
||||
mov dword[mosjmptab16bntms+24],mosdraw816bntms
|
||||
mov dword[mosjmptab16bntms+28],mosdraw916bntms
|
||||
mov dword[mosjmptab16bntms+32],mosdraw1016bntms
|
||||
mov dword[mosjmptab16bntms+36],mosdraw1116bntms
|
||||
mov dword[mosjmptab16bntms+40],mosdraw1216bntms
|
||||
mov dword[mosjmptab16bntms+44],mosdraw1316bntms
|
||||
mov dword[mosjmptab16bntms+48],mosdraw1416bntms
|
||||
mov dword[mosjmptab16bntms+52],mosdraw1516bntms
|
||||
mov dword[mosjmptab16bntms+56],mosdraw1616bntms
|
||||
; set ngpalcon4b
|
||||
mov ecx,20h
|
||||
xor eax,eax
|
||||
.loopng
|
||||
mov bl,al
|
||||
shr bl,2
|
||||
shl bl,4
|
||||
mov dl,bl
|
||||
mov dh,bl
|
||||
shl edx,16
|
||||
mov dl,bl
|
||||
mov dh,bl
|
||||
mov [ngpalcon4b+eax*4],edx
|
||||
inc eax
|
||||
dec ecx
|
||||
jnz .loopng
|
||||
; set ngpalcon2b
|
||||
mov ecx,20h
|
||||
xor eax,eax
|
||||
.loopngb
|
||||
mov bl,al
|
||||
shr bl,2
|
||||
shl bl,2
|
||||
mov dl,bl
|
||||
mov dh,bl
|
||||
shl edx,16
|
||||
mov dl,bl
|
||||
mov dh,bl
|
||||
mov [ngpalcon2b+eax*4],edx
|
||||
inc eax
|
||||
dec ecx
|
||||
jnz .loopngb
|
||||
; set tablead (NVMXDIZC) ( MXD )
|
||||
push es
|
||||
xor ecx,ecx
|
||||
xor al,al
|
||||
mov cx,256
|
||||
mov edi,tablead
|
||||
.loopa
|
||||
test al,08h ; D flag
|
||||
jnz .decon
|
||||
test al,10h ; X flag
|
||||
jnz .xon
|
||||
test al,20h ; M flag
|
||||
jnz .mon
|
||||
mov esi,tableA
|
||||
jmp .done
|
||||
.mon
|
||||
mov esi,tableB
|
||||
jmp .done
|
||||
|
||||
.xon
|
||||
test al,20h ; M flag
|
||||
jnz .mon2
|
||||
mov esi,tableC
|
||||
jmp .done
|
||||
.mon2
|
||||
mov esi,tableD
|
||||
jmp .done
|
||||
|
||||
.decon
|
||||
test al,10h ; X flag
|
||||
jnz .xon3
|
||||
test al,20h ; M flag
|
||||
jnz .mon3
|
||||
mov esi,tableE
|
||||
jmp .done
|
||||
.mon3
|
||||
mov esi,tableF
|
||||
jmp .done
|
||||
|
||||
.xon3
|
||||
test al,20h
|
||||
jnz .mon4
|
||||
mov esi,tableG
|
||||
jmp .done
|
||||
.mon4
|
||||
mov esi,tableH
|
||||
.done
|
||||
inc al
|
||||
push eax
|
||||
mov eax,esi
|
||||
stosd
|
||||
pop eax
|
||||
dec ecx
|
||||
jnz .loopa
|
||||
|
||||
; Set CPU addresses
|
||||
; First, set all addresses to invalid
|
||||
mov eax,eopINVALID
|
||||
mov edi,tableA
|
||||
mov ecx,256
|
||||
rep stosd
|
||||
mov edi,tableB
|
||||
mov ecx,256
|
||||
rep stosd
|
||||
mov edi,tableC
|
||||
mov ecx,256
|
||||
rep stosd
|
||||
mov edi,tableD
|
||||
mov ecx,256
|
||||
rep stosd
|
||||
mov edi,tableE
|
||||
mov ecx,256
|
||||
rep stosd
|
||||
mov edi,tableF
|
||||
mov ecx,256
|
||||
rep stosd
|
||||
mov edi,tableG
|
||||
mov ecx,256
|
||||
rep stosd
|
||||
mov edi,tableH
|
||||
mov ecx,256
|
||||
rep stosd
|
||||
mov edi,tableA
|
||||
call settables
|
||||
mov edi,tableB
|
||||
call settables
|
||||
mov edi,tableC
|
||||
call settables
|
||||
mov edi,tableD
|
||||
call settables
|
||||
mov edi,tableE
|
||||
call settables
|
||||
mov edi,tableF
|
||||
call settables
|
||||
mov edi,tableG
|
||||
call settables
|
||||
mov edi,tableH
|
||||
call settables
|
||||
|
||||
; set proper functions
|
||||
mov edi,tableA ; Table addresses (M:0,X:0,D:0)
|
||||
call settablem16
|
||||
mov edi,tableA
|
||||
call settablex16
|
||||
|
||||
mov edi,tableB ; Table addresses (M:1,X:0,D:0)
|
||||
call settablex16
|
||||
|
||||
mov edi,tableC ; Table addresses (M:0,X:1,D:0)
|
||||
call settablem16
|
||||
|
||||
mov edi,tableE ; Table addresses (M:0,X:0,D:1)
|
||||
call settablem16
|
||||
mov edi,tableE
|
||||
call settableDm16
|
||||
mov edi,tableE
|
||||
call settablex16
|
||||
|
||||
mov edi,tableF ; Table addresses (M:1,X:0,D:1)
|
||||
call settablex16
|
||||
mov edi,tableF
|
||||
call settableDm8
|
||||
|
||||
mov edi,tableG ; Table addresses (M:0,X:1,D:1)
|
||||
call settablem16
|
||||
mov edi,tableG
|
||||
call settableDm16
|
||||
|
||||
mov edi,tableH ; Table addresses (M:1,X:1,D:1)
|
||||
call settableDm8
|
||||
pop es
|
||||
ret
|
||||
|
||||
eopINVALID
|
||||
ret
|
||||
|
||||
section .data
|
||||
|
||||
;*******************************************************
|
||||
; Cpu Cycles Sets the CPU cycle table
|
||||
;*******************************************************
|
||||
NEWSYM cpucycle
|
||||
db 8, 6, 8, 4, 5, 3, 5, 6, 3, 2, 2, 4, 6, 4, 6, 5
|
||||
db 2, 5, 5, 7, 5, 4, 6, 6, 2, 4, 2, 2, 6, 4, 7, 5
|
||||
db 6, 6, 8, 4, 3, 3, 5, 6, 4, 2, 2, 5, 4, 4, 6, 5
|
||||
db 2, 5, 5, 7, 4, 4, 6, 6, 2, 4, 2, 2, 4, 4, 7, 5
|
||||
db 7, 6, 2, 4, 7, 3, 5, 6, 3, 2, 2, 3, 3, 4, 6, 5
|
||||
db 2, 5, 5, 7, 7, 4, 6, 6, 2, 4, 3, 2, 4, 4, 7, 5
|
||||
db 6, 6, 6, 4, 3, 3, 5, 6, 4, 2, 2, 6, 5, 4, 6, 5
|
||||
db 2, 5, 5, 7, 4, 4, 6, 6, 2, 4, 4, 2, 6, 4, 7, 5
|
||||
db 2, 6, 3, 4, 3, 3, 3, 6, 2, 2, 2, 3, 4, 4, 4, 5
|
||||
db 2, 6, 5, 7, 4, 4, 4, 6, 2, 5, 2, 2, 4, 5, 5, 5
|
||||
db 2, 6, 2, 4, 3, 3, 3, 6, 2, 2, 2, 4, 4, 4, 4, 5
|
||||
db 2, 5, 5, 7, 4, 4, 4, 6, 2, 4, 2, 2, 4, 4, 4, 5
|
||||
db 2, 6, 3, 4, 3, 3, 5, 6, 2, 2, 2, 3, 4, 4, 4, 5
|
||||
db 2, 5, 5, 7, 6, 4, 6, 6, 2, 4, 3, 3, 6, 4, 7, 5
|
||||
db 2, 6, 3, 4, 3, 3, 5, 6, 2, 2, 2, 3, 4, 4, 6, 5
|
||||
db 2, 5, 5, 7, 5, 4, 6, 6, 2, 4, 4, 2, 6, 4, 7, 5
|
||||
; 28 | 26 | 28 | 24 | 25 | 23 | 25 | 26 | 13 | 22 | 12 | 14 | 36 | 34 | 36 | 45
|
||||
; 22 | 25 | 25 | 27 | 25 | 24 | 26 | 26 | 12 | 34 | 12 | 12 | 36 | 34 | 37 | 45
|
||||
; 36 | 26 | 48 | 24 | 23 | 23 | 25 | 26 | 14 | 22 | 12 | 15 | 34 | 34 | 36 | 45
|
||||
; 22 | 25 | 25 | 27 | 24 | 24 | 26 | 26 | 12 | 34 | 12 | 12 | 34 | 34 | 37 | 45
|
||||
; 17 | 26 | 22 | 24 | 37 | 23 | 25 | 26 | 13 | 22 | 12 | 13 | 33 | 34 | 36 | 45
|
||||
; 22 | 25 | 25 | 27 | 37 | 24 | 26 | 26 | 12 | 34 | 13 | 12 | 44 | 34 | 37 | 45
|
||||
; 16 | 26 | 36 | 24 | 23 | 23 | 25 | 26 | 14 | 22 | 12 | 16 | 35 | 34 | 36 | 45
|
||||
; 22 | 25 | 25 | 27 | 24 | 24 | 26 | 26 | 12 | 34 | 14 | 12 | 36 | 34 | 37 | 45
|
||||
; 22 | 26 | 33 | 24 | 23 | 23 | 23 | 26 | 12 | 22 | 12 | 13 | 34 | 34 | 34 | 45
|
||||
; 22 | 26 | 25 | 27 | 24 | 24 | 24 | 26 | 12 | 35 | 12 | 12 | 34 | 35 | 35 | 45
|
||||
; 22 | 26 | 22 | 24 | 23 | 23 | 23 | 26 | 12 | 22 | 12 | 14 | 34 | 34 | 34 | 45
|
||||
; 22 | 25 | 25 | 27 | 24 | 24 | 24 | 26 | 12 | 34 | 12 | 12 | 34 | 34 | 34 | 45
|
||||
; 22 | 26 | 23 | 24 | 23 | 23 | 25 | 26 | 12 | 22 | 12 | 13 | 34 | 34 | 34 | 45
|
||||
; 22 | 25 | 25 | 27 | 26 | 24 | 26 | 26 | 12 | 34 | 13 | 13 | 36 | 34 | 37 | 45
|
||||
; 22 | 26 | 23 | 24 | 23 | 23 | 25 | 26 | 12 | 22 | 12 | 13 | 34 | 34 | 36 | 45
|
||||
; 22 | 25 | 25 | 27 | 35 | 24 | 26 | 26 | 12 | 34 | 14 | 12 | 36 | 34 | 37 | 45
|
||||
|
||||
section .text
|
||||
|
||||
;*******************************************************
|
||||
; Set Tables Sets the opcode tables according to EDI
|
||||
;*******************************************************
|
||||
; This function sets all the non-multiple entries
|
||||
|
||||
NEWSYM 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
|
||||
|
||||
NEWSYM 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
|
||||
|
||||
NEWSYM 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
|
||||
|
||||
NEWSYM 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
|
||||
|
||||
NEWSYM 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
|
||||
714
tools/zsnes/src/cpu/tablec.asm
Normal file
714
tools/zsnes/src/cpu/tablec.asm
Normal file
@@ -0,0 +1,714 @@
|
||||
;Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach )
|
||||
;
|
||||
;http://www.zsnes.com
|
||||
;http://sourceforge.net/projects/zsnes
|
||||
;https://zsnes.bountysource.com
|
||||
;
|
||||
;This program is free software; you can redistribute it and/or
|
||||
;modify it under the terms of the GNU General Public License
|
||||
;version 2 as published by the Free Software Foundation.
|
||||
;
|
||||
;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 tableAc,tableBc,tableCc,tableDc,tableEc
|
||||
EXTSYM tableFc,tableGc,tableHc,tableadc
|
||||
|
||||
%include "cpu/65816dc.inc"
|
||||
%include "cpu/address.inc"
|
||||
%include "cpu/addrni.inc"
|
||||
%include "cpu/e65816c.inc"
|
||||
|
||||
; global variables
|
||||
|
||||
;*******************************************************
|
||||
; Generate OpCode Table
|
||||
;*******************************************************
|
||||
|
||||
SECTION .text
|
||||
|
||||
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
|
||||
dec ecx
|
||||
jnz .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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user