File:  [RetroPC.NET] / xmil / z80c / z80c_ix.c
Revision 1.3: download - view: text, annotated - select for diffs
Tue Jun 3 05:07:32 2008 JST (17 years, 4 months ago) by yui
Branches: MAIN
CVS tags: HEAD
change to c style comment

/* -----------------------------------------------------------------------
 *
 * Z80C : Z80 Engine - GENERIC
 *
 *                              Copyright by Studio Milmake 1999-2000,2004
 *
 *------------------------------------------------------------------------ */

#include	"compiler.h"
#include	"z80core.h"
#include	"z80c.h"
#include	"z80c.mcr"
#include	"z80c_i.mcr"


#define	R_Z80IXL	z80core.s.r.b.ixl
#define	R_Z80IXH	z80core.s.r.b.ixh
#undef	R_Z80IY


Z80FN _ld_nop(void)			{ }


Z80FN _no_op(void)			MCR_DEC_W(R_Z80PC)
Z80FN _add_ix_bc(void)		MCR_ADD_W(R_Z80IX, R_Z80BC)

Z80FN _add_ix_de(void)		MCR_ADD_W(R_Z80IX, R_Z80DE)

Z80FN _ld_ix_word(void)		LDW_w(R_Z80IX)
Z80FN _ld_xword_ix(void)	LDx_W(R_Z80IX)
Z80FN _inc_ix(void)			MCR_INC_W(R_Z80IX)
Z80FN _inc_ixh(void)		MCR_INC(R_Z80IXH)
Z80FN _dec_ixh(void)		MCR_DEC(R_Z80IXH)
Z80FN _ld_ixh_byte(void)	LDB_b(R_Z80IXH)
Z80FN _add_ix_ix(void)		MCR_ADDx2(R_Z80IX)
Z80FN _ld_ix_xword(void)	LDW_x(R_Z80IX)
Z80FN _dec_ix(void)			MCR_DEC_W(R_Z80IX)
Z80FN _inc_ixl(void)		MCR_INC(R_Z80IXL)
Z80FN _dec_ixl(void)		MCR_DEC(R_Z80IXL)
Z80FN _ld_ixl_byte(void)	LDB_b(R_Z80IXL)

Z80FN _inc_xix(void)		MCR_INC_XI(R_Z80IX)
Z80FN _dec_xix(void)		MCR_DEC_XI(R_Z80IX)
Z80FN _ld_xix_byte(void)	MCR_LDXIBYTE(R_Z80IX)
Z80FN _add_ix_sp(void)		MCR_ADD_W(R_Z80IX, R_Z80SP)

Z80FN _ld_b_ixh(void)		MCR_LD(R_Z80B, R_Z80IXH)
Z80FN _ld_b_ixl(void)		MCR_LD(R_Z80B, R_Z80IXL)
Z80FN _ld_b_xix(void)		MCR_LD_RXI(R_Z80B, R_Z80IX)
Z80FN _ld_c_ixh(void)		MCR_LD(R_Z80C, R_Z80IXH)
Z80FN _ld_c_ixl(void)		MCR_LD(R_Z80C, R_Z80IXL)
Z80FN _ld_c_xix(void)		MCR_LD_RXI(R_Z80C, R_Z80IX)

Z80FN _ld_d_ixh(void)		MCR_LD(R_Z80D, R_Z80IXH)
Z80FN _ld_d_ixl(void)		MCR_LD(R_Z80D, R_Z80IXL)
Z80FN _ld_d_xix(void)		MCR_LD_RXI(R_Z80D, R_Z80IX)
Z80FN _ld_e_ixh(void)		MCR_LD(R_Z80E, R_Z80IXH)
Z80FN _ld_e_ixl(void)		MCR_LD(R_Z80E, R_Z80IXL)
Z80FN _ld_e_xix(void)		MCR_LD_RXI(R_Z80E, R_Z80IX)

Z80FN _ld_ixh_b(void)		MCR_LD(R_Z80IXH, R_Z80B)
Z80FN _ld_ixh_c(void)		MCR_LD(R_Z80IXH, R_Z80C)
Z80FN _ld_ixh_d(void)		MCR_LD(R_Z80IXH, R_Z80D)
Z80FN _ld_ixh_e(void)		MCR_LD(R_Z80IXH, R_Z80E)
Z80FN _ld_ixh_ixl(void)		MCR_LD(R_Z80IXH, R_Z80IXL)
Z80FN _ld_h_xix(void)		MCR_LD_RXI(R_Z80H, R_Z80IX)
Z80FN _ld_ixh_a(void)		MCR_LD(R_Z80IXH, R_Z80A)
Z80FN _ld_ixl_b(void)		MCR_LD(R_Z80IXL, R_Z80B)
Z80FN _ld_ixl_c(void)		MCR_LD(R_Z80IXL, R_Z80C)
Z80FN _ld_ixl_d(void)		MCR_LD(R_Z80IXL, R_Z80D)
Z80FN _ld_ixl_e(void)		MCR_LD(R_Z80IXL, R_Z80E)
Z80FN _ld_ixl_ixh(void)		MCR_LD(R_Z80IXL, R_Z80IXH)
Z80FN _ld_l_xix(void)		MCR_LD_RXI(R_Z80L, R_Z80IX)
Z80FN _ld_ixl_a(void)		MCR_LD(R_Z80IXL, R_Z80A)

Z80FN _ld_xix_b(void)		MCR_LD_XIR(R_Z80B, R_Z80IX)
Z80FN _ld_xix_c(void)		MCR_LD_XIR(R_Z80C, R_Z80IX)
Z80FN _ld_xix_d(void)		MCR_LD_XIR(R_Z80D, R_Z80IX)
Z80FN _ld_xix_e(void)		MCR_LD_XIR(R_Z80E, R_Z80IX)
Z80FN _ld_xix_h(void)		MCR_LD_XIR(R_Z80H, R_Z80IX)
Z80FN _ld_xix_l(void)		MCR_LD_XIR(R_Z80L, R_Z80IX)
Z80FN _ld_xix_a(void)		MCR_LD_XIR(R_Z80A, R_Z80IX)
Z80FN _ld_a_ixh(void)		MCR_LD(R_Z80A, R_Z80IXH)
Z80FN _ld_a_ixl(void)		MCR_LD(R_Z80A, R_Z80IXL)
Z80FN _ld_a_xix(void)		MCR_LD_RXI(R_Z80A, R_Z80IX)

Z80FN _add_a_ixh(void)		MCR_ADD(R_Z80IXH)
Z80FN _add_a_ixl(void)		MCR_ADD(R_Z80IXL)
Z80FN _add_a_xix(void)		MCR_ADD_XI(R_Z80IX)
Z80FN _adc_a_ixh(void)		MCR_ADC(R_Z80IXH)
Z80FN _adc_a_ixl(void)		MCR_ADC(R_Z80IXL)
Z80FN _adc_a_xix(void)		MCR_ADC_XI(R_Z80IX)

Z80FN _sub_ixh(void)		MCR_SUB(R_Z80IXH)
Z80FN _sub_ixl(void)		MCR_SUB(R_Z80IXL)
Z80FN _sub_xix(void)		MCR_SUB_XI(R_Z80IX)
Z80FN _sbc_a_ixh(void)		MCR_SBC(R_Z80IXH)
Z80FN _sbc_a_ixl(void)		MCR_SBC(R_Z80IXL)
Z80FN _sbc_a_xix(void)		MCR_SBC_XI(R_Z80IX)

Z80FN _and_ixh(void)		MCR_AND(R_Z80IXH)
Z80FN _and_ixl(void)		MCR_AND(R_Z80IXL)
Z80FN _and_xix(void)		MCR_AND_XI(R_Z80IX)
Z80FN _xor_ixh(void)		MCR_XOR(R_Z80IXH)
Z80FN _xor_ixl(void)		MCR_XOR(R_Z80IXL)
Z80FN _xor_xix(void)		MCR_XOR_XI(R_Z80IX)

Z80FN _or_ixh(void)			MCR_OR(R_Z80IXH)
Z80FN _or_ixl(void)			MCR_OR(R_Z80IXL)
Z80FN _or_xix(void)			MCR_OR_XI(R_Z80IX)
Z80FN _cp_ixh(void)			MCR_CP(R_Z80IXH)
Z80FN _cp_ixl(void)			MCR_CP(R_Z80IXL)
Z80FN _cp_xix(void)			MCR_CP_XI(R_Z80IX)

Z80FN _pop_ix(void)			MCR_POP(R_Z80IX)
Z80FN _ex_xsp_ix(void)		MCR_EX_XSP(R_Z80IX)
Z80FN _push_ix(void)		MCR_PUSH(R_Z80IX)
Z80FN _jp_ix(void)			MCR_LD_W(R_Z80PC, R_Z80IX)

Z80FN _ld_sp_ix(void)		MCR_LD_W(R_Z80SP, R_Z80IX)


static const Z80OP z80c_ixp[256] = {
	_no_op,			_no_op,			_no_op,			_no_op,			/* 00 */
	_no_op,			_no_op,			_no_op,			_no_op,
	_no_op,			_add_ix_bc,		_no_op,			_no_op,
	_no_op,			_no_op,			_no_op,			_no_op,

	_no_op,			_no_op,			_no_op,			_no_op,			/* 10 */
	_no_op,			_no_op,			_no_op,			_no_op,
	_no_op,			_add_ix_de,		_no_op,			_no_op,
	_no_op,			_no_op,			_no_op,			_no_op,

	_no_op,			_ld_ix_word,	_ld_xword_ix,	_inc_ix,		/* 20 */
	_inc_ixh,		_dec_ixh,		_ld_ixh_byte,	_no_op,
	_no_op,			_add_ix_ix,		_ld_ix_xword,	_dec_ix,
	_inc_ixl,		_dec_ixl,		_ld_ixl_byte,	_no_op,

	_no_op,			_no_op,			_no_op,			_no_op,			/* 30 */
	_inc_xix,		_dec_xix,		_ld_xix_byte,	_no_op,
	_no_op,			_add_ix_sp,		_no_op,			_no_op,
	_no_op,			_no_op,			_no_op,			_no_op,

	_no_op,			_no_op,			_no_op,			_no_op,			/* 40 */
	_ld_b_ixh,		_ld_b_ixl,		_ld_b_xix,		_no_op,
	_no_op,			_no_op,			_no_op,			_no_op,
	_ld_c_ixh,		_ld_c_ixl,		_ld_c_xix,		_no_op,

	_no_op,			_no_op,			_no_op,			_no_op,			/* 50 */
	_ld_d_ixh,		_ld_d_ixl,		_ld_d_xix,		_no_op,
	_no_op,			_no_op,			_no_op,			_no_op,
	_ld_e_ixh,		_ld_e_ixl,		_ld_e_xix,		_no_op,

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

	_ld_xix_b,		_ld_xix_c,		_ld_xix_d,		_ld_xix_e,		/* 70 */
	_ld_xix_h,		_ld_xix_l,		_no_op,			_ld_xix_a,
	_no_op,			_no_op,			_no_op,			_no_op,
	_ld_a_ixh,		_ld_a_ixl,		_ld_a_xix,		_no_op,

	_no_op,			_no_op,			_no_op,			_no_op,			/* 80 */
	_add_a_ixh,		_add_a_ixl,		_add_a_xix,		_no_op,
	_no_op,			_no_op,			_no_op,			_no_op,
	_adc_a_ixh,		_adc_a_ixl,		_adc_a_xix,		_no_op,

	_no_op,			_no_op,			_no_op,			_no_op,			/* 90 */
	_sub_ixh,		_sub_ixl,		_sub_xix,		_no_op,
	_no_op,			_no_op,			_no_op,			_no_op,
	_sbc_a_ixh,		_sbc_a_ixl,		_sbc_a_xix,		_no_op,

	_no_op,			_no_op,			_no_op,			_no_op,			/* a0 */
	_and_ixh,		_and_ixl,		_and_xix,		_no_op,
	_no_op,			_no_op,			_no_op,			_no_op,
	_xor_ixh,		_xor_ixl,		_xor_xix,		_no_op,

	_no_op,			_no_op,			_no_op,			_no_op,			/* b0 */
	_or_ixh,		_or_ixl,		_or_xix,		_no_op,
	_no_op,			_no_op,			_no_op,			_no_op,
	_cp_ixh,		_cp_ixl,		_cp_xix,		_no_op,

	_no_op,			_no_op,			_no_op,			_no_op,			/* c0 */
	_no_op,			_no_op,			_no_op,			_no_op,
	_no_op,			_no_op,			_no_op,			z80c_ixcb,
	_no_op,			_no_op,			_no_op,			_no_op,

	_no_op,			_no_op,			_no_op,			_no_op,			/* d0 */
	_no_op,			_no_op,			_no_op,			_no_op,
	_no_op,			_no_op,			_no_op,			_no_op,
	_no_op,			_no_op,			_no_op,			_no_op,

	_no_op,			_pop_ix,		_no_op,			_ex_xsp_ix,		/* e0 */
	_no_op,			_push_ix,		_no_op,			_no_op,
	_no_op,			_jp_ix,			_no_op,			_no_op,
	_no_op,			_no_op,			_no_op,			_no_op,

	_no_op,			_no_op,			_no_op,			_no_op,			/* f0 */
	_no_op,			_no_op,			_no_op,			_no_op,
	_no_op,			_ld_sp_ix,		_no_op,			_no_op,
	_no_op,			_no_op,			_no_op,			_no_op
};


void z80c_ix(void) {

	UINT	tmp;

	R_Z80R++;
	GET_PC_BYTE(tmp);
	Z80_COUNT(cycles_xx[tmp]);
	z80c_ixp[tmp]();
}


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