BizHawk/waterbox/picodrive/cpu/fame/famec_opcodes.h

40094 lines
559 KiB
C

#ifdef PICODRIVE_HACK
#define NOT_POLLING g_m68kcontext->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(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(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(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 !
m68kcontext.execinfo |= M68K_FAULTED;
m68kcontext.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 !
m68kcontext.execinfo |= M68K_FAULTED;
m68kcontext.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 !
m68kcontext.execinfo |= M68K_FAULTED;
m68kcontext.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 !
m68kcontext.execinfo |= M68K_FAULTED;
m68kcontext.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 !
m68kcontext.execinfo |= M68K_FAULTED;
m68kcontext.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 !
m68kcontext.execinfo |= M68K_FAULTED;
m68kcontext.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 !
m68kcontext.execinfo |= M68K_FAULTED;
m68kcontext.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 !
m68kcontext.execinfo |= M68K_FAULTED;
m68kcontext.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 !
m68kcontext.execinfo |= M68K_FAULTED;
m68kcontext.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 !
m68kcontext.execinfo |= M68K_FAULTED;
m68kcontext.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(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(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(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(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(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(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(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(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(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(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(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(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(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
RET(4)
}
RET(18)
}
// NBCD
OPCODE(0x4800)
{
u32 adr, res;
u32 src, dst;
res = DREGu8((Opcode >> 0) & 7);
res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1);
if (res != 0x9a)
{
if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
res &= 0xFF;
DREGu8((Opcode >> 0) & 7) = res;
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
else 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, res)
res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1);
if (res != 0x9a)
{
if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
res &= 0xFF;
WRITE_BYTE_F(adr, res)
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
else 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, res)
res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1);
if (res != 0x9a)
{
if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
res &= 0xFF;
WRITE_BYTE_F(adr, res)
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
else 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, res)
res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1);
if (res != 0x9a)
{
if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
res &= 0xFF;
WRITE_BYTE_F(adr, res)
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
else 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, res)
res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1);
if (res != 0x9a)
{
if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
res &= 0xFF;
WRITE_BYTE_F(adr, res)
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
else 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, res)
res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1);
if (res != 0x9a)
{
if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
res &= 0xFF;
WRITE_BYTE_F(adr, res)
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
else 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, res)
res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1);
if (res != 0x9a)
{
if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
res &= 0xFF;
WRITE_BYTE_F(adr, res)
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
else 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, res)
res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1);
if (res != 0x9a)
{
if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
res &= 0xFF;
WRITE_BYTE_F(adr, res)
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
else 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, res)
res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1);
if (res != 0x9a)
{
if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
res &= 0xFF;
WRITE_BYTE_F(adr, res)
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
else 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, res)
res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1);
if (res != 0x9a)
{
if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
res &= 0xFF;
WRITE_BYTE_F(adr, res)
flag_NotZ |= res;
flag_X = flag_C = M68K_SR_C;
}
else 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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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 (g_m68kcontext == &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 (g_m68kcontext == &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 (g_m68kcontext == &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 (g_m68kcontext == &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 (g_m68kcontext == &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 (g_m68kcontext == &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 (g_m68kcontext == &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 (g_m68kcontext == &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 (g_m68kcontext == &PicoCpuFS68k) {
res |= 0x80;
WRITE_BYTE_F(adr, res);
}
#endif
POST_IO
#ifdef USE_CYCLONE_TIMING
RET(20)
#else
RET(8)
#endif
}
// ILLEGAL
OPCODE(0x4AFC)
{
SET_PC(execute_exception(M68K_ILLEGAL_INSTRUCTION_EX, GET_PC-2, GET_SR));
RET(0)
}
// ILLEGAL A000-AFFF
OPCODE(0xA000)
{
SET_PC(execute_exception(M68K_1010_EX, GET_PC-2, GET_SR));
RET(0)
}
// ILLEGAL F000-FFFF
OPCODE(0xF000)
{
SET_PC(execute_exception(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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.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
m68kcontext.io_cycle_counter -= (adr - dst) * 2;
RET(12)
}
// TRAP
OPCODE(0x4E40)
{
SET_PC(execute_exception(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(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(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(M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
RET(4)
}
PRE_IO
if (m68kcontext.reset_handler) m68kcontext.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(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;
}
m68kcontext.execinfo |= FM68K_HALTED;
RET0()
}
// RTE
OPCODE(0x4E73)
{
u32 adr, res;
u32 src, dst;
if (!flag_S)
{
SET_PC(execute_exception(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
m68kcontext.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(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)
{
u32 adr, res;
u32 src, dst;
src = DREGu16((Opcode >> 0) & 7);
res = DREGu16((Opcode >> 9) & 7);
if (((s32)res < 0) || (res > src))
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
}
RET(10)
}
// CHK
OPCODE(0x4190)
{
u32 adr, res;
u32 src, dst;
adr = AREG((Opcode >> 0) & 7);
PRE_IO
READ_WORD_F(adr, src)
res = DREGu16((Opcode >> 9) & 7);
if (((s32)res < 0) || (res > src))
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
}
POST_IO
RET(14)
}
// CHK
OPCODE(0x4198)
{
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);
if (((s32)res < 0) || (res > src))
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
}
POST_IO
RET(14)
}
// CHK
OPCODE(0x41A0)
{
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);
if (((s32)res < 0) || (res > src))
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
}
POST_IO
RET(16)
}
// CHK
OPCODE(0x41A8)
{
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);
if (((s32)res < 0) || (res > src))
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
}
POST_IO
RET(18)
}
// CHK
OPCODE(0x41B0)
{
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);
if (((s32)res < 0) || (res > src))
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
}
POST_IO
RET(20)
}
// CHK
OPCODE(0x41B8)
{
u32 adr, res;
u32 src, dst;
FETCH_SWORD(adr);
PRE_IO
READ_WORD_F(adr, src)
res = DREGu16((Opcode >> 9) & 7);
if (((s32)res < 0) || (res > src))
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
}
POST_IO
RET(18)
}
// CHK
OPCODE(0x41B9)
{
u32 adr, res;
u32 src, dst;
FETCH_LONG(adr);
PRE_IO
READ_WORD_F(adr, src)
res = DREGu16((Opcode >> 9) & 7);
if (((s32)res < 0) || (res > src))
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
}
POST_IO
RET(22)
}
// CHK
OPCODE(0x41BA)
{
u32 adr, res;
u32 src, dst;
adr = GET_SWORD + GET_PC;
PC++;
PRE_IO
READ_WORD_F(adr, src)
res = DREGu16((Opcode >> 9) & 7);
if (((s32)res < 0) || (res > src))
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
}
POST_IO
RET(18)
}
// CHK
OPCODE(0x41BB)
{
u32 adr, res;
u32 src, dst;
adr = GET_PC;
DECODE_EXT_WORD
PRE_IO
READ_WORD_F(adr, src)
res = DREGu16((Opcode >> 9) & 7);
if (((s32)res < 0) || (res > src))
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
}
POST_IO
RET(20)
}
// CHK
OPCODE(0x41BC)
{
u32 adr, res;
u32 src, dst;
FETCH_WORD(src);
res = DREGu16((Opcode >> 9) & 7);
if (((s32)res < 0) || (res > src))
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
}
POST_IO
RET(14)
}
// CHK
OPCODE(0x419F)
{
u32 adr, res;
u32 src, dst;
adr = AREG(7);
AREG(7) += 2;
PRE_IO
READ_WORD_F(adr, src)
res = DREGu16((Opcode >> 9) & 7);
if (((s32)res < 0) || (res > src))
{
flag_N = res >> 8;
SET_PC(execute_exception(M68K_CHK_EX, GET_PC, GET_SR));
}
POST_IO
RET(14)
}
// CHK
OPCODE(0x41A7)
{
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);
if (((s32)res < 0) || (res > src))
{
flag_N = res >> 8;
SET_PC(execute_exception(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;
m68kcontext.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;
m68kcontext.io_cycle_counter -= 2;
}
RET(8)
}
// BCC
OPCODE(0x6401)
{
u32 adr, res;
u32 src, dst;
if (!(flag_C & 0x100))
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
m68kcontext.io_cycle_counter -= 2;
}
RET(8)
}
// BCC
OPCODE(0x6501)
{
u32 adr, res;
u32 src, dst;
if (flag_C & 0x100)
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
m68kcontext.io_cycle_counter -= 2;
}
RET(8)
}
// BCC
OPCODE(0x6601)
{
u32 adr, res;
u32 src, dst;
if (flag_NotZ)
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
m68kcontext.io_cycle_counter -= 2;
}
RET(8)
}
// BCC
OPCODE(0x6701)
{
u32 adr, res;
u32 src, dst;
if (!flag_NotZ)
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
m68kcontext.io_cycle_counter -= 2;
}
RET(8)
}
// BCC
OPCODE(0x6801)
{
u32 adr, res;
u32 src, dst;
if (!(flag_V & 0x80))
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
m68kcontext.io_cycle_counter -= 2;
}
RET(8)
}
// BCC
OPCODE(0x6901)
{
u32 adr, res;
u32 src, dst;
if (flag_V & 0x80)
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
m68kcontext.io_cycle_counter -= 2;
}
RET(8)
}
// BCC
OPCODE(0x6A01)
{
u32 adr, res;
u32 src, dst;
if (!(flag_N & 0x80))
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
m68kcontext.io_cycle_counter -= 2;
}
RET(8)
}
// BCC
OPCODE(0x6B01)
{
u32 adr, res;
u32 src, dst;
if (flag_N & 0x80)
{
PC += ((s8)(Opcode & 0xFE)) >> 1;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
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) res -= 6;
res += (dst & 0xF0) - (src & 0xF0);
if (res > 0x99)
{
res += 0xA0;
flag_X = flag_C = M68K_SR_C;
}
else flag_X = flag_C = 0;
flag_NotZ |= res & 0xFF;
flag_N = res;
DREGu8((Opcode >> 9) & 7) = res;
RET(6)
}
// SBCDM
OPCODE(0x8108)
{
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 & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
if (res > 9) res -= 6;
res += (dst & 0xF0) - (src & 0xF0);
if (res > 0x99)
{
res += 0xA0;
flag_X = flag_C = M68K_SR_C;
}
else flag_X = flag_C = 0;
flag_NotZ |= res & 0xFF;
flag_N = res;
WRITE_BYTE_F(adr, res)
POST_IO
RET(18)
}
// SBCD7M
OPCODE(0x810F)
{
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 & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
if (res > 9) res -= 6;
res += (dst & 0xF0) - (src & 0xF0);
if (res > 0x99)
{
res += 0xA0;
flag_X = flag_C = M68K_SR_C;
}
else flag_X = flag_C = 0;
flag_NotZ |= res & 0xFF;
flag_N = res;
WRITE_BYTE_F(adr, res)
POST_IO
RET(18)
}
// SBCDM7
OPCODE(0x8F08)
{
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 & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
if (res > 9) res -= 6;
res += (dst & 0xF0) - (src & 0xF0);
if (res > 0x99)
{
res += 0xA0;
flag_X = flag_C = M68K_SR_C;
}
else flag_X = flag_C = 0;
flag_NotZ |= res & 0xFF;
flag_N = res;
WRITE_BYTE_F(adr, res)
POST_IO
RET(18)
}
// SBCD7M7
OPCODE(0x8F0F)
{
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 & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
if (res > 9) res -= 6;
res += (dst & 0xF0) - (src & 0xF0);
if (res > 0x99)
{
res += 0xA0;
flag_X = flag_C = M68K_SR_C;
}
else flag_X = flag_C = 0;
flag_NotZ |= res & 0xFF;
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(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(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(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(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(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(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(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(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(162)
#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(162)
#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(162)
#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(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(M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
#ifdef USE_CYCLONE_TIMING_DIV
RET(160)
#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(160)
#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(160)
#else
RET(100)
#endif
}
// DIVU
OPCODE(0x80FC)
{
u32 adr, res;
u32 src, dst;
FETCH_WORD(src);
if (src == 0)
{
SET_PC(execute_exception(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(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(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(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: m68kcontext.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(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: m68kcontext.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(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: m68kcontext.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(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: m68kcontext.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(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: m68kcontext.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(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: m68kcontext.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(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: m68kcontext.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(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: m68kcontext.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(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: m68kcontext.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(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: m68kcontext.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(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: m68kcontext.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(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: m68kcontext.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(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: m68kcontext.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 !
m68kcontext.execinfo |= M68K_FAULTED;
m68kcontext.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 !
m68kcontext.execinfo |= M68K_FAULTED;
m68kcontext.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;
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) res += 6;
res += (dst & 0xF0) + (src & 0xF0);
if (res > 0x99)
{
res -= 0xA0;
flag_X = flag_C = M68K_SR_C;
}
else flag_X = flag_C = 0;
flag_NotZ |= res & 0xFF;
flag_N = res;
DREGu8((Opcode >> 9) & 7) = res;
RET(6)
}
// ABCDM
OPCODE(0xC108)
{
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 & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
if (res > 9) res += 6;
res += (dst & 0xF0) + (src & 0xF0);
if (res > 0x99)
{
res -= 0xA0;
flag_X = flag_C = M68K_SR_C;
}
else flag_X = flag_C = 0;
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;
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) res += 6;
res += (dst & 0xF0) + (src & 0xF0);
if (res > 0x99)
{
res -= 0xA0;
flag_X = flag_C = M68K_SR_C;
}
else flag_X = flag_C = 0;
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;
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) res += 6;
res += (dst & 0xF0) + (src & 0xF0);
if (res > 0x99)
{
res -= 0xA0;
flag_X = flag_C = M68K_SR_C;
}
else flag_X = flag_C = 0;
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;
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) res += 6;
res += (dst & 0xF0) + (src & 0xF0);
if (res > 0x99)
{
res -= 0xA0;
flag_X = flag_C = M68K_SR_C;
}
else flag_X = flag_C = 0;
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 !
m68kcontext.execinfo |= M68K_FAULTED;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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;
m68kcontext.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)
{
m68kcontext.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)
{
m68kcontext.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)
{
m68kcontext.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)
{
m68kcontext.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)
{
m68kcontext.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)
{
m68kcontext.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)
{
m68kcontext.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)
{
m68kcontext.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)
{
m68kcontext.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 >> (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
}
// RORD
OPCODE(0xE038)
{
u32 adr, res;
u32 src, dst;
u32 sft;
sft = DREG((Opcode >> 9) & 7) & 0x3F;
src = DREGu8((Opcode >> 0) & 7);
if (sft)
{
m68kcontext.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)
{
m68kcontext.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)
{
m68kcontext.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)
{
m68kcontext.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)
{
m68kcontext.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)
{
m68kcontext.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)
{
m68kcontext.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)
{
m68kcontext.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)
{
m68kcontext.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)
{
m68kcontext.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)
{
m68kcontext.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)
{
m68kcontext.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)
{
m68kcontext.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)
{
m68kcontext.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)
{
m68kcontext.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, &m68kcontext);
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;
m68kcontext.io_cycle_counter -= 2;
}
RET(8)
}
#endif // PICODRIVE_HACK