
#ifdef PICODRIVE_HACK
#define NOT_POLLING ctx->not_polling = 1;
#else
#define NOT_POLLING
#endif

// ORI
OPCODE(0x0000)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	res = DREGu8((Opcode >> 0) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 0) & 7) = res;
RET(8)
}

// ORI
OPCODE(0x0010)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// ORI
OPCODE(0x0018)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// ORI
OPCODE(0x0020)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// ORI
OPCODE(0x0028)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// ORI
OPCODE(0x0030)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(22)
}

// ORI
OPCODE(0x0038)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// ORI
OPCODE(0x0039)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(24)
}

// ORI
OPCODE(0x001F)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// ORI
OPCODE(0x0027)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// ORI
OPCODE(0x0040)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	res = DREGu16((Opcode >> 0) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 0) & 7) = res;
RET(8)
}

// ORI
OPCODE(0x0050)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ORI
OPCODE(0x0058)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ORI
OPCODE(0x0060)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// ORI
OPCODE(0x0068)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// ORI
OPCODE(0x0070)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(22)
}

// ORI
OPCODE(0x0078)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// ORI
OPCODE(0x0079)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(24)
}

// ORI
OPCODE(0x005F)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ORI
OPCODE(0x0067)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// ORI
OPCODE(0x0080)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	res = DREGu32((Opcode >> 0) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 0) & 7) = res;
RET(16)
}

// ORI
OPCODE(0x0090)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// ORI
OPCODE(0x0098)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// ORI
OPCODE(0x00A0)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// ORI
OPCODE(0x00A8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(32)
}

// ORI
OPCODE(0x00B0)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(34)
}

// ORI
OPCODE(0x00B8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(32)
}

// ORI
OPCODE(0x00B9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(36)
}

// ORI
OPCODE(0x009F)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// ORI
OPCODE(0x00A7)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// ORICCR
OPCODE(0x003C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(res);
	res &= M68K_CCR_MASK;
	res |= GET_CCR;
	SET_CCR(res)
RET(20)
}

// ORISR
OPCODE(0x007C)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_S)
	{
		u32 res;
		FETCH_WORD(res);
		res &= M68K_SR_MASK;
		res |= GET_SR;
		SET_SR(res)
		CHECK_INT_TO_JUMP(20)
	}
	else
	{
		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
#ifdef USE_CYCLONE_TIMING
		RET(0)
#else
		RET(4)
#endif
	}
RET(20)
}

// ANDI
OPCODE(0x0200)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	res = DREGu8((Opcode >> 0) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 0) & 7) = res;
RET(8)
}

// ANDI
OPCODE(0x0210)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// ANDI
OPCODE(0x0218)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// ANDI
OPCODE(0x0220)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// ANDI
OPCODE(0x0228)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// ANDI
OPCODE(0x0230)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(22)
}

// ANDI
OPCODE(0x0238)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// ANDI
OPCODE(0x0239)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(24)
}

// ANDI
OPCODE(0x021F)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// ANDI
OPCODE(0x0227)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// ANDI
OPCODE(0x0240)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	res = DREGu16((Opcode >> 0) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 0) & 7) = res;
RET(8)
}

// ANDI
OPCODE(0x0250)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ANDI
OPCODE(0x0258)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ANDI
OPCODE(0x0260)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// ANDI
OPCODE(0x0268)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// ANDI
OPCODE(0x0270)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(22)
}

// ANDI
OPCODE(0x0278)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// ANDI
OPCODE(0x0279)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(24)
}

// ANDI
OPCODE(0x025F)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ANDI
OPCODE(0x0267)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// ANDI
OPCODE(0x0280)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	res = DREGu32((Opcode >> 0) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 0) & 7) = res;
#ifdef USE_CYCLONE_TIMING
RET(14)
#else
RET(16)
#endif
}

// ANDI
OPCODE(0x0290)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// ANDI
OPCODE(0x0298)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// ANDI
OPCODE(0x02A0)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// ANDI
OPCODE(0x02A8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(32)
}

// ANDI
OPCODE(0x02B0)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(34)
}

// ANDI
OPCODE(0x02B8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(32)
}

// ANDI
OPCODE(0x02B9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(36)
}

// ANDI
OPCODE(0x029F)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// ANDI
OPCODE(0x02A7)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// ANDICCR
OPCODE(0x023C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(res);
	res &= M68K_CCR_MASK;
	res &= GET_CCR;
	SET_CCR(res)
RET(20)
}

// ANDISR
OPCODE(0x027C)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_S)
	{
		FETCH_WORD(res);
		res &= M68K_SR_MASK;
		res &= GET_SR;
		SET_SR(res)
		if (!flag_S)
		{
			res = AREG(7);
			AREG(7) = ASP;
			ASP = res;
		}
		CHECK_INT_TO_JUMP(20)
	}
	else
	{
		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
		RET(4)
	}
RET(20)
}

// EORI
OPCODE(0x0A00)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	res = DREGu8((Opcode >> 0) & 7);
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 0) & 7) = res;
RET(8)
}

// EORI
OPCODE(0x0A10)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// EORI
OPCODE(0x0A18)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// EORI
OPCODE(0x0A20)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// EORI
OPCODE(0x0A28)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// EORI
OPCODE(0x0A30)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(22)
}

// EORI
OPCODE(0x0A38)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// EORI
OPCODE(0x0A39)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(24)
}

// EORI
OPCODE(0x0A1F)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// EORI
OPCODE(0x0A27)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// EORI
OPCODE(0x0A40)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	res = DREGu16((Opcode >> 0) & 7);
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 0) & 7) = res;
RET(8)
}

// EORI
OPCODE(0x0A50)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// EORI
OPCODE(0x0A58)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// EORI
OPCODE(0x0A60)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// EORI
OPCODE(0x0A68)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// EORI
OPCODE(0x0A70)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(22)
}

// EORI
OPCODE(0x0A78)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// EORI
OPCODE(0x0A79)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(24)
}

// EORI
OPCODE(0x0A5F)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// EORI
OPCODE(0x0A67)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// EORI
OPCODE(0x0A80)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	res = DREGu32((Opcode >> 0) & 7);
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 0) & 7) = res;
RET(16)
}

// EORI
OPCODE(0x0A90)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// EORI
OPCODE(0x0A98)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// EORI
OPCODE(0x0AA0)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// EORI
OPCODE(0x0AA8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(32)
}

// EORI
OPCODE(0x0AB0)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(34)
}

// EORI
OPCODE(0x0AB8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(32)
}

// EORI
OPCODE(0x0AB9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(36)
}

// EORI
OPCODE(0x0A9F)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// EORI
OPCODE(0x0AA7)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// EORICCR
OPCODE(0x0A3C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(res);
	res &= M68K_CCR_MASK;
	res ^= GET_CCR;
	SET_CCR(res)
RET(20)
}

// EORISR
OPCODE(0x0A7C)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_S)
	{
		FETCH_WORD(res);
		res &= M68K_SR_MASK;
		res ^= GET_SR;
		SET_SR(res)
		if (!flag_S)
		{
			res = AREG(7);
			AREG(7) = ASP;
			ASP = res;
		}
		CHECK_INT_TO_JUMP(20)
	}
	else
	{
		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
		RET(0)
	}
RET(20)
}

// SUBI
OPCODE(0x0400)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	dst = DREGu8((Opcode >> 0) & 7);
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 0) & 7) = res;
RET(8)
}

// SUBI
OPCODE(0x0410)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// SUBI
OPCODE(0x0418)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// SUBI
OPCODE(0x0420)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// SUBI
OPCODE(0x0428)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// SUBI
OPCODE(0x0430)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(22)
}

// SUBI
OPCODE(0x0438)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// SUBI
OPCODE(0x0439)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(24)
}

// SUBI
OPCODE(0x041F)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// SUBI
OPCODE(0x0427)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// SUBI
OPCODE(0x0440)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	dst = DREGu16((Opcode >> 0) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 0) & 7) = res;
RET(8)
}

// SUBI
OPCODE(0x0450)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// SUBI
OPCODE(0x0458)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// SUBI
OPCODE(0x0460)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// SUBI
OPCODE(0x0468)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// SUBI
OPCODE(0x0470)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(22)
}

// SUBI
OPCODE(0x0478)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// SUBI
OPCODE(0x0479)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(24)
}

// SUBI
OPCODE(0x045F)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// SUBI
OPCODE(0x0467)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// SUBI
OPCODE(0x0480)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	dst = DREGu32((Opcode >> 0) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 0) & 7) = res;
RET(16)
}

// SUBI
OPCODE(0x0490)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// SUBI
OPCODE(0x0498)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// SUBI
OPCODE(0x04A0)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// SUBI
OPCODE(0x04A8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(32)
}

// SUBI
OPCODE(0x04B0)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(34)
}

// SUBI
OPCODE(0x04B8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(32)
}

// SUBI
OPCODE(0x04B9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(36)
}

// SUBI
OPCODE(0x049F)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// SUBI
OPCODE(0x04A7)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// ADDI
OPCODE(0x0600)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	dst = DREGu8((Opcode >> 0) & 7);
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 0) & 7) = res;
RET(8)
}

// ADDI
OPCODE(0x0610)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// ADDI
OPCODE(0x0618)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// ADDI
OPCODE(0x0620)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// ADDI
OPCODE(0x0628)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// ADDI
OPCODE(0x0630)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(22)
}

// ADDI
OPCODE(0x0638)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// ADDI
OPCODE(0x0639)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(24)
}

// ADDI
OPCODE(0x061F)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// ADDI
OPCODE(0x0627)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// ADDI
OPCODE(0x0640)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	dst = DREGu16((Opcode >> 0) & 7);
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 0) & 7) = res;
RET(8)
}

// ADDI
OPCODE(0x0650)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ADDI
OPCODE(0x0658)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ADDI
OPCODE(0x0660)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// ADDI
OPCODE(0x0668)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// ADDI
OPCODE(0x0670)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(22)
}

// ADDI
OPCODE(0x0678)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// ADDI
OPCODE(0x0679)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(24)
}

// ADDI
OPCODE(0x065F)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ADDI
OPCODE(0x0667)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// ADDI
OPCODE(0x0680)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	dst = DREGu32((Opcode >> 0) & 7);
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 0) & 7) = res;
RET(16)
}

// ADDI
OPCODE(0x0690)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// ADDI
OPCODE(0x0698)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// ADDI
OPCODE(0x06A0)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// ADDI
OPCODE(0x06A8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(32)
}

// ADDI
OPCODE(0x06B0)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(34)
}

// ADDI
OPCODE(0x06B8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(32)
}

// ADDI
OPCODE(0x06B9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(36)
}

// ADDI
OPCODE(0x069F)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// ADDI
OPCODE(0x06A7)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// CMPI
OPCODE(0x0C00)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	dst = DREGu8((Opcode >> 0) & 7);
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
RET(8)
}

// CMPI
OPCODE(0x0C10)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	POST_IO
RET(12)
}

// CMPI
OPCODE(0x0C18)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	POST_IO
RET(12)
}

// CMPI
OPCODE(0x0C20)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	POST_IO
RET(14)
}

// CMPI
OPCODE(0x0C28)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	POST_IO
RET(16)
}

// CMPI
OPCODE(0x0C30)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	POST_IO
RET(18)
}

// CMPI
OPCODE(0x0C38)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	POST_IO
RET(16)
}

// CMPI
OPCODE(0x0C39)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	POST_IO
RET(20)
}

// CMPI
OPCODE(0x0C1F)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	POST_IO
RET(12)
}

// CMPI
OPCODE(0x0C27)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	POST_IO
RET(14)
}

// CMPI
OPCODE(0x0C40)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	dst = DREGu16((Opcode >> 0) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
RET(8)
}

// CMPI
OPCODE(0x0C50)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	POST_IO
RET(12)
}

// CMPI
OPCODE(0x0C58)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	POST_IO
RET(12)
}

// CMPI
OPCODE(0x0C60)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	POST_IO
RET(14)
}

// CMPI
OPCODE(0x0C68)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	POST_IO
RET(16)
}

// CMPI
OPCODE(0x0C70)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	POST_IO
RET(18)
}

// CMPI
OPCODE(0x0C78)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	POST_IO
RET(16)
}

// CMPI
OPCODE(0x0C79)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	POST_IO
RET(20)
}

// CMPI
OPCODE(0x0C5F)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	POST_IO
RET(12)
}

// CMPI
OPCODE(0x0C67)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	POST_IO
RET(14)
}

// CMPI
OPCODE(0x0C80)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	dst = DREGu32((Opcode >> 0) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
RET(14)
}

// CMPI
OPCODE(0x0C90)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(20)
}

// CMPI
OPCODE(0x0C98)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(20)
}

// CMPI
OPCODE(0x0CA0)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(22)
}

// CMPI
OPCODE(0x0CA8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(24)
}

// CMPI
OPCODE(0x0CB0)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(26)
}

// CMPI
OPCODE(0x0CB8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(24)
}

// CMPI
OPCODE(0x0CB9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(28)
}

// CMPI
OPCODE(0x0C9F)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(20)
}

// CMPI
OPCODE(0x0CA7)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(22)
}

// BTSTn
OPCODE(0x0800)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 31);
	res = DREGu32((Opcode >> 0) & 7);
	flag_NotZ = res & src;
RET(10)
}

// BTSTn
OPCODE(0x0810)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	POST_IO
RET(12)
}

// BTSTn
OPCODE(0x0818)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	POST_IO
RET(12)
}

// BTSTn
OPCODE(0x0820)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	POST_IO
RET(14)
}

// BTSTn
OPCODE(0x0828)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	POST_IO
RET(16)
}

// BTSTn
OPCODE(0x0830)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	POST_IO
RET(18)
}

// BTSTn
OPCODE(0x0838)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	POST_IO
RET(16)
}

// BTSTn
OPCODE(0x0839)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	POST_IO
RET(20)
}

// BTSTn
OPCODE(0x083A)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	POST_IO
RET(16)
}

// BTSTn
OPCODE(0x083B)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = (uptr)(PC) - BasePC;
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	POST_IO
RET(18)
}

// BTSTn
OPCODE(0x081F)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	POST_IO
RET(12)
}

// BTSTn
OPCODE(0x0827)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	POST_IO
RET(14)
}

// BCHGn
OPCODE(0x0840)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 31);
	res = DREGu32((Opcode >> 0) & 7);
	flag_NotZ = res & src;
	res ^= src;
	DREGu32((Opcode >> 0) & 7) = res;
RET(12)
}

// BCHGn
OPCODE(0x0850)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res ^= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// BCHGn
OPCODE(0x0858)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res ^= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// BCHGn
OPCODE(0x0860)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res ^= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// BCHGn
OPCODE(0x0868)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res ^= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// BCHGn
OPCODE(0x0870)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res ^= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(22)
}

// BCHGn
OPCODE(0x0878)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res ^= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// BCHGn
OPCODE(0x0879)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res ^= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(24)
}

// BCHGn
OPCODE(0x085F)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res ^= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// BCHGn
OPCODE(0x0867)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res ^= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// BCLRn
OPCODE(0x0880)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 31);
	res = DREGu32((Opcode >> 0) & 7);
	flag_NotZ = res & src;
	res &= ~src;
	DREGu32((Opcode >> 0) & 7) = res;
RET(14)
}

// BCLRn
OPCODE(0x0890)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res &= ~src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// BCLRn
OPCODE(0x0898)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res &= ~src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// BCLRn
OPCODE(0x08A0)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res &= ~src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// BCLRn
OPCODE(0x08A8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res &= ~src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// BCLRn
OPCODE(0x08B0)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res &= ~src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(22)
}

// BCLRn
OPCODE(0x08B8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res &= ~src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// BCLRn
OPCODE(0x08B9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res &= ~src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(24)
}

// BCLRn
OPCODE(0x089F)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res &= ~src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// BCLRn
OPCODE(0x08A7)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res &= ~src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// BSETn
OPCODE(0x08C0)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 31);
	res = DREGu32((Opcode >> 0) & 7);
	flag_NotZ = res & src;
	res |= src;
	DREGu32((Opcode >> 0) & 7) = res;
RET(12)
}

// BSETn
OPCODE(0x08D0)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res |= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// BSETn
OPCODE(0x08D8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res |= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// BSETn
OPCODE(0x08E0)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res |= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// BSETn
OPCODE(0x08E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res |= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// BSETn
OPCODE(0x08F0)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res |= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(22)
}

// BSETn
OPCODE(0x08F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res |= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// BSETn
OPCODE(0x08F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res |= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(24)
}

// BSETn
OPCODE(0x08DF)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res |= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// BSETn
OPCODE(0x08E7)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	src = 1 << (src & 7);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res |= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// BTST
OPCODE(0x0100)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	src = 1 << (src & 31);
	res = DREGu32((Opcode >> 0) & 7);
	flag_NotZ = res & src;
RET(6)
}

// BTST
OPCODE(0x0110)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	POST_IO
RET(8)
}

// BTST
OPCODE(0x0118)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	POST_IO
RET(8)
}

// BTST
OPCODE(0x0120)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	POST_IO
RET(10)
}

// BTST
OPCODE(0x0128)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	POST_IO
RET(12)
}

// BTST
OPCODE(0x0130)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	POST_IO
RET(14)
}

// BTST
OPCODE(0x0138)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	POST_IO
RET(12)
}

// BTST
OPCODE(0x0139)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	POST_IO
RET(16)
}

// BTST
OPCODE(0x013A)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	POST_IO
RET(12)
}

// BTST
OPCODE(0x013B)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = (uptr)(PC) - BasePC;
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	POST_IO
RET(14)
}

// BTST
OPCODE(0x013C)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	FETCH_BYTE(res);
	flag_NotZ = res & src;
RET(8)
}

// BTST
OPCODE(0x011F)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	POST_IO
RET(8)
}

// BTST
OPCODE(0x0127)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	POST_IO
RET(10)
}

// BCHG
OPCODE(0x0140)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	src = 1 << (src & 31);
	res = DREGu32((Opcode >> 0) & 7);
	flag_NotZ = res & src;
	res ^= src;
	DREGu32((Opcode >> 0) & 7) = res;
RET(8)
}

// BCHG
OPCODE(0x0150)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res ^= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// BCHG
OPCODE(0x0158)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res ^= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// BCHG
OPCODE(0x0160)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res ^= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// BCHG
OPCODE(0x0168)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res ^= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// BCHG
OPCODE(0x0170)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res ^= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// BCHG
OPCODE(0x0178)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res ^= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// BCHG
OPCODE(0x0179)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res ^= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// BCHG
OPCODE(0x015F)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res ^= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// BCHG
OPCODE(0x0167)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res ^= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// BCLR
OPCODE(0x0180)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	src = 1 << (src & 31);
	res = DREGu32((Opcode >> 0) & 7);
	flag_NotZ = res & src;
	res &= ~src;
	DREGu32((Opcode >> 0) & 7) = res;
RET(10)
}

// BCLR
OPCODE(0x0190)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res &= ~src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// BCLR
OPCODE(0x0198)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res &= ~src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// BCLR
OPCODE(0x01A0)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res &= ~src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// BCLR
OPCODE(0x01A8)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res &= ~src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// BCLR
OPCODE(0x01B0)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res &= ~src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// BCLR
OPCODE(0x01B8)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res &= ~src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// BCLR
OPCODE(0x01B9)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res &= ~src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// BCLR
OPCODE(0x019F)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res &= ~src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// BCLR
OPCODE(0x01A7)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res &= ~src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// BSET
OPCODE(0x01C0)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	src = 1 << (src & 31);
	res = DREGu32((Opcode >> 0) & 7);
	flag_NotZ = res & src;
	res |= src;
	DREGu32((Opcode >> 0) & 7) = res;
RET(8)
}

// BSET
OPCODE(0x01D0)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res |= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// BSET
OPCODE(0x01D8)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res |= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// BSET
OPCODE(0x01E0)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res |= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// BSET
OPCODE(0x01E8)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res |= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// BSET
OPCODE(0x01F0)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res |= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// BSET
OPCODE(0x01F8)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res |= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// BSET
OPCODE(0x01F9)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res |= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// BSET
OPCODE(0x01DF)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res |= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// BSET
OPCODE(0x01E7)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	src = 1 << (src & 7);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_NotZ = res & src;
	res |= src;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// MOVEPWaD
OPCODE(0x0108)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr + 0, res)
	READ_BYTE_F(adr + 2, src)
	DREGu16((Opcode >> 9) & 7) = (res << 8) | src;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
RET(24)
#endif
}

// MOVEPLaD
OPCODE(0x0148)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	res <<= 24;
	adr += 2;
	READ_BYTE_F(adr, src)
	res |= src << 16;
	adr += 2;
	READ_BYTE_F(adr, src)
	res |= src << 8;
	adr += 2;
	READ_BYTE_F(adr, src)
	DREG((Opcode >> 9) & 7) = res | src;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(24)
#else
RET(32)
#endif
}

// MOVEPWDa
OPCODE(0x0188)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu32((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	WRITE_BYTE_F(adr + 0, res >> 8)
	WRITE_BYTE_F(adr + 2, res >> 0)
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
RET(24)
#endif
}

// MOVEPLDa
OPCODE(0x01C8)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu32((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	WRITE_BYTE_F(adr, res >> 24)
	adr += 2;
	WRITE_BYTE_F(adr, res >> 16)
	adr += 2;
	WRITE_BYTE_F(adr, res >> 8)
	adr += 2;
	WRITE_BYTE_F(adr, res >> 0)
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(24)
#else
RET(32)
#endif
}

// MOVEB
OPCODE(0x1000)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu8((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
RET(4)
}

// MOVEB
OPCODE(0x1080)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu8((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(8)
}

// MOVEB
OPCODE(0x10C0)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu8((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 1;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(8)
}

// MOVEB
OPCODE(0x1100)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu8((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7) - 1;
	AREG((Opcode >> 9) & 7) = adr;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(8)
}

// MOVEB
OPCODE(0x1140)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu8((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x1180)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu8((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// MOVEB
OPCODE(0x11C0)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu8((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x13C0)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu8((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_LONG(adr);
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x1EC0)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu8((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(8)
}

// MOVEB
OPCODE(0x1F00)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu8((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(8)
}

#if 0
// MOVEB
OPCODE(0x1008)
{
	u32 adr, res;
	u32 src, dst;

	// can't read byte from Ax registers !
	ctx->execinfo |= M68K_FAULTED;
	ctx->io_cycle_counter = 0;
/*
	goto famec_Exec_End;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
*/
RET(4)
}

// MOVEB
OPCODE(0x1088)
{
	u32 adr, res;
	u32 src, dst;

	// can't read byte from Ax registers !
	ctx->execinfo |= M68K_FAULTED;
	ctx->io_cycle_counter = 0;
/*
	goto famec_Exec_End;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
*/
RET(8)
}

// MOVEB
OPCODE(0x10C8)
{
	u32 adr, res;
	u32 src, dst;

	// can't read byte from Ax registers !
	ctx->execinfo |= M68K_FAULTED;
	ctx->io_cycle_counter = 0;
/*
	goto famec_Exec_End;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 1;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
*/
RET(8)
}

// MOVEB
OPCODE(0x1108)
{
	u32 adr, res;
	u32 src, dst;

	// can't read byte from Ax registers !
	ctx->execinfo |= M68K_FAULTED;
	ctx->io_cycle_counter = 0;
/*
	goto famec_Exec_End;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7) - 1;
	AREG((Opcode >> 9) & 7) = adr;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
*/
RET(8)
}

// MOVEB
OPCODE(0x1148)
{
	u32 adr, res;
	u32 src, dst;

	// can't read byte from Ax registers !
	ctx->execinfo |= M68K_FAULTED;
	ctx->io_cycle_counter = 0;
/*
	goto famec_Exec_End;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
*/
RET(12)
}

// MOVEB
OPCODE(0x1188)
{
	u32 adr, res;
	u32 src, dst;

	// can't read byte from Ax registers !
	ctx->execinfo |= M68K_FAULTED;
	ctx->io_cycle_counter = 0;
/*
	goto famec_Exec_End;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
*/
RET(14)
}

// MOVEB
OPCODE(0x11C8)
{
	u32 adr, res;
	u32 src, dst;

	// can't read byte from Ax registers !
	ctx->execinfo |= M68K_FAULTED;
	ctx->io_cycle_counter = 0;
/*
	goto famec_Exec_End;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
*/
RET(12)
}

// MOVEB
OPCODE(0x13C8)
{
	u32 adr, res;
	u32 src, dst;

	// can't read byte from Ax registers !
	ctx->execinfo |= M68K_FAULTED;
	ctx->io_cycle_counter = 0;
/*
	goto famec_Exec_End;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_LONG(adr);
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
*/
RET(16)
}

// MOVEB
OPCODE(0x1EC8)
{
	u32 adr, res;
	u32 src, dst;

	// can't read byte from Ax registers !
	ctx->execinfo |= M68K_FAULTED;
	ctx->io_cycle_counter = 0;
/*
	goto famec_Exec_End;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
*/
RET(8)
}

// MOVEB
OPCODE(0x1F08)
{
	u32 adr, res;
	u32 src, dst;

	// can't read byte from Ax registers !
	ctx->execinfo |= M68K_FAULTED;
	ctx->io_cycle_counter = 0;
/*
	goto famec_Exec_End;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
*/
RET(8)
}
#endif

// MOVEB
OPCODE(0x1010)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// MOVEB
OPCODE(0x1090)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x10D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 1;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x1110)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7) - 1;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x1150)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x1190)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// MOVEB
OPCODE(0x11D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x13D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_LONG(adr);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// MOVEB
OPCODE(0x1ED0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7);
	AREG(7) += 2;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x1F10)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x1018)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// MOVEB
OPCODE(0x1098)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x10D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 1;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x1118)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7) - 1;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x1158)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x1198)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// MOVEB
OPCODE(0x11D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x13D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_LONG(adr);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// MOVEB
OPCODE(0x1ED8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7);
	AREG(7) += 2;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x1F18)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x1020)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(10)
}

// MOVEB
OPCODE(0x10A0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// MOVEB
OPCODE(0x10E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 1;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// MOVEB
OPCODE(0x1120)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7) - 1;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// MOVEB
OPCODE(0x1160)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// MOVEB
OPCODE(0x11A0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// MOVEB
OPCODE(0x11E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// MOVEB
OPCODE(0x13E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_LONG(adr);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(22)
}

// MOVEB
OPCODE(0x1EE0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7);
	AREG(7) += 2;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// MOVEB
OPCODE(0x1F20)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// MOVEB
OPCODE(0x1028)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x10A8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x10E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 1;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x1128)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7) - 1;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x1168)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// MOVEB
OPCODE(0x11A8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(22)
}

// MOVEB
OPCODE(0x11E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// MOVEB
OPCODE(0x13E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_LONG(adr);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(24)
}

// MOVEB
OPCODE(0x1EE8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7);
	AREG(7) += 2;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x1F28)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x1030)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// MOVEB
OPCODE(0x10B0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// MOVEB
OPCODE(0x10F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 1;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// MOVEB
OPCODE(0x1130)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7) - 1;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// MOVEB
OPCODE(0x1170)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(22)
}

// MOVEB
OPCODE(0x11B0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(24)
}

// MOVEB
OPCODE(0x11F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(22)
}

// MOVEB
OPCODE(0x13F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_LONG(adr);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(26)
}

// MOVEB
OPCODE(0x1EF0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7);
	AREG(7) += 2;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// MOVEB
OPCODE(0x1F30)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// MOVEB
OPCODE(0x1038)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x10B8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x10F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 1;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x1138)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7) - 1;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x1178)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// MOVEB
OPCODE(0x11B8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(22)
}

// MOVEB
OPCODE(0x11F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// MOVEB
OPCODE(0x13F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_LONG(adr);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(24)
}

// MOVEB
OPCODE(0x1EF8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7);
	AREG(7) += 2;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x1F38)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x1039)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x10B9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// MOVEB
OPCODE(0x10F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 1;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// MOVEB
OPCODE(0x1139)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7) - 1;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// MOVEB
OPCODE(0x1179)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(24)
}

// MOVEB
OPCODE(0x11B9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(26)
}

// MOVEB
OPCODE(0x11F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(24)
}

// MOVEB
OPCODE(0x13F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_LONG(adr);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(28)
}

// MOVEB
OPCODE(0x1EF9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7);
	AREG(7) += 2;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// MOVEB
OPCODE(0x1F39)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// MOVEB
OPCODE(0x103A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x10BA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x10FA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 1;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x113A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7) - 1;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x117A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// MOVEB
OPCODE(0x11BA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(22)
}

// MOVEB
OPCODE(0x11FA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// MOVEB
OPCODE(0x13FA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_LONG(adr);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(24)
}

// MOVEB
OPCODE(0x1EFA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7);
	AREG(7) += 2;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x1F3A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x103B)
{
	u32 adr, res;
	u32 src, dst;

	adr = (uptr)(PC) - BasePC;
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// MOVEB
OPCODE(0x10BB)
{
	u32 adr, res;
	u32 src, dst;

	adr = (uptr)(PC) - BasePC;
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// MOVEB
OPCODE(0x10FB)
{
	u32 adr, res;
	u32 src, dst;

	adr = (uptr)(PC) - BasePC;
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 1;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// MOVEB
OPCODE(0x113B)
{
	u32 adr, res;
	u32 src, dst;

	adr = (uptr)(PC) - BasePC;
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7) - 1;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// MOVEB
OPCODE(0x117B)
{
	u32 adr, res;
	u32 src, dst;

	adr = (uptr)(PC) - BasePC;
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(22)
}

// MOVEB
OPCODE(0x11BB)
{
	u32 adr, res;
	u32 src, dst;

	adr = (uptr)(PC) - BasePC;
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(24)
}

// MOVEB
OPCODE(0x11FB)
{
	u32 adr, res;
	u32 src, dst;

	adr = (uptr)(PC) - BasePC;
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(22)
}

// MOVEB
OPCODE(0x13FB)
{
	u32 adr, res;
	u32 src, dst;

	adr = (uptr)(PC) - BasePC;
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_LONG(adr);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(26)
}

// MOVEB
OPCODE(0x1EFB)
{
	u32 adr, res;
	u32 src, dst;

	adr = (uptr)(PC) - BasePC;
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7);
	AREG(7) += 2;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// MOVEB
OPCODE(0x1F3B)
{
	u32 adr, res;
	u32 src, dst;

	adr = (uptr)(PC) - BasePC;
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// MOVEB
OPCODE(0x103C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
RET(8)
}

// MOVEB
OPCODE(0x10BC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x10FC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 1;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x113C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7) - 1;
	AREG((Opcode >> 9) & 7) = adr;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x117C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x11BC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// MOVEB
OPCODE(0x11FC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x13FC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_LONG(adr);
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// MOVEB
OPCODE(0x1EFC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x1F3C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x101F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// MOVEB
OPCODE(0x109F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x10DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 1;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x111F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7) - 1;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x115F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x119F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// MOVEB
OPCODE(0x11DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// MOVEB
OPCODE(0x13DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_LONG(adr);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// MOVEB
OPCODE(0x1EDF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7);
	AREG(7) += 2;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x1F1F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// MOVEB
OPCODE(0x1027)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(10)
}

// MOVEB
OPCODE(0x10A7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// MOVEB
OPCODE(0x10E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 1;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// MOVEB
OPCODE(0x1127)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7) - 1;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// MOVEB
OPCODE(0x1167)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// MOVEB
OPCODE(0x11A7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// MOVEB
OPCODE(0x11E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_SWORD(adr);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// MOVEB
OPCODE(0x13E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	FETCH_LONG(adr);
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(22)
}

// MOVEB
OPCODE(0x1EE7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7);
	AREG(7) += 2;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// MOVEB
OPCODE(0x1F27)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// MOVEL
OPCODE(0x2000)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu32((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
RET(4)
}

// MOVEL
OPCODE(0x2080)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu32((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(12)
}

// MOVEL
OPCODE(0x20C0)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu32((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 4;
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(12)
}

// MOVEL
OPCODE(0x2100)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu32((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7) - 4;
	AREG((Opcode >> 9) & 7) = adr;
	PRE_IO
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(12)
}

// MOVEL
OPCODE(0x2140)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu32((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(16)
}

// MOVEL
OPCODE(0x2180)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu32((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(18)
}

// MOVEL
OPCODE(0x21C0)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu32((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(16)
}

// MOVEL
OPCODE(0x23C0)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu32((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_LONG(adr);
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// MOVEL
OPCODE(0x2EC0)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu32((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(12)
}

// MOVEL
OPCODE(0x2F00)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu32((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(12)
}

// MOVEL
OPCODE(0x2008)
{
	u32 adr, res;
	u32 src, dst;

	res = AREGu32((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
RET(4)
}

// MOVEL
OPCODE(0x2088)
{
	u32 adr, res;
	u32 src, dst;

	res = AREGu32((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(12)
}

// MOVEL
OPCODE(0x20C8)
{
	u32 adr, res;
	u32 src, dst;

	res = AREGu32((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 4;
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(12)
}

// MOVEL
OPCODE(0x2108)
{
	u32 adr, res;
	u32 src, dst;

	res = AREGu32((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7) - 4;
	AREG((Opcode >> 9) & 7) = adr;
	PRE_IO
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(12)
}

// MOVEL
OPCODE(0x2148)
{
	u32 adr, res;
	u32 src, dst;

	res = AREGu32((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(16)
}

// MOVEL
OPCODE(0x2188)
{
	u32 adr, res;
	u32 src, dst;

	res = AREGu32((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(18)
}

// MOVEL
OPCODE(0x21C8)
{
	u32 adr, res;
	u32 src, dst;

	res = AREGu32((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(16)
}

// MOVEL
OPCODE(0x23C8)
{
	u32 adr, res;
	u32 src, dst;

	res = AREGu32((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_LONG(adr);
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// MOVEL
OPCODE(0x2EC8)
{
	u32 adr, res;
	u32 src, dst;

	res = AREGu32((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(12)
}

// MOVEL
OPCODE(0x2F08)
{
	u32 adr, res;
	u32 src, dst;

	res = AREGu32((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(12)
}

// MOVEL
OPCODE(0x2010)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// MOVEL
OPCODE(0x2090)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// MOVEL
OPCODE(0x20D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 4;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// MOVEL
OPCODE(0x2110)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7) - 4;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(20)
}

// MOVEL
OPCODE(0x2150)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// MOVEL
OPCODE(0x2190)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// MOVEL
OPCODE(0x21D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// MOVEL
OPCODE(0x23D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_LONG(adr);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// MOVEL
OPCODE(0x2ED0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7);
	AREG(7) += 4;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// MOVEL
OPCODE(0x2F10)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7) - 4;
	AREG(7) = adr;
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(20)
}

// MOVEL
OPCODE(0x2018)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// MOVEL
OPCODE(0x2098)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// MOVEL
OPCODE(0x20D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 4;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// MOVEL
OPCODE(0x2118)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7) - 4;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(20)
}

// MOVEL
OPCODE(0x2158)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// MOVEL
OPCODE(0x2198)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// MOVEL
OPCODE(0x21D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// MOVEL
OPCODE(0x23D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_LONG(adr);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// MOVEL
OPCODE(0x2ED8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7);
	AREG(7) += 4;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// MOVEL
OPCODE(0x2F18)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7) - 4;
	AREG(7) = adr;
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(20)
}

// MOVEL
OPCODE(0x2020)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// MOVEL
OPCODE(0x20A0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// MOVEL
OPCODE(0x20E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 4;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// MOVEL
OPCODE(0x2120)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7) - 4;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(22)
}

// MOVEL
OPCODE(0x2160)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// MOVEL
OPCODE(0x21A0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// MOVEL
OPCODE(0x21E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// MOVEL
OPCODE(0x23E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_LONG(adr);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// MOVEL
OPCODE(0x2EE0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7);
	AREG(7) += 4;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// MOVEL
OPCODE(0x2F20)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7) - 4;
	AREG(7) = adr;
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(22)
}

// MOVEL
OPCODE(0x2028)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// MOVEL
OPCODE(0x20A8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// MOVEL
OPCODE(0x20E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 4;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// MOVEL
OPCODE(0x2128)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7) - 4;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(24)
}

// MOVEL
OPCODE(0x2168)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// MOVEL
OPCODE(0x21A8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// MOVEL
OPCODE(0x21E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// MOVEL
OPCODE(0x23E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_LONG(adr);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(32)
}

// MOVEL
OPCODE(0x2EE8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7);
	AREG(7) += 4;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// MOVEL
OPCODE(0x2F28)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7) - 4;
	AREG(7) = adr;
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(24)
}

// MOVEL
OPCODE(0x2030)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(18)
}

// MOVEL
OPCODE(0x20B0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// MOVEL
OPCODE(0x20F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 4;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// MOVEL
OPCODE(0x2130)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7) - 4;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(26)
}

// MOVEL
OPCODE(0x2170)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// MOVEL
OPCODE(0x21B0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_LONG_F(adr, res)
	POST_IO
RET(32)
}

// MOVEL
OPCODE(0x21F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// MOVEL
OPCODE(0x23F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_LONG(adr);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(34)
}

// MOVEL
OPCODE(0x2EF0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7);
	AREG(7) += 4;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// MOVEL
OPCODE(0x2F30)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7) - 4;
	AREG(7) = adr;
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(26)
}

// MOVEL
OPCODE(0x2038)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// MOVEL
OPCODE(0x20B8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// MOVEL
OPCODE(0x20F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 4;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// MOVEL
OPCODE(0x2138)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7) - 4;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(24)
}

// MOVEL
OPCODE(0x2178)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// MOVEL
OPCODE(0x21B8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// MOVEL
OPCODE(0x21F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// MOVEL
OPCODE(0x23F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_LONG(adr);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(32)
}

// MOVEL
OPCODE(0x2EF8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7);
	AREG(7) += 4;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// MOVEL
OPCODE(0x2F38)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7) - 4;
	AREG(7) = adr;
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(24)
}

// MOVEL
OPCODE(0x2039)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(20)
}

// MOVEL
OPCODE(0x20B9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// MOVEL
OPCODE(0x20F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 4;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// MOVEL
OPCODE(0x2139)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7) - 4;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(28)
}

// MOVEL
OPCODE(0x2179)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(32)
}

// MOVEL
OPCODE(0x21B9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_LONG_F(adr, res)
	POST_IO
RET(34)
}

// MOVEL
OPCODE(0x21F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(32)
}

// MOVEL
OPCODE(0x23F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_LONG(adr);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(36)
}

// MOVEL
OPCODE(0x2EF9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7);
	AREG(7) += 4;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// MOVEL
OPCODE(0x2F39)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7) - 4;
	AREG(7) = adr;
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(28)
}

// MOVEL
OPCODE(0x203A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// MOVEL
OPCODE(0x20BA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// MOVEL
OPCODE(0x20FA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 4;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// MOVEL
OPCODE(0x213A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7) - 4;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(24)
}

// MOVEL
OPCODE(0x217A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// MOVEL
OPCODE(0x21BA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// MOVEL
OPCODE(0x21FA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// MOVEL
OPCODE(0x23FA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_LONG(adr);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(32)
}

// MOVEL
OPCODE(0x2EFA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7);
	AREG(7) += 4;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// MOVEL
OPCODE(0x2F3A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7) - 4;
	AREG(7) = adr;
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(24)
}

// MOVEL
OPCODE(0x203B)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(18)
}

// MOVEL
OPCODE(0x20BB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// MOVEL
OPCODE(0x20FB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 4;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// MOVEL
OPCODE(0x213B)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7) - 4;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(26)
}

// MOVEL
OPCODE(0x217B)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// MOVEL
OPCODE(0x21BB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_LONG_F(adr, res)
	POST_IO
RET(32)
}

// MOVEL
OPCODE(0x21FB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// MOVEL
OPCODE(0x23FB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_LONG(adr);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(34)
}

// MOVEL
OPCODE(0x2EFB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7);
	AREG(7) += 4;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// MOVEL
OPCODE(0x2F3B)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7) - 4;
	AREG(7) = adr;
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(26)
}

// MOVEL
OPCODE(0x203C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
RET(12)
}

// MOVEL
OPCODE(0x20BC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// MOVEL
OPCODE(0x20FC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 4;
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// MOVEL
OPCODE(0x213C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7) - 4;
	AREG((Opcode >> 9) & 7) = adr;
	PRE_IO
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(20)
}

// MOVEL
OPCODE(0x217C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// MOVEL
OPCODE(0x21BC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// MOVEL
OPCODE(0x21FC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// MOVEL
OPCODE(0x23FC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_LONG(adr);
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// MOVEL
OPCODE(0x2EFC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// MOVEL
OPCODE(0x2F3C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(20)
}

// MOVEL
OPCODE(0x201F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// MOVEL
OPCODE(0x209F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// MOVEL
OPCODE(0x20DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 4;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// MOVEL
OPCODE(0x211F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7) - 4;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(20)
}

// MOVEL
OPCODE(0x215F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// MOVEL
OPCODE(0x219F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// MOVEL
OPCODE(0x21DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// MOVEL
OPCODE(0x23DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_LONG(adr);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// MOVEL
OPCODE(0x2EDF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7);
	AREG(7) += 4;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// MOVEL
OPCODE(0x2F1F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7) - 4;
	AREG(7) = adr;
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(20)
}

// MOVEL
OPCODE(0x2027)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// MOVEL
OPCODE(0x20A7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// MOVEL
OPCODE(0x20E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 4;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// MOVEL
OPCODE(0x2127)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7) - 4;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(22)
}

// MOVEL
OPCODE(0x2167)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// MOVEL
OPCODE(0x21A7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// MOVEL
OPCODE(0x21E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_SWORD(adr);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// MOVEL
OPCODE(0x23E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	FETCH_LONG(adr);
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// MOVEL
OPCODE(0x2EE7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7);
	AREG(7) += 4;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// MOVEL
OPCODE(0x2F27)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	adr = AREG(7) - 4;
	AREG(7) = adr;
	WRITE_LONG_DEC_F(adr, res)
	POST_IO
RET(22)
}

// MOVEAL
OPCODE(0x2040)
{
	u32 adr, res;
	u32 src, dst;

	res = (s32)DREGs32((Opcode >> 0) & 7);
	AREG((Opcode >> 9) & 7) = res;
RET(4)
}

// MOVEAL
OPCODE(0x2048)
{
	u32 adr, res;
	u32 src, dst;

	res = (s32)AREGs32((Opcode >> 0) & 7);
	AREG((Opcode >> 9) & 7) = res;
RET(4)
}

// MOVEAL
OPCODE(0x2050)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READSX_LONG_F(adr, res)
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// MOVEAL
OPCODE(0x2058)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READSX_LONG_F(adr, res)
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// MOVEAL
OPCODE(0x2060)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READSX_LONG_F(adr, res)
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// MOVEAL
OPCODE(0x2068)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READSX_LONG_F(adr, res)
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// MOVEAL
OPCODE(0x2070)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READSX_LONG_F(adr, res)
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(18)
}

// MOVEAL
OPCODE(0x2078)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READSX_LONG_F(adr, res)
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// MOVEAL
OPCODE(0x2079)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READSX_LONG_F(adr, res)
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(20)
}

// MOVEAL
OPCODE(0x207A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READSX_LONG_F(adr, res)
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// MOVEAL
OPCODE(0x207B)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READSX_LONG_F(adr, res)
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(18)
}

// MOVEAL
OPCODE(0x207C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(res);
	AREG((Opcode >> 9) & 7) = res;
RET(12)
}

// MOVEAL
OPCODE(0x205F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READSX_LONG_F(adr, res)
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// MOVEAL
OPCODE(0x2067)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READSX_LONG_F(adr, res)
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// MOVEW
OPCODE(0x3000)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu16((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
RET(4)
}

// MOVEW
OPCODE(0x3080)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu16((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(8)
}

// MOVEW
OPCODE(0x30C0)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu16((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 2;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(8)
}

// MOVEW
OPCODE(0x3100)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu16((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7) - 2;
	AREG((Opcode >> 9) & 7) = adr;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(8)
}

// MOVEW
OPCODE(0x3140)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu16((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x3180)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu16((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// MOVEW
OPCODE(0x31C0)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu16((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x33C0)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu16((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_LONG(adr);
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x3EC0)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu16((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(8)
}

// MOVEW
OPCODE(0x3F00)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu16((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(8)
}

// MOVEW
OPCODE(0x3008)
{
	u32 adr, res;
	u32 src, dst;

	res = AREGu16((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
RET(4)
}

// MOVEW
OPCODE(0x3088)
{
	u32 adr, res;
	u32 src, dst;

	res = AREGu16((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(8)
}

// MOVEW
OPCODE(0x30C8)
{
	u32 adr, res;
	u32 src, dst;

	res = AREGu16((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 2;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(8)
}

// MOVEW
OPCODE(0x3108)
{
	u32 adr, res;
	u32 src, dst;

	res = AREGu16((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7) - 2;
	AREG((Opcode >> 9) & 7) = adr;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(8)
}

// MOVEW
OPCODE(0x3148)
{
	u32 adr, res;
	u32 src, dst;

	res = AREGu16((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x3188)
{
	u32 adr, res;
	u32 src, dst;

	res = AREGu16((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// MOVEW
OPCODE(0x31C8)
{
	u32 adr, res;
	u32 src, dst;

	res = AREGu16((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x33C8)
{
	u32 adr, res;
	u32 src, dst;

	res = AREGu16((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_LONG(adr);
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x3EC8)
{
	u32 adr, res;
	u32 src, dst;

	res = AREGu16((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(8)
}

// MOVEW
OPCODE(0x3F08)
{
	u32 adr, res;
	u32 src, dst;

	res = AREGu16((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(8)
}

// MOVEW
OPCODE(0x3010)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// MOVEW
OPCODE(0x3090)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x30D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 2;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x3110)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7) - 2;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x3150)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x3190)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// MOVEW
OPCODE(0x31D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x33D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_LONG(adr);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// MOVEW
OPCODE(0x3ED0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7);
	AREG(7) += 2;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x3F10)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x3018)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// MOVEW
OPCODE(0x3098)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x30D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 2;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x3118)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7) - 2;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x3158)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x3198)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// MOVEW
OPCODE(0x31D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x33D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_LONG(adr);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// MOVEW
OPCODE(0x3ED8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7);
	AREG(7) += 2;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x3F18)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x3020)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(10)
}

// MOVEW
OPCODE(0x30A0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// MOVEW
OPCODE(0x30E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 2;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// MOVEW
OPCODE(0x3120)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7) - 2;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// MOVEW
OPCODE(0x3160)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// MOVEW
OPCODE(0x31A0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// MOVEW
OPCODE(0x31E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// MOVEW
OPCODE(0x33E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_LONG(adr);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(22)
}

// MOVEW
OPCODE(0x3EE0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7);
	AREG(7) += 2;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// MOVEW
OPCODE(0x3F20)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// MOVEW
OPCODE(0x3028)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x30A8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x30E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 2;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x3128)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7) - 2;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x3168)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// MOVEW
OPCODE(0x31A8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_WORD_F(adr, res)
	POST_IO
RET(22)
}

// MOVEW
OPCODE(0x31E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// MOVEW
OPCODE(0x33E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_LONG(adr);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(24)
}

// MOVEW
OPCODE(0x3EE8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7);
	AREG(7) += 2;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x3F28)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x3030)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// MOVEW
OPCODE(0x30B0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// MOVEW
OPCODE(0x30F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 2;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// MOVEW
OPCODE(0x3130)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7) - 2;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// MOVEW
OPCODE(0x3170)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(22)
}

// MOVEW
OPCODE(0x31B0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_WORD_F(adr, res)
	POST_IO
RET(24)
}

// MOVEW
OPCODE(0x31F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(22)
}

// MOVEW
OPCODE(0x33F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_LONG(adr);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(26)
}

// MOVEW
OPCODE(0x3EF0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7);
	AREG(7) += 2;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// MOVEW
OPCODE(0x3F30)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// MOVEW
OPCODE(0x3038)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x30B8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x30F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 2;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x3138)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7) - 2;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x3178)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// MOVEW
OPCODE(0x31B8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_WORD_F(adr, res)
	POST_IO
RET(22)
}

// MOVEW
OPCODE(0x31F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// MOVEW
OPCODE(0x33F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_LONG(adr);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(24)
}

// MOVEW
OPCODE(0x3EF8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7);
	AREG(7) += 2;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x3F38)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x3039)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x30B9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// MOVEW
OPCODE(0x30F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 2;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// MOVEW
OPCODE(0x3139)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7) - 2;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// MOVEW
OPCODE(0x3179)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(24)
}

// MOVEW
OPCODE(0x31B9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_WORD_F(adr, res)
	POST_IO
RET(26)
}

// MOVEW
OPCODE(0x31F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(24)
}

// MOVEW
OPCODE(0x33F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_LONG(adr);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(28)
}

// MOVEW
OPCODE(0x3EF9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7);
	AREG(7) += 2;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// MOVEW
OPCODE(0x3F39)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// MOVEW
OPCODE(0x303A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x30BA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x30FA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 2;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x313A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7) - 2;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x317A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// MOVEW
OPCODE(0x31BA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_WORD_F(adr, res)
	POST_IO
RET(22)
}

// MOVEW
OPCODE(0x31FA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// MOVEW
OPCODE(0x33FA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_LONG(adr);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(24)
}

// MOVEW
OPCODE(0x3EFA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7);
	AREG(7) += 2;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x3F3A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x303B)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// MOVEW
OPCODE(0x30BB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// MOVEW
OPCODE(0x30FB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 2;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// MOVEW
OPCODE(0x313B)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7) - 2;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// MOVEW
OPCODE(0x317B)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(22)
}

// MOVEW
OPCODE(0x31BB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_WORD_F(adr, res)
	POST_IO
RET(24)
}

// MOVEW
OPCODE(0x31FB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(22)
}

// MOVEW
OPCODE(0x33FB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_LONG(adr);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(26)
}

// MOVEW
OPCODE(0x3EFB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7);
	AREG(7) += 2;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// MOVEW
OPCODE(0x3F3B)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// MOVEW
OPCODE(0x303C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
RET(8)
}

// MOVEW
OPCODE(0x30BC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x30FC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 2;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x313C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7) - 2;
	AREG((Opcode >> 9) & 7) = adr;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x317C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x31BC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// MOVEW
OPCODE(0x31FC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x33FC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_LONG(adr);
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// MOVEW
OPCODE(0x3EFC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x3F3C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(res);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x301F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// MOVEW
OPCODE(0x309F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x30DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 2;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x311F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7) - 2;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x315F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x319F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// MOVEW
OPCODE(0x31DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVEW
OPCODE(0x33DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_LONG(adr);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// MOVEW
OPCODE(0x3EDF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7);
	AREG(7) += 2;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x3F1F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVEW
OPCODE(0x3027)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(10)
}

// MOVEW
OPCODE(0x30A7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// MOVEW
OPCODE(0x30E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 2;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// MOVEW
OPCODE(0x3127)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7) - 2;
	AREG((Opcode >> 9) & 7) = adr;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// MOVEW
OPCODE(0x3167)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 9) & 7);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// MOVEW
OPCODE(0x31A7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG((Opcode >> 9) & 7);
	DECODE_EXT_WORD
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// MOVEW
OPCODE(0x31E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_SWORD(adr);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// MOVEW
OPCODE(0x33E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	FETCH_LONG(adr);
	WRITE_WORD_F(adr, res)
	POST_IO
RET(22)
}

// MOVEW
OPCODE(0x3EE7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7);
	AREG(7) += 2;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// MOVEW
OPCODE(0x3F27)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// MOVEAW
OPCODE(0x3040)
{
	u32 adr, res;
	u32 src, dst;

	res = (s32)DREGs16((Opcode >> 0) & 7);
	AREG((Opcode >> 9) & 7) = res;
RET(4)
}

// MOVEAW
OPCODE(0x3048)
{
	u32 adr, res;
	u32 src, dst;

	res = (s32)AREGs16((Opcode >> 0) & 7);
	AREG((Opcode >> 9) & 7) = res;
RET(4)
}

// MOVEAW
OPCODE(0x3050)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READSX_WORD_F(adr, res)
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// MOVEAW
OPCODE(0x3058)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READSX_WORD_F(adr, res)
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// MOVEAW
OPCODE(0x3060)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READSX_WORD_F(adr, res)
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(10)
}

// MOVEAW
OPCODE(0x3068)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READSX_WORD_F(adr, res)
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// MOVEAW
OPCODE(0x3070)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READSX_WORD_F(adr, res)
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// MOVEAW
OPCODE(0x3078)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READSX_WORD_F(adr, res)
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// MOVEAW
OPCODE(0x3079)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READSX_WORD_F(adr, res)
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// MOVEAW
OPCODE(0x307A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READSX_WORD_F(adr, res)
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// MOVEAW
OPCODE(0x307B)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READSX_WORD_F(adr, res)
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// MOVEAW
OPCODE(0x307C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(res);
	AREG((Opcode >> 9) & 7) = res;
RET(8)
}

// MOVEAW
OPCODE(0x305F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READSX_WORD_F(adr, res)
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// MOVEAW
OPCODE(0x3067)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READSX_WORD_F(adr, res)
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(10)
}

// NEGX
OPCODE(0x4000)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 0) & 7);
	res = -src - ((flag_X >> 8) & 1);
	flag_V = res & src;
	flag_N = flag_X = flag_C = res;
	flag_NotZ |= res & 0xFF;
	DREGu8((Opcode >> 0) & 7) = res;
RET(4)
}

// NEGX
OPCODE(0x4010)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_V = res & src;
	flag_N = flag_X = flag_C = res;
	flag_NotZ |= res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// NEGX
OPCODE(0x4018)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_V = res & src;
	flag_N = flag_X = flag_C = res;
	flag_NotZ |= res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// NEGX
OPCODE(0x4020)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_V = res & src;
	flag_N = flag_X = flag_C = res;
	flag_NotZ |= res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// NEGX
OPCODE(0x4028)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_V = res & src;
	flag_N = flag_X = flag_C = res;
	flag_NotZ |= res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// NEGX
OPCODE(0x4030)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_V = res & src;
	flag_N = flag_X = flag_C = res;
	flag_NotZ |= res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// NEGX
OPCODE(0x4038)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_V = res & src;
	flag_N = flag_X = flag_C = res;
	flag_NotZ |= res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// NEGX
OPCODE(0x4039)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_V = res & src;
	flag_N = flag_X = flag_C = res;
	flag_NotZ |= res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// NEGX
OPCODE(0x401F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_V = res & src;
	flag_N = flag_X = flag_C = res;
	flag_NotZ |= res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// NEGX
OPCODE(0x4027)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_V = res & src;
	flag_N = flag_X = flag_C = res;
	flag_NotZ |= res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// NEGX
OPCODE(0x4040)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 0) & 7);
	res = -src - ((flag_X >> 8) & 1);
	flag_V = (res & src) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ |= res & 0xFFFF;
	DREGu16((Opcode >> 0) & 7) = res;
RET(4)
}

// NEGX
OPCODE(0x4050)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_V = (res & src) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ |= res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// NEGX
OPCODE(0x4058)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_V = (res & src) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ |= res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// NEGX
OPCODE(0x4060)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_V = (res & src) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ |= res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// NEGX
OPCODE(0x4068)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_V = (res & src) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ |= res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// NEGX
OPCODE(0x4070)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_V = (res & src) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ |= res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// NEGX
OPCODE(0x4078)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_V = (res & src) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ |= res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// NEGX
OPCODE(0x4079)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_V = (res & src) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ |= res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// NEGX
OPCODE(0x405F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_V = (res & src) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ |= res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// NEGX
OPCODE(0x4067)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_V = (res & src) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ |= res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// NEGX
OPCODE(0x4080)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 0) & 7);
	res = -src - ((flag_X >> 8) & 1);
	flag_NotZ |= res;
	flag_V = (res & src) >> 24;
flag_X = flag_C = (res?1:0)<<8;
//	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_N = res >> 24;
	DREGu32((Opcode >> 0) & 7) = res;
RET(6)
}

// NEGX
OPCODE(0x4090)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_NotZ |= res;
	flag_V = (res & src) >> 24;
flag_X = flag_C = (res?1:0)<<8;
//	flag_X = flag_C = ((src & res & 1) | (src >> 1) | (res >> 1)) >> 23;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// NEGX
OPCODE(0x4098)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_NotZ |= res;
	flag_V = (res & src) >> 24;
flag_X = flag_C = (res?1:0)<<8;
//	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// NEGX
OPCODE(0x40A0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_NotZ |= res;
	flag_V = (res & src) >> 24;
flag_X = flag_C = (res?1:0)<<8;
//	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// NEGX
OPCODE(0x40A8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_NotZ |= res;
	flag_V = (res & src) >> 24;
flag_X = flag_C = (res?1:0)<<8;
//	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// NEGX
OPCODE(0x40B0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_NotZ |= res;
	flag_V = (res & src) >> 24;
flag_X = flag_C = (res?1:0)<<8;
//	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// NEGX
OPCODE(0x40B8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_NotZ |= res;
	flag_V = (res & src) >> 24;
flag_X = flag_C = (res?1:0)<<8;
//	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// NEGX
OPCODE(0x40B9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_NotZ |= res;
	flag_V = (res & src) >> 24;
flag_X = flag_C = (res?1:0)<<8;
//	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// NEGX
OPCODE(0x409F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_NotZ |= res;
	flag_V = (res & src) >> 24;
flag_X = flag_C = (res?1:0)<<8;
//	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// NEGX
OPCODE(0x40A7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, src)
	res = -src - ((flag_X >> 8) & 1);
	flag_NotZ |= res;
	flag_V = (res & src) >> 24;
flag_X = flag_C = (res?1:0)<<8;
//	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// CLR
OPCODE(0x4200)
{
	u32 adr, res;
	u32 src, dst;

	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	DREGu8((Opcode >> 0) & 7) = res;
RET(4)
}

// CLR
OPCODE(0x4210)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// CLR
OPCODE(0x4218)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// CLR
OPCODE(0x4220)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// CLR
OPCODE(0x4228)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// CLR
OPCODE(0x4230)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// CLR
OPCODE(0x4238)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// CLR
OPCODE(0x4239)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// CLR
OPCODE(0x421F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// CLR
OPCODE(0x4227)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// CLR
OPCODE(0x4240)
{
	u32 adr, res;
	u32 src, dst;

	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	DREGu16((Opcode >> 0) & 7) = res;
RET(4)
}

// CLR
OPCODE(0x4250)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// CLR
OPCODE(0x4258)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// CLR
OPCODE(0x4260)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// CLR
OPCODE(0x4268)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// CLR
OPCODE(0x4270)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// CLR
OPCODE(0x4278)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// CLR
OPCODE(0x4279)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// CLR
OPCODE(0x425F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// CLR
OPCODE(0x4267)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// CLR
OPCODE(0x4280)
{
	u32 adr, res;
	u32 src, dst;

	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	DREGu32((Opcode >> 0) & 7) = res;
RET(6)
}

// CLR
OPCODE(0x4290)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// CLR
OPCODE(0x4298)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// CLR
OPCODE(0x42A0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// CLR
OPCODE(0x42A8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// CLR
OPCODE(0x42B0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// CLR
OPCODE(0x42B8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// CLR
OPCODE(0x42B9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// CLR
OPCODE(0x429F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// CLR
OPCODE(0x42A7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	res = 0;
	flag_N = flag_NotZ = flag_V = flag_C = 0;
	PRE_IO
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// NEG
OPCODE(0x4400)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 0) & 7);
	res = -src;
	flag_V = res & src;
	flag_N = flag_X = flag_C = res;
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 0) & 7) = res;
RET(4)
}

// NEG
OPCODE(0x4410)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, src)
	res = -src;
	flag_V = res & src;
	flag_N = flag_X = flag_C = res;
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// NEG
OPCODE(0x4418)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, src)
	res = -src;
	flag_V = res & src;
	flag_N = flag_X = flag_C = res;
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// NEG
OPCODE(0x4420)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	res = -src;
	flag_V = res & src;
	flag_N = flag_X = flag_C = res;
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// NEG
OPCODE(0x4428)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, src)
	res = -src;
	flag_V = res & src;
	flag_N = flag_X = flag_C = res;
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// NEG
OPCODE(0x4430)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, src)
	res = -src;
	flag_V = res & src;
	flag_N = flag_X = flag_C = res;
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// NEG
OPCODE(0x4438)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, src)
	res = -src;
	flag_V = res & src;
	flag_N = flag_X = flag_C = res;
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// NEG
OPCODE(0x4439)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, src)
	res = -src;
	flag_V = res & src;
	flag_N = flag_X = flag_C = res;
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// NEG
OPCODE(0x441F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, src)
	res = -src;
	flag_V = res & src;
	flag_N = flag_X = flag_C = res;
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// NEG
OPCODE(0x4427)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	res = -src;
	flag_V = res & src;
	flag_N = flag_X = flag_C = res;
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// NEG
OPCODE(0x4440)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 0) & 7);
	res = -src;
	flag_V = (res & src) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 0) & 7) = res;
RET(4)
}

// NEG
OPCODE(0x4450)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	res = -src;
	flag_V = (res & src) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// NEG
OPCODE(0x4458)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	res = -src;
	flag_V = (res & src) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// NEG
OPCODE(0x4460)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	res = -src;
	flag_V = (res & src) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// NEG
OPCODE(0x4468)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	res = -src;
	flag_V = (res & src) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// NEG
OPCODE(0x4470)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	res = -src;
	flag_V = (res & src) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// NEG
OPCODE(0x4478)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	res = -src;
	flag_V = (res & src) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// NEG
OPCODE(0x4479)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	res = -src;
	flag_V = (res & src) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// NEG
OPCODE(0x445F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	res = -src;
	flag_V = (res & src) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// NEG
OPCODE(0x4467)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	res = -src;
	flag_V = (res & src) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// NEG
OPCODE(0x4480)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 0) & 7);
	res = -src;
	flag_NotZ = res;
	flag_V = (res & src) >> 24;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_N = res >> 24;
	DREGu32((Opcode >> 0) & 7) = res;
RET(6)
}

// NEG
OPCODE(0x4490)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, src)
	res = -src;
	flag_NotZ = res;
	flag_V = (res & src) >> 24;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// NEG
OPCODE(0x4498)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, src)
	res = -src;
	flag_NotZ = res;
	flag_V = (res & src) >> 24;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// NEG
OPCODE(0x44A0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, src)
	res = -src;
	flag_NotZ = res;
	flag_V = (res & src) >> 24;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// NEG
OPCODE(0x44A8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, src)
	res = -src;
	flag_NotZ = res;
	flag_V = (res & src) >> 24;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// NEG
OPCODE(0x44B0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, src)
	res = -src;
	flag_NotZ = res;
	flag_V = (res & src) >> 24;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// NEG
OPCODE(0x44B8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, src)
	res = -src;
	flag_NotZ = res;
	flag_V = (res & src) >> 24;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// NEG
OPCODE(0x44B9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, src)
	res = -src;
	flag_NotZ = res;
	flag_V = (res & src) >> 24;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// NEG
OPCODE(0x449F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, src)
	res = -src;
	flag_NotZ = res;
	flag_V = (res & src) >> 24;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// NEG
OPCODE(0x44A7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, src)
	res = -src;
	flag_NotZ = res;
	flag_V = (res & src) >> 24;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// NOT
OPCODE(0x4600)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 0) & 7);
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_N = res;
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 0) & 7) = res;
RET(4)
}

// NOT
OPCODE(0x4610)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_N = res;
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// NOT
OPCODE(0x4618)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_N = res;
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// NOT
OPCODE(0x4620)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_N = res;
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// NOT
OPCODE(0x4628)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_N = res;
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// NOT
OPCODE(0x4630)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_N = res;
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// NOT
OPCODE(0x4638)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_N = res;
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// NOT
OPCODE(0x4639)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_N = res;
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// NOT
OPCODE(0x461F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_N = res;
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// NOT
OPCODE(0x4627)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_N = res;
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// NOT
OPCODE(0x4640)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 0) & 7);
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res & 0xFFFF;
	flag_N = res >> 8;
	DREGu16((Opcode >> 0) & 7) = res;
RET(4)
}

// NOT
OPCODE(0x4650)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res & 0xFFFF;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// NOT
OPCODE(0x4658)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res & 0xFFFF;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// NOT
OPCODE(0x4660)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res & 0xFFFF;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// NOT
OPCODE(0x4668)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res & 0xFFFF;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// NOT
OPCODE(0x4670)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res & 0xFFFF;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// NOT
OPCODE(0x4678)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res & 0xFFFF;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// NOT
OPCODE(0x4679)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res & 0xFFFF;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// NOT
OPCODE(0x465F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res & 0xFFFF;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// NOT
OPCODE(0x4667)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res & 0xFFFF;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// NOT
OPCODE(0x4680)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 0) & 7);
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 0) & 7) = res;
RET(6)
}

// NOT
OPCODE(0x4690)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// NOT
OPCODE(0x4698)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// NOT
OPCODE(0x46A0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// NOT
OPCODE(0x46A8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// NOT
OPCODE(0x46B0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// NOT
OPCODE(0x46B8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// NOT
OPCODE(0x46B9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// NOT
OPCODE(0x469F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// NOT
OPCODE(0x46A7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, src)
	res = ~src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// MOVESRa
OPCODE(0x40C0)
{
	u32 adr, res;
	u32 src, dst;

	res = GET_SR;
	DREGu16((Opcode >> 0) & 7) = res;
RET(6)
}

// MOVESRa
OPCODE(0x40D0)
{
	u32 adr, res;
	u32 src, dst;

	res = GET_SR;
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVESRa
OPCODE(0x40D8)
{
	u32 adr, res;
	u32 src, dst;

	res = GET_SR;
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVESRa
OPCODE(0x40E0)
{
	u32 adr, res;
	u32 src, dst;

	res = GET_SR;
	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// MOVESRa
OPCODE(0x40E8)
{
	u32 adr, res;
	u32 src, dst;

	res = GET_SR;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVESRa
OPCODE(0x40F0)
{
	u32 adr, res;
	u32 src, dst;

	res = GET_SR;
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// MOVESRa
OPCODE(0x40F8)
{
	u32 adr, res;
	u32 src, dst;

	res = GET_SR;
	FETCH_SWORD(adr);
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// MOVESRa
OPCODE(0x40F9)
{
	u32 adr, res;
	u32 src, dst;

	res = GET_SR;
	FETCH_LONG(adr);
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// MOVESRa
OPCODE(0x40DF)
{
	u32 adr, res;
	u32 src, dst;

	res = GET_SR;
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// MOVESRa
OPCODE(0x40E7)
{
	u32 adr, res;
	u32 src, dst;

	res = GET_SR;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// MOVEaCCR
OPCODE(0x44C0)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu16((Opcode >> 0) & 7);
	SET_CCR(res)
RET(12)
}

// MOVEaCCR
OPCODE(0x44D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	SET_CCR(res)
	POST_IO
RET(16)
}

// MOVEaCCR
OPCODE(0x44D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	SET_CCR(res)
	POST_IO
RET(16)
}

// MOVEaCCR
OPCODE(0x44E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	SET_CCR(res)
	POST_IO
RET(18)
}

// MOVEaCCR
OPCODE(0x44E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	SET_CCR(res)
	POST_IO
RET(20)
}

// MOVEaCCR
OPCODE(0x44F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	SET_CCR(res)
	POST_IO
RET(22)
}

// MOVEaCCR
OPCODE(0x44F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	SET_CCR(res)
	POST_IO
RET(20)
}

// MOVEaCCR
OPCODE(0x44F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	SET_CCR(res)
	POST_IO
RET(24)
}

// MOVEaCCR
OPCODE(0x44FA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_WORD_F(adr, res)
	SET_CCR(res)
	POST_IO
RET(20)
}

// MOVEaCCR
OPCODE(0x44FB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	SET_CCR(res)
	POST_IO
RET(22)
}

// MOVEaCCR
OPCODE(0x44FC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(res);
	SET_CCR(res)
RET(16)
}

// MOVEaCCR
OPCODE(0x44DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	SET_CCR(res)
	POST_IO
RET(16)
}

// MOVEaCCR
OPCODE(0x44E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	SET_CCR(res)
	POST_IO
RET(18)
}

// MOVEaSR
OPCODE(0x46C0)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_S)
	{
		res = DREGu16((Opcode >> 0) & 7);
		SET_SR(res)
		if (!flag_S)
		{
			res = AREG(7);
			AREG(7) = ASP;
			ASP = res;
		}
		CHECK_INT_TO_JUMP(12)
	}
	else
	{
		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
		RET(4)
	}
RET(12)
}

// MOVEaSR
OPCODE(0x46D0)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_S)
	{
		adr = AREG((Opcode >> 0) & 7);
		PRE_IO
		READ_WORD_F(adr, res)
		SET_SR(res)
		if (!flag_S)
		{
			res = AREG(7);
			AREG(7) = ASP;
			ASP = res;
		}
		POST_IO
		CHECK_INT_TO_JUMP(16)
	}
	else
	{
		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
		RET(4)
	}
RET(16)
}

// MOVEaSR
OPCODE(0x46D8)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_S)
	{
		adr = AREG((Opcode >> 0) & 7);
		AREG((Opcode >> 0) & 7) += 2;
		PRE_IO
		READ_WORD_F(adr, res)
		SET_SR(res)
		if (!flag_S)
		{
			res = AREG(7);
			AREG(7) = ASP;
			ASP = res;
		}
		POST_IO
		CHECK_INT_TO_JUMP(16)
	}
	else
	{
		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
		RET(4)
	}
RET(16)
}

// MOVEaSR
OPCODE(0x46E0)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_S)
	{
		adr = AREG((Opcode >> 0) & 7) - 2;
		AREG((Opcode >> 0) & 7) = adr;
		PRE_IO
		READ_WORD_F(adr, res)
		SET_SR(res)
		if (!flag_S)
		{
			res = AREG(7);
			AREG(7) = ASP;
			ASP = res;
		}
		POST_IO
		CHECK_INT_TO_JUMP(18)
	}
	else
	{
		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
		RET(4)
	}
RET(18)
}

// MOVEaSR
OPCODE(0x46E8)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_S)
	{
		FETCH_SWORD(adr);
		adr += AREG((Opcode >> 0) & 7);
		PRE_IO
		READ_WORD_F(adr, res)
		SET_SR(res)
		if (!flag_S)
		{
			res = AREG(7);
			AREG(7) = ASP;
			ASP = res;
		}
		POST_IO
		CHECK_INT_TO_JUMP(20)
	}
	else
	{
		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
		RET(4)
	}
RET(20)
}

// MOVEaSR
OPCODE(0x46F0)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_S)
	{
		adr = AREG((Opcode >> 0) & 7);
		DECODE_EXT_WORD
		PRE_IO
		READ_WORD_F(adr, res)
		SET_SR(res)
		if (!flag_S)
		{
			res = AREG(7);
			AREG(7) = ASP;
			ASP = res;
		}
		POST_IO
		CHECK_INT_TO_JUMP(22)
	}
	else
	{
		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
		RET(4)
	}
RET(22)
}


// MOVEaSR
OPCODE(0x46F8)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_S)
	{
		FETCH_SWORD(adr);
		PRE_IO
		READ_WORD_F(adr, res)
		SET_SR(res)
		if (!flag_S)
		{
			res = AREG(7);
			AREG(7) = ASP;
			ASP = res;
		}
		POST_IO
		CHECK_INT_TO_JUMP(20)
	}
	else
	{
		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
		RET(4)
	}
RET(20)
}

// MOVEaSR
OPCODE(0x46F9)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_S)
	{
		FETCH_LONG(adr);
		PRE_IO
		READ_WORD_F(adr, res)
		SET_SR(res)
		if (!flag_S)
		{
			res = AREG(7);
			AREG(7) = ASP;
			ASP = res;
		}
		POST_IO
		CHECK_INT_TO_JUMP(24)
	}
	else
	{
		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
		RET(4)
	}
RET(24)
}

// MOVEaSR
OPCODE(0x46FA)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_S)
	{
		adr = GET_SWORD + GET_PC;
		PC++;
		PRE_IO
		READ_WORD_F(adr, res)
		SET_SR(res)
		if (!flag_S)
		{
			res = AREG(7);
			AREG(7) = ASP;
			ASP = res;
		}
		POST_IO
		CHECK_INT_TO_JUMP(20)
	}
	else
	{
		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
		RET(4)
	}
RET(20)
}

// MOVEaSR
OPCODE(0x46FB)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_S)
	{
		adr = GET_PC;
		DECODE_EXT_WORD
		PRE_IO
		READ_WORD_F(adr, res)
		SET_SR(res)
		if (!flag_S)
		{
			res = AREG(7);
			AREG(7) = ASP;
			ASP = res;
		}
		POST_IO
		CHECK_INT_TO_JUMP(22)
	}
	else
	{
		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
		RET(4)
	}
RET(22)
}

// MOVEaSR
OPCODE(0x46FC)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_S)
	{
		FETCH_WORD(res);
		SET_SR(res)
		if (!flag_S)
		{
			res = AREG(7);
			AREG(7) = ASP;
			ASP = res;
		}
		CHECK_INT_TO_JUMP(16)
	}
	else
	{
		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
		RET(4)
	}
RET(16)
}

// MOVEaSR
OPCODE(0x46DF)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_S)
	{
		adr = AREG(7);
		AREG(7) += 2;
		PRE_IO
		READ_WORD_F(adr, res)
		SET_SR(res)
		if (!flag_S)
		{
			res = AREG(7);
			AREG(7) = ASP;
			ASP = res;
		}
		POST_IO
		CHECK_INT_TO_JUMP(16)
	}
	else
	{
		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
		RET(4)
	}
RET(16)
}

// MOVEaSR
OPCODE(0x46E7)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_S)
	{
		adr = AREG(7) - 2;
		AREG(7) = adr;
		PRE_IO
		READ_WORD_F(adr, res)
		SET_SR(res)
		if (!flag_S)
		{
			res = AREG(7);
			AREG(7) = ASP;
			ASP = res;
		}
		POST_IO
		CHECK_INT_TO_JUMP(18)
	}
	else
	{
		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
		RET(4)
	}
RET(18)
}

// NBCD
OPCODE(0x4800)
{
	u32 adr, res;
	u32 src, dst;

	dst = DREGu8((Opcode >> 0) & 7);
	res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);

	if (res != 0)
	{
		flag_V = res;
		if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
		res = (res + 0x9a) & 0xFF;
		DREGu8((Opcode >> 0) & 7) = res;
		flag_V &= ~res;
		flag_NotZ |= res;
		flag_X = flag_C = M68K_SR_C;
	}
	else flag_V = flag_X = flag_C = 0;
	flag_N = res;
RET(6)
}

// NBCD
OPCODE(0x4810)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);

	if (res != 0)
	{
		flag_V = res;
		if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
		res = (res + 0x9a) & 0xFF;
		WRITE_BYTE_F(adr, res)
		flag_V &= ~res;
		flag_NotZ |= res;
		flag_X = flag_C = M68K_SR_C;
	}
	else flag_V = flag_X = flag_C = 0;
	flag_N = res;
	POST_IO
RET(12)
}

// NBCD
OPCODE(0x4818)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);

	if (res != 0)
	{
		flag_V = res;
		if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
		res = (res + 0x9a) & 0xFF;
		WRITE_BYTE_F(adr, res)
		flag_V &= ~res;
		flag_NotZ |= res;
		flag_X = flag_C = M68K_SR_C;
	}
	else flag_V = flag_X = flag_C = 0;
	flag_N = res;
	POST_IO
RET(12)
}

// NBCD
OPCODE(0x4820)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);

	if (res != 0)
	{
		flag_V = res;
		if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
		res = (res + 0x9a) & 0xFF;
		WRITE_BYTE_F(adr, res)
		flag_V &= ~res;
		flag_NotZ |= res;
		flag_X = flag_C = M68K_SR_C;
	}
	else flag_V = flag_X = flag_C = 0;
	flag_N = res;
	POST_IO
RET(14)
}

// NBCD
OPCODE(0x4828)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);

	if (res != 0)
	{
		flag_V = res;
		if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
		res = (res + 0x9a) & 0xFF;
		WRITE_BYTE_F(adr, res)
		flag_V &= ~res;
		flag_NotZ |= res;
		flag_X = flag_C = M68K_SR_C;
	}
	else flag_V = flag_X = flag_C = 0;
	flag_N = res;
	POST_IO
RET(16)
}

// NBCD
OPCODE(0x4830)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);

	if (res != 0)
	{
		flag_V = res;
		if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
		res = (res + 0x9a) & 0xFF;
		WRITE_BYTE_F(adr, res)
		flag_V &= ~res;
		flag_NotZ |= res;
		flag_X = flag_C = M68K_SR_C;
	}
	else flag_V = flag_X = flag_C = 0;
	flag_N = res;
	POST_IO
RET(18)
}

// NBCD
OPCODE(0x4838)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);

	if (res != 0)
	{
		flag_V = res;
		if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
		res = (res + 0x9a) & 0xFF;
		WRITE_BYTE_F(adr, res)
		flag_V &= ~res;
		flag_NotZ |= res;
		flag_X = flag_C = M68K_SR_C;
	}
	else flag_V = flag_X = flag_C = 0;
	flag_N = res;
	POST_IO
RET(16)
}

// NBCD
OPCODE(0x4839)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);

	if (res != 0)
	{
		flag_V = res;
		if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
		res = (res + 0x9a) & 0xFF;
		WRITE_BYTE_F(adr, res)
		flag_V &= ~res;
		flag_NotZ |= res;
		flag_X = flag_C = M68K_SR_C;
	}
	else flag_V = flag_X = flag_C = 0;
	flag_N = res;
	POST_IO
RET(20)
}

// NBCD
OPCODE(0x481F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);

	if (res != 0)
	{
		flag_V = res;
		if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
		res = (res + 0x9a) & 0xFF;
		WRITE_BYTE_F(adr, res)
		flag_V &= ~res;
		flag_NotZ |= res;
		flag_X = flag_C = M68K_SR_C;
	}
	else flag_V = flag_X = flag_C = 0;
	flag_N = res;
	POST_IO
RET(12)
}

// NBCD
OPCODE(0x4827)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);

	if (res != 0)
	{
		flag_V = res;
		if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
		res = (res + 0x9a) & 0xFF;
		WRITE_BYTE_F(adr, res)
		flag_V &= ~res;
		flag_NotZ |= res;
		flag_X = flag_C = M68K_SR_C;
	}
	else flag_V = flag_X = flag_C = 0;
	flag_N = res;
	POST_IO
RET(14)
}

// PEA
OPCODE(0x4850)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	PUSH_32_F(adr)
	POST_IO
RET(12)
}

// PEA
OPCODE(0x4868)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	PUSH_32_F(adr)
	POST_IO
RET(16)
}

// PEA
OPCODE(0x4870)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	PUSH_32_F(adr)
	POST_IO
RET(20)
}

// PEA
OPCODE(0x4878)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	PUSH_32_F(adr)
	POST_IO
RET(16)
}

// PEA
OPCODE(0x4879)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	PUSH_32_F(adr)
	POST_IO
RET(20)
}

// PEA
OPCODE(0x487A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	PUSH_32_F(adr)
	POST_IO
RET(16)
}

// PEA
OPCODE(0x487B)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	PUSH_32_F(adr)
	POST_IO
RET(20)
}

// SWAP
OPCODE(0x4840)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu32((Opcode >> 0) & 7);
	res = (res >> 16) | (res << 16);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 0) & 7) = res;
RET(4)
}

// MOVEMRa
OPCODE(0x4890)
{
	u32 adr, res;
	u32 src, dst;

	u32 *psrc;

	FETCH_WORD(res);
	adr = AREG((Opcode >> 0) & 7);
	psrc = &DREGu32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			WRITE_WORD_F(adr, *psrc)
			adr += 2;
		}
		psrc++;
	} while (res >>= 1);
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(8)
#else
RET(12)
#endif
}

// MOVEMRa
OPCODE(0x48A0)
{
	u32 adr, res;
	u32 src, dst;

	u32 *psrc;

	FETCH_WORD(res);
	adr = AREG((Opcode >> 0) & 7);
	psrc = &AREGu32(7);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			adr -= 2;
			WRITE_WORD_F(adr, *psrc)
		}
		psrc--;
	} while (res >>= 1);
	AREG((Opcode >> 0) & 7) = adr;
	POST_IO
	ctx->io_cycle_counter -= (dst - adr) * 2;
RET(8)
}

// MOVEMRa
OPCODE(0x48A8)
{
	u32 adr, res;
	u32 src, dst;

	u32 *psrc;

	FETCH_WORD(res);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	psrc = &DREGu32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			WRITE_WORD_F(adr, *psrc)
			adr += 2;
		}
		psrc++;
	} while (res >>= 1);
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(12)
#else
RET(20)
#endif
}

// MOVEMRa
OPCODE(0x48B0)
{
	u32 adr, res;
	u32 src, dst;

	u32 *psrc;

	FETCH_WORD(res);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	psrc = &DREGu32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			WRITE_WORD_F(adr, *psrc)
			adr += 2;
		}
		psrc++;
	} while (res >>= 1);
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(14)
#else
RET(24)
#endif
}

// MOVEMRa
OPCODE(0x48B8)
{
	u32 adr, res;
	u32 src, dst;

	u32 *psrc;

	FETCH_WORD(res);
	FETCH_SWORD(adr);
	psrc = &DREGu32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			WRITE_WORD_F(adr, *psrc)
			adr += 2;
		}
		psrc++;
	} while (res >>= 1);
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(12)
#else
RET(20)
#endif
}

// MOVEMRa
OPCODE(0x48B9)
{
	u32 adr, res;
	u32 src, dst;

	u32 *psrc;

	FETCH_WORD(res);
	FETCH_LONG(adr);
	psrc = &DREGu32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			WRITE_WORD_F(adr, *psrc)
			adr += 2;
		}
		psrc++;
	} while (res >>= 1);
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
RET(28)
#endif
}

// MOVEMRa
OPCODE(0x48A7)
{
	u32 adr, res;
	u32 src, dst;

	u32 *psrc;

	FETCH_WORD(res);
	adr = AREG(7);
	psrc = &AREGu32(7);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			adr -= 2;
			WRITE_WORD_F(adr, *psrc)
		}
		psrc--;
	} while (res >>= 1);
	AREG(7) = adr;
	POST_IO
	ctx->io_cycle_counter -= (dst - adr) * 2;
RET(8)
}

// MOVEMRa
OPCODE(0x48D0)
{
	u32 adr, res;
	u32 src, dst;

	u32 *psrc;

	FETCH_WORD(res);
	adr = AREG((Opcode >> 0) & 7);
	psrc = &DREGu32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			WRITE_LONG_F(adr, *psrc)
			adr += 4;
		}
		psrc++;
	} while (res >>= 1);
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(8)
#else
RET(16)
#endif
}

// MOVEMRa
OPCODE(0x48E0)
{
	u32 adr, res;
	u32 src, dst;

	u32 *psrc;

	FETCH_WORD(res);
	adr = AREG((Opcode >> 0) & 7);
	psrc = &AREGu32(7);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			adr -= 4;
			WRITE_LONG_DEC_F(adr, *psrc)
		}
		psrc--;
	} while (res >>= 1);
	AREG((Opcode >> 0) & 7) = adr;
	POST_IO
	ctx->io_cycle_counter -= (dst - adr) * 2;
RET(8)
}

// MOVEMRa
OPCODE(0x48E8)
{
	u32 adr, res;
	u32 src, dst;

	u32 *psrc;

	FETCH_WORD(res);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	psrc = &DREGu32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			WRITE_LONG_F(adr, *psrc)
			adr += 4;
		}
		psrc++;
	} while (res >>= 1);
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(12)
#else
RET(24)
#endif
}

// MOVEMRa
OPCODE(0x48F0)
{
	u32 adr, res;
	u32 src, dst;

	u32 *psrc;

	FETCH_WORD(res);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	psrc = &DREGu32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			WRITE_LONG_F(adr, *psrc)
			adr += 4;
		}
		psrc++;
	} while (res >>= 1);
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(14)
#else
RET(28)
#endif
}

// MOVEMRa
OPCODE(0x48F8)
{
	u32 adr, res;
	u32 src, dst;

	u32 *psrc;

	FETCH_WORD(res);
	FETCH_SWORD(adr);
	psrc = &DREGu32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			WRITE_LONG_F(adr, *psrc)
			adr += 4;
		}
		psrc++;
	} while (res >>= 1);
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(12)
#else
RET(24)
#endif
}

// MOVEMRa
OPCODE(0x48F9)
{
	u32 adr, res;
	u32 src, dst;

	u32 *psrc;

	FETCH_WORD(res);
	FETCH_LONG(adr);
	psrc = &DREGu32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			WRITE_LONG_F(adr, *psrc)
			adr += 4;
		}
		psrc++;
	} while (res >>= 1);
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
RET(32)
#endif
}

// MOVEMRa
OPCODE(0x48E7)
{
	u32 adr, res;
	u32 src, dst;

	u32 *psrc;

	FETCH_WORD(res);
	adr = AREG(7);
	psrc = &AREGu32(7);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			adr -= 4;
			WRITE_LONG_DEC_F(adr, *psrc)
		}
		psrc--;
	} while (res >>= 1);
	AREG(7) = adr;
	POST_IO
	ctx->io_cycle_counter -= (dst - adr) * 2;
RET(8)
}

// EXT
OPCODE(0x4880)
{
	u32 adr, res;
	u32 src, dst;

	res = (s32)DREGs8((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu16((Opcode >> 0) & 7) = res;
RET(4)
}

// EXT
OPCODE(0x48C0)
{
	u32 adr, res;
	u32 src, dst;

	res = (s32)DREGs16((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu32((Opcode >> 0) & 7) = res;
RET(4)
}

// TST
OPCODE(0x4A00)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu8((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
RET(4)
}

// TST
OPCODE(0x4A10)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	POST_IO
RET(8)
}

// TST
OPCODE(0x4A18)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	POST_IO
RET(8)
}

// TST
OPCODE(0x4A20)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	POST_IO
RET(10)
}

// TST
OPCODE(0x4A28)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	POST_IO
RET(12)
}

// TST
OPCODE(0x4A30)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	POST_IO
RET(14)
}

// TST
OPCODE(0x4A38)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	POST_IO
RET(12)
}

// TST
OPCODE(0x4A39)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	POST_IO
RET(16)
}

// TST
OPCODE(0x4A1F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	POST_IO
RET(8)
}

// TST
OPCODE(0x4A27)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	POST_IO
RET(10)
}

// TST
OPCODE(0x4A40)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu16((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
RET(4)
}

// TST
OPCODE(0x4A50)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	POST_IO
RET(8)
}

// TST
OPCODE(0x4A58)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	POST_IO
RET(8)
}

// TST
OPCODE(0x4A60)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	POST_IO
RET(10)
}

// TST
OPCODE(0x4A68)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	POST_IO
RET(12)
}

// TST
OPCODE(0x4A70)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	POST_IO
RET(14)
}

// TST
OPCODE(0x4A78)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	POST_IO
RET(12)
}

// TST
OPCODE(0x4A79)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	POST_IO
RET(16)
}

// TST
OPCODE(0x4A5F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	POST_IO
RET(8)
}

// TST
OPCODE(0x4A67)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	POST_IO
RET(10)
}

// TST
OPCODE(0x4A80)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu32((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
RET(4)
}

// TST
OPCODE(0x4A90)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	POST_IO
RET(12)
}

// TST
OPCODE(0x4A98)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	POST_IO
RET(12)
}

// TST
OPCODE(0x4AA0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	POST_IO
RET(14)
}

// TST
OPCODE(0x4AA8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	POST_IO
RET(16)
}

// TST
OPCODE(0x4AB0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	POST_IO
RET(18)
}

// TST
OPCODE(0x4AB8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	POST_IO
RET(16)
}

// TST
OPCODE(0x4AB9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	POST_IO
RET(20)
}

// TST
OPCODE(0x4A9F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	POST_IO
RET(12)
}

// TST
OPCODE(0x4AA7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	POST_IO
RET(14)
}

// TAS
OPCODE(0x4AC0)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu8((Opcode >> 0) & 7);
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	res |= 0x80;
	DREGu8((Opcode >> 0) & 7) = res;
RET(4)
}

// TAS
OPCODE(0x4AD0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
#ifdef PICODRIVE_HACK
	if (ctx == &PicoCpuFS68k) {
		res |= 0x80;
		WRITE_BYTE_F(adr, res);
	}
#endif

	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(18)
#else
RET(8)
#endif
}

// TAS
OPCODE(0x4AD8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;

#ifdef PICODRIVE_HACK
	if (ctx == &PicoCpuFS68k) {
		res |= 0x80;
		WRITE_BYTE_F(adr, res);
	}
#endif

	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(18)
#else
RET(8)
#endif
}

// TAS
OPCODE(0x4AE0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;

#ifdef PICODRIVE_HACK
	if (ctx == &PicoCpuFS68k) {
		res |= 0x80;
		WRITE_BYTE_F(adr, res);
	}
#endif

	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(20)
#else
RET(10)
#endif
}

// TAS
OPCODE(0x4AE8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;

#ifdef PICODRIVE_HACK
	if (ctx == &PicoCpuFS68k) {
		res |= 0x80;
		WRITE_BYTE_F(adr, res);
	}
#endif

	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(22)
#else
RET(12)
#endif
}

// TAS
OPCODE(0x4AF0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;

#ifdef PICODRIVE_HACK
	if (ctx == &PicoCpuFS68k) {
		res |= 0x80;
		WRITE_BYTE_F(adr, res);
	}
#endif

	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(24)
#else
RET(14)
#endif
}

// TAS
OPCODE(0x4AF8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;

#ifdef PICODRIVE_HACK
	if (ctx == &PicoCpuFS68k) {
		res |= 0x80;
		WRITE_BYTE_F(adr, res);
	}
#endif

	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(22)
#else
RET(12)
#endif
}

// TAS
OPCODE(0x4AF9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;

#ifdef PICODRIVE_HACK
	if (ctx == &PicoCpuFS68k) {
		res |= 0x80;
		WRITE_BYTE_F(adr, res);
	}
#endif

	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(26)
#else
RET(16)
#endif
}

// TAS
OPCODE(0x4ADF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;

#ifdef PICODRIVE_HACK
	if (ctx == &PicoCpuFS68k) {
		res |= 0x80;
		WRITE_BYTE_F(adr, res);
	}
#endif

	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(18)
#else
RET(8)
#endif
}

// TAS
OPCODE(0x4AE7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;

#ifdef PICODRIVE_HACK
	if (ctx == &PicoCpuFS68k) {
		res |= 0x80;
		WRITE_BYTE_F(adr, res);
	}
#endif

	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(20)
#else
RET(8)
#endif
}

// ILLEGAL
OPCODE(0x4AFC)
{
#ifdef PICODRIVE_HACK
	extern void SekFinishIdleDet(void);
	SekFinishIdleDet();
#endif
	SET_PC(execute_exception(ctx, M68K_ILLEGAL_INSTRUCTION_EX, GET_PC-2, GET_SR));
RET(0)
}

// ILLEGAL A000-AFFF
OPCODE(0xA000)
{
	SET_PC(execute_exception(ctx, M68K_1010_EX, GET_PC-2, GET_SR));
RET(0)
}

// ILLEGAL F000-FFFF
OPCODE(0xF000)
{
	SET_PC(execute_exception(ctx, M68K_1111_EX, GET_PC-2, GET_SR));
RET(0) // 4 already taken by exc. handler
}

// MOVEMaR
OPCODE(0x4C90)
{
	u32 adr, res;
	u32 src, dst;

	s32 *psrc;

	FETCH_WORD(res);
	adr = AREG((Opcode >> 0) & 7);
	psrc = &DREGs32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			READSX_WORD_F(adr, *psrc)
			adr += 2;
		}
		psrc++;
	} while (res >>= 1);
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(12)
#else
RET(16)
#endif
}

// MOVEMaR
OPCODE(0x4C98)
{
	u32 adr, res;
	u32 src, dst;

	s32 *psrc;

	FETCH_WORD(res);
	adr = AREG((Opcode >> 0) & 7);
	psrc = &DREGs32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			READSX_WORD_F(adr, *psrc)
			adr += 2;
		}
		psrc++;
	} while (res >>= 1);
	AREG((Opcode >> 0) & 7) = adr;
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
RET(12)
}

// MOVEMaR
OPCODE(0x4CA8)
{
	u32 adr, res;
	u32 src, dst;

	s32 *psrc;

	FETCH_WORD(res);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	psrc = &DREGs32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			READSX_WORD_F(adr, *psrc)
			adr += 2;
		}
		psrc++;
	} while (res >>= 1);
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
RET(24)
#endif
}

// MOVEMaR
OPCODE(0x4CB0)
{
	u32 adr, res;
	u32 src, dst;

	s32 *psrc;

	FETCH_WORD(res);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	psrc = &DREGs32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			READSX_WORD_F(adr, *psrc)
			adr += 2;
		}
		psrc++;
	} while (res >>= 1);
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(18)
#else
RET(28)
#endif
}

// MOVEMaR
OPCODE(0x4CB8)
{
	u32 adr, res;
	u32 src, dst;

	s32 *psrc;

	FETCH_WORD(res);
	FETCH_SWORD(adr);
	psrc = &DREGs32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			READSX_WORD_F(adr, *psrc)
			adr += 2;
		}
		psrc++;
	} while (res >>= 1);
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
RET(24)
#endif
}

// MOVEMaR
OPCODE(0x4CB9)
{
	u32 adr, res;
	u32 src, dst;

	s32 *psrc;

	FETCH_WORD(res);
	FETCH_LONG(adr);
	psrc = &DREGs32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			READSX_WORD_F(adr, *psrc)
			adr += 2;
		}
		psrc++;
	} while (res >>= 1);
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(20)
#else
RET(32)
#endif
}

// MOVEMaR
OPCODE(0x4CBA)
{
	u32 adr, res;
	u32 src, dst;

	s32 *psrc;

	FETCH_WORD(res);
	adr = GET_SWORD + GET_PC;
	PC++;
	psrc = &DREGs32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			READSX_WORD_F(adr, *psrc)
			adr += 2;
		}
		psrc++;
	} while (res >>= 1);
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
RET(24)
#endif
}

// MOVEMaR
OPCODE(0x4CBB)
{
	u32 adr, res;
	u32 src, dst;

	s32 *psrc;

	FETCH_WORD(res);
	adr = GET_PC;
	DECODE_EXT_WORD
	psrc = &DREGs32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			READSX_WORD_F(adr, *psrc)
			adr += 2;
		}
		psrc++;
	} while (res >>= 1);
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(18)
#else
RET(28)
#endif
}

// MOVEMaR
OPCODE(0x4C9F)
{
	u32 adr, res;
	u32 src, dst;

	s32 *psrc;

	FETCH_WORD(res);
	adr = AREG(7);
	psrc = &DREGs32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			READSX_WORD_F(adr, *psrc)
			adr += 2;
		}
		psrc++;
	} while (res >>= 1);
	AREG(7) = adr;
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
RET(12)
}

// MOVEMaR
OPCODE(0x4CD0)
{
	u32 adr, res;
	u32 src, dst;

	u32 *psrc;

	FETCH_WORD(res);
	adr = AREG((Opcode >> 0) & 7);
	psrc = &DREGu32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			READ_LONG_F(adr, *psrc)
			adr += 4;
		}
		psrc++;
	} while (res >>= 1);
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(12)
#else
RET(20)
#endif
}

// MOVEMaR
OPCODE(0x4CD8)
{
	u32 adr, res;
	u32 src, dst;

	u32 *psrc;

	FETCH_WORD(res);
	adr = AREG((Opcode >> 0) & 7);
	psrc = &DREGu32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			READ_LONG_F(adr, *psrc)
			adr += 4;
		}
		psrc++;
	} while (res >>= 1);
	AREG((Opcode >> 0) & 7) = adr;
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
RET(12)
}

// MOVEMaR
OPCODE(0x4CE8)
{
	u32 adr, res;
	u32 src, dst;

	u32 *psrc;

	FETCH_WORD(res);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	psrc = &DREGu32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			READ_LONG_F(adr, *psrc)
			adr += 4;
		}
		psrc++;
	} while (res >>= 1);
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
RET(28)
#endif
}

// MOVEMaR
OPCODE(0x4CF0)
{
	u32 adr, res;
	u32 src, dst;

	u32 *psrc;

	FETCH_WORD(res);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	psrc = &DREGu32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			READ_LONG_F(adr, *psrc)
			adr += 4;
		}
		psrc++;
	} while (res >>= 1);
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(18)
#else
RET(32)
#endif
}

// MOVEMaR
OPCODE(0x4CF8)
{
	u32 adr, res;
	u32 src, dst;

	u32 *psrc;

	FETCH_WORD(res);
	FETCH_SWORD(adr);
	psrc = &DREGu32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			READ_LONG_F(adr, *psrc)
			adr += 4;
		}
		psrc++;
	} while (res >>= 1);
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
RET(28)
#endif
}

// MOVEMaR
OPCODE(0x4CF9)
{
	u32 adr, res;
	u32 src, dst;

	u32 *psrc;

	FETCH_WORD(res);
	FETCH_LONG(adr);
	psrc = &DREGu32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			READ_LONG_F(adr, *psrc)
			adr += 4;
		}
		psrc++;
	} while (res >>= 1);
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(20)
#else
RET(36)
#endif
}

// MOVEMaR
OPCODE(0x4CFA)
{
	u32 adr, res;
	u32 src, dst;

	u32 *psrc;

	FETCH_WORD(res);
	adr = GET_SWORD + GET_PC;
	PC++;
	psrc = &DREGu32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			READ_LONG_F(adr, *psrc)
			adr += 4;
		}
		psrc++;
	} while (res >>= 1);
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
RET(28)
#endif
}

// MOVEMaR
OPCODE(0x4CFB)
{
	u32 adr, res;
	u32 src, dst;

	u32 *psrc;

	FETCH_WORD(res);
	adr = GET_PC;
	DECODE_EXT_WORD
	psrc = &DREGu32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			READ_LONG_F(adr, *psrc)
			adr += 4;
		}
		psrc++;
	} while (res >>= 1);
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
#ifdef USE_CYCLONE_TIMING
RET(18)
#else
RET(32)
#endif
}

// MOVEMaR
OPCODE(0x4CDF)
{
	u32 adr, res;
	u32 src, dst;

	u32 *psrc;

	FETCH_WORD(res);
	adr = AREG(7);
	psrc = &DREGu32(0);
	dst = adr;
	PRE_IO
	do
	{
		if (res & 1)
		{
			READ_LONG_F(adr, *psrc)
			adr += 4;
		}
		psrc++;
	} while (res >>= 1);
	AREG(7) = adr;
	POST_IO
	ctx->io_cycle_counter -= (adr - dst) * 2;
RET(12)
}

// TRAP
OPCODE(0x4E40)
{
	SET_PC(execute_exception(ctx, M68K_TRAP_BASE_EX + (Opcode & 0xF), GET_PC, GET_SR));
RET(4)
}

// LINK
OPCODE(0x4E50)
{
	u32 adr, res;
	u32 src, dst;

	res = AREGu32((Opcode >> 0) & 7);
	PRE_IO
	PUSH_32_F(res)
	res = AREG(7);
	AREG((Opcode >> 0) & 7) = res;
	FETCH_SWORD(res);
	AREG(7) += res;
	POST_IO
RET(16)
}

// LINKA7
OPCODE(0x4E57)
{
	u32 adr, res;
	u32 src, dst;

	AREG(7) -= 4;
	PRE_IO
	WRITE_LONG_DEC_F(AREG(7), AREG(7))
	FETCH_SWORD(res);
	AREG(7) += res;
	POST_IO
RET(16)
}

// ULNK
OPCODE(0x4E58)
{
	u32 adr, res;
	u32 src, dst;

	src = AREGu32((Opcode >> 0) & 7);
	AREG(7) = src + 4;
	PRE_IO
	READ_LONG_F(src, res)
	AREG((Opcode >> 0) & 7) = res;
	POST_IO
RET(12)
}

// ULNKA7
OPCODE(0x4E5F)
{
	u32 adr, res;
	u32 src, dst;

	PRE_IO
	READ_LONG_F(AREG(7), AREG(7))
	POST_IO
RET(12)
}

// MOVEAUSP
OPCODE(0x4E60)
{
	u32 adr, res;
	u32 src, dst;

	if (!flag_S)
	{
		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
		RET(4)
	}
	res = AREGu32((Opcode >> 0) & 7);
	ASP = res;
RET(4)
}

// MOVEUSPA
OPCODE(0x4E68)
{
	u32 adr, res;
	u32 src, dst;

	if (!flag_S)
	{
		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
		RET(4)
	}
	res = ASP;
	AREG((Opcode >> 0) & 7) = res;
RET(4)
}

// RESET
OPCODE(0x4E70)
{
	u32 adr, res;
	u32 src, dst;

	if (!flag_S)
	{
		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
		RET(4)
	}
	PRE_IO
	if (ctx->reset_handler) ctx->reset_handler();
//	CPU->Reset_CallBack();
	POST_IO
RET(132)
}

// NOP
OPCODE(0x4E71)
{
RET(4)
}

// STOP
OPCODE(0x4E72)
{
	u32 adr, res;
	u32 src, dst;

	if (!flag_S)
	{
		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
		RET(4)
	}
	FETCH_WORD(res);
	res &= M68K_SR_MASK;
	SET_SR(res)
	if (!flag_S)
	{
		res = AREG(7);
		AREG(7) = ASP;
		ASP = res;
	}
	ctx->execinfo |= FM68K_HALTED;
RET0()
}

// RTE
OPCODE(0x4E73)
{
	u32 adr, res;
	u32 src, dst;

	if (!flag_S)
	{
		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
		RET(4)
	}
	PRE_IO
	POP_16_F(res)
	SET_SR(res)
	POP_32_F(res)
	SET_PC(res)
	if (!flag_S)
	{
		res = AREG(7);
		AREG(7) = ASP;
		ASP = res;
	}
	POST_IO
	ctx->execinfo &= ~(FM68K_EMULATE_GROUP_0|FM68K_EMULATE_TRACE|FM68K_DO_TRACE);
	CHECK_INT_TO_JUMP(20)
RET(20)
}

// RTS
OPCODE(0x4E75)
{
	u32 adr, res;
	u32 src, dst;

	PRE_IO
	POP_32_F(res)
	SET_PC(res)
	CHECK_BRANCH_EXCEPTION(res)
	POST_IO
RET(16)
}

// TRAPV
OPCODE(0x4E76)
{
	if (flag_V & 0x80)
		SET_PC(execute_exception(ctx, M68K_TRAPV_EX, GET_PC, GET_SR));
RET(4)
}

// RTR
OPCODE(0x4E77)
{
	u32 adr, res;
	u32 src, dst;

	PRE_IO
	POP_16_F(res)
	SET_CCR(res)
	POP_32_F(res)
	SET_PC(res)
	CHECK_BRANCH_EXCEPTION(res)
	POST_IO
RET(20)
}

// JSR
OPCODE(0x4E90)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	{
		u32 oldPC;

		oldPC = GET_PC;
	PRE_IO
		PUSH_32_F(oldPC)
	}
	SET_PC(adr)
	CHECK_BRANCH_EXCEPTION(adr)
	POST_IO
RET(16)
}

// JSR
OPCODE(0x4EA8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	{
		u32 oldPC;

		oldPC = GET_PC;
	PRE_IO
		PUSH_32_F(oldPC)
	}
	SET_PC(adr)
	CHECK_BRANCH_EXCEPTION(adr)
	POST_IO
RET(18)
}

// JSR
OPCODE(0x4EB0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	{
		u32 oldPC;

		oldPC = GET_PC;
	PRE_IO
		PUSH_32_F(oldPC)
	}
	SET_PC(adr)
	CHECK_BRANCH_EXCEPTION(adr)
	POST_IO
RET(22)
}

// JSR
OPCODE(0x4EB8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	{
		u32 oldPC;

		oldPC = GET_PC;
	PRE_IO
		PUSH_32_F(oldPC)
	}
	SET_PC(adr)
	CHECK_BRANCH_EXCEPTION(adr)
	POST_IO
RET(18)
}

// JSR
OPCODE(0x4EB9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	{
		u32 oldPC;

		oldPC = GET_PC;
	PRE_IO
		PUSH_32_F(oldPC)
	}
	SET_PC(adr)
	CHECK_BRANCH_EXCEPTION(adr)
	POST_IO
RET(20)
}

// JSR
OPCODE(0x4EBA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	{
		u32 oldPC;

		oldPC = GET_PC;
	PRE_IO
		PUSH_32_F(oldPC)
	}
	SET_PC(adr)
	CHECK_BRANCH_EXCEPTION(adr)
	POST_IO
RET(18)
}

// JSR
OPCODE(0x4EBB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	{
		u32 oldPC;

		oldPC = GET_PC;
	PRE_IO
		PUSH_32_F(oldPC)
	}
	SET_PC(adr)
	CHECK_BRANCH_EXCEPTION(adr)
	POST_IO
RET(22)
}

// JMP
OPCODE(0x4ED0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	SET_PC(adr)
	CHECK_BRANCH_EXCEPTION(adr)
RET(8)
}

// JMP
OPCODE(0x4EE8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	SET_PC(adr)
	CHECK_BRANCH_EXCEPTION(adr)
RET(10)
}

// JMP
OPCODE(0x4EF0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	SET_PC(adr)
	CHECK_BRANCH_EXCEPTION(adr)
RET(14)
}

// JMP
OPCODE(0x4EF8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	SET_PC(adr)
	CHECK_BRANCH_EXCEPTION(adr)
RET(10)
}

// JMP
OPCODE(0x4EF9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	SET_PC(adr)
	CHECK_BRANCH_EXCEPTION(adr)
RET(12)
}

// JMP
OPCODE(0x4EFA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	SET_PC(adr)
	CHECK_BRANCH_EXCEPTION(adr)
RET(10)
}

// JMP
OPCODE(0x4EFB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	SET_PC(adr)
	CHECK_BRANCH_EXCEPTION(adr)
RET(14)
}

// CHK
OPCODE(0x4180)
{
	s32 src, res;

	src = DREGs16((Opcode >> 0) & 7);
	res = DREGs16((Opcode >> 9) & 7);
	if ((res < 0) || (res > src))
	{
		flag_N = res >> 8;
		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
	}
RET(10)
}

// CHK
OPCODE(0x4190)
{
	s32 src, res;
	u32 adr;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READSX_WORD_F(adr, src)
	res = DREGs16((Opcode >> 9) & 7);
	if ((res < 0) || (res > src))
	{
		flag_N = res >> 8;
		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
	}
	POST_IO
RET(14)
}

// CHK
OPCODE(0x4198)
{
	s32 src, res;
	u32 adr;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READSX_WORD_F(adr, src)
	res = DREGs16((Opcode >> 9) & 7);
	if ((res < 0) || (res > src))
	{
		flag_N = res >> 8;
		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
	}
	POST_IO
RET(14)
}

// CHK
OPCODE(0x41A0)
{
	s32 src, res;
	u32 adr;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READSX_WORD_F(adr, src)
	res = DREGs16((Opcode >> 9) & 7);
	if ((res < 0) || (res > src))
	{
		flag_N = res >> 8;
		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
	}
	POST_IO
RET(16)
}

// CHK
OPCODE(0x41A8)
{
	s32 src, res;
	u32 adr;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READSX_WORD_F(adr, src)
	res = DREGs16((Opcode >> 9) & 7);
	if ((res < 0) || (res > src))
	{
		flag_N = res >> 8;
		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
	}
	POST_IO
RET(18)
}

// CHK
OPCODE(0x41B0)
{
	s32 src, res;
	u32 adr;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READSX_WORD_F(adr, src)
	res = DREGs16((Opcode >> 9) & 7);
	if ((res < 0) || (res > src))
	{
		flag_N = res >> 8;
		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
	}
	POST_IO
RET(20)
}

// CHK
OPCODE(0x41B8)
{
	s32 src, res;
	u32 adr;

	FETCH_SWORD(adr);
	PRE_IO
	READSX_WORD_F(adr, src)
	res = DREGs16((Opcode >> 9) & 7);
	if ((res < 0) || (res > src))
	{
		flag_N = res >> 8;
		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
	}
	POST_IO
RET(18)
}

// CHK
OPCODE(0x41B9)
{
	s32 src, res;
	u32 adr;

	FETCH_LONG(adr);
	PRE_IO
	READSX_WORD_F(adr, src)
	res = DREGs16((Opcode >> 9) & 7);
	if ((res < 0) || (res > src))
	{
		flag_N = res >> 8;
		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
	}
	POST_IO
RET(22)
}

// CHK
OPCODE(0x41BA)
{
	s32 src, res;
	u32 adr;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READSX_WORD_F(adr, src)
	res = DREGs16((Opcode >> 9) & 7);
	if ((res < 0) || (res > src))
	{
		flag_N = res >> 8;
		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
	}
	POST_IO
RET(18)
}

// CHK
OPCODE(0x41BB)
{
	s32 src, res;
	u32 adr;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READSX_WORD_F(adr, src)
	res = DREGs16((Opcode >> 9) & 7);
	if ((res < 0) || (res > src))
	{
		flag_N = res >> 8;
		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
	}
	POST_IO
RET(20)
}

// CHK
OPCODE(0x41BC)
{
	s32 src, res;
	u32 adr;

	FETCH_SWORD(src);
	res = DREGs16((Opcode >> 9) & 7);
	if ((res < 0) || (res > src))
	{
		flag_N = res >> 8;
		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
	}
	POST_IO
RET(14)
}

// CHK
OPCODE(0x419F)
{
	s32 src, res;
	u32 adr;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READSX_WORD_F(adr, src)
	res = DREGs16((Opcode >> 9) & 7);
	if ((res < 0) || (res > src))
	{
		flag_N = res >> 8;
		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
	}
	POST_IO
RET(14)
}

// CHK
OPCODE(0x41A7)
{
	s32 src, res;
	u32 adr;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READSX_WORD_F(adr, src)
	res = DREGs16((Opcode >> 9) & 7);
	if ((res < 0) || (res > src))
	{
		flag_N = res >> 8;
		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
	}
	POST_IO
RET(16)
}

// LEA
OPCODE(0x41D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	res = adr;
	AREG((Opcode >> 9) & 7) = res;
RET(4)
}

// LEA
OPCODE(0x41E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	res = adr;
	AREG((Opcode >> 9) & 7) = res;
RET(8)
}

// LEA
OPCODE(0x41F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	res = adr;
	AREG((Opcode >> 9) & 7) = res;
RET(12)
}

// LEA
OPCODE(0x41F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	res = adr;
	AREG((Opcode >> 9) & 7) = res;
RET(8)
}

// LEA
OPCODE(0x41F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	res = adr;
	AREG((Opcode >> 9) & 7) = res;
RET(12)
}

// LEA
OPCODE(0x41FA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	res = adr;
	AREG((Opcode >> 9) & 7) = res;
RET(8)
}

// LEA
OPCODE(0x41FB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	res = adr;
	AREG((Opcode >> 9) & 7) = res;
RET(12)
}

// STCC
OPCODE(0x50C0)
{
	u32 adr, res;
	u32 src, dst;

	res = 0xFF;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
}

// STCC
OPCODE(0x51C0)
{
	u32 adr, res;
	u32 src, dst;

	res = 0;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(4)
}

// STCC
OPCODE(0x52C0)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_NotZ && (!(flag_C & 0x100)))
	{
	res = 0xFF;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
	}
	res = 0;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(4)
}

// STCC
OPCODE(0x53C0)
{
	u32 adr, res;
	u32 src, dst;

	if ((!flag_NotZ) || (flag_C & 0x100))
	{
	res = 0xFF;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
	}
	res = 0;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(4)
}

// STCC
OPCODE(0x54C0)
{
	u32 adr, res;
	u32 src, dst;

	if (!(flag_C & 0x100))
	{
	res = 0xFF;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
	}
	res = 0;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(4)
}

// STCC
OPCODE(0x55C0)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_C & 0x100)
	{
	res = 0xFF;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
	}
	res = 0;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(4)
}

// STCC
OPCODE(0x56C0)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_NotZ)
	{
	res = 0xFF;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
	}
	res = 0;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(4)
}

// STCC
OPCODE(0x57C0)
{
	u32 adr, res;
	u32 src, dst;

	if (!flag_NotZ)
	{
	res = 0xFF;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
	}
	res = 0;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(4)
}

// STCC
OPCODE(0x58C0)
{
	u32 adr, res;
	u32 src, dst;

	if (!(flag_V & 0x80))
	{
	res = 0xFF;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
	}
	res = 0;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(4)
}

// STCC
OPCODE(0x59C0)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_V & 0x80)
	{
	res = 0xFF;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
	}
	res = 0;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(4)
}

// STCC
OPCODE(0x5AC0)
{
	u32 adr, res;
	u32 src, dst;

	if (!(flag_N & 0x80))
	{
	res = 0xFF;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
	}
	res = 0;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(4)
}

// STCC
OPCODE(0x5BC0)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_N & 0x80)
	{
	res = 0xFF;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
	}
	res = 0;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(4)
}

// STCC
OPCODE(0x5CC0)
{
	u32 adr, res;
	u32 src, dst;

	if (!((flag_N ^ flag_V) & 0x80))
	{
	res = 0xFF;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
	}
	res = 0;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(4)
}

// STCC
OPCODE(0x5DC0)
{
	u32 adr, res;
	u32 src, dst;

	if ((flag_N ^ flag_V) & 0x80)
	{
	res = 0xFF;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
	}
	res = 0;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(4)
}

// STCC
OPCODE(0x5EC0)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
	{
	res = 0xFF;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
	}
	res = 0;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(4)
}

// STCC
OPCODE(0x5FC0)
{
	u32 adr, res;
	u32 src, dst;

	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
	{
	res = 0xFF;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
	}
	res = 0;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(4)
}

// STCC
OPCODE(0x50D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x51D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x52D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	if (flag_NotZ && (!(flag_C & 0x100)))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x53D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	if ((!flag_NotZ) || (flag_C & 0x100))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x54D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	if (!(flag_C & 0x100))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x55D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	if (flag_C & 0x100)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x56D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	if (flag_NotZ)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x57D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	if (!flag_NotZ)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x58D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	if (!(flag_V & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x59D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	if (flag_V & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x5AD0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	if (!(flag_N & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x5BD0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	if (flag_N & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x5CD0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	if (!((flag_N ^ flag_V) & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x5DD0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	if ((flag_N ^ flag_V) & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x5ED0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x5FD0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x50D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x51D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x52D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	if (flag_NotZ && (!(flag_C & 0x100)))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x53D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	if ((!flag_NotZ) || (flag_C & 0x100))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x54D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	if (!(flag_C & 0x100))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x55D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	if (flag_C & 0x100)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x56D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	if (flag_NotZ)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x57D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	if (!flag_NotZ)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x58D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	if (!(flag_V & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x59D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	if (flag_V & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x5AD8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	if (!(flag_N & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x5BD8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	if (flag_N & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x5CD8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	if (!((flag_N ^ flag_V) & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x5DD8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	if ((flag_N ^ flag_V) & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x5ED8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x5FD8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x50E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x51E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x52E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	if (flag_NotZ && (!(flag_C & 0x100)))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x53E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	if ((!flag_NotZ) || (flag_C & 0x100))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x54E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	if (!(flag_C & 0x100))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x55E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	if (flag_C & 0x100)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x56E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	if (flag_NotZ)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x57E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	if (!flag_NotZ)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x58E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	if (!(flag_V & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x59E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	if (flag_V & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x5AE0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	if (!(flag_N & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x5BE0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	if (flag_N & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x5CE0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	if (!((flag_N ^ flag_V) & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x5DE0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	if ((flag_N ^ flag_V) & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x5EE0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x5FE0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x50E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x51E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x52E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	if (flag_NotZ && (!(flag_C & 0x100)))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x53E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	if ((!flag_NotZ) || (flag_C & 0x100))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x54E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	if (!(flag_C & 0x100))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x55E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	if (flag_C & 0x100)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x56E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	if (flag_NotZ)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x57E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	if (!flag_NotZ)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x58E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	if (!(flag_V & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x59E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	if (flag_V & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x5AE8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	if (!(flag_N & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x5BE8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	if (flag_N & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x5CE8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	if (!((flag_N ^ flag_V) & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x5DE8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	if ((flag_N ^ flag_V) & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x5EE8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x5FE8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x50F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
}

// STCC
OPCODE(0x51F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
}

// STCC
OPCODE(0x52F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	if (flag_NotZ && (!(flag_C & 0x100)))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
}

// STCC
OPCODE(0x53F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	if ((!flag_NotZ) || (flag_C & 0x100))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
}

// STCC
OPCODE(0x54F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	if (!(flag_C & 0x100))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
}

// STCC
OPCODE(0x55F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	if (flag_C & 0x100)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
}

// STCC
OPCODE(0x56F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	if (flag_NotZ)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
}

// STCC
OPCODE(0x57F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	if (!flag_NotZ)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
}

// STCC
OPCODE(0x58F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	if (!(flag_V & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
}

// STCC
OPCODE(0x59F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	if (flag_V & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
}

// STCC
OPCODE(0x5AF0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	if (!(flag_N & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
}

// STCC
OPCODE(0x5BF0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	if (flag_N & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
}

// STCC
OPCODE(0x5CF0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	if (!((flag_N ^ flag_V) & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
}

// STCC
OPCODE(0x5DF0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	if ((flag_N ^ flag_V) & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
}

// STCC
OPCODE(0x5EF0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
}

// STCC
OPCODE(0x5FF0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(18)
}

// STCC
OPCODE(0x50F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x51F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x52F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	if (flag_NotZ && (!(flag_C & 0x100)))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x53F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	if ((!flag_NotZ) || (flag_C & 0x100))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x54F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	if (!(flag_C & 0x100))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x55F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	if (flag_C & 0x100)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x56F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	if (flag_NotZ)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x57F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	if (!flag_NotZ)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x58F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	if (!(flag_V & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x59F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	if (flag_V & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x5AF8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	if (!(flag_N & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x5BF8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	if (flag_N & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x5CF8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	if (!((flag_N ^ flag_V) & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x5DF8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	if ((flag_N ^ flag_V) & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x5EF8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x5FF8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(16)
}

// STCC
OPCODE(0x50F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
}

// STCC
OPCODE(0x51F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
}

// STCC
OPCODE(0x52F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	if (flag_NotZ && (!(flag_C & 0x100)))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
}

// STCC
OPCODE(0x53F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	if ((!flag_NotZ) || (flag_C & 0x100))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
}

// STCC
OPCODE(0x54F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	if (!(flag_C & 0x100))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
}

// STCC
OPCODE(0x55F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	if (flag_C & 0x100)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
}

// STCC
OPCODE(0x56F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	if (flag_NotZ)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
}

// STCC
OPCODE(0x57F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	if (!flag_NotZ)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
}

// STCC
OPCODE(0x58F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	if (!(flag_V & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
}

// STCC
OPCODE(0x59F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	if (flag_V & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
}

// STCC
OPCODE(0x5AF9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	if (!(flag_N & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
}

// STCC
OPCODE(0x5BF9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	if (flag_N & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
}

// STCC
OPCODE(0x5CF9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	if (!((flag_N ^ flag_V) & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
}

// STCC
OPCODE(0x5DF9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	if ((flag_N ^ flag_V) & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
}

// STCC
OPCODE(0x5EF9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
}

// STCC
OPCODE(0x5FF9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(20)
}

// STCC
OPCODE(0x50DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x51DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x52DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	if (flag_NotZ && (!(flag_C & 0x100)))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x53DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	if ((!flag_NotZ) || (flag_C & 0x100))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x54DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	if (!(flag_C & 0x100))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x55DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	if (flag_C & 0x100)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x56DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	if (flag_NotZ)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x57DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	if (!flag_NotZ)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x58DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	if (!(flag_V & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x59DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	if (flag_V & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x5ADF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	if (!(flag_N & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x5BDF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	if (flag_N & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x5CDF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	if (!((flag_N ^ flag_V) & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x5DDF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	if ((flag_N ^ flag_V) & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x5EDF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x5FDF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(12)
}

// STCC
OPCODE(0x50E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x51E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x52E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	if (flag_NotZ && (!(flag_C & 0x100)))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x53E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	if ((!flag_NotZ) || (flag_C & 0x100))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x54E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	if (!(flag_C & 0x100))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x55E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	if (flag_C & 0x100)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x56E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	if (flag_NotZ)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x57E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	if (!flag_NotZ)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x58E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	if (!(flag_V & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x59E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	if (flag_V & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x5AE7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	if (!(flag_N & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x5BE7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	if (flag_N & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x5CE7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	if (!((flag_N ^ flag_V) & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x5DE7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	if ((flag_N ^ flag_V) & 0x80)
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x5EE7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// STCC
OPCODE(0x5FE7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
	{
	res = 0xFF;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
	}
	res = 0;
	PRE_IO
	WRITE_BYTE_F(adr, res)
	POST_IO
	RET(14)
}

// DBCC
OPCODE(0x50C8)
{
	u32 adr, res;
	u32 src, dst;

	PC++;
RET(12)
}

// DBCC
OPCODE(0x51C8)
{
	u32 adr, res;
	u32 src, dst;

	NOT_POLLING

	res = DREGu16((Opcode >> 0) & 7);
	res--;
	DREGu16((Opcode >> 0) & 7) = res;
	if ((s32)res != -1)
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
	RET(10)
	}
	PC++;
RET(14)
}

// DBCC
OPCODE(0x52C8)
{
	u32 adr, res;
	u32 src, dst;

	NOT_POLLING

	if ((!flag_NotZ) || (flag_C & 0x100))
	{
	res = DREGu16((Opcode >> 0) & 7);
	res--;
	DREGu16((Opcode >> 0) & 7) = res;
	if ((s32)res != -1)
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
	RET(10)
	}
	}
	else
	{
		PC++;
	RET(12)
	}
	PC++;
RET(14)
}

// DBCC
OPCODE(0x53C8)
{
	u32 adr, res;
	u32 src, dst;

	NOT_POLLING

	if (flag_NotZ && (!(flag_C & 0x100)))
	{
	res = DREGu16((Opcode >> 0) & 7);
	res--;
	DREGu16((Opcode >> 0) & 7) = res;
	if ((s32)res != -1)
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
	RET(10)
	}
	}
	else
	{
		PC++;
	RET(12)
	}
	PC++;
RET(14)
}

// DBCC
OPCODE(0x54C8)
{
	u32 adr, res;
	u32 src, dst;

	NOT_POLLING

	if (flag_C & 0x100)
	{
	res = DREGu16((Opcode >> 0) & 7);
	res--;
	DREGu16((Opcode >> 0) & 7) = res;
	if ((s32)res != -1)
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
	RET(10)
	}
	}
	else
	{
		PC++;
	RET(12)
	}
	PC++;
RET(14)
}

// DBCC
OPCODE(0x55C8)
{
	u32 adr, res;
	u32 src, dst;

	NOT_POLLING

	if (!(flag_C & 0x100))
	{
	res = DREGu16((Opcode >> 0) & 7);
	res--;
	DREGu16((Opcode >> 0) & 7) = res;
	if ((s32)res != -1)
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
	RET(10)
	}
	}
	else
	{
		PC++;
	RET(12)
	}
	PC++;
RET(14)
}

// DBCC
OPCODE(0x56C8)
{
	u32 adr, res;
	u32 src, dst;

	NOT_POLLING

	if (!flag_NotZ)
	{
	res = DREGu16((Opcode >> 0) & 7);
	res--;
	DREGu16((Opcode >> 0) & 7) = res;
	if ((s32)res != -1)
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
	RET(10)
	}
	}
	else
	{
		PC++;
	RET(12)
	}
	PC++;
RET(14)
}

// DBCC
OPCODE(0x57C8)
{
	u32 adr, res;
	u32 src, dst;

	NOT_POLLING

	if (flag_NotZ)
	{
	res = DREGu16((Opcode >> 0) & 7);
	res--;
	DREGu16((Opcode >> 0) & 7) = res;
	if ((s32)res != -1)
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
	RET(10)
	}
	}
	else
	{
		PC++;
	RET(12)
	}
	PC++;
RET(14)
}

// DBCC
OPCODE(0x58C8)
{
	u32 adr, res;
	u32 src, dst;

	NOT_POLLING

	if (flag_V & 0x80)
	{
	res = DREGu16((Opcode >> 0) & 7);
	res--;
	DREGu16((Opcode >> 0) & 7) = res;
	if ((s32)res != -1)
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
	RET(10)
	}
	}
	else
	{
		PC++;
	RET(12)
	}
	PC++;
RET(14)
}

// DBCC
OPCODE(0x59C8)
{
	u32 adr, res;
	u32 src, dst;

	NOT_POLLING

	if (!(flag_V & 0x80))
	{
	res = DREGu16((Opcode >> 0) & 7);
	res--;
	DREGu16((Opcode >> 0) & 7) = res;
	if ((s32)res != -1)
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
	RET(10)
	}
	}
	else
	{
		PC++;
	RET(12)
	}
	PC++;
RET(14)
}

// DBCC
OPCODE(0x5AC8)
{
	u32 adr, res;
	u32 src, dst;

	NOT_POLLING

	if (flag_N & 0x80)
	{
	res = DREGu16((Opcode >> 0) & 7);
	res--;
	DREGu16((Opcode >> 0) & 7) = res;
	if ((s32)res != -1)
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
	RET(10)
	}
	}
	else
	{
		PC++;
	RET(12)
	}
	PC++;
RET(14)
}

// DBCC
OPCODE(0x5BC8)
{
	u32 adr, res;
	u32 src, dst;

	NOT_POLLING

	if (!(flag_N & 0x80))
	{
	res = DREGu16((Opcode >> 0) & 7);
	res--;
	DREGu16((Opcode >> 0) & 7) = res;
	if ((s32)res != -1)
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
	RET(10)
	}
	}
	else
	{
		PC++;
	RET(12)
	}
	PC++;
RET(14)
}

// DBCC
OPCODE(0x5CC8)
{
	u32 adr, res;
	u32 src, dst;

	NOT_POLLING

	if ((flag_N ^ flag_V) & 0x80)
	{
	res = DREGu16((Opcode >> 0) & 7);
	res--;
	DREGu16((Opcode >> 0) & 7) = res;
	if ((s32)res != -1)
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
	RET(10)
	}
	}
	else
	{
		PC++;
	RET(12)
	}
	PC++;
RET(14)
}

// DBCC
OPCODE(0x5DC8)
{
	u32 adr, res;
	u32 src, dst;

	NOT_POLLING

	if (!((flag_N ^ flag_V) & 0x80))
	{
	res = DREGu16((Opcode >> 0) & 7);
	res--;
	DREGu16((Opcode >> 0) & 7) = res;
	if ((s32)res != -1)
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
	RET(10)
	}
	}
	else
	{
		PC++;
	RET(12)
	}
	PC++;
RET(14)
}

// DBCC
OPCODE(0x5EC8)
{
	u32 adr, res;
	u32 src, dst;

	NOT_POLLING

	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
	{
	res = DREGu16((Opcode >> 0) & 7);
	res--;
	DREGu16((Opcode >> 0) & 7) = res;
	if ((s32)res != -1)
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
	RET(10)
	}
	}
	else
	{
		PC++;
	RET(12)
	}
	PC++;
RET(14)
}

// DBCC
OPCODE(0x5FC8)
{
	u32 adr, res;
	u32 src, dst;

	NOT_POLLING

	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
	{
	res = DREGu16((Opcode >> 0) & 7);
	res--;
	DREGu16((Opcode >> 0) & 7) = res;
	if ((s32)res != -1)
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
	RET(10)
	}
	}
	else
	{
		PC++;
	RET(12)
	}
	PC++;
RET(14)
}

// ADDQ
OPCODE(0x5000)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	dst = DREGu8((Opcode >> 0) & 7);
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 0) & 7) = res;
RET(4)
}

// ADDQ
OPCODE(0x5010)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// ADDQ
OPCODE(0x5018)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// ADDQ
OPCODE(0x5020)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// ADDQ
OPCODE(0x5028)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// ADDQ
OPCODE(0x5030)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// ADDQ
OPCODE(0x5038)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// ADDQ
OPCODE(0x5039)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// ADDQ
OPCODE(0x501F)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// ADDQ
OPCODE(0x5027)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// ADDQ
OPCODE(0x5040)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	dst = DREGu16((Opcode >> 0) & 7);
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 0) & 7) = res;
RET(4)
}

// ADDQ
OPCODE(0x5048)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	dst = AREGu32((Opcode >> 0) & 7);
	res = dst + src;
	AREG((Opcode >> 0) & 7) = res;
#ifdef USE_CYCLONE_TIMING
RET(4)
#else
RET(8)
#endif
}

// ADDQ
OPCODE(0x5050)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ADDQ
OPCODE(0x5058)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ADDQ
OPCODE(0x5060)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// ADDQ
OPCODE(0x5068)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ADDQ
OPCODE(0x5070)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// ADDQ
OPCODE(0x5078)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ADDQ
OPCODE(0x5079)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// ADDQ
OPCODE(0x505F)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ADDQ
OPCODE(0x5067)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// ADDQ
OPCODE(0x5080)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	dst = DREGu32((Opcode >> 0) & 7);
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 0) & 7) = res;
RET(8)
}

// ADDQ
OPCODE(0x5088)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	dst = AREGu32((Opcode >> 0) & 7);
	res = dst + src;
	AREG((Opcode >> 0) & 7) = res;
RET(8)
}

// ADDQ
OPCODE(0x5090)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// ADDQ
OPCODE(0x5098)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// ADDQ
OPCODE(0x50A0)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// ADDQ
OPCODE(0x50A8)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// ADDQ
OPCODE(0x50B0)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// ADDQ
OPCODE(0x50B8)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// ADDQ
OPCODE(0x50B9)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// ADDQ
OPCODE(0x509F)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// ADDQ
OPCODE(0x50A7)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// SUBQ
OPCODE(0x5100)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	dst = DREGu8((Opcode >> 0) & 7);
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 0) & 7) = res;
RET(4)
}

// SUBQ
OPCODE(0x5110)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// SUBQ
OPCODE(0x5118)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// SUBQ
OPCODE(0x5120)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// SUBQ
OPCODE(0x5128)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// SUBQ
OPCODE(0x5130)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// SUBQ
OPCODE(0x5138)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// SUBQ
OPCODE(0x5139)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// SUBQ
OPCODE(0x511F)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// SUBQ
OPCODE(0x5127)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// SUBQ
OPCODE(0x5140)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	dst = DREGu16((Opcode >> 0) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 0) & 7) = res;
RET(4)
}

// SUBQ
OPCODE(0x5148)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	dst = AREGu32((Opcode >> 0) & 7);
	res = dst - src;
	AREG((Opcode >> 0) & 7) = res;
RET(8)
}

// SUBQ
OPCODE(0x5150)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// SUBQ
OPCODE(0x5158)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// SUBQ
OPCODE(0x5160)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// SUBQ
OPCODE(0x5168)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// SUBQ
OPCODE(0x5170)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// SUBQ
OPCODE(0x5178)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// SUBQ
OPCODE(0x5179)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// SUBQ
OPCODE(0x515F)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// SUBQ
OPCODE(0x5167)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// SUBQ
OPCODE(0x5180)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	dst = DREGu32((Opcode >> 0) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 0) & 7) = res;
RET(8)
}

// SUBQ
OPCODE(0x5188)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	dst = AREGu32((Opcode >> 0) & 7);
	res = dst - src;
	AREG((Opcode >> 0) & 7) = res;
RET(8)
}

// SUBQ
OPCODE(0x5190)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// SUBQ
OPCODE(0x5198)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// SUBQ
OPCODE(0x51A0)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// SUBQ
OPCODE(0x51A8)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// SUBQ
OPCODE(0x51B0)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// SUBQ
OPCODE(0x51B8)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// SUBQ
OPCODE(0x51B9)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// SUBQ
OPCODE(0x519F)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// SUBQ
OPCODE(0x51A7)
{
	u32 adr, res;
	u32 src, dst;

	src = (((Opcode >> 9) - 1) & 7) + 1;
	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// BCC
OPCODE(0x6201)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_NotZ && (!(flag_C & 0x100)))
	{
		PC += ((s8)(Opcode & 0xFE)) >> 1;
	ctx->io_cycle_counter -= 2;
	}
RET(8)
}

// BCC
OPCODE(0x6301)
{
	u32 adr, res;
	u32 src, dst;

	if ((!flag_NotZ) || (flag_C & 0x100))
	{
		PC += ((s8)(Opcode & 0xFE)) >> 1;
	ctx->io_cycle_counter -= 2;
	}
RET(8)
}

// BCC
OPCODE(0x6401)
{
	u32 adr, res;
	u32 src, dst;

	if (!(flag_C & 0x100))
	{
		PC += ((s8)(Opcode & 0xFE)) >> 1;
	ctx->io_cycle_counter -= 2;
	}
RET(8)
}

// BCC
OPCODE(0x6501)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_C & 0x100)
	{
		PC += ((s8)(Opcode & 0xFE)) >> 1;
	ctx->io_cycle_counter -= 2;
	}
RET(8)
}

// BCC
OPCODE(0x6601)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_NotZ)
	{
		PC += ((s8)(Opcode & 0xFE)) >> 1;
	ctx->io_cycle_counter -= 2;
	}
RET(8)
}

// BCC
OPCODE(0x6701)
{
	u32 adr, res;
	u32 src, dst;

	if (!flag_NotZ)
	{
		PC += ((s8)(Opcode & 0xFE)) >> 1;
	ctx->io_cycle_counter -= 2;
	}
RET(8)
}

// BCC
OPCODE(0x6801)
{
	u32 adr, res;
	u32 src, dst;

	if (!(flag_V & 0x80))
	{
		PC += ((s8)(Opcode & 0xFE)) >> 1;
	ctx->io_cycle_counter -= 2;
	}
RET(8)
}

// BCC
OPCODE(0x6901)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_V & 0x80)
	{
		PC += ((s8)(Opcode & 0xFE)) >> 1;
	ctx->io_cycle_counter -= 2;
	}
RET(8)
}

// BCC
OPCODE(0x6A01)
{
	u32 adr, res;
	u32 src, dst;

	if (!(flag_N & 0x80))
	{
		PC += ((s8)(Opcode & 0xFE)) >> 1;
	ctx->io_cycle_counter -= 2;
	}
RET(8)
}

// BCC
OPCODE(0x6B01)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_N & 0x80)
	{
		PC += ((s8)(Opcode & 0xFE)) >> 1;
	ctx->io_cycle_counter -= 2;
	}
RET(8)
}

// BCC
OPCODE(0x6C01)
{
	u32 adr, res;
	u32 src, dst;

	if (!((flag_N ^ flag_V) & 0x80))
	{
		PC += ((s8)(Opcode & 0xFE)) >> 1;
	ctx->io_cycle_counter -= 2;
	}
RET(8)
}

// BCC
OPCODE(0x6D01)
{
	u32 adr, res;
	u32 src, dst;

	if ((flag_N ^ flag_V) & 0x80)
	{
		PC += ((s8)(Opcode & 0xFE)) >> 1;
	ctx->io_cycle_counter -= 2;
	}
RET(8)
}

// BCC
OPCODE(0x6E01)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
	{
		PC += ((s8)(Opcode & 0xFE)) >> 1;
	ctx->io_cycle_counter -= 2;
	}
RET(8)
}

// BCC
OPCODE(0x6F01)
{
	u32 adr, res;
	u32 src, dst;

	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
	{
		PC += ((s8)(Opcode & 0xFE)) >> 1;
	ctx->io_cycle_counter -= 2;
	}
RET(8)
}

// BCC16
OPCODE(0x6200)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_NotZ && (!(flag_C & 0x100)))
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
		RET(10)
	}
	PC++;
RET(12)
}

// BCC16
OPCODE(0x6300)
{
	u32 adr, res;
	u32 src, dst;

	if ((!flag_NotZ) || (flag_C & 0x100))
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
		RET(10)
	}
	PC++;
RET(12)
}

// BCC16
OPCODE(0x6400)
{
	u32 adr, res;
	u32 src, dst;

	if (!(flag_C & 0x100))
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
		RET(10)
	}
	PC++;
RET(12)
}

// BCC16
OPCODE(0x6500)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_C & 0x100)
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
		RET(10)
	}
	PC++;
RET(12)
}

// BCC16
OPCODE(0x6600)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_NotZ)
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
		RET(10)
	}
	PC++;
RET(12)
}

// BCC16
OPCODE(0x6700)
{
	u32 adr, res;
	u32 src, dst;

	if (!flag_NotZ)
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
		RET(10)
	}
	PC++;
RET(12)
}

// BCC16
OPCODE(0x6800)
{
	u32 adr, res;
	u32 src, dst;

	if (!(flag_V & 0x80))
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
		RET(10)
	}
	PC++;
RET(12)
}

// BCC16
OPCODE(0x6900)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_V & 0x80)
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
		RET(10)
	}
	PC++;
RET(12)
}

// BCC16
OPCODE(0x6A00)
{
	u32 adr, res;
	u32 src, dst;

	if (!(flag_N & 0x80))
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
		RET(10)
	}
	PC++;
RET(12)
}

// BCC16
OPCODE(0x6B00)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_N & 0x80)
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
		RET(10)
	}
	PC++;
RET(12)
}

// BCC16
OPCODE(0x6C00)
{
	u32 adr, res;
	u32 src, dst;

	if (!((flag_N ^ flag_V) & 0x80))
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
		RET(10)
	}
	PC++;
RET(12)
}

// BCC16
OPCODE(0x6D00)
{
	u32 adr, res;
	u32 src, dst;

	if ((flag_N ^ flag_V) & 0x80)
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
		RET(10)
	}
	PC++;
RET(12)
}

// BCC16
OPCODE(0x6E00)
{
	u32 adr, res;
	u32 src, dst;

	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
		RET(10)
	}
	PC++;
RET(12)
}

// BCC16
OPCODE(0x6F00)
{
	u32 adr, res;
	u32 src, dst;

	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
		RET(10)
	}
	PC++;
RET(12)
}

// BRA
OPCODE(0x6001)
{
#ifdef FAMEC_CHECK_BRANCHES
	u32 newPC = GET_PC;
	s8 offs=Opcode;
	newPC += offs;
	SET_PC(newPC);
	CHECK_BRANCH_EXCEPTION(offs)
#else
	PC += ((s8)(Opcode & 0xFE)) >> 1;
#endif
RET(10)
}

// BRA16
OPCODE(0x6000)
{
	u32 adr, res;
	u32 src, dst;

	{
		u32 newPC;

		newPC = GET_PC;
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
	}
RET(10)
}

// BSR
OPCODE(0x6101)
{
	u32 adr, res;
	u32 src, dst;
	u32 oldPC;
	s8 offs;

	PRE_IO

	oldPC = GET_PC;
	PUSH_32_F(oldPC)
#ifdef FAMEC_CHECK_BRANCHES
	offs = Opcode;
	oldPC += offs;
	SET_PC(oldPC);
	CHECK_BRANCH_EXCEPTION(offs)
#else
	PC += ((s8)(Opcode & 0xFE)) >> 1;
#endif
	POST_IO
RET(18)
}

// BSR16
OPCODE(0x6100)
{
	u32 adr, res;
	u32 src, dst;

	PRE_IO
	{
		u32 oldPC, newPC;

		newPC = GET_PC;
		oldPC = newPC + 2;
		PUSH_32_F(oldPC)
		newPC += GET_SWORD;
		SET_PC(newPC);
		CHECK_BRANCH_EXCEPTION(newPC)
	}
	POST_IO
RET(18)
}

// MOVEQ
OPCODE(0x7000)
{
	u32 adr, res;
	u32 src, dst;

	res = (s32)(s8)Opcode;
	flag_C = flag_V = 0;
	flag_N = flag_NotZ = res;
	DREGu32((Opcode >> 9) & 7) = res;
RET(4)
}

// ORaD
OPCODE(0x8000)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 0) & 7);
	res = DREGu8((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
RET(4)
}

// ORaD
OPCODE(0x8010)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, src)
	res = DREGu8((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// ORaD
OPCODE(0x8018)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, src)
	res = DREGu8((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// ORaD
OPCODE(0x8020)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	res = DREGu8((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(10)
}

// ORaD
OPCODE(0x8028)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, src)
	res = DREGu8((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// ORaD
OPCODE(0x8030)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, src)
	res = DREGu8((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// ORaD
OPCODE(0x8038)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, src)
	res = DREGu8((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// ORaD
OPCODE(0x8039)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, src)
	res = DREGu8((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// ORaD
OPCODE(0x803A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_BYTE_F(adr, src)
	res = DREGu8((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// ORaD
OPCODE(0x803B)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, src)
	res = DREGu8((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// ORaD
OPCODE(0x803C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	res = DREGu8((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
RET(8)
}

// ORaD
OPCODE(0x801F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, src)
	res = DREGu8((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// ORaD
OPCODE(0x8027)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	res = DREGu8((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(10)
}

// ORaD
OPCODE(0x8040)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 0) & 7);
	res = DREGu16((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
RET(4)
}

// ORaD
OPCODE(0x8050)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// ORaD
OPCODE(0x8058)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// ORaD
OPCODE(0x8060)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(10)
}

// ORaD
OPCODE(0x8068)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// ORaD
OPCODE(0x8070)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// ORaD
OPCODE(0x8078)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// ORaD
OPCODE(0x8079)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// ORaD
OPCODE(0x807A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// ORaD
OPCODE(0x807B)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// ORaD
OPCODE(0x807C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	res = DREGu16((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
RET(8)
}

// ORaD
OPCODE(0x805F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// ORaD
OPCODE(0x8067)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(10)
}

// ORaD
OPCODE(0x8080)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 0) & 7);
	res = DREGu32((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
RET(8)
}

// ORaD
OPCODE(0x8090)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, src)
	res = DREGu32((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// ORaD
OPCODE(0x8098)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, src)
	res = DREGu32((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// ORaD
OPCODE(0x80A0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, src)
	res = DREGu32((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// ORaD
OPCODE(0x80A8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, src)
	res = DREGu32((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(18)
}

// ORaD
OPCODE(0x80B0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, src)
	res = DREGu32((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(20)
}

// ORaD
OPCODE(0x80B8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, src)
	res = DREGu32((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(18)
}

// ORaD
OPCODE(0x80B9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, src)
	res = DREGu32((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(22)
}

// ORaD
OPCODE(0x80BA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_LONG_F(adr, src)
	res = DREGu32((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(18)
}

// ORaD
OPCODE(0x80BB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, src)
	res = DREGu32((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(20)
}

// ORaD
OPCODE(0x80BC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	res = DREGu32((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
RET(16)
}

// ORaD
OPCODE(0x809F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, src)
	res = DREGu32((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// ORaD
OPCODE(0x80A7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, src)
	res = DREGu32((Opcode >> 9) & 7);
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// ORDa
OPCODE(0x8110)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// ORDa
OPCODE(0x8118)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// ORDa
OPCODE(0x8120)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// ORDa
OPCODE(0x8128)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// ORDa
OPCODE(0x8130)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// ORDa
OPCODE(0x8138)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// ORDa
OPCODE(0x8139)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// ORDa
OPCODE(0x811F)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// ORDa
OPCODE(0x8127)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// ORDa
OPCODE(0x8150)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ORDa
OPCODE(0x8158)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ORDa
OPCODE(0x8160)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// ORDa
OPCODE(0x8168)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ORDa
OPCODE(0x8170)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// ORDa
OPCODE(0x8178)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ORDa
OPCODE(0x8179)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// ORDa
OPCODE(0x815F)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ORDa
OPCODE(0x8167)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// ORDa
OPCODE(0x8190)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// ORDa
OPCODE(0x8198)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// ORDa
OPCODE(0x81A0)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// ORDa
OPCODE(0x81A8)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// ORDa
OPCODE(0x81B0)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// ORDa
OPCODE(0x81B8)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// ORDa
OPCODE(0x81B9)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// ORDa
OPCODE(0x819F)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// ORDa
OPCODE(0x81A7)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	res |= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// SBCD
OPCODE(0x8100)
{
	u32 adr, res;
	u32 src, dst;
	u32 corf = 0;

	src = DREGu8((Opcode >> 0) & 7);
	dst = DREGu8((Opcode >> 9) & 7);
	res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
	if (res > 0xF) corf = 6;
	res += (dst & 0xF0) - (src & 0xF0);
	flag_V = res;
	flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0;
	if (res > 0xff) res += 0xA0;
	res = (res - corf) & 0xFF;
	flag_V &= ~res;
	flag_NotZ |= res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
RET(6)
}

// SBCDM
OPCODE(0x8108)
{
	u32 adr, res;
	u32 src, dst;
	u32 corf = 0;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	adr = AREG((Opcode >> 9) & 7) - 1;
	AREG((Opcode >> 9) & 7) = adr;
	READ_BYTE_F(adr, dst)
	res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
	if (res > 0xF) corf = 6;
	res += (dst & 0xF0) - (src & 0xF0);
	flag_V = res;
	flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0;
	if (res > 0xff) res += 0xA0;
	res = (res - corf) & 0xFF;
	flag_V &= ~res;
	flag_NotZ |= res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// SBCD7M
OPCODE(0x810F)
{
	u32 adr, res;
	u32 src, dst;
	u32 corf = 0;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	adr = AREG((Opcode >> 9) & 7) - 1;
	AREG((Opcode >> 9) & 7) = adr;
	READ_BYTE_F(adr, dst)
	res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
	if (res > 0xF) corf = 6;
	res += (dst & 0xF0) - (src & 0xF0);
	flag_V = res;
	flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0;
	if (res > 0xff) res += 0xA0;
	res = (res - corf) & 0xFF;
	flag_V &= ~res;
	flag_NotZ |= res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// SBCDM7
OPCODE(0x8F08)
{
	u32 adr, res;
	u32 src, dst;
	u32 corf = 0;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	adr = AREG(7) - 2;
	AREG(7) = adr;
	READ_BYTE_F(adr, dst)
	res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
	if (res > 0xF) corf = 6;
	res += (dst & 0xF0) - (src & 0xF0);
	flag_V = res;
	flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0;
	if (res > 0xff) res += 0xA0;
	res = (res - corf) & 0xFF;
	flag_V &= ~res;
	flag_NotZ |= res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// SBCD7M7
OPCODE(0x8F0F)
{
	u32 adr, res;
	u32 src, dst;
	u32 corf = 0;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	adr = AREG(7) - 2;
	AREG(7) = adr;
	READ_BYTE_F(adr, dst)
	res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
	if (res > 0xF) corf = 6;
	res += (dst & 0xF0) - (src & 0xF0);
	flag_V = res;
	flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0;
	if (res > 0xff) res += 0xA0;
	res = (res - corf) & 0xFF;
	flag_V &= ~res;
	flag_NotZ |= res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// DIVU
OPCODE(0x80C0)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 0) & 7);
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(140)
#else
RET(10)
#endif
	}
	dst = DREGu32((Opcode >> 9) & 7);
	{
		u32 q, r;

		q = dst / src;
		r = dst % src;

		if (q & 0xFFFF0000)
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
RET(140)
#else
RET(70)
#endif
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
RET(140)
#else
RET(90)
#endif
}

// DIVU
OPCODE(0x80D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(144)
#else
RET(14)
#endif
	}
	dst = DREGu32((Opcode >> 9) & 7);
	{
		u32 q, r;

		q = dst / src;
		r = dst % src;

		if (q & 0xFFFF0000)
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
RET(144)
#else
	RET(74)
#endif
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
RET(144)
#else
RET(94)
#endif
}

// DIVU
OPCODE(0x80D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(144)
#else
RET(14)
#endif
	}
	dst = DREGu32((Opcode >> 9) & 7);
	{
		u32 q, r;

		q = dst / src;
		r = dst % src;

		if (q & 0xFFFF0000)
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
RET(144)
#else
	RET(74)
#endif
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
RET(144)
#else
RET(94)
#endif
}

// DIVU
OPCODE(0x80E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(146)
#else
RET(16)
#endif
	}
	dst = DREGu32((Opcode >> 9) & 7);
	{
		u32 q, r;

		q = dst / src;
		r = dst % src;

		if (q & 0xFFFF0000)
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
RET(146)
#else
	RET(76)
#endif
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
RET(146)
#else
RET(96)
#endif
}

// DIVU
OPCODE(0x80E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(148)
#else
RET(18)
#endif
	}
	dst = DREGu32((Opcode >> 9) & 7);
	{
		u32 q, r;

		q = dst / src;
		r = dst % src;

		if (q & 0xFFFF0000)
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
RET(148)
#else
	RET(78)
#endif
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
RET(148)
#else
RET(98)
#endif
}

// DIVU
OPCODE(0x80F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(150)
#else
RET(20)
#endif
	}
	dst = DREGu32((Opcode >> 9) & 7);
	{
		u32 q, r;

		q = dst / src;
		r = dst % src;

		if (q & 0xFFFF0000)
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
RET(150)
#else
	RET(80)
#endif
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
RET(150)
#else
RET(100)
#endif
}

// DIVU
OPCODE(0x80F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(148)
#else
RET(18)
#endif
	}
	dst = DREGu32((Opcode >> 9) & 7);
	{
		u32 q, r;

		q = dst / src;
		r = dst % src;

		if (q & 0xFFFF0000)
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
RET(148)
#else
	RET(78)
#endif
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
RET(148)
#else
RET(98)
#endif
}

// DIVU
OPCODE(0x80F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(152)
#else
RET(22)
#endif
	}
	dst = DREGu32((Opcode >> 9) & 7);
	{
		u32 q, r;

		q = dst / src;
		r = dst % src;

		if (q & 0xFFFF0000)
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
RET(152)
#else
	RET(82)
#endif
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
RET(152)
#else
RET(102)
#endif
}

// DIVU
OPCODE(0x80FA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_WORD_F(adr, src)
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(148)
#else
RET(18)
#endif
	}
	dst = DREGu32((Opcode >> 9) & 7);
	{
		u32 q, r;

		q = dst / src;
		r = dst % src;

		if (q & 0xFFFF0000)
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
RET(148)
#else
	RET(78)
#endif
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
RET(148)
#else
RET(98)
#endif
}

// DIVU
OPCODE(0x80FB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(150)
#else
RET(20)
#endif
	}
	dst = DREGu32((Opcode >> 9) & 7);
	{
		u32 q, r;

		q = dst / src;
		r = dst % src;

		if (q & 0xFFFF0000)
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
RET(150)
#else
	RET(80)
#endif
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
RET(150)
#else
RET(100)
#endif
}

// DIVU
OPCODE(0x80FC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(144)
#else
RET(14)
#endif
	}
	dst = DREGu32((Opcode >> 9) & 7);
	{
		u32 q, r;

		q = dst / src;
		r = dst % src;

		if (q & 0xFFFF0000)
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
RET(144)
#else
	RET(74)
#endif
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
RET(144)
#else
RET(94)
#endif
}

// DIVU
OPCODE(0x80DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(144)
#else
RET(14)
#endif
	}
	dst = DREGu32((Opcode >> 9) & 7);
	{
		u32 q, r;

		q = dst / src;
		r = dst % src;

		if (q & 0xFFFF0000)
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
RET(144)
#else
	RET(74)
#endif
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
RET(144)
#else
RET(94)
#endif
}

// DIVU
OPCODE(0x80E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(146)
#else
RET(16)
#endif
	}
	dst = DREGu32((Opcode >> 9) & 7);
	{
		u32 q, r;

		q = dst / src;
		r = dst % src;

		if (q & 0xFFFF0000)
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
RET(146)
#else
	RET(76)
#endif
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
RET(146)
#else
RET(96)
#endif
}

// DIVS
OPCODE(0x81C0)
{
	u32 adr, res;
	u32 src, dst;

	src = (s32)DREGs16((Opcode >> 0) & 7);
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81C0;
#endif
		RET(10)
	}
	dst = DREGu32((Opcode >> 9) & 7);
	if ((dst == 0x80000000) && (src == (u32)-1))
	{
		flag_NotZ = flag_N = 0;
		flag_V = flag_C = 0;
		res = 0;
	DREGu32((Opcode >> 9) & 7) = res;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81C0;
#endif
	RET(50)
	}
	{
		s32 q, r;

		q = (s32)dst / (s32)src;
		r = (s32)dst % (s32)src;

		if ((q > 0x7FFF) || (q < -0x8000))
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81C0;
#endif
	RET(80)
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
end81C0: ctx->io_cycle_counter -= 50;
#endif
RET(108)
}

// DIVS
OPCODE(0x81D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READSX_WORD_F(adr, src)
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81D0;
#endif
		RET(14)
	}
	dst = DREGu32((Opcode >> 9) & 7);
	if ((dst == 0x80000000) && (src == (u32)-1))
	{
		flag_NotZ = flag_N = 0;
		flag_V = flag_C = 0;
		res = 0;
	DREGu32((Opcode >> 9) & 7) = res;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81D0;
#endif
	RET(54)
	}
	{
		s32 q, r;

		q = (s32)dst / (s32)src;
		r = (s32)dst % (s32)src;

		if ((q > 0x7FFF) || (q < -0x8000))
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81D0;
#endif
	RET(84)
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
end81D0: ctx->io_cycle_counter -= 50;
#endif
RET(112)
}

// DIVS
OPCODE(0x81D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READSX_WORD_F(adr, src)
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81D8;
#endif
		RET(14)
	}
	dst = DREGu32((Opcode >> 9) & 7);
	if ((dst == 0x80000000) && (src == (u32)-1))
	{
		flag_NotZ = flag_N = 0;
		flag_V = flag_C = 0;
		res = 0;
	DREGu32((Opcode >> 9) & 7) = res;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81D8;
#endif
	RET(54)
	}
	{
		s32 q, r;

		q = (s32)dst / (s32)src;
		r = (s32)dst % (s32)src;

		if ((q > 0x7FFF) || (q < -0x8000))
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81D8;
#endif
	RET(84)
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
end81D8: ctx->io_cycle_counter -= 50;
#endif
RET(112)
}

// DIVS
OPCODE(0x81E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READSX_WORD_F(adr, src)
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81E0;
#endif
		RET(16)
	}
	dst = DREGu32((Opcode >> 9) & 7);
	if ((dst == 0x80000000) && (src == (u32)-1))
	{
		flag_NotZ = flag_N = 0;
		flag_V = flag_C = 0;
		res = 0;
	DREGu32((Opcode >> 9) & 7) = res;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81E0;
#endif
	RET(56)
	}
	{
		s32 q, r;

		q = (s32)dst / (s32)src;
		r = (s32)dst % (s32)src;

		if ((q > 0x7FFF) || (q < -0x8000))
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81E0;
#endif
	RET(86)
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
end81E0: ctx->io_cycle_counter -= 50;
#endif
RET(114)
}

// DIVS
OPCODE(0x81E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READSX_WORD_F(adr, src)
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81E8;
#endif
		RET(18)
	}
	dst = DREGu32((Opcode >> 9) & 7);
	if ((dst == 0x80000000) && (src == (u32)-1))
	{
		flag_NotZ = flag_N = 0;
		flag_V = flag_C = 0;
		res = 0;
	DREGu32((Opcode >> 9) & 7) = res;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81E8;
#endif
	RET(58)
	}
	{
		s32 q, r;

		q = (s32)dst / (s32)src;
		r = (s32)dst % (s32)src;

		if ((q > 0x7FFF) || (q < -0x8000))
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81E8;
#endif
	RET(88)
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
end81E8: ctx->io_cycle_counter -= 50;
#endif
RET(116)
}

// DIVS
OPCODE(0x81F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READSX_WORD_F(adr, src)
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81F0;
#endif
		RET(20)
	}
	dst = DREGu32((Opcode >> 9) & 7);
	if ((dst == 0x80000000) && (src == (u32)-1))
	{
		flag_NotZ = flag_N = 0;
		flag_V = flag_C = 0;
		res = 0;
	DREGu32((Opcode >> 9) & 7) = res;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81F0;
#endif
	RET(60)
	}
	{
		s32 q, r;

		q = (s32)dst / (s32)src;
		r = (s32)dst % (s32)src;

		if ((q > 0x7FFF) || (q < -0x8000))
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81F0;
#endif
	RET(90)
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
end81F0: ctx->io_cycle_counter -= 50;
#endif
RET(118)
}

// DIVS
OPCODE(0x81F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READSX_WORD_F(adr, src)
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81F8;
#endif
		RET(18)
	}
	dst = DREGu32((Opcode >> 9) & 7);
	if ((dst == 0x80000000) && (src == (u32)-1))
	{
		flag_NotZ = flag_N = 0;
		flag_V = flag_C = 0;
		res = 0;
	DREGu32((Opcode >> 9) & 7) = res;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81F8;
#endif
	RET(58)
	}
	{
		s32 q, r;

		q = (s32)dst / (s32)src;
		r = (s32)dst % (s32)src;

		if ((q > 0x7FFF) || (q < -0x8000))
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81F8;
#endif
	RET(88)
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
end81F8: ctx->io_cycle_counter -= 50;
#endif
RET(116)
}

// DIVS
OPCODE(0x81F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READSX_WORD_F(adr, src)
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81F9;
#endif
		RET(22)
	}
	dst = DREGu32((Opcode >> 9) & 7);
	if ((dst == 0x80000000) && (src == (u32)-1))
	{
		flag_NotZ = flag_N = 0;
		flag_V = flag_C = 0;
		res = 0;
	DREGu32((Opcode >> 9) & 7) = res;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81F9;
#endif
	RET(62)
	}
	{
		s32 q, r;

		q = (s32)dst / (s32)src;
		r = (s32)dst % (s32)src;

		if ((q > 0x7FFF) || (q < -0x8000))
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81F9;
#endif
	RET(92)
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
end81F9: ctx->io_cycle_counter -= 50;
#endif
RET(120)
}

// DIVS
OPCODE(0x81FA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READSX_WORD_F(adr, src)
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81FA;
#endif
		RET(18)
	}
	dst = DREGu32((Opcode >> 9) & 7);
	if ((dst == 0x80000000) && (src == (u32)-1))
	{
		flag_NotZ = flag_N = 0;
		flag_V = flag_C = 0;
		res = 0;
	DREGu32((Opcode >> 9) & 7) = res;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81FA;
#endif
	RET(58)
	}
	{
		s32 q, r;

		q = (s32)dst / (s32)src;
		r = (s32)dst % (s32)src;

		if ((q > 0x7FFF) || (q < -0x8000))
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81FA;
#endif
	RET(88)
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
end81FA: ctx->io_cycle_counter -= 50;
#endif
RET(116)
}

// DIVS
OPCODE(0x81FB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READSX_WORD_F(adr, src)
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81FB;
#endif
		RET(20)
	}
	dst = DREGu32((Opcode >> 9) & 7);
	if ((dst == 0x80000000) && (src == (u32)-1))
	{
		flag_NotZ = flag_N = 0;
		flag_V = flag_C = 0;
		res = 0;
	DREGu32((Opcode >> 9) & 7) = res;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81FB;
#endif
	RET(60)
	}
	{
		s32 q, r;

		q = (s32)dst / (s32)src;
		r = (s32)dst % (s32)src;

		if ((q > 0x7FFF) || (q < -0x8000))
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81FB;
#endif
	RET(90)
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
end81FB: ctx->io_cycle_counter -= 50;
#endif
RET(118)
}

// DIVS
OPCODE(0x81FC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(src);
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81FC;
#endif
		RET(14)
	}
	dst = DREGu32((Opcode >> 9) & 7);
	if ((dst == 0x80000000) && (src == (u32)-1))
	{
		flag_NotZ = flag_N = 0;
		flag_V = flag_C = 0;
		res = 0;
	DREGu32((Opcode >> 9) & 7) = res;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81FC;
#endif
	RET(54)
	}
	{
		s32 q, r;

		q = (s32)dst / (s32)src;
		r = (s32)dst % (s32)src;

		if ((q > 0x7FFF) || (q < -0x8000))
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81FC;
#endif
	RET(84)
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
end81FC: ctx->io_cycle_counter -= 50;
#endif
RET(112)
}

// DIVS
OPCODE(0x81DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READSX_WORD_F(adr, src)
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81DF;
#endif
		RET(14)
	}
	dst = DREGu32((Opcode >> 9) & 7);
	if ((dst == 0x80000000) && (src == (u32)-1))
	{
		flag_NotZ = flag_N = 0;
		flag_V = flag_C = 0;
		res = 0;
	DREGu32((Opcode >> 9) & 7) = res;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81DF;
#endif
	RET(54)
	}
	{
		s32 q, r;

		q = (s32)dst / (s32)src;
		r = (s32)dst % (s32)src;

		if ((q > 0x7FFF) || (q < -0x8000))
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81DF;
#endif
	RET(84)
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
end81DF: ctx->io_cycle_counter -= 50;
#endif
RET(112)
}

// DIVS
OPCODE(0x81E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READSX_WORD_F(adr, src)
	if (src == 0)
	{
		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
goto end81E7;
#endif
		RET(16)
	}
	dst = DREGu32((Opcode >> 9) & 7);
	if ((dst == 0x80000000) && (src == (u32)-1))
	{
		flag_NotZ = flag_N = 0;
		flag_V = flag_C = 0;
		res = 0;
	DREGu32((Opcode >> 9) & 7) = res;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81E7;
#endif
	RET(56)
	}
	{
		s32 q, r;

		q = (s32)dst / (s32)src;
		r = (s32)dst % (s32)src;

		if ((q > 0x7FFF) || (q < -0x8000))
		{
			flag_V = M68K_SR_V;
#ifdef USE_CYCLONE_TIMING_DIV
goto end81E7;
#endif
	RET(86)
		}
		q &= 0x0000FFFF;
		flag_NotZ = q;
		flag_N = q >> 8;
		flag_V = flag_C = 0;
		res = q | (r << 16);
	DREGu32((Opcode >> 9) & 7) = res;
	}
#ifdef USE_CYCLONE_TIMING_DIV
end81E7: ctx->io_cycle_counter -= 50;
#endif
RET(114)
}

// SUBaD
OPCODE(0x9000)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 0) & 7);
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
RET(4)
}

// SUBaD
#if 0
OPCODE(0x9008)
{
	u32 adr, res;
	u32 src, dst;

	// can't read byte from Ax registers !
	ctx->execinfo |= M68K_FAULTED;
	ctx->io_cycle_counter = 0;
/*
	goto famec_Exec_End;
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
*/
RET(4)
}
#endif

// SUBaD
OPCODE(0x9010)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// SUBaD
OPCODE(0x9018)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// SUBaD
OPCODE(0x9020)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(10)
}

// SUBaD
OPCODE(0x9028)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// SUBaD
OPCODE(0x9030)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// SUBaD
OPCODE(0x9038)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// SUBaD
OPCODE(0x9039)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// SUBaD
OPCODE(0x903A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// SUBaD
OPCODE(0x903B)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// SUBaD
OPCODE(0x903C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
RET(8)
}

// SUBaD
OPCODE(0x901F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// SUBaD
OPCODE(0x9027)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(10)
}

// SUBaD
OPCODE(0x9040)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 0) & 7);
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
RET(4)
}

// SUBaD
OPCODE(0x9048)
{
	u32 adr, res;
	u32 src, dst;

	src = AREGu16((Opcode >> 0) & 7);
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
RET(4)
}

// SUBaD
OPCODE(0x9050)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// SUBaD
OPCODE(0x9058)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// SUBaD
OPCODE(0x9060)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(10)
}

// SUBaD
OPCODE(0x9068)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// SUBaD
OPCODE(0x9070)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// SUBaD
OPCODE(0x9078)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// SUBaD
OPCODE(0x9079)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// SUBaD
OPCODE(0x907A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// SUBaD
OPCODE(0x907B)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// SUBaD
OPCODE(0x907C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
RET(8)
}

// SUBaD
OPCODE(0x905F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// SUBaD
OPCODE(0x9067)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(10)
}

// SUBaD
OPCODE(0x9080)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 0) & 7);
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
RET(8)
}

// SUBaD
OPCODE(0x9088)
{
	u32 adr, res;
	u32 src, dst;

	src = AREGu32((Opcode >> 0) & 7);
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
RET(8)
}

// SUBaD
OPCODE(0x9090)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// SUBaD
OPCODE(0x9098)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// SUBaD
OPCODE(0x90A0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// SUBaD
OPCODE(0x90A8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(18)
}

// SUBaD
OPCODE(0x90B0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(20)
}

// SUBaD
OPCODE(0x90B8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(18)
}

// SUBaD
OPCODE(0x90B9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(22)
}

// SUBaD
OPCODE(0x90BA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(18)
}

// SUBaD
OPCODE(0x90BB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(20)
}

// SUBaD
OPCODE(0x90BC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
RET(16)
}

// SUBaD
OPCODE(0x909F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// SUBaD
OPCODE(0x90A7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// SUBDa
OPCODE(0x9110)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// SUBDa
OPCODE(0x9118)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// SUBDa
OPCODE(0x9120)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// SUBDa
OPCODE(0x9128)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// SUBDa
OPCODE(0x9130)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// SUBDa
OPCODE(0x9138)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// SUBDa
OPCODE(0x9139)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// SUBDa
OPCODE(0x911F)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// SUBDa
OPCODE(0x9127)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// SUBDa
OPCODE(0x9150)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// SUBDa
OPCODE(0x9158)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// SUBDa
OPCODE(0x9160)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// SUBDa
OPCODE(0x9168)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// SUBDa
OPCODE(0x9170)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// SUBDa
OPCODE(0x9178)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// SUBDa
OPCODE(0x9179)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// SUBDa
OPCODE(0x915F)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// SUBDa
OPCODE(0x9167)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// SUBDa
OPCODE(0x9190)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// SUBDa
OPCODE(0x9198)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// SUBDa
OPCODE(0x91A0)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// SUBDa
OPCODE(0x91A8)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// SUBDa
OPCODE(0x91B0)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// SUBDa
OPCODE(0x91B8)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// SUBDa
OPCODE(0x91B9)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// SUBDa
OPCODE(0x919F)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// SUBDa
OPCODE(0x91A7)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// SUBX
OPCODE(0x9100)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 0) & 7);
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src - ((flag_X >> 8) & 1);
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ |= res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
RET(4)
}

// SUBX
OPCODE(0x9140)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 0) & 7);
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src - ((flag_X >> 8) & 1);
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ |= res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
RET(4)
}

// SUBX
OPCODE(0x9180)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 0) & 7);
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src - ((flag_X >> 8) & 1);
	flag_NotZ |= res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
RET(8)
}

// SUBXM
OPCODE(0x9108)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	adr = AREG((Opcode >> 9) & 7) - 1;
	AREG((Opcode >> 9) & 7) = adr;
	READ_BYTE_F(adr, dst)
	res = dst - src - ((flag_X >> 8) & 1);
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ |= res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// SUBXM
OPCODE(0x9148)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	adr = AREG((Opcode >> 9) & 7) - 2;
	AREG((Opcode >> 9) & 7) = adr;
	READ_WORD_F(adr, dst)
	res = dst - src - ((flag_X >> 8) & 1);
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ |= res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// SUBXM
OPCODE(0x9188)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, src)
	adr = AREG((Opcode >> 9) & 7) - 4;
	AREG((Opcode >> 9) & 7) = adr;
	READ_LONG_F(adr, dst)
	res = dst - src - ((flag_X >> 8) & 1);
	flag_NotZ |= res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// SUBX7M
OPCODE(0x910F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	adr = AREG((Opcode >> 9) & 7) - 1;
	AREG((Opcode >> 9) & 7) = adr;
	READ_BYTE_F(adr, dst)
	res = dst - src - ((flag_X >> 8) & 1);
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ |= res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// SUBX7M
OPCODE(0x914F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	adr = AREG((Opcode >> 9) & 7) - 2;
	AREG((Opcode >> 9) & 7) = adr;
	READ_WORD_F(adr, dst)
	res = dst - src - ((flag_X >> 8) & 1);
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ |= res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// SUBX7M
OPCODE(0x918F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, src)
	adr = AREG((Opcode >> 9) & 7) - 4;
	AREG((Opcode >> 9) & 7) = adr;
	READ_LONG_F(adr, dst)
	res = dst - src - ((flag_X >> 8) & 1);
	flag_NotZ |= res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// SUBXM7
OPCODE(0x9F08)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	adr = AREG(7) - 2;
	AREG(7) = adr;
	READ_BYTE_F(adr, dst)
	res = dst - src - ((flag_X >> 8) & 1);
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ |= res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// SUBXM7
OPCODE(0x9F48)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	adr = AREG(7) - 2;
	AREG(7) = adr;
	READ_WORD_F(adr, dst)
	res = dst - src - ((flag_X >> 8) & 1);
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ |= res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// SUBXM7
OPCODE(0x9F88)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, src)
	adr = AREG(7) - 4;
	AREG(7) = adr;
	READ_LONG_F(adr, dst)
	res = dst - src - ((flag_X >> 8) & 1);
	flag_NotZ |= res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// SUBX7M7
OPCODE(0x9F0F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	adr = AREG(7) - 2;
	AREG(7) = adr;
	READ_BYTE_F(adr, dst)
	res = dst - src - ((flag_X >> 8) & 1);
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ |= res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// SUBX7M7
OPCODE(0x9F4F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	adr = AREG(7) - 2;
	AREG(7) = adr;
	READ_WORD_F(adr, dst)
	res = dst - src - ((flag_X >> 8) & 1);
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ |= res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// SUBX7M7
OPCODE(0x9F8F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, src)
	adr = AREG(7) - 4;
	AREG(7) = adr;
	READ_LONG_F(adr, dst)
	res = dst - src - ((flag_X >> 8) & 1);
	flag_NotZ |= res;
	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// SUBA
OPCODE(0x90C0)
{
	u32 adr, res;
	u32 src, dst;

	src = (s32)DREGs16((Opcode >> 0) & 7);
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
RET(8)
}

// SUBA
OPCODE(0x90C8)
{
	u32 adr, res;
	u32 src, dst;

	src = (s32)AREGs16((Opcode >> 0) & 7);
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
RET(8)
}

// SUBA
OPCODE(0x90D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(12)
#else
RET(10)
#endif
}

// SUBA
OPCODE(0x90D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(12)
#else
RET(10)
#endif
}

// SUBA
OPCODE(0x90E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(14)
#else
RET(12)
#endif
}

// SUBA
OPCODE(0x90E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
RET(14)
#endif
}

// SUBA
OPCODE(0x90F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(18)
#else
RET(16)
#endif
}

// SUBA
OPCODE(0x90F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
RET(14)
#endif
}

// SUBA
OPCODE(0x90F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(20)
#else
RET(18)
#endif
}

// SUBA
OPCODE(0x90FA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
RET(14)
#endif
}

// SUBA
OPCODE(0x90FB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(18)
#else
RET(16)
#endif
}

// SUBA
OPCODE(0x90FC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(src);
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
RET(12)
}

// SUBA
OPCODE(0x90DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(12)
#else
RET(10)
#endif
}

// SUBA
OPCODE(0x90E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(14)
#else
RET(12)
#endif
}

// SUBA
OPCODE(0x91C0)
{
	u32 adr, res;
	u32 src, dst;

	src = (s32)DREGs32((Opcode >> 0) & 7);
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
#ifdef USE_CYCLONE_TIMING
RET(8)
#else
RET(6)
#endif
}

// SUBA
OPCODE(0x91C8)
{
	u32 adr, res;
	u32 src, dst;

	src = (s32)AREGs32((Opcode >> 0) & 7);
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
#ifdef USE_CYCLONE_TIMING
RET(8)
#else
RET(6)
#endif
}

// SUBA
OPCODE(0x91D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// SUBA
OPCODE(0x91D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// SUBA
OPCODE(0x91E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// SUBA
OPCODE(0x91E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(18)
}

// SUBA
OPCODE(0x91F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(20)
}

// SUBA
OPCODE(0x91F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(18)
}

// SUBA
OPCODE(0x91F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(22)
}

// SUBA
OPCODE(0x91FA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(18)
}

// SUBA
OPCODE(0x91FB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(20)
}

// SUBA
OPCODE(0x91FC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
RET(14)
#endif
}

// SUBA
OPCODE(0x91DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// SUBA
OPCODE(0x91E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// CMP
OPCODE(0xB000)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 0) & 7);
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
RET(4)
}

// CMP
#if 0
OPCODE(0xB008)
{
	u32 adr, res;
	u32 src, dst;

	// can't read byte from Ax registers !
	ctx->execinfo |= M68K_FAULTED;
	ctx->io_cycle_counter = 0;
/*
	goto famec_Exec_End;
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
*/
RET(4)
}
#endif

// CMP
OPCODE(0xB010)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	POST_IO
RET(8)
}

// CMP
OPCODE(0xB018)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	POST_IO
RET(8)
}

// CMP
OPCODE(0xB020)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	POST_IO
RET(10)
}

// CMP
OPCODE(0xB028)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	POST_IO
RET(12)
}

// CMP
OPCODE(0xB030)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	POST_IO
RET(14)
}

// CMP
OPCODE(0xB038)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	POST_IO
RET(12)
}

// CMP
OPCODE(0xB039)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	POST_IO
RET(16)
}

// CMP
OPCODE(0xB03A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	POST_IO
RET(12)
}

// CMP
OPCODE(0xB03B)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	POST_IO
RET(14)
}

// CMP
OPCODE(0xB03C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
RET(8)
}

// CMP
OPCODE(0xB01F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	POST_IO
RET(8)
}

// CMP
OPCODE(0xB027)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	POST_IO
RET(10)
}

// CMP
OPCODE(0xB040)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 0) & 7);
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
RET(4)
}

// CMP
OPCODE(0xB048)
{
	u32 adr, res;
	u32 src, dst;

	src = AREGu16((Opcode >> 0) & 7);
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
RET(4)
}

// CMP
OPCODE(0xB050)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	POST_IO
RET(8)
}

// CMP
OPCODE(0xB058)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	POST_IO
RET(8)
}

// CMP
OPCODE(0xB060)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	POST_IO
RET(10)
}

// CMP
OPCODE(0xB068)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	POST_IO
RET(12)
}

// CMP
OPCODE(0xB070)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	POST_IO
RET(14)
}

// CMP
OPCODE(0xB078)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	POST_IO
RET(12)
}

// CMP
OPCODE(0xB079)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	POST_IO
RET(16)
}

// CMP
OPCODE(0xB07A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	POST_IO
RET(12)
}

// CMP
OPCODE(0xB07B)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	POST_IO
RET(14)
}

// CMP
OPCODE(0xB07C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
RET(8)
}

// CMP
OPCODE(0xB05F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	POST_IO
RET(8)
}

// CMP
OPCODE(0xB067)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	POST_IO
RET(10)
}

// CMP
OPCODE(0xB080)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 0) & 7);
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
RET(6)
}

// CMP
OPCODE(0xB088)
{
	u32 adr, res;
	u32 src, dst;

	src = AREGu32((Opcode >> 0) & 7);
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
RET(6)
}

// CMP
OPCODE(0xB090)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(14)
}

// CMP
OPCODE(0xB098)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(14)
}

// CMP
OPCODE(0xB0A0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(16)
}

// CMP
OPCODE(0xB0A8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(18)
}

// CMP
OPCODE(0xB0B0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(20)
}

// CMP
OPCODE(0xB0B8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(18)
}

// CMP
OPCODE(0xB0B9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(22)
}

// CMP
OPCODE(0xB0BA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(18)
}

// CMP
OPCODE(0xB0BB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(20)
}

// CMP
OPCODE(0xB0BC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
RET(14)
}

// CMP
OPCODE(0xB09F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(14)
}

// CMP
OPCODE(0xB0A7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(16)
}

// CMPM
OPCODE(0xB108)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, src)
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 1;
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	POST_IO
RET(12)
}

// CMPM
OPCODE(0xB148)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 2;
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	POST_IO
RET(12)
}

// CMPM
OPCODE(0xB188)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, src)
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 4;
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(20)
}

// CMP7M
OPCODE(0xB10F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, src)
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 1;
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	POST_IO
RET(12)
}

// CMP7M
OPCODE(0xB14F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 2;
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	POST_IO
RET(12)
}

// CMP7M
OPCODE(0xB18F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, src)
	adr = AREG((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) += 4;
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(20)
}

// CMPM7
OPCODE(0xBF08)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, src)
	adr = AREG(7);
	AREG(7) += 2;
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	POST_IO
RET(12)
}

// CMPM7
OPCODE(0xBF48)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	adr = AREG(7);
	AREG(7) += 2;
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	POST_IO
RET(12)
}

// CMPM7
OPCODE(0xBF88)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, src)
	adr = AREG(7);
	AREG(7) += 4;
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(20)
}

// CMP7M7
OPCODE(0xBF0F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, src)
	adr = AREG(7);
	AREG(7) += 2;
	READ_BYTE_F(adr, dst)
	res = dst - src;
	flag_N = flag_C = res;
	flag_V = (src ^ dst) & (res ^ dst);
	flag_NotZ = res & 0xFF;
	POST_IO
RET(12)
}

// CMP7M7
OPCODE(0xBF4F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	adr = AREG(7);
	AREG(7) += 2;
	READ_WORD_F(adr, dst)
	res = dst - src;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
	flag_N = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	POST_IO
RET(12)
}

// CMP7M7
OPCODE(0xBF8F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, src)
	adr = AREG(7);
	AREG(7) += 4;
	READ_LONG_F(adr, dst)
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(20)
}

// EORDa
OPCODE(0xB100)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	res = DREGu8((Opcode >> 0) & 7);
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 0) & 7) = res;
RET(4)
}

// EORDa
OPCODE(0xB110)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// EORDa
OPCODE(0xB118)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// EORDa
OPCODE(0xB120)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// EORDa
OPCODE(0xB128)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// EORDa
OPCODE(0xB130)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// EORDa
OPCODE(0xB138)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// EORDa
OPCODE(0xB139)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// EORDa
OPCODE(0xB11F)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// EORDa
OPCODE(0xB127)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// EORDa
OPCODE(0xB140)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	res = DREGu16((Opcode >> 0) & 7);
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 0) & 7) = res;
RET(4)
}

// EORDa
OPCODE(0xB150)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// EORDa
OPCODE(0xB158)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// EORDa
OPCODE(0xB160)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// EORDa
OPCODE(0xB168)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// EORDa
OPCODE(0xB170)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// EORDa
OPCODE(0xB178)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// EORDa
OPCODE(0xB179)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// EORDa
OPCODE(0xB15F)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// EORDa
OPCODE(0xB167)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// EORDa
OPCODE(0xB180)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	res = DREGu32((Opcode >> 0) & 7);
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 0) & 7) = res;
RET(8)
}

// EORDa
OPCODE(0xB190)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// EORDa
OPCODE(0xB198)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// EORDa
OPCODE(0xB1A0)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// EORDa
OPCODE(0xB1A8)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// EORDa
OPCODE(0xB1B0)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// EORDa
OPCODE(0xB1B8)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// EORDa
OPCODE(0xB1B9)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// EORDa
OPCODE(0xB19F)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// EORDa
OPCODE(0xB1A7)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	res ^= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// CMPA
OPCODE(0xB0C0)
{
	u32 adr, res;
	u32 src, dst;

	src = (s32)DREGs16((Opcode >> 0) & 7);
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
RET(6)
}

// CMPA
OPCODE(0xB0C8)
{
	u32 adr, res;
	u32 src, dst;

	src = (s32)AREGs16((Opcode >> 0) & 7);
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
RET(6)
}

// CMPA
OPCODE(0xB0D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(10)
}

// CMPA
OPCODE(0xB0D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(10)
}

// CMPA
OPCODE(0xB0E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(12)
}

// CMPA
OPCODE(0xB0E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(14)
}

// CMPA
OPCODE(0xB0F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(16)
}

// CMPA
OPCODE(0xB0F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(14)
}

// CMPA
OPCODE(0xB0F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(18)
}

// CMPA
OPCODE(0xB0FA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(14)
}

// CMPA
OPCODE(0xB0FB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(16)
}

// CMPA
OPCODE(0xB0FC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(src);
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
RET(10)
}

// CMPA
OPCODE(0xB0DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(10)
}

// CMPA
OPCODE(0xB0E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(12)
}

// CMPA
OPCODE(0xB1C0)
{
	u32 adr, res;
	u32 src, dst;

	src = (s32)DREGs32((Opcode >> 0) & 7);
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
RET(6)
}

// CMPA
OPCODE(0xB1C8)
{
	u32 adr, res;
	u32 src, dst;

	src = (s32)AREGs32((Opcode >> 0) & 7);
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
RET(6)
}

// CMPA
OPCODE(0xB1D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(14)
}

// CMPA
OPCODE(0xB1D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(14)
}

// CMPA
OPCODE(0xB1E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(16)
}

// CMPA
OPCODE(0xB1E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(18)
}

// CMPA
OPCODE(0xB1F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(20)
}

// CMPA
OPCODE(0xB1F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(18)
}

// CMPA
OPCODE(0xB1F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(22)
}

// CMPA
OPCODE(0xB1FA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(18)
}

// CMPA
OPCODE(0xB1FB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(20)
}

// CMPA
OPCODE(0xB1FC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
RET(14)
}

// CMPA
OPCODE(0xB1DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(14)
}

// CMPA
OPCODE(0xB1E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst - src;
	flag_NotZ = res;
	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
	flag_N = res >> 24;
	POST_IO
RET(16)
}

// ANDaD
OPCODE(0xC000)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 0) & 7);
	res = DREGu8((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
RET(4)
}

// ANDaD
OPCODE(0xC010)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, src)
	res = DREGu8((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// ANDaD
OPCODE(0xC018)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, src)
	res = DREGu8((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// ANDaD
OPCODE(0xC020)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	res = DREGu8((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(10)
}

// ANDaD
OPCODE(0xC028)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, src)
	res = DREGu8((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// ANDaD
OPCODE(0xC030)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, src)
	res = DREGu8((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// ANDaD
OPCODE(0xC038)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, src)
	res = DREGu8((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// ANDaD
OPCODE(0xC039)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, src)
	res = DREGu8((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// ANDaD
OPCODE(0xC03A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_BYTE_F(adr, src)
	res = DREGu8((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// ANDaD
OPCODE(0xC03B)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, src)
	res = DREGu8((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// ANDaD
OPCODE(0xC03C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	res = DREGu8((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
RET(8)
}

// ANDaD
OPCODE(0xC01F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, src)
	res = DREGu8((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// ANDaD
OPCODE(0xC027)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	res = DREGu8((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(10)
}

// ANDaD
OPCODE(0xC040)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 0) & 7);
	res = DREGu16((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
RET(4)
}

// ANDaD
OPCODE(0xC050)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// ANDaD
OPCODE(0xC058)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// ANDaD
OPCODE(0xC060)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(10)
}

// ANDaD
OPCODE(0xC068)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// ANDaD
OPCODE(0xC070)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// ANDaD
OPCODE(0xC078)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// ANDaD
OPCODE(0xC079)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// ANDaD
OPCODE(0xC07A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// ANDaD
OPCODE(0xC07B)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// ANDaD
OPCODE(0xC07C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	res = DREGu16((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
RET(8)
}

// ANDaD
OPCODE(0xC05F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// ANDaD
OPCODE(0xC067)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(10)
}

// ANDaD
OPCODE(0xC080)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 0) & 7);
	res = DREGu32((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
RET(8)
}

// ANDaD
OPCODE(0xC090)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, src)
	res = DREGu32((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// ANDaD
OPCODE(0xC098)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, src)
	res = DREGu32((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// ANDaD
OPCODE(0xC0A0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, src)
	res = DREGu32((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// ANDaD
OPCODE(0xC0A8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, src)
	res = DREGu32((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(18)
}

// ANDaD
OPCODE(0xC0B0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, src)
	res = DREGu32((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(20)
}

// ANDaD
OPCODE(0xC0B8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, src)
	res = DREGu32((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(18)
}

// ANDaD
OPCODE(0xC0B9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, src)
	res = DREGu32((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(22)
}

// ANDaD
OPCODE(0xC0BA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_LONG_F(adr, src)
	res = DREGu32((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(18)
}

// ANDaD
OPCODE(0xC0BB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, src)
	res = DREGu32((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(20)
}

// ANDaD
OPCODE(0xC0BC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	res = DREGu32((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
RET(16)
}

// ANDaD
OPCODE(0xC09F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, src)
	res = DREGu32((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// ANDaD
OPCODE(0xC0A7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, src)
	res = DREGu32((Opcode >> 9) & 7);
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// ANDDa
OPCODE(0xC110)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// ANDDa
OPCODE(0xC118)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// ANDDa
OPCODE(0xC120)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// ANDDa
OPCODE(0xC128)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// ANDDa
OPCODE(0xC130)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// ANDDa
OPCODE(0xC138)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// ANDDa
OPCODE(0xC139)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// ANDDa
OPCODE(0xC11F)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// ANDDa
OPCODE(0xC127)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// ANDDa
OPCODE(0xC150)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ANDDa
OPCODE(0xC158)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ANDDa
OPCODE(0xC160)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// ANDDa
OPCODE(0xC168)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ANDDa
OPCODE(0xC170)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// ANDDa
OPCODE(0xC178)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ANDDa
OPCODE(0xC179)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// ANDDa
OPCODE(0xC15F)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ANDDa
OPCODE(0xC167)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 8;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// ANDDa
OPCODE(0xC190)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// ANDDa
OPCODE(0xC198)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// ANDDa
OPCODE(0xC1A0)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// ANDDa
OPCODE(0xC1A8)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// ANDDa
OPCODE(0xC1B0)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// ANDDa
OPCODE(0xC1B8)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// ANDDa
OPCODE(0xC1B9)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// ANDDa
OPCODE(0xC19F)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// ANDDa
OPCODE(0xC1A7)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, res)
	res &= src;
	flag_C = 0;
	flag_V = 0;
	flag_NotZ = res;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// ABCD
OPCODE(0xC100)
{
	u32 adr, res;
	u32 src, dst;
	u32 corf = 0;

	src = DREGu8((Opcode >> 0) & 7);
	dst = DREGu8((Opcode >> 9) & 7);
	res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
	if (res > 9) corf = 6;
	res += (dst & 0xF0) + (src & 0xF0);
	flag_V = ~res;
	res += corf;
	if (res > 0x9F)
	{
		res -= 0xA0;
		flag_X = flag_C = M68K_SR_C;
	}
	else flag_X = flag_C = 0;
	flag_V &= res;
	flag_NotZ |= res & 0xFF;
	flag_N = res;
	DREGu8((Opcode >> 9) & 7) = res;
RET(6)
}

// ABCDM
OPCODE(0xC108)
{
	u32 adr, res;
	u32 src, dst;
	u32 corf = 0;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	adr = AREG((Opcode >> 9) & 7) - 1;
	AREG((Opcode >> 9) & 7) = adr;
	READ_BYTE_F(adr, dst)
	res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
	if (res > 9) corf = 6;
	res += (dst & 0xF0) + (src & 0xF0);
	flag_V = ~res;
	res += corf;
	if (res > 0x9F)
	{
		res -= 0xA0;
		flag_X = flag_C = M68K_SR_C;
	}
	else flag_X = flag_C = 0;
	flag_V &= res;
	flag_NotZ |= res & 0xFF;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// ABCD7M
OPCODE(0xC10F)
{
	u32 adr, res;
	u32 src, dst;
	u32 corf = 0;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	adr = AREG((Opcode >> 9) & 7) - 1;
	AREG((Opcode >> 9) & 7) = adr;
	READ_BYTE_F(adr, dst)
	res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
	if (res > 9) corf = 6;
	res += (dst & 0xF0) + (src & 0xF0);
	flag_V = ~res;
	res += corf;
	if (res > 0x9F)
	{
		res -= 0xA0;
		flag_X = flag_C = M68K_SR_C;
	}
	else flag_X = flag_C = 0;
	flag_V &= res;
	flag_NotZ |= res & 0xFF;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// ABCDM7
OPCODE(0xCF08)
{
	u32 adr, res;
	u32 src, dst;
	u32 corf = 0;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	adr = AREG(7) - 2;
	AREG(7) = adr;
	READ_BYTE_F(adr, dst)
	res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
	if (res > 9) corf = 6;
	res += (dst & 0xF0) + (src & 0xF0);
	flag_V = ~res;
	res += corf;
	if (res > 0x9F)
	{
		res -= 0xA0;
		flag_X = flag_C = M68K_SR_C;
	}
	else flag_X = flag_C = 0;
	flag_V &= res;
	flag_NotZ |= res & 0xFF;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// ABCD7M7
OPCODE(0xCF0F)
{
	u32 adr, res;
	u32 src, dst;
	u32 corf = 0;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	adr = AREG(7) - 2;
	AREG(7) = adr;
	READ_BYTE_F(adr, dst)
	res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
	if (res > 9) corf = 6;
	res += (dst & 0xF0) + (src & 0xF0);
	flag_V = ~res;
	res += corf;
	if (res > 0x9F)
	{
		res -= 0xA0;
		flag_X = flag_C = M68K_SR_C;
	}
	else flag_X = flag_C = 0;
	flag_V &= res;
	flag_NotZ |= res & 0xFF;
	flag_N = res;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// MULU
OPCODE(0xC0C0)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 0) & 7);
	res = DREGu16((Opcode >> 9) & 7);
	res *= src;
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
#ifdef USE_CYCLONE_TIMING
RET(54)
#else
RET(50)
#endif
}

// MULU
OPCODE(0xC0D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res *= src;
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(58)
#else
RET(54)
#endif
}

// MULU
OPCODE(0xC0D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res *= src;
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(58)
#else
RET(54)
#endif
}

// MULU
OPCODE(0xC0E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res *= src;
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(60)
#else
RET(56)
#endif
}

// MULU
OPCODE(0xC0E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res *= src;
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(62)
#else
RET(58)
#endif
}

// MULU
OPCODE(0xC0F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res *= src;
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(64)
#else
RET(60)
#endif
}

// MULU
OPCODE(0xC0F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res *= src;
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(62)
#else
RET(58)
#endif
}

// MULU
OPCODE(0xC0F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res *= src;
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(66)
#else
RET(62)
#endif
}

// MULU
OPCODE(0xC0FA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res *= src;
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(62)
#else
RET(58)
#endif
}

// MULU
OPCODE(0xC0FB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res *= src;
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(64)
#else
RET(60)
#endif
}

// MULU
OPCODE(0xC0FC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	res = DREGu16((Opcode >> 9) & 7);
	res *= src;
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
#ifdef USE_CYCLONE_TIMING
RET(58)
#else
RET(54)
#endif
}

// MULU
OPCODE(0xC0DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res *= src;
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(58)
#else
RET(54)
#endif
}

// MULU
OPCODE(0xC0E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	res = DREGu16((Opcode >> 9) & 7);
	res *= src;
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(60)
#else
RET(56)
#endif
}

// MULS
OPCODE(0xC1C0)
{
	u32 adr, res;
	u32 src, dst;

	src = (s32)DREGs16((Opcode >> 0) & 7);
	res = (s32)DREGs16((Opcode >> 9) & 7);
	res = ((s32)res) * ((s32)src);
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
#ifdef USE_CYCLONE_TIMING
RET(54)
#else
RET(50)
#endif
}

// MULS
OPCODE(0xC1D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READSX_WORD_F(adr, src)
	res = (s32)DREGs16((Opcode >> 9) & 7);
	res = ((s32)res) * ((s32)src);
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(58)
#else
RET(54)
#endif
}

// MULS
OPCODE(0xC1D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READSX_WORD_F(adr, src)
	res = (s32)DREGs16((Opcode >> 9) & 7);
	res = ((s32)res) * ((s32)src);
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(58)
#else
RET(54)
#endif
}

// MULS
OPCODE(0xC1E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READSX_WORD_F(adr, src)
	res = (s32)DREGs16((Opcode >> 9) & 7);
	res = ((s32)res) * ((s32)src);
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(60)
#else
RET(56)
#endif
}

// MULS
OPCODE(0xC1E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READSX_WORD_F(adr, src)
	res = (s32)DREGs16((Opcode >> 9) & 7);
	res = ((s32)res) * ((s32)src);
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(62)
#else
RET(58)
#endif
}

// MULS
OPCODE(0xC1F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READSX_WORD_F(adr, src)
	res = (s32)DREGs16((Opcode >> 9) & 7);
	res = ((s32)res) * ((s32)src);
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(64)
#else
RET(60)
#endif
}

// MULS
OPCODE(0xC1F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READSX_WORD_F(adr, src)
	res = (s32)DREGs16((Opcode >> 9) & 7);
	res = ((s32)res) * ((s32)src);
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(62)
#else
RET(58)
#endif
}

// MULS
OPCODE(0xC1F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READSX_WORD_F(adr, src)
	res = (s32)DREGs16((Opcode >> 9) & 7);
	res = ((s32)res) * ((s32)src);
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(66)
#else
RET(62)
#endif
}

// MULS
OPCODE(0xC1FA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READSX_WORD_F(adr, src)
	res = (s32)DREGs16((Opcode >> 9) & 7);
	res = ((s32)res) * ((s32)src);
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(62)
#else
RET(58)
#endif
}

// MULS
OPCODE(0xC1FB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READSX_WORD_F(adr, src)
	res = (s32)DREGs16((Opcode >> 9) & 7);
	res = ((s32)res) * ((s32)src);
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(64)
#else
RET(60)
#endif
}

// MULS
OPCODE(0xC1FC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(src);
	res = (s32)DREGs16((Opcode >> 9) & 7);
	res = ((s32)res) * ((s32)src);
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
#ifdef USE_CYCLONE_TIMING
RET(58)
#else
RET(54)
#endif
}

// MULS
OPCODE(0xC1DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READSX_WORD_F(adr, src)
	res = (s32)DREGs16((Opcode >> 9) & 7);
	res = ((s32)res) * ((s32)src);
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(58)
#else
RET(54)
#endif
}

// MULS
OPCODE(0xC1E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READSX_WORD_F(adr, src)
	res = (s32)DREGs16((Opcode >> 9) & 7);
	res = ((s32)res) * ((s32)src);
	flag_N = res >> 24;
	flag_NotZ = res;
	flag_V = flag_C = 0;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(60)
#else
RET(56)
#endif
}

// EXGDD
OPCODE(0xC140)
{
	u32 adr, res;
	u32 src, dst;

	res = DREGu32((Opcode >> 0) & 7);
	src = DREGu32((Opcode >> 9) & 7);
	DREGu32((Opcode >> 9) & 7) = res;
	res = src;
	DREGu32((Opcode >> 0) & 7) = res;
RET(6)
}

// EXGAA
OPCODE(0xC148)
{
	u32 adr, res;
	u32 src, dst;

	res = AREGu32((Opcode >> 0) & 7);
	src = AREGu32((Opcode >> 9) & 7);
	AREG((Opcode >> 9) & 7) = res;
	res = src;
	AREG((Opcode >> 0) & 7) = res;
RET(6)
}

// EXGAD
OPCODE(0xC188)
{
	u32 adr, res;
	u32 src, dst;

	res = AREGu32((Opcode >> 0) & 7);
	src = DREGu32((Opcode >> 9) & 7);
	DREGu32((Opcode >> 9) & 7) = res;
	res = src;
	AREG((Opcode >> 0) & 7) = res;
RET(6)
}

// ADDaD
OPCODE(0xD000)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 0) & 7);
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
RET(4)
}

// ADDaD
#if 0
OPCODE(0xD008)
{
	u32 adr, res;
	u32 src, dst;

	// can't read byte from Ax registers !
	ctx->execinfo |= M68K_FAULTED;
	ctx->io_cycle_counter = 0;
/*
	goto famec_Exec_End;
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
*/
RET(4)
}
#endif

// ADDaD
OPCODE(0xD010)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// ADDaD
OPCODE(0xD018)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// ADDaD
OPCODE(0xD020)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(10)
}

// ADDaD
OPCODE(0xD028)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// ADDaD
OPCODE(0xD030)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// ADDaD
OPCODE(0xD038)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// ADDaD
OPCODE(0xD039)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// ADDaD
OPCODE(0xD03A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// ADDaD
OPCODE(0xD03B)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// ADDaD
OPCODE(0xD03C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_BYTE(src);
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
RET(8)
}

// ADDaD
OPCODE(0xD01F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// ADDaD
OPCODE(0xD027)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
	POST_IO
RET(10)
}

// ADDaD
OPCODE(0xD040)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 0) & 7);
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
RET(4)
}

// ADDaD
OPCODE(0xD048)
{
	u32 adr, res;
	u32 src, dst;

	src = AREGu16((Opcode >> 0) & 7);
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
RET(4)
}

// ADDaD
OPCODE(0xD050)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// ADDaD
OPCODE(0xD058)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// ADDaD
OPCODE(0xD060)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(10)
}

// ADDaD
OPCODE(0xD068)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// ADDaD
OPCODE(0xD070)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// ADDaD
OPCODE(0xD078)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// ADDaD
OPCODE(0xD079)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// ADDaD
OPCODE(0xD07A)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(12)
}

// ADDaD
OPCODE(0xD07B)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// ADDaD
OPCODE(0xD07C)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_WORD(src);
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
RET(8)
}

// ADDaD
OPCODE(0xD05F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(8)
}

// ADDaD
OPCODE(0xD067)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
	POST_IO
RET(10)
}

// ADDaD
OPCODE(0xD080)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 0) & 7);
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
RET(8)
}

// ADDaD
OPCODE(0xD088)
{
	u32 adr, res;
	u32 src, dst;

	src = AREGu32((Opcode >> 0) & 7);
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
RET(8)
}

// ADDaD
OPCODE(0xD090)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// ADDaD
OPCODE(0xD098)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// ADDaD
OPCODE(0xD0A0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// ADDaD
OPCODE(0xD0A8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(18)
}

// ADDaD
OPCODE(0xD0B0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(20)
}

// ADDaD
OPCODE(0xD0B8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(18)
}

// ADDaD
OPCODE(0xD0B9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(22)
}

// ADDaD
OPCODE(0xD0BA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(18)
}

// ADDaD
OPCODE(0xD0BB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(20)
}

// ADDaD
OPCODE(0xD0BC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
RET(16)
}

// ADDaD
OPCODE(0xD09F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// ADDaD
OPCODE(0xD0A7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, src)
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// ADDDa
OPCODE(0xD110)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// ADDDa
OPCODE(0xD118)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 1;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// ADDDa
OPCODE(0xD120)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// ADDDa
OPCODE(0xD128)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// ADDDa
OPCODE(0xD130)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// ADDDa
OPCODE(0xD138)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(16)
}

// ADDDa
OPCODE(0xD139)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	FETCH_LONG(adr);
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(20)
}

// ADDDa
OPCODE(0xD11F)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(12)
}

// ADDDa
OPCODE(0xD127)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 9) & 7);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, dst)
	res = dst + src;
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ = res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(14)
}

// ADDDa
OPCODE(0xD150)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ADDDa
OPCODE(0xD158)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ADDDa
OPCODE(0xD160)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// ADDDa
OPCODE(0xD168)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ADDDa
OPCODE(0xD170)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// ADDDa
OPCODE(0xD178)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ADDDa
OPCODE(0xD179)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// ADDDa
OPCODE(0xD15F)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ADDDa
OPCODE(0xD167)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 9) & 7);
	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, dst)
	res = dst + src;
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ = res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// ADDDa
OPCODE(0xD190)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// ADDDa
OPCODE(0xD198)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// ADDDa
OPCODE(0xD1A0)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// ADDDa
OPCODE(0xD1A8)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// ADDDa
OPCODE(0xD1B0)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(26)
}

// ADDDa
OPCODE(0xD1B8)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	FETCH_SWORD(adr);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(24)
}

// ADDDa
OPCODE(0xD1B9)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	FETCH_LONG(adr);
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(28)
}

// ADDDa
OPCODE(0xD19F)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(20)
}

// ADDDa
OPCODE(0xD1A7)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 9) & 7);
	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, dst)
	res = dst + src;
	flag_NotZ = res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(22)
}

// ADDX
OPCODE(0xD100)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu8((Opcode >> 0) & 7);
	dst = DREGu8((Opcode >> 9) & 7);
	res = dst + src + ((flag_X >> 8) & 1);
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ |= res & 0xFF;
	DREGu8((Opcode >> 9) & 7) = res;
RET(4)
}

// ADDX
OPCODE(0xD140)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu16((Opcode >> 0) & 7);
	dst = DREGu16((Opcode >> 9) & 7);
	res = dst + src + ((flag_X >> 8) & 1);
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ |= res & 0xFFFF;
	DREGu16((Opcode >> 9) & 7) = res;
RET(4)
}

// ADDX
OPCODE(0xD180)
{
	u32 adr, res;
	u32 src, dst;

	src = DREGu32((Opcode >> 0) & 7);
	dst = DREGu32((Opcode >> 9) & 7);
	res = dst + src + ((flag_X >> 8) & 1);
	flag_NotZ |= res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	DREGu32((Opcode >> 9) & 7) = res;
RET(8)
}

// ADDXM
OPCODE(0xD108)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	adr = AREG((Opcode >> 9) & 7) - 1;
	AREG((Opcode >> 9) & 7) = adr;
	READ_BYTE_F(adr, dst)
	res = dst + src + ((flag_X >> 8) & 1);
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ |= res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// ADDXM
OPCODE(0xD148)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	adr = AREG((Opcode >> 9) & 7) - 2;
	AREG((Opcode >> 9) & 7) = adr;
	READ_WORD_F(adr, dst)
	res = dst + src + ((flag_X >> 8) & 1);
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ |= res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// ADDXM
OPCODE(0xD188)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, src)
	adr = AREG((Opcode >> 9) & 7) - 4;
	AREG((Opcode >> 9) & 7) = adr;
	READ_LONG_F(adr, dst)
	res = dst + src + ((flag_X >> 8) & 1);
	flag_NotZ |= res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// ADDX7M
OPCODE(0xD10F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	adr = AREG((Opcode >> 9) & 7) - 1;
	AREG((Opcode >> 9) & 7) = adr;
	READ_BYTE_F(adr, dst)
	res = dst + src + ((flag_X >> 8) & 1);
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ |= res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// ADDX7M
OPCODE(0xD14F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	adr = AREG((Opcode >> 9) & 7) - 2;
	AREG((Opcode >> 9) & 7) = adr;
	READ_WORD_F(adr, dst)
	res = dst + src + ((flag_X >> 8) & 1);
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ |= res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// ADDX7M
OPCODE(0xD18F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, src)
	adr = AREG((Opcode >> 9) & 7) - 4;
	AREG((Opcode >> 9) & 7) = adr;
	READ_LONG_F(adr, dst)
	res = dst + src + ((flag_X >> 8) & 1);
	flag_NotZ |= res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// ADDXM7
OPCODE(0xDF08)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 1;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	adr = AREG(7) - 2;
	AREG(7) = adr;
	READ_BYTE_F(adr, dst)
	res = dst + src + ((flag_X >> 8) & 1);
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ |= res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// ADDXM7
OPCODE(0xDF48)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	adr = AREG(7) - 2;
	AREG(7) = adr;
	READ_WORD_F(adr, dst)
	res = dst + src + ((flag_X >> 8) & 1);
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ |= res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// ADDXM7
OPCODE(0xDF88)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_LONG_F(adr, src)
	adr = AREG(7) - 4;
	AREG(7) = adr;
	READ_LONG_F(adr, dst)
	res = dst + src + ((flag_X >> 8) & 1);
	flag_NotZ |= res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// ADDX7M7
OPCODE(0xDF0F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_BYTE_F(adr, src)
	adr = AREG(7) - 2;
	AREG(7) = adr;
	READ_BYTE_F(adr, dst)
	res = dst + src + ((flag_X >> 8) & 1);
	flag_N = flag_X = flag_C = res;
	flag_V = (src ^ res) & (dst ^ res);
	flag_NotZ |= res & 0xFF;
	WRITE_BYTE_F(adr, res)
	POST_IO
RET(18)
}

// ADDX7M7
OPCODE(0xDF4F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	adr = AREG(7) - 2;
	AREG(7) = adr;
	READ_WORD_F(adr, dst)
	res = dst + src + ((flag_X >> 8) & 1);
	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
	flag_N = flag_X = flag_C = res >> 8;
	flag_NotZ |= res & 0xFFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// ADDX7M7
OPCODE(0xDF8F)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READ_LONG_F(adr, src)
	adr = AREG(7) - 4;
	AREG(7) = adr;
	READ_LONG_F(adr, dst)
	res = dst + src + ((flag_X >> 8) & 1);
	flag_NotZ |= res;
	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
	flag_N = res >> 24;
	WRITE_LONG_F(adr, res)
	POST_IO
RET(30)
}

// ADDA
OPCODE(0xD0C0)
{
	u32 adr, res;
	u32 src, dst;

	src = (s32)DREGs16((Opcode >> 0) & 7);
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
RET(8)
}

// ADDA
OPCODE(0xD0C8)
{
	u32 adr, res;
	u32 src, dst;

	src = (s32)AREGs16((Opcode >> 0) & 7);
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
RET(8)
}

// ADDA
OPCODE(0xD0D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(12)
#else
RET(10)
#endif
}

// ADDA
OPCODE(0xD0D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(12)
#else
RET(10)
#endif
}

// ADDA
OPCODE(0xD0E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(14)
#else
RET(12)
#endif
}

// ADDA
OPCODE(0xD0E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
RET(14)
#endif
}

// ADDA
OPCODE(0xD0F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(18)
#else
RET(16)
#endif
}

// ADDA
OPCODE(0xD0F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
RET(14)
#endif
}

// ADDA
OPCODE(0xD0F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(20)
#else
RET(18)
#endif
}

// ADDA
OPCODE(0xD0FA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
RET(14)
#endif
}

// ADDA
OPCODE(0xD0FB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(18)
#else
RET(16)
#endif
}

// ADDA
OPCODE(0xD0FC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(src);
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
RET(12)
}

// ADDA
OPCODE(0xD0DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(12)
#else
RET(10)
#endif
}

// ADDA
OPCODE(0xD0E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READSX_WORD_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
#ifdef USE_CYCLONE_TIMING
RET(14)
#else
RET(12)
#endif
}

// ADDA
OPCODE(0xD1C0)
{
	u32 adr, res;
	u32 src, dst;

	src = (s32)DREGs32((Opcode >> 0) & 7);
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
#ifdef USE_CYCLONE_TIMING
RET(8)
#else
RET(6)
#endif
}

// ADDA
OPCODE(0xD1C8)
{
	u32 adr, res;
	u32 src, dst;

	src = (s32)AREGs32((Opcode >> 0) & 7);
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
#ifdef USE_CYCLONE_TIMING
RET(8)
#else
RET(6)
#endif
}

// ADDA
OPCODE(0xD1D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// ADDA
OPCODE(0xD1D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 4;
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// ADDA
OPCODE(0xD1E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 4;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// ADDA
OPCODE(0xD1E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(18)
}

// ADDA
OPCODE(0xD1F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(20)
}

// ADDA
OPCODE(0xD1F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(18)
}

// ADDA
OPCODE(0xD1F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(22)
}

// ADDA
OPCODE(0xD1FA)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_SWORD + GET_PC;
	PC++;
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(18)
}

// ADDA
OPCODE(0xD1FB)
{
	u32 adr, res;
	u32 src, dst;

	adr = GET_PC;
	DECODE_EXT_WORD
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(20)
}

// ADDA
OPCODE(0xD1FC)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(src);
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
#ifdef USE_CYCLONE_TIMING
RET(16)
#else
RET(14)
#endif
}

// ADDA
OPCODE(0xD1DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 4;
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(14)
}

// ADDA
OPCODE(0xD1E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 4;
	AREG(7) = adr;
	PRE_IO
	READSX_LONG_F(adr, src)
	dst = AREGu32((Opcode >> 9) & 7);
	res = dst + src;
	AREG((Opcode >> 9) & 7) = res;
	POST_IO
RET(16)
}

// ASRk
OPCODE(0xE000)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = (((Opcode >> 9) - 1) & 7) + 1;
	ctx->io_cycle_counter -= sft * 2;
	src = (s32)DREGs8((Opcode >> 0) & 7);
	flag_V = 0;
	flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
	res = ((s32)src) >> sft;
	flag_N = res >> 0;
	flag_NotZ = res;
	DREGu8((Opcode >> 0) & 7) = res;
RET(6)
}

// ASRk
OPCODE(0xE040)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = (((Opcode >> 9) - 1) & 7) + 1;
	ctx->io_cycle_counter -= sft * 2;
	src = (s32)DREGs16((Opcode >> 0) & 7);
	flag_V = 0;
	flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
	res = ((s32)src) >> sft;
	flag_N = res >> 8;
	flag_NotZ = res;
	DREGu16((Opcode >> 0) & 7) = res;
RET(6)
}

// ASRk
OPCODE(0xE080)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = (((Opcode >> 9) - 1) & 7) + 1;
	ctx->io_cycle_counter -= sft * 2;
	src = (s32)DREGs32((Opcode >> 0) & 7);
	flag_V = 0;
	flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
	res = ((s32)src) >> sft;
	flag_N = res >> 24;
	flag_NotZ = res;
	DREGu32((Opcode >> 0) & 7) = res;
RET(8)
}

// LSRk
OPCODE(0xE008)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = (((Opcode >> 9) - 1) & 7) + 1;
	ctx->io_cycle_counter -= sft * 2;
	src = DREGu8((Opcode >> 0) & 7);
	flag_N = flag_V = 0;
	flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
	res = src >> sft;
	flag_NotZ = res;
	DREGu8((Opcode >> 0) & 7) = res;
RET(6)
}

// LSRk
OPCODE(0xE048)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = (((Opcode >> 9) - 1) & 7) + 1;
	ctx->io_cycle_counter -= sft * 2;
	src = DREGu16((Opcode >> 0) & 7);
	flag_N = flag_V = 0;
	flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
	res = src >> sft;
	flag_NotZ = res;
	DREGu16((Opcode >> 0) & 7) = res;
RET(6)
}

// LSRk
OPCODE(0xE088)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = (((Opcode >> 9) - 1) & 7) + 1;
	ctx->io_cycle_counter -= sft * 2;
	src = DREGu32((Opcode >> 0) & 7);
	flag_N = flag_V = 0;
	flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
	res = src >> sft;
	flag_NotZ = res;
	DREGu32((Opcode >> 0) & 7) = res;
RET(8)
}

// ROXRk
OPCODE(0xE010)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = (((Opcode >> 9) - 1) & 7) + 1;
	ctx->io_cycle_counter -= sft * 2;
	src = DREGu8((Opcode >> 0) & 7);
	src |= (flag_X & M68K_SR_X) << 0;
	res = (src >> sft) | (src << (9 - sft));
	flag_X = flag_C = res >> 0;
	flag_V = 0;
	flag_N = res >> 0;
	flag_NotZ = res & 0x000000FF;
	DREGu8((Opcode >> 0) & 7) = res;
RET(6)
}

// ROXRk
OPCODE(0xE050)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = (((Opcode >> 9) - 1) & 7) + 1;
	ctx->io_cycle_counter -= sft * 2;
	src = DREGu16((Opcode >> 0) & 7);
	src |= (flag_X & M68K_SR_X) << 8;
	res = (src >> sft) | (src << (17 - sft));
	flag_X = flag_C = res >> 8;
	flag_V = 0;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	DREGu16((Opcode >> 0) & 7) = res;
RET(6)
}

// ROXRk
OPCODE(0xE090)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = (((Opcode >> 9) - 1) & 7) + 1;
	ctx->io_cycle_counter -= sft * 2;
	src = DREGu32((Opcode >> 0) & 7);
	flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
	if (sft == 1) res = (src >> 1) | ((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + 1)));
	else res = (src >> sft) | (src << (33 - sft)) | ((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + sft)));
	flag_X = flag_C;
	flag_V = 0;
	flag_N = res >> 24;
	flag_NotZ = res;
	DREGu32((Opcode >> 0) & 7) = res;
RET(8)
}

// RORk
OPCODE(0xE018)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = (((Opcode >> 9) - 1) & 7) + 1;
	ctx->io_cycle_counter -= sft * 2;
	src = DREGu8((Opcode >> 0) & 7);
	flag_V = 0;
	flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
	res = (src >> sft) | (src << (8 - sft));
	flag_N = res >> 0;
	flag_NotZ = res & 0x000000FF;
	DREGu8((Opcode >> 0) & 7) = res;
RET(6)
}

// RORk
OPCODE(0xE058)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = (((Opcode >> 9) - 1) & 7) + 1;
	ctx->io_cycle_counter -= sft * 2;
	src = DREGu16((Opcode >> 0) & 7);
	flag_V = 0;
	flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
	res = (src >> sft) | (src << (16 - sft));
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	DREGu16((Opcode >> 0) & 7) = res;
RET(6)
}

// RORk
OPCODE(0xE098)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = (((Opcode >> 9) - 1) & 7) + 1;
	ctx->io_cycle_counter -= sft * 2;
	src = DREGu32((Opcode >> 0) & 7);
	flag_V = 0;
	flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
	res = (src >> sft) | (src << (32 - sft));
	flag_N = res >> 24;
	flag_NotZ = res;
	DREGu32((Opcode >> 0) & 7) = res;
RET(8)
}

// ASLk
OPCODE(0xE100)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = (((Opcode >> 9) - 1) & 7) + 1;
	ctx->io_cycle_counter -= sft * 2;
	src = DREGu8((Opcode >> 0) & 7);
	if (sft < 8)
	{
		flag_X = flag_C = src << (0 + sft);
		res = src << sft;
		flag_N = res >> 0;
		flag_NotZ = res & 0x000000FF;
	DREGu8((Opcode >> 0) & 7) = res;
		flag_V = 0;
		if ((sft > 7) && (src)) flag_V = M68K_SR_V;
		else
		{
			u32 msk = (((s32)0x80000000) >> (sft + 24)) & 0x000000FF;
			src &= msk;
			if ((src) && (src != msk)) flag_V = M68K_SR_V;
		}
	RET(6)
	}

	if (src) flag_V = M68K_SR_V;
	else flag_V = 0;
	flag_X = flag_C = src << M68K_SR_C_SFT;
	res = 0;
	DREGu8((Opcode >> 0) & 7) = res;
	flag_N = 0;
	flag_NotZ = 0;
RET(6)
}

// ASLk
OPCODE(0xE140)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = (((Opcode >> 9) - 1) & 7) + 1;
	ctx->io_cycle_counter -= sft * 2;
	src = DREGu16((Opcode >> 0) & 7);
		flag_X = flag_C = src >> (8 - sft);
		res = src << sft;
		flag_N = res >> 8;
		flag_NotZ = res & 0x0000FFFF;
	DREGu16((Opcode >> 0) & 7) = res;
		flag_V = 0;
		{
			u32 msk = (((s32)0x80000000) >> (sft + 16)) & 0x0000FFFF;
			src &= msk;
			if ((src) && (src != msk)) flag_V = M68K_SR_V;
		}
RET(6)
}

// ASLk
OPCODE(0xE180)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = (((Opcode >> 9) - 1) & 7) + 1;
	ctx->io_cycle_counter -= sft * 2;
	src = DREGu32((Opcode >> 0) & 7);
		flag_X = flag_C = src >> (24 - sft);
		res = src << sft;
		flag_N = res >> 24;
		flag_NotZ = res & 0xFFFFFFFF;
	DREGu32((Opcode >> 0) & 7) = res;
		flag_V = 0;
		{
			u32 msk = (((s32)0x80000000) >> (sft + 0)) & 0xFFFFFFFF;
			src &= msk;
			if ((src) && (src != msk)) flag_V = M68K_SR_V;
		}
RET(8)
}

// LSLk
OPCODE(0xE108)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = (((Opcode >> 9) - 1) & 7) + 1;
	ctx->io_cycle_counter -= sft * 2;
	src = DREGu8((Opcode >> 0) & 7);
	flag_V = 0;
	flag_X = flag_C = src << (0 + sft);
	res = src << sft;
	flag_N = res >> 0;
	flag_NotZ = res & 0x000000FF;
	DREGu8((Opcode >> 0) & 7) = res;
RET(6)
}

// LSLk
OPCODE(0xE148)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = (((Opcode >> 9) - 1) & 7) + 1;
	ctx->io_cycle_counter -= sft * 2;
	src = DREGu16((Opcode >> 0) & 7);
	flag_V = 0;
	flag_X = flag_C = src >> (8 - sft);
	res = src << sft;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	DREGu16((Opcode >> 0) & 7) = res;
RET(6)
}

// LSLk
OPCODE(0xE188)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = (((Opcode >> 9) - 1) & 7) + 1;
	ctx->io_cycle_counter -= sft * 2;
	src = DREGu32((Opcode >> 0) & 7);
	flag_V = 0;
	flag_X = flag_C = src >> (24 - sft);
	res = src << sft;
	flag_N = res >> 24;
	flag_NotZ = res & 0xFFFFFFFF;
	DREGu32((Opcode >> 0) & 7) = res;
RET(8)
}

// ROXLk
OPCODE(0xE110)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = (((Opcode >> 9) - 1) & 7) + 1;
	ctx->io_cycle_counter -= sft * 2;
	src = DREGu8((Opcode >> 0) & 7);
	src |= (flag_X & M68K_SR_X) << 0;
	res = (src << sft) | (src >> (9 - sft));
	flag_X = flag_C = res >> 0;
	flag_V = 0;
	flag_N = res >> 0;
	flag_NotZ = res & 0x000000FF;
	DREGu8((Opcode >> 0) & 7) = res;
RET(6)
}

// ROXLk
OPCODE(0xE150)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = (((Opcode >> 9) - 1) & 7) + 1;
	ctx->io_cycle_counter -= sft * 2;
	src = DREGu16((Opcode >> 0) & 7);
	src |= (flag_X & M68K_SR_X) << 8;
	res = (src << sft) | (src >> (17 - sft));
	flag_X = flag_C = res >> 8;
	flag_V = 0;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	DREGu16((Opcode >> 0) & 7) = res;
RET(6)
}

// ROXLk
OPCODE(0xE190)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = (((Opcode >> 9) - 1) & 7) + 1;
	ctx->io_cycle_counter -= sft * 2;
	src = DREGu32((Opcode >> 0) & 7);
	flag_C = src >> ((32 - M68K_SR_C_SFT) - sft);
	if (sft == 1) res = (src << 1) | ((flag_X & M68K_SR_X) >> ((M68K_SR_X_SFT + 1) - 1));
	else res = (src << sft) | (src >> (33 - sft)) | ((flag_X & M68K_SR_X) >> ((M68K_SR_X_SFT + 1) - sft));
	flag_X = flag_C;
	flag_V = 0;
	flag_N = res >> 24;
	flag_NotZ = res;
	DREGu32((Opcode >> 0) & 7) = res;
RET(8)
}

// ROLk
OPCODE(0xE118)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = (((Opcode >> 9) - 1) & 7) + 1;
	ctx->io_cycle_counter -= sft * 2;
	src = DREGu8((Opcode >> 0) & 7);
	flag_V = 0;
	flag_C = src << (0 + sft);
	res = (src << sft) | (src >> (8 - sft));
	flag_N = res >> 0;
	flag_NotZ = res & 0x000000FF;
	DREGu8((Opcode >> 0) & 7) = res;
RET(6)
}

// ROLk
OPCODE(0xE158)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = (((Opcode >> 9) - 1) & 7) + 1;
	ctx->io_cycle_counter -= sft * 2;
	src = DREGu16((Opcode >> 0) & 7);
	flag_V = 0;
	flag_C = src >> (8 - sft);
	res = (src << sft) | (src >> (16 - sft));
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	DREGu16((Opcode >> 0) & 7) = res;
RET(6)
}

// ROLk
OPCODE(0xE198)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = (((Opcode >> 9) - 1) & 7) + 1;
	ctx->io_cycle_counter -= sft * 2;
	src = DREGu32((Opcode >> 0) & 7);
	flag_V = 0;
	flag_C = src >> (24 - sft);
	res = (src << sft) | (src >> (32 - sft));
	flag_N = res >> 24;
	flag_NotZ = res;
	DREGu32((Opcode >> 0) & 7) = res;
RET(8)
}

// ASRD
OPCODE(0xE020)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = DREG((Opcode >> 9) & 7) & 0x3F;
	src = (s32)DREGs8((Opcode >> 0) & 7);
	if (sft)
	{
	ctx->io_cycle_counter -= sft * 2;
		if (sft < 8)
		{
			flag_V = 0;
			flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
			res = ((s32)src) >> sft;
			flag_N = res >> 0;
			flag_NotZ = res;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
		}

		if (src & (1 << 7))
		{
			flag_N = M68K_SR_N;
			flag_NotZ = 1;
			flag_V = 0;
			flag_C = M68K_SR_C;
			flag_X = M68K_SR_X;
			res = 0x000000FF;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
		}

		flag_N = 0;
		flag_NotZ = 0;
		flag_V = 0;
		flag_C = 0;
		flag_X = 0;
		res = 0;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
	}

	flag_V = 0;
	flag_C = 0;
	flag_N = src >> 0;
	flag_NotZ = src;
RET(6)
}

// ASRD
OPCODE(0xE060)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = DREG((Opcode >> 9) & 7) & 0x3F;
	src = (s32)DREGs16((Opcode >> 0) & 7);
	if (sft)
	{
	ctx->io_cycle_counter -= sft * 2;
		if (sft < 16)
		{
			flag_V = 0;
			flag_X = flag_C = (src >> (sft - 1)) << M68K_SR_C_SFT;
			res = ((s32)src) >> sft;
			flag_N = res >> 8;
			flag_NotZ = res;
	DREGu16((Opcode >> 0) & 7) = res;
	RET(6)
		}

		if (src & (1 << 15))
		{
			flag_N = M68K_SR_N;
			flag_NotZ = 1;
			flag_V = 0;
			flag_C = M68K_SR_C;
			flag_X = M68K_SR_X;
			res = 0x0000FFFF;
	DREGu16((Opcode >> 0) & 7) = res;
	RET(6)
		}

		flag_N = 0;
		flag_NotZ = 0;
		flag_V = 0;
		flag_C = 0;
		flag_X = 0;
		res = 0;
	DREGu16((Opcode >> 0) & 7) = res;
	RET(6)
	}

	flag_V = 0;
	flag_C = 0;
	flag_N = src >> 8;
	flag_NotZ = src;
RET(6)
}

// ASRD
OPCODE(0xE0A0)
{
#ifdef USE_CYCLONE_TIMING
#define CYC 8
#else
#define CYC 6
#endif
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = DREG((Opcode >> 9) & 7) & 0x3F;
	src = (s32)DREGs32((Opcode >> 0) & 7);
	if (sft)
	{
	ctx->io_cycle_counter -= sft * 2;
		if (sft < 32)
		{
			flag_V = 0;
			flag_X = flag_C = (src >> (sft - 1)) << M68K_SR_C_SFT;
			res = ((s32)src) >> sft;
			flag_N = res >> 24;
			flag_NotZ = res;
	DREGu32((Opcode >> 0) & 7) = res;
	RET(CYC)
		}

		if (src & (1 << 31))
		{
			flag_N = M68K_SR_N;
			flag_NotZ = 1;
			flag_V = 0;
			flag_C = M68K_SR_C;
			flag_X = M68K_SR_X;
			res = 0xFFFFFFFF;
	DREGu32((Opcode >> 0) & 7) = res;
	RET(CYC)
		}

		flag_N = 0;
		flag_NotZ = 0;
		flag_V = 0;
		flag_C = 0;
		flag_X = 0;
		res = 0;
	DREGu32((Opcode >> 0) & 7) = res;
	RET(CYC)
	}

	flag_V = 0;
	flag_C = 0;
	flag_N = src >> 24;
	flag_NotZ = src;
RET(CYC)
#undef CYC
}

// LSRD
OPCODE(0xE028)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = DREG((Opcode >> 9) & 7) & 0x3F;
	src = DREGu8((Opcode >> 0) & 7);
	if (sft)
	{
	ctx->io_cycle_counter -= sft * 2;
		if (sft <= 8)
		{
			flag_N = flag_V = 0;
			flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
			res = src >> sft;
			flag_NotZ = res;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
		}

		flag_X = flag_C = 0;
		flag_N = 0;
		flag_NotZ = 0;
		flag_V = 0;
		res = 0;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
	}

	flag_V = 0;
	flag_C = 0;
	flag_N = src >> 0;
	flag_NotZ = src;
RET(6)
}

// LSRD
OPCODE(0xE068)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = DREG((Opcode >> 9) & 7) & 0x3F;
	src = DREGu16((Opcode >> 0) & 7);
	if (sft)
	{
	ctx->io_cycle_counter -= sft * 2;
		if (sft <= 16)
		{
			flag_N = flag_V = 0;
			flag_X = flag_C = (src >> (sft - 1)) << M68K_SR_C_SFT;
			res = src >> sft;
			flag_NotZ = res;
	DREGu16((Opcode >> 0) & 7) = res;
	RET(6)
		}

		flag_X = flag_C = 0;
		flag_N = 0;
		flag_NotZ = 0;
		flag_V = 0;
		res = 0;
	DREGu16((Opcode >> 0) & 7) = res;
	RET(6)
	}

	flag_V = 0;
	flag_C = 0;
	flag_N = src >> 8;
	flag_NotZ = src;
RET(6)
}

// LSRD
OPCODE(0xE0A8)
{
#ifdef USE_CYCLONE_TIMING
#define CYC 8
#else
#define CYC 6
#endif
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = DREG((Opcode >> 9) & 7) & 0x3F;
	src = DREGu32((Opcode >> 0) & 7);
	if (sft)
	{
	ctx->io_cycle_counter -= sft * 2;
		if (sft < 32)
		{
			flag_N = flag_V = 0;
			flag_X = flag_C = (src >> (sft - 1)) << M68K_SR_C_SFT;
			res = src >> sft;
			flag_NotZ = res;
	DREGu32((Opcode >> 0) & 7) = res;
	RET(CYC)
		}

		if (sft == 32) flag_C = src >> (31 - M68K_SR_C_SFT);
		else flag_C = 0;
		flag_X = flag_C;
		flag_N = 0;
		flag_NotZ = 0;
		flag_V = 0;
		res = 0;
	DREGu32((Opcode >> 0) & 7) = res;
	RET(CYC)
	}

	flag_V = 0;
	flag_C = 0;
	flag_N = src >> 24;
	flag_NotZ = src;
RET(CYC)
#undef CYC
}

// ROXRD
OPCODE(0xE030)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = DREG((Opcode >> 9) & 7) & 0x3F;
	src = DREGu8((Opcode >> 0) & 7);
	if (sft)
	{
	ctx->io_cycle_counter -= sft * 2;
		sft %= 9;

		src |= (flag_X & M68K_SR_X) << 0;
		res = (src >> sft) | (src << (9 - sft));
		flag_X = flag_C = res >> 0;
		flag_V = 0;
		flag_N = res >> 0;
		flag_NotZ = res & 0x000000FF;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
	}

	flag_V = 0;
	flag_C = flag_X;
	flag_N = src >> 0;
	flag_NotZ = src;
RET(6)
}

// ROXRD
OPCODE(0xE070)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = DREG((Opcode >> 9) & 7) & 0x3F;
	src = DREGu16((Opcode >> 0) & 7);
	if (sft)
	{
	ctx->io_cycle_counter -= sft * 2;
		sft %= 17;

		src |= (flag_X & M68K_SR_X) << 8;
		res = (src >> sft) | (src << (17 - sft));
		flag_X = flag_C = res >> 8;
		flag_V = 0;
		flag_N = res >> 8;
		flag_NotZ = res & 0x0000FFFF;
	DREGu16((Opcode >> 0) & 7) = res;
	RET(6)
	}

	flag_V = 0;
	flag_C = flag_X;
	flag_N = src >> 8;
	flag_NotZ = src;
RET(6)
}

// ROXRD
OPCODE(0xE0B0)
{
#ifdef USE_CYCLONE_TIMING
#define CYC 8
#else
#define CYC 6
#endif
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = DREG((Opcode >> 9) & 7) & 0x3F;
	src = DREGu32((Opcode >> 0) & 7);
	if (sft)
	{
	ctx->io_cycle_counter -= sft * 2;
		sft %= 33;

		if (sft != 0)
		{
			if (sft == 1) res = (src >> 1) | ((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + 1)));
			else res = (src >> sft) | (src << (33 - sft)) | (((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + 1))) >> (sft - 1));
			flag_X = (src >> (sft - 1)) << M68K_SR_X_SFT;
		}
		else res = src;
		flag_C = flag_X;
		flag_V = 0;
		flag_N = res >> 24;
		flag_NotZ = res;
	DREGu32((Opcode >> 0) & 7) = res;
	RET(CYC)
	}

	flag_V = 0;
	flag_C = flag_X;
	flag_N = src >> 24;
	flag_NotZ = src;
RET(CYC)
#undef CYC
}

// RORD
OPCODE(0xE038)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = DREG((Opcode >> 9) & 7) & 0x3F;
	src = DREGu8((Opcode >> 0) & 7);
	if (sft)
	{
	ctx->io_cycle_counter -= sft * 2;
		sft &= 0x07;

		flag_C = src << (M68K_SR_C_SFT - ((sft - 1) & 7));
		res = (src >> sft) | (src << (8 - sft));
		flag_V = 0;
		flag_N = res >> 0;
		flag_NotZ = res & 0x000000FF;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
	}

	flag_V = 0;
	flag_C = 0;
	flag_N = src >> 0;
	flag_NotZ = src;
RET(6)
}

// RORD
OPCODE(0xE078)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = DREG((Opcode >> 9) & 7) & 0x3F;
	src = DREGu16((Opcode >> 0) & 7);
	if (sft)
	{
	ctx->io_cycle_counter -= sft * 2;
		sft &= 0x0F;

		flag_C = (src >> ((sft - 1) & 15)) << M68K_SR_C_SFT;
		res = (src >> sft) | (src << (16 - sft));
		flag_V = 0;
		flag_N = res >> 8;
		flag_NotZ = res & 0x0000FFFF;
	DREGu16((Opcode >> 0) & 7) = res;
	RET(6)
	}

	flag_V = 0;
	flag_C = 0;
	flag_N = src >> 8;
	flag_NotZ = src;
RET(6)
}

// RORD
OPCODE(0xE0B8)
{
#ifdef USE_CYCLONE_TIMING
#define CYC 8
#else
#define CYC 6
#endif
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = DREG((Opcode >> 9) & 7) & 0x3F;
	src = DREGu32((Opcode >> 0) & 7);
	if (sft)
	{
	ctx->io_cycle_counter -= sft * 2;
		sft &= 0x1F;

		flag_C = (src >> ((sft - 1) & 31)) << M68K_SR_C_SFT;
		res = (src >> sft) | (src << (32 - sft));
		flag_V = 0;
		flag_N = res >> 24;
		flag_NotZ = res;
	DREGu32((Opcode >> 0) & 7) = res;
	RET(CYC)
	}

	flag_V = 0;
	flag_C = 0;
	flag_N = src >> 24;
	flag_NotZ = src;
RET(CYC)
#undef CYC
}

// ASLD
OPCODE(0xE120)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = DREG((Opcode >> 9) & 7) & 0x3F;
	src = DREGu8((Opcode >> 0) & 7);
	if (sft)
	{
	ctx->io_cycle_counter -= sft * 2;
		if (sft < 8)
		{
			flag_X = flag_C = (src << sft) >> 0;
			res = (src << sft) & 0x000000FF;
			flag_N = res >> 0;
			flag_NotZ = res;
	DREGu8((Opcode >> 0) & 7) = res;
			flag_V = 0;
			{
				u32 msk = (((s32)0x80000000) >> (sft + 24)) & 0x000000FF;
				src &= msk;
				if ((src) && (src != msk)) flag_V = M68K_SR_V;
			}
	RET(6)
		}

		if (sft == 256) flag_C = src << M68K_SR_C_SFT;
		else flag_C = 0;
		flag_X = flag_C;
		if (src) flag_V = M68K_SR_V;
		else flag_V = 0;
		res = 0;
	DREGu8((Opcode >> 0) & 7) = res;
		flag_N = 0;
		flag_NotZ = 0;
	RET(6)
	}

	flag_V = 0;
	flag_C = 0;
	flag_N = src >> 0;
	flag_NotZ = src;
RET(6)
}

// ASLD
OPCODE(0xE160)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = DREG((Opcode >> 9) & 7) & 0x3F;
	src = DREGu16((Opcode >> 0) & 7);
	if (sft)
	{
	ctx->io_cycle_counter -= sft * 2;
		if (sft < 16)
		{
			flag_X = flag_C = (src << sft) >> 8;
			res = (src << sft) & 0x0000FFFF;
			flag_N = res >> 8;
			flag_NotZ = res;
	DREGu16((Opcode >> 0) & 7) = res;
			flag_V = 0;
			{
				u32 msk = (((s32)0x80000000) >> (sft + 16)) & 0x0000FFFF;
				src &= msk;
				if ((src) && (src != msk)) flag_V = M68K_SR_V;
			}
	RET(6)
		}

		if (sft == 65536) flag_C = src << M68K_SR_C_SFT;
		else flag_C = 0;
		flag_X = flag_C;
		if (src) flag_V = M68K_SR_V;
		else flag_V = 0;
		res = 0;
	DREGu16((Opcode >> 0) & 7) = res;
		flag_N = 0;
		flag_NotZ = 0;
	RET(6)
	}

	flag_V = 0;
	flag_C = 0;
	flag_N = src >> 8;
	flag_NotZ = src;
RET(6)
}

// ASLD
OPCODE(0xE1A0)
{
#ifdef USE_CYCLONE_TIMING
#define CYC 8
#else
#define CYC 6
#endif
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = DREG((Opcode >> 9) & 7) & 0x3F;
	src = DREGu32((Opcode >> 0) & 7);
	if (sft)
	{
	ctx->io_cycle_counter -= sft * 2;
		if (sft < 32)
		{
			flag_X = flag_C = (src >> (32 - sft)) << M68K_SR_C_SFT;
			res = src << sft;
			flag_N = res >> 24;
			flag_NotZ = res;
	DREGu32((Opcode >> 0) & 7) = res;
			flag_V = 0;
			{
				u32 msk = (((s32)0x80000000) >> (sft + 0)) & 0xFFFFFFFF;
				src &= msk;
				if ((src) && (src != msk)) flag_V = M68K_SR_V;
			}
	RET(CYC)
		}

		if (sft == 0) flag_C = src << M68K_SR_C_SFT;
		else flag_C = 0;
		flag_X = flag_C;
		if (src) flag_V = M68K_SR_V;
		else flag_V = 0;
		res = 0;
	DREGu32((Opcode >> 0) & 7) = res;
		flag_N = 0;
		flag_NotZ = 0;
	RET(CYC)
	}

	flag_V = 0;
	flag_C = 0;
	flag_N = src >> 24;
	flag_NotZ = src;
RET(CYC)
#undef CYC
}

// LSLD
OPCODE(0xE128)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = DREG((Opcode >> 9) & 7) & 0x3F;
	src = DREGu8((Opcode >> 0) & 7);
	if (sft)
	{
	ctx->io_cycle_counter -= sft * 2;
		if (sft <= 8)
		{
			flag_X = flag_C = (src << sft) >> 0;
			res = (src << sft) & 0x000000FF;
			flag_V = 0;
			flag_N = res >> 0;
			flag_NotZ = res;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
		}

		flag_X = flag_C = 0;
		flag_N = 0;
		flag_NotZ = 0;
		flag_V = 0;
		res = 0;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
	}

	flag_V = 0;
	flag_C = 0;
	flag_N = src >> 0;
	flag_NotZ = src;
RET(6)
}

// LSLD
OPCODE(0xE168)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = DREG((Opcode >> 9) & 7) & 0x3F;
	src = DREGu16((Opcode >> 0) & 7);
	if (sft)
	{
	ctx->io_cycle_counter -= sft * 2;
		if (sft <= 16)
		{
			flag_X = flag_C = (src << sft) >> 8;
			res = (src << sft) & 0x0000FFFF;
			flag_V = 0;
			flag_N = res >> 8;
			flag_NotZ = res;
	DREGu16((Opcode >> 0) & 7) = res;
	RET(6)
		}

		flag_X = flag_C = 0;
		flag_N = 0;
		flag_NotZ = 0;
		flag_V = 0;
		res = 0;
	DREGu16((Opcode >> 0) & 7) = res;
	RET(6)
	}

	flag_V = 0;
	flag_C = 0;
	flag_N = src >> 8;
	flag_NotZ = src;
RET(6)
}

// LSLD
OPCODE(0xE1A8)
{
#ifdef USE_CYCLONE_TIMING
#define CYC 8
#else
#define CYC 6
#endif
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = DREG((Opcode >> 9) & 7) & 0x3F;
	src = DREGu32((Opcode >> 0) & 7);
	if (sft)
	{
	ctx->io_cycle_counter -= sft * 2;
		if (sft < 32)
		{
			flag_X = flag_C = (src >> (32 - sft)) << M68K_SR_C_SFT;
			res = src << sft;
			flag_V = 0;
			flag_N = res >> 24;
			flag_NotZ = res;
	DREGu32((Opcode >> 0) & 7) = res;
	RET(CYC)
		}

		if (sft == 32) flag_C = src << M68K_SR_C_SFT;
		else flag_C = 0;
		flag_X = flag_C;
		flag_N = 0;
		flag_NotZ = 0;
		flag_V = 0;
		res = 0;
	DREGu32((Opcode >> 0) & 7) = res;
	RET(CYC)
	}

	flag_V = 0;
	flag_C = 0;
	flag_N = src >> 24;
	flag_NotZ = src;
RET(CYC)
#undef CYC
}

// ROXLD
OPCODE(0xE130)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = DREG((Opcode >> 9) & 7) & 0x3F;
	src = DREGu8((Opcode >> 0) & 7);
	if (sft)
	{
	ctx->io_cycle_counter -= sft * 2;
		sft %= 9;

		src |= (flag_X & M68K_SR_X) << 0;
		res = (src << sft) | (src >> (9 - sft));
		flag_X = flag_C = res >> 0;
		flag_V = 0;
		flag_N = res >> 0;
		flag_NotZ = res & 0x000000FF;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
	}

	flag_V = 0;
	flag_C = flag_X;
	flag_N = src >> 0;
	flag_NotZ = src;
RET(6)
}

// ROXLD
OPCODE(0xE170)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = DREG((Opcode >> 9) & 7) & 0x3F;
	src = DREGu16((Opcode >> 0) & 7);
	if (sft)
	{
	ctx->io_cycle_counter -= sft * 2;
		sft %= 17;

		src |= (flag_X & M68K_SR_X) << 8;
		res = (src << sft) | (src >> (17 - sft));
		flag_X = flag_C = res >> 8;
		flag_V = 0;
		flag_N = res >> 8;
		flag_NotZ = res & 0x0000FFFF;
	DREGu16((Opcode >> 0) & 7) = res;
	RET(6)
	}

	flag_V = 0;
	flag_C = flag_X;
	flag_N = src >> 8;
	flag_NotZ = src;
RET(6)
}

// ROXLD
OPCODE(0xE1B0)
{
#ifdef USE_CYCLONE_TIMING
#define CYC 8
#else
#define CYC 6
#endif
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = DREG((Opcode >> 9) & 7) & 0x3F;
	src = DREGu32((Opcode >> 0) & 7);
	if (sft)
	{
	ctx->io_cycle_counter -= sft * 2;
		sft %= 33;

		if (sft != 0)
		{
			if (sft == 1) res = (src << 1) | ((flag_X >> ((M68K_SR_X_SFT + 1) - 1)) & 1);
			else res = (src << sft) | (src >> (33 - sft)) | (((flag_X >> ((M68K_SR_X_SFT + 1) - 1)) & 1) << (sft - 1));
			flag_X = (src >> (32 - sft)) << M68K_SR_X_SFT;
		}
		else res = src;
		flag_C = flag_X;
		flag_V = 0;
		flag_N = res >> 24;
		flag_NotZ = res;
	DREGu32((Opcode >> 0) & 7) = res;
	RET(CYC)
	}

	flag_V = 0;
	flag_C = flag_X;
	flag_N = src >> 24;
	flag_NotZ = src;
RET(CYC)
#undef CYC
}

// ROLD
OPCODE(0xE138)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = DREG((Opcode >> 9) & 7) & 0x3F;
	src = DREGu8((Opcode >> 0) & 7);
	if (sft)
	{
	ctx->io_cycle_counter -= sft * 2;
		if (sft &= 0x07)
		{
			flag_C = (src << sft) >> 0;
			res = ((src << sft) | (src >> (8 - sft))) & 0x000000FF;
			flag_V = 0;
			flag_N = res >> 0;
			flag_NotZ = res;
	DREGu8((Opcode >> 0) & 7) = res;
	RET(6)
		}

		flag_V = 0;
		flag_C = src << M68K_SR_C_SFT;
		flag_N = src >> 0;
		flag_NotZ = src;
	RET(6)
	}

	flag_V = 0;
	flag_C = 0;
	flag_N = src >> 0;
	flag_NotZ = src;
RET(6)
}

// ROLD
OPCODE(0xE178)
{
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = DREG((Opcode >> 9) & 7) & 0x3F;
	src = DREGu16((Opcode >> 0) & 7);
	if (sft)
	{
	ctx->io_cycle_counter -= sft * 2;
		if (sft &= 0x0F)
		{
			flag_C = (src << sft) >> 8;
			res = ((src << sft) | (src >> (16 - sft))) & 0x0000FFFF;
			flag_V = 0;
			flag_N = res >> 8;
			flag_NotZ = res;
	DREGu16((Opcode >> 0) & 7) = res;
	RET(6)
		}

		flag_V = 0;
		flag_C = src << M68K_SR_C_SFT;
		flag_N = src >> 8;
		flag_NotZ = src;
	RET(6)
	}

	flag_V = 0;
	flag_C = 0;
	flag_N = src >> 8;
	flag_NotZ = src;
RET(6)
}

// ROLD
OPCODE(0xE1B8)
{
#ifdef USE_CYCLONE_TIMING
#define CYC 8
#else
#define CYC 6
#endif
	u32 adr, res;
	u32 src, dst;

	u32 sft;

	sft = DREG((Opcode >> 9) & 7) & 0x3F;
	src = DREGu32((Opcode >> 0) & 7);
	if (sft)
	{
	ctx->io_cycle_counter -= sft * 2;
		if (sft &= 0x1F)
		{
			flag_C = (src >> (32 - sft)) << M68K_SR_C_SFT;
			res = (src << sft) | (src >> (32 - sft));
			flag_V = 0;
			flag_N = res >> 24;
			flag_NotZ = res;
	DREGu32((Opcode >> 0) & 7) = res;
	RET(CYC)
		}

		flag_V = 0;
		flag_C = src << M68K_SR_C_SFT;
		flag_N = src >> 24;
		flag_NotZ = src;
	RET(CYC)
	}

	flag_V = 0;
	flag_C = 0;
	flag_N = src >> 24;
	flag_NotZ = src;
RET(CYC)
#undef CYC
}

// ASR
OPCODE(0xE0D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_X = flag_C = src << M68K_SR_C_SFT;
	res = (src >> 1) | (src & (1 << 15));
	flag_N = res >> 8;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ASR
OPCODE(0xE0D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_X = flag_C = src << M68K_SR_C_SFT;
	res = (src >> 1) | (src & (1 << 15));
	flag_N = res >> 8;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ASR
OPCODE(0xE0E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_X = flag_C = src << M68K_SR_C_SFT;
	res = (src >> 1) | (src & (1 << 15));
	flag_N = res >> 8;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// ASR
OPCODE(0xE0E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_X = flag_C = src << M68K_SR_C_SFT;
	res = (src >> 1) | (src & (1 << 15));
	flag_N = res >> 8;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ASR
OPCODE(0xE0F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_X = flag_C = src << M68K_SR_C_SFT;
	res = (src >> 1) | (src & (1 << 15));
	flag_N = res >> 8;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// ASR
OPCODE(0xE0F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_X = flag_C = src << M68K_SR_C_SFT;
	res = (src >> 1) | (src & (1 << 15));
	flag_N = res >> 8;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ASR
OPCODE(0xE0F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_X = flag_C = src << M68K_SR_C_SFT;
	res = (src >> 1) | (src & (1 << 15));
	flag_N = res >> 8;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// ASR
OPCODE(0xE0DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_X = flag_C = src << M68K_SR_C_SFT;
	res = (src >> 1) | (src & (1 << 15));
	flag_N = res >> 8;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ASR
OPCODE(0xE0E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_X = flag_C = src << M68K_SR_C_SFT;
	res = (src >> 1) | (src & (1 << 15));
	flag_N = res >> 8;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// LSR
OPCODE(0xE2D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_N = flag_V = 0;
	flag_X = flag_C = src << M68K_SR_C_SFT;
	res = src >> 1;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// LSR
OPCODE(0xE2D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_N = flag_V = 0;
	flag_X = flag_C = src << M68K_SR_C_SFT;
	res = src >> 1;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// LSR
OPCODE(0xE2E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_N = flag_V = 0;
	flag_X = flag_C = src << M68K_SR_C_SFT;
	res = src >> 1;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// LSR
OPCODE(0xE2E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_N = flag_V = 0;
	flag_X = flag_C = src << M68K_SR_C_SFT;
	res = src >> 1;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// LSR
OPCODE(0xE2F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	flag_N = flag_V = 0;
	flag_X = flag_C = src << M68K_SR_C_SFT;
	res = src >> 1;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// LSR
OPCODE(0xE2F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_N = flag_V = 0;
	flag_X = flag_C = src << M68K_SR_C_SFT;
	res = src >> 1;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// LSR
OPCODE(0xE2F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_N = flag_V = 0;
	flag_X = flag_C = src << M68K_SR_C_SFT;
	res = src >> 1;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// LSR
OPCODE(0xE2DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_N = flag_V = 0;
	flag_X = flag_C = src << M68K_SR_C_SFT;
	res = src >> 1;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// LSR
OPCODE(0xE2E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_N = flag_V = 0;
	flag_X = flag_C = src << M68K_SR_C_SFT;
	res = src >> 1;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// ROXR
OPCODE(0xE4D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
	flag_C = flag_X = src << M68K_SR_C_SFT;
	flag_N = res >> 8;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ROXR
OPCODE(0xE4D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
	flag_C = flag_X = src << M68K_SR_C_SFT;
	flag_N = res >> 8;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ROXR
OPCODE(0xE4E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
	flag_C = flag_X = src << M68K_SR_C_SFT;
	flag_N = res >> 8;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// ROXR
OPCODE(0xE4E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
	flag_C = flag_X = src << M68K_SR_C_SFT;
	flag_N = res >> 8;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ROXR
OPCODE(0xE4F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
	flag_C = flag_X = src << M68K_SR_C_SFT;
	flag_N = res >> 8;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// ROXR
OPCODE(0xE4F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
	flag_C = flag_X = src << M68K_SR_C_SFT;
	flag_N = res >> 8;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ROXR
OPCODE(0xE4F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
	flag_C = flag_X = src << M68K_SR_C_SFT;
	flag_N = res >> 8;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// ROXR
OPCODE(0xE4DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
	flag_C = flag_X = src << M68K_SR_C_SFT;
	flag_N = res >> 8;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ROXR
OPCODE(0xE4E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
	flag_C = flag_X = src << M68K_SR_C_SFT;
	flag_N = res >> 8;
	flag_NotZ = res;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// ROR
OPCODE(0xE6D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_C = src << M68K_SR_C_SFT;
	res = (src >> 1) | (src << 15);
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ROR
OPCODE(0xE6D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_C = src << M68K_SR_C_SFT;
	res = (src >> 1) | (src << 15);
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ROR
OPCODE(0xE6E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_C = src << M68K_SR_C_SFT;
	res = (src >> 1) | (src << 15);
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// ROR
OPCODE(0xE6E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_C = src << M68K_SR_C_SFT;
	res = (src >> 1) | (src << 15);
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ROR
OPCODE(0xE6F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_C = src << M68K_SR_C_SFT;
	res = (src >> 1) | (src << 15);
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// ROR
OPCODE(0xE6F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_C = src << M68K_SR_C_SFT;
	res = (src >> 1) | (src << 15);
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ROR
OPCODE(0xE6F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_C = src << M68K_SR_C_SFT;
	res = (src >> 1) | (src << 15);
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// ROR
OPCODE(0xE6DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_C = src << M68K_SR_C_SFT;
	res = (src >> 1) | (src << 15);
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ROR
OPCODE(0xE6E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_C = src << M68K_SR_C_SFT;
	res = (src >> 1) | (src << 15);
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// ASL
OPCODE(0xE1D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_X = flag_C = src >> 7;
	res = src << 1;
	flag_V = (src ^ res) >> 8;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ASL
OPCODE(0xE1D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_X = flag_C = src >> 7;
	res = src << 1;
	flag_V = (src ^ res) >> 8;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ASL
OPCODE(0xE1E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_X = flag_C = src >> 7;
	res = src << 1;
	flag_V = (src ^ res) >> 8;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// ASL
OPCODE(0xE1E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_X = flag_C = src >> 7;
	res = src << 1;
	flag_V = (src ^ res) >> 8;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ASL
OPCODE(0xE1F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	flag_X = flag_C = src >> 7;
	res = src << 1;
	flag_V = (src ^ res) >> 8;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// ASL
OPCODE(0xE1F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_X = flag_C = src >> 7;
	res = src << 1;
	flag_V = (src ^ res) >> 8;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ASL
OPCODE(0xE1F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_X = flag_C = src >> 7;
	res = src << 1;
	flag_V = (src ^ res) >> 8;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// ASL
OPCODE(0xE1DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_X = flag_C = src >> 7;
	res = src << 1;
	flag_V = (src ^ res) >> 8;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ASL
OPCODE(0xE1E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_X = flag_C = src >> 7;
	res = src << 1;
	flag_V = (src ^ res) >> 8;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// LSL
OPCODE(0xE3D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_X = flag_C = src >> 7;
	res = src << 1;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// LSL
OPCODE(0xE3D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_X = flag_C = src >> 7;
	res = src << 1;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// LSL
OPCODE(0xE3E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_X = flag_C = src >> 7;
	res = src << 1;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// LSL
OPCODE(0xE3E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_X = flag_C = src >> 7;
	res = src << 1;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// LSL
OPCODE(0xE3F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_X = flag_C = src >> 7;
	res = src << 1;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// LSL
OPCODE(0xE3F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_X = flag_C = src >> 7;
	res = src << 1;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// LSL
OPCODE(0xE3F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_X = flag_C = src >> 7;
	res = src << 1;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// LSL
OPCODE(0xE3DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_X = flag_C = src >> 7;
	res = src << 1;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// LSL
OPCODE(0xE3E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_X = flag_C = src >> 7;
	res = src << 1;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// ROXL
OPCODE(0xE5D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
	flag_X = flag_C = src >> 7;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ROXL
OPCODE(0xE5D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
	flag_X = flag_C = src >> 7;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ROXL
OPCODE(0xE5E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
	flag_X = flag_C = src >> 7;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// ROXL
OPCODE(0xE5E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
	flag_X = flag_C = src >> 7;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ROXL
OPCODE(0xE5F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
	flag_X = flag_C = src >> 7;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// ROXL
OPCODE(0xE5F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
	flag_X = flag_C = src >> 7;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ROXL
OPCODE(0xE5F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
	flag_X = flag_C = src >> 7;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// ROXL
OPCODE(0xE5DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
	flag_X = flag_C = src >> 7;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ROXL
OPCODE(0xE5E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
	flag_X = flag_C = src >> 7;
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// ROL
OPCODE(0xE7D0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_C = src >> 7;
	res = (src << 1) | (src >> 15);
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ROL
OPCODE(0xE7D8)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	AREG((Opcode >> 0) & 7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_C = src >> 7;
	res = (src << 1) | (src >> 15);
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ROL
OPCODE(0xE7E0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7) - 2;
	AREG((Opcode >> 0) & 7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_C = src >> 7;
	res = (src << 1) | (src >> 15);
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

// ROL
OPCODE(0xE7E8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	adr += AREG((Opcode >> 0) & 7);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_C = src >> 7;
	res = (src << 1) | (src >> 15);
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ROL
OPCODE(0xE7F0)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG((Opcode >> 0) & 7);
	DECODE_EXT_WORD
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_C = src >> 7;
	res = (src << 1) | (src >> 15);
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(18)
}

// ROL
OPCODE(0xE7F8)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_SWORD(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_C = src >> 7;
	res = (src << 1) | (src >> 15);
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(16)
}

// ROL
OPCODE(0xE7F9)
{
	u32 adr, res;
	u32 src, dst;

	FETCH_LONG(adr);
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_C = src >> 7;
	res = (src << 1) | (src >> 15);
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(20)
}

// ROL
OPCODE(0xE7DF)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7);
	AREG(7) += 2;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_C = src >> 7;
	res = (src << 1) | (src >> 15);
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(12)
}

// ROL
OPCODE(0xE7E7)
{
	u32 adr, res;
	u32 src, dst;

	adr = AREG(7) - 2;
	AREG(7) = adr;
	PRE_IO
	READ_WORD_F(adr, src)
	flag_V = 0;
	flag_C = src >> 7;
	res = (src << 1) | (src >> 15);
	flag_N = res >> 8;
	flag_NotZ = res & 0x0000FFFF;
	WRITE_WORD_F(adr, res)
	POST_IO
RET(14)
}

#ifdef PICODRIVE_HACK
#if 0
#define UPDATE_IDLE_COUNT { \
	extern int idle_hit_counter; \
	idle_hit_counter++; \
}
#else
#define UPDATE_IDLE_COUNT
#endif

// BRA
OPCODE(0x6001_idle)
{
#ifdef FAMEC_CHECK_BRANCHES
	u32 newPC = GET_PC;
	s8 offs=Opcode;
	newPC += offs;
	SET_PC(newPC);
	CHECK_BRANCH_EXCEPTION(offs)
#else
	PC += ((s8)(Opcode & 0xFE)) >> 1;
#endif
	UPDATE_IDLE_COUNT
RET0()
}

// BCC
OPCODE(0x6601_idle)
{
	if (flag_NotZ)
	{
		UPDATE_IDLE_COUNT
		PC += ((s8)(Opcode & 0xFE)) >> 1;
		//if (idle_hit)
		RET0()
	}
RET(8)
}

OPCODE(0x6701_idle)
{
	if (!flag_NotZ)
	{
		UPDATE_IDLE_COUNT
		PC += ((s8)(Opcode & 0xFE)) >> 1;
		//if (idle_hit)
		RET0()
	}
RET(8)
}


extern int SekIsIdleReady(void);
extern int SekIsIdleCode(unsigned short *dst, int bytes);
extern int SekRegisterIdlePatch(unsigned int pc, int oldop, int newop, void *ctx);

OPCODE(idle_detector_bcc8)
{
	int frame_count, cond_true, bytes, ret, newop;
	u16 *dest_pc;

	dest_pc = PC + (((s8)(Opcode & 0xFE)) >> 1);

	if (!SekIsIdleReady())
		goto end;

	bytes = 0 - (s8)(Opcode & 0xFE) - 2;
	ret = SekIsIdleCode(dest_pc, bytes);
	newop = (Opcode & 0xfe) | 0x7100;
	if (!ret) newop |= 0x200;
	if (  Opcode & 0x0100)  newop |= 0x400; // beq
	if (!(Opcode & 0x0f00)) newop |= 0xc00; // bra

	ret = SekRegisterIdlePatch(GET_PC - 2, Opcode, newop, ctx);
	switch (ret)
	{
		case 0: PC[-1] = newop; break;
		case 1: break;
		case 2: JumpTable[Opcode] = (Opcode & 0x0f00) ?
				((Opcode & 0x0100) ? CAST_OP(0x6701) : CAST_OP(0x6601)) :
				CAST_OP(0x6001); break;
	}

end:
	if ((Opcode & 0xff00) == 0x6000) cond_true = 1;
	else cond_true = (Opcode & 0x0100) ? !flag_NotZ : flag_NotZ; // beq?
	if (cond_true)
	{
		PC = dest_pc;
		ctx->io_cycle_counter -= 2;
	}
RET(8)
}

#endif // PICODRIVE_HACK
