FAME + some random stuff added
[picodrive.git] / cpu / fame / famec_opcodes.h
diff --git a/cpu/fame/famec_opcodes.h b/cpu/fame/famec_opcodes.h
new file mode 100644 (file)
index 0000000..a9cc991
--- /dev/null
@@ -0,0 +1,39792 @@
+
+// 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
+       {
+               u32 newPC = (u32)(PC) - BasePC;
+               SET_PC(newPC-2);
+               execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
+#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
+       {
+               u32 newPC = (u32)(PC) - BasePC;
+               SET_PC(newPC-2);
+               execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
+               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
+       {
+               u32 newPC = (u32)(PC) - BasePC;
+               SET_PC(newPC-2);
+               execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
+               RET(4)
+       }
+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 + ((u32)(PC) - BasePC);
+       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 = (u32)(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 + ((u32)(PC) - BasePC);
+       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 = (u32)(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
+RET(24)
+}
+
+// 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
+RET(32)
+}
+
+// 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
+RET(24)
+}
+
+// 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
+RET(32)
+}
+
+// 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)
+}
+
+// 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)
+}
+
+// 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 + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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 = (u32)(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 = (u32)(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 = (u32)(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 = (u32)(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 = (u32)(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 = (u32)(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 = (u32)(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 = (u32)(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 = (u32)(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 = (u32)(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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_F(adr, res)
+       POST_IO
+RET(28)
+}
+
+// MOVEL
+OPCODE(0x203A)
+{
+       u32 adr, res;
+       u32 src, dst;
+
+       adr = GET_SWORD + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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_F(adr, res)
+       POST_IO
+RET(24)
+}
+
+// MOVEL
+OPCODE(0x217A)
+{
+       u32 adr, res;
+       u32 src, dst;
+
+       adr = GET_SWORD + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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_F(adr, res)
+       POST_IO
+RET(24)
+}
+
+// MOVEL
+OPCODE(0x203B)
+{
+       u32 adr, res;
+       u32 src, dst;
+
+       adr = (u32)(PC) - BasePC;
+       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 = (u32)(PC) - BasePC;
+       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 = (u32)(PC) - BasePC;
+       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 = (u32)(PC) - BasePC;
+       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_F(adr, res)
+       POST_IO
+RET(26)
+}
+
+// MOVEL
+OPCODE(0x217B)
+{
+       u32 adr, res;
+       u32 src, dst;
+
+       adr = (u32)(PC) - BasePC;
+       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 = (u32)(PC) - BasePC;
+       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 = (u32)(PC) - BasePC;
+       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 = (u32)(PC) - BasePC;
+       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 = (u32)(PC) - BasePC;
+       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 = (u32)(PC) - BasePC;
+       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_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_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_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_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_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_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_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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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 + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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 = (u32)(PC) - BasePC;
+       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 = (u32)(PC) - BasePC;
+       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 = (u32)(PC) - BasePC;
+       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 = (u32)(PC) - BasePC;
+       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 = (u32)(PC) - BasePC;
+       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 = (u32)(PC) - BasePC;
+       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 = (u32)(PC) - BasePC;
+       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 = (u32)(PC) - BasePC;
+       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 = (u32)(PC) - BasePC;
+       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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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
+       {
+               u32 oldPC=GET_PC;
+               SET_PC(oldPC-2)
+               execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
+               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
+       {
+               u32 oldPC=GET_PC;
+               SET_PC(oldPC-2)
+               execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
+               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
+       {
+               u32 oldPC=GET_PC;
+               SET_PC(oldPC-2)
+               execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
+               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
+       {
+               u32 oldPC=GET_PC;
+               SET_PC(oldPC-2)
+               execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
+               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
+       {
+               u32 oldPC=GET_PC;
+               SET_PC(oldPC-2)
+               execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
+               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
+       {
+               u32 oldPC=GET_PC;
+               SET_PC(oldPC-2)
+               execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
+               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
+       {
+               u32 oldPC=GET_PC;
+               SET_PC(oldPC-2)
+               execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
+               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
+       {
+               u32 oldPC=GET_PC;
+               SET_PC(oldPC-2)
+               execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
+               RET(4)
+       }
+RET(24)
+}
+
+// MOVEaSR
+OPCODE(0x46FA)
+{
+       u32 adr, res;
+       u32 src, dst;
+
+       if (flag_S)
+       {
+               adr = GET_SWORD + ((u32)(PC) - BasePC);
+               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(24)
+       }
+       else
+       {
+               u32 oldPC=GET_PC;
+               SET_PC(oldPC-2)
+               execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
+               RET(4)
+       }
+RET(20)
+}
+
+// MOVEaSR
+OPCODE(0x46FB)
+{
+       u32 adr, res;
+       u32 src, dst;
+
+       if (flag_S)
+       {
+               adr = (u32)(PC) - BasePC;
+               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
+       {
+               u32 oldPC=GET_PC;
+               SET_PC(oldPC-2)
+               execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
+               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
+       {
+               u32 oldPC=GET_PC;
+               SET_PC(oldPC-2)
+               execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
+               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
+       {
+               u32 oldPC=GET_PC;
+               SET_PC(oldPC-2)
+               execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
+               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
+       {
+               u32 oldPC=GET_PC;
+               SET_PC(oldPC-2)
+               execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
+               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 + ((u32)(PC) - BasePC);
+       PC++;
+       PRE_IO
+       PUSH_32_F(adr)
+       POST_IO
+RET(16)
+}
+
+// PEA
+OPCODE(0x487B)
+{
+       u32 adr, res;
+       u32 src, dst;
+
+       adr = (u32)(PC) - BasePC;
+       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;
+       POST_IO
+RET(8)
+}
+
+// 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;
+       POST_IO
+RET(8)
+}
+
+// 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;
+       POST_IO
+RET(10)
+}
+
+// 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;
+       POST_IO
+RET(12)
+}
+
+// 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;
+       POST_IO
+RET(14)
+}
+
+// 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;
+       POST_IO
+RET(12)
+}
+
+// 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;
+       POST_IO
+RET(16)
+}
+
+// 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;
+       POST_IO
+RET(8)
+}
+
+// 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;
+       POST_IO
+RET(10)
+}
+
+// ILLEGAL
+OPCODE(0x4AFC)
+{
+       u32 oldPC=GET_PC;
+       SET_PC(oldPC-2)
+       execute_exception(M68K_ILLEGAL_INSTRUCTION_EX);
+RET(4)
+}
+
+// ILLEGAL A000-AFFF
+OPCODE(0xA000)
+{
+       u32 oldPC=GET_PC;
+       SET_PC(oldPC-2)
+       execute_exception(M68K_1010_EX);
+RET(4)
+}
+
+// ILLEGAL F000-FFFF
+OPCODE(0xF000)
+{
+       u32 oldPC=GET_PC;
+       SET_PC(oldPC-2)
+       execute_exception(M68K_1111_EX);
+RET(4)
+}
+
+// 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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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)
+{
+       execute_exception(M68K_TRAP_BASE_EX + (Opcode & 0xF));
+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)
+       {
+               u32 oldPC=GET_PC;
+               SET_PC(oldPC-2)
+               execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
+               RET(4)
+       }
+       res = AREGu32((Opcode >> 0) & 7);
+       ASP = res;
+RET(4)
+}
+
+// MOVEUSPA
+OPCODE(0x4E68)
+{
+       u32 adr, res;
+       u32 src, dst;
+
+       if (!flag_S)
+       {
+               u32 oldPC=GET_PC;
+               SET_PC(oldPC-2)
+               execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
+               RET(4)
+       }
+       res = ASP;
+       AREG((Opcode >> 0) & 7) = res;
+RET(4)
+}
+
+// RESET
+OPCODE(0x4E70)
+{
+       u32 adr, res;
+       u32 src, dst;
+
+       if (!flag_S)
+       {
+               u32 oldPC=GET_PC;
+               SET_PC(oldPC-2)
+               execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
+               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)
+       {
+               u32 oldPC=GET_PC;
+               SET_PC(oldPC-2)
+               execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
+               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 |= M68K_HALTED;
+       m68kcontext.io_cycle_counter = 0;
+RET(4)
+}
+
+// RTE
+OPCODE(0x4E73)
+{
+       u32 adr, res;
+       u32 src, dst;
+
+       if (!flag_S)
+       {
+               u32 oldPC=GET_PC;
+               SET_PC(oldPC-2)
+               execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
+               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 &= ~(M68K_EMULATE_GROUP_0|M68K_EMULATE_TRACE|M68K_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)
+               execute_exception(M68K_TRAPV_EX);
+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 = (u32)(PC) - BasePC;
+       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 = (u32)(PC) - BasePC;
+       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 = (u32)(PC) - BasePC;
+       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 = (u32)(PC) - BasePC;
+       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 = (u32)(PC) - BasePC;
+       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 + ((u32)(PC) - BasePC);
+       PC++;
+       {
+               u32 oldPC;
+
+               oldPC = (u32)(PC) - BasePC;
+       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 = (u32)(PC) - BasePC;
+       DECODE_EXT_WORD
+       {
+               u32 oldPC;
+
+               oldPC = (u32)(PC) - BasePC;
+       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 + ((u32)(PC) - BasePC);
+       PC++;
+       SET_PC(adr)
+       CHECK_BRANCH_EXCEPTION(adr)
+RET(10)
+}
+
+// JMP
+OPCODE(0x4EFB)
+{
+       u32 adr, res;
+       u32 src, dst;
+
+       adr = (u32)(PC) - BasePC;
+       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;
+               execute_exception(M68K_CHK_EX);
+       }
+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;
+               execute_exception(M68K_CHK_EX);
+       }
+       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;
+               execute_exception(M68K_CHK_EX);
+       }
+       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;
+               execute_exception(M68K_CHK_EX);
+       }
+       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;
+               execute_exception(M68K_CHK_EX);
+       }
+       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;
+               execute_exception(M68K_CHK_EX);
+       }
+       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;
+               execute_exception(M68K_CHK_EX);
+       }
+       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;
+               execute_exception(M68K_CHK_EX);
+       }
+       POST_IO
+RET(22)
+}
+
+// CHK
+OPCODE(0x41BA)
+{
+       u32 adr, res;
+       u32 src, dst;
+
+       adr = GET_SWORD + ((u32)(PC) - BasePC);
+       PC++;
+       PRE_IO
+       READ_WORD_F(adr, src)
+       res = DREGu16((Opcode >> 9) & 7);
+       if (((s32)res < 0) || (res > src))
+       {
+               flag_N = res >> 8;
+               execute_exception(M68K_CHK_EX);
+       }
+       POST_IO
+RET(18)
+}
+
+// CHK
+OPCODE(0x41BB)
+{
+       u32 adr, res;
+       u32 src, dst;
+
+       adr = (u32)(PC) - BasePC;
+       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;
+               execute_exception(M68K_CHK_EX);
+       }
+       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;
+               execute_exception(M68K_CHK_EX);
+       }
+       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;
+               execute_exception(M68K_CHK_EX);
+       }
+       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;
+               execute_exception(M68K_CHK_EX);
+       }
+       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 + ((u32)(PC) - BasePC);
+       PC++;
+       res = adr;
+       AREG((Opcode >> 9) & 7) = res;
+RET(8)
+}
+
+// LEA
+OPCODE(0x41FB)
+{
+       u32 adr, res;
+       u32 src, dst;
+
+       adr = (u32)(PC) - BasePC;
+       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;
+
+       res = DREGu16((Opcode >> 0) & 7);
+       res--;
+       DREGu16((Opcode >> 0) & 7) = res;
+       if ((s32)res != -1)
+       {
+               u32 newPC;
+
+               newPC = (u32)(PC) - BasePC;
+               newPC += GET_SWORD;
+               SET_PC(newPC);
+               CHECK_BRANCH_EXCEPTION(newPC)
+       RET(10)
+       }
+       PC++;
+RET(14)
+}
+
+// DBCC
+OPCODE(0x52C8)
+{
+       u32 adr, res;
+       u32 src, dst;
+
+       if ((!flag_NotZ) || (flag_C & 0x100))
+       {
+       res = DREGu16((Opcode >> 0) & 7);
+       res--;
+       DREGu16((Opcode >> 0) & 7) = res;
+       if ((s32)res != -1)
+       {
+               u32 newPC;
+
+               newPC = (u32)(PC) - BasePC;
+               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;
+
+       if (flag_NotZ && (!(flag_C & 0x100)))
+       {
+       res = DREGu16((Opcode >> 0) & 7);
+       res--;
+       DREGu16((Opcode >> 0) & 7) = res;
+       if ((s32)res != -1)
+       {
+               u32 newPC;
+
+               newPC = (u32)(PC) - BasePC;
+               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;
+
+       if (flag_C & 0x100)
+       {
+       res = DREGu16((Opcode >> 0) & 7);
+       res--;
+       DREGu16((Opcode >> 0) & 7) = res;
+       if ((s32)res != -1)
+       {
+               u32 newPC;
+
+               newPC = (u32)(PC) - BasePC;
+               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;
+
+       if (!(flag_C & 0x100))
+       {
+       res = DREGu16((Opcode >> 0) & 7);
+       res--;
+       DREGu16((Opcode >> 0) & 7) = res;
+       if ((s32)res != -1)
+       {
+               u32 newPC;
+
+               newPC = (u32)(PC) - BasePC;
+               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;
+
+       if (!flag_NotZ)
+       {
+       res = DREGu16((Opcode >> 0) & 7);
+       res--;
+       DREGu16((Opcode >> 0) & 7) = res;
+       if ((s32)res != -1)
+       {
+               u32 newPC;
+
+               newPC = (u32)(PC) - BasePC;
+               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;
+
+       if (flag_NotZ)
+       {
+       res = DREGu16((Opcode >> 0) & 7);
+       res--;
+       DREGu16((Opcode >> 0) & 7) = res;
+       if ((s32)res != -1)
+       {
+               u32 newPC;
+
+               newPC = (u32)(PC) - BasePC;
+               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;
+
+       if (flag_V & 0x80)
+       {
+       res = DREGu16((Opcode >> 0) & 7);
+       res--;
+       DREGu16((Opcode >> 0) & 7) = res;
+       if ((s32)res != -1)
+       {
+               u32 newPC;
+
+               newPC = (u32)(PC) - BasePC;
+               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;
+
+       if (!(flag_V & 0x80))
+       {
+       res = DREGu16((Opcode >> 0) & 7);
+       res--;
+       DREGu16((Opcode >> 0) & 7) = res;
+       if ((s32)res != -1)
+       {
+               u32 newPC;
+
+               newPC = (u32)(PC) - BasePC;
+               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;
+
+       if (flag_N & 0x80)
+       {
+       res = DREGu16((Opcode >> 0) & 7);
+       res--;
+       DREGu16((Opcode >> 0) & 7) = res;
+       if ((s32)res != -1)
+       {
+               u32 newPC;
+
+               newPC = (u32)(PC) - BasePC;
+               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;
+
+       if (!(flag_N & 0x80))
+       {
+       res = DREGu16((Opcode >> 0) & 7);
+       res--;
+       DREGu16((Opcode >> 0) & 7) = res;
+       if ((s32)res != -1)
+       {
+               u32 newPC;
+
+               newPC = (u32)(PC) - BasePC;
+               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;
+
+       if ((flag_N ^ flag_V) & 0x80)
+       {
+       res = DREGu16((Opcode >> 0) & 7);
+       res--;
+       DREGu16((Opcode >> 0) & 7) = res;
+       if ((s32)res != -1)
+       {
+               u32 newPC;
+
+               newPC = (u32)(PC) - BasePC;
+               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;
+
+       if (!((flag_N ^ flag_V) & 0x80))
+       {
+       res = DREGu16((Opcode >> 0) & 7);
+       res--;
+       DREGu16((Opcode >> 0) & 7) = res;
+       if ((s32)res != -1)
+       {
+               u32 newPC;
+
+               newPC = (u32)(PC) - BasePC;
+               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;
+
+       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 = (u32)(PC) - BasePC;
+               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;
+
+       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 = (u32)(PC) - BasePC;
+               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_ // breaks Project-X
+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 = (u32)(PC) - BasePC;
+               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 = (u32)(PC) - BasePC;
+               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 = (u32)(PC) - BasePC;
+               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 = (u32)(PC) - BasePC;
+               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 = (u32)(PC) - BasePC;
+               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 = (u32)(PC) - BasePC;
+               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 = (u32)(PC) - BasePC;
+               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 = (u32)(PC) - BasePC;
+               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 = (u32)(PC) - BasePC;
+               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 = (u32)(PC) - BasePC;
+               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 = (u32)(PC) - BasePC;
+               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 = (u32)(PC) - BasePC;
+               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 = (u32)(PC) - BasePC;
+               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 = (u32)(PC) - BasePC;
+               newPC += GET_SWORD;
+               SET_PC(newPC);
+               CHECK_BRANCH_EXCEPTION(newPC)
+               RET(10)
+       }
+       PC++;
+RET(12)
+}
+
+// BRA
+OPCODE(0x6001)
+{
+#ifdef FAMEC_CHECK_BRANCHES
+       u32 newPC = (u32)(PC) - BasePC;
+       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 = (u32)(PC) - BasePC;
+               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 = (u32)(PC) - BasePC;
+       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 = (u32)(PC) - BasePC;
+               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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#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)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#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)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#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)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#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)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#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)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#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)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#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)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#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 + ((u32)(PC) - BasePC);
+       PC++;
+       PRE_IO
+       READ_WORD_F(adr, src)
+       if (src == 0)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#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 = (u32)(PC) - BasePC;
+       DECODE_EXT_WORD
+       PRE_IO
+       READ_WORD_F(adr, src)
+       if (src == 0)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#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)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#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)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#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)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#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)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#ifdef USE_CYCLONE_TIMING_DIV
+goto end;
+#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 end;
+#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 end;
+#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
+end:   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)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#ifdef USE_CYCLONE_TIMING_DIV
+goto end;
+#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 end;
+#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 end;
+#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
+end:   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)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#ifdef USE_CYCLONE_TIMING_DIV
+goto end;
+#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 end;
+#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 end;
+#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
+end:   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)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#ifdef USE_CYCLONE_TIMING_DIV
+goto end;
+#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 end;
+#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 end;
+#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
+end:   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)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#ifdef USE_CYCLONE_TIMING_DIV
+goto end;
+#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 end;
+#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 end;
+#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
+end:   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)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#ifdef USE_CYCLONE_TIMING_DIV
+goto end;
+#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 end;
+#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 end;
+#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
+end:   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)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#ifdef USE_CYCLONE_TIMING_DIV
+goto end;
+#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 end;
+#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 end;
+#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
+end:   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)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#ifdef USE_CYCLONE_TIMING_DIV
+goto end;
+#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 end;
+#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 end;
+#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
+end:   m68kcontext.io_cycle_counter -= 50;
+#endif
+RET(120)
+}
+
+// DIVS
+OPCODE(0x81FA)
+{
+       u32 adr, res;
+       u32 src, dst;
+
+       adr = GET_SWORD + ((u32)(PC) - BasePC);
+       PC++;
+       PRE_IO
+       READSX_WORD_F(adr, src)
+       if (src == 0)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#ifdef USE_CYCLONE_TIMING_DIV
+goto end;
+#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 end;
+#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 end;
+#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
+end:   m68kcontext.io_cycle_counter -= 50;
+#endif
+RET(116)
+}
+
+// DIVS
+OPCODE(0x81FB)
+{
+       u32 adr, res;
+       u32 src, dst;
+
+       adr = (u32)(PC) - BasePC;
+       DECODE_EXT_WORD
+       PRE_IO
+       READSX_WORD_F(adr, src)
+       if (src == 0)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#ifdef USE_CYCLONE_TIMING_DIV
+goto end;
+#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 end;
+#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 end;
+#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
+end:   m68kcontext.io_cycle_counter -= 50;
+#endif
+RET(118)
+}
+
+// DIVS
+OPCODE(0x81FC)
+{
+       u32 adr, res;
+       u32 src, dst;
+
+       FETCH_SWORD(src);
+       if (src == 0)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#ifdef USE_CYCLONE_TIMING_DIV
+goto end;
+#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 end;
+#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 end;
+#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
+end:   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)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#ifdef USE_CYCLONE_TIMING_DIV
+goto end;
+#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 end;
+#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 end;
+#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
+end:   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)
+       {
+               execute_exception(M68K_ZERO_DIVIDE_EX);
+#ifdef USE_CYCLONE_TIMING_DIV
+goto end;
+#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 end;
+#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 end;
+#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
+end:   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
+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)
+}
+
+// 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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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
+RET(10)
+}
+
+// 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
+RET(10)
+}
+
+// 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
+RET(12)
+}
+
+// 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
+RET(14)
+}
+
+// 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
+RET(16)
+}
+
+// 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
+RET(14)
+}
+
+// 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
+RET(18)
+}
+
+// SUBA
+OPCODE(0x90FA)
+{
+       u32 adr, res;
+       u32 src, dst;
+
+       adr = GET_SWORD + ((u32)(PC) - BasePC);
+       PC++;
+       PRE_IO
+       READSX_WORD_F(adr, src)
+       dst = AREGu32((Opcode >> 9) & 7);
+       res = dst - src;
+       AREG((Opcode >> 9) & 7) = res;
+       POST_IO
+RET(14)
+}
+
+// SUBA
+OPCODE(0x90FB)
+{
+       u32 adr, res;
+       u32 src, dst;
+
+       adr = (u32)(PC) - BasePC;
+       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
+RET(16)
+}
+
+// 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
+RET(10)
+}
+
+// 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
+RET(12)
+}
+
+// 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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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
+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)
+}
+
+// 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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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
+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)
+}
+
+// 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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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
+RET(10)
+}
+
+// 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
+RET(10)
+}
+
+// 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
+RET(12)
+}
+
+// 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
+RET(14)
+}
+
+// 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
+RET(16)
+}
+
+// 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
+RET(14)
+}
+
+// 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
+RET(18)
+}
+
+// ADDA
+OPCODE(0xD0FA)
+{
+       u32 adr, res;
+       u32 src, dst;
+
+       adr = GET_SWORD + ((u32)(PC) - BasePC);
+       PC++;
+       PRE_IO
+       READSX_WORD_F(adr, src)
+       dst = AREGu32((Opcode >> 9) & 7);
+       res = dst + src;
+       AREG((Opcode >> 9) & 7) = res;
+       POST_IO
+RET(14)
+}
+
+// ADDA
+OPCODE(0xD0FB)
+{
+       u32 adr, res;
+       u32 src, dst;
+
+       adr = (u32)(PC) - BasePC;
+       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
+RET(16)
+}
+
+// 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
+RET(10)
+}
+
+// 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
+RET(12)
+}
+
+// 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 + ((u32)(PC) - BasePC);
+       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 = (u32)(PC) - BasePC;
+       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)
+}
+