From 6caef2579a1490f05d28bcede731cbdd45fc5c65 Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Wed, 5 Jul 2017 11:44:49 +0200 Subject: dvdisasm: Overhaul [O. Galibert] Disassemblers are now independant classes. Not only the code is cleaner, but unidasm has access to all the cpu cores again. The interface to the disassembly method has changed from byte buffers to objects that give a result to read methods. This also adds support for lfsr and/or paged PCs. --- src/devices/cpu/arcompact/arcompact_execute.cpp | 98 +++++++++++++------------ 1 file changed, 52 insertions(+), 46 deletions(-) (limited to 'src/devices/cpu/arcompact/arcompact_execute.cpp') diff --git a/src/devices/cpu/arcompact/arcompact_execute.cpp b/src/devices/cpu/arcompact/arcompact_execute.cpp index 53d3ce742cb..fc4dcca37a6 100644 --- a/src/devices/cpu/arcompact/arcompact_execute.cpp +++ b/src/devices/cpu/arcompact/arcompact_execute.cpp @@ -4,7 +4,13 @@ #include "emu.h" #include "debugger.h" #include "arcompact.h" -#include "arcompact_common.h" +#include "arcompactdasm.h" + +#define REG_BLINK (0x1f) // r31 +#define REG_SP (0x1c) // r28 +#define REG_ILINK1 (0x1d) // r29 +#define REG_ILINK2 (0x1e) // r30 +#define REG_LP_COUNT (0x3c) // r60 #define ARCOMPACT_LOGGING 1 @@ -128,35 +134,35 @@ int arcompact_device::check_condition(uint8_t condition) case 0x00: return 1; // AL case 0x01: return CONDITION_EQ; case 0x02: return !CONDITION_EQ; // NE - case 0x03: fatalerror("unhandled condition check %s", conditions[condition]); return -1; + case 0x03: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; case 0x04: return CONDITION_MI; // MI (N) case 0x05: return CONDITION_CS; // CS (Carry Set / Lower than) - case 0x06: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x07: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x08: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x09: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x0a: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x0b: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x0c: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x0d: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x0e: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x0f: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x10: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x11: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x12: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x13: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x14: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x15: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x16: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x17: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x18: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x19: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x1a: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x1b: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x1c: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x1d: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x1e: fatalerror("unhandled condition check %s", conditions[condition]); return -1; - case 0x1f: fatalerror("unhandled condition check %s", conditions[condition]); return -1; + case 0x06: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x07: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x08: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x09: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x0a: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x0b: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x0c: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x0d: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x0e: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x0f: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x10: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x11: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x12: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x13: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x14: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x15: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x16: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x17: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x18: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x19: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x1a: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x1b: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x1c: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x1d: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x1e: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; + case 0x1f: fatalerror("unhandled condition check %s", arcompact_disassembler::conditions[condition]); return -1; } return -1; @@ -1844,58 +1850,58 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_helper(OPS_32, const char ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_01(OPS_32) { - return arcompact_handle04_helper(PARAMS, opcodes_04[0x01], /*"ADC"*/ 0,0); + return arcompact_handle04_helper(PARAMS, arcompact_disassembler::opcodes_04[0x01], /*"ADC"*/ 0,0); } ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_03(OPS_32) { - return arcompact_handle04_helper(PARAMS, opcodes_04[0x03], /*"SBC"*/ 0,0); + return arcompact_handle04_helper(PARAMS, arcompact_disassembler::opcodes_04[0x03], /*"SBC"*/ 0,0); } ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_08(OPS_32) { - return arcompact_handle04_helper(PARAMS, opcodes_04[0x08], /*"MAX"*/ 0,0); + return arcompact_handle04_helper(PARAMS, arcompact_disassembler::opcodes_04[0x08], /*"MAX"*/ 0,0); } ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_09(OPS_32) { - return arcompact_handle04_helper(PARAMS, opcodes_04[0x09], /*"MIN"*/ 0,0); + return arcompact_handle04_helper(PARAMS, arcompact_disassembler::opcodes_04[0x09], /*"MIN"*/ 0,0); } ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0b(OPS_32) { - return arcompact_handle04_helper(PARAMS, opcodes_04[0x0b], /*"TST"*/ 1,0); + return arcompact_handle04_helper(PARAMS, arcompact_disassembler::opcodes_04[0x0b], /*"TST"*/ 1,0); } ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0c(OPS_32) { - return arcompact_handle04_helper(PARAMS, opcodes_04[0x0c], /*"CMP"*/ 1,0); + return arcompact_handle04_helper(PARAMS, arcompact_disassembler::opcodes_04[0x0c], /*"CMP"*/ 1,0); } ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_0d(OPS_32) { - return arcompact_handle04_helper(PARAMS, opcodes_04[0x0d], /*"RCMP"*/ 1,0); + return arcompact_handle04_helper(PARAMS, arcompact_disassembler::opcodes_04[0x0d], /*"RCMP"*/ 1,0); } ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_10(OPS_32) { - return arcompact_handle04_helper(PARAMS, opcodes_04[0x10], /*"BCLR"*/ 0,0); + return arcompact_handle04_helper(PARAMS, arcompact_disassembler::opcodes_04[0x10], /*"BCLR"*/ 0,0); } ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_11(OPS_32) { - return arcompact_handle04_helper(PARAMS, opcodes_04[0x11], /*"BTST"*/ 0,0); + return arcompact_handle04_helper(PARAMS, arcompact_disassembler::opcodes_04[0x11], /*"BTST"*/ 0,0); } ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_12(OPS_32) { - return arcompact_handle04_helper(PARAMS, opcodes_04[0x12], /*"BXOR"*/ 0,0); + return arcompact_handle04_helper(PARAMS, arcompact_disassembler::opcodes_04[0x12], /*"BXOR"*/ 0,0); } @@ -1905,22 +1911,22 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_12(OPS_32) ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_1a(OPS_32) { - return arcompact_handle04_helper(PARAMS, opcodes_04[0x1a], /*"MPY"*/ 0,0); + return arcompact_handle04_helper(PARAMS, arcompact_disassembler::opcodes_04[0x1a], /*"MPY"*/ 0,0); } // * ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_1b(OPS_32) { - return arcompact_handle04_helper(PARAMS, opcodes_04[0x1b], /*"MPYH"*/ 0,0); + return arcompact_handle04_helper(PARAMS, arcompact_disassembler::opcodes_04[0x1b], /*"MPYH"*/ 0,0); } // * ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_1c(OPS_32) { - return arcompact_handle04_helper(PARAMS, opcodes_04[0x1c], /*"MPYHU"*/ 0,0); + return arcompact_handle04_helper(PARAMS, arcompact_disassembler::opcodes_04[0x1c], /*"MPYHU"*/ 0,0); } // * ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_1d(OPS_32) { - return arcompact_handle04_helper(PARAMS, opcodes_04[0x1d], /*"MPYU"*/ 0,0); + return arcompact_handle04_helper(PARAMS, arcompact_disassembler::opcodes_04[0x1d], /*"MPYU"*/ 0,0); } // * ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_20_p00(OPS_32) @@ -2202,12 +2208,12 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_21_p11_m1(OPS_32) ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_22(OPS_32) { - return arcompact_handle04_helper(PARAMS, opcodes_04[0x22], /*"JL"*/ 1,1); + return arcompact_handle04_helper(PARAMS, arcompact_disassembler::opcodes_04[0x22], /*"JL"*/ 1,1); } ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_23(OPS_32) { - return arcompact_handle04_helper(PARAMS, opcodes_04[0x23], /*"JL.D"*/ 1,1); + return arcompact_handle04_helper(PARAMS, arcompact_disassembler::opcodes_04[0x23], /*"JL.D"*/ 1,1); } @@ -2238,7 +2244,7 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_28(OPS_32) // LPcc (loop { // 0010 0RRR 1110 1000 0RRR uuuu uu1Q QQQQ COMMON32_GET_u6 COMMON32_GET_CONDITION - //arcompact_fatal("Lp conditional %s not supported %d", conditions[condition], u); + //arcompact_fatal("Lp conditional %s not supported %d", arcompact_disassembler::conditions[condition], u); // if the loop condition fails then just jump to after the end of the loop, don't set any registers if (!check_condition(condition)) @@ -2264,7 +2270,7 @@ ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_28(OPS_32) // LPcc (loop ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_29(OPS_32) { // leapster bios uses formats for FLAG that are not defined, bug I guess work anyway (P modes 0 / 1) - return arcompact_handle04_helper(PARAMS, opcodes_04[0x29], /*"FLAG"*/ 1,1); + return arcompact_handle04_helper(PARAMS, arcompact_disassembler::opcodes_04[0x29], /*"FLAG"*/ 1,1); } -- cgit v1.2.3