summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/e0c6200/e0c6200d.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/e0c6200/e0c6200d.cpp')
-rw-r--r--src/devices/cpu/e0c6200/e0c6200d.cpp48
1 files changed, 25 insertions, 23 deletions
diff --git a/src/devices/cpu/e0c6200/e0c6200d.cpp b/src/devices/cpu/e0c6200/e0c6200d.cpp
index be2a4ea4d6d..adb324a1a79 100644
--- a/src/devices/cpu/e0c6200/e0c6200d.cpp
+++ b/src/devices/cpu/e0c6200/e0c6200d.cpp
@@ -9,6 +9,27 @@
#include "emu.h"
#include "e0c6200d.h"
+
+// common lookup tables
+
+enum e0c6200_disassembler::e_mnemonics : unsigned
+{
+ em_JP, em_RETD, em_CALL, em_CALZ,
+ em_LD, em_LBPX, em_ADC, em_CP, em_ADD, em_SUB, em_SBC, em_AND, em_OR, em_XOR,
+ em_RLC, em_FAN, em_PSET, em_LDPX, em_LDPY, em_SET, em_RST, em_INC, em_DEC,
+ em_RRC, em_ACPX, em_ACPY, em_SCPX, em_SCPY, em_PUSH, em_POP,
+ em_RETS, em_RET, em_JPBA, em_HALT, em_SLP, em_NOP5, em_NOP7,
+ em_NOT, em_SCF, em_SZF, em_SDF, em_EI, em_DI, em_RDF, em_RZF, em_RCF, em_ILL
+};
+
+enum e0c6200_disassembler::e_params : unsigned
+{
+ ep_S, ep_E, ep_I, ep_R0, ep_R2, ep_R4, ep_Q,
+ ep_cC, ep_cNC, ep_cZ, ep_cNZ,
+ ep_A, ep_B, ep_X, ep_Y, ep_MX, ep_MY, ep_XP, ep_XH, ep_XL, ep_YP, ep_YH, ep_YL,
+ ep_P, ep_F, ep_MN, ep_SP, ep_SPH, ep_SPL
+};
+
const char *const e0c6200_disassembler::em_name[] =
{
"JP", "RETD", "CALL", "CALZ",
@@ -21,7 +42,7 @@ const char *const e0c6200_disassembler::em_name[] =
const u32 e0c6200_disassembler::em_flags[] =
{
- 0, STEP_OUT, STEP_OVER, STEP_OVER,
+ STEP_COND, STEP_OUT, STEP_OVER, STEP_OVER,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
@@ -53,6 +74,8 @@ const char *const e0c6200_disassembler::ep_name[] =
};
+// disasm
+
std::string e0c6200_disassembler::decode_param(u16 opcode, int param)
{
int bits = ep_bits[param] & 0xf;
@@ -656,7 +679,6 @@ offs_t e0c6200_disassembler::disassemble(std::ostream &stream, offs_t pc, const
} // 0xf00 (big switch)
-
// fetch mnemonic
util::stream_format(stream, "%-6s", em_name[m]);
@@ -670,25 +692,5 @@ offs_t e0c6200_disassembler::disassemble(std::ostream &stream, offs_t pc, const
}
}
- return 1 | em_flags[m] | SUPPORTED;
-}
-
-u32 e0c6200_disassembler::opcode_alignment() const
-{
- return 1;
-}
-
-u32 e0c6200_disassembler::interface_flags() const
-{
- return PAGED2LEVEL;
-}
-
-u32 e0c6200_disassembler::page_address_bits() const
-{
- return 8;
-}
-
-u32 e0c6200_disassembler::page2_address_bits() const
-{
- return 4;
+ return 1 | ((op & 0xf00) == 0 ? 0 : em_flags[m]) | SUPPORTED;
}