%include '../z80x/z80x.inc'
%include '../z80x/z80x.mcr'
section .text
global _opcode_dd2
; extern @_ixcb_proc@0
global opcode_dd
extern ixcb_proc
extern memrd8_ecx_al
extern memrd8_ecx_dl
extern memwr8_ecx_dl
extern memrd16_ecx_ax
extern memwr16_ecx_dx
extern _ZSPtable
extern _z80inc_flag
extern _z80dec_flag
R_Z80IXL equ reg8_t.ixl
R_Z80IXH equ reg8_t.ixh
%macro GETIX 0
GETPCAL
cbw
add ax, [edi + R_Z80IX]
%endmacro
%macro GETXIX 0
GETPCAL
cbw
add ax, [edi + R_Z80IX]
movzx ecx, ax
call memrd8_ecx_al
%endmacro
%macro XIX2R 1
GETXIX
mov [edi + %1], al
ret
%endmacro
%macro R2XIX 1
GETIX
movzx ecx, ax
mov dl, [edi + %1]
jmp memwr8_ecx_dl
%endmacro
align 16
and_ixl: ANDR8 R_Z80IXL
align 16
and_ixh: ANDR8 R_Z80IXH
align 16
or_ixl: ORR8 R_Z80IXL
align 16
or_ixh: ORR8 R_Z80IXH
align 16
xor_ixl: XORR8 R_Z80IXL
align 16
xor_ixh: XORR8 R_Z80IXH
align 16
cp_ixl: CPR8 R_Z80IXL
align 16
cp_ixh: CPR8 R_Z80IXH ; !!
align 16
inc_ixl: INCR8 R_Z80IXL
align 16
inc_ixh: INCR8 R_Z80IXH
align 16
dec_ixl: DECR8 R_Z80IXL
align 16
dec_ixh: DECR8 R_Z80IXH
align 16
add_a_ixl: ADDR8 R_Z80IXL
align 16
add_a_ixh: ADDR8 R_Z80IXH
align 16
adc_a_ixl: ADCR8 R_Z80IXL
align 16
adc_a_ixh: ADCR8 R_Z80IXH
align 16
sub_ixl: SUBR8 R_Z80IXL
align 16
sub_ixh: SUBR8 R_Z80IXH
align 16
sbc_a_ixl: SBCR8 R_Z80IXL
align 16
sbc_a_ixh: SBCR8 R_Z80IXH
align 16
ld_a_ixl: LDR8 R_Z80A, R_Z80IXL
align 16
ld_b_ixl: LDR8 R_Z80B, R_Z80IXL
align 16
ld_c_ixl: LDR8 R_Z80C, R_Z80IXL
align 16
ld_d_ixl: LDR8 R_Z80D, R_Z80IXL
align 16
ld_e_ixl: LDR8 R_Z80E, R_Z80IXL
align 16
ld_ixl_a: LDR8 R_Z80IXL, R_Z80A
align 16
ld_ixl_b: LDR8 R_Z80IXL, R_Z80B
align 16
ld_ixl_c: LDR8 R_Z80IXL, R_Z80C
align 16
ld_ixl_d: LDR8 R_Z80IXL, R_Z80D
align 16
ld_ixl_e: LDR8 R_Z80IXL, R_Z80E
align 16
ld_ixl_ixh: LDR8 R_Z80IXL, R_Z80IXH
align 16
ld_ixl_byte: LDI8 R_Z80IXL
align 16
ld_a_ixh: LDR8 R_Z80A, R_Z80IXH
align 16
ld_b_ixh: LDR8 R_Z80B, R_Z80IXH
align 16
ld_c_ixh: LDR8 R_Z80C, R_Z80IXH
align 16
ld_d_ixh: LDR8 R_Z80D, R_Z80IXH
align 16
ld_e_ixh: LDR8 R_Z80E, R_Z80IXH
align 16
ld_ixh_a: LDR8 R_Z80IXH, R_Z80A
align 16
ld_ixh_b: LDR8 R_Z80IXH, R_Z80B
align 16
ld_ixh_c: LDR8 R_Z80IXH, R_Z80C
align 16
ld_ixh_d: LDR8 R_Z80IXH, R_Z80D
align 16
ld_ixh_e: LDR8 R_Z80IXH, R_Z80E
align 16
ld_ixh_ixl: LDR8 R_Z80IXH, R_Z80IXL
align 16
ld_ixh_byte: LDI8 R_Z80IXH
align 16
and_xix: GETXIX
MCRAND8
align 16
or_xix: GETXIX
MCROR8
align 16
xor_xix: GETXIX
MCRXOR8
align 16
cp_xix: GETXIX
MCRCP8
align 16
inc_xix: GETIX
movzx ecx, ax
INCM8
align 16
dec_xix: GETIX
movzx ecx, ax
DECM8
align 16
add_a_xix: GETXIX
MCRADD8
align 16
adc_a_xix: GETXIX
MCRADC8
align 16
sub_xix: GETXIX
MCRSUB8
align 16
sbc_a_xix: GETXIX
MCRSBC8
align 16
add_ix_bc: ADDR16 R_Z80IX, R_Z80BC
align 16
add_ix_de: ADDR16 R_Z80IX, R_Z80DE
align 16
add_ix_ix: ADDR16d R_Z80IX
align 16
add_ix_sp: ADDR16 R_Z80IX, R_Z80SP
align 16
ld_a_xix: XIX2R R_Z80A
align 16
ld_b_xix: XIX2R R_Z80B
align 16
ld_c_xix: XIX2R R_Z80C
align 16
ld_d_xix: XIX2R R_Z80D
align 16
ld_e_xix: XIX2R R_Z80E
align 16
ld_l_xix: XIX2R R_Z80L
align 16
ld_h_xix: XIX2R R_Z80H
align 16
ld_xix_a: R2XIX R_Z80A
align 16
ld_xix_b: R2XIX R_Z80B
align 16
ld_xix_c: R2XIX R_Z80C
align 16
ld_xix_d: R2XIX R_Z80D
align 16
ld_xix_e: R2XIX R_Z80E
align 16
ld_xix_l: R2XIX R_Z80L
align 16
ld_xix_h: R2XIX R_Z80H
align 16
ld_xix_byte: GETIX
movzx eax, ax
push eax
GETPCDL
pop ecx
jmp memwr8_ecx_dl
align 16
push_ix: PUSH16 R_Z80IX
align 16
pop_ix: POP16 R_Z80IX
align 16
inc_ix: INCR16 R_Z80IX
align 16
dec_ix: DECR16 R_Z80IX
align 16
ex_xsp_ix: EXXSP R_Z80IX
align 16
ld_xword_ix: LDx_W R_Z80IX
align 16
ld_ix_xword: LDW_x R_Z80IX
align 16
ld_ix_word: LDW_w R_Z80IX
align 16
ld_sp_ix: LDR16 R_Z80SP, R_Z80IX
align 16
jp_ix: LDR16 R_Z80PC, R_Z80IX
align 16
ld_nop: ret
align 16
no_op: dec word [edi + R_Z80PC]
ret
section .rdata
align 16
_opcode_dd2:
opcode_dd dd no_op, no_op, no_op, no_op ; 00
dd no_op, no_op, no_op, no_op
dd no_op, add_ix_bc, no_op, no_op
dd no_op, no_op, no_op, no_op
dd no_op, no_op, no_op, no_op ; 10
dd no_op, no_op, no_op, no_op
dd no_op, add_ix_de, no_op, no_op
dd no_op, no_op, no_op, no_op
dd no_op, ld_ix_word, ld_xword_ix,inc_ix ; 20
dd inc_ixh, dec_ixh, ld_ixh_byte,no_op
dd no_op, add_ix_ix, ld_ix_xword,dec_ix
dd inc_ixl, dec_ixl, ld_ixl_byte,no_op
dd no_op, no_op, no_op, no_op ; 30
dd inc_xix, dec_xix, ld_xix_byte,no_op
dd no_op, add_ix_sp, no_op, no_op
dd no_op, no_op, no_op, no_op
dd no_op, no_op, no_op, no_op ; 40
dd ld_b_ixh, ld_b_ixl, ld_b_xix, no_op
dd no_op, no_op, no_op, no_op
dd ld_c_ixh, ld_c_ixl, ld_c_xix, no_op
dd no_op, no_op, no_op, no_op ; 50
dd ld_d_ixh, ld_d_ixl, ld_d_xix, no_op
dd no_op, no_op, no_op, no_op
dd ld_e_ixh, ld_e_ixl, ld_e_xix, no_op
dd ld_ixh_b, ld_ixh_c, ld_ixh_d, ld_ixh_e ; 60
dd ld_nop, ld_ixh_ixl, ld_h_xix, ld_ixh_a
dd ld_ixl_b, ld_ixl_c, ld_ixl_d, ld_ixl_e
dd ld_ixl_ixh, ld_nop, ld_l_xix, ld_ixl_a
dd ld_xix_b, ld_xix_c, ld_xix_d, ld_xix_e ; 70
dd ld_xix_h, ld_xix_l, no_op, ld_xix_a
dd no_op, no_op, no_op, no_op
dd ld_a_ixh, ld_a_ixl, ld_a_xix, no_op
dd no_op, no_op, no_op, no_op ; 80
dd add_a_ixh, add_a_ixl, add_a_xix, no_op
dd no_op, no_op, no_op, no_op
dd adc_a_ixh, adc_a_ixl, adc_a_xix, no_op
dd no_op, no_op, no_op, no_op ; 90
dd sub_ixh, sub_ixl, sub_xix, no_op
dd no_op, no_op, no_op, no_op
dd sbc_a_ixh, sbc_a_ixl, sbc_a_xix, no_op
dd no_op, no_op, no_op, no_op ; a0
dd and_ixh, and_ixl, and_xix, no_op
dd no_op, no_op, no_op, no_op
dd xor_ixh, xor_ixl, xor_xix, no_op
dd no_op, no_op, no_op, no_op ; b0
dd or_ixh, or_ixl, or_xix, no_op
dd no_op, no_op, no_op, no_op
dd cp_ixh, cp_ixl, cp_xix, no_op
dd no_op, no_op, no_op, no_op ; c0
dd no_op, no_op, no_op, no_op
dd no_op, no_op, no_op, ixcb_proc
dd no_op, no_op, no_op, no_op
dd no_op, no_op, no_op, no_op ; d0
dd no_op, no_op, no_op, no_op
dd no_op, no_op, no_op, no_op
dd no_op, no_op, no_op, no_op
dd no_op, pop_ix, no_op, ex_xsp_ix ; e0
dd no_op, push_ix, no_op, no_op
dd no_op, jp_ix, no_op, no_op
dd no_op, no_op, no_op, no_op
dd no_op, no_op, no_op, no_op ; f0
dd no_op, no_op, no_op, no_op
dd no_op, ld_sp_ix, no_op, no_op
dd no_op, no_op, no_op, no_op
ends
RetroPC.NET-CVS <cvs@retropc.net>