summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/arcompact/arcompact_execute.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/cpu/arcompact/arcompact_execute.c')
-rw-r--r--src/emu/cpu/arcompact/arcompact_execute.c981
1 files changed, 814 insertions, 167 deletions
diff --git a/src/emu/cpu/arcompact/arcompact_execute.c b/src/emu/cpu/arcompact/arcompact_execute.c
index 7fc4784745f..7445442761c 100644
--- a/src/emu/cpu/arcompact/arcompact_execute.c
+++ b/src/emu/cpu/arcompact/arcompact_execute.c
@@ -17,7 +17,7 @@ void arcompact_device::execute_run()
while (m_icount > 0)
{
- debugger_instruction_hook(this, m_pc<<1);
+ debugger_instruction_hook(this, m_pc);
// printf("new pc %04x\n", m_pc);
@@ -1123,6 +1123,8 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_00_00dasm(OPS_32)
return m_pc + (size>>0);
}
+
+
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_00_01dasm(OPS_32)
{
int size = 4;
@@ -1145,6 +1147,7 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_00_01dasm(OPS_32)
}
else
{
+ m_regs[REG_BLINK] = m_pc + (size >> 0);
return realaddress;
}
@@ -1182,12 +1185,111 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_01_01_00_helper(OPS_32, const char
// register - register cases
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_00(OPS_32) { return arcompact_01_01_00_helper( PARAMS, "BREQ"); }
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_01(OPS_32) { return arcompact_01_01_00_helper( PARAMS, "BRNE"); }
+
+#define BR_REGREG_SETUP \
+ /* Branch on Compare / Bit Test - Register-Register */ \
+ int size = 4; \
+ GET_01_01_01_BRANCH_ADDR; \
+ COMMON32_GET_creg; \
+ COMMON32_GET_breg; \
+ int n = (op & 0x00000020) >> 5; \
+ UINT32 b,c; \
+ if ((breg != LIMM_REG) && (creg != LIMM_REG)) \
+ { \
+ b = m_regs[breg]; \
+ c = m_regs[creg]; \
+ } \
+ else \
+ { \
+ UINT32 limm; \
+ GET_LIMM_32; \
+ size = 8; \
+ \
+ if (breg == LIMM_REG) \
+ b = limm; \
+ else \
+ b = m_regs[breg]; \
+ \
+ if (creg == LIMM_REG) \
+ c = limm; \
+ else \
+ c = m_regs[creg]; \
+ } \
+
+#define BR_TAKEJUMP \
+ /* take jump */ \
+ UINT32 realaddress = PC_ALIGNED32 + (address * 2); \
+ \
+ if (n) \
+ { \
+ m_delayactive = 1; \
+ m_delayjump = realaddress; \
+ m_delaylinks = 0; \
+ } \
+ else \
+ { \
+ return realaddress; \
+ } \
+
+
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_00(OPS_32) // register - register BREQ
+{
+ BR_REGREG_SETUP
+
+ // BREQ
+ if (b == c)
+ {
+ BR_TAKEJUMP
+ }
+
+ return m_pc + (size>>0);
+}
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_01(OPS_32) // register - register BRNE
+{
+ BR_REGREG_SETUP
+
+ // BRNE
+ if (b != c)
+ {
+ BR_TAKEJUMP
+ }
+
+ return m_pc + (size>>0);
+}
+
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_02(OPS_32) { return arcompact_01_01_00_helper( PARAMS, "BRLT"); }
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_03(OPS_32) { return arcompact_01_01_00_helper( PARAMS, "BRGE"); }
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_04(OPS_32) { return arcompact_01_01_00_helper( PARAMS, "BRLO"); }
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_05(OPS_32) { return arcompact_01_01_00_helper( PARAMS, "BRHS"); }
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_04(OPS_32) // register - register BRLO
+{
+ BR_REGREG_SETUP
+
+ // BRLO (unsigned operation)
+ if (b < c)
+ {
+ BR_TAKEJUMP
+ }
+
+ return m_pc + (size>>0);
+}
+
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_05(OPS_32) // register - register BRHS
+{
+ BR_REGREG_SETUP
+
+ // BRHS (unsigned operation)
+ if (b >= c)
+ {
+ BR_TAKEJUMP
+ }
+
+ return m_pc + (size>>0);
+}
+
+
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_0e(OPS_32) { return arcompact_01_01_00_helper( PARAMS, "BBIT0");}
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_0f(OPS_32) { return arcompact_01_01_00_helper( PARAMS, "BBIT1");}
@@ -1198,13 +1300,86 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_01_01_01_helper(OPS_32, const char
return m_pc + (size>>0);
}
+#define BR_REGIMM_SETUP \
+ int size = 4; \
+ GET_01_01_01_BRANCH_ADDR \
+ COMMON32_GET_u6; \
+ COMMON32_GET_breg; \
+ int n = (op & 0x00000020) >> 5; \
+ UINT32 b,c; \
+ c = u; \
+ /* comparing a LIMM to an immediate is pointless, is it a valid encoding? */ \
+ if ((breg != LIMM_REG)) \
+ { \
+ b = m_regs[breg]; \
+ } \
+ else \
+ { \
+ UINT32 limm; \
+ GET_LIMM_32; \
+ size = 8; \
+ b = limm; \
+ } \
+
+
// register -immediate cases
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_01_00(OPS_32) { return arcompact_01_01_01_helper(PARAMS, "BREQ"); }
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_01_01(OPS_32) { return arcompact_01_01_01_helper(PARAMS, "BRNE"); }
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_01_02(OPS_32) { return arcompact_01_01_01_helper(PARAMS, "BRLT"); }
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_01_00(OPS_32) // BREQ reg-imm
+{
+ BR_REGIMM_SETUP
+
+ // BREQ
+ if (b == c)
+ {
+ BR_TAKEJUMP
+ }
+
+ return m_pc + (size>>0);
+}
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_01_01(OPS_32) // BRNE reg-imm
+{
+ BR_REGIMM_SETUP
+
+ // BRNE
+ if (b != c)
+ {
+ BR_TAKEJUMP
+ }
+
+ return m_pc + (size>>0);
+}
+
+
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_01_02(OPS_32) // BRLT reg-imm
+{
+ BR_REGIMM_SETUP
+
+ // BRLT (signed operation)
+ if ((INT32)b < (INT32)c)
+ {
+ BR_TAKEJUMP
+ }
+
+ return m_pc + (size>>0);
+
+}
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_01_03(OPS_32) { return arcompact_01_01_01_helper(PARAMS, "BRGE"); }
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_01_04(OPS_32) { return arcompact_01_01_01_helper(PARAMS, "BRLO"); }
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_01_05(OPS_32) { return arcompact_01_01_01_helper(PARAMS, "BRHS"); }
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_01_05(OPS_32) // register - immediate BRHS
+{
+ BR_REGIMM_SETUP
+
+ // BRHS (unsigned operation)
+ if (b >= c)
+ {
+ BR_TAKEJUMP
+ }
+
+ return m_pc + (size>>0);
+}
+
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_01_0e(OPS_32) { return arcompact_01_01_01_helper(PARAMS, "BBIT0"); }
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_01_0f(OPS_32) { return arcompact_01_01_01_helper(PARAMS, "BBIT1"); }
@@ -1212,16 +1387,92 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_01_0f(OPS_32) { retur
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle02(OPS_32)
{
int size = 4;
+ UINT32 limm = 0;
+
+ int S = (op & 0x00008000) >> 15;// op &= ~0x00008000;
+ int s = (op & 0x00ff0000) >> 16;// op &= ~0x00ff0000;
+ if (S) s = -0x100 + s;
+
COMMON32_GET_breg;
+ COMMON32_GET_areg
+
+ int X = (op & 0x00000040) >> 6; //op &= ~0x00000040;
+ int Z = (op & 0x00000180) >> 7; //op &= ~0x00000180;
+ int a = (op & 0x00000600) >> 9; //op &= ~0x00000600;
+// int D = (op & 0x00000800) >> 11;// op &= ~0x00000800; // we don't use the data cache currently
+
+ UINT32 address = m_regs[breg];
- //UINT32 limm = 0;
if (breg == LIMM_REG)
{
- //GET_LIMM_32;
+ GET_LIMM_32;
size = 8;
+
+ address = limm;
+ }
+
+ // address manipulation
+ if ((a == 0) || (a == 1))
+ {
+ address = address + s;
+ }
+ else if (a == 2)
+ {
+ //address = address;
+ }
+ else if (a == 3)
+ {
+ if (Z == 0)
+ address = address + (s << 2);
+ else if (Z==2)
+ address = address + (s << 1);
+ else // Z == 1 and Z == 3 are invalid here
+ arcompact_fatal("illegal LD %08x (data size %d mode %d)", op, Z, a);
+ }
+
+ UINT32 readdata = 0;
+
+ // read data
+ if (Z == 0)
+ {
+ readdata = READ32(address >> 2);
+
+ if (X) // sign extend is not supported for long reads
+ arcompact_fatal("illegal LD %08x (data size %d mode %d with X)", op, Z, a);
+
+ }
+ else if (Z == 1)
+ {
+ readdata = READ8(address >> 0);
+
+ if (X) // todo
+ arcompact_fatal("illegal LD %08x (data size %d mode %d with X)", op, Z, a);
+
+ }
+ else if (Z == 2)
+ {
+ readdata = READ16(address >> 1);
+
+ if (X) // todo
+ arcompact_fatal("illegal LD %08x (data size %d mode %d with X)", op, Z, a);
+
+ }
+ else if (Z == 3)
+ { // Z == 3 is always illegal
+ arcompact_fatal("illegal LD %08x (data size %d mode %d)", op, Z, a);
+ }
+
+ m_regs[areg] = readdata;
+
+ // writeback / increment
+ if ((a == 1) || (a == 2))
+ {
+ if (breg==limm)
+ arcompact_fatal("illegal LD %08x (data size %d mode %d)", op, Z, a); // using the LIMM as the base register and an increment mode is illegal
+
+ m_regs[breg] = m_regs[breg] + s;
}
- arcompact_log("unimplemented LD %08x", op);
return m_pc + (size>>0);
}
@@ -1233,12 +1484,11 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle03(OPS_32)
int got_limm = 0;
int S = (op & 0x00008000) >> 15;
int s = (op & 0x00ff0000) >> 16;
+ if (S) s = -0x100 + s;
COMMON32_GET_breg;
COMMON32_GET_creg;
-
- if (S) s = -0x100 + s;
-
+
// int R = (op & 0x00000001) >> 0; // bit 0 is reserved
int Z = (op & 0x00000006) >> 1;
int a = (op & 0x00000018) >> 3;
@@ -1406,11 +1656,86 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_helper(OPS_32, const char
return m_pc + (size>>0);
}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_00(OPS_32)
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_00_p00(OPS_32)
{
- return arcompact_handle04_helper(PARAMS, opcodes_04[0x00], /*"ADD"*/ 0,0);
+ int size = 4;
+ UINT32 limm = 0;
+ int got_limm = 0;
+
+ COMMON32_GET_breg;
+ COMMON32_GET_F;
+ COMMON32_GET_creg
+ COMMON32_GET_areg
+
+ UINT32 b, c;
+
+ if (breg == LIMM_REG)
+ {
+ GET_LIMM_32;
+ size = 8;
+ got_limm = 1;
+ b = limm;
+ }
+ else
+ {
+ b = m_regs[breg];
+ }
+
+ if (creg == LIMM_REG)
+ {
+ if (!got_limm)
+ {
+ GET_LIMM_32;
+ size = 8;
+ }
+ c = limm;
+ }
+ else
+ {
+ c = m_regs[creg];
+ }
+
+ // todo: if areg = LIMM then there is no result (but since that register can never be read, I guess it doesn't matter if we store it there anyway?)
+ m_regs[areg] = b + c;
+
+ if (F)
+ {
+ arcompact_fatal("arcompact_handle04_00_p00 (ADD) (F set)\n"); // not yet supported
+ }
+
+ return m_pc + (size >> 0);
+}
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_00_p01(OPS_32)
+{
+ int size = 4;
+ arcompact_fatal("arcompact_handle04_00_p01 (ADD)\n");
+ return m_pc + (size >> 0);
+}
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_00_p10(OPS_32)
+{
+ int size = 4;
+ arcompact_fatal("arcompact_handle04_00_p10 (ADD)\n");
+ return m_pc + (size >> 0);
+}
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_00_p11_m0(OPS_32)
+{
+ int size = 4;
+ arcompact_fatal("arcompact_handle04_00_p11_m0 (ADD)\n");
+ return m_pc + (size >> 0);
+}
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_00_p11_m1(OPS_32)
+{
+ int size = 4;
+ arcompact_fatal("arcompact_handle04_00_p11_m1 (ADD)\n");
+ return m_pc + (size >> 0);
}
+
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_01(OPS_32)
{
return arcompact_handle04_helper(PARAMS, opcodes_04[0x01], /*"ADC"*/ 0,0);
@@ -1426,21 +1751,129 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_03(OPS_32)
return arcompact_handle04_helper(PARAMS, opcodes_04[0x03], /*"SBC"*/ 0,0);
}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_04(OPS_32)
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_04_p00(OPS_32)
+{
+ int size = 4;
+ UINT32 limm = 0;
+ int got_limm = 0;
+
+ COMMON32_GET_breg;
+ COMMON32_GET_F;
+ COMMON32_GET_creg
+ COMMON32_GET_areg
+
+ UINT32 b, c;
+
+ if (breg == LIMM_REG)
+ {
+ GET_LIMM_32;
+ size = 8;
+ got_limm = 1;
+ b = limm;
+ }
+ else
+ {
+ b = m_regs[breg];
+ }
+
+ if (creg == LIMM_REG)
+ {
+ if (!got_limm)
+ {
+ GET_LIMM_32;
+ size = 8;
+ }
+ c = limm;
+ }
+ else
+ {
+ c = m_regs[creg];
+ }
+ // todo: is and a, limm, limm valid? (it's pointless.)
+
+ // todo: if areg = LIMM then there is no result (but since that register can never be read, I guess it doesn't matter if we store it there anyway?)
+ m_regs[areg] = b & c;
+
+ if (F)
+ {
+ arcompact_fatal("arcompact_handle04_04_p00 (AND) (F set)\n"); // not yet supported
+ }
+
+ return m_pc + (size >> 0);}
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_04_p01(OPS_32)
+{
+ int size = 4;
+ arcompact_fatal("arcompact_handle04_04_p01 (AND)\n");
+ return m_pc + (size >> 0);
+}
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_04_p10(OPS_32)
{
- return arcompact_handle04_helper(PARAMS, opcodes_04[0x04], /*"AND"*/ 0,0);
+ int size = 4;
+ arcompact_fatal("arcompact_handle04_04_p10 (AND)\n");
+ return m_pc + (size >> 0);
}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_04_p11_m0(OPS_32)
+{
+ int size = 4;
+ arcompact_fatal("arcompact_handle04_04_p11_m0 (AND)\n");
+ return m_pc + (size >> 0);
+}
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_04_p11_m1(OPS_32)
+{
+ int size = 4;
+ arcompact_fatal("arcompact_handle04_04_p11_m1 (AND)\n");
+ return m_pc + (size >> 0);
+}
+
+
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_05(OPS_32)
{
return arcompact_handle04_helper(PARAMS, opcodes_04[0x05], /*"OR"*/ 0,0);
}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_06(OPS_32)
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_06_p00(OPS_32)
{
- return arcompact_handle04_helper(PARAMS, opcodes_04[0x06], /*"BIC"*/ 0,0);
+ int size = 4;
+ arcompact_fatal("arcompact_handle04_06_p00 (BIC)\n");
+ return m_pc + (size >> 0);
+
}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_06_p01(OPS_32)
+{
+ int size = 4;
+ arcompact_fatal("arcompact_handle04_06_p01 (BIC)\n");
+ return m_pc + (size >> 0);
+}
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_06_p10(OPS_32)
+{
+ int size = 4;
+ arcompact_fatal("arcompact_handle04_06_p10 (BIC)\n");
+ return m_pc + (size >> 0);
+}
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_06_p11_m0(OPS_32)
+{
+ int size = 4;
+ arcompact_fatal("arcompact_handle04_06_p11_m0 (BIC)\n");
+ return m_pc + (size >> 0);
+}
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_06_p11_m1(OPS_32)
+{
+ int size = 4;
+ arcompact_fatal("arcompact_handle04_06_p11_m1 (BIC)\n");
+ return m_pc + (size >> 0);
+}
+
+
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_07(OPS_32)
{
return arcompact_handle04_helper(PARAMS, opcodes_04[0x07], /*"XOR"*/ 0,0);
@@ -2017,7 +2450,7 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_3x_helper(OPS_32, int dsi
{
}
- arcompact_log("unimplemented LD %08x", op);
+ arcompact_log("unimplemented LD %08x (type 04_3x)", op);
return m_pc + (size>>0);
}
@@ -2108,37 +2541,37 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_2f_08(OPS_32) { return a
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle06(OPS_32)
{
arcompact_log("op a,b,c (06 ARC ext) (%08x)", op );
- return m_pc + (4 >> 0);;
+ return m_pc + (4 >> 0);
}
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle07(OPS_32)
{
arcompact_log("op a,b,c (07 User ext) (%08x)", op );
- return m_pc + (4 >> 0);;
+ return m_pc + (4 >> 0);
}
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle08(OPS_32)
{
arcompact_log("op a,b,c (08 User ext) (%08x)", op );
- return m_pc + (4 >> 0);;
+ return m_pc + (4 >> 0);
}
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle09(OPS_32)
{
arcompact_log("op a,b,c (09 Market ext) (%08x)", op );
- return m_pc + (4 >> 0);;
+ return m_pc + (4 >> 0);
}
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0a(OPS_32)
{
arcompact_log("op a,b,c (0a Market ext) (%08x)", op );
- return m_pc + (4 >> 0);;
+ return m_pc + (4 >> 0);
}
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0b(OPS_32)
{
arcompact_log("op a,b,c (0b Market ext) (%08x)", op );
- return m_pc + (4 >> 0);;
+ return m_pc + (4 >> 0);
}
@@ -2146,7 +2579,7 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0b(OPS_32)
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0c_helper(OPS_16, const char* optext)
{
arcompact_log("unimplemented %s %04x (0x0c group)", optext, op);
- return m_pc + (2 >> 0);;
+ return m_pc + (2 >> 0);
}
@@ -2165,16 +2598,28 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0c_02(OPS_16)
return arcompact_handle0c_helper(PARAMS, "LDW_S");
}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0c_03(OPS_16)
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0c_03(OPS_16) // ADD_S a <- b + c
{
- return arcompact_handle0c_helper(PARAMS, "ADD_S");
+ int areg, breg, creg;
+
+ COMMON16_GET_areg;
+ COMMON16_GET_breg;
+ COMMON16_GET_creg;
+
+ REG_16BIT_RANGE(areg);
+ REG_16BIT_RANGE(breg);
+ REG_16BIT_RANGE(creg);
+
+ m_regs[areg] = m_regs[breg] + m_regs[creg];
+
+ return m_pc + (2 >> 0);
}
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0d_helper(OPS_16, const char* optext)
{
- arcompact_log("unimplemented %s %04x", optext, op);
- return m_pc + (2 >> 0);;
+ arcompact_log("unimplemented %s %04x (0x0d group)", optext, op);
+ return m_pc + (2 >> 0);
}
@@ -2218,7 +2663,7 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0e_0x_helper(OPS_16, const c
}
- arcompact_log("unimplemented %s %04x", optext, op);
+ arcompact_log("unimplemented %s %04x (0x0e_0x group)", optext, op);
return m_pc+ (size>>0);
@@ -2266,9 +2711,23 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0e_02(OPS_16)
return arcompact_handle0e_0x_helper(PARAMS, "CMP_S", 0);
}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0e_03(OPS_16)
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0e_03(OPS_16) // MOV_S h <- b
{
- return arcompact_handle0e_0x_helper(PARAMS, "MOV_S (0e_03 type)", 1);
+ int h,breg;
+ int size = 2;
+
+ GROUP_0e_GET_h;
+ COMMON16_GET_breg;
+ REG_16BIT_RANGE(breg);
+
+ if (h == LIMM_REG) // no result..
+ {
+
+ }
+
+ m_regs[h] = m_regs[breg];
+
+ return m_pc+ (size>>0);
}
@@ -2276,7 +2735,7 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0e_03(OPS_16)
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_0x_helper(OPS_16, const char* optext)
{
arcompact_log("unimplemented %s %04x", optext, op);
- return m_pc + (2 >> 0);;
+ return m_pc + (2 >> 0);
}
@@ -2284,19 +2743,39 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_0x_helper(OPS_16, cons
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_00(OPS_16) { return arcompact_handle0f_00_0x_helper(PARAMS, "J_S"); }
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_01(OPS_16) { return arcompact_handle0f_00_0x_helper(PARAMS, "J_S.D"); }
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_02(OPS_16) { return arcompact_handle0f_00_0x_helper(PARAMS, "JL_S"); }
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_03(OPS_16) { return arcompact_handle0f_00_0x_helper(PARAMS, "JL_S.D"); }
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_03(OPS_16) // JL_S.D
+{
+ int breg;
+
+ COMMON16_GET_breg;
+ REG_16BIT_RANGE(breg);
+
+ m_delayactive = 1;
+ m_delayjump = m_regs[breg];
+ m_delaylinks = 1;
+
+ return m_pc + (2 >> 0);
+}
+
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_06(OPS_16) { return arcompact_handle0f_00_0x_helper(PARAMS, "SUB_S.NE"); }
// Zero parameters (ZOP)
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_07_00(OPS_16) { arcompact_log("NOP_S"); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_07_01(OPS_16) { arcompact_log("UNIMP_S"); return m_pc + (2 >> 0);;} // Unimplemented Instruction, same as illegal, but recommended to fill blank space
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_07_04(OPS_16) { arcompact_log("JEQ_S [blink]"); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_07_05(OPS_16) { arcompact_log("JNE_S [blink]"); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_07_06(OPS_16) { arcompact_log("J_S [blink]"); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_07_07(OPS_16) { arcompact_log("J_S.D [blink]"); return m_pc + (2 >> 0);;}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_07_00(OPS_16) { arcompact_log("NOP_S"); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_07_01(OPS_16) { arcompact_log("UNIMP_S"); return m_pc + (2 >> 0);} // Unimplemented Instruction, same as illegal, but recommended to fill blank space
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_07_04(OPS_16) { arcompact_log("JEQ_S [blink]"); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_07_05(OPS_16) { arcompact_log("JNE_S [blink]"); return m_pc + (2 >> 0);}
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_07_06(OPS_16) // J_S [blink]
+{
+ return m_regs[REG_BLINK];
+}
+
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_07_07(OPS_16) { arcompact_log("J_S.D [blink]"); return m_pc + (2 >> 0);}
@@ -2304,8 +2783,8 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_07_07(OPS_16) { arcom
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_0x_helper(OPS_16, const char* optext, int nodst)
{
- arcompact_log("unimplemented %s %04x", optext, op);
- return m_pc + (2 >> 0);;
+ arcompact_log("unimplemented %s %04x (0xf_0x group)", optext, op);
+ return m_pc + (2 >> 0);
}
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_02(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "SUB_S",0); }
@@ -2317,7 +2796,23 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_0b(OPS_16) { return arco
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_0c(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "MUL64_S",2); } // actual destination is special multiply registers
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_0d(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "SEXB_S",0); }
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_0e(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "SEXW_S",0); }
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_0f(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "EXTB_S",0); }
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_0f(OPS_16) // EXTB_S
+{
+ int breg, creg;
+
+ COMMON16_GET_breg;
+ COMMON16_GET_creg;
+
+ REG_16BIT_RANGE(breg);
+ REG_16BIT_RANGE(creg);
+
+ m_regs[breg] = m_regs[creg] & 0xff;
+
+ return m_pc + (2 >> 0);
+
+}
+
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_10(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "EXTW_S",0); }
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_11(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "ABS_S",0); }
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_12(OPS_16) { return arcompact_handle0f_0x_helper(PARAMS, "NOT_S",0); }
@@ -2336,20 +2831,20 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_1d(OPS_16) { return arco
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_1e(OPS_16) // special
{
arcompact_log("unimplemented TRAP_S %04x", op);
- return m_pc + (2 >> 0);;
+ return m_pc + (2 >> 0);
}
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_1f(OPS_16) // special
{
arcompact_log("unimplemented BRK_S %04x", op);
- return m_pc + (2 >> 0);;
+ return m_pc + (2 >> 0);
}
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle_ld_helper(OPS_16, const char* optext, int shift, int swap)
{
arcompact_log("unimplemented %s %04x (ld/st group %d %d)", optext, op, shift, swap);
- return m_pc + (2 >> 0);;
+ return m_pc + (2 >> 0);
}
@@ -2416,13 +2911,24 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle16(OPS_16)
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle_l7_0x_helper(OPS_16, const char* optext)
{
- arcompact_log("unimplemented %s %04x", optext, op);
- return m_pc + (2 >> 0);;
+ arcompact_log("unimplemented %s %04x (l7_0x group)", optext, op);
+ return m_pc + (2 >> 0);
}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle17_00(OPS_16)
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle17_00(OPS_16) // ASL_S b, b, u5
{
- return arcompact_handle_l7_0x_helper(PARAMS, "ASL_S");
+ int breg, u;
+
+ COMMON16_GET_breg;
+ COMMON16_GET_u5;
+
+ REG_16BIT_RANGE(breg);
+
+ // only bottom 5 bits are used if ASL operations, we only have 5 bits anyway here
+ m_regs[breg] = m_regs[breg] << (u&0x1f);
+
+ return m_pc + (2 >> 0);
+
}
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle17_01(OPS_16)
@@ -2430,9 +2936,21 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle17_01(OPS_16)
return arcompact_handle_l7_0x_helper(PARAMS, "LSR_S");
}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle17_02(OPS_16)
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle17_02(OPS_16) // ASR_S b,b,u5
{
- return arcompact_handle_l7_0x_helper(PARAMS, "ASR_S");
+ int breg, u;
+
+ COMMON16_GET_breg;
+ COMMON16_GET_u5;
+
+ REG_16BIT_RANGE(breg);
+
+ // only bottom 5 bits are used if ASR operations, we only have 5 bits anyway here
+ INT32 temp = (INT32)m_regs[breg]; // treat it as a signed value, so sign extension occurs during shift
+
+ m_regs[breg] = temp >> (u&0x1f);
+
+ return m_pc + (2 >> 0);
}
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle17_03(OPS_16)
@@ -2463,7 +2981,7 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle17_07(OPS_16)
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_0x_helper(OPS_16, const char* optext, int st)
{
arcompact_log("unimplemented %s %04x (0x18_0x group)", optext, op);
- return m_pc + (2 >> 0);;
+ return m_pc + (2 >> 0);
}
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_00(OPS_16)
@@ -2494,31 +3012,48 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_04(OPS_16)
// op bits remaining for 0x18_05_xx subgroups 0x001f
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_05_00(OPS_16)
{
- arcompact_log("unimplemented ADD_S SP, SP %04x", op);
- return m_pc + (2 >> 0);;
+ int u;
+ COMMON16_GET_u5;
+
+ m_regs[REG_SP] = m_regs[REG_SP] + (u << 2);
+
+ return m_pc + (2 >> 0);
}
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_05_01(OPS_16)
{
- arcompact_log("unimplemented SUB_S SP, SP %04x", op);
- return m_pc + (2 >> 0);;
+ int u;
+ COMMON16_GET_u5;
+
+ m_regs[REG_SP] = m_regs[REG_SP] - (u << 2);
+
+ return m_pc + (2 >> 0);
}
// op bits remaining for 0x18_06_xx subgroups 0x0700
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_01(OPS_16)
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_01(OPS_16) // POP_S b
{
- arcompact_log("unimplemented POP_S %04x", op);
- return m_pc + (2 >> 0);;
+ int breg;
+ COMMON16_GET_breg;
+ REG_16BIT_RANGE(breg);
+
+ m_regs[breg] = READ32(m_regs[REG_SP] >> 2);
+ m_regs[REG_SP] += 4;
+
+ return m_pc + (2 >> 0);
}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_11(OPS_16)
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_11(OPS_16) // POP_S blink
{
- arcompact_log("unimplemented POP_S [BLINK] %04x", op);
- return m_pc + (2 >> 0);;
+ // breg bits are reserved
+ m_regs[REG_BLINK] = READ32(m_regs[REG_SP] >> 2 );
+ m_regs[REG_SP] += 4;
+
+ return m_pc + (2 >> 0);
}
// op bits remaining for 0x18_07_xx subgroups 0x0700
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_01(OPS_16)
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_01(OPS_16) // PUSH_S b
{
int breg;
COMMON16_GET_breg;
@@ -2532,7 +3067,7 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_01(OPS_16)
}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_11(OPS_16)
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_11(OPS_16) // PUSH_S [blink]
{
// breg bits are reserved
@@ -2547,7 +3082,7 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_11(OPS_16)
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle19_0x_helper(OPS_16, const char* optext, int shift, int format)
{
arcompact_log("unimplemented %s %04x (0x19_0x group)", optext, op);
- return m_pc + (2 >> 0);;
+ return m_pc + (2 >> 0);
}
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle19_00(OPS_16) { return arcompact_handle19_0x_helper(PARAMS, "LD_S", 2, 0); }
@@ -2558,54 +3093,161 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle19_03(OPS_16) { return arco
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1a(OPS_16)
{
arcompact_log("unimplemented MOV_S x, [PCL, x] %04x", op);
- return m_pc + (2 >> 0);;
+ return m_pc + (2 >> 0);
}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1b(OPS_16)
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1b(OPS_16) // MOV_S b, u8
{
- arcompact_log("unimplemented MOV_S (1b type) %04x", op);
- return m_pc + (2 >> 0);;
+ int breg;
+ UINT32 u;
+ COMMON16_GET_breg;
+ COMMON16_GET_u8;
+ REG_16BIT_RANGE(breg);
+
+ m_regs[breg] = u;
+
+ return m_pc + (2 >> 0);
}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1c_00(OPS_16)
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1c_00(OPS_16) // ADD_S b, b, u7
{
- arcompact_log("unimplemented ADD_S %04x", op);
- return m_pc + (2 >> 0);;
+ int breg;
+ UINT32 u;
+ COMMON16_GET_breg;
+ COMMON16_GET_u7;
+ REG_16BIT_RANGE(breg);
+
+ m_regs[breg] = m_regs[breg] + u;
+
+ return m_pc + (2 >> 0);
}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1c_01(OPS_16)
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1c_01(OPS_16) // CMP b, u7
{
- arcompact_log("unimplemented CMP_S %04x", op);
- return m_pc + (2 >> 0);;
+ int breg;
+ UINT32 u;
+ COMMON16_GET_breg;
+ COMMON16_GET_u7;
+ REG_16BIT_RANGE(breg);
+
+ // flag setting ALWAYS occurs on CMP operations, even 16-bit ones even without a .F opcode type
+
+ // TODO: verify this flag setting logic
+
+ // unsigned checks
+ if (m_regs[breg] == u)
+ {
+ STATUS32_SET_Z;
+ }
+ else
+ {
+ STATUS32_CLEAR_Z;
+ }
+
+ if (m_regs[breg] < u)
+ {
+ STATUS32_SET_C;
+ }
+ else
+ {
+ STATUS32_CLEAR_C;
+ }
+ // signed checks
+ INT32 temp = (INT32)m_regs[breg] - (INT32)u;
+
+ if (temp < 0)
+ {
+ STATUS32_SET_N;
+ }
+ else
+ {
+ STATUS32_CLEAR_N;
+ }
+
+ // if signs of source values don't match, and sign of result doesn't match the first source value, then we've overflowed?
+ if ((m_regs[breg] & 0x80000000) != (u & 0x80000000))
+ {
+ if ((m_regs[breg] & 0x80000000) != (temp & 0x80000000))
+ {
+ STATUS32_SET_V;
+ }
+ else
+ {
+ STATUS32_CLEAR_V;
+ }
+ }
+
+ // only sets flags, no result written
+
+ return m_pc + (2 >> 0);
}
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1d_helper(OPS_16, const char* optext)
{
arcompact_log("unimplemented %s %04x", optext, op);
- return m_pc + (2 >> 0);;
+ return m_pc + (2 >> 0);
+}
+
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1d_00(OPS_16) // BREQ b,0,s8
+{
+ int breg;
+ COMMON16_GET_breg;
+ REG_16BIT_RANGE(breg);
+
+ if (!m_regs[breg])
+ {
+ int s = (op & 0x007f) >> 0; op &= ~0x007f;
+ if (s & 0x40) s = -0x40 + (s & 0x3f);
+ UINT32 realaddress = PC_ALIGNED32 + (s * 2);
+ //m_regs[REG_BLINK] = m_pc + (2 >> 0); // don't link
+ return realaddress;
+ }
+
+ return m_pc + (2 >> 0);
}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1d_00(OPS_16) { return arcompact_handle1d_helper(PARAMS,"BREQ_S"); }
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1d_01(OPS_16) { return arcompact_handle1d_helper(PARAMS,"BRNE_S"); }
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_0x_helper(OPS_16, const char* optext)
{
- arcompact_log("unimplemented %s %04x", optext, op);
- return m_pc + (2 >> 0);;
+ arcompact_log("unimplemented %s %04x (1e_0x type)", optext, op);
+ return m_pc + (2 >> 0);
}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_00(OPS_16) { return arcompact_handle1e_0x_helper(PARAMS, "BL_S"); }
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_00(OPS_16) // B_S s10 (branch always)
+{
+ int s = (op & 0x01ff) >> 0; op &= ~0x01ff;
+ if (s & 0x100) s = -0x100 + (s & 0xff);
+ UINT32 realaddress = PC_ALIGNED32 + (s * 2);
+ //m_regs[REG_BLINK] = m_pc + (2 >> 0); // don't link
+ return realaddress;
+}
+
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_01(OPS_16) { return arcompact_handle1e_0x_helper(PARAMS, "BEQ_S"); }
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_02(OPS_16) { return arcompact_handle1e_0x_helper(PARAMS, "BNE_S"); }
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_02(OPS_16) // BNE_S s10 (branch if zero bit isn't set)
+{
+ if (!STATUS32_CHECK_Z)
+ {
+ int s = (op & 0x01ff) >> 0; op &= ~0x01ff;
+ if (s & 0x100) s = -0x100 + (s & 0xff);
+ UINT32 realaddress = PC_ALIGNED32 + (s * 2);
+ //m_regs[REG_BLINK] = m_pc + (2 >> 0); // don't link
+ return realaddress;
+ }
+
+ return m_pc + (2 >> 0);
+}
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_03_0x_helper(OPS_16, const char* optext)
{
arcompact_log("unimplemented %s %04x", optext, op);
- return m_pc + (2 >> 0);;
+ return m_pc + (2 >> 0);
}
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_03_00(OPS_16) { return arcompact_handle1e_03_0x_helper(PARAMS, "BGT_S"); }
@@ -2617,10 +3259,15 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_03_05(OPS_16) { return a
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_03_06(OPS_16) { return arcompact_handle1e_03_0x_helper(PARAMS, "BLO_S"); }
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_03_07(OPS_16) { return arcompact_handle1e_03_0x_helper(PARAMS, "BLS_S"); }
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1f(OPS_16)
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1f(OPS_16) // BL_S s13
{
- arcompact_log("unimplemented BL_S %04x", op);
- return m_pc + (2 >> 0);;
+ int s = (op & 0x07ff) >> 0; op &= ~0x07ff;
+ if (s & 0x400) s = -0x400 + (s & 0x3ff);
+
+ UINT32 realaddress = PC_ALIGNED32 + (s * 4);
+
+ m_regs[REG_BLINK] = m_pc + (2 >> 0);
+ return realaddress;
}
/************************************************************************************************************************************
@@ -2960,83 +3607,83 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_3d(OPS_32) { arcompact_f
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_3e(OPS_32) { arcompact_fatal("<illegal 0x05_3e> (%08x)", op); return m_pc + (4 >> 0);}
ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_3f(OPS_32) { arcompact_fatal("<illegal 0x05_3f> (%08x)", op); return m_pc + (4 >> 0);}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_04(OPS_16) { arcompact_fatal("<illegal 0x0f_00_00> (%08x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_05(OPS_16) { arcompact_fatal("<illegal 0x0f_00_00> (%08x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_07_02(OPS_16) { arcompact_fatal("<illegal 0x0f_00_07_02> (%08x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_07_03(OPS_16) { arcompact_fatal("<illegal 0x0f_00_07_03> (%08x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_01(OPS_16) { arcompact_fatal("<illegal 0x0f_01> (%08x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_03(OPS_16) { arcompact_fatal("<illegal 0x0f_03> (%08x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_08(OPS_16) { arcompact_fatal("<illegal 0x0f_08> (%08x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_09(OPS_16) { arcompact_fatal("<illegal 0x0f_09> (%08x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_0a(OPS_16) { arcompact_fatal("<illegal 0x0f_0a> (%08x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_17(OPS_16) { arcompact_fatal("<illegal 0x0f_17> (%08x)", op); return m_pc + (2 >> 0);;}
-
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_05_02(OPS_16) { arcompact_fatal("<illegal 0x18_05_02> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_05_03(OPS_16) { arcompact_fatal("<illegal 0x18_05_03> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_05_04(OPS_16) { arcompact_fatal("<illegal 0x18_05_04> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_05_05(OPS_16) { arcompact_fatal("<illegal 0x18_05_05> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_05_06(OPS_16) { arcompact_fatal("<illegal 0x18_05_06> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_05_07(OPS_16) { arcompact_fatal("<illegal 0x18_05_07> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_00(OPS_16) { arcompact_fatal("<illegal 0x18_06_00> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_02(OPS_16) { arcompact_fatal("<illegal 0x18_06_02> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_03(OPS_16) { arcompact_fatal("<illegal 0x18_06_03> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_04(OPS_16) { arcompact_fatal("<illegal 0x18_06_04> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_05(OPS_16) { arcompact_fatal("<illegal 0x18_06_05> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_06(OPS_16) { arcompact_fatal("<illegal 0x18_06_06> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_07(OPS_16) { arcompact_fatal("<illegal 0x18_06_07> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_08(OPS_16) { arcompact_fatal("<illegal 0x18_06_08> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_09(OPS_16) { arcompact_fatal("<illegal 0x18_06_09> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_0a(OPS_16) { arcompact_fatal("<illegal 0x18_06_0a> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_0b(OPS_16) { arcompact_fatal("<illegal 0x18_06_0b> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_0c(OPS_16) { arcompact_fatal("<illegal 0x18_06_0c> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_0d(OPS_16) { arcompact_fatal("<illegal 0x18_06_0d> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_0e(OPS_16) { arcompact_fatal("<illegal 0x18_06_0e> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_0f(OPS_16) { arcompact_fatal("<illegal 0x18_06_0f> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_10(OPS_16) { arcompact_fatal("<illegal 0x18_06_10> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_12(OPS_16) { arcompact_fatal("<illegal 0x18_06_12> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_13(OPS_16) { arcompact_fatal("<illegal 0x18_06_13> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_14(OPS_16) { arcompact_fatal("<illegal 0x18_06_14> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_15(OPS_16) { arcompact_fatal("<illegal 0x18_06_15> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_16(OPS_16) { arcompact_fatal("<illegal 0x18_06_16> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_17(OPS_16) { arcompact_fatal("<illegal 0x18_06_17> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_18(OPS_16) { arcompact_fatal("<illegal 0x18_06_18> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_19(OPS_16) { arcompact_fatal("<illegal 0x18_06_19> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_1a(OPS_16) { arcompact_fatal("<illegal 0x18_06_1a> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_1b(OPS_16) { arcompact_fatal("<illegal 0x18_06_1b> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_1c(OPS_16) { arcompact_fatal("<illegal 0x18_06_1c> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_1d(OPS_16) { arcompact_fatal("<illegal 0x18_06_1d> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_1e(OPS_16) { arcompact_fatal("<illegal 0x18_06_1e> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_1f(OPS_16) { arcompact_fatal("<illegal 0x18_06_1f> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_00(OPS_16) { arcompact_fatal("<illegal 0x18_07_00> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_02(OPS_16) { arcompact_fatal("<illegal 0x18_07_02> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_03(OPS_16) { arcompact_fatal("<illegal 0x18_07_03> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_04(OPS_16) { arcompact_fatal("<illegal 0x18_07_04> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_05(OPS_16) { arcompact_fatal("<illegal 0x18_07_05> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_06(OPS_16) { arcompact_fatal("<illegal 0x18_07_06> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_07(OPS_16) { arcompact_fatal("<illegal 0x18_07_07> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_08(OPS_16) { arcompact_fatal("<illegal 0x18_07_08> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_09(OPS_16) { arcompact_fatal("<illegal 0x18_07_09> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_0a(OPS_16) { arcompact_fatal("<illegal 0x18_07_0a> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_0b(OPS_16) { arcompact_fatal("<illegal 0x18_07_0b> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_0c(OPS_16) { arcompact_fatal("<illegal 0x18_07_0c> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_0d(OPS_16) { arcompact_fatal("<illegal 0x18_07_0d> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_0e(OPS_16) { arcompact_fatal("<illegal 0x18_07_0e> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_0f(OPS_16) { arcompact_fatal("<illegal 0x18_07_0f> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_10(OPS_16) { arcompact_fatal("<illegal 0x18_07_10> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_12(OPS_16) { arcompact_fatal("<illegal 0x18_07_12> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_13(OPS_16) { arcompact_fatal("<illegal 0x18_07_13> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_14(OPS_16) { arcompact_fatal("<illegal 0x18_07_14> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_15(OPS_16) { arcompact_fatal("<illegal 0x18_07_15> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_16(OPS_16) { arcompact_fatal("<illegal 0x18_07_16> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_17(OPS_16) { arcompact_fatal("<illegal 0x18_07_17> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_18(OPS_16) { arcompact_fatal("<illegal 0x18_07_18> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_19(OPS_16) { arcompact_fatal("<illegal 0x18_07_19> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_1a(OPS_16) { arcompact_fatal("<illegal 0x18_07_1a> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_1b(OPS_16) { arcompact_fatal("<illegal 0x18_07_1b> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_1c(OPS_16) { arcompact_fatal("<illegal 0x18_07_1c> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_1d(OPS_16) { arcompact_fatal("<illegal 0x18_07_1d> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_1e(OPS_16) { arcompact_fatal("<illegal 0x18_07_1e> (%04x)", op); return m_pc + (2 >> 0);;}
-ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_1f(OPS_16) { arcompact_fatal("<illegal 0x18_07_1f> (%04x)", op); return m_pc + (2 >> 0);;}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_04(OPS_16) { arcompact_fatal("<illegal 0x0f_00_00> (%08x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_05(OPS_16) { arcompact_fatal("<illegal 0x0f_00_00> (%08x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_07_02(OPS_16) { arcompact_fatal("<illegal 0x0f_00_07_02> (%08x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_07_03(OPS_16) { arcompact_fatal("<illegal 0x0f_00_07_03> (%08x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_01(OPS_16) { arcompact_fatal("<illegal 0x0f_01> (%08x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_03(OPS_16) { arcompact_fatal("<illegal 0x0f_03> (%08x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_08(OPS_16) { arcompact_fatal("<illegal 0x0f_08> (%08x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_09(OPS_16) { arcompact_fatal("<illegal 0x0f_09> (%08x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_0a(OPS_16) { arcompact_fatal("<illegal 0x0f_0a> (%08x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_17(OPS_16) { arcompact_fatal("<illegal 0x0f_17> (%08x)", op); return m_pc + (2 >> 0);}
+
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_05_02(OPS_16) { arcompact_fatal("<illegal 0x18_05_02> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_05_03(OPS_16) { arcompact_fatal("<illegal 0x18_05_03> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_05_04(OPS_16) { arcompact_fatal("<illegal 0x18_05_04> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_05_05(OPS_16) { arcompact_fatal("<illegal 0x18_05_05> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_05_06(OPS_16) { arcompact_fatal("<illegal 0x18_05_06> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_05_07(OPS_16) { arcompact_fatal("<illegal 0x18_05_07> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_00(OPS_16) { arcompact_fatal("<illegal 0x18_06_00> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_02(OPS_16) { arcompact_fatal("<illegal 0x18_06_02> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_03(OPS_16) { arcompact_fatal("<illegal 0x18_06_03> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_04(OPS_16) { arcompact_fatal("<illegal 0x18_06_04> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_05(OPS_16) { arcompact_fatal("<illegal 0x18_06_05> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_06(OPS_16) { arcompact_fatal("<illegal 0x18_06_06> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_07(OPS_16) { arcompact_fatal("<illegal 0x18_06_07> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_08(OPS_16) { arcompact_fatal("<illegal 0x18_06_08> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_09(OPS_16) { arcompact_fatal("<illegal 0x18_06_09> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_0a(OPS_16) { arcompact_fatal("<illegal 0x18_06_0a> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_0b(OPS_16) { arcompact_fatal("<illegal 0x18_06_0b> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_0c(OPS_16) { arcompact_fatal("<illegal 0x18_06_0c> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_0d(OPS_16) { arcompact_fatal("<illegal 0x18_06_0d> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_0e(OPS_16) { arcompact_fatal("<illegal 0x18_06_0e> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_0f(OPS_16) { arcompact_fatal("<illegal 0x18_06_0f> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_10(OPS_16) { arcompact_fatal("<illegal 0x18_06_10> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_12(OPS_16) { arcompact_fatal("<illegal 0x18_06_12> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_13(OPS_16) { arcompact_fatal("<illegal 0x18_06_13> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_14(OPS_16) { arcompact_fatal("<illegal 0x18_06_14> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_15(OPS_16) { arcompact_fatal("<illegal 0x18_06_15> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_16(OPS_16) { arcompact_fatal("<illegal 0x18_06_16> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_17(OPS_16) { arcompact_fatal("<illegal 0x18_06_17> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_18(OPS_16) { arcompact_fatal("<illegal 0x18_06_18> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_19(OPS_16) { arcompact_fatal("<illegal 0x18_06_19> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_1a(OPS_16) { arcompact_fatal("<illegal 0x18_06_1a> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_1b(OPS_16) { arcompact_fatal("<illegal 0x18_06_1b> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_1c(OPS_16) { arcompact_fatal("<illegal 0x18_06_1c> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_1d(OPS_16) { arcompact_fatal("<illegal 0x18_06_1d> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_1e(OPS_16) { arcompact_fatal("<illegal 0x18_06_1e> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_06_1f(OPS_16) { arcompact_fatal("<illegal 0x18_06_1f> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_00(OPS_16) { arcompact_fatal("<illegal 0x18_07_00> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_02(OPS_16) { arcompact_fatal("<illegal 0x18_07_02> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_03(OPS_16) { arcompact_fatal("<illegal 0x18_07_03> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_04(OPS_16) { arcompact_fatal("<illegal 0x18_07_04> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_05(OPS_16) { arcompact_fatal("<illegal 0x18_07_05> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_06(OPS_16) { arcompact_fatal("<illegal 0x18_07_06> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_07(OPS_16) { arcompact_fatal("<illegal 0x18_07_07> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_08(OPS_16) { arcompact_fatal("<illegal 0x18_07_08> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_09(OPS_16) { arcompact_fatal("<illegal 0x18_07_09> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_0a(OPS_16) { arcompact_fatal("<illegal 0x18_07_0a> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_0b(OPS_16) { arcompact_fatal("<illegal 0x18_07_0b> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_0c(OPS_16) { arcompact_fatal("<illegal 0x18_07_0c> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_0d(OPS_16) { arcompact_fatal("<illegal 0x18_07_0d> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_0e(OPS_16) { arcompact_fatal("<illegal 0x18_07_0e> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_0f(OPS_16) { arcompact_fatal("<illegal 0x18_07_0f> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_10(OPS_16) { arcompact_fatal("<illegal 0x18_07_10> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_12(OPS_16) { arcompact_fatal("<illegal 0x18_07_12> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_13(OPS_16) { arcompact_fatal("<illegal 0x18_07_13> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_14(OPS_16) { arcompact_fatal("<illegal 0x18_07_14> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_15(OPS_16) { arcompact_fatal("<illegal 0x18_07_15> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_16(OPS_16) { arcompact_fatal("<illegal 0x18_07_16> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_17(OPS_16) { arcompact_fatal("<illegal 0x18_07_17> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_18(OPS_16) { arcompact_fatal("<illegal 0x18_07_18> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_19(OPS_16) { arcompact_fatal("<illegal 0x18_07_19> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_1a(OPS_16) { arcompact_fatal("<illegal 0x18_07_1a> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_1b(OPS_16) { arcompact_fatal("<illegal 0x18_07_1b> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_1c(OPS_16) { arcompact_fatal("<illegal 0x18_07_1c> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_1d(OPS_16) { arcompact_fatal("<illegal 0x18_07_1d> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_1e(OPS_16) { arcompact_fatal("<illegal 0x18_07_1e> (%04x)", op); return m_pc + (2 >> 0);}
+ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_1f(OPS_16) { arcompact_fatal("<illegal 0x18_07_1f> (%04x)", op); return m_pc + (2 >> 0);}