File:  [RetroPC.NET] / xmil / z80awce / z80a_i.s
Revision 1.1: download - view: text, annotated - select for diffs
Fri Feb 4 16:45:39 2005 JST (20 years, 8 months ago) by yui
Branches: MAIN
CVS tags: HEAD
add Z80core ARM9 version (T.Yui)


	INCLUDE	z80a.inc
	INCLUDE	z80a_mn.inc
	INCLUDE	z80a_i.inc

	EXPORT	z80a_ix
	EXPORT	z80a_iy

	IMPORT	z80a_ixcb
	IMPORT	z80a_iycb
	IMPORT	mem_read16
	IMPORT	mem_write16

	AREA	.text, CODE, READONLY


_no_op			sub		r9, r9, #&10000
_ld_nop			mov		pc, r11

_ld_ix_word		LD16w	CPU_IX
_ld_iy_word		LD16w	CPU_IY

_ld_xword_ix	LDx16	CPU_IX
_ld_xword_iy	LDx16	CPU_IY

_ld_ix_xword	LD16x	CPU_IX
_ld_iy_xword	LD16x	CPU_IY

_ld_xix_byte	LDxI_b	CPU_IX
_ld_xiy_byte	LDxI_b	CPU_IY

_ld_sp_ix		MLDSP	CPU_IX
_ld_sp_iy		MLDSP	CPU_IY

_add_ix_bc		MADD16	CPU_IX, CPU_BC
_add_ix_de		MADD16	CPU_IX, CPU_DE
_add_ix_ix		MADD16D	CPU_IX
_add_ix_sp		MADDSP	CPU_IX

_add_iy_bc		MADD16	CPU_IY, CPU_BC
_add_iy_de		MADD16	CPU_IY, CPU_DE
_add_iy_iy		MADD16D	CPU_IY
_add_iy_sp		MADDSP	CPU_IY

_inc_ix			MINC16	CPU_IX
_inc_iy			MINC16	CPU_IY

_inc_xix		MINCI8	CPU_IX
_inc_xiy		MINCI8	CPU_IY

_dec_ix			MDEC16	CPU_IX
_dec_iy			MDEC16	CPU_IY

_dec_xix		MDECI8	CPU_IX
_dec_xiy		MDECI8	CPU_IY

_push_ix		MPUSH	CPU_IX
_push_iy		MPUSH	CPU_IY

_pop_ix			MPOP	CPU_IX
_pop_iy			MPOP	CPU_IY

_ex_xsp_ix		MEXSP	CPU_IX
_ex_xsp_iy		MEXSP	CPU_IY

_jp_ix			MJPR16	CPU_IX
_jp_iy			MJPR16	CPU_IY



; ---- 8bit...

_inc_ixh		MINC8	CPU_IXH
_inc_ixl		MINC8	CPU_IXL
_inc_iyh		MINC8	CPU_IYH
_inc_iyl		MINC8	CPU_IYL

_dec_ixh		MDEC8	CPU_IXH
_dec_ixl		MDEC8	CPU_IXL
_dec_iyh		MDEC8	CPU_IYH
_dec_iyl		MDEC8	CPU_IYL

_ld_ixh_byte	LD8b	CPU_IXH
_ld_ixl_byte	LD8b	CPU_IXL
_ld_iyh_byte	LD8b	CPU_IYH
_ld_iyl_byte	LD8b	CPU_IYL

_ld_b_ixh		LD8		CPU_B, CPU_IXH
_ld_b_ixl		LD8		CPU_B, CPU_IXL
_ld_b_xix		LD8_xI	CPU_B, CPU_IX
_ld_b_iyh		LD8		CPU_B, CPU_IYH
_ld_b_iyl		LD8		CPU_B, CPU_IYL
_ld_b_xiy		LD8_xI	CPU_B, CPU_IY

_ld_c_ixh		LD8		CPU_C, CPU_IXH
_ld_c_ixl		LD8		CPU_C, CPU_IXL
_ld_c_xix		LD8_xI	CPU_C, CPU_IX
_ld_c_iyh		LD8		CPU_C, CPU_IYH
_ld_c_iyl		LD8		CPU_C, CPU_IYL
_ld_c_xiy		LD8_xI	CPU_C, CPU_IY

_ld_d_ixh		LD8		CPU_D, CPU_IXH
_ld_d_ixl		LD8		CPU_D, CPU_IXL
_ld_d_xix		LD8_xI	CPU_D, CPU_IX
_ld_d_iyh		LD8		CPU_D, CPU_IYH
_ld_d_iyl		LD8		CPU_D, CPU_IYL
_ld_d_xiy		LD8_xI	CPU_D, CPU_IY

_ld_e_ixh		LD8		CPU_E, CPU_IXH
_ld_e_ixl		LD8		CPU_E, CPU_IXL
_ld_e_xix		LD8_xI	CPU_E, CPU_IX
_ld_e_iyh		LD8		CPU_E, CPU_IYH
_ld_e_iyl		LD8		CPU_E, CPU_IYL
_ld_e_xiy		LD8_xI	CPU_E, CPU_IY

_ld_ixh_b		LD8		CPU_IXH, CPU_B
_ld_ixh_c		LD8		CPU_IXH, CPU_C
_ld_ixh_d		LD8		CPU_IXH, CPU_D
_ld_ixh_e		LD8		CPU_IXH, CPU_E
_ld_ixh_ixl		LD8		CPU_IXH, CPU_IXL
_ld_h_xix		LD8_xI	CPU_H, CPU_IX
_ld_ixh_a		LD8A	CPU_IXH
_ld_iyh_b		LD8		CPU_IYH, CPU_B
_ld_iyh_c		LD8		CPU_IYH, CPU_C
_ld_iyh_d		LD8		CPU_IYH, CPU_D
_ld_iyh_e		LD8		CPU_IYH, CPU_E
_ld_iyh_iyl		LD8		CPU_IYH, CPU_IYL
_ld_h_xiy		LD8_xI	CPU_H, CPU_IY
_ld_iyh_a		LD8A	CPU_IYH

_ld_ixl_b		LD8		CPU_IXL, CPU_B
_ld_ixl_c		LD8		CPU_IXL, CPU_C
_ld_ixl_d		LD8		CPU_IXL, CPU_D
_ld_ixl_e		LD8		CPU_IXL, CPU_E
_ld_ixl_ixh		LD8		CPU_IXL, CPU_IXH
_ld_l_xix		LD8_xI	CPU_L, CPU_IX
_ld_ixl_a		LD8A	CPU_IXL
_ld_iyl_b		LD8		CPU_IYL, CPU_B
_ld_iyl_c		LD8		CPU_IYL, CPU_C
_ld_iyl_d		LD8		CPU_IYL, CPU_D
_ld_iyl_e		LD8		CPU_IYL, CPU_E
_ld_iyl_iyh		LD8		CPU_IYL, CPU_IYH
_ld_l_xiy		LD8_xI	CPU_L, CPU_IY
_ld_iyl_a		LD8A	CPU_IYL

_ld_xix_b		LDxI_8	CPU_IX, CPU_B
_ld_xix_c		LDxI_8	CPU_IX, CPU_C
_ld_xix_d		LDxI_8	CPU_IX, CPU_D
_ld_xix_e		LDxI_8	CPU_IX, CPU_E
_ld_xix_h		LDxI_8	CPU_IX, CPU_H
_ld_xix_l		LDxI_8	CPU_IX, CPU_L
_ld_xix_a		LDxI_A	CPU_IX
_ld_xiy_b		LDxI_8	CPU_IY, CPU_B
_ld_xiy_c		LDxI_8	CPU_IY, CPU_C
_ld_xiy_d		LDxI_8	CPU_IY, CPU_D
_ld_xiy_e		LDxI_8	CPU_IY, CPU_E
_ld_xiy_h		LDxI_8	CPU_IY, CPU_H
_ld_xiy_l		LDxI_8	CPU_IY, CPU_L
_ld_xiy_a		LDxI_A	CPU_IY

_ld_a_ixh		LDA8	CPU_IXH
_ld_a_ixl		LDA8	CPU_IXL
_ld_a_xix		LDA_xI	CPU_IX
_ld_a_iyh		LDA8	CPU_IYH
_ld_a_iyl		LDA8	CPU_IYL
_ld_a_xiy		LDA_xI	CPU_IY


_add_a_ixh		MADDR8	CPU_IXH
_add_a_ixl		MADDR8	CPU_IXL
_add_a_xix		MADDI8	CPU_IX
_add_a_iyh		MADDR8	CPU_IYH
_add_a_iyl		MADDR8	CPU_IYL
_add_a_xiy		MADDI8	CPU_IY

_adc_a_ixh		MADCR8	CPU_IXH
_adc_a_ixl		MADCR8	CPU_IXL
_adc_a_xix		MADCI8	CPU_IX
_adc_a_iyh		MADCR8	CPU_IYH
_adc_a_iyl		MADCR8	CPU_IYL
_adc_a_xiy		MADCI8	CPU_IY

_sub_ixh		MSUBR8	CPU_IXH
_sub_ixl		MSUBR8	CPU_IXL
_sub_xix		MSUBI8	CPU_IX
_sub_iyh		MSUBR8	CPU_IYH
_sub_iyl		MSUBR8	CPU_IYL
_sub_xiy		MSUBI8	CPU_IY

_sbc_a_ixh		MSBCR8	CPU_IXH
_sbc_a_ixl		MSBCR8	CPU_IXL
_sbc_a_xix		MSBCI8	CPU_IX
_sbc_a_iyh		MSBCR8	CPU_IYH
_sbc_a_iyl		MSBCR8	CPU_IYL
_sbc_a_xiy		MSBCI8	CPU_IY

_and_ixh		MANDR8	CPU_IXH
_and_ixl		MANDR8	CPU_IXL
_and_xix		MANDI8	CPU_IX
_and_iyh		MANDR8	CPU_IYH
_and_iyl		MANDR8	CPU_IYL
_and_xiy		MANDI8	CPU_IY

_xor_ixh		MXORR8	CPU_IXH
_xor_ixl		MXORR8	CPU_IXL
_xor_xix		MXORI8	CPU_IX
_xor_iyh		MXORR8	CPU_IYH
_xor_iyl		MXORR8	CPU_IYL
_xor_xiy		MXORI8	CPU_IY

_or_ixh			MORR8	CPU_IXH
_or_ixl			MORR8	CPU_IXL
_or_xix			MORI8	CPU_IX
_or_iyh			MORR8	CPU_IYH
_or_iyl			MORR8	CPU_IYL
_or_xiy			MORI8	CPU_IY

_cp_ixh			MCPR8	CPU_IXH
_cp_ixl			MCPR8	CPU_IXL
_cp_xix			MCPI8	CPU_IX
_cp_iyh			MCPR8	CPU_IYH
_cp_iyl			MCPR8	CPU_IYL
_cp_xiy			MCPI8	CPU_IY



z80a_ix			GETPC8
				adr		r1, clktbl
				add		r6, r6, #(1 << 24)
				add		r2, r1, #&100
				ldrb	r3, [r1, r0]
				ldr		r1, [r2, r0, lsl #2]
				rsb		r10, r3, r10
				mov		pc, r1

z80a_iy			GETPC8
				adr		r1, clktbl
				add		r6, r6, #(1 << 24)
				add		r2, r1, #&500
				ldrb	r3, [r1, r0]
				ldr		r1, [r2, r0, lsl #2]
				rsb		r10, r3, r10
				mov		pc, r1


clktbl			dcb	 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 0, 0, 0, 0, 0, 0
				dcb	 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 0, 0, 0, 0, 0, 0
				dcb	 0,14,20,10, 9, 9, 9, 0, 0,15,20,10, 9, 9, 9, 0
				dcb	 0, 0, 0, 0,23,23,19, 0, 0,15, 0, 0, 0, 0, 0, 0
				dcb	 0, 0, 0, 0, 9, 9,19, 0, 0, 0, 0, 0, 9, 9,19, 0
				dcb	 0, 0, 0, 0, 9, 9,19, 0, 0, 0, 0, 0, 9, 9,19, 0
				dcb	 9, 9, 9, 9, 9, 9,19, 9, 9, 9, 9, 9, 9, 9,19, 9
				dcb	19,19,19,19,19,19,19,19, 0, 0, 0, 0, 9, 9,19, 0
				dcb	 0, 0, 0, 0, 9, 9,19, 0, 0, 0, 0, 0, 9, 9,19, 0
				dcb	 0, 0, 0, 0, 9, 9,19, 0, 0, 0, 0, 0, 9, 9,19, 0
				dcb	 0, 0, 0, 0, 9, 9,19, 0, 0, 0, 0, 0, 9, 9,19, 0
				dcb	 0, 0, 0, 0, 9, 9,19, 0, 0, 0, 0, 0, 9, 9,19, 0
				dcb	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
				dcb	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
				dcb	 0,14, 0,23, 0,15, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0
				dcb	 0, 0, 0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0, 0

ixtbl	dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_no_op,			_add_ix_bc,		_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op

		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_no_op,			_add_ix_de,		_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op

		dcd		_no_op,			_ld_ix_word,	_ld_xword_ix,	_inc_ix
		dcd		_inc_ixh,		_dec_ixh,		_ld_ixh_byte,	_no_op
		dcd		_no_op,			_add_ix_ix,		_ld_ix_xword,	_dec_ix
		dcd		_inc_ixl,		_dec_ixl,		_ld_ixl_byte,	_no_op

		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_inc_xix,		_dec_xix,		_ld_xix_byte,	_no_op
		dcd		_no_op,			_add_ix_sp,		_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op

		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_ld_b_ixh,		_ld_b_ixl,		_ld_b_xix,		_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_ld_c_ixh,		_ld_c_ixl,		_ld_c_xix,		_no_op

		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_ld_d_ixh,		_ld_d_ixl,		_ld_d_xix,		_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_ld_e_ixh,		_ld_e_ixl,		_ld_e_xix,		_no_op

		dcd		_ld_ixh_b,		_ld_ixh_c,		_ld_ixh_d,		_ld_ixh_e
		dcd		_ld_nop,		_ld_ixh_ixl,	_ld_h_xix,		_ld_ixh_a
		dcd		_ld_ixl_b,		_ld_ixl_c,		_ld_ixl_d,		_ld_ixl_e
		dcd		_ld_ixl_ixh,	_ld_nop,		_ld_l_xix,		_ld_ixl_a

		dcd		_ld_xix_b,		_ld_xix_c,		_ld_xix_d,		_ld_xix_e
		dcd		_ld_xix_h,		_ld_xix_l,		_no_op,			_ld_xix_a
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_ld_a_ixh,		_ld_a_ixl,		_ld_a_xix,		_no_op

		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_add_a_ixh,		_add_a_ixl,		_add_a_xix,		_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_adc_a_ixh,		_adc_a_ixl,		_adc_a_xix,		_no_op

		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_sub_ixh,		_sub_ixl,		_sub_xix,		_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_sbc_a_ixh,		_sbc_a_ixl,		_sbc_a_xix,		_no_op

		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_and_ixh,		_and_ixl,		_and_xix,		_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_xor_ixh,		_xor_ixl,		_xor_xix,		_no_op

		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_or_ixh,		_or_ixl,		_or_xix,		_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_cp_ixh,		_cp_ixl,		_cp_xix,		_no_op

		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			z80a_ixcb
		dcd		_no_op,			_no_op,			_no_op,			_no_op

		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op

		dcd		_no_op,			_pop_ix,		_no_op,			_ex_xsp_ix
		dcd		_no_op,			_push_ix,		_no_op,			_no_op
		dcd		_no_op,			_jp_ix,			_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op

		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_no_op,			_ld_sp_ix,		_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op


iytbl	dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_no_op,			_add_iy_bc,		_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op

		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_no_op,			_add_iy_de,		_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op

		dcd		_no_op,			_ld_iy_word,	_ld_xword_iy,	_inc_iy
		dcd		_inc_iyh,		_dec_iyh,		_ld_iyh_byte,	_no_op
		dcd		_no_op,			_add_iy_iy,		_ld_iy_xword,	_dec_iy
		dcd		_inc_iyl,		_dec_iyl,		_ld_iyl_byte,	_no_op

		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_inc_xiy,		_dec_xiy,		_ld_xiy_byte,	_no_op
		dcd		_no_op,			_add_iy_sp,		_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op

		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_ld_b_iyh,		_ld_b_iyl,		_ld_b_xiy,		_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_ld_c_iyh,		_ld_c_iyl,		_ld_c_xiy,		_no_op

		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_ld_d_iyh,		_ld_d_iyl,		_ld_d_xiy,		_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_ld_e_iyh,		_ld_e_iyl,		_ld_e_xiy,		_no_op

		dcd		_ld_iyh_b,		_ld_iyh_c,		_ld_iyh_d,		_ld_iyh_e
		dcd		_ld_nop,		_ld_iyh_iyl,	_ld_h_xiy,		_ld_iyh_a
		dcd		_ld_iyl_b,		_ld_iyl_c,		_ld_iyl_d,		_ld_iyl_e
		dcd		_ld_iyl_iyh,	_ld_nop,		_ld_l_xiy,		_ld_iyl_a

		dcd		_ld_xiy_b,		_ld_xiy_c,		_ld_xiy_d,		_ld_xiy_e
		dcd		_ld_xiy_h,		_ld_xiy_l,		_no_op,			_ld_xiy_a
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_ld_a_iyh,		_ld_a_iyl,		_ld_a_xiy,		_no_op

		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_add_a_iyh,		_add_a_iyl,		_add_a_xiy,		_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_adc_a_iyh,		_adc_a_iyl,		_adc_a_xiy,		_no_op

		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_sub_iyh,		_sub_iyl,		_sub_xiy,		_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_sbc_a_iyh,		_sbc_a_iyl,		_sbc_a_xiy,		_no_op

		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_and_iyh,		_and_iyl,		_and_xiy,		_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_xor_iyh,		_xor_iyl,		_xor_xiy,		_no_op

		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_or_iyh,		_or_iyl,		_or_xiy,		_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_cp_iyh,		_cp_iyl,		_cp_xiy,		_no_op

		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			z80a_iycb
		dcd		_no_op,			_no_op,			_no_op,			_no_op

		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op

		dcd		_no_op,			_pop_iy,		_no_op,			_ex_xsp_iy
		dcd		_no_op,			_push_iy,		_no_op,			_no_op
		dcd		_no_op,			_jp_iy,			_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op

		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op
		dcd		_no_op,			_ld_sp_iy,		_no_op,			_no_op
		dcd		_no_op,			_no_op,			_no_op,			_no_op

	END


RetroPC.NET-CVS <cvs@retropc.net>