File:  [RetroPC.NET] / xmil / z80x / z80x_ix.x86
Revision 1.1: download - view: text, annotated - select for diffs
Sun Aug 1 14:31:32 2004 JST (21 years, 3 months ago) by yui
Branches: MAIN
CVS tags: HEAD
initialize


%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>