diff options
Diffstat (limited to 'src/devices/cpu/upd7810')
-rw-r--r-- | src/devices/cpu/upd7810/upd7810.cpp | 23 | ||||
-rw-r--r-- | src/devices/cpu/upd7810/upd7810.h | 12 | ||||
-rw-r--r-- | src/devices/cpu/upd7810/upd7810_dasm.cpp | 4214 | ||||
-rw-r--r-- | src/devices/cpu/upd7810/upd7810_dasm.h | 291 |
4 files changed, 2318 insertions, 2222 deletions
diff --git a/src/devices/cpu/upd7810/upd7810.cpp b/src/devices/cpu/upd7810/upd7810.cpp index 67b6818ec72..4871aaebcbd 100644 --- a/src/devices/cpu/upd7810/upd7810.cpp +++ b/src/devices/cpu/upd7810/upd7810.cpp @@ -374,6 +374,7 @@ STOP 01001000 10111011 12 stop #include "debugger.h" #include "upd7810_macros.h" +#include "upd7810_dasm.h" DEFINE_DEVICE_TYPE(UPD7810, upd7810_device, "upd7810", "uPD7810") @@ -519,28 +520,24 @@ device_memory_interface::space_config_vector upd7810_device::memory_space_config }; } -offs_t upd7810_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) +util::disasm_interface *upd7810_device::create_disassembler() { - extern CPU_DISASSEMBLE( upd7810 ); - return CPU_DISASSEMBLE_NAME(upd7810)(this, stream, pc, oprom, opram, options); + return new upd7810_disassembler; } -offs_t upd7807_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) +util::disasm_interface *upd7807_device::create_disassembler() { - extern CPU_DISASSEMBLE( upd7807 ); - return CPU_DISASSEMBLE_NAME(upd7807)(this, stream, pc, oprom, opram, options); + return new upd7807_disassembler; } -offs_t upd7801_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) +util::disasm_interface *upd7801_device::create_disassembler() { - extern CPU_DISASSEMBLE( upd7801 ); - return CPU_DISASSEMBLE_NAME(upd7801)(this, stream, pc, oprom, opram, options); + return new upd7801_disassembler; } -offs_t upd78c05_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) +util::disasm_interface *upd78c05_device::create_disassembler() { - extern CPU_DISASSEMBLE( upd78c05 ); - return CPU_DISASSEMBLE_NAME(upd78c05)(this, stream, pc, oprom, opram, options); + return new upd78c05_disassembler; } WRITE8_MEMBER(upd7810_device::pa_w) @@ -1571,7 +1568,7 @@ void upd78c05_device::handle_timers(int cycles) void upd7810_device::base_device_start() { m_program = &space(AS_PROGRAM); - m_direct = &m_program->direct(); + m_direct = m_program->direct<0>(); m_to_func.resolve_safe(); m_co0_func.resolve_safe(); diff --git a/src/devices/cpu/upd7810/upd7810.h b/src/devices/cpu/upd7810/upd7810.h index a7d9ec13793..427a4d2d52b 100644 --- a/src/devices/cpu/upd7810/upd7810.h +++ b/src/devices/cpu/upd7810/upd7810.h @@ -227,9 +227,7 @@ protected: virtual void state_string_export(const device_state_entry &entry, std::string &str) const override; // device_disasm_interface overrides - virtual uint32_t disasm_min_opcode_bytes() const override { return 1; } - virtual uint32_t disasm_max_opcode_bytes() const override { return 4; } - virtual offs_t disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) override; + virtual util::disasm_interface *create_disassembler() override; virtual void handle_timers(int cycles); virtual void upd7810_take_irq(); @@ -413,7 +411,7 @@ protected: const struct opcode_s *m_op70; const struct opcode_s *m_op74; address_space *m_program; - direct_read_data *m_direct; + direct_read_data<0> *m_direct; int m_icount; uint8_t RP(offs_t port); @@ -1443,7 +1441,7 @@ public: upd7807_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: - virtual offs_t disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) override; + virtual util::disasm_interface *create_disassembler() override; virtual void configure_ops() override; }; @@ -1457,7 +1455,7 @@ public: protected: virtual void device_reset() override; virtual void execute_set_input(int inputnum, int state) override; - virtual offs_t disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) override; + virtual util::disasm_interface *create_disassembler() override; virtual void handle_timers(int cycles) override; virtual void upd7810_take_irq() override; virtual void configure_ops() override; @@ -1477,7 +1475,7 @@ protected: virtual void device_reset() override; virtual uint64_t execute_clocks_to_cycles(uint64_t clocks) const override { return (clocks + 4 - 1) / 4; } virtual uint64_t execute_cycles_to_clocks(uint64_t cycles) const override { return (cycles * 4); } - virtual offs_t disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) override; + virtual util::disasm_interface *create_disassembler() override; virtual void handle_timers(int cycles) override; virtual void configure_ops() override; }; diff --git a/src/devices/cpu/upd7810/upd7810_dasm.cpp b/src/devices/cpu/upd7810/upd7810_dasm.cpp index f3da1ba4160..1af4415486e 100644 --- a/src/devices/cpu/upd7810/upd7810_dasm.cpp +++ b/src/devices/cpu/upd7810/upd7810_dasm.cpp @@ -9,249 +9,52 @@ *****************************************************************************/ #include "emu.h" -#include "debugger.h" -#include "upd7810.h" +#include "upd7810_dasm.h" -namespace { +const char *upd7810_base_disassembler::dasm_s::name() const +{ + return token_names[m_token]; +} -class dasm_s +const char *upd7810_base_disassembler::dasm_s::args() const { -public: - const char *name() const { return token_names[m_token]; } - const char *args() const { return (m_token != prefix) ? reinterpret_cast<const char *>(m_args) : nullptr; } + return (m_token != prefix) ? reinterpret_cast<const char *>(m_args) : nullptr; +} - bool is_prefix() const { return m_token == prefix; } - bool is_call() const { return (m_token == CALB) || (m_token == CALF) || (m_token == CALL) || (m_token == CALT); } - bool is_return() const { return (m_token == RET) || (m_token == RETI); } +bool upd7810_base_disassembler::dasm_s::is_prefix() const +{ + return m_token == prefix; +} - const dasm_s &prefix_get(uint8_t op) const { assert(m_token == prefix); return reinterpret_cast<const dasm_s *>(m_args)[op]; } +bool upd7810_base_disassembler::dasm_s::is_call() const +{ + return (m_token == CALB) || (m_token == CALF) || (m_token == CALL) || (m_token == CALT); +} - static const dasm_s XX_7810[256]; - static const dasm_s XX_7807[256]; +bool upd7810_base_disassembler::dasm_s::is_return() const +{ + return (m_token == RET) || (m_token == RETI); +} - static const dasm_s XX_7801[256]; - static const dasm_s XX_78c05[256]; +const upd7810_base_disassembler::dasm_s &upd7810_base_disassembler::dasm_s::prefix_get(uint8_t op) const +{ + assert(m_token == prefix); + return reinterpret_cast<const dasm_s *>(m_args)[op]; +} -protected: - enum - { - prefix = 0, - illegal, - ACI, - ADC, - ADCW, - ADCX, - ADD, - ADDNC, - ADDNCW, - ADDNCX, - ADDW, - ADDX, - ADI, - ADINC, - ANA, - ANAW, - ANAX, - AND, - ANI, - ANIW, - BIT, - BLOCK, - CALB, - CALF, - CALL, - CALT, - CLC, - CLR, /* 7807 */ - CMC, /* 7807 */ - DAA, - DADC, - DADD, - DADDNC, - DAN, - DCR, - DCRW, - DCX, - DEQ, - DGT, - DI, - DIV, - DLT, - DMOV, - DNE, - DOFF, - DON, - DOR, - DRLL, - DRLR, - DSBB, - DSLL, - DSLR, - DSUB, - DSUBNB, - DXR, - EADD, - EI, - EQA, - EQAW, - EQAX, - EQI, - EQIW, - ESUB, - EX, /* 7801 */ - EXA, - EXH, - EXX, - EXR, /* 7807 */ - GTA, - GTAW, - GTAX, - GTI, - GTIW, - HALT, - IN, /* 7801 */ - INR, - INRW, - INX, - JB, - JEA, - JMP, - JR, - JRE, - LBCD, - LDAW, - LDAX, - LDEAX, - LDED, - LHLD, - LSPD, - LTA, - LTAW, - LTAX, - LTI, - LTIW, - LXI, - MOV, - MUL, - MVI, - MVIW, - MVIX, - NEA, - NEAW, - NEAX, - NEGA, - NEI, - NEIW, - NOP, - NOT, /* 7807 */ - OFFA, - OFFAW, - OFFAX, - OFFI, - OFFIW, - ONA, - ONAW, - ONAX, - ONI, - ONIW, - OR, /* 7807 */ - ORA, - ORAW, - ORAX, - ORI, - ORIW, - OUT, /* 7801 */ - PER, /* 7801 */ - PEX, /* 7801 */ - POP, - PUSH, - RET, - RETI, - RETS, - RLD, - RLL, - RLR, - RRD, - SBB, - SBBW, - SBBX, - SBCD, - SBI, - SDED, - SETB, /* 7807 */ - SHLD, - SIO, /* 7801 */ - SK, - SKIT, - SKN, - SKNIT, - SLL, - SLLC, - SLR, - SLRC, - SOFTI, - SSPD, - STAW, - STAX, - STC, - STEAX, - STM, /* 7801 */ - STOP, - SUB, - SUBNB, - SUBNBW, - SUBNBX, - SUBW, - SUBX, - SUI, - SUINB, - TABLE, - XOR, /* 7807 */ - XRA, - XRAW, - XRAX, - XRI - }; - - dasm_s() : m_token(illegal), m_args(nullptr) { } - dasm_s(uint8_t t, const char *a) : m_token(t), m_args(a) { } - dasm_s(const dasm_s (&a)[256]) : m_token(prefix), m_args(a) { } - - uint8_t m_token; - const void *m_args; - - static const char *const token_names[]; - - static const dasm_s d48_7810[256]; - static const dasm_s d48_7807[256]; - static const dasm_s d4C_7810[256]; - static const dasm_s d4C_7807[256]; - static const dasm_s d4D_7810[256]; - static const dasm_s d4D_7807[256]; - static const dasm_s d60[256]; - static const dasm_s d64_7810[256]; - static const dasm_s d64_7807[256]; - static const dasm_s d70[256]; - static const dasm_s d74[256]; - - static const dasm_s d48_7801[256]; - static const dasm_s d4C_7801[256]; - static const dasm_s d4D_7801[256]; - static const dasm_s d60_7801[256]; - static const dasm_s d64_7801[256]; - static const dasm_s d70_7801[256]; - static const dasm_s d74_7801[256]; - - static const dasm_s d48_78c05[256]; - static const dasm_s d4C_78c05[256]; - static const dasm_s d4D_78c05[256]; - static const dasm_s d60_78c05[256]; - static const dasm_s d64_78c05[256]; - static const dasm_s d70_78c05[256]; - static const dasm_s d74_78c05[256]; -}; +upd7810_base_disassembler::dasm_s::dasm_s() : m_token(illegal), m_args(nullptr) +{ +} -const char *const dasm_s::token_names[] = +upd7810_base_disassembler::dasm_s::dasm_s(uint8_t t, const char *a) : m_token(t), m_args(a) +{ +} + +upd7810_base_disassembler::dasm_s::dasm_s(const dasm_s (&a)[256]) : m_token(prefix), m_args(a) +{ +} + +const char *const upd7810_base_disassembler::dasm_s::token_names[] = { "", "illegal", @@ -431,284 +234,836 @@ const char *const dasm_s::token_names[] = "XRI" }; +// prefix 60 +const upd7810_base_disassembler::dasm_s upd7810_base_disassembler::d60[256] = +{ + { }, // 00: 0110 0000 0000 0000 + { }, // 01: 0110 0000 0000 0001 + { }, // 02: 0110 0000 0000 0010 + { }, // 03: 0110 0000 0000 0011 + { }, // 04: 0110 0000 0000 0100 + { }, // 05: 0110 0000 0000 0101 + { }, // 06: 0110 0000 0000 0110 + { }, // 07: 0110 0000 0000 0111 + {ANA, "V,A" }, // 08: 0110 0000 0000 1000 + {ANA, "A,A" }, // 09: 0110 0000 0000 1001 + {ANA, "B,A" }, // 0a: 0110 0000 0000 1010 + {ANA, "C,A" }, // 0b: 0110 0000 0000 1011 + {ANA, "D,A" }, // 0c: 0110 0000 0000 1100 + {ANA, "E,A" }, // 0d: 0110 0000 0000 1101 + {ANA, "H,A" }, // 0e: 0110 0000 0000 1110 + {ANA, "L,A" }, // 0f: 0110 0000 0000 1111 -// prefix 48 -const dasm_s dasm_s::d48_7810[256] = + {XRA, "V,A" }, // 10: 0110 0000 0001 0000 + {XRA, "A,A" }, // 11: 0110 0000 0001 0001 + {XRA, "B,A" }, // 12: 0110 0000 0001 0010 + {XRA, "C,A" }, // 13: 0110 0000 0001 0011 + {XRA, "D,A" }, // 14: 0110 0000 0001 0100 + {XRA, "E,A" }, // 15: 0110 0000 0001 0101 + {XRA, "H,A" }, // 16: 0110 0000 0001 0110 + {XRA, "L,A" }, // 17: 0110 0000 0001 0111 + {ORA, "V,A" }, // 18: 0110 0000 0001 1000 + {ORA, "A,A" }, // 19: 0110 0000 0001 1001 + {ORA, "B,A" }, // 1a: 0110 0000 0001 1010 + {ORA, "C,A" }, // 1b: 0110 0000 0001 1011 + {ORA, "D,A" }, // 1c: 0110 0000 0001 1100 + {ORA, "E,A" }, // 1d: 0110 0000 0001 1101 + {ORA, "H,A" }, // 1e: 0110 0000 0001 1110 + {ORA, "L,A" }, // 1f: 0110 0000 0001 1111 + + {ADDNC, "V,A" }, // 20: 0110 0000 0010 0000 + {ADDNC, "A,A" }, // 21: 0110 0000 0010 0001 + {ADDNC, "B,A" }, // 22: 0110 0000 0010 0010 + {ADDNC, "C,A" }, // 23: 0110 0000 0010 0011 + {ADDNC, "D,A" }, // 24: 0110 0000 0010 0100 + {ADDNC, "E,A" }, // 25: 0110 0000 0010 0101 + {ADDNC, "H,A" }, // 26: 0110 0000 0010 0110 + {ADDNC, "L,A" }, // 27: 0110 0000 0010 0111 + {GTA, "V,A" }, // 28: 0110 0000 0010 1000 + {GTA, "A,A" }, // 29: 0110 0000 0010 1001 + {GTA, "B,A" }, // 2a: 0110 0000 0010 1010 + {GTA, "C,A" }, // 2b: 0110 0000 0010 1011 + {GTA, "D,A" }, // 2c: 0110 0000 0010 1100 + {GTA, "E,A" }, // 2d: 0110 0000 0010 1101 + {GTA, "H,A" }, // 2e: 0110 0000 0010 1110 + {GTA, "L,A" }, // 2f: 0110 0000 0010 1111 + + {SUBNB, "V,A" }, // 30: 0110 0000 0011 0000 + {SUBNB, "A,A" }, // 31: 0110 0000 0011 0001 + {SUBNB, "B,A" }, // 32: 0110 0000 0011 0010 + {SUBNB, "C,A" }, // 33: 0110 0000 0011 0011 + {SUBNB, "D,A" }, // 34: 0110 0000 0011 0100 + {SUBNB, "E,A" }, // 35: 0110 0000 0011 0101 + {SUBNB, "H,A" }, // 36: 0110 0000 0011 0110 + {SUBNB, "L,A" }, // 37: 0110 0000 0011 0111 + {LTA, "V,A" }, // 38: 0110 0000 0011 1000 + {LTA, "A,A" }, // 39: 0110 0000 0011 1001 + {LTA, "B,A" }, // 3a: 0110 0000 0011 1010 + {LTA, "C,A" }, // 3b: 0110 0000 0011 1011 + {LTA, "D,A" }, // 3c: 0110 0000 0011 1100 + {LTA, "E,A" }, // 3d: 0110 0000 0011 1101 + {LTA, "H,A" }, // 3e: 0110 0000 0011 1110 + {LTA, "L,A" }, // 3f: 0110 0000 0011 1111 + + {ADD, "V,A" }, // 40: 0110 0000 0100 0000 + {ADD, "A,A" }, // 41: 0110 0000 0100 0001 + {ADD, "B,A" }, // 42: 0110 0000 0100 0010 + {ADD, "C,A" }, // 43: 0110 0000 0100 0011 + {ADD, "D,A" }, // 44: 0110 0000 0100 0100 + {ADD, "E,A" }, // 45: 0110 0000 0100 0101 + {ADD, "H,A" }, // 46: 0110 0000 0100 0110 + {ADD, "L,A" }, // 47: 0110 0000 0100 0111 + { }, // 48: 0110 0000 0100 1000 + { }, // 49: 0110 0000 0100 1001 + { }, // 4a: 0110 0000 0100 1010 + { }, // 4b: 0110 0000 0100 1011 + { }, // 4c: 0110 0000 0100 1100 + { }, // 4d: 0110 0000 0100 1101 + { }, // 4e: 0110 0000 0100 1110 + { }, // 4f: 0110 0000 0100 1111 + + {ADC, "V,A" }, // 50: 0110 0000 0101 0000 + {ADC, "A,A" }, // 51: 0110 0000 0101 0001 + {ADC, "B,A" }, // 52: 0110 0000 0101 0010 + {ADC, "C,A" }, // 53: 0110 0000 0101 0011 + {ADC, "D,A" }, // 54: 0110 0000 0101 0100 + {ADC, "E,A" }, // 55: 0110 0000 0101 0101 + {ADC, "H,A" }, // 56: 0110 0000 0101 0110 + {ADC, "L,A" }, // 57: 0110 0000 0101 0111 + { }, // 58: 0110 0000 0101 1000 + { }, // 59: 0110 0000 0101 1001 + { }, // 5a: 0110 0000 0101 1010 + { }, // 5b: 0110 0000 0101 1011 + { }, // 5c: 0110 0000 0101 1100 + { }, // 5d: 0110 0000 0101 1101 + { }, // 5e: 0110 0000 0101 1110 + { }, // 5f: 0110 0000 0101 1111 + + {SUB, "V,A" }, // 60: 0110 0000 0110 0000 + {SUB, "A,A" }, // 61: 0110 0000 0110 0001 + {SUB, "B,A" }, // 62: 0110 0000 0110 0010 + {SUB, "C,A" }, // 63: 0110 0000 0110 0011 + {SUB, "D,A" }, // 64: 0110 0000 0110 0100 + {SUB, "E,A" }, // 65: 0110 0000 0110 0101 + {SUB, "H,A" }, // 66: 0110 0000 0110 0110 + {SUB, "L,A" }, // 67: 0110 0000 0110 0111 + {NEA, "V,A" }, // 68: 0110 0000 0110 1000 + {NEA, "A,A" }, // 69: 0110 0000 0110 1001 + {NEA, "B,A" }, // 6a: 0110 0000 0110 1010 + {NEA, "C,A" }, // 6b: 0110 0000 0110 1011 + {NEA, "D,A" }, // 6c: 0110 0000 0110 1100 + {NEA, "E,A" }, // 6d: 0110 0000 0110 1101 + {NEA, "H,A" }, // 6e: 0110 0000 0110 1110 + {NEA, "L,A" }, // 6f: 0110 0000 0110 1111 + + {SBB, "V,A" }, // 70: 0110 0000 0111 0000 + {SBB, "A,A" }, // 71: 0110 0000 0111 0001 + {SBB, "B,A" }, // 72: 0110 0000 0111 0010 + {SBB, "C,A" }, // 73: 0110 0000 0111 0011 + {SBB, "D,A" }, // 74: 0110 0000 0111 0100 + {SBB, "E,A" }, // 75: 0110 0000 0111 0101 + {SBB, "H,A" }, // 76: 0110 0000 0111 0110 + {SBB, "L,A" }, // 77: 0110 0000 0111 0111 + {EQA, "V,A" }, // 78: 0110 0000 0111 1000 + {EQA, "A,A" }, // 79: 0110 0000 0111 1001 + {EQA, "B,A" }, // 7a: 0110 0000 0111 1010 + {EQA, "C,A" }, // 7b: 0110 0000 0111 1011 + {EQA, "D,A" }, // 7c: 0110 0000 0111 1100 + {EQA, "E,A" }, // 7d: 0110 0000 0111 1101 + {EQA, "H,A" }, // 7e: 0110 0000 0111 1110 + {EQA, "L,A" }, // 7f: 0110 0000 0111 1111 + + { }, // 80: 0110 0000 1000 0000 + { }, // 81: 0110 0000 1000 0001 + { }, // 82: 0110 0000 1000 0010 + { }, // 83: 0110 0000 1000 0011 + { }, // 84: 0110 0000 1000 0100 + { }, // 85: 0110 0000 1000 0101 + { }, // 86: 0110 0000 1000 0110 + { }, // 87: 0110 0000 1000 0111 + {ANA, "A,V" }, // 88: 0110 0000 1000 1000 + {ANA, "A,A" }, // 89: 0110 0000 1000 1001 + {ANA, "A,B" }, // 8a: 0110 0000 1000 1010 + {ANA, "A,C" }, // 8b: 0110 0000 1000 1011 + {ANA, "A,D" }, // 8c: 0110 0000 1000 1100 + {ANA, "A,E" }, // 8d: 0110 0000 1000 1101 + {ANA, "A,H" }, // 8e: 0110 0000 1000 1110 + {ANA, "A,L" }, // 8f: 0110 0000 1000 1111 + + {XRA, "A,V" }, // 90: 0110 0000 1001 0000 + {XRA, "A,A" }, // 91: 0110 0000 1001 0001 + {XRA, "A,B" }, // 92: 0110 0000 1001 0010 + {XRA, "A,C" }, // 93: 0110 0000 1001 0011 + {XRA, "A,D" }, // 94: 0110 0000 1001 0100 + {XRA, "A,E" }, // 95: 0110 0000 1001 0101 + {XRA, "A,H" }, // 96: 0110 0000 1001 0110 + {XRA, "A,L" }, // 97: 0110 0000 1001 0111 + {ORA, "A,V" }, // 98: 0110 0000 1001 1000 + {ORA, "A,A" }, // 99: 0110 0000 1001 1001 + {ORA, "A,B" }, // 9a: 0110 0000 1001 1010 + {ORA, "A,C" }, // 9b: 0110 0000 1001 1011 + {ORA, "A,D" }, // 9c: 0110 0000 1001 1100 + {ORA, "A,E" }, // 9d: 0110 0000 1001 1101 + {ORA, "A,H" }, // 9e: 0110 0000 1001 1110 + {ORA, "A,L" }, // 9f: 0110 0000 1001 1111 + + {ADDNC, "A,V" }, // a0: 0110 0000 1010 0000 + {ADDNC, "A,A" }, // a1: 0110 0000 1010 0001 + {ADDNC, "A,B" }, // a2: 0110 0000 1010 0010 + {ADDNC, "A,C" }, // a3: 0110 0000 1010 0011 + {ADDNC, "A,D" }, // a4: 0110 0000 1010 0100 + {ADDNC, "A,E" }, // a5: 0110 0000 1010 0101 + {ADDNC, "A,H" }, // a6: 0110 0000 1010 0110 + {ADDNC, "A,L" }, // a7: 0110 0000 1010 0111 + {GTA, "A,V" }, // a8: 0110 0000 1010 1000 + {GTA, "A,A" }, // a9: 0110 0000 1010 1001 + {GTA, "A,B" }, // aa: 0110 0000 1010 1010 + {GTA, "A,C" }, // ab: 0110 0000 1010 1011 + {GTA, "A,D" }, // ac: 0110 0000 1010 1100 + {GTA, "A,E" }, // ad: 0110 0000 1010 1101 + {GTA, "A,H" }, // ae: 0110 0000 1010 1110 + {GTA, "A,L" }, // af: 0110 0000 1010 1111 + + {SUBNB, "A,V" }, // b0: 0110 0000 1011 0000 + {SUBNB, "A,A" }, // b1: 0110 0000 1011 0001 + {SUBNB, "A,B" }, // b2: 0110 0000 1011 0010 + {SUBNB, "A,C" }, // b3: 0110 0000 1011 0011 + {SUBNB, "A,D" }, // b4: 0110 0000 1011 0100 + {SUBNB, "A,E" }, // b5: 0110 0000 1011 0101 + {SUBNB, "A,H" }, // b6: 0110 0000 1011 0110 + {SUBNB, "A,L" }, // b7: 0110 0000 1011 0111 + {LTA, "A,V" }, // b8: 0110 0000 1011 1000 + {LTA, "A,A" }, // b9: 0110 0000 1011 1001 + {LTA, "A,B" }, // ba: 0110 0000 1011 1010 + {LTA, "A,C" }, // bb: 0110 0000 1011 1011 + {LTA, "A,D" }, // bc: 0110 0000 1011 1100 + {LTA, "A,E" }, // bd: 0110 0000 1011 1101 + {LTA, "A,H" }, // be: 0110 0000 1011 1110 + {LTA, "A,L" }, // bf: 0110 0000 1011 1111 + + {ADD, "A,V" }, // c0: 0110 0000 1100 0000 + {ADD, "A,A" }, // c1: 0110 0000 1100 0001 + {ADD, "A,B" }, // c2: 0110 0000 1100 0010 + {ADD, "A,C" }, // c3: 0110 0000 1100 0011 + {ADD, "A,D" }, // c4: 0110 0000 1100 0100 + {ADD, "A,E" }, // c5: 0110 0000 1100 0101 + {ADD, "A,H" }, // c6: 0110 0000 1100 0110 + {ADD, "A,L" }, // c7: 0110 0000 1100 0111 + {ONA, "A,V" }, // c8: 0110 0000 1100 1000 + {ONA, "A,A" }, // c9: 0110 0000 1100 1001 + {ONA, "A,B" }, // ca: 0110 0000 1100 1010 + {ONA, "A,C" }, // cb: 0110 0000 1100 1011 + {ONA, "A,D" }, // cc: 0110 0000 1100 1100 + {ONA, "A,E" }, // cd: 0110 0000 1100 1101 + {ONA, "A,H" }, // ce: 0110 0000 1100 1110 + {ONA, "A,L" }, // cf: 0110 0000 1100 1111 + + {ADC, "A,V" }, // d0: 0110 0000 1101 0000 + {ADC, "A,A" }, // d1: 0110 0000 1101 0001 + {ADC, "A,B" }, // d2: 0110 0000 1101 0010 + {ADC, "A,C" }, // d3: 0110 0000 1101 0011 + {ADC, "A,D" }, // d4: 0110 0000 1101 0100 + {ADC, "A,E" }, // d5: 0110 0000 1101 0101 + {ADC, "A,H" }, // d6: 0110 0000 1101 0110 + {ADC, "A,L" }, // d7: 0110 0000 1101 0111 + {OFFA, "A,V" }, // d8: 0110 0000 1101 1000 + {OFFA, "A,A" }, // d9: 0110 0000 1101 1001 + {OFFA, "A,B" }, // da: 0110 0000 1101 1010 + {OFFA, "A,C" }, // db: 0110 0000 1101 1011 + {OFFA, "A,D" }, // dc: 0110 0000 1101 1100 + {OFFA, "A,E" }, // dd: 0110 0000 1101 1101 + {OFFA, "A,H" }, // de: 0110 0000 1101 1110 + {OFFA, "A,L" }, // df: 0110 0000 1101 1111 + + {SUB, "A,V" }, // e0: 0110 0000 1110 0000 + {SUB, "A,A" }, // e1: 0110 0000 1110 0001 + {SUB, "A,B" }, // e2: 0110 0000 1110 0010 + {SUB, "A,C" }, // e3: 0110 0000 1110 0011 + {SUB, "A,D" }, // e4: 0110 0000 1110 0100 + {SUB, "A,E" }, // e5: 0110 0000 1110 0101 + {SUB, "A,H" }, // e6: 0110 0000 1110 0110 + {SUB, "A,L" }, // e7: 0110 0000 1110 0111 + {NEA, "A,V" }, // e8: 0110 0000 1110 1000 + {NEA, "A,A" }, // e9: 0110 0000 1110 1001 + {NEA, "A,B" }, // ea: 0110 0000 1110 1010 + {NEA, "A,C" }, // eb: 0110 0000 1110 1011 + {NEA, "A,D" }, // ec: 0110 0000 1110 1100 + {NEA, "A,E" }, // ed: 0110 0000 1110 1101 + {NEA, "A,H" }, // ee: 0110 0000 1110 1110 + {NEA, "A,L" }, // ef: 0110 0000 1110 1111 + + {SBB, "A,V" }, // f0: 0110 0000 1111 0000 + {SBB, "A,A" }, // f1: 0110 0000 1111 0001 + {SBB, "A,B" }, // f2: 0110 0000 1111 0010 + {SBB, "A,C" }, // f3: 0110 0000 1111 0011 + {SBB, "A,D" }, // f4: 0110 0000 1111 0100 + {SBB, "A,E" }, // f5: 0110 0000 1111 0101 + {SBB, "A,H" }, // f6: 0110 0000 1111 0110 + {SBB, "A,L" }, // f7: 0110 0000 1111 0111 + {EQA, "A,V" }, // f8: 0110 0000 1111 1000 + {EQA, "A,A" }, // f9: 0110 0000 1111 1001 + {EQA, "A,B" }, // fa: 0110 0000 1111 1010 + {EQA, "A,C" }, // fb: 0110 0000 1111 1011 + {EQA, "A,D" }, // fc: 0110 0000 1111 1100 + {EQA, "A,E" }, // fd: 0110 0000 1111 1101 + {EQA, "A,H" }, // fe: 0110 0000 1111 1110 + {EQA, "A,L" } // ff: 0110 0000 1111 1111 +}; + +// prefix 70 +const upd7810_base_disassembler::dasm_s upd7810_base_disassembler::d70[256] = { - { }, // 00: 0100 1000 0000 0000 - {SLRC, "A" }, // 01: 0100 1000 0000 0001 - {SLRC, "B" }, // 02: 0100 1000 0000 0010 - {SLRC, "C" }, // 03: 0100 1000 0000 0011 - { }, // 04: 0100 1000 0000 0100 - {SLLC, "A" }, // 05: 0100 1000 0000 0101 - {SLLC, "B" }, // 06: 0100 1000 0000 0110 - {SLLC, "C" }, // 07: 0100 1000 0000 0111 - {SK, "NV" }, // 08: 0100 1000 0000 1000 - { }, // 09: 0100 1000 0000 1001 - {SK, "CY" }, // 0a: 0100 1000 0000 1010 - {SK, "HC" }, // 0b: 0100 1000 0000 1011 - {SK, "Z" }, // 0c: 0100 1000 0000 1100 - { }, // 0d: 0100 1000 0000 1101 - { }, // 0e: 0100 1000 0000 1110 - { }, // 0f: 0100 1000 0000 1111 + { }, // 00: 0111 0000 0000 0000 + { }, // 01: 0111 0000 0000 0001 + { }, // 02: 0111 0000 0000 0010 + { }, // 03: 0111 0000 0000 0011 + { }, // 04: 0111 0000 0000 0100 + { }, // 05: 0111 0000 0000 0101 + { }, // 06: 0111 0000 0000 0110 + { }, // 07: 0111 0000 0000 0111 + { }, // 08: 0111 0000 0000 1000 + { }, // 09: 0111 0000 0000 1001 + { }, // 0a: 0111 0000 0000 1010 + { }, // 0b: 0111 0000 0000 1011 + { }, // 0c: 0111 0000 0000 1100 + { }, // 0d: 0111 0000 0000 1101 + {SSPD, "%w" }, // 0e: 0111 0000 0000 1110 llll llll hhhh hhhh + {LSPD, "%w" }, // 0f: 0111 0000 0000 1111 llll llll hhhh hhhh - { }, // 10: 0100 1000 0001 0000 - { }, // 11: 0100 1000 0001 0001 - { }, // 12: 0100 1000 0001 0010 - { }, // 13: 0100 1000 0001 0011 - { }, // 14: 0100 1000 0001 0100 - { }, // 15: 0100 1000 0001 0101 - { }, // 16: 0100 1000 0001 0110 - { }, // 17: 0100 1000 0001 0111 - {SKN, "NV" }, // 18: 0100 1000 0001 1000 - { }, // 19: 0100 1000 0001 1001 - {SKN, "CY" }, // 1a: 0100 1000 0001 1010 - {SKN, "HC" }, // 1b: 0100 1000 0001 1011 - {SKN, "Z" }, // 1c: 0100 1000 0001 1100 - { }, // 1d: 0100 1000 0001 1101 - { }, // 1e: 0100 1000 0001 1110 - { }, // 1f: 0100 1000 0001 1111 + { }, // 10: 0111 0000 0001 0000 + { }, // 11: 0111 0000 0001 0001 + { }, // 12: 0111 0000 0001 0010 + { }, // 13: 0111 0000 0001 0011 + { }, // 14: 0111 0000 0001 0100 + { }, // 15: 0111 0000 0001 0101 + { }, // 16: 0111 0000 0001 0110 + { }, // 17: 0111 0000 0001 0111 + { }, // 18: 0111 0000 0001 1000 + { }, // 19: 0111 0000 0001 1001 + { }, // 1a: 0111 0000 0001 1010 + { }, // 1b: 0111 0000 0001 1011 + { }, // 1c: 0111 0000 0001 1100 + { }, // 1d: 0111 0000 0001 1101 + {SBCD, "%w" }, // 1e: 0111 0000 0001 1110 llll llll hhhh hhhh + {LBCD, "%w" }, // 1f: 0111 0000 0001 1111 llll llll hhhh hhhh - { }, // 20: 0100 1000 0010 0000 - {SLR, "A" }, // 21: 0100 1000 0010 0001 - {SLR, "B" }, // 22: 0100 1000 0010 0010 - {SLR, "C" }, // 23: 0100 1000 0010 0011 - { }, // 24: 0100 1000 0010 0100 - {SLL, "A" }, // 25: 0100 1000 0010 0101 - {SLL, "B" }, // 26: 0100 1000 0010 0110 - {SLL, "C" }, // 27: 0100 1000 0010 0111 - {JEA, nullptr }, // 28: 0100 1000 0010 1000 - {CALB,nullptr }, // 29: 0100 1000 0010 1001 - {CLC, nullptr }, // 2a: 0100 1000 0010 1010 - {STC, nullptr }, // 2b: 0100 1000 0010 1011 - { }, // 2c: 0100 1000 0010 1100 - {MUL, "A" }, // 2d: 0100 1000 0010 1101 - {MUL, "B" }, // 2e: 0100 1000 0010 1110 - {MUL, "C" }, // 2f: 0100 1000 0010 1111 + { }, // 20: 0111 0000 0010 0000 + { }, // 21: 0111 0000 0010 0001 + { }, // 22: 0111 0000 0010 0010 + { }, // 23: 0111 0000 0010 0011 + { }, // 24: 0111 0000 0010 0100 + { }, // 25: 0111 0000 0010 0101 + { }, // 26: 0111 0000 0010 0110 + { }, // 27: 0111 0000 0010 0111 + { }, // 28: 0111 0000 0010 1000 + { }, // 29: 0111 0000 0010 1001 + { }, // 2a: 0111 0000 0010 1010 + { }, // 2b: 0111 0000 0010 1011 + { }, // 2c: 0111 0000 0010 1100 + { }, // 2d: 0111 0000 0010 1101 + {SDED, "%w" }, // 2e: 0111 0000 0010 1110 llll llll hhhh hhhh + {LDED, "%w" }, // 2f: 0111 0000 0010 1111 llll llll hhhh hhhh - { }, // 30: 0100 1000 0011 0000 - {RLR, "A" }, // 31: 0100 1000 0011 0001 - {RLR, "B" }, // 32: 0100 1000 0011 0010 - {RLR, "C" }, // 33: 0100 1000 0011 0011 - { }, // 34: 0100 1000 0011 0100 - {RLL, "A" }, // 35: 0100 1000 0011 0101 - {RLL, "B" }, // 36: 0100 1000 0011 0110 - {RLL, "C" }, // 37: 0100 1000 0011 0111 - {RLD, nullptr }, // 38: 0100 1000 0011 1000 - {RRD, nullptr }, // 39: 0100 1000 0011 1001 - {NEGA, nullptr }, // 3a: 0100 1000 0011 1010 - {HALT, nullptr }, // 3b: 0100 1000 0011 1011 - { }, // 3c: 0100 1000 0011 1100 - {DIV, "A" }, // 3d: 0100 1000 0011 1101 - {DIV, "B" }, // 3e: 0100 1000 0011 1110 - {DIV, "C" }, // 3f: 0100 1000 0011 1111 + { }, // 30: 0111 0000 0011 0000 + { }, // 31: 0111 0000 0011 0001 + { }, // 32: 0111 0000 0011 0010 + { }, // 33: 0111 0000 0011 0011 + { }, // 34: 0111 0000 0011 0100 + { }, // 35: 0111 0000 0011 0101 + { }, // 36: 0111 0000 0011 0110 + { }, // 37: 0111 0000 0011 0111 + { }, // 38: 0111 0000 0011 1000 + { }, // 39: 0111 0000 0011 1001 + { }, // 3a: 0111 0000 0011 1010 + { }, // 3b: 0111 0000 0011 1011 + { }, // 3c: 0111 0000 0011 1100 + { }, // 3d: 0111 0000 0011 1101 + {SHLD, "%w" }, // 3e: 0111 0000 0011 1110 llll llll hhhh hhhh + {LHLD, "%w" }, // 3f: 0111 0000 0011 1111 llll llll hhhh hhhh - {SKIT, "NMI" }, // 40: 0100 1000 0100 0000 - {SKIT, "FT0" }, // 41: 0100 1000 0100 0001 - {SKIT, "FT1" }, // 42: 0100 1000 0100 0010 - {SKIT, "F1" }, // 43: 0100 1000 0100 0011 - {SKIT, "F2" }, // 44: 0100 1000 0100 0100 - {SKIT, "FE0" }, // 45: 0100 1000 0100 0101 - {SKIT, "FE1" }, // 46: 0100 1000 0100 0110 - {SKIT, "FEIN" }, // 47: 0100 1000 0100 0111 - {SKIT, "FAD" }, // 48: 0100 1000 0100 1000 - {SKIT, "FSR" }, // 49: 0100 1000 0100 1001 - {SKIT, "FST" }, // 4a: 0100 1000 0100 1010 - {SKIT, "ER" }, // 4b: 0100 1000 0100 1011 - {SKIT, "OV" }, // 4c: 0100 1000 0100 1100 - { }, // 4d: 0100 1000 0100 1101 - { }, // 4e: 0100 1000 0100 1110 - { }, // 4f: 0100 1000 0100 1111 + {EADD, "EA,V" }, // 40: 0111 0000 0100 0000 + {EADD, "EA,A" }, // 41: 0111 0000 0100 0001 + {EADD, "EA,B" }, // 42: 0111 0000 0100 0010 + {EADD, "EA,C" }, // 43: 0111 0000 0100 0011 + { }, // 44: 0111 0000 0100 0100 + { }, // 45: 0111 0000 0100 0101 + { }, // 46: 0111 0000 0100 0110 + { }, // 47: 0111 0000 0100 0111 + { }, // 48: 0111 0000 0100 1000 + { }, // 49: 0111 0000 0100 1001 + { }, // 4a: 0111 0000 0100 1010 + { }, // 4b: 0111 0000 0100 1011 + { }, // 4c: 0111 0000 0100 1100 + { }, // 4d: 0111 0000 0100 1101 + { }, // 4e: 0111 0000 0100 1110 + { }, // 4f: 0111 0000 0100 1111 - {SKIT, "AN4" }, // 50: 0100 1000 0101 0000 - {SKIT, "AN5" }, // 51: 0100 1000 0101 0001 - {SKIT, "AN6" }, // 52: 0100 1000 0101 0010 - {SKIT, "AN7" }, // 53: 0100 1000 0101 0011 - {SKIT, "SB" }, // 54: 0100 1000 0101 0100 - { }, // 55: 0100 1000 0101 0101 - { }, // 56: 0100 1000 0101 0110 - { }, // 57: 0100 1000 0101 0111 - { }, // 58: 0100 1000 0101 1000 - { }, // 59: 0100 1000 0101 1001 - { }, // 5a: 0100 1000 0101 1010 - { }, // 5b: 0100 1000 0101 1011 - { }, // 5c: 0100 1000 0101 1100 - { }, // 5d: 0100 1000 0101 1101 - { }, // 5e: 0100 1000 0101 1110 - { }, // 5f: 0100 1000 0101 1111 + { }, // 50: 0111 0000 0101 0000 + { }, // 51: 0111 0000 0101 0001 + { }, // 52: 0111 0000 0101 0010 + { }, // 53: 0111 0000 0101 0011 + { }, // 54: 0111 0000 0101 0100 + { }, // 55: 0111 0000 0101 0101 + { }, // 56: 0111 0000 0101 0110 + { }, // 57: 0111 0000 0101 0111 + { }, // 58: 0111 0000 0101 1000 + { }, // 59: 0111 0000 0101 1001 + { }, // 5a: 0111 0000 0101 1010 + { }, // 5b: 0111 0000 0101 1011 + { }, // 5c: 0111 0000 0101 1100 + { }, // 5d: 0111 0000 0101 1101 + { }, // 5e: 0111 0000 0101 1110 + { }, // 5f: 0111 0000 0101 1111 - {SKNIT, "NMI" }, // 60: 0100 1000 0110 0000 - {SKNIT, "FT0" }, // 61: 0100 1000 0110 0001 - {SKNIT, "FT1" }, // 62: 0100 1000 0110 0010 - {SKNIT, "F1" }, // 63: 0100 1000 0110 0011 - {SKNIT, "F2" }, // 64: 0100 1000 0110 0100 - {SKNIT, "FE0" }, // 65: 0100 1000 0110 0101 - {SKNIT, "FE1" }, // 66: 0100 1000 0110 0110 - {SKNIT, "FEIN" }, // 67: 0100 1000 0110 0111 - {SKNIT, "FAD" }, // 68: 0100 1000 0110 1000 - {SKNIT, "FSR" }, // 69: 0100 1000 0110 1001 - {SKNIT, "FST" }, // 6a: 0100 1000 0110 1010 - {SKNIT, "ER" }, // 6b: 0100 1000 0110 1011 - {SKNIT, "OV" }, // 6c: 0100 1000 0110 1100 - { }, // 6d: 0100 1000 0110 1101 - { }, // 6e: 0100 1000 0110 1110 - { }, // 6f: 0100 1000 0110 1111 + {ESUB, "EA,V" }, // 60: 0111 0000 0110 0000 + {ESUB, "EA,A" }, // 61: 0111 0000 0110 0001 + {ESUB, "EA,B" }, // 62: 0111 0000 0110 0010 + {ESUB, "EA,C" }, // 63: 0111 0000 0110 0011 + { }, // 64: 0111 0000 0110 0100 + { }, // 65: 0111 0000 0110 0101 + { }, // 66: 0111 0000 0110 0110 + { }, // 67: 0111 0000 0110 0111 + {MOV, "V,(%w)" }, // 68: 0111 0000 0110 1000 llll llll hhhh hhhh + {MOV, "A,(%w)" }, // 69: 0111 0000 0110 1001 llll llll hhhh hhhh + {MOV, "B,(%w)" }, // 6a: 0111 0000 0110 1010 llll llll hhhh hhhh + {MOV, "C,(%w)" }, // 6b: 0111 0000 0110 1011 llll llll hhhh hhhh + {MOV, "D,(%w)" }, // 6c: 0111 0000 0110 1100 llll llll hhhh hhhh + {MOV, "E,(%w)" }, // 6d: 0111 0000 0110 1101 llll llll hhhh hhhh + {MOV, "H,(%w)" }, // 6e: 0111 0000 0110 1110 llll llll hhhh hhhh + {MOV, "L,(%w)" }, // 6f: 0111 0000 0110 1111 llll llll hhhh hhhh - {SKNIT, "AN4" }, // 70: 0100 1000 0111 0000 - {SKNIT, "AN5" }, // 71: 0100 1000 0111 0001 - {SKNIT, "AN6" }, // 72: 0100 1000 0111 0010 - {SKNIT, "AN7" }, // 73: 0100 1000 0111 0011 - {SKNIT, "SB" }, // 74: 0100 1000 0111 0100 - { }, // 75: 0100 1000 0111 0101 - { }, // 76: 0100 1000 0111 0110 - { }, // 77: 0100 1000 0111 0111 - { }, // 78: 0100 1000 0111 1000 - { }, // 79: 0100 1000 0111 1001 - { }, // 7a: 0100 1000 0111 1010 - { }, // 7b: 0100 1000 0111 1011 - { }, // 7c: 0100 1000 0111 1100 - { }, // 7d: 0100 1000 0111 1101 - { }, // 7e: 0100 1000 0111 1110 - { }, // 7f: 0100 1000 0111 1111 + { }, // 70: 0111 0000 0111 0000 + { }, // 71: 0111 0000 0111 0001 + { }, // 72: 0111 0000 0111 0010 + { }, // 73: 0111 0000 0111 0011 + { }, // 74: 0111 0000 0111 0100 + { }, // 75: 0111 0000 0111 0101 + { }, // 76: 0111 0000 0111 0110 + { }, // 77: 0111 0000 0111 0111 + {MOV, "(%w),V" }, // 78: 0111 0000 0111 1000 llll llll hhhh hhhh + {MOV, "(%w),A" }, // 79: 0111 0000 0111 1001 llll llll hhhh hhhh + {MOV, "(%w),B" }, // 7a: 0111 0000 0111 1010 llll llll hhhh hhhh + {MOV, "(%w),C" }, // 7b: 0111 0000 0111 1011 llll llll hhhh hhhh + {MOV, "(%w),D" }, // 7c: 0111 0000 0111 1100 llll llll hhhh hhhh + {MOV, "(%w),E" }, // 7d: 0111 0000 0111 1101 llll llll hhhh hhhh + {MOV, "(%w),H" }, // 7e: 0111 0000 0111 1110 llll llll hhhh hhhh + {MOV, "(%w),L" }, // 7f: 0111 0000 0111 1111 llll llll hhhh hhhh - { }, // 80: 0100 1000 1000 0000 - { }, // 81: 0100 1000 1000 0001 - {LDEAX, "(DE)" }, // 82: 0100 1000 1000 0010 - {LDEAX, "(HL)" }, // 83: 0100 1000 1000 0011 - {LDEAX, "(DE++)" }, // 84: 0100 1000 1000 0100 - {LDEAX, "(HL++)" }, // 85: 0100 1000 1000 0101 - { }, // 86: 0100 1000 1000 0110 - { }, // 87: 0100 1000 1000 0111 - { }, // 88: 0100 1000 1000 1000 - { }, // 89: 0100 1000 1000 1001 - { }, // 8a: 0100 1000 1000 1010 - {LDEAX, "(DE+%b)" }, // 8b: 0100 1000 1000 1011 xxxx xxxx - {LDEAX, "(HL+A)" }, // 8c: 0100 1000 1000 1100 - {LDEAX, "(HL+B)" }, // 8d: 0100 1000 1000 1101 - {LDEAX, "(HL+EA)" }, // 8e: 0100 1000 1000 1110 - {LDEAX, "(HL+%b)" }, // 8f: 0100 1000 1000 1111 xxxx xxxx + { }, // 80: 0111 0000 1000 0000 + { }, // 81: 0111 0000 1000 0001 + { }, // 82: 0111 0000 1000 0010 + { }, // 83: 0111 0000 1000 0011 + { }, // 84: 0111 0000 1000 0100 + { }, // 85: 0111 0000 1000 0101 + { }, // 86: 0111 0000 1000 0110 + { }, // 87: 0111 0000 1000 0111 + { }, // 88: 0111 0000 1000 1000 + {ANAX, "(BC)" }, // 89: 0111 0000 1000 1001 + {ANAX, "(DE)" }, // 8a: 0111 0000 1000 1010 + {ANAX, "(HL)" }, // 8b: 0111 0000 1000 1011 + {ANAX, "(DE+)" }, // 8c: 0111 0000 1000 1100 + {ANAX, "(HL+)" }, // 8d: 0111 0000 1000 1101 + {ANAX, "(DE-)" }, // 8e: 0111 0000 1000 1110 + {ANAX, "(HL-)" }, // 8f: 0111 0000 1000 1111 - { }, // 90: 0100 1000 1000 0000 - { }, // 91: 0100 1000 1000 0001 - {STEAX, "(DE)" }, // 92: 0100 1000 1000 0010 - {STEAX, "(HL)" }, // 93: 0100 1000 1000 0011 - {STEAX, "(DE++)" }, // 94: 0100 1000 1000 0100 - {STEAX, "(HL++)" }, // 95: 0100 1000 1000 0101 - { }, // 96: 0100 1000 1000 0110 - { }, // 97: 0100 1000 1000 0111 - { }, // 98: 0100 1000 1000 1000 - { }, // 99: 0100 1000 1000 1001 - { }, // 9a: 0100 1000 1000 1010 - {STEAX, "(DE+%b)" }, // 9b: 0100 1000 1000 1011 xxxx xxxx - {STEAX, "(HL+A)" }, // 9c: 0100 1000 1000 1100 - {STEAX, "(HL+B)" }, // 9d: 0100 1000 1000 1101 - {STEAX, "(HL+EA)" }, // 9e: 0100 1000 1000 1110 - {STEAX, "(HL+%b)" }, // 9f: 0100 1000 1000 1111 xxxx xxxx + { }, // 90: 0111 0000 1001 0000 + {XRAX, "(BC)" }, // 91: 0111 0000 1001 0001 + {XRAX, "(DE)" }, // 92: 0111 0000 1001 0010 + {XRAX, "(HL)" }, // 93: 0111 0000 1001 0011 + {XRAX, "(DE+)" }, // 94: 0111 0000 1001 0100 + {XRAX, "(HL+)" }, // 95: 0111 0000 1001 0101 + {XRAX, "(DE-)" }, // 96: 0111 0000 1001 0110 + {XRAX, "(HL-)" }, // 97: 0111 0000 1001 0111 + { }, // 98: 0111 0000 1001 1000 + {ORAX, "(BC)" }, // 99: 0111 0000 1001 1001 + {ORAX, "(DE)" }, // 9a: 0111 0000 1001 1010 + {ORAX, "(HL)" }, // 9b: 0111 0000 1001 1011 + {ORAX, "(DE+)" }, // 9c: 0111 0000 1001 1100 + {ORAX, "(HL+)" }, // 9d: 0111 0000 1001 1101 + {ORAX, "(DE-)" }, // 9e: 0111 0000 1001 1110 + {ORAX, "(HL-)" }, // 9f: 0111 0000 1001 1111 - {DSLR, "EA" }, // a0: 0100 1000 1010 0000 - { }, // a1: 0100 1000 1010 0001 - { }, // a2: 0100 1000 1010 0010 - { }, // a3: 0100 1000 1010 0011 - {DSLL, "EA" }, // a4: 0100 1000 1010 0100 - { }, // a5: 0100 1000 1010 0101 - { }, // a6: 0100 1000 1010 0110 - { }, // a7: 0100 1000 1010 0111 - {TABLE, nullptr }, // a8: 0100 1000 1010 1000 - { }, // a9: 0100 1000 1010 1001 - { }, // aa: 0100 1000 1010 1010 - { }, // ab: 0100 1000 1010 1011 - { }, // ac: 0100 1000 1010 1100 - { }, // ad: 0100 1000 1010 1101 - { }, // ae: 0100 1000 1010 1110 - { }, // af: 0100 1000 1010 1111 + { }, // a0: 0111 0000 1010 0000 + {ADDNCX, "(BC)" }, // a1: 0111 0000 1010 0001 + {ADDNCX, "(DE)" }, // a2: 0111 0000 1010 0010 + {ADDNCX, "(HL)" }, // a3: 0111 0000 1010 0011 + {ADDNCX, "(DE+)" }, // a4: 0111 0000 1010 0100 + {ADDNCX, "(HL+)" }, // a5: 0111 0000 1010 0101 + {ADDNCX, "(DE-)" }, // a6: 0111 0000 1010 0110 + {ADDNCX, "(HL-)" }, // a7: 0111 0000 1010 0111 + { }, // a8: 0111 0000 1010 1000 + {GTAX, "(BC)" }, // a9: 0111 0000 1010 1001 + {GTAX, "(DE)" }, // aa: 0111 0000 1010 1010 + {GTAX, "(HL)" }, // ab: 0111 0000 1010 1011 + {GTAX, "(DE+)" }, // ac: 0111 0000 1010 1100 + {GTAX, "(HL+)" }, // ad: 0111 0000 1010 1101 + {GTAX, "(DE-)" }, // ae: 0111 0000 1010 1110 + {GTAX, "(HL-)" }, // af: 0111 0000 1010 1111 - {DRLR, "EA" }, // b0: 0100 1000 1011 0000 - { }, // b1: 0100 1000 1011 0001 - { }, // b2: 0100 1000 1011 0010 - { }, // b3: 0100 1000 1011 0011 - {DRLL, "EA" }, // b4: 0100 1000 1011 0100 - { }, // b5: 0100 1000 1011 0101 - { }, // b6: 0100 1000 1011 0110 - { }, // b7: 0100 1000 1011 0111 - { }, // b8: 0100 1000 1011 1000 - { }, // b9: 0100 1000 1011 1001 - { }, // ba: 0100 1000 1011 1010 - {STOP, nullptr }, // bb: 0100 1000 1011 1011 7810 - { }, // bc: 0100 1000 1011 1100 - { }, // bd: 0100 1000 1011 1101 - { }, // be: 0100 1000 1011 1110 - { }, // bf: 0100 1000 1011 1111 + { }, // b0: 0111 0000 1011 0000 + {SUBNBX, "(BC)" }, // b1: 0111 0000 1011 0001 + {SUBNBX, "(DE)" }, // b2: 0111 0000 1011 0010 + {SUBNBX, "(HL)" }, // b3: 0111 0000 1011 0011 + {SUBNBX, "(DE+)" }, // b4: 0111 0000 1011 0100 + {SUBNBX, "(HL+)" }, // b5: 0111 0000 1011 0101 + {SUBNBX, "(DE-)" }, // b6: 0111 0000 1011 0110 + {SUBNBX, "(HL-)" }, // b7: 0111 0000 1011 0111 + { }, // b8: 0111 0000 1011 1000 + {LTAX, "(BC)" }, // b9: 0111 0000 1011 1001 + {LTAX, "(DE)" }, // ba: 0111 0000 1011 1010 + {LTAX, "(HL)" }, // bb: 0111 0000 1011 1011 + {LTAX, "(DE+)" }, // bc: 0111 0000 1011 1100 + {LTAX, "(HL+)" }, // bd: 0111 0000 1011 1101 + {LTAX, "(DE-)" }, // be: 0111 0000 1011 1110 + {LTAX, "(HL-)" }, // bf: 0111 0000 1011 1111 - {DMOV, "EA,ECNT" }, // c0: 0100 1000 1100 0000 - {DMOV, "EA,ECPT" }, // c1: 0100 1000 1100 0001 7810 - { }, // c2: 0100 1000 1100 0010 - { }, // c3: 0100 1000 1100 0011 - { }, // c4: 0100 1000 1100 0100 - { }, // c5: 0100 1000 1100 0101 - { }, // c6: 0100 1000 1100 0110 - { }, // c7: 0100 1000 1100 0111 - { }, // c8: 0100 1000 1100 1000 - { }, // c9: 0100 1000 1100 1001 - { }, // ca: 0100 1000 1100 1010 - { }, // cb: 0100 1000 1100 1011 - { }, // cc: 0100 1000 1100 1100 - { }, // cd: 0100 1000 1100 1101 - { }, // ce: 0100 1000 1100 1110 - { }, // cf: 0100 1000 1100 1111 + { }, // c0: 0111 0000 1100 0000 + {ADDX, "(BC)" }, // c1: 0111 0000 1100 0001 + {ADDX, "(DE)" }, // c2: 0111 0000 1100 0010 + {ADDX, "(HL)" }, // c3: 0111 0000 1100 0011 + {ADDX, "(DE+)" }, // c4: 0111 0000 1100 0100 + {ADDX, "(HL+)" }, // c5: 0111 0000 1100 0101 + {ADDX, "(DE-)" }, // c6: 0111 0000 1100 0110 + {ADDX, "(HL-)" }, // c7: 0111 0000 1100 0111 + { }, // c8: 0111 0000 1100 1000 + {ONAX, "(BC)" }, // c9: 0111 0000 1100 1001 + {ONAX, "(DE)" }, // ca: 0111 0000 1100 1010 + {ONAX, "(HL)" }, // cb: 0111 0000 1100 1011 + {ONAX, "(DE+)" }, // cc: 0111 0000 1100 1100 + {ONAX, "(HL+)" }, // cd: 0111 0000 1100 1101 + {ONAX, "(DE-)" }, // ce: 0111 0000 1100 1110 + {ONAX, "(HL-)" }, // cf: 0111 0000 1100 1111 - { }, // d0: 0100 1000 1101 0000 - { }, // d1: 0100 1000 1101 0001 - {DMOV, "ETM0,EA" }, // d2: 0100 1000 1101 0010 - {DMOV, "ETM1,EA" }, // d3: 0100 1000 1101 0011 - { }, // d4: 0100 1000 1101 0100 - { }, // d5: 0100 1000 1101 0101 - { }, // d6: 0100 1000 1101 0110 - { }, // d7: 0100 1000 1101 0111 - { }, // d8: 0100 1000 1101 1000 - { }, // d9: 0100 1000 1101 1001 - { }, // da: 0100 1000 1101 1010 - { }, // db: 0100 1000 1101 1011 - { }, // dc: 0100 1000 1101 1100 - { }, // dd: 0100 1000 1101 1101 - { }, // de: 0100 1000 1101 1110 - { }, // df: 0100 1000 1101 1111 + { }, // d0: 0111 0000 1101 0000 + {ADCX, "(BC)" }, // d1: 0111 0000 1101 0001 + {ADCX, "(DE)" }, // d2: 0111 0000 1101 0010 + {ADCX, "(HL)" }, // d3: 0111 0000 1101 0011 + {ADCX, "(DE+)" }, // d4: 0111 0000 1101 0100 + {ADCX, "(HL+)" }, // d5: 0111 0000 1101 0101 + {ADCX, "(DE-)" }, // d6: 0111 0000 1101 0110 + {ADCX, "(HL-)" }, // d7: 0111 0000 1101 0111 + { }, // d8: 0111 0000 1101 1000 + {OFFAX, "(BC)" }, // d9: 0111 0000 1101 1001 + {OFFAX, "(DE)" }, // da: 0111 0000 1101 1010 + {OFFAX, "(HL)" }, // db: 0111 0000 1101 1011 + {OFFAX, "(DE+)" }, // dc: 0111 0000 1101 1100 + {OFFAX, "(HL+)" }, // dd: 0111 0000 1101 1101 + {OFFAX, "(DE-)" }, // de: 0111 0000 1101 1110 + {OFFAX, "(HL-)" }, // df: 0111 0000 1101 1111 - { }, // e0: 0100 1000 1110 0000 - { }, // e1: 0100 1000 1110 0001 - { }, // e2: 0100 1000 1110 0010 - { }, // e3: 0100 1000 1110 0011 - { }, // e4: 0100 1000 1110 0100 - { }, // e5: 0100 1000 1110 0101 - { }, // e6: 0100 1000 1110 0110 - { }, // e7: 0100 1000 1110 0111 - { }, // e8: 0100 1000 1110 1000 - { }, // e9: 0100 1000 1110 1001 - { }, // ea: 0100 1000 1110 1010 - { }, // eb: 0100 1000 1110 1011 - { }, // ec: 0100 1000 1110 1100 - { }, // ed: 0100 1000 1110 1101 - { }, // ee: 0100 1000 1110 1110 - { }, // ef: 0100 1000 1110 1111 + { }, // e0: 0111 0000 1110 0000 + {SUBX, "(BC)" }, // e1: 0111 0000 1110 0001 + {SUBX, "(DE)" }, // e2: 0111 0000 1110 0010 + {SUBX, "(HL)" }, // e3: 0111 0000 1110 0011 + {SUBX, "(DE+)" }, // e4: 0111 0000 1110 0100 + {SUBX, "(HL+)" }, // e5: 0111 0000 1110 0101 + {SUBX, "(DE-)" }, // e6: 0111 0000 1110 0110 + {SUBX, "(HL-)" }, // e7: 0111 0000 1110 0111 + { }, // e8: 0111 0000 1110 1000 + {NEAX, "(BC)" }, // e9: 0111 0000 1110 1001 + {NEAX, "(DE)" }, // ea: 0111 0000 1110 1010 + {NEAX, "(HL)" }, // eb: 0111 0000 1110 1011 + {NEAX, "(DE+)" }, // ec: 0111 0000 1110 1100 + {NEAX, "(HL+)" }, // ed: 0111 0000 1110 1101 + {NEAX, "(DE-)" }, // ee: 0111 0000 1110 1110 + {NEAX, "(HL-)" }, // ef: 0111 0000 1110 1111 - { }, // f0: 0100 1000 1111 0000 - { }, // f1: 0100 1000 1111 0001 - { }, // f2: 0100 1000 1111 0010 - { }, // f3: 0100 1000 1111 0011 - { }, // f4: 0100 1000 1111 0100 - { }, // f5: 0100 1000 1111 0101 - { }, // f6: 0100 1000 1111 0110 - { }, // f7: 0100 1000 1111 0111 - { }, // f8: 0100 1000 1111 1000 - { }, // f9: 0100 1000 1111 1001 - { }, // fa: 0100 1000 1111 1010 - { }, // fb: 0100 1000 1111 1011 - { }, // fc: 0100 1000 1111 1100 - { }, // fd: 0100 1000 1111 1101 - { }, // fe: 0100 1000 1111 1110 - { } // ff: 0100 1000 1111 1111 + { }, // f0: 0111 0000 1111 0000 + {SBBX, "(BC)" }, // f1: 0111 0000 1111 0001 + {SBBX, "(DE)" }, // f2: 0111 0000 1111 0010 + {SBBX, "(HL)" }, // f3: 0111 0000 1111 0011 + {SBBX, "(DE+)" }, // f4: 0111 0000 1111 0100 + {SBBX, "(HL+)" }, // f5: 0111 0000 1111 0101 + {SBBX, "(DE-)" }, // f6: 0111 0000 1111 0110 + {SBBX, "(HL-)" }, // f7: 0111 0000 1111 0111 + { }, // f8: 0111 0000 1111 1000 + {EQAX, "(BC)" }, // f9: 0111 0000 1111 1001 + {EQAX, "(DE)" }, // fa: 0111 0000 1111 1010 + {EQAX, "(HL)" }, // fb: 0111 0000 1111 1011 + {EQAX, "(DE+)" }, // fc: 0111 0000 1111 1100 + {EQAX, "(HL+)" }, // fd: 0111 0000 1111 1101 + {EQAX, "(DE-)" }, // fe: 0111 0000 1111 1110 + {EQAX, "(HL-)" } // ff: 0111 0000 1111 1111 +}; + +// prefix 74 +const upd7810_base_disassembler::dasm_s upd7810_base_disassembler::d74[256] = +{ + { }, // 00: 0111 0100 0000 0000 + { }, // 01: 0111 0100 0000 0001 + { }, // 02: 0111 0100 0000 0010 + { }, // 03: 0111 0100 0000 0011 + { }, // 04: 0111 0100 0000 0100 + { }, // 05: 0111 0100 0000 0101 + { }, // 06: 0111 0100 0000 0110 + { }, // 07: 0111 0100 0000 0111 + {ANI, "V,%b" }, // 08: 0111 0100 0000 1000 xxxx xxxx + {ANI, "A,%b" }, // 09: 0111 0100 0000 1001 xxxx xxxx + {ANI, "B,%b" }, // 0a: 0111 0100 0000 1010 xxxx xxxx + {ANI, "C,%b" }, // 0b: 0111 0100 0000 1011 xxxx xxxx + {ANI, "D,%b" }, // 0c: 0111 0100 0000 1100 xxxx xxxx + {ANI, "E,%b" }, // 0d: 0111 0100 0000 1101 xxxx xxxx + {ANI, "H,%b" }, // 0e: 0111 0100 0000 1110 xxxx xxxx + {ANI, "L,%b" }, // 0f: 0111 0100 0000 1111 xxxx xxxx + + {XRI, "V,%b" }, // 10: 0111 0100 0001 0000 xxxx xxxx + {XRI, "A,%b" }, // 11: 0111 0100 0001 0001 xxxx xxxx + {XRI, "B,%b" }, // 12: 0111 0100 0001 0010 xxxx xxxx + {XRI, "C,%b" }, // 13: 0111 0100 0001 0011 xxxx xxxx + {XRI, "D,%b" }, // 14: 0111 0100 0001 0100 xxxx xxxx + {XRI, "E,%b" }, // 15: 0111 0100 0001 0101 xxxx xxxx + {XRI, "H,%b" }, // 16: 0111 0100 0001 0110 xxxx xxxx + {XRI, "L,%b" }, // 17: 0111 0100 0001 0111 xxxx xxxx + {ORI, "V,%b" }, // 18: 0111 0100 0001 1000 xxxx xxxx + {ORI, "A,%b" }, // 19: 0111 0100 0001 1001 xxxx xxxx + {ORI, "B,%b" }, // 1a: 0111 0100 0001 1010 xxxx xxxx + {ORI, "C,%b" }, // 1b: 0111 0100 0001 1011 xxxx xxxx + {ORI, "D,%b" }, // 1c: 0111 0100 0001 1100 xxxx xxxx + {ORI, "E,%b" }, // 1d: 0111 0100 0001 1101 xxxx xxxx + {ORI, "H,%b" }, // 1e: 0111 0100 0001 1110 xxxx xxxx + {ORI, "L,%b" }, // 1f: 0111 0100 0001 1111 xxxx xxxx + + {ADINC, "V,%b" }, // 20: 0111 0100 0010 0000 xxxx xxxx + {ADINC, "A,%b" }, // 21: 0111 0100 0010 0001 xxxx xxxx + {ADINC, "B,%b" }, // 22: 0111 0100 0010 0010 xxxx xxxx + {ADINC, "C,%b" }, // 23: 0111 0100 0010 0011 xxxx xxxx + {ADINC, "D,%b" }, // 24: 0111 0100 0010 0100 xxxx xxxx + {ADINC, "E,%b" }, // 25: 0111 0100 0010 0101 xxxx xxxx + {ADINC, "H,%b" }, // 26: 0111 0100 0010 0110 xxxx xxxx + {ADINC, "L,%b" }, // 27: 0111 0100 0010 0111 xxxx xxxx + {GTI, "V,%b" }, // 28: 0111 0100 0010 1000 xxxx xxxx + {GTI, "A,%b" }, // 29: 0111 0100 0010 1001 xxxx xxxx + {GTI, "B,%b" }, // 2a: 0111 0100 0010 1010 xxxx xxxx + {GTI, "C,%b" }, // 2b: 0111 0100 0010 1011 xxxx xxxx + {GTI, "D,%b" }, // 2c: 0111 0100 0010 1100 xxxx xxxx + {GTI, "E,%b" }, // 2d: 0111 0100 0010 1101 xxxx xxxx + {GTI, "H,%b" }, // 2e: 0111 0100 0010 1110 xxxx xxxx + {GTI, "L,%b" }, // 2f: 0111 0100 0010 1111 xxxx xxxx + + {SUINB, "V,%b" }, // 30: 0111 0100 0011 0000 xxxx xxxx + {SUINB, "A,%b" }, // 31: 0111 0100 0011 0001 xxxx xxxx + {SUINB, "B,%b" }, // 32: 0111 0100 0011 0010 xxxx xxxx + {SUINB, "C,%b" }, // 33: 0111 0100 0011 0011 xxxx xxxx + {SUINB, "D,%b" }, // 34: 0111 0100 0011 0100 xxxx xxxx + {SUINB, "E,%b" }, // 35: 0111 0100 0011 0101 xxxx xxxx + {SUINB, "H,%b" }, // 36: 0111 0100 0011 0110 xxxx xxxx + {SUINB, "L,%b" }, // 37: 0111 0100 0011 0111 xxxx xxxx + {LTI, "V,%b" }, // 37: 0111 0100 0011 1000 xxxx xxxx + {LTI, "A,%b" }, // 39: 0111 0100 0011 1001 xxxx xxxx + {LTI, "B,%b" }, // 3a: 0111 0100 0011 1010 xxxx xxxx + {LTI, "C,%b" }, // 3b: 0111 0100 0011 1011 xxxx xxxx + {LTI, "D,%b" }, // 3c: 0111 0100 0011 1100 xxxx xxxx + {LTI, "E,%b" }, // 3d: 0111 0100 0011 1101 xxxx xxxx + {LTI, "H,%b" }, // 3e: 0111 0100 0011 1110 xxxx xxxx + {LTI, "L,%b" }, // 3f: 0111 0100 0011 1111 xxxx xxxx + + {ADI, "V,%b" }, // 40: 0111 0100 0100 0000 xxxx xxxx + {ADI, "A,%b" }, // 41: 0111 0100 0100 0001 xxxx xxxx + {ADI, "B,%b" }, // 42: 0111 0100 0100 0010 xxxx xxxx + {ADI, "C,%b" }, // 43: 0111 0100 0100 0011 xxxx xxxx + {ADI, "D,%b" }, // 44: 0111 0100 0100 0100 xxxx xxxx + {ADI, "E,%b" }, // 45: 0111 0100 0100 0101 xxxx xxxx + {ADI, "H,%b" }, // 46: 0111 0100 0100 0110 xxxx xxxx + {ADI, "L,%b" }, // 47: 0111 0100 0100 0111 xxxx xxxx + {ONI, "V,%b" }, // 48: 0111 0100 0100 1000 xxxx xxxx + {ONI, "A,%b" }, // 49: 0111 0100 0100 1001 xxxx xxxx + {ONI, "B,%b" }, // 4a: 0111 0100 0100 1010 xxxx xxxx + {ONI, "C,%b" }, // 4b: 0111 0100 0100 1011 xxxx xxxx + {ONI, "D,%b" }, // 4c: 0111 0100 0100 1100 xxxx xxxx + {ONI, "E,%b" }, // 4d: 0111 0100 0100 1101 xxxx xxxx + {ONI, "H,%b" }, // 4e: 0111 0100 0100 1110 xxxx xxxx + {ONI, "L,%b" }, // 4f: 0111 0100 0100 1111 xxxx xxxx + + {ACI, "V,%b" }, // 50: 0111 0100 0101 0000 xxxx xxxx + {ACI, "A,%b" }, // 51: 0111 0100 0101 0001 xxxx xxxx + {ACI, "B,%b" }, // 52: 0111 0100 0101 0010 xxxx xxxx + {ACI, "C,%b" }, // 53: 0111 0100 0101 0011 xxxx xxxx + {ACI, "D,%b" }, // 54: 0111 0100 0101 0100 xxxx xxxx + {ACI, "E,%b" }, // 55: 0111 0100 0101 0101 xxxx xxxx + {ACI, "H,%b" }, // 56: 0111 0100 0101 0110 xxxx xxxx + {ACI, "L,%b" }, // 57: 0111 0100 0101 0111 xxxx xxxx + {OFFI, "V,%b" }, // 58: 0111 0100 0101 1000 xxxx xxxx + {OFFI, "A,%b" }, // 59: 0111 0100 0101 1001 xxxx xxxx + {OFFI, "B,%b" }, // 5a: 0111 0100 0101 1010 xxxx xxxx + {OFFI, "C,%b" }, // 5b: 0111 0100 0101 1011 xxxx xxxx + {OFFI, "D,%b" }, // 5c: 0111 0100 0101 1100 xxxx xxxx + {OFFI, "E,%b" }, // 5d: 0111 0100 0101 1101 xxxx xxxx + {OFFI, "H,%b" }, // 5e: 0111 0100 0101 1110 xxxx xxxx + {OFFI, "L,%b" }, // 5f: 0111 0100 0101 1111 xxxx xxxx + + {SUI, "V,%b" }, // 60: 0111 0100 0110 0000 xxxx xxxx + {SUI, "A,%b" }, // 61: 0111 0100 0110 0001 xxxx xxxx + {SUI, "B,%b" }, // 62: 0111 0100 0110 0010 xxxx xxxx + {SUI, "C,%b" }, // 63: 0111 0100 0110 0011 xxxx xxxx + {SUI, "D,%b" }, // 64: 0111 0100 0110 0100 xxxx xxxx + {SUI, "E,%b" }, // 65: 0111 0100 0110 0101 xxxx xxxx + {SUI, "H,%b" }, // 66: 0111 0100 0110 0110 xxxx xxxx + {SUI, "L,%b" }, // 67: 0111 0100 0110 0111 xxxx xxxx + {NEI, "V,%b" }, // 68: 0111 0100 0110 1000 xxxx xxxx + {NEI, "A,%b" }, // 69: 0111 0100 0110 1001 xxxx xxxx + {NEI, "B,%b" }, // 6a: 0111 0100 0110 1010 xxxx xxxx + {NEI, "C,%b" }, // 6b: 0111 0100 0110 1011 xxxx xxxx + {NEI, "D,%b" }, // 6c: 0111 0100 0110 1100 xxxx xxxx + {NEI, "E,%b" }, // 6d: 0111 0100 0110 1101 xxxx xxxx + {NEI, "H,%b" }, // 6e: 0111 0100 0110 1110 xxxx xxxx + {NEI, "L,%b" }, // 6f: 0111 0100 0110 1111 xxxx xxxx + + {SBI, "V,%b" }, // 70: 0111 0100 0111 0000 xxxx xxxx + {SBI, "A,%b" }, // 71: 0111 0100 0111 0001 xxxx xxxx + {SBI, "B,%b" }, // 72: 0111 0100 0111 0010 xxxx xxxx + {SBI, "C,%b" }, // 73: 0111 0100 0111 0011 xxxx xxxx + {SBI, "D,%b" }, // 74: 0111 0100 0111 0100 xxxx xxxx + {SBI, "E,%b" }, // 75: 0111 0100 0111 0101 xxxx xxxx + {SBI, "H,%b" }, // 76: 0111 0100 0111 0110 xxxx xxxx + {SBI, "L,%b" }, // 77: 0111 0100 0111 0111 xxxx xxxx + {EQI, "V,%b" }, // 78: 0111 0100 0111 1000 xxxx xxxx + {EQI, "A,%b" }, // 79: 0111 0100 0111 1001 xxxx xxxx + {EQI, "B,%b" }, // 7a: 0111 0100 0111 1010 xxxx xxxx + {EQI, "C,%b" }, // 7b: 0111 0100 0111 1011 xxxx xxxx + {EQI, "D,%b" }, // 7c: 0111 0100 0111 1100 xxxx xxxx + {EQI, "E,%b" }, // 7d: 0111 0100 0111 1101 xxxx xxxx + {EQI, "H,%b" }, // 7e: 0111 0100 0111 1110 xxxx xxxx + {EQI, "L,%b" }, // 7f: 0111 0100 0111 1111 xxxx xxxx + + { }, // 80: 0111 0100 1000 0000 + { }, // 81: 0111 0100 1000 0001 + { }, // 82: 0111 0100 1000 0010 + { }, // 83: 0111 0100 1000 0011 + { }, // 84: 0111 0100 1000 0100 + { }, // 85: 0111 0100 1000 0101 + { }, // 86: 0111 0100 1000 0110 + { }, // 87: 0111 0100 1000 0111 + {ANAW, "%a" }, // 88: 0111 0100 1000 1000 oooo oooo + { }, // 89: 0111 0100 1000 1001 + { }, // 8a: 0111 0100 1000 1010 + { }, // 8b: 0111 0100 1000 1011 + { }, // 8c: 0111 0100 1000 1100 + {DAN, "EA,BC" }, // 8d: 0111 0100 1000 1101 + {DAN, "EA,DE" }, // 8e: 0111 0100 1000 1110 + {DAN, "EA,HL" }, // 8f: 0111 0100 1000 1111 + + {XRAW, "%a" }, // 90: 0111 0100 1001 0000 oooo oooo + { }, // 91: 0111 0100 1001 0001 + { }, // 92: 0111 0100 1001 0010 + { }, // 93: 0111 0100 1001 0011 + { }, // 94: 0111 0100 1001 0100 + {DXR, "EA,BC" }, // 95: 0111 0100 1001 0101 + {DXR, "EA,DE" }, // 96: 0111 0100 1001 0110 + {DXR, "EA,HL" }, // 97: 0111 0100 1001 0111 + {ORAW, "%a" }, // 98: 0111 0100 1001 1000 oooo oooo + { }, // 99: 0111 0100 1001 1001 + { }, // 9a: 0111 0100 1001 1010 + { }, // 9b: 0111 0100 1001 1011 + { }, // 9c: 0111 0100 1001 1100 + {DOR, "EA,BC" }, // 9d: 0111 0100 1001 1101 + {DOR, "EA,DE" }, // 9e: 0111 0100 1001 1110 + {DOR, "EA,HL" }, // 9f: 0111 0100 1001 1111 + + {ADDNCW, "%a" }, // a0: 0111 0100 1010 0000 oooo oooo + { }, // a1: 0111 0100 1010 0001 + { }, // a2: 0111 0100 1010 0010 + { }, // a3: 0111 0100 1010 0011 + { }, // a4: 0111 0100 1010 0100 + {DADDNC, "EA,BC" }, // a5: 0111 0100 1010 0101 + {DADDNC, "EA,DE" }, // a6: 0111 0100 1010 0110 + {DADDNC, "EA,HL" }, // a7: 0111 0100 1010 0111 + {GTAW, "%a" }, // a8: 0111 0100 1010 1000 oooo oooo + { }, // a9: 0111 0100 1010 1001 + { }, // aa: 0111 0100 1010 1010 + { }, // ab: 0111 0100 1010 1011 + { }, // ac: 0111 0100 1010 1100 + {DGT, "EA,BC" }, // ad: 0111 0100 1010 1101 + {DGT, "EA,DE" }, // ae: 0111 0100 1010 1110 + {DGT, "EA,HL" }, // af: 0111 0100 1010 1111 + + {SUBNBW, "%a" }, // b0: 0111 0100 1011 0000 oooo oooo + { }, // b1: 0111 0100 1011 0001 + { }, // b2: 0111 0100 1011 0010 + { }, // b3: 0111 0100 1011 0011 + { }, // b4: 0111 0100 1011 0100 + {DSUBNB, "EA,BC" }, // b5: 0111 0100 1011 0101 + {DSUBNB, "EA,DE" }, // b6: 0111 0100 1011 0110 + {DSUBNB, "EA,HL" }, // b7: 0111 0100 1011 0111 + {LTAW, "%a" }, // b8: 0111 0100 1011 1000 oooo oooo + { }, // b9: 0111 0100 1011 1001 + { }, // ba: 0111 0100 1011 1010 + { }, // bb: 0111 0100 1011 1011 + { }, // bc: 0111 0100 1011 1100 + {DLT, "EA,BC" }, // bd: 0111 0100 1011 1101 + {DLT, "EA,DE" }, // be: 0111 0100 1011 1110 + {DLT, "EA,HL" }, // bf: 0111 0100 1011 1111 + + {ADDW, "%a" }, // c0: 0111 0100 1100 0000 oooo oooo + { }, // c1: 0111 0100 1100 0001 + { }, // c2: 0111 0100 1100 0010 + { }, // c3: 0111 0100 1100 0011 + { }, // c4: 0111 0100 1100 0100 + {DADD, "EA,BC" }, // c5: 0111 0100 1100 0101 + {DADD, "EA,DE" }, // c6: 0111 0100 1100 0110 + {DADD, "EA,HL" }, // c7: 0111 0100 1100 0111 + {ONAW, "%a" }, // c8: 0111 0100 1100 1000 oooo oooo + { }, // c9: 0111 0100 1100 1001 + { }, // ca: 0111 0100 1100 1010 + { }, // cb: 0111 0100 1100 1011 + { }, // cc: 0111 0100 1100 1100 + {DON, "EA,BC" }, // cd: 0111 0100 1100 1101 + {DON, "EA,DE" }, // ce: 0111 0100 1100 1110 + {DON, "EA,HL" }, // cf: 0111 0100 1100 1111 + + {ADCW, "%a" }, // d0: 0111 0100 1101 0000 oooo oooo + { }, // d1: 0111 0100 1101 0001 + { }, // d2: 0111 0100 1101 0010 + { }, // d3: 0111 0100 1101 0011 + { }, // d4: 0111 0100 1101 0100 + {DADC, "EA,BC" }, // d5: 0111 0100 1101 0101 + {DADC, "EA,DE" }, // d6: 0111 0100 1101 0110 + {DADC, "EA,HL" }, // d7: 0111 0100 1101 0111 + {OFFAW, "%a" }, // d8: 0111 0100 1101 1000 oooo oooo + { }, // d9: 0111 0100 1101 1001 + { }, // da: 0111 0100 1101 1010 + { }, // db: 0111 0100 1101 1011 + { }, // dc: 0111 0100 1101 1100 + {DOFF, "EA,BC" }, // dd: 0111 0100 1101 1101 + {DOFF, "EA,DE" }, // de: 0111 0100 1101 1110 + {DOFF, "EA,HL" }, // df: 0111 0100 1101 1111 + + {SUBW, "%a" }, // e0: 0111 0100 1110 0000 oooo oooo + { }, // e1: 0111 0100 1110 0001 + { }, // e2: 0111 0100 1110 0010 + { }, // e3: 0111 0100 1110 0011 + { }, // e4: 0111 0100 1110 0100 + {DSUB, "EA,BC" }, // e5: 0111 0100 1110 0101 + {DSUB, "EA,DE" }, // e6: 0111 0100 1110 0110 + {DSUB, "EA,HL" }, // e7: 0111 0100 1110 0111 + {NEAW, "%a" }, // e8: 0111 0100 1110 1000 oooo oooo + { }, // e9: 0111 0100 1110 1001 + { }, // ea: 0111 0100 1110 1010 + { }, // eb: 0111 0100 1110 1011 + { }, // ec: 0111 0100 1110 1100 + {DNE, "EA,BC" }, // ed: 0111 0100 1110 1101 + {DNE, "EA,DE" }, // ee: 0111 0100 1110 1110 + {DNE, "EA,HL" }, // ef: 0111 0100 1110 1111 + + {SBBW, "%a" }, // f0: 0111 0100 1111 0000 oooo oooo + { }, // f1: 0111 0100 1111 0001 + { }, // f2: 0111 0100 1111 0010 + { }, // f3: 0111 0100 1111 0011 + { }, // f4: 0111 0100 1111 0100 + {DSBB, "EA,BC" }, // f5: 0111 0100 1111 0101 + {DSBB, "EA,DE" }, // f6: 0111 0100 1111 0110 + {DSBB, "EA,HL" }, // f7: 0111 0100 1111 0111 + {EQAW, "%a" }, // f8: 0111 0100 1111 1000 oooo oooo + { }, // f9: 0111 0100 1111 1001 + { }, // fa: 0111 0100 1111 1010 + { }, // fb: 0111 0100 1111 1011 + { }, // fc: 0111 0100 1111 1100 + {DEQ, "EA,BC" }, // fd: 0111 0100 1111 1101 + {DEQ, "EA,DE" }, // fe: 0111 0100 1111 1110 + {DEQ, "EA,HL" } // ff: 0111 0100 1111 1111 }; -const dasm_s dasm_s::d48_7807[256] = +// prefix 48 +const upd7810_base_disassembler::dasm_s upd7810_disassembler::d48_7810[256] = { { }, // 00: 0100 1000 0000 0000 {SLRC, "A" }, // 01: 0100 1000 0000 0001 @@ -753,7 +1108,7 @@ const dasm_s dasm_s::d48_7807[256] = {SLL, "B" }, // 26: 0100 1000 0010 0110 {SLL, "C" }, // 27: 0100 1000 0010 0111 {JEA, nullptr }, // 28: 0100 1000 0010 1000 - {CALB, nullptr }, // 29: 0100 1000 0010 1001 + {CALB,nullptr }, // 29: 0100 1000 0010 1001 {CLC, nullptr }, // 2a: 0100 1000 0010 1010 {STC, nullptr }, // 2b: 0100 1000 0010 1011 { }, // 2c: 0100 1000 0010 1100 @@ -874,11 +1229,11 @@ const dasm_s dasm_s::d48_7807[256] = { }, // 98: 0100 1000 1000 1000 { }, // 99: 0100 1000 1000 1001 { }, // 9a: 0100 1000 1000 1010 - {STEAX, "(DE+%b)" }, // 9b: 0100 1000 1000 1011 xxxx xxxx - {STEAX, "(HL+A)" }, // 9c: 0100 1000 1000 1100 - {STEAX, "(HL+B)" }, // 9d: 0100 1000 1000 1101 - {STEAX, "(HL+EA)" }, // 9e: 0100 1000 1000 1110 - {STEAX, "(HL+%b)" }, // 9f: 0100 1000 1000 1111 xxxx xxxx + {STEAX, "(DE+%b)" }, // 9b: 0100 1000 1000 1011 xxxx xxxx + {STEAX, "(HL+A)" }, // 9c: 0100 1000 1000 1100 + {STEAX, "(HL+B)" }, // 9d: 0100 1000 1000 1101 + {STEAX, "(HL+EA)" }, // 9e: 0100 1000 1000 1110 + {STEAX, "(HL+%b)" }, // 9f: 0100 1000 1000 1111 xxxx xxxx {DSLR, "EA" }, // a0: 0100 1000 1010 0000 { }, // a1: 0100 1000 1010 0001 @@ -890,12 +1245,12 @@ const dasm_s dasm_s::d48_7807[256] = { }, // a7: 0100 1000 1010 0111 {TABLE, nullptr }, // a8: 0100 1000 1010 1000 { }, // a9: 0100 1000 1010 1001 - {CMC, nullptr }, // aa: 0100 1000 1010 1010 7807 + { }, // aa: 0100 1000 1010 1010 { }, // ab: 0100 1000 1010 1011 - {EXA, nullptr }, // ac: 0100 1000 1010 1100 7807 - {EXR, nullptr }, // ad: 0100 1000 1010 1101 7807 - {EXH, nullptr }, // ae: 0100 1000 1010 1110 7807 - {EXX, nullptr }, // af: 0100 1000 1010 1111 7807 + { }, // ac: 0100 1000 1010 1100 + { }, // ad: 0100 1000 1010 1101 + { }, // ae: 0100 1000 1010 1110 + { }, // af: 0100 1000 1010 1111 {DRLR, "EA" }, // b0: 0100 1000 1011 0000 { }, // b1: 0100 1000 1011 0001 @@ -908,15 +1263,15 @@ const dasm_s dasm_s::d48_7807[256] = { }, // b8: 0100 1000 1011 1000 { }, // b9: 0100 1000 1011 1001 { }, // ba: 0100 1000 1011 1010 - { }, // bb: 0100 1000 1011 1011 + {STOP, nullptr }, // bb: 0100 1000 1011 1011 7810 { }, // bc: 0100 1000 1011 1100 { }, // bd: 0100 1000 1011 1101 { }, // be: 0100 1000 1011 1110 { }, // bf: 0100 1000 1011 1111 {DMOV, "EA,ECNT" }, // c0: 0100 1000 1100 0000 - {DMOV, "EA,ECPT0"}, // c1: 0100 1000 1100 0001 7807 - {DMOV, "EA,ECPT1"}, // c2: 0100 1000 1100 0010 7807 + {DMOV, "EA,ECPT" }, // c1: 0100 1000 1100 0001 7810 + { }, // c2: 0100 1000 1100 0010 { }, // c3: 0100 1000 1100 0011 { }, // c4: 0100 1000 1100 0100 { }, // c5: 0100 1000 1100 0101 @@ -984,7 +1339,7 @@ const dasm_s dasm_s::d48_7807[256] = }; // prefix 4C -const dasm_s dasm_s::d4C_7810[256] = +const upd7810_base_disassembler::dasm_s upd7810_disassembler::d4C_7810[256] = { { }, // 00: 0100 1100 0000 0000 { }, // 01: 0100 1100 0000 0001 @@ -1259,283 +1614,9 @@ const dasm_s dasm_s::d4C_7810[256] = { } // ff: 0100 1100 1111 1111 }; -const dasm_s dasm_s::d4C_7807[256] = -{ - { }, // 00: 0100 1100 0000 0000 - { }, // 01: 0100 1100 0000 0001 - { }, // 02: 0100 1100 0000 0010 - { }, // 03: 0100 1100 0000 0011 - { }, // 04: 0100 1100 0000 0100 - { }, // 05: 0100 1100 0000 0101 - { }, // 06: 0100 1100 0000 0110 - { }, // 07: 0100 1100 0000 0111 - { }, // 08: 0100 1100 0000 1000 - { }, // 09: 0100 1100 0000 1001 - { }, // 0a: 0100 1100 0000 1010 - { }, // 0b: 0100 1100 0000 1011 - { }, // 0c: 0100 1100 0000 1100 - { }, // 0d: 0100 1100 0000 1101 - { }, // 0e: 0100 1100 0000 1110 - { }, // 0f: 0100 1100 0000 1111 - - { }, // 10: 0100 1100 0001 0000 - { }, // 11: 0100 1100 0001 0001 - { }, // 12: 0100 1100 0001 0010 - { }, // 13: 0100 1100 0001 0011 - { }, // 14: 0100 1100 0001 0100 - { }, // 15: 0100 1100 0001 0101 - { }, // 16: 0100 1100 0001 0110 - { }, // 17: 0100 1100 0001 0111 - { }, // 18: 0100 1100 0001 1000 - { }, // 19: 0100 1100 0001 1001 - { }, // 1a: 0100 1100 0001 1010 - { }, // 1b: 0100 1100 0001 1011 - { }, // 1c: 0100 1100 0001 1100 - { }, // 1d: 0100 1100 0001 1101 - { }, // 1e: 0100 1100 0001 1110 - { }, // 1f: 0100 1100 0001 1111 - - { }, // 20: 0100 1100 0010 0000 - { }, // 21: 0100 1100 0010 0001 - { }, // 22: 0100 1100 0010 0010 - { }, // 23: 0100 1100 0010 0011 - { }, // 24: 0100 1100 0010 0100 - { }, // 25: 0100 1100 0010 0101 - { }, // 26: 0100 1100 0010 0110 - { }, // 27: 0100 1100 0010 0111 - { }, // 28: 0100 1100 0010 1000 - { }, // 29: 0100 1100 0010 1001 - { }, // 2a: 0100 1100 0010 1010 - { }, // 2b: 0100 1100 0010 1011 - { }, // 2c: 0100 1100 0010 1100 - { }, // 2d: 0100 1100 0010 1101 - { }, // 2e: 0100 1100 0010 1110 - { }, // 2f: 0100 1100 0010 1111 - - { }, // 30: 0100 1100 0011 0000 - { }, // 31: 0100 1100 0011 0001 - { }, // 32: 0100 1100 0011 0010 - { }, // 33: 0100 1100 0011 0011 - { }, // 34: 0100 1100 0011 0100 - { }, // 35: 0100 1100 0011 0101 - { }, // 36: 0100 1100 0011 0110 - { }, // 37: 0100 1100 0011 0111 - { }, // 38: 0100 1100 0011 1000 - { }, // 39: 0100 1100 0011 1001 - { }, // 3a: 0100 1100 0011 1010 - { }, // 3b: 0100 1100 0011 1011 - { }, // 3c: 0100 1100 0011 1100 - { }, // 3d: 0100 1100 0011 1101 - { }, // 3e: 0100 1100 0011 1110 - { }, // 3f: 0100 1100 0011 1111 - - { }, // 40: 0100 1100 0100 0000 - { }, // 41: 0100 1100 0100 0001 - { }, // 42: 0100 1100 0100 0010 - { }, // 43: 0100 1100 0100 0011 - { }, // 44: 0100 1100 0100 0100 - { }, // 45: 0100 1100 0100 0101 - { }, // 46: 0100 1100 0100 0110 - { }, // 47: 0100 1100 0100 0111 - { }, // 48: 0100 1100 0100 1000 - { }, // 49: 0100 1100 0100 1001 - { }, // 4a: 0100 1100 0100 1010 - { }, // 4b: 0100 1100 0100 1011 - { }, // 4c: 0100 1100 0100 1100 - { }, // 4d: 0100 1100 0100 1101 - { }, // 4e: 0100 1100 0100 1110 - { }, // 4f: 0100 1100 0100 1111 - - { }, // 50: 0100 1100 0101 0000 - { }, // 51: 0100 1100 0101 0001 - { }, // 52: 0100 1100 0101 0010 - { }, // 53: 0100 1100 0101 0011 - { }, // 54: 0100 1100 0101 0100 - { }, // 55: 0100 1100 0101 0101 - { }, // 56: 0100 1100 0101 0110 - { }, // 57: 0100 1100 0101 0111 - { }, // 58: 0100 1100 0101 1000 - { }, // 59: 0100 1100 0101 1001 - { }, // 5a: 0100 1100 0101 1010 - { }, // 5b: 0100 1100 0101 1011 - { }, // 5c: 0100 1100 0101 1100 - { }, // 5d: 0100 1100 0101 1101 - { }, // 5e: 0100 1100 0101 1110 - { }, // 5f: 0100 1100 0101 1111 - - { }, // 60: 0100 1100 0110 0000 - { }, // 61: 0100 1100 0110 0001 - { }, // 62: 0100 1100 0110 0010 - { }, // 63: 0100 1100 0110 0011 - { }, // 64: 0100 1100 0110 0100 - { }, // 65: 0100 1100 0110 0101 - { }, // 66: 0100 1100 0110 0110 - { }, // 67: 0100 1100 0110 0111 - { }, // 68: 0100 1100 0110 1000 - { }, // 69: 0100 1100 0110 1001 - { }, // 6a: 0100 1100 0110 1010 - { }, // 6b: 0100 1100 0110 1011 - { }, // 6c: 0100 1100 0110 1100 - { }, // 6d: 0100 1100 0110 1101 - { }, // 6e: 0100 1100 0110 1110 - { }, // 6f: 0100 1100 0110 1111 - - { }, // 70: 0100 1100 0111 0000 - { }, // 71: 0100 1100 0111 0001 - { }, // 72: 0100 1100 0111 0010 - { }, // 73: 0100 1100 0111 0011 - { }, // 74: 0100 1100 0111 0100 - { }, // 75: 0100 1100 0111 0101 - { }, // 76: 0100 1100 0111 0110 - { }, // 77: 0100 1100 0111 0111 - { }, // 78: 0100 1100 0111 1000 - { }, // 79: 0100 1100 0111 1001 - { }, // 7a: 0100 1100 0111 1010 - { }, // 7b: 0100 1100 0111 1011 - { }, // 7c: 0100 1100 0111 1100 - { }, // 7d: 0100 1100 0111 1101 - { }, // 7e: 0100 1100 0111 1110 - { }, // 7f: 0100 1100 0111 1111 - - { }, // 80: 0100 1100 1000 0000 - { }, // 81: 0100 1100 1000 0001 - { }, // 82: 0100 1100 1000 0010 - { }, // 83: 0100 1100 1000 0011 - { }, // 84: 0100 1100 1000 0100 - { }, // 85: 0100 1100 1000 0101 - { }, // 86: 0100 1100 1000 0110 - { }, // 87: 0100 1100 1000 0111 - { }, // 88: 0100 1100 1000 1000 - { }, // 89: 0100 1100 1000 1001 - { }, // 8a: 0100 1100 1000 1010 - { }, // 8b: 0100 1100 1000 1011 - { }, // 8c: 0100 1100 1000 1100 - { }, // 8d: 0100 1100 1000 1101 - { }, // 8e: 0100 1100 1000 1110 - { }, // 8f: 0100 1100 1000 1111 - - { }, // 90: 0100 1100 1001 0000 - { }, // 91: 0100 1100 1001 0001 - { }, // 92: 0100 1100 1001 0010 - { }, // 93: 0100 1100 1001 0011 - { }, // 94: 0100 1100 1001 0100 - { }, // 95: 0100 1100 1001 0101 - { }, // 96: 0100 1100 1001 0110 - { }, // 97: 0100 1100 1001 0111 - { }, // 98: 0100 1100 1001 1000 - { }, // 99: 0100 1100 1001 1001 - { }, // 9a: 0100 1100 1001 1010 - { }, // 9b: 0100 1100 1001 1011 - { }, // 9c: 0100 1100 1001 1100 - { }, // 9d: 0100 1100 1001 1101 - { }, // 9e: 0100 1100 1001 1110 - { }, // 9f: 0100 1100 1001 1111 - - { }, // a0: 0100 1100 1010 0000 - { }, // a1: 0100 1100 1010 0001 - { }, // a2: 0100 1100 1010 0010 - { }, // a3: 0100 1100 1010 0011 - { }, // a4: 0100 1100 1010 0100 - { }, // a5: 0100 1100 1010 0101 - { }, // a6: 0100 1100 1010 0110 - { }, // a7: 0100 1100 1010 0111 - { }, // a8: 0100 1100 1010 1000 - { }, // a9: 0100 1100 1010 1001 - { }, // aa: 0100 1100 1010 1010 - { }, // ab: 0100 1100 1010 1011 - { }, // ac: 0100 1100 1010 1100 - { }, // ad: 0100 1100 1010 1101 - { }, // ae: 0100 1100 1010 1110 - { }, // af: 0100 1100 1010 1111 - - { }, // b0: 0100 1100 1011 0000 - { }, // b1: 0100 1100 1011 0001 - { }, // b2: 0100 1100 1011 0010 - { }, // b3: 0100 1100 1011 0011 - { }, // b4: 0100 1100 1011 0100 - { }, // b5: 0100 1100 1011 0101 - { }, // b6: 0100 1100 1011 0110 - { }, // b7: 0100 1100 1011 0111 - { }, // b8: 0100 1100 1011 1000 - { }, // b9: 0100 1100 1011 1001 - { }, // ba: 0100 1100 1011 1010 - { }, // bb: 0100 1100 1011 1011 - { }, // bc: 0100 1100 1011 1100 - { }, // bd: 0100 1100 1011 1101 - { }, // be: 0100 1100 1011 1110 - { }, // bf: 0100 1100 1011 1111 - - {MOV, "A,PA" }, // c0: 0100 1100 1100 0000 - {MOV, "A,PB" }, // c1: 0100 1100 1100 0001 - {MOV, "A,PC" }, // c2: 0100 1100 1100 0010 - {MOV, "A,PD" }, // c3: 0100 1100 1100 0011 - { }, // c4: 0100 1100 1100 0100 - {MOV, "A,PF" }, // c5: 0100 1100 1100 0101 - {MOV, "A,MKH" }, // c6: 0100 1100 1100 0110 - {MOV, "A,MKL" }, // c7: 0100 1100 1100 0111 - { }, // c8: 0100 1100 1100 1000 - {MOV, "A,SMH" }, // c9: 0100 1100 1100 1001 - { }, // ca: 0100 1100 1100 1010 - {MOV, "A,EOM" }, // cb: 0100 1100 1100 1011 - { }, // cc: 0100 1100 1100 1100 - {MOV, "A,TMM" }, // cd: 0100 1100 1100 1101 - {MOV, "A,PT" }, // ce: 0100 1100 1100 1110 7807 - { }, // cf: 0100 1100 1100 1111 - - { }, // d0: 0100 1100 1101 0000 - { }, // d1: 0100 1100 1101 0001 - { }, // d2: 0100 1100 1101 0010 - { }, // d3: 0100 1100 1101 0011 - { }, // d4: 0100 1100 1101 0100 - { }, // d5: 0100 1100 1101 0101 - { }, // d6: 0100 1100 1101 0110 - { }, // d7: 0100 1100 1101 0111 - { }, // d8: 0100 1100 1101 1000 - {MOV, "A,RXB" }, // d9: 0100 1100 1101 1001 - { }, // da: 0100 1100 1101 1010 - { }, // db: 0100 1100 1101 1011 - { }, // dc: 0100 1100 1101 1100 - { }, // dd: 0100 1100 1101 1101 - { }, // de: 0100 1100 1101 1110 - { }, // df: 0100 1100 1101 1111 - - { }, // e0: 0100 1100 1110 0000 - { }, // e1: 0100 1100 1110 0001 - { }, // e2: 0100 1100 1110 0010 - { }, // e3: 0100 1100 1110 0011 - { }, // e4: 0100 1100 1110 0100 - { }, // e5: 0100 1100 1110 0101 - { }, // e6: 0100 1100 1110 0110 - { }, // e7: 0100 1100 1110 0111 - { }, // e8: 0100 1100 1110 1000 - { }, // e9: 0100 1100 1110 1001 - { }, // ea: 0100 1100 1110 1010 - { }, // eb: 0100 1100 1110 1011 - { }, // ec: 0100 1100 1110 1100 - { }, // ed: 0100 1100 1110 1101 - { }, // ee: 0100 1100 1110 1110 - { }, // ef: 0100 1100 1110 1111 - - { }, // f0: 0100 1100 1111 0000 - { }, // f1: 0100 1100 1111 0001 - { }, // f2: 0100 1100 1111 0010 - { }, // f3: 0100 1100 1111 0011 - { }, // f4: 0100 1100 1111 0100 - { }, // f5: 0100 1100 1111 0101 - { }, // f6: 0100 1100 1111 0110 - { }, // f7: 0100 1100 1111 0111 - { }, // f8: 0100 1100 1111 1000 - { }, // f9: 0100 1100 1111 1001 - { }, // fa: 0100 1100 1111 1010 - { }, // fb: 0100 1100 1111 1011 - { }, // fc: 0100 1100 1111 1100 - { }, // fd: 0100 1100 1111 1101 - { }, // fe: 0100 1100 1111 1110 - { } // ff: 0100 1100 1111 1111 -}; // prefix 4D -const dasm_s dasm_s::d4D_7810[256] = +const upd7810_base_disassembler::dasm_s upd7810_disassembler::d4D_7810[256] = { { }, // 00: 0100 1101 0000 0000 { }, // 01: 0100 1101 0000 0001 @@ -1810,559 +1891,10 @@ const dasm_s dasm_s::d4D_7810[256] = { } // ff: 0100 1101 1111 1111 }; -const dasm_s dasm_s::d4D_7807[256] = -{ - { }, // 00: 0100 1101 0000 0000 - { }, // 01: 0100 1101 0000 0001 - { }, // 02: 0100 1101 0000 0010 - { }, // 03: 0100 1101 0000 0011 - { }, // 04: 0100 1101 0000 0100 - { }, // 05: 0100 1101 0000 0101 - { }, // 06: 0100 1101 0000 0110 - { }, // 07: 0100 1101 0000 0111 - { }, // 08: 0100 1101 0000 1000 - { }, // 09: 0100 1101 0000 1001 - { }, // 0a: 0100 1101 0000 1010 - { }, // 0b: 0100 1101 0000 1011 - { }, // 0c: 0100 1101 0000 1100 - { }, // 0d: 0100 1101 0000 1101 - { }, // 0e: 0100 1101 0000 1110 - { }, // 0f: 0100 1101 0000 1111 - - { }, // 10: 0100 1101 0001 0000 - { }, // 11: 0100 1101 0001 0001 - { }, // 12: 0100 1101 0001 0010 - { }, // 13: 0100 1101 0001 0011 - { }, // 14: 0100 1101 0001 0100 - { }, // 15: 0100 1101 0001 0101 - { }, // 16: 0100 1101 0001 0110 - { }, // 17: 0100 1101 0001 0111 - { }, // 18: 0100 1101 0001 1000 - { }, // 19: 0100 1101 0001 1001 - { }, // 1a: 0100 1101 0001 1010 - { }, // 1b: 0100 1101 0001 1011 - { }, // 1c: 0100 1101 0001 1100 - { }, // 1d: 0100 1101 0001 1101 - { }, // 1e: 0100 1101 0001 1110 - { }, // 1f: 0100 1101 0001 1111 - - { }, // 20: 0100 1101 0010 0000 - { }, // 21: 0100 1101 0010 0001 - { }, // 22: 0100 1101 0010 0010 - { }, // 23: 0100 1101 0010 0011 - { }, // 24: 0100 1101 0010 0100 - { }, // 25: 0100 1101 0010 0101 - { }, // 26: 0100 1101 0010 0110 - { }, // 27: 0100 1101 0010 0111 - { }, // 28: 0100 1101 0010 1000 - { }, // 29: 0100 1101 0010 1001 - { }, // 2a: 0100 1101 0010 1010 - { }, // 2b: 0100 1101 0010 1011 - { }, // 2c: 0100 1101 0010 1100 - { }, // 2d: 0100 1101 0010 1101 - { }, // 2e: 0100 1101 0010 1110 - { }, // 2f: 0100 1101 0010 1111 - - { }, // 30: 0100 1101 0011 0000 - { }, // 31: 0100 1101 0011 0001 - { }, // 32: 0100 1101 0011 0010 - { }, // 33: 0100 1101 0011 0011 - { }, // 34: 0100 1101 0011 0100 - { }, // 35: 0100 1101 0011 0101 - { }, // 36: 0100 1101 0011 0110 - { }, // 37: 0100 1101 0011 0111 - { }, // 38: 0100 1101 0011 1000 - { }, // 39: 0100 1101 0011 1001 - { }, // 3a: 0100 1101 0011 1010 - { }, // 3b: 0100 1101 0011 1011 - { }, // 3c: 0100 1101 0011 1100 - { }, // 3d: 0100 1101 0011 1101 - { }, // 3e: 0100 1101 0011 1110 - { }, // 3f: 0100 1101 0011 1111 - - { }, // 40: 0100 1101 0100 0000 - { }, // 41: 0100 1101 0100 0001 - { }, // 42: 0100 1101 0100 0010 - { }, // 43: 0100 1101 0100 0011 - { }, // 44: 0100 1101 0100 0100 - { }, // 45: 0100 1101 0100 0101 - { }, // 46: 0100 1101 0100 0110 - { }, // 47: 0100 1101 0100 0111 - { }, // 48: 0100 1101 0100 1000 - { }, // 49: 0100 1101 0100 1001 - { }, // 4a: 0100 1101 0100 1010 - { }, // 4b: 0100 1101 0100 1011 - { }, // 4c: 0100 1101 0100 1100 - { }, // 4d: 0100 1101 0100 1101 - { }, // 4e: 0100 1101 0100 1110 - { }, // 4f: 0100 1101 0100 1111 - - { }, // 50: 0100 1101 0101 0000 - { }, // 51: 0100 1101 0101 0001 - { }, // 52: 0100 1101 0101 0010 - { }, // 53: 0100 1101 0101 0011 - { }, // 54: 0100 1101 0101 0100 - { }, // 55: 0100 1101 0101 0101 - { }, // 56: 0100 1101 0101 0110 - { }, // 57: 0100 1101 0101 0111 - { }, // 58: 0100 1101 0101 1000 - { }, // 59: 0100 1101 0101 1001 - { }, // 5a: 0100 1101 0101 1010 - { }, // 5b: 0100 1101 0101 1011 - { }, // 5c: 0100 1101 0101 1100 - { }, // 5d: 0100 1101 0101 1101 - { }, // 5e: 0100 1101 0101 1110 - { }, // 5f: 0100 1101 0101 1111 - - { }, // 60: 0100 1101 0110 0000 - { }, // 61: 0100 1101 0110 0001 - { }, // 62: 0100 1101 0110 0010 - { }, // 63: 0100 1101 0110 0011 - { }, // 64: 0100 1101 0110 0100 - { }, // 65: 0100 1101 0110 0101 - { }, // 66: 0100 1101 0110 0110 - { }, // 67: 0100 1101 0110 0111 - { }, // 68: 0100 1101 0110 1000 - { }, // 69: 0100 1101 0110 1001 - { }, // 6a: 0100 1101 0110 1010 - { }, // 6b: 0100 1101 0110 1011 - { }, // 6c: 0100 1101 0110 1100 - { }, // 6d: 0100 1101 0110 1101 - { }, // 6e: 0100 1101 0110 1110 - { }, // 6f: 0100 1101 0110 1111 - - { }, // 70: 0100 1101 0111 0000 - { }, // 71: 0100 1101 0111 0001 - { }, // 72: 0100 1101 0111 0010 - { }, // 73: 0100 1101 0111 0011 - { }, // 74: 0100 1101 0111 0100 - { }, // 75: 0100 1101 0111 0101 - { }, // 76: 0100 1101 0111 0110 - { }, // 77: 0100 1101 0111 0111 - { }, // 78: 0100 1101 0111 1000 - { }, // 79: 0100 1101 0111 1001 - { }, // 7a: 0100 1101 0111 1010 - { }, // 7b: 0100 1101 0111 1011 - { }, // 7c: 0100 1101 0111 1100 - { }, // 7d: 0100 1101 0111 1101 - { }, // 7e: 0100 1101 0111 1110 - { }, // 7f: 0100 1101 0111 1111 - - { }, // 80: 0100 1101 1000 0000 - { }, // 81: 0100 1101 1000 0001 - { }, // 82: 0100 1101 1000 0010 - { }, // 83: 0100 1101 1000 0011 - { }, // 84: 0100 1101 1000 0100 - { }, // 85: 0100 1101 1000 0101 - { }, // 86: 0100 1101 1000 0110 - { }, // 87: 0100 1101 1000 0111 - { }, // 88: 0100 1101 1000 1000 - { }, // 89: 0100 1101 1000 1001 - { }, // 8a: 0100 1101 1000 1010 - { }, // 8b: 0100 1101 1000 1011 - { }, // 8c: 0100 1101 1000 1100 - { }, // 8d: 0100 1101 1000 1101 - { }, // 8e: 0100 1101 1000 1110 - { }, // 8f: 0100 1101 1000 1111 - - { }, // 90: 0100 1101 1001 0000 - { }, // 91: 0100 1101 1001 0001 - { }, // 92: 0100 1101 1001 0010 - { }, // 93: 0100 1101 1001 0011 - { }, // 94: 0100 1101 1001 0100 - { }, // 95: 0100 1101 1001 0101 - { }, // 96: 0100 1101 1001 0110 - { }, // 97: 0100 1101 1001 0111 - { }, // 98: 0100 1101 1001 1000 - { }, // 99: 0100 1101 1001 1001 - { }, // 9a: 0100 1101 1001 1010 - { }, // 9b: 0100 1101 1001 1011 - { }, // 9c: 0100 1101 1001 1100 - { }, // 9d: 0100 1101 1001 1101 - { }, // 9e: 0100 1101 1001 1110 - { }, // 9f: 0100 1101 1001 1111 - - { }, // a0: 0100 1101 1010 0000 - { }, // a1: 0100 1101 1010 0001 - { }, // a2: 0100 1101 1010 0010 - { }, // a3: 0100 1101 1010 0011 - { }, // a4: 0100 1101 1010 0100 - { }, // a5: 0100 1101 1010 0101 - { }, // a6: 0100 1101 1010 0110 - { }, // a7: 0100 1101 1010 0111 - { }, // a8: 0100 1101 1010 1000 - { }, // a9: 0100 1101 1010 1001 - { }, // aa: 0100 1101 1010 1010 - { }, // ab: 0100 1101 1010 1011 - { }, // ac: 0100 1101 1010 1100 - { }, // ad: 0100 1101 1010 1101 - { }, // ae: 0100 1101 1010 1110 - { }, // af: 0100 1101 1010 1111 - - { }, // b0: 0100 1101 1011 0000 - { }, // b1: 0100 1101 1011 0001 - { }, // b2: 0100 1101 1011 0010 - { }, // b3: 0100 1101 1011 0011 - { }, // b4: 0100 1101 1011 0100 - { }, // b5: 0100 1101 1011 0101 - { }, // b6: 0100 1101 1011 0110 - { }, // b7: 0100 1101 1011 0111 - { }, // b8: 0100 1101 1011 1000 - { }, // b9: 0100 1101 1011 1001 - { }, // ba: 0100 1101 1011 1010 - { }, // bb: 0100 1101 1011 1011 - { }, // bc: 0100 1101 1011 1100 - { }, // bd: 0100 1101 1011 1101 - { }, // be: 0100 1101 1011 1110 - { }, // bf: 0100 1101 1011 1111 - - {MOV, "PA,A" }, // c0: 0100 1101 1100 0000 - {MOV, "PB,A" }, // c1: 0100 1101 1100 0001 - {MOV, "PC,A" }, // c2: 0100 1101 1100 0010 - {MOV, "PD,A" }, // c3: 0100 1101 1100 0011 - { }, // c4: 0100 1101 1100 0100 - {MOV, "PF,A" }, // c5: 0100 1101 1100 0101 - {MOV, "MKH,A" }, // c6: 0100 1101 1100 0110 - {MOV, "MKL,A" }, // c7: 0100 1101 1100 0111 - { }, // c8: 0100 1101 1100 1000 - {MOV, "SMH,A" }, // c9: 0100 1101 1100 1001 - {MOV, "SML,A" }, // ca: 0100 1101 1100 1010 - {MOV, "EOM,A" }, // cb: 0100 1101 1100 1011 - {MOV, "ETMM,A" }, // cc: 0100 1101 1100 1100 - {MOV, "TMM,A" }, // cd: 0100 1101 1100 1101 - { }, // ce: 0100 1101 1100 1110 - { }, // cf: 0100 1101 1100 1111 - - {MOV, "MM,A" }, // d0: 0100 1101 1101 0000 - {MOV, "MCC,A" }, // d1: 0100 1101 1101 0001 - {MOV, "MA,A" }, // d2: 0100 1101 1101 0010 - {MOV, "MB,A" }, // d3: 0100 1101 1101 0011 - {MOV, "MC,A" }, // d4: 0100 1101 1101 0100 - { }, // d5: 0100 1101 1101 0101 - { }, // d6: 0100 1101 1101 0110 - {MOV, "MF,A" }, // d7: 0100 1101 1101 0111 - {MOV, "TXB,A" }, // d8: 0100 1101 1101 1000 - { }, // d9: 0100 1101 1101 1001 - {MOV, "TM0,A" }, // da: 0100 1101 1101 1010 - {MOV, "TM1,A" }, // db: 0100 1101 1101 1011 - { }, // dc: 0100 1101 1101 1100 - { }, // dd: 0100 1101 1101 1101 - { }, // de: 0100 1101 1101 1110 - { }, // df: 0100 1101 1101 1111 - - { }, // e0: 0100 1101 1110 0000 - { }, // e1: 0100 1101 1110 0001 - { }, // e2: 0100 1101 1110 0010 - { }, // e3: 0100 1101 1110 0011 - { }, // e4: 0100 1101 1110 0100 - {MOV, "MT,A" }, // e5: 0100 1101 1110 0101 7807 - { }, // e6: 0100 1101 1110 0110 - { }, // e7: 0100 1101 1110 0111 - { }, // e8: 0100 1101 1110 1000 - { }, // e9: 0100 1101 1110 1001 - { }, // ea: 0100 1101 1110 1010 - { }, // eb: 0100 1101 1110 1011 - { }, // ec: 0100 1101 1110 1100 - { }, // ed: 0100 1101 1110 1101 - { }, // ee: 0100 1101 1110 1110 - { }, // ef: 0100 1101 1110 1111 - - { }, // f0: 0100 1101 1111 0000 - { }, // f1: 0100 1101 1111 0001 - { }, // f2: 0100 1101 1111 0010 - { }, // f3: 0100 1101 1111 0011 - { }, // f4: 0100 1101 1111 0100 - { }, // f5: 0100 1101 1111 0101 - { }, // f6: 0100 1101 1111 0110 - { }, // f7: 0100 1101 1111 0111 - { }, // f8: 0100 1101 1111 1000 - { }, // f9: 0100 1101 1111 1001 - { }, // fa: 0100 1101 1111 1010 - { }, // fb: 0100 1101 1111 1011 - { }, // fc: 0100 1101 1111 1100 - { }, // fd: 0100 1101 1111 1101 - { }, // fe: 0100 1101 1111 1110 - { } // ff: 0100 1101 1111 1111 -}; - -// prefix 60 -const dasm_s dasm_s::d60[256] = -{ - { }, // 00: 0110 0000 0000 0000 - { }, // 01: 0110 0000 0000 0001 - { }, // 02: 0110 0000 0000 0010 - { }, // 03: 0110 0000 0000 0011 - { }, // 04: 0110 0000 0000 0100 - { }, // 05: 0110 0000 0000 0101 - { }, // 06: 0110 0000 0000 0110 - { }, // 07: 0110 0000 0000 0111 - {ANA, "V,A" }, // 08: 0110 0000 0000 1000 - {ANA, "A,A" }, // 09: 0110 0000 0000 1001 - {ANA, "B,A" }, // 0a: 0110 0000 0000 1010 - {ANA, "C,A" }, // 0b: 0110 0000 0000 1011 - {ANA, "D,A" }, // 0c: 0110 0000 0000 1100 - {ANA, "E,A" }, // 0d: 0110 0000 0000 1101 - {ANA, "H,A" }, // 0e: 0110 0000 0000 1110 - {ANA, "L,A" }, // 0f: 0110 0000 0000 1111 - - {XRA, "V,A" }, // 10: 0110 0000 0001 0000 - {XRA, "A,A" }, // 11: 0110 0000 0001 0001 - {XRA, "B,A" }, // 12: 0110 0000 0001 0010 - {XRA, "C,A" }, // 13: 0110 0000 0001 0011 - {XRA, "D,A" }, // 14: 0110 0000 0001 0100 - {XRA, "E,A" }, // 15: 0110 0000 0001 0101 - {XRA, "H,A" }, // 16: 0110 0000 0001 0110 - {XRA, "L,A" }, // 17: 0110 0000 0001 0111 - {ORA, "V,A" }, // 18: 0110 0000 0001 1000 - {ORA, "A,A" }, // 19: 0110 0000 0001 1001 - {ORA, "B,A" }, // 1a: 0110 0000 0001 1010 - {ORA, "C,A" }, // 1b: 0110 0000 0001 1011 - {ORA, "D,A" }, // 1c: 0110 0000 0001 1100 - {ORA, "E,A" }, // 1d: 0110 0000 0001 1101 - {ORA, "H,A" }, // 1e: 0110 0000 0001 1110 - {ORA, "L,A" }, // 1f: 0110 0000 0001 1111 - - {ADDNC, "V,A" }, // 20: 0110 0000 0010 0000 - {ADDNC, "A,A" }, // 21: 0110 0000 0010 0001 - {ADDNC, "B,A" }, // 22: 0110 0000 0010 0010 - {ADDNC, "C,A" }, // 23: 0110 0000 0010 0011 - {ADDNC, "D,A" }, // 24: 0110 0000 0010 0100 - {ADDNC, "E,A" }, // 25: 0110 0000 0010 0101 - {ADDNC, "H,A" }, // 26: 0110 0000 0010 0110 - {ADDNC, "L,A" }, // 27: 0110 0000 0010 0111 - {GTA, "V,A" }, // 28: 0110 0000 0010 1000 - {GTA, "A,A" }, // 29: 0110 0000 0010 1001 - {GTA, "B,A" }, // 2a: 0110 0000 0010 1010 - {GTA, "C,A" }, // 2b: 0110 0000 0010 1011 - {GTA, "D,A" }, // 2c: 0110 0000 0010 1100 - {GTA, "E,A" }, // 2d: 0110 0000 0010 1101 - {GTA, "H,A" }, // 2e: 0110 0000 0010 1110 - {GTA, "L,A" }, // 2f: 0110 0000 0010 1111 - {SUBNB, "V,A" }, // 30: 0110 0000 0011 0000 - {SUBNB, "A,A" }, // 31: 0110 0000 0011 0001 - {SUBNB, "B,A" }, // 32: 0110 0000 0011 0010 - {SUBNB, "C,A" }, // 33: 0110 0000 0011 0011 - {SUBNB, "D,A" }, // 34: 0110 0000 0011 0100 - {SUBNB, "E,A" }, // 35: 0110 0000 0011 0101 - {SUBNB, "H,A" }, // 36: 0110 0000 0011 0110 - {SUBNB, "L,A" }, // 37: 0110 0000 0011 0111 - {LTA, "V,A" }, // 38: 0110 0000 0011 1000 - {LTA, "A,A" }, // 39: 0110 0000 0011 1001 - {LTA, "B,A" }, // 3a: 0110 0000 0011 1010 - {LTA, "C,A" }, // 3b: 0110 0000 0011 1011 - {LTA, "D,A" }, // 3c: 0110 0000 0011 1100 - {LTA, "E,A" }, // 3d: 0110 0000 0011 1101 - {LTA, "H,A" }, // 3e: 0110 0000 0011 1110 - {LTA, "L,A" }, // 3f: 0110 0000 0011 1111 - - {ADD, "V,A" }, // 40: 0110 0000 0100 0000 - {ADD, "A,A" }, // 41: 0110 0000 0100 0001 - {ADD, "B,A" }, // 42: 0110 0000 0100 0010 - {ADD, "C,A" }, // 43: 0110 0000 0100 0011 - {ADD, "D,A" }, // 44: 0110 0000 0100 0100 - {ADD, "E,A" }, // 45: 0110 0000 0100 0101 - {ADD, "H,A" }, // 46: 0110 0000 0100 0110 - {ADD, "L,A" }, // 47: 0110 0000 0100 0111 - { }, // 48: 0110 0000 0100 1000 - { }, // 49: 0110 0000 0100 1001 - { }, // 4a: 0110 0000 0100 1010 - { }, // 4b: 0110 0000 0100 1011 - { }, // 4c: 0110 0000 0100 1100 - { }, // 4d: 0110 0000 0100 1101 - { }, // 4e: 0110 0000 0100 1110 - { }, // 4f: 0110 0000 0100 1111 - - {ADC, "V,A" }, // 50: 0110 0000 0101 0000 - {ADC, "A,A" }, // 51: 0110 0000 0101 0001 - {ADC, "B,A" }, // 52: 0110 0000 0101 0010 - {ADC, "C,A" }, // 53: 0110 0000 0101 0011 - {ADC, "D,A" }, // 54: 0110 0000 0101 0100 - {ADC, "E,A" }, // 55: 0110 0000 0101 0101 - {ADC, "H,A" }, // 56: 0110 0000 0101 0110 - {ADC, "L,A" }, // 57: 0110 0000 0101 0111 - { }, // 58: 0110 0000 0101 1000 - { }, // 59: 0110 0000 0101 1001 - { }, // 5a: 0110 0000 0101 1010 - { }, // 5b: 0110 0000 0101 1011 - { }, // 5c: 0110 0000 0101 1100 - { }, // 5d: 0110 0000 0101 1101 - { }, // 5e: 0110 0000 0101 1110 - { }, // 5f: 0110 0000 0101 1111 - - {SUB, "V,A" }, // 60: 0110 0000 0110 0000 - {SUB, "A,A" }, // 61: 0110 0000 0110 0001 - {SUB, "B,A" }, // 62: 0110 0000 0110 0010 - {SUB, "C,A" }, // 63: 0110 0000 0110 0011 - {SUB, "D,A" }, // 64: 0110 0000 0110 0100 - {SUB, "E,A" }, // 65: 0110 0000 0110 0101 - {SUB, "H,A" }, // 66: 0110 0000 0110 0110 - {SUB, "L,A" }, // 67: 0110 0000 0110 0111 - {NEA, "V,A" }, // 68: 0110 0000 0110 1000 - {NEA, "A,A" }, // 69: 0110 0000 0110 1001 - {NEA, "B,A" }, // 6a: 0110 0000 0110 1010 - {NEA, "C,A" }, // 6b: 0110 0000 0110 1011 - {NEA, "D,A" }, // 6c: 0110 0000 0110 1100 - {NEA, "E,A" }, // 6d: 0110 0000 0110 1101 - {NEA, "H,A" }, // 6e: 0110 0000 0110 1110 - {NEA, "L,A" }, // 6f: 0110 0000 0110 1111 - - {SBB, "V,A" }, // 70: 0110 0000 0111 0000 - {SBB, "A,A" }, // 71: 0110 0000 0111 0001 - {SBB, "B,A" }, // 72: 0110 0000 0111 0010 - {SBB, "C,A" }, // 73: 0110 0000 0111 0011 - {SBB, "D,A" }, // 74: 0110 0000 0111 0100 - {SBB, "E,A" }, // 75: 0110 0000 0111 0101 - {SBB, "H,A" }, // 76: 0110 0000 0111 0110 - {SBB, "L,A" }, // 77: 0110 0000 0111 0111 - {EQA, "V,A" }, // 78: 0110 0000 0111 1000 - {EQA, "A,A" }, // 79: 0110 0000 0111 1001 - {EQA, "B,A" }, // 7a: 0110 0000 0111 1010 - {EQA, "C,A" }, // 7b: 0110 0000 0111 1011 - {EQA, "D,A" }, // 7c: 0110 0000 0111 1100 - {EQA, "E,A" }, // 7d: 0110 0000 0111 1101 - {EQA, "H,A" }, // 7e: 0110 0000 0111 1110 - {EQA, "L,A" }, // 7f: 0110 0000 0111 1111 - - { }, // 80: 0110 0000 1000 0000 - { }, // 81: 0110 0000 1000 0001 - { }, // 82: 0110 0000 1000 0010 - { }, // 83: 0110 0000 1000 0011 - { }, // 84: 0110 0000 1000 0100 - { }, // 85: 0110 0000 1000 0101 - { }, // 86: 0110 0000 1000 0110 - { }, // 87: 0110 0000 1000 0111 - {ANA, "A,V" }, // 88: 0110 0000 1000 1000 - {ANA, "A,A" }, // 89: 0110 0000 1000 1001 - {ANA, "A,B" }, // 8a: 0110 0000 1000 1010 - {ANA, "A,C" }, // 8b: 0110 0000 1000 1011 - {ANA, "A,D" }, // 8c: 0110 0000 1000 1100 - {ANA, "A,E" }, // 8d: 0110 0000 1000 1101 - {ANA, "A,H" }, // 8e: 0110 0000 1000 1110 - {ANA, "A,L" }, // 8f: 0110 0000 1000 1111 - - {XRA, "A,V" }, // 90: 0110 0000 1001 0000 - {XRA, "A,A" }, // 91: 0110 0000 1001 0001 - {XRA, "A,B" }, // 92: 0110 0000 1001 0010 - {XRA, "A,C" }, // 93: 0110 0000 1001 0011 - {XRA, "A,D" }, // 94: 0110 0000 1001 0100 - {XRA, "A,E" }, // 95: 0110 0000 1001 0101 - {XRA, "A,H" }, // 96: 0110 0000 1001 0110 - {XRA, "A,L" }, // 97: 0110 0000 1001 0111 - {ORA, "A,V" }, // 98: 0110 0000 1001 1000 - {ORA, "A,A" }, // 99: 0110 0000 1001 1001 - {ORA, "A,B" }, // 9a: 0110 0000 1001 1010 - {ORA, "A,C" }, // 9b: 0110 0000 1001 1011 - {ORA, "A,D" }, // 9c: 0110 0000 1001 1100 - {ORA, "A,E" }, // 9d: 0110 0000 1001 1101 - {ORA, "A,H" }, // 9e: 0110 0000 1001 1110 - {ORA, "A,L" }, // 9f: 0110 0000 1001 1111 - - {ADDNC, "A,V" }, // a0: 0110 0000 1010 0000 - {ADDNC, "A,A" }, // a1: 0110 0000 1010 0001 - {ADDNC, "A,B" }, // a2: 0110 0000 1010 0010 - {ADDNC, "A,C" }, // a3: 0110 0000 1010 0011 - {ADDNC, "A,D" }, // a4: 0110 0000 1010 0100 - {ADDNC, "A,E" }, // a5: 0110 0000 1010 0101 - {ADDNC, "A,H" }, // a6: 0110 0000 1010 0110 - {ADDNC, "A,L" }, // a7: 0110 0000 1010 0111 - {GTA, "A,V" }, // a8: 0110 0000 1010 1000 - {GTA, "A,A" }, // a9: 0110 0000 1010 1001 - {GTA, "A,B" }, // aa: 0110 0000 1010 1010 - {GTA, "A,C" }, // ab: 0110 0000 1010 1011 - {GTA, "A,D" }, // ac: 0110 0000 1010 1100 - {GTA, "A,E" }, // ad: 0110 0000 1010 1101 - {GTA, "A,H" }, // ae: 0110 0000 1010 1110 - {GTA, "A,L" }, // af: 0110 0000 1010 1111 - - {SUBNB, "A,V" }, // b0: 0110 0000 1011 0000 - {SUBNB, "A,A" }, // b1: 0110 0000 1011 0001 - {SUBNB, "A,B" }, // b2: 0110 0000 1011 0010 - {SUBNB, "A,C" }, // b3: 0110 0000 1011 0011 - {SUBNB, "A,D" }, // b4: 0110 0000 1011 0100 - {SUBNB, "A,E" }, // b5: 0110 0000 1011 0101 - {SUBNB, "A,H" }, // b6: 0110 0000 1011 0110 - {SUBNB, "A,L" }, // b7: 0110 0000 1011 0111 - {LTA, "A,V" }, // b8: 0110 0000 1011 1000 - {LTA, "A,A" }, // b9: 0110 0000 1011 1001 - {LTA, "A,B" }, // ba: 0110 0000 1011 1010 - {LTA, "A,C" }, // bb: 0110 0000 1011 1011 - {LTA, "A,D" }, // bc: 0110 0000 1011 1100 - {LTA, "A,E" }, // bd: 0110 0000 1011 1101 - {LTA, "A,H" }, // be: 0110 0000 1011 1110 - {LTA, "A,L" }, // bf: 0110 0000 1011 1111 - - {ADD, "A,V" }, // c0: 0110 0000 1100 0000 - {ADD, "A,A" }, // c1: 0110 0000 1100 0001 - {ADD, "A,B" }, // c2: 0110 0000 1100 0010 - {ADD, "A,C" }, // c3: 0110 0000 1100 0011 - {ADD, "A,D" }, // c4: 0110 0000 1100 0100 - {ADD, "A,E" }, // c5: 0110 0000 1100 0101 - {ADD, "A,H" }, // c6: 0110 0000 1100 0110 - {ADD, "A,L" }, // c7: 0110 0000 1100 0111 - {ONA, "A,V" }, // c8: 0110 0000 1100 1000 - {ONA, "A,A" }, // c9: 0110 0000 1100 1001 - {ONA, "A,B" }, // ca: 0110 0000 1100 1010 - {ONA, "A,C" }, // cb: 0110 0000 1100 1011 - {ONA, "A,D" }, // cc: 0110 0000 1100 1100 - {ONA, "A,E" }, // cd: 0110 0000 1100 1101 - {ONA, "A,H" }, // ce: 0110 0000 1100 1110 - {ONA, "A,L" }, // cf: 0110 0000 1100 1111 - - {ADC, "A,V" }, // d0: 0110 0000 1101 0000 - {ADC, "A,A" }, // d1: 0110 0000 1101 0001 - {ADC, "A,B" }, // d2: 0110 0000 1101 0010 - {ADC, "A,C" }, // d3: 0110 0000 1101 0011 - {ADC, "A,D" }, // d4: 0110 0000 1101 0100 - {ADC, "A,E" }, // d5: 0110 0000 1101 0101 - {ADC, "A,H" }, // d6: 0110 0000 1101 0110 - {ADC, "A,L" }, // d7: 0110 0000 1101 0111 - {OFFA, "A,V" }, // d8: 0110 0000 1101 1000 - {OFFA, "A,A" }, // d9: 0110 0000 1101 1001 - {OFFA, "A,B" }, // da: 0110 0000 1101 1010 - {OFFA, "A,C" }, // db: 0110 0000 1101 1011 - {OFFA, "A,D" }, // dc: 0110 0000 1101 1100 - {OFFA, "A,E" }, // dd: 0110 0000 1101 1101 - {OFFA, "A,H" }, // de: 0110 0000 1101 1110 - {OFFA, "A,L" }, // df: 0110 0000 1101 1111 - - {SUB, "A,V" }, // e0: 0110 0000 1110 0000 - {SUB, "A,A" }, // e1: 0110 0000 1110 0001 - {SUB, "A,B" }, // e2: 0110 0000 1110 0010 - {SUB, "A,C" }, // e3: 0110 0000 1110 0011 - {SUB, "A,D" }, // e4: 0110 0000 1110 0100 - {SUB, "A,E" }, // e5: 0110 0000 1110 0101 - {SUB, "A,H" }, // e6: 0110 0000 1110 0110 - {SUB, "A,L" }, // e7: 0110 0000 1110 0111 - {NEA, "A,V" }, // e8: 0110 0000 1110 1000 - {NEA, "A,A" }, // e9: 0110 0000 1110 1001 - {NEA, "A,B" }, // ea: 0110 0000 1110 1010 - {NEA, "A,C" }, // eb: 0110 0000 1110 1011 - {NEA, "A,D" }, // ec: 0110 0000 1110 1100 - {NEA, "A,E" }, // ed: 0110 0000 1110 1101 - {NEA, "A,H" }, // ee: 0110 0000 1110 1110 - {NEA, "A,L" }, // ef: 0110 0000 1110 1111 - - {SBB, "A,V" }, // f0: 0110 0000 1111 0000 - {SBB, "A,A" }, // f1: 0110 0000 1111 0001 - {SBB, "A,B" }, // f2: 0110 0000 1111 0010 - {SBB, "A,C" }, // f3: 0110 0000 1111 0011 - {SBB, "A,D" }, // f4: 0110 0000 1111 0100 - {SBB, "A,E" }, // f5: 0110 0000 1111 0101 - {SBB, "A,H" }, // f6: 0110 0000 1111 0110 - {SBB, "A,L" }, // f7: 0110 0000 1111 0111 - {EQA, "A,V" }, // f8: 0110 0000 1111 1000 - {EQA, "A,A" }, // f9: 0110 0000 1111 1001 - {EQA, "A,B" }, // fa: 0110 0000 1111 1010 - {EQA, "A,C" }, // fb: 0110 0000 1111 1011 - {EQA, "A,D" }, // fc: 0110 0000 1111 1100 - {EQA, "A,E" }, // fd: 0110 0000 1111 1101 - {EQA, "A,H" }, // fe: 0110 0000 1111 1110 - {EQA, "A,L" } // ff: 0110 0000 1111 1111 -}; // prefix 64 -const dasm_s dasm_s::d64_7810[256] = +const upd7810_base_disassembler::dasm_s upd7810_disassembler::d64_7810[256] = { {MVI, "PA,%b" }, // 00: 0110 0100 0000 0000 xxxx xxxx {MVI, "PB,%b" }, // 01: 0110 0100 0000 0001 xxxx xxxx @@ -2637,835 +2169,10 @@ const dasm_s dasm_s::d64_7810[256] = { } // ff: 0110 0100 1111 1111 xxxx xxxx }; -const dasm_s dasm_s::d64_7807[256] = -{ - {MVI, "PA,%b" }, // 00: 0110 0100 0000 0000 xxxx xxxx - {MVI, "PB,%b" }, // 01: 0110 0100 0000 0001 xxxx xxxx - {MVI, "PC,%b" }, // 02: 0110 0100 0000 0010 xxxx xxxx - {MVI, "PD,%b" }, // 03: 0110 0100 0000 0011 xxxx xxxx - { }, // 04: 0110 0100 0000 0100 xxxx xxxx - {MVI, "PF,%b" }, // 05: 0110 0100 0000 0101 xxxx xxxx - {MVI, "MKH,%b" }, // 06: 0110 0100 0000 0110 xxxx xxxx - {MVI, "MKL,%b" }, // 07: 0110 0100 0000 0111 xxxx xxxx - {ANI, "PA,%b" }, // 08: 0110 0100 0000 1000 xxxx xxxx - {ANI, "PB,%b" }, // 09: 0110 0100 0000 1001 xxxx xxxx - {ANI, "PC,%b" }, // 0a: 0110 0100 0000 1010 xxxx xxxx - {ANI, "PD,%b" }, // 0b: 0110 0100 0000 1011 xxxx xxxx - { }, // 0c: 0110 0100 0000 1100 xxxx xxxx - {ANI, "PF,%b" }, // 0d: 0110 0100 0000 1101 xxxx xxxx - {ANI, "MKH,%b" }, // 0e: 0110 0100 0000 1110 xxxx xxxx - {ANI, "MKL,%b" }, // 0f: 0110 0100 0000 1111 xxxx xxxx - - {XRI, "PA,%b" }, // 10: 0110 0100 0001 0000 xxxx xxxx - {XRI, "PB,%b" }, // 11: 0110 0100 0001 0001 xxxx xxxx - {XRI, "PC,%b" }, // 12: 0110 0100 0001 0010 xxxx xxxx - {XRI, "PD,%b" }, // 13: 0110 0100 0001 0011 xxxx xxxx - { }, // 14: 0110 0100 0001 0100 xxxx xxxx - {XRI, "PF,%b" }, // 15: 0110 0100 0001 0101 xxxx xxxx - {XRI, "MKH,%b" }, // 16: 0110 0100 0001 0110 xxxx xxxx - {XRI, "MKL,%b" }, // 17: 0110 0100 0001 0111 xxxx xxxx - {ORI, "PA,%b" }, // 18: 0110 0100 0001 1000 xxxx xxxx - {ORI, "PB,%b" }, // 19: 0110 0100 0001 1001 xxxx xxxx - {ORI, "PC,%b" }, // 1a: 0110 0100 0001 1010 xxxx xxxx - {ORI, "PD,%b" }, // 1b: 0110 0100 0001 1011 xxxx xxxx - { }, // 1c: 0110 0100 0001 1100 xxxx xxxx - {ORI, "PF,%b" }, // 1d: 0110 0100 0001 1101 xxxx xxxx - {ORI, "MKH,%b" }, // 1e: 0110 0100 0001 1110 xxxx xxxx - {ORI, "MKL,%b" }, // 1f: 0110 0100 0001 1111 xxxx xxxx - - {ADINC, "PA,%b" }, // 20: 0110 0100 0010 0000 xxxx xxxx - {ADINC, "PB,%b" }, // 21: 0110 0100 0010 0001 xxxx xxxx - {ADINC, "PC,%b" }, // 22: 0110 0100 0010 0010 xxxx xxxx - {ADINC, "PD,%b" }, // 23: 0110 0100 0010 0011 xxxx xxxx - { }, // 24: 0110 0100 0010 0100 xxxx xxxx - {ADINC, "PF,%b" }, // 25: 0110 0100 0010 0101 xxxx xxxx - {ADINC, "MKH,%b" }, // 26: 0110 0100 0010 0110 xxxx xxxx - {ADINC, "MKL,%b" }, // 27: 0110 0100 0010 0111 xxxx xxxx - {GTI, "PA,%b" }, // 28: 0110 0100 0010 1000 xxxx xxxx - {GTI, "PB,%b" }, // 29: 0110 0100 0010 1001 xxxx xxxx - {GTI, "PC,%b" }, // 2a: 0110 0100 0010 1010 xxxx xxxx - {GTI, "PD,%b" }, // 2b: 0110 0100 0010 1011 xxxx xxxx - { }, // 2c: 0110 0100 0010 1100 xxxx xxxx - {GTI, "PF,%b" }, // 2d: 0110 0100 0010 1101 xxxx xxxx - {GTI, "MKH,%b" }, // 2e: 0110 0100 0010 1110 xxxx xxxx - {GTI, "MKL,%b" }, // 2f: 0110 0100 0010 1111 xxxx xxxx - - {SUINB, "PA,%b" }, // 30: 0110 0100 0011 0000 xxxx xxxx - {SUINB, "PB,%b" }, // 31: 0110 0100 0011 0001 xxxx xxxx - {SUINB, "PC,%b" }, // 32: 0110 0100 0011 0010 xxxx xxxx - {SUINB, "PD,%b" }, // 33: 0110 0100 0011 0011 xxxx xxxx - { }, // 34: 0110 0100 0011 0100 xxxx xxxx - {SUINB, "PF,%b" }, // 35: 0110 0100 0011 0101 xxxx xxxx - {SUINB, "MKH,%b" }, // 36: 0110 0100 0011 0110 xxxx xxxx - {SUINB, "MKL,%b" }, // 37: 0110 0100 0011 0111 xxxx xxxx - {LTI, "PA,%b" }, // 38: 0110 0100 0011 1000 xxxx xxxx - {LTI, "PB,%b" }, // 39: 0110 0100 0011 1001 xxxx xxxx - {LTI, "PC,%b" }, // 3a: 0110 0100 0011 1010 xxxx xxxx - {LTI, "PD,%b" }, // 3b: 0110 0100 0011 1011 xxxx xxxx - { }, // 3c: 0110 0100 0011 1100 xxxx xxxx - {LTI, "PF,%b" }, // 3d: 0110 0100 0011 1101 xxxx xxxx - {LTI, "MKH,%b" }, // 3e: 0110 0100 0011 1110 xxxx xxxx - {LTI, "MKL,%b" }, // 3f: 0110 0100 0011 1111 xxxx xxxx - - {ADI, "PA,%b" }, // 40: 0110 0100 0100 0000 xxxx xxxx - {ADI, "PB,%b" }, // 41: 0110 0100 0100 0001 xxxx xxxx - {ADI, "PC,%b" }, // 42: 0110 0100 0100 0010 xxxx xxxx - {ADI, "PD,%b" }, // 43: 0110 0100 0100 0011 xxxx xxxx - { }, // 44: 0110 0100 0100 0100 xxxx xxxx - {ADI, "PF,%b" }, // 45: 0110 0100 0100 0101 xxxx xxxx - {ADI, "MKH,%b" }, // 46: 0110 0100 0100 0110 xxxx xxxx - {ADI, "MKL,%b" }, // 47: 0110 0100 0100 0111 xxxx xxxx - {ONI, "PA,%b" }, // 48: 0110 0100 0100 1000 xxxx xxxx - {ONI, "PB,%b" }, // 49: 0110 0100 0100 1001 xxxx xxxx - {ONI, "PC,%b" }, // 4a: 0110 0100 0100 1010 xxxx xxxx - {ONI, "PD,%b" }, // 4b: 0110 0100 0100 1011 xxxx xxxx - { }, // 4c: 0110 0100 0100 1100 xxxx xxxx - {ONI, "PF,%b" }, // 4d: 0110 0100 0100 1101 xxxx xxxx - {ONI, "MKH,%b" }, // 4e: 0110 0100 0100 1110 xxxx xxxx - {ONI, "MKL,%b" }, // 4f: 0110 0100 0100 1111 xxxx xxxx - - {ACI, "PA,%b" }, // 50: 0110 0100 0101 0000 xxxx xxxx - {ACI, "PB,%b" }, // 51: 0110 0100 0101 0001 xxxx xxxx - {ACI, "PC,%b" }, // 52: 0110 0100 0101 0010 xxxx xxxx - {ACI, "PD,%b" }, // 53: 0110 0100 0101 0011 xxxx xxxx - { }, // 54: 0110 0100 0101 0100 xxxx xxxx - {ACI, "PF,%b" }, // 55: 0110 0100 0101 0101 xxxx xxxx - {ACI, "MKH,%b" }, // 56: 0110 0100 0101 0110 xxxx xxxx - {ACI, "MKL,%b" }, // 57: 0110 0100 0101 0111 xxxx xxxx - {OFFI, "PA,%b" }, // 58: 0110 0100 0101 1000 xxxx xxxx - {OFFI, "PB,%b" }, // 59: 0110 0100 0101 1001 xxxx xxxx - {OFFI, "PC,%b" }, // 5a: 0110 0100 0101 1010 xxxx xxxx - {OFFI, "PD,%b" }, // 5b: 0110 0100 0101 1011 xxxx xxxx - { }, // 5c: 0110 0100 0101 1100 xxxx xxxx - {OFFI, "PF,%b" }, // 5d: 0110 0100 0101 1101 xxxx xxxx - {OFFI, "MKH,%b" }, // 5e: 0110 0100 0101 1110 xxxx xxxx - {OFFI, "MKL,%b" }, // 5f: 0110 0100 0101 1111 xxxx xxxx - - {SUI, "PA,%b" }, // 60: 0110 0100 0110 0000 xxxx xxxx - {SUI, "PB,%b" }, // 61: 0110 0100 0110 0001 xxxx xxxx - {SUI, "PC,%b" }, // 62: 0110 0100 0110 0010 xxxx xxxx - {SUI, "PD,%b" }, // 63: 0110 0100 0110 0011 xxxx xxxx - { }, // 64: 0110 0100 0110 0100 xxxx xxxx - {SUI, "PF,%b" }, // 65: 0110 0100 0110 0101 xxxx xxxx - {SUI, "MKH,%b" }, // 66: 0110 0100 0110 0110 xxxx xxxx - {SUI, "MKL,%b" }, // 67: 0110 0100 0110 0111 xxxx xxxx - {NEI, "PA,%b" }, // 68: 0110 0100 0110 1000 xxxx xxxx - {NEI, "PB,%b" }, // 69: 0110 0100 0110 1001 xxxx xxxx - {NEI, "PC,%b" }, // 6a: 0110 0100 0110 1010 xxxx xxxx - {NEI, "PD,%b" }, // 6b: 0110 0100 0110 1011 xxxx xxxx - { }, // 6c: 0110 0100 0110 1100 xxxx xxxx - {NEI, "PF,%b" }, // 6d: 0110 0100 0110 1101 xxxx xxxx - {NEI, "MKH,%b" }, // 6e: 0110 0100 0110 1110 xxxx xxxx - {NEI, "MKL,%b" }, // 6f: 0110 0100 0110 1111 xxxx xxxx - - {SBI, "PA,%b" }, // 70: 0110 0100 0111 0000 xxxx xxxx - {SBI, "PB,%b" }, // 71: 0110 0100 0111 0001 xxxx xxxx - {SBI, "PC,%b" }, // 72: 0110 0100 0111 0010 xxxx xxxx - {SBI, "PD,%b" }, // 73: 0110 0100 0111 0011 xxxx xxxx - { }, // 74: 0110 0100 0111 0100 xxxx xxxx - {SBI, "PF,%b" }, // 75: 0110 0100 0111 0101 xxxx xxxx - {SBI, "MKH,%b" }, // 76: 0110 0100 0111 0110 xxxx xxxx - {SBI, "MKL,%b" }, // 77: 0110 0100 0111 0111 xxxx xxxx - {EQI, "PA,%b" }, // 78: 0110 0100 0111 1000 xxxx xxxx - {EQI, "PB,%b" }, // 79: 0110 0100 0111 1001 xxxx xxxx - {EQI, "PC,%b" }, // 7a: 0110 0100 0111 1010 xxxx xxxx - {EQI, "PD,%b" }, // 7b: 0110 0100 0111 1011 xxxx xxxx - { }, // 7c: 0110 0100 0111 1100 xxxx xxxx - {EQI, "PF,%b" }, // 7d: 0110 0100 0111 1101 xxxx xxxx - {EQI, "MKH,%b" }, // 7e: 0110 0100 0111 1110 xxxx xxxx - {EQI, "MKL,%b" }, // 7f: 0110 0100 0111 1111 xxxx xxxx - - { }, // 80: 0110 0100 1000 0000 xxxx xxxx - {MVI, "SMH,%b" }, // 81: 0110 0100 1000 0001 xxxx xxxx - { }, // 82: 0110 0100 1000 0010 xxxx xxxx - {MVI, "EOM,%b" }, // 83: 0110 0100 1000 0011 xxxx xxxx - { }, // 84: 0110 0100 1000 0100 xxxx xxxx - {MVI, "TMM,%b" }, // 85: 0110 0100 1000 0101 xxxx xxxx - { }, // 86: 0110 0100 1000 0110 xxxx xxxx - { }, // 87: 0110 0100 1000 0111 xxxx xxxx - { }, // 88: 0110 0100 1000 1000 xxxx xxxx - {ANI, "SMH,%b" }, // 89: 0110 0100 1000 1001 xxxx xxxx - { }, // 8a: 0110 0100 1000 1010 xxxx xxxx - {ANI, "EOM,%b" }, // 8b: 0110 0100 1000 1011 xxxx xxxx - { }, // 8c: 0110 0100 1000 1100 xxxx xxxx - {ANI, "TMM,%b" }, // 8d: 0110 0100 1000 1101 xxxx xxxx - { }, // 8e: 0110 0100 1000 1110 xxxx xxxx - { }, // 8f: 0110 0100 1000 1111 xxxx xxxx - - { }, // 90: 0110 0100 1001 0000 xxxx xxxx - {XRI, "SMH,%b" }, // 91: 0110 0100 1001 0001 xxxx xxxx - { }, // 92: 0110 0100 1001 0010 xxxx xxxx - {XRI, "EOM,%b" }, // 93: 0110 0100 1001 0011 xxxx xxxx - { }, // 94: 0110 0100 1001 0100 xxxx xxxx - {XRI, "TMM,%b" }, // 95: 0110 0100 1001 0101 xxxx xxxx - { }, // 96: 0110 0100 1001 0110 xxxx xxxx - { }, // 97: 0110 0100 1001 0111 xxxx xxxx - { }, // 98: 0110 0100 1001 1000 xxxx xxxx - {ORI, "SMH,%b" }, // 99: 0110 0100 1001 1001 xxxx xxxx - { }, // 9a: 0110 0100 1001 1010 xxxx xxxx - {ORI, "EOM,%b" }, // 9b: 0110 0100 1001 1011 xxxx xxxx - { }, // 9c: 0110 0100 1001 1100 xxxx xxxx - {ORI, "TMM,%b" }, // 9d: 0110 0100 1001 1101 xxxx xxxx - { }, // 9e: 0110 0100 1001 1110 xxxx xxxx - { }, // 9f: 0110 0100 1001 1111 xxxx xxxx - - { }, // a0: 0110 0100 1010 0000 xxxx xxxx - {ADINC, "SMH,%b" }, // a1: 0110 0100 1010 0001 xxxx xxxx - { }, // a2: 0110 0100 1010 0010 xxxx xxxx - {ADINC, "EOM,%b" }, // a3: 0110 0100 1010 0011 xxxx xxxx - { }, // a4: 0110 0100 1010 0100 xxxx xxxx - {ADINC, "TMM,%b" }, // a5: 0110 0100 1010 0101 xxxx xxxx - { }, // a6: 0110 0100 1010 0110 xxxx xxxx - { }, // a7: 0110 0100 1010 0111 xxxx xxxx - { }, // a8: 0110 0100 1010 1000 xxxx xxxx - {GTI, "SMH,%b" }, // a9: 0110 0100 1010 1001 xxxx xxxx - { }, // aa: 0110 0100 1010 1010 xxxx xxxx - {GTI, "EOM,%b" }, // ab: 0110 0100 1010 1011 xxxx xxxx - { }, // ac: 0110 0100 1010 1100 xxxx xxxx - {GTI, "TMM,%b" }, // ad: 0110 0100 1010 1101 xxxx xxxx - {GTI, "PT,%b" }, // ae: 0110 0100 1010 1110 xxxx xxxx - { }, // af: 0110 0100 1010 1111 xxxx xxxx - - { }, // b0: 0110 0100 1011 0000 xxxx xxxx - {SUINB, "SMH,%b" }, // b1: 0110 0100 1011 0001 xxxx xxxx - { }, // b2: 0110 0100 1011 0010 xxxx xxxx - {SUINB, "EOM,%b" }, // b3: 0110 0100 1011 0011 xxxx xxxx - { }, // b4: 0110 0100 1011 0100 xxxx xxxx - {SUINB, "TMM,%b" }, // b5: 0110 0100 1011 0101 xxxx xxxx - { }, // b6: 0110 0100 1011 0110 xxxx xxxx - { }, // b7: 0110 0100 1011 0111 xxxx xxxx - { }, // b8: 0110 0100 1011 1000 xxxx xxxx - {LTI, "SMH,%b" }, // b9: 0110 0100 1011 1001 xxxx xxxx - { }, // ba: 0110 0100 1011 1010 xxxx xxxx - {LTI, "EOM,%b" }, // bb: 0110 0100 1011 1011 xxxx xxxx - { }, // bc: 0110 0100 1011 1100 xxxx xxxx - {LTI, "TMM,%b" }, // bd: 0110 0100 1011 1101 xxxx xxxx - {LTI, "PT,%b" }, // be: 0110 0100 1011 1110 xxxx xxxx - { }, // bf: 0110 0100 1011 1111 xxxx xxxx - - { }, // c0: 0110 0100 1100 0000 xxxx xxxx - {ADI, "SMH,%b" }, // c1: 0110 0100 1100 0001 xxxx xxxx - { }, // c2: 0110 0100 1100 0010 xxxx xxxx - {ADI, "EOM,%b" }, // c3: 0110 0100 1100 0011 xxxx xxxx - { }, // c4: 0110 0100 1100 0100 xxxx xxxx - {ADI, "TMM,%b" }, // c5: 0110 0100 1100 0101 xxxx xxxx - { }, // c6: 0110 0100 1100 0110 xxxx xxxx - { }, // c7: 0110 0100 1100 0111 xxxx xxxx - { }, // c8: 0110 0100 1100 1000 xxxx xxxx - {ONI, "SMH,%b" }, // c9: 0110 0100 1100 1001 xxxx xxxx - { }, // ca: 0110 0100 1100 1010 xxxx xxxx - {ONI, "EOM,%b" }, // cb: 0110 0100 1100 1011 xxxx xxxx - { }, // cc: 0110 0100 1100 1100 xxxx xxxx - {ONI, "TMM,%b" }, // cd: 0110 0100 1100 1101 xxxx xxxx - {ONI, "PT,%b" }, // ce: 0110 0100 1100 1110 xxxx xxxx - { }, // cf: 0110 0100 1100 1111 xxxx xxxx - - { }, // d0: 0110 0100 1101 0000 xxxx xxxx - {ACI, "SMH,%b" }, // d1: 0110 0100 1101 0001 xxxx xxxx - { }, // d2: 0110 0100 1101 0010 xxxx xxxx - {ACI, "EOM,%b" }, // d3: 0110 0100 1101 0011 xxxx xxxx - { }, // d4: 0110 0100 1101 0100 xxxx xxxx - {ACI, "TMM,%b" }, // d5: 0110 0100 1101 0101 xxxx xxxx - { }, // d6: 0110 0100 1101 0110 xxxx xxxx - { }, // d7: 0110 0100 1101 0111 xxxx xxxx - { }, // d8: 0110 0100 1101 1000 xxxx xxxx - {OFFI, "SMH,%b" }, // d9: 0110 0100 1101 1001 xxxx xxxx - { }, // da: 0110 0100 1101 1010 xxxx xxxx - {OFFI, "EOM,%b" }, // db: 0110 0100 1101 1011 xxxx xxxx - { }, // dc: 0110 0100 1101 1100 xxxx xxxx - {OFFI, "TMM,%b" }, // dd: 0110 0100 1101 1101 xxxx xxxx - {OFFI, "PT,%b" }, // de: 0110 0100 1101 1110 xxxx xxxx - { }, // df: 0110 0100 1101 1111 xxxx xxxx - - { }, // e0: 0110 0100 1110 0000 xxxx xxxx - {SUI, "SMH,%b" }, // e1: 0110 0100 1110 0001 xxxx xxxx - { }, // e2: 0110 0100 1110 0010 xxxx xxxx - {SUI, "EOM,%b" }, // e3: 0110 0100 1110 0011 xxxx xxxx - { }, // e4: 0110 0100 1110 0100 xxxx xxxx - {SUI, "TMM,%b" }, // e5: 0110 0100 1110 0101 xxxx xxxx - { }, // e6: 0110 0100 1110 0110 xxxx xxxx - { }, // e7: 0110 0100 1110 0111 xxxx xxxx - { }, // e8: 0110 0100 1110 1000 xxxx xxxx - {NEI, "SMH,%b" }, // e9: 0110 0100 1110 1001 xxxx xxxx - { }, // ea: 0110 0100 1110 1010 xxxx xxxx - {NEI, "EOM,%b" }, // eb: 0110 0100 1110 1011 xxxx xxxx - { }, // ec: 0110 0100 1110 1100 xxxx xxxx - {NEI, "TMM,%b" }, // ed: 0110 0100 1110 1101 xxxx xxxx - {NEI, "PT,%b" }, // ee: 0110 0100 1110 1110 xxxx xxxx - { }, // ef: 0110 0100 1110 1111 xxxx xxxx - - { }, // f0: 0110 0100 1111 0000 xxxx xxxx - {SBI, "SMH,%b" }, // f1: 0110 0100 1111 0001 xxxx xxxx - { }, // f2: 0110 0100 1111 0010 xxxx xxxx - {SBI, "EOM,%b" }, // f3: 0110 0100 1111 0011 xxxx xxxx - { }, // f4: 0110 0100 1111 0100 xxxx xxxx - {SBI, "TMM,%b" }, // f5: 0110 0100 1111 0101 xxxx xxxx - { }, // f6: 0110 0100 1111 0110 xxxx xxxx - { }, // f7: 0110 0100 1111 0111 xxxx xxxx - { }, // f8: 0110 0100 1111 1000 xxxx xxxx - {EQI, "SMH,%b" }, // f9: 0110 0100 1111 1001 xxxx xxxx - { }, // fa: 0110 0100 1111 1010 xxxx xxxx - {EQI, "EOM,%b" }, // fb: 0110 0100 1111 1011 xxxx xxxx - { }, // fc: 0110 0100 1111 1100 xxxx xxxx - {EQI, "TMM,%b" }, // fd: 0110 0100 1111 1101 xxxx xxxx - {EQI, "PT,%b" }, // fe: 0110 0100 1111 1110 xxxx xxxx - { } // ff: 0110 0100 1111 1111 xxxx xxxx -}; - -// prefix 70 -const dasm_s dasm_s::d70[256] = -{ - { }, // 00: 0111 0000 0000 0000 - { }, // 01: 0111 0000 0000 0001 - { }, // 02: 0111 0000 0000 0010 - { }, // 03: 0111 0000 0000 0011 - { }, // 04: 0111 0000 0000 0100 - { }, // 05: 0111 0000 0000 0101 - { }, // 06: 0111 0000 0000 0110 - { }, // 07: 0111 0000 0000 0111 - { }, // 08: 0111 0000 0000 1000 - { }, // 09: 0111 0000 0000 1001 - { }, // 0a: 0111 0000 0000 1010 - { }, // 0b: 0111 0000 0000 1011 - { }, // 0c: 0111 0000 0000 1100 - { }, // 0d: 0111 0000 0000 1101 - {SSPD, "%w" }, // 0e: 0111 0000 0000 1110 llll llll hhhh hhhh - {LSPD, "%w" }, // 0f: 0111 0000 0000 1111 llll llll hhhh hhhh - - { }, // 10: 0111 0000 0001 0000 - { }, // 11: 0111 0000 0001 0001 - { }, // 12: 0111 0000 0001 0010 - { }, // 13: 0111 0000 0001 0011 - { }, // 14: 0111 0000 0001 0100 - { }, // 15: 0111 0000 0001 0101 - { }, // 16: 0111 0000 0001 0110 - { }, // 17: 0111 0000 0001 0111 - { }, // 18: 0111 0000 0001 1000 - { }, // 19: 0111 0000 0001 1001 - { }, // 1a: 0111 0000 0001 1010 - { }, // 1b: 0111 0000 0001 1011 - { }, // 1c: 0111 0000 0001 1100 - { }, // 1d: 0111 0000 0001 1101 - {SBCD, "%w" }, // 1e: 0111 0000 0001 1110 llll llll hhhh hhhh - {LBCD, "%w" }, // 1f: 0111 0000 0001 1111 llll llll hhhh hhhh - - { }, // 20: 0111 0000 0010 0000 - { }, // 21: 0111 0000 0010 0001 - { }, // 22: 0111 0000 0010 0010 - { }, // 23: 0111 0000 0010 0011 - { }, // 24: 0111 0000 0010 0100 - { }, // 25: 0111 0000 0010 0101 - { }, // 26: 0111 0000 0010 0110 - { }, // 27: 0111 0000 0010 0111 - { }, // 28: 0111 0000 0010 1000 - { }, // 29: 0111 0000 0010 1001 - { }, // 2a: 0111 0000 0010 1010 - { }, // 2b: 0111 0000 0010 1011 - { }, // 2c: 0111 0000 0010 1100 - { }, // 2d: 0111 0000 0010 1101 - {SDED, "%w" }, // 2e: 0111 0000 0010 1110 llll llll hhhh hhhh - {LDED, "%w" }, // 2f: 0111 0000 0010 1111 llll llll hhhh hhhh - - { }, // 30: 0111 0000 0011 0000 - { }, // 31: 0111 0000 0011 0001 - { }, // 32: 0111 0000 0011 0010 - { }, // 33: 0111 0000 0011 0011 - { }, // 34: 0111 0000 0011 0100 - { }, // 35: 0111 0000 0011 0101 - { }, // 36: 0111 0000 0011 0110 - { }, // 37: 0111 0000 0011 0111 - { }, // 38: 0111 0000 0011 1000 - { }, // 39: 0111 0000 0011 1001 - { }, // 3a: 0111 0000 0011 1010 - { }, // 3b: 0111 0000 0011 1011 - { }, // 3c: 0111 0000 0011 1100 - { }, // 3d: 0111 0000 0011 1101 - {SHLD, "%w" }, // 3e: 0111 0000 0011 1110 llll llll hhhh hhhh - {LHLD, "%w" }, // 3f: 0111 0000 0011 1111 llll llll hhhh hhhh - - {EADD, "EA,V" }, // 40: 0111 0000 0100 0000 - {EADD, "EA,A" }, // 41: 0111 0000 0100 0001 - {EADD, "EA,B" }, // 42: 0111 0000 0100 0010 - {EADD, "EA,C" }, // 43: 0111 0000 0100 0011 - { }, // 44: 0111 0000 0100 0100 - { }, // 45: 0111 0000 0100 0101 - { }, // 46: 0111 0000 0100 0110 - { }, // 47: 0111 0000 0100 0111 - { }, // 48: 0111 0000 0100 1000 - { }, // 49: 0111 0000 0100 1001 - { }, // 4a: 0111 0000 0100 1010 - { }, // 4b: 0111 0000 0100 1011 - { }, // 4c: 0111 0000 0100 1100 - { }, // 4d: 0111 0000 0100 1101 - { }, // 4e: 0111 0000 0100 1110 - { }, // 4f: 0111 0000 0100 1111 - - { }, // 50: 0111 0000 0101 0000 - { }, // 51: 0111 0000 0101 0001 - { }, // 52: 0111 0000 0101 0010 - { }, // 53: 0111 0000 0101 0011 - { }, // 54: 0111 0000 0101 0100 - { }, // 55: 0111 0000 0101 0101 - { }, // 56: 0111 0000 0101 0110 - { }, // 57: 0111 0000 0101 0111 - { }, // 58: 0111 0000 0101 1000 - { }, // 59: 0111 0000 0101 1001 - { }, // 5a: 0111 0000 0101 1010 - { }, // 5b: 0111 0000 0101 1011 - { }, // 5c: 0111 0000 0101 1100 - { }, // 5d: 0111 0000 0101 1101 - { }, // 5e: 0111 0000 0101 1110 - { }, // 5f: 0111 0000 0101 1111 - - {ESUB, "EA,V" }, // 60: 0111 0000 0110 0000 - {ESUB, "EA,A" }, // 61: 0111 0000 0110 0001 - {ESUB, "EA,B" }, // 62: 0111 0000 0110 0010 - {ESUB, "EA,C" }, // 63: 0111 0000 0110 0011 - { }, // 64: 0111 0000 0110 0100 - { }, // 65: 0111 0000 0110 0101 - { }, // 66: 0111 0000 0110 0110 - { }, // 67: 0111 0000 0110 0111 - {MOV, "V,(%w)" }, // 68: 0111 0000 0110 1000 llll llll hhhh hhhh - {MOV, "A,(%w)" }, // 69: 0111 0000 0110 1001 llll llll hhhh hhhh - {MOV, "B,(%w)" }, // 6a: 0111 0000 0110 1010 llll llll hhhh hhhh - {MOV, "C,(%w)" }, // 6b: 0111 0000 0110 1011 llll llll hhhh hhhh - {MOV, "D,(%w)" }, // 6c: 0111 0000 0110 1100 llll llll hhhh hhhh - {MOV, "E,(%w)" }, // 6d: 0111 0000 0110 1101 llll llll hhhh hhhh - {MOV, "H,(%w)" }, // 6e: 0111 0000 0110 1110 llll llll hhhh hhhh - {MOV, "L,(%w)" }, // 6f: 0111 0000 0110 1111 llll llll hhhh hhhh - - { }, // 70: 0111 0000 0111 0000 - { }, // 71: 0111 0000 0111 0001 - { }, // 72: 0111 0000 0111 0010 - { }, // 73: 0111 0000 0111 0011 - { }, // 74: 0111 0000 0111 0100 - { }, // 75: 0111 0000 0111 0101 - { }, // 76: 0111 0000 0111 0110 - { }, // 77: 0111 0000 0111 0111 - {MOV, "(%w),V" }, // 78: 0111 0000 0111 1000 llll llll hhhh hhhh - {MOV, "(%w),A" }, // 79: 0111 0000 0111 1001 llll llll hhhh hhhh - {MOV, "(%w),B" }, // 7a: 0111 0000 0111 1010 llll llll hhhh hhhh - {MOV, "(%w),C" }, // 7b: 0111 0000 0111 1011 llll llll hhhh hhhh - {MOV, "(%w),D" }, // 7c: 0111 0000 0111 1100 llll llll hhhh hhhh - {MOV, "(%w),E" }, // 7d: 0111 0000 0111 1101 llll llll hhhh hhhh - {MOV, "(%w),H" }, // 7e: 0111 0000 0111 1110 llll llll hhhh hhhh - {MOV, "(%w),L" }, // 7f: 0111 0000 0111 1111 llll llll hhhh hhhh - - { }, // 80: 0111 0000 1000 0000 - { }, // 81: 0111 0000 1000 0001 - { }, // 82: 0111 0000 1000 0010 - { }, // 83: 0111 0000 1000 0011 - { }, // 84: 0111 0000 1000 0100 - { }, // 85: 0111 0000 1000 0101 - { }, // 86: 0111 0000 1000 0110 - { }, // 87: 0111 0000 1000 0111 - { }, // 88: 0111 0000 1000 1000 - {ANAX, "(BC)" }, // 89: 0111 0000 1000 1001 - {ANAX, "(DE)" }, // 8a: 0111 0000 1000 1010 - {ANAX, "(HL)" }, // 8b: 0111 0000 1000 1011 - {ANAX, "(DE+)" }, // 8c: 0111 0000 1000 1100 - {ANAX, "(HL+)" }, // 8d: 0111 0000 1000 1101 - {ANAX, "(DE-)" }, // 8e: 0111 0000 1000 1110 - {ANAX, "(HL-)" }, // 8f: 0111 0000 1000 1111 - - { }, // 90: 0111 0000 1001 0000 - {XRAX, "(BC)" }, // 91: 0111 0000 1001 0001 - {XRAX, "(DE)" }, // 92: 0111 0000 1001 0010 - {XRAX, "(HL)" }, // 93: 0111 0000 1001 0011 - {XRAX, "(DE+)" }, // 94: 0111 0000 1001 0100 - {XRAX, "(HL+)" }, // 95: 0111 0000 1001 0101 - {XRAX, "(DE-)" }, // 96: 0111 0000 1001 0110 - {XRAX, "(HL-)" }, // 97: 0111 0000 1001 0111 - { }, // 98: 0111 0000 1001 1000 - {ORAX, "(BC)" }, // 99: 0111 0000 1001 1001 - {ORAX, "(DE)" }, // 9a: 0111 0000 1001 1010 - {ORAX, "(HL)" }, // 9b: 0111 0000 1001 1011 - {ORAX, "(DE+)" }, // 9c: 0111 0000 1001 1100 - {ORAX, "(HL+)" }, // 9d: 0111 0000 1001 1101 - {ORAX, "(DE-)" }, // 9e: 0111 0000 1001 1110 - {ORAX, "(HL-)" }, // 9f: 0111 0000 1001 1111 - - { }, // a0: 0111 0000 1010 0000 - {ADDNCX, "(BC)" }, // a1: 0111 0000 1010 0001 - {ADDNCX, "(DE)" }, // a2: 0111 0000 1010 0010 - {ADDNCX, "(HL)" }, // a3: 0111 0000 1010 0011 - {ADDNCX, "(DE+)" }, // a4: 0111 0000 1010 0100 - {ADDNCX, "(HL+)" }, // a5: 0111 0000 1010 0101 - {ADDNCX, "(DE-)" }, // a6: 0111 0000 1010 0110 - {ADDNCX, "(HL-)" }, // a7: 0111 0000 1010 0111 - { }, // a8: 0111 0000 1010 1000 - {GTAX, "(BC)" }, // a9: 0111 0000 1010 1001 - {GTAX, "(DE)" }, // aa: 0111 0000 1010 1010 - {GTAX, "(HL)" }, // ab: 0111 0000 1010 1011 - {GTAX, "(DE+)" }, // ac: 0111 0000 1010 1100 - {GTAX, "(HL+)" }, // ad: 0111 0000 1010 1101 - {GTAX, "(DE-)" }, // ae: 0111 0000 1010 1110 - {GTAX, "(HL-)" }, // af: 0111 0000 1010 1111 - - { }, // b0: 0111 0000 1011 0000 - {SUBNBX, "(BC)" }, // b1: 0111 0000 1011 0001 - {SUBNBX, "(DE)" }, // b2: 0111 0000 1011 0010 - {SUBNBX, "(HL)" }, // b3: 0111 0000 1011 0011 - {SUBNBX, "(DE+)" }, // b4: 0111 0000 1011 0100 - {SUBNBX, "(HL+)" }, // b5: 0111 0000 1011 0101 - {SUBNBX, "(DE-)" }, // b6: 0111 0000 1011 0110 - {SUBNBX, "(HL-)" }, // b7: 0111 0000 1011 0111 - { }, // b8: 0111 0000 1011 1000 - {LTAX, "(BC)" }, // b9: 0111 0000 1011 1001 - {LTAX, "(DE)" }, // ba: 0111 0000 1011 1010 - {LTAX, "(HL)" }, // bb: 0111 0000 1011 1011 - {LTAX, "(DE+)" }, // bc: 0111 0000 1011 1100 - {LTAX, "(HL+)" }, // bd: 0111 0000 1011 1101 - {LTAX, "(DE-)" }, // be: 0111 0000 1011 1110 - {LTAX, "(HL-)" }, // bf: 0111 0000 1011 1111 - - { }, // c0: 0111 0000 1100 0000 - {ADDX, "(BC)" }, // c1: 0111 0000 1100 0001 - {ADDX, "(DE)" }, // c2: 0111 0000 1100 0010 - {ADDX, "(HL)" }, // c3: 0111 0000 1100 0011 - {ADDX, "(DE+)" }, // c4: 0111 0000 1100 0100 - {ADDX, "(HL+)" }, // c5: 0111 0000 1100 0101 - {ADDX, "(DE-)" }, // c6: 0111 0000 1100 0110 - {ADDX, "(HL-)" }, // c7: 0111 0000 1100 0111 - { }, // c8: 0111 0000 1100 1000 - {ONAX, "(BC)" }, // c9: 0111 0000 1100 1001 - {ONAX, "(DE)" }, // ca: 0111 0000 1100 1010 - {ONAX, "(HL)" }, // cb: 0111 0000 1100 1011 - {ONAX, "(DE+)" }, // cc: 0111 0000 1100 1100 - {ONAX, "(HL+)" }, // cd: 0111 0000 1100 1101 - {ONAX, "(DE-)" }, // ce: 0111 0000 1100 1110 - {ONAX, "(HL-)" }, // cf: 0111 0000 1100 1111 - - { }, // d0: 0111 0000 1101 0000 - {ADCX, "(BC)" }, // d1: 0111 0000 1101 0001 - {ADCX, "(DE)" }, // d2: 0111 0000 1101 0010 - {ADCX, "(HL)" }, // d3: 0111 0000 1101 0011 - {ADCX, "(DE+)" }, // d4: 0111 0000 1101 0100 - {ADCX, "(HL+)" }, // d5: 0111 0000 1101 0101 - {ADCX, "(DE-)" }, // d6: 0111 0000 1101 0110 - {ADCX, "(HL-)" }, // d7: 0111 0000 1101 0111 - { }, // d8: 0111 0000 1101 1000 - {OFFAX, "(BC)" }, // d9: 0111 0000 1101 1001 - {OFFAX, "(DE)" }, // da: 0111 0000 1101 1010 - {OFFAX, "(HL)" }, // db: 0111 0000 1101 1011 - {OFFAX, "(DE+)" }, // dc: 0111 0000 1101 1100 - {OFFAX, "(HL+)" }, // dd: 0111 0000 1101 1101 - {OFFAX, "(DE-)" }, // de: 0111 0000 1101 1110 - {OFFAX, "(HL-)" }, // df: 0111 0000 1101 1111 - - { }, // e0: 0111 0000 1110 0000 - {SUBX, "(BC)" }, // e1: 0111 0000 1110 0001 - {SUBX, "(DE)" }, // e2: 0111 0000 1110 0010 - {SUBX, "(HL)" }, // e3: 0111 0000 1110 0011 - {SUBX, "(DE+)" }, // e4: 0111 0000 1110 0100 - {SUBX, "(HL+)" }, // e5: 0111 0000 1110 0101 - {SUBX, "(DE-)" }, // e6: 0111 0000 1110 0110 - {SUBX, "(HL-)" }, // e7: 0111 0000 1110 0111 - { }, // e8: 0111 0000 1110 1000 - {NEAX, "(BC)" }, // e9: 0111 0000 1110 1001 - {NEAX, "(DE)" }, // ea: 0111 0000 1110 1010 - {NEAX, "(HL)" }, // eb: 0111 0000 1110 1011 - {NEAX, "(DE+)" }, // ec: 0111 0000 1110 1100 - {NEAX, "(HL+)" }, // ed: 0111 0000 1110 1101 - {NEAX, "(DE-)" }, // ee: 0111 0000 1110 1110 - {NEAX, "(HL-)" }, // ef: 0111 0000 1110 1111 - - { }, // f0: 0111 0000 1111 0000 - {SBBX, "(BC)" }, // f1: 0111 0000 1111 0001 - {SBBX, "(DE)" }, // f2: 0111 0000 1111 0010 - {SBBX, "(HL)" }, // f3: 0111 0000 1111 0011 - {SBBX, "(DE+)" }, // f4: 0111 0000 1111 0100 - {SBBX, "(HL+)" }, // f5: 0111 0000 1111 0101 - {SBBX, "(DE-)" }, // f6: 0111 0000 1111 0110 - {SBBX, "(HL-)" }, // f7: 0111 0000 1111 0111 - { }, // f8: 0111 0000 1111 1000 - {EQAX, "(BC)" }, // f9: 0111 0000 1111 1001 - {EQAX, "(DE)" }, // fa: 0111 0000 1111 1010 - {EQAX, "(HL)" }, // fb: 0111 0000 1111 1011 - {EQAX, "(DE+)" }, // fc: 0111 0000 1111 1100 - {EQAX, "(HL+)" }, // fd: 0111 0000 1111 1101 - {EQAX, "(DE-)" }, // fe: 0111 0000 1111 1110 - {EQAX, "(HL-)" } // ff: 0111 0000 1111 1111 -}; - -// prefix 74 -const dasm_s dasm_s::d74[256] = -{ - { }, // 00: 0111 0100 0000 0000 - { }, // 01: 0111 0100 0000 0001 - { }, // 02: 0111 0100 0000 0010 - { }, // 03: 0111 0100 0000 0011 - { }, // 04: 0111 0100 0000 0100 - { }, // 05: 0111 0100 0000 0101 - { }, // 06: 0111 0100 0000 0110 - { }, // 07: 0111 0100 0000 0111 - {ANI, "V,%b" }, // 08: 0111 0100 0000 1000 xxxx xxxx - {ANI, "A,%b" }, // 09: 0111 0100 0000 1001 xxxx xxxx - {ANI, "B,%b" }, // 0a: 0111 0100 0000 1010 xxxx xxxx - {ANI, "C,%b" }, // 0b: 0111 0100 0000 1011 xxxx xxxx - {ANI, "D,%b" }, // 0c: 0111 0100 0000 1100 xxxx xxxx - {ANI, "E,%b" }, // 0d: 0111 0100 0000 1101 xxxx xxxx - {ANI, "H,%b" }, // 0e: 0111 0100 0000 1110 xxxx xxxx - {ANI, "L,%b" }, // 0f: 0111 0100 0000 1111 xxxx xxxx - - {XRI, "V,%b" }, // 10: 0111 0100 0001 0000 xxxx xxxx - {XRI, "A,%b" }, // 11: 0111 0100 0001 0001 xxxx xxxx - {XRI, "B,%b" }, // 12: 0111 0100 0001 0010 xxxx xxxx - {XRI, "C,%b" }, // 13: 0111 0100 0001 0011 xxxx xxxx - {XRI, "D,%b" }, // 14: 0111 0100 0001 0100 xxxx xxxx - {XRI, "E,%b" }, // 15: 0111 0100 0001 0101 xxxx xxxx - {XRI, "H,%b" }, // 16: 0111 0100 0001 0110 xxxx xxxx - {XRI, "L,%b" }, // 17: 0111 0100 0001 0111 xxxx xxxx - {ORI, "V,%b" }, // 18: 0111 0100 0001 1000 xxxx xxxx - {ORI, "A,%b" }, // 19: 0111 0100 0001 1001 xxxx xxxx - {ORI, "B,%b" }, // 1a: 0111 0100 0001 1010 xxxx xxxx - {ORI, "C,%b" }, // 1b: 0111 0100 0001 1011 xxxx xxxx - {ORI, "D,%b" }, // 1c: 0111 0100 0001 1100 xxxx xxxx - {ORI, "E,%b" }, // 1d: 0111 0100 0001 1101 xxxx xxxx - {ORI, "H,%b" }, // 1e: 0111 0100 0001 1110 xxxx xxxx - {ORI, "L,%b" }, // 1f: 0111 0100 0001 1111 xxxx xxxx - - {ADINC, "V,%b" }, // 20: 0111 0100 0010 0000 xxxx xxxx - {ADINC, "A,%b" }, // 21: 0111 0100 0010 0001 xxxx xxxx - {ADINC, "B,%b" }, // 22: 0111 0100 0010 0010 xxxx xxxx - {ADINC, "C,%b" }, // 23: 0111 0100 0010 0011 xxxx xxxx - {ADINC, "D,%b" }, // 24: 0111 0100 0010 0100 xxxx xxxx - {ADINC, "E,%b" }, // 25: 0111 0100 0010 0101 xxxx xxxx - {ADINC, "H,%b" }, // 26: 0111 0100 0010 0110 xxxx xxxx - {ADINC, "L,%b" }, // 27: 0111 0100 0010 0111 xxxx xxxx - {GTI, "V,%b" }, // 28: 0111 0100 0010 1000 xxxx xxxx - {GTI, "A,%b" }, // 29: 0111 0100 0010 1001 xxxx xxxx - {GTI, "B,%b" }, // 2a: 0111 0100 0010 1010 xxxx xxxx - {GTI, "C,%b" }, // 2b: 0111 0100 0010 1011 xxxx xxxx - {GTI, "D,%b" }, // 2c: 0111 0100 0010 1100 xxxx xxxx - {GTI, "E,%b" }, // 2d: 0111 0100 0010 1101 xxxx xxxx - {GTI, "H,%b" }, // 2e: 0111 0100 0010 1110 xxxx xxxx - {GTI, "L,%b" }, // 2f: 0111 0100 0010 1111 xxxx xxxx - - {SUINB, "V,%b" }, // 30: 0111 0100 0011 0000 xxxx xxxx - {SUINB, "A,%b" }, // 31: 0111 0100 0011 0001 xxxx xxxx - {SUINB, "B,%b" }, // 32: 0111 0100 0011 0010 xxxx xxxx - {SUINB, "C,%b" }, // 33: 0111 0100 0011 0011 xxxx xxxx - {SUINB, "D,%b" }, // 34: 0111 0100 0011 0100 xxxx xxxx - {SUINB, "E,%b" }, // 35: 0111 0100 0011 0101 xxxx xxxx - {SUINB, "H,%b" }, // 36: 0111 0100 0011 0110 xxxx xxxx - {SUINB, "L,%b" }, // 37: 0111 0100 0011 0111 xxxx xxxx - {LTI, "V,%b" }, // 37: 0111 0100 0011 1000 xxxx xxxx - {LTI, "A,%b" }, // 39: 0111 0100 0011 1001 xxxx xxxx - {LTI, "B,%b" }, // 3a: 0111 0100 0011 1010 xxxx xxxx - {LTI, "C,%b" }, // 3b: 0111 0100 0011 1011 xxxx xxxx - {LTI, "D,%b" }, // 3c: 0111 0100 0011 1100 xxxx xxxx - {LTI, "E,%b" }, // 3d: 0111 0100 0011 1101 xxxx xxxx - {LTI, "H,%b" }, // 3e: 0111 0100 0011 1110 xxxx xxxx - {LTI, "L,%b" }, // 3f: 0111 0100 0011 1111 xxxx xxxx - - {ADI, "V,%b" }, // 40: 0111 0100 0100 0000 xxxx xxxx - {ADI, "A,%b" }, // 41: 0111 0100 0100 0001 xxxx xxxx - {ADI, "B,%b" }, // 42: 0111 0100 0100 0010 xxxx xxxx - {ADI, "C,%b" }, // 43: 0111 0100 0100 0011 xxxx xxxx - {ADI, "D,%b" }, // 44: 0111 0100 0100 0100 xxxx xxxx - {ADI, "E,%b" }, // 45: 0111 0100 0100 0101 xxxx xxxx - {ADI, "H,%b" }, // 46: 0111 0100 0100 0110 xxxx xxxx - {ADI, "L,%b" }, // 47: 0111 0100 0100 0111 xxxx xxxx - {ONI, "V,%b" }, // 48: 0111 0100 0100 1000 xxxx xxxx - {ONI, "A,%b" }, // 49: 0111 0100 0100 1001 xxxx xxxx - {ONI, "B,%b" }, // 4a: 0111 0100 0100 1010 xxxx xxxx - {ONI, "C,%b" }, // 4b: 0111 0100 0100 1011 xxxx xxxx - {ONI, "D,%b" }, // 4c: 0111 0100 0100 1100 xxxx xxxx - {ONI, "E,%b" }, // 4d: 0111 0100 0100 1101 xxxx xxxx - {ONI, "H,%b" }, // 4e: 0111 0100 0100 1110 xxxx xxxx - {ONI, "L,%b" }, // 4f: 0111 0100 0100 1111 xxxx xxxx - - {ACI, "V,%b" }, // 50: 0111 0100 0101 0000 xxxx xxxx - {ACI, "A,%b" }, // 51: 0111 0100 0101 0001 xxxx xxxx - {ACI, "B,%b" }, // 52: 0111 0100 0101 0010 xxxx xxxx - {ACI, "C,%b" }, // 53: 0111 0100 0101 0011 xxxx xxxx - {ACI, "D,%b" }, // 54: 0111 0100 0101 0100 xxxx xxxx - {ACI, "E,%b" }, // 55: 0111 0100 0101 0101 xxxx xxxx - {ACI, "H,%b" }, // 56: 0111 0100 0101 0110 xxxx xxxx - {ACI, "L,%b" }, // 57: 0111 0100 0101 0111 xxxx xxxx - {OFFI, "V,%b" }, // 58: 0111 0100 0101 1000 xxxx xxxx - {OFFI, "A,%b" }, // 59: 0111 0100 0101 1001 xxxx xxxx - {OFFI, "B,%b" }, // 5a: 0111 0100 0101 1010 xxxx xxxx - {OFFI, "C,%b" }, // 5b: 0111 0100 0101 1011 xxxx xxxx - {OFFI, "D,%b" }, // 5c: 0111 0100 0101 1100 xxxx xxxx - {OFFI, "E,%b" }, // 5d: 0111 0100 0101 1101 xxxx xxxx - {OFFI, "H,%b" }, // 5e: 0111 0100 0101 1110 xxxx xxxx - {OFFI, "L,%b" }, // 5f: 0111 0100 0101 1111 xxxx xxxx - - {SUI, "V,%b" }, // 60: 0111 0100 0110 0000 xxxx xxxx - {SUI, "A,%b" }, // 61: 0111 0100 0110 0001 xxxx xxxx - {SUI, "B,%b" }, // 62: 0111 0100 0110 0010 xxxx xxxx - {SUI, "C,%b" }, // 63: 0111 0100 0110 0011 xxxx xxxx - {SUI, "D,%b" }, // 64: 0111 0100 0110 0100 xxxx xxxx - {SUI, "E,%b" }, // 65: 0111 0100 0110 0101 xxxx xxxx - {SUI, "H,%b" }, // 66: 0111 0100 0110 0110 xxxx xxxx - {SUI, "L,%b" }, // 67: 0111 0100 0110 0111 xxxx xxxx - {NEI, "V,%b" }, // 68: 0111 0100 0110 1000 xxxx xxxx - {NEI, "A,%b" }, // 69: 0111 0100 0110 1001 xxxx xxxx - {NEI, "B,%b" }, // 6a: 0111 0100 0110 1010 xxxx xxxx - {NEI, "C,%b" }, // 6b: 0111 0100 0110 1011 xxxx xxxx - {NEI, "D,%b" }, // 6c: 0111 0100 0110 1100 xxxx xxxx - {NEI, "E,%b" }, // 6d: 0111 0100 0110 1101 xxxx xxxx - {NEI, "H,%b" }, // 6e: 0111 0100 0110 1110 xxxx xxxx - {NEI, "L,%b" }, // 6f: 0111 0100 0110 1111 xxxx xxxx - - {SBI, "V,%b" }, // 70: 0111 0100 0111 0000 xxxx xxxx - {SBI, "A,%b" }, // 71: 0111 0100 0111 0001 xxxx xxxx - {SBI, "B,%b" }, // 72: 0111 0100 0111 0010 xxxx xxxx - {SBI, "C,%b" }, // 73: 0111 0100 0111 0011 xxxx xxxx - {SBI, "D,%b" }, // 74: 0111 0100 0111 0100 xxxx xxxx - {SBI, "E,%b" }, // 75: 0111 0100 0111 0101 xxxx xxxx - {SBI, "H,%b" }, // 76: 0111 0100 0111 0110 xxxx xxxx - {SBI, "L,%b" }, // 77: 0111 0100 0111 0111 xxxx xxxx - {EQI, "V,%b" }, // 78: 0111 0100 0111 1000 xxxx xxxx - {EQI, "A,%b" }, // 79: 0111 0100 0111 1001 xxxx xxxx - {EQI, "B,%b" }, // 7a: 0111 0100 0111 1010 xxxx xxxx - {EQI, "C,%b" }, // 7b: 0111 0100 0111 1011 xxxx xxxx - {EQI, "D,%b" }, // 7c: 0111 0100 0111 1100 xxxx xxxx - {EQI, "E,%b" }, // 7d: 0111 0100 0111 1101 xxxx xxxx - {EQI, "H,%b" }, // 7e: 0111 0100 0111 1110 xxxx xxxx - {EQI, "L,%b" }, // 7f: 0111 0100 0111 1111 xxxx xxxx - - { }, // 80: 0111 0100 1000 0000 - { }, // 81: 0111 0100 1000 0001 - { }, // 82: 0111 0100 1000 0010 - { }, // 83: 0111 0100 1000 0011 - { }, // 84: 0111 0100 1000 0100 - { }, // 85: 0111 0100 1000 0101 - { }, // 86: 0111 0100 1000 0110 - { }, // 87: 0111 0100 1000 0111 - {ANAW, "%a" }, // 88: 0111 0100 1000 1000 oooo oooo - { }, // 89: 0111 0100 1000 1001 - { }, // 8a: 0111 0100 1000 1010 - { }, // 8b: 0111 0100 1000 1011 - { }, // 8c: 0111 0100 1000 1100 - {DAN, "EA,BC" }, // 8d: 0111 0100 1000 1101 - {DAN, "EA,DE" }, // 8e: 0111 0100 1000 1110 - {DAN, "EA,HL" }, // 8f: 0111 0100 1000 1111 - - {XRAW, "%a" }, // 90: 0111 0100 1001 0000 oooo oooo - { }, // 91: 0111 0100 1001 0001 - { }, // 92: 0111 0100 1001 0010 - { }, // 93: 0111 0100 1001 0011 - { }, // 94: 0111 0100 1001 0100 - {DXR, "EA,BC" }, // 95: 0111 0100 1001 0101 - {DXR, "EA,DE" }, // 96: 0111 0100 1001 0110 - {DXR, "EA,HL" }, // 97: 0111 0100 1001 0111 - {ORAW, "%a" }, // 98: 0111 0100 1001 1000 oooo oooo - { }, // 99: 0111 0100 1001 1001 - { }, // 9a: 0111 0100 1001 1010 - { }, // 9b: 0111 0100 1001 1011 - { }, // 9c: 0111 0100 1001 1100 - {DOR, "EA,BC" }, // 9d: 0111 0100 1001 1101 - {DOR, "EA,DE" }, // 9e: 0111 0100 1001 1110 - {DOR, "EA,HL" }, // 9f: 0111 0100 1001 1111 - - {ADDNCW, "%a" }, // a0: 0111 0100 1010 0000 oooo oooo - { }, // a1: 0111 0100 1010 0001 - { }, // a2: 0111 0100 1010 0010 - { }, // a3: 0111 0100 1010 0011 - { }, // a4: 0111 0100 1010 0100 - {DADDNC, "EA,BC" }, // a5: 0111 0100 1010 0101 - {DADDNC, "EA,DE" }, // a6: 0111 0100 1010 0110 - {DADDNC, "EA,HL" }, // a7: 0111 0100 1010 0111 - {GTAW, "%a" }, // a8: 0111 0100 1010 1000 oooo oooo - { }, // a9: 0111 0100 1010 1001 - { }, // aa: 0111 0100 1010 1010 - { }, // ab: 0111 0100 1010 1011 - { }, // ac: 0111 0100 1010 1100 - {DGT, "EA,BC" }, // ad: 0111 0100 1010 1101 - {DGT, "EA,DE" }, // ae: 0111 0100 1010 1110 - {DGT, "EA,HL" }, // af: 0111 0100 1010 1111 - {SUBNBW, "%a" }, // b0: 0111 0100 1011 0000 oooo oooo - { }, // b1: 0111 0100 1011 0001 - { }, // b2: 0111 0100 1011 0010 - { }, // b3: 0111 0100 1011 0011 - { }, // b4: 0111 0100 1011 0100 - {DSUBNB, "EA,BC" }, // b5: 0111 0100 1011 0101 - {DSUBNB, "EA,DE" }, // b6: 0111 0100 1011 0110 - {DSUBNB, "EA,HL" }, // b7: 0111 0100 1011 0111 - {LTAW, "%a" }, // b8: 0111 0100 1011 1000 oooo oooo - { }, // b9: 0111 0100 1011 1001 - { }, // ba: 0111 0100 1011 1010 - { }, // bb: 0111 0100 1011 1011 - { }, // bc: 0111 0100 1011 1100 - {DLT, "EA,BC" }, // bd: 0111 0100 1011 1101 - {DLT, "EA,DE" }, // be: 0111 0100 1011 1110 - {DLT, "EA,HL" }, // bf: 0111 0100 1011 1111 - - {ADDW, "%a" }, // c0: 0111 0100 1100 0000 oooo oooo - { }, // c1: 0111 0100 1100 0001 - { }, // c2: 0111 0100 1100 0010 - { }, // c3: 0111 0100 1100 0011 - { }, // c4: 0111 0100 1100 0100 - {DADD, "EA,BC" }, // c5: 0111 0100 1100 0101 - {DADD, "EA,DE" }, // c6: 0111 0100 1100 0110 - {DADD, "EA,HL" }, // c7: 0111 0100 1100 0111 - {ONAW, "%a" }, // c8: 0111 0100 1100 1000 oooo oooo - { }, // c9: 0111 0100 1100 1001 - { }, // ca: 0111 0100 1100 1010 - { }, // cb: 0111 0100 1100 1011 - { }, // cc: 0111 0100 1100 1100 - {DON, "EA,BC" }, // cd: 0111 0100 1100 1101 - {DON, "EA,DE" }, // ce: 0111 0100 1100 1110 - {DON, "EA,HL" }, // cf: 0111 0100 1100 1111 - - {ADCW, "%a" }, // d0: 0111 0100 1101 0000 oooo oooo - { }, // d1: 0111 0100 1101 0001 - { }, // d2: 0111 0100 1101 0010 - { }, // d3: 0111 0100 1101 0011 - { }, // d4: 0111 0100 1101 0100 - {DADC, "EA,BC" }, // d5: 0111 0100 1101 0101 - {DADC, "EA,DE" }, // d6: 0111 0100 1101 0110 - {DADC, "EA,HL" }, // d7: 0111 0100 1101 0111 - {OFFAW, "%a" }, // d8: 0111 0100 1101 1000 oooo oooo - { }, // d9: 0111 0100 1101 1001 - { }, // da: 0111 0100 1101 1010 - { }, // db: 0111 0100 1101 1011 - { }, // dc: 0111 0100 1101 1100 - {DOFF, "EA,BC" }, // dd: 0111 0100 1101 1101 - {DOFF, "EA,DE" }, // de: 0111 0100 1101 1110 - {DOFF, "EA,HL" }, // df: 0111 0100 1101 1111 - - {SUBW, "%a" }, // e0: 0111 0100 1110 0000 oooo oooo - { }, // e1: 0111 0100 1110 0001 - { }, // e2: 0111 0100 1110 0010 - { }, // e3: 0111 0100 1110 0011 - { }, // e4: 0111 0100 1110 0100 - {DSUB, "EA,BC" }, // e5: 0111 0100 1110 0101 - {DSUB, "EA,DE" }, // e6: 0111 0100 1110 0110 - {DSUB, "EA,HL" }, // e7: 0111 0100 1110 0111 - {NEAW, "%a" }, // e8: 0111 0100 1110 1000 oooo oooo - { }, // e9: 0111 0100 1110 1001 - { }, // ea: 0111 0100 1110 1010 - { }, // eb: 0111 0100 1110 1011 - { }, // ec: 0111 0100 1110 1100 - {DNE, "EA,BC" }, // ed: 0111 0100 1110 1101 - {DNE, "EA,DE" }, // ee: 0111 0100 1110 1110 - {DNE, "EA,HL" }, // ef: 0111 0100 1110 1111 - - {SBBW, "%a" }, // f0: 0111 0100 1111 0000 oooo oooo - { }, // f1: 0111 0100 1111 0001 - { }, // f2: 0111 0100 1111 0010 - { }, // f3: 0111 0100 1111 0011 - { }, // f4: 0111 0100 1111 0100 - {DSBB, "EA,BC" }, // f5: 0111 0100 1111 0101 - {DSBB, "EA,DE" }, // f6: 0111 0100 1111 0110 - {DSBB, "EA,HL" }, // f7: 0111 0100 1111 0111 - {EQAW, "%a" }, // f8: 0111 0100 1111 1000 oooo oooo - { }, // f9: 0111 0100 1111 1001 - { }, // fa: 0111 0100 1111 1010 - { }, // fb: 0111 0100 1111 1011 - { }, // fc: 0111 0100 1111 1100 - {DEQ, "EA,BC" }, // fd: 0111 0100 1111 1101 - {DEQ, "EA,DE" }, // fe: 0111 0100 1111 1110 - {DEQ, "EA,HL" } // ff: 0111 0100 1111 1111 -}; // main opcodes -const dasm_s dasm_s::XX_7810[256] = +const upd7810_base_disassembler::dasm_s upd7810_disassembler::XX_7810[256] = { {NOP, nullptr }, // 00: 0000 0000 {LDAW, "%a" }, // 01: 0000 0001 oooo oooo @@ -3740,7 +2447,1107 @@ const dasm_s dasm_s::XX_7810[256] = {JR, "%o" } // ff: 11oo oooo }; -const dasm_s dasm_s::XX_7807[256] = +const upd7810_base_disassembler::dasm_s upd7807_disassembler::d48_7807[256] = +{ + { }, // 00: 0100 1000 0000 0000 + {SLRC, "A" }, // 01: 0100 1000 0000 0001 + {SLRC, "B" }, // 02: 0100 1000 0000 0010 + {SLRC, "C" }, // 03: 0100 1000 0000 0011 + { }, // 04: 0100 1000 0000 0100 + {SLLC, "A" }, // 05: 0100 1000 0000 0101 + {SLLC, "B" }, // 06: 0100 1000 0000 0110 + {SLLC, "C" }, // 07: 0100 1000 0000 0111 + {SK, "NV" }, // 08: 0100 1000 0000 1000 + { }, // 09: 0100 1000 0000 1001 + {SK, "CY" }, // 0a: 0100 1000 0000 1010 + {SK, "HC" }, // 0b: 0100 1000 0000 1011 + {SK, "Z" }, // 0c: 0100 1000 0000 1100 + { }, // 0d: 0100 1000 0000 1101 + { }, // 0e: 0100 1000 0000 1110 + { }, // 0f: 0100 1000 0000 1111 + + { }, // 10: 0100 1000 0001 0000 + { }, // 11: 0100 1000 0001 0001 + { }, // 12: 0100 1000 0001 0010 + { }, // 13: 0100 1000 0001 0011 + { }, // 14: 0100 1000 0001 0100 + { }, // 15: 0100 1000 0001 0101 + { }, // 16: 0100 1000 0001 0110 + { }, // 17: 0100 1000 0001 0111 + {SKN, "NV" }, // 18: 0100 1000 0001 1000 + { }, // 19: 0100 1000 0001 1001 + {SKN, "CY" }, // 1a: 0100 1000 0001 1010 + {SKN, "HC" }, // 1b: 0100 1000 0001 1011 + {SKN, "Z" }, // 1c: 0100 1000 0001 1100 + { }, // 1d: 0100 1000 0001 1101 + { }, // 1e: 0100 1000 0001 1110 + { }, // 1f: 0100 1000 0001 1111 + + { }, // 20: 0100 1000 0010 0000 + {SLR, "A" }, // 21: 0100 1000 0010 0001 + {SLR, "B" }, // 22: 0100 1000 0010 0010 + {SLR, "C" }, // 23: 0100 1000 0010 0011 + { }, // 24: 0100 1000 0010 0100 + {SLL, "A" }, // 25: 0100 1000 0010 0101 + {SLL, "B" }, // 26: 0100 1000 0010 0110 + {SLL, "C" }, // 27: 0100 1000 0010 0111 + {JEA, nullptr }, // 28: 0100 1000 0010 1000 + {CALB, nullptr }, // 29: 0100 1000 0010 1001 + {CLC, nullptr }, // 2a: 0100 1000 0010 1010 + {STC, nullptr }, // 2b: 0100 1000 0010 1011 + { }, // 2c: 0100 1000 0010 1100 + {MUL, "A" }, // 2d: 0100 1000 0010 1101 + {MUL, "B" }, // 2e: 0100 1000 0010 1110 + {MUL, "C" }, // 2f: 0100 1000 0010 1111 + + { }, // 30: 0100 1000 0011 0000 + {RLR, "A" }, // 31: 0100 1000 0011 0001 + {RLR, "B" }, // 32: 0100 1000 0011 0010 + {RLR, "C" }, // 33: 0100 1000 0011 0011 + { }, // 34: 0100 1000 0011 0100 + {RLL, "A" }, // 35: 0100 1000 0011 0101 + {RLL, "B" }, // 36: 0100 1000 0011 0110 + {RLL, "C" }, // 37: 0100 1000 0011 0111 + {RLD, nullptr }, // 38: 0100 1000 0011 1000 + {RRD, nullptr }, // 39: 0100 1000 0011 1001 + {NEGA, nullptr }, // 3a: 0100 1000 0011 1010 + {HALT, nullptr }, // 3b: 0100 1000 0011 1011 + { }, // 3c: 0100 1000 0011 1100 + {DIV, "A" }, // 3d: 0100 1000 0011 1101 + {DIV, "B" }, // 3e: 0100 1000 0011 1110 + {DIV, "C" }, // 3f: 0100 1000 0011 1111 + + {SKIT, "NMI" }, // 40: 0100 1000 0100 0000 + {SKIT, "FT0" }, // 41: 0100 1000 0100 0001 + {SKIT, "FT1" }, // 42: 0100 1000 0100 0010 + {SKIT, "F1" }, // 43: 0100 1000 0100 0011 + {SKIT, "F2" }, // 44: 0100 1000 0100 0100 + {SKIT, "FE0" }, // 45: 0100 1000 0100 0101 + {SKIT, "FE1" }, // 46: 0100 1000 0100 0110 + {SKIT, "FEIN" }, // 47: 0100 1000 0100 0111 + {SKIT, "FAD" }, // 48: 0100 1000 0100 1000 + {SKIT, "FSR" }, // 49: 0100 1000 0100 1001 + {SKIT, "FST" }, // 4a: 0100 1000 0100 1010 + {SKIT, "ER" }, // 4b: 0100 1000 0100 1011 + {SKIT, "OV" }, // 4c: 0100 1000 0100 1100 + { }, // 4d: 0100 1000 0100 1101 + { }, // 4e: 0100 1000 0100 1110 + { }, // 4f: 0100 1000 0100 1111 + + {SKIT, "AN4" }, // 50: 0100 1000 0101 0000 + {SKIT, "AN5" }, // 51: 0100 1000 0101 0001 + {SKIT, "AN6" }, // 52: 0100 1000 0101 0010 + {SKIT, "AN7" }, // 53: 0100 1000 0101 0011 + {SKIT, "SB" }, // 54: 0100 1000 0101 0100 + { }, // 55: 0100 1000 0101 0101 + { }, // 56: 0100 1000 0101 0110 + { }, // 57: 0100 1000 0101 0111 + { }, // 58: 0100 1000 0101 1000 + { }, // 59: 0100 1000 0101 1001 + { }, // 5a: 0100 1000 0101 1010 + { }, // 5b: 0100 1000 0101 1011 + { }, // 5c: 0100 1000 0101 1100 + { }, // 5d: 0100 1000 0101 1101 + { }, // 5e: 0100 1000 0101 1110 + { }, // 5f: 0100 1000 0101 1111 + + {SKNIT, "NMI" }, // 60: 0100 1000 0110 0000 + {SKNIT, "FT0" }, // 61: 0100 1000 0110 0001 + {SKNIT, "FT1" }, // 62: 0100 1000 0110 0010 + {SKNIT, "F1" }, // 63: 0100 1000 0110 0011 + {SKNIT, "F2" }, // 64: 0100 1000 0110 0100 + {SKNIT, "FE0" }, // 65: 0100 1000 0110 0101 + {SKNIT, "FE1" }, // 66: 0100 1000 0110 0110 + {SKNIT, "FEIN" }, // 67: 0100 1000 0110 0111 + {SKNIT, "FAD" }, // 68: 0100 1000 0110 1000 + {SKNIT, "FSR" }, // 69: 0100 1000 0110 1001 + {SKNIT, "FST" }, // 6a: 0100 1000 0110 1010 + {SKNIT, "ER" }, // 6b: 0100 1000 0110 1011 + {SKNIT, "OV" }, // 6c: 0100 1000 0110 1100 + { }, // 6d: 0100 1000 0110 1101 + { }, // 6e: 0100 1000 0110 1110 + { }, // 6f: 0100 1000 0110 1111 + + {SKNIT, "AN4" }, // 70: 0100 1000 0111 0000 + {SKNIT, "AN5" }, // 71: 0100 1000 0111 0001 + {SKNIT, "AN6" }, // 72: 0100 1000 0111 0010 + {SKNIT, "AN7" }, // 73: 0100 1000 0111 0011 + {SKNIT, "SB" }, // 74: 0100 1000 0111 0100 + { }, // 75: 0100 1000 0111 0101 + { }, // 76: 0100 1000 0111 0110 + { }, // 77: 0100 1000 0111 0111 + { }, // 78: 0100 1000 0111 1000 + { }, // 79: 0100 1000 0111 1001 + { }, // 7a: 0100 1000 0111 1010 + { }, // 7b: 0100 1000 0111 1011 + { }, // 7c: 0100 1000 0111 1100 + { }, // 7d: 0100 1000 0111 1101 + { }, // 7e: 0100 1000 0111 1110 + { }, // 7f: 0100 1000 0111 1111 + + { }, // 80: 0100 1000 1000 0000 + { }, // 81: 0100 1000 1000 0001 + {LDEAX, "(DE)" }, // 82: 0100 1000 1000 0010 + {LDEAX, "(HL)" }, // 83: 0100 1000 1000 0011 + {LDEAX, "(DE++)" }, // 84: 0100 1000 1000 0100 + {LDEAX, "(HL++)" }, // 85: 0100 1000 1000 0101 + { }, // 86: 0100 1000 1000 0110 + { }, // 87: 0100 1000 1000 0111 + { }, // 88: 0100 1000 1000 1000 + { }, // 89: 0100 1000 1000 1001 + { }, // 8a: 0100 1000 1000 1010 + {LDEAX, "(DE+%b)" }, // 8b: 0100 1000 1000 1011 xxxx xxxx + {LDEAX, "(HL+A)" }, // 8c: 0100 1000 1000 1100 + {LDEAX, "(HL+B)" }, // 8d: 0100 1000 1000 1101 + {LDEAX, "(HL+EA)" }, // 8e: 0100 1000 1000 1110 + {LDEAX, "(HL+%b)" }, // 8f: 0100 1000 1000 1111 xxxx xxxx + + { }, // 90: 0100 1000 1000 0000 + { }, // 91: 0100 1000 1000 0001 + {STEAX, "(DE)" }, // 92: 0100 1000 1000 0010 + {STEAX, "(HL)" }, // 93: 0100 1000 1000 0011 + {STEAX, "(DE++)" }, // 94: 0100 1000 1000 0100 + {STEAX, "(HL++)" }, // 95: 0100 1000 1000 0101 + { }, // 96: 0100 1000 1000 0110 + { }, // 97: 0100 1000 1000 0111 + { }, // 98: 0100 1000 1000 1000 + { }, // 99: 0100 1000 1000 1001 + { }, // 9a: 0100 1000 1000 1010 + {STEAX, "(DE+%b)" }, // 9b: 0100 1000 1000 1011 xxxx xxxx + {STEAX, "(HL+A)" }, // 9c: 0100 1000 1000 1100 + {STEAX, "(HL+B)" }, // 9d: 0100 1000 1000 1101 + {STEAX, "(HL+EA)" }, // 9e: 0100 1000 1000 1110 + {STEAX, "(HL+%b)" }, // 9f: 0100 1000 1000 1111 xxxx xxxx + + {DSLR, "EA" }, // a0: 0100 1000 1010 0000 + { }, // a1: 0100 1000 1010 0001 + { }, // a2: 0100 1000 1010 0010 + { }, // a3: 0100 1000 1010 0011 + {DSLL, "EA" }, // a4: 0100 1000 1010 0100 + { }, // a5: 0100 1000 1010 0101 + { }, // a6: 0100 1000 1010 0110 + { }, // a7: 0100 1000 1010 0111 + {TABLE, nullptr }, // a8: 0100 1000 1010 1000 + { }, // a9: 0100 1000 1010 1001 + {CMC, nullptr }, // aa: 0100 1000 1010 1010 7807 + { }, // ab: 0100 1000 1010 1011 + {EXA, nullptr }, // ac: 0100 1000 1010 1100 7807 + {EXR, nullptr }, // ad: 0100 1000 1010 1101 7807 + {EXH, nullptr }, // ae: 0100 1000 1010 1110 7807 + {EXX, nullptr }, // af: 0100 1000 1010 1111 7807 + + {DRLR, "EA" }, // b0: 0100 1000 1011 0000 + { }, // b1: 0100 1000 1011 0001 + { }, // b2: 0100 1000 1011 0010 + { }, // b3: 0100 1000 1011 0011 + {DRLL, "EA" }, // b4: 0100 1000 1011 0100 + { }, // b5: 0100 1000 1011 0101 + { }, // b6: 0100 1000 1011 0110 + { }, // b7: 0100 1000 1011 0111 + { }, // b8: 0100 1000 1011 1000 + { }, // b9: 0100 1000 1011 1001 + { }, // ba: 0100 1000 1011 1010 + { }, // bb: 0100 1000 1011 1011 + { }, // bc: 0100 1000 1011 1100 + { }, // bd: 0100 1000 1011 1101 + { }, // be: 0100 1000 1011 1110 + { }, // bf: 0100 1000 1011 1111 + + {DMOV, "EA,ECNT" }, // c0: 0100 1000 1100 0000 + {DMOV, "EA,ECPT0"}, // c1: 0100 1000 1100 0001 7807 + {DMOV, "EA,ECPT1"}, // c2: 0100 1000 1100 0010 7807 + { }, // c3: 0100 1000 1100 0011 + { }, // c4: 0100 1000 1100 0100 + { }, // c5: 0100 1000 1100 0101 + { }, // c6: 0100 1000 1100 0110 + { }, // c7: 0100 1000 1100 0111 + { }, // c8: 0100 1000 1100 1000 + { }, // c9: 0100 1000 1100 1001 + { }, // ca: 0100 1000 1100 1010 + { }, // cb: 0100 1000 1100 1011 + { }, // cc: 0100 1000 1100 1100 + { }, // cd: 0100 1000 1100 1101 + { }, // ce: 0100 1000 1100 1110 + { }, // cf: 0100 1000 1100 1111 + + { }, // d0: 0100 1000 1101 0000 + { }, // d1: 0100 1000 1101 0001 + {DMOV, "ETM0,EA" }, // d2: 0100 1000 1101 0010 + {DMOV, "ETM1,EA" }, // d3: 0100 1000 1101 0011 + { }, // d4: 0100 1000 1101 0100 + { }, // d5: 0100 1000 1101 0101 + { }, // d6: 0100 1000 1101 0110 + { }, // d7: 0100 1000 1101 0111 + { }, // d8: 0100 1000 1101 1000 + { }, // d9: 0100 1000 1101 1001 + { }, // da: 0100 1000 1101 1010 + { }, // db: 0100 1000 1101 1011 + { }, // dc: 0100 1000 1101 1100 + { }, // dd: 0100 1000 1101 1101 + { }, // de: 0100 1000 1101 1110 + { }, // df: 0100 1000 1101 1111 + + { }, // e0: 0100 1000 1110 0000 + { }, // e1: 0100 1000 1110 0001 + { }, // e2: 0100 1000 1110 0010 + { }, // e3: 0100 1000 1110 0011 + { }, // e4: 0100 1000 1110 0100 + { }, // e5: 0100 1000 1110 0101 + { }, // e6: 0100 1000 1110 0110 + { }, // e7: 0100 1000 1110 0111 + { }, // e8: 0100 1000 1110 1000 + { }, // e9: 0100 1000 1110 1001 + { }, // ea: 0100 1000 1110 1010 + { }, // eb: 0100 1000 1110 1011 + { }, // ec: 0100 1000 1110 1100 + { }, // ed: 0100 1000 1110 1101 + { }, // ee: 0100 1000 1110 1110 + { }, // ef: 0100 1000 1110 1111 + + { }, // f0: 0100 1000 1111 0000 + { }, // f1: 0100 1000 1111 0001 + { }, // f2: 0100 1000 1111 0010 + { }, // f3: 0100 1000 1111 0011 + { }, // f4: 0100 1000 1111 0100 + { }, // f5: 0100 1000 1111 0101 + { }, // f6: 0100 1000 1111 0110 + { }, // f7: 0100 1000 1111 0111 + { }, // f8: 0100 1000 1111 1000 + { }, // f9: 0100 1000 1111 1001 + { }, // fa: 0100 1000 1111 1010 + { }, // fb: 0100 1000 1111 1011 + { }, // fc: 0100 1000 1111 1100 + { }, // fd: 0100 1000 1111 1101 + { }, // fe: 0100 1000 1111 1110 + { } // ff: 0100 1000 1111 1111 +}; + +const upd7810_base_disassembler::dasm_s upd7807_disassembler::d4C_7807[256] = +{ + { }, // 00: 0100 1100 0000 0000 + { }, // 01: 0100 1100 0000 0001 + { }, // 02: 0100 1100 0000 0010 + { }, // 03: 0100 1100 0000 0011 + { }, // 04: 0100 1100 0000 0100 + { }, // 05: 0100 1100 0000 0101 + { }, // 06: 0100 1100 0000 0110 + { }, // 07: 0100 1100 0000 0111 + { }, // 08: 0100 1100 0000 1000 + { }, // 09: 0100 1100 0000 1001 + { }, // 0a: 0100 1100 0000 1010 + { }, // 0b: 0100 1100 0000 1011 + { }, // 0c: 0100 1100 0000 1100 + { }, // 0d: 0100 1100 0000 1101 + { }, // 0e: 0100 1100 0000 1110 + { }, // 0f: 0100 1100 0000 1111 + + { }, // 10: 0100 1100 0001 0000 + { }, // 11: 0100 1100 0001 0001 + { }, // 12: 0100 1100 0001 0010 + { }, // 13: 0100 1100 0001 0011 + { }, // 14: 0100 1100 0001 0100 + { }, // 15: 0100 1100 0001 0101 + { }, // 16: 0100 1100 0001 0110 + { }, // 17: 0100 1100 0001 0111 + { }, // 18: 0100 1100 0001 1000 + { }, // 19: 0100 1100 0001 1001 + { }, // 1a: 0100 1100 0001 1010 + { }, // 1b: 0100 1100 0001 1011 + { }, // 1c: 0100 1100 0001 1100 + { }, // 1d: 0100 1100 0001 1101 + { }, // 1e: 0100 1100 0001 1110 + { }, // 1f: 0100 1100 0001 1111 + + { }, // 20: 0100 1100 0010 0000 + { }, // 21: 0100 1100 0010 0001 + { }, // 22: 0100 1100 0010 0010 + { }, // 23: 0100 1100 0010 0011 + { }, // 24: 0100 1100 0010 0100 + { }, // 25: 0100 1100 0010 0101 + { }, // 26: 0100 1100 0010 0110 + { }, // 27: 0100 1100 0010 0111 + { }, // 28: 0100 1100 0010 1000 + { }, // 29: 0100 1100 0010 1001 + { }, // 2a: 0100 1100 0010 1010 + { }, // 2b: 0100 1100 0010 1011 + { }, // 2c: 0100 1100 0010 1100 + { }, // 2d: 0100 1100 0010 1101 + { }, // 2e: 0100 1100 0010 1110 + { }, // 2f: 0100 1100 0010 1111 + + { }, // 30: 0100 1100 0011 0000 + { }, // 31: 0100 1100 0011 0001 + { }, // 32: 0100 1100 0011 0010 + { }, // 33: 0100 1100 0011 0011 + { }, // 34: 0100 1100 0011 0100 + { }, // 35: 0100 1100 0011 0101 + { }, // 36: 0100 1100 0011 0110 + { }, // 37: 0100 1100 0011 0111 + { }, // 38: 0100 1100 0011 1000 + { }, // 39: 0100 1100 0011 1001 + { }, // 3a: 0100 1100 0011 1010 + { }, // 3b: 0100 1100 0011 1011 + { }, // 3c: 0100 1100 0011 1100 + { }, // 3d: 0100 1100 0011 1101 + { }, // 3e: 0100 1100 0011 1110 + { }, // 3f: 0100 1100 0011 1111 + + { }, // 40: 0100 1100 0100 0000 + { }, // 41: 0100 1100 0100 0001 + { }, // 42: 0100 1100 0100 0010 + { }, // 43: 0100 1100 0100 0011 + { }, // 44: 0100 1100 0100 0100 + { }, // 45: 0100 1100 0100 0101 + { }, // 46: 0100 1100 0100 0110 + { }, // 47: 0100 1100 0100 0111 + { }, // 48: 0100 1100 0100 1000 + { }, // 49: 0100 1100 0100 1001 + { }, // 4a: 0100 1100 0100 1010 + { }, // 4b: 0100 1100 0100 1011 + { }, // 4c: 0100 1100 0100 1100 + { }, // 4d: 0100 1100 0100 1101 + { }, // 4e: 0100 1100 0100 1110 + { }, // 4f: 0100 1100 0100 1111 + + { }, // 50: 0100 1100 0101 0000 + { }, // 51: 0100 1100 0101 0001 + { }, // 52: 0100 1100 0101 0010 + { }, // 53: 0100 1100 0101 0011 + { }, // 54: 0100 1100 0101 0100 + { }, // 55: 0100 1100 0101 0101 + { }, // 56: 0100 1100 0101 0110 + { }, // 57: 0100 1100 0101 0111 + { }, // 58: 0100 1100 0101 1000 + { }, // 59: 0100 1100 0101 1001 + { }, // 5a: 0100 1100 0101 1010 + { }, // 5b: 0100 1100 0101 1011 + { }, // 5c: 0100 1100 0101 1100 + { }, // 5d: 0100 1100 0101 1101 + { }, // 5e: 0100 1100 0101 1110 + { }, // 5f: 0100 1100 0101 1111 + + { }, // 60: 0100 1100 0110 0000 + { }, // 61: 0100 1100 0110 0001 + { }, // 62: 0100 1100 0110 0010 + { }, // 63: 0100 1100 0110 0011 + { }, // 64: 0100 1100 0110 0100 + { }, // 65: 0100 1100 0110 0101 + { }, // 66: 0100 1100 0110 0110 + { }, // 67: 0100 1100 0110 0111 + { }, // 68: 0100 1100 0110 1000 + { }, // 69: 0100 1100 0110 1001 + { }, // 6a: 0100 1100 0110 1010 + { }, // 6b: 0100 1100 0110 1011 + { }, // 6c: 0100 1100 0110 1100 + { }, // 6d: 0100 1100 0110 1101 + { }, // 6e: 0100 1100 0110 1110 + { }, // 6f: 0100 1100 0110 1111 + + { }, // 70: 0100 1100 0111 0000 + { }, // 71: 0100 1100 0111 0001 + { }, // 72: 0100 1100 0111 0010 + { }, // 73: 0100 1100 0111 0011 + { }, // 74: 0100 1100 0111 0100 + { }, // 75: 0100 1100 0111 0101 + { }, // 76: 0100 1100 0111 0110 + { }, // 77: 0100 1100 0111 0111 + { }, // 78: 0100 1100 0111 1000 + { }, // 79: 0100 1100 0111 1001 + { }, // 7a: 0100 1100 0111 1010 + { }, // 7b: 0100 1100 0111 1011 + { }, // 7c: 0100 1100 0111 1100 + { }, // 7d: 0100 1100 0111 1101 + { }, // 7e: 0100 1100 0111 1110 + { }, // 7f: 0100 1100 0111 1111 + + { }, // 80: 0100 1100 1000 0000 + { }, // 81: 0100 1100 1000 0001 + { }, // 82: 0100 1100 1000 0010 + { }, // 83: 0100 1100 1000 0011 + { }, // 84: 0100 1100 1000 0100 + { }, // 85: 0100 1100 1000 0101 + { }, // 86: 0100 1100 1000 0110 + { }, // 87: 0100 1100 1000 0111 + { }, // 88: 0100 1100 1000 1000 + { }, // 89: 0100 1100 1000 1001 + { }, // 8a: 0100 1100 1000 1010 + { }, // 8b: 0100 1100 1000 1011 + { }, // 8c: 0100 1100 1000 1100 + { }, // 8d: 0100 1100 1000 1101 + { }, // 8e: 0100 1100 1000 1110 + { }, // 8f: 0100 1100 1000 1111 + + { }, // 90: 0100 1100 1001 0000 + { }, // 91: 0100 1100 1001 0001 + { }, // 92: 0100 1100 1001 0010 + { }, // 93: 0100 1100 1001 0011 + { }, // 94: 0100 1100 1001 0100 + { }, // 95: 0100 1100 1001 0101 + { }, // 96: 0100 1100 1001 0110 + { }, // 97: 0100 1100 1001 0111 + { }, // 98: 0100 1100 1001 1000 + { }, // 99: 0100 1100 1001 1001 + { }, // 9a: 0100 1100 1001 1010 + { }, // 9b: 0100 1100 1001 1011 + { }, // 9c: 0100 1100 1001 1100 + { }, // 9d: 0100 1100 1001 1101 + { }, // 9e: 0100 1100 1001 1110 + { }, // 9f: 0100 1100 1001 1111 + + { }, // a0: 0100 1100 1010 0000 + { }, // a1: 0100 1100 1010 0001 + { }, // a2: 0100 1100 1010 0010 + { }, // a3: 0100 1100 1010 0011 + { }, // a4: 0100 1100 1010 0100 + { }, // a5: 0100 1100 1010 0101 + { }, // a6: 0100 1100 1010 0110 + { }, // a7: 0100 1100 1010 0111 + { }, // a8: 0100 1100 1010 1000 + { }, // a9: 0100 1100 1010 1001 + { }, // aa: 0100 1100 1010 1010 + { }, // ab: 0100 1100 1010 1011 + { }, // ac: 0100 1100 1010 1100 + { }, // ad: 0100 1100 1010 1101 + { }, // ae: 0100 1100 1010 1110 + { }, // af: 0100 1100 1010 1111 + + { }, // b0: 0100 1100 1011 0000 + { }, // b1: 0100 1100 1011 0001 + { }, // b2: 0100 1100 1011 0010 + { }, // b3: 0100 1100 1011 0011 + { }, // b4: 0100 1100 1011 0100 + { }, // b5: 0100 1100 1011 0101 + { }, // b6: 0100 1100 1011 0110 + { }, // b7: 0100 1100 1011 0111 + { }, // b8: 0100 1100 1011 1000 + { }, // b9: 0100 1100 1011 1001 + { }, // ba: 0100 1100 1011 1010 + { }, // bb: 0100 1100 1011 1011 + { }, // bc: 0100 1100 1011 1100 + { }, // bd: 0100 1100 1011 1101 + { }, // be: 0100 1100 1011 1110 + { }, // bf: 0100 1100 1011 1111 + + {MOV, "A,PA" }, // c0: 0100 1100 1100 0000 + {MOV, "A,PB" }, // c1: 0100 1100 1100 0001 + {MOV, "A,PC" }, // c2: 0100 1100 1100 0010 + {MOV, "A,PD" }, // c3: 0100 1100 1100 0011 + { }, // c4: 0100 1100 1100 0100 + {MOV, "A,PF" }, // c5: 0100 1100 1100 0101 + {MOV, "A,MKH" }, // c6: 0100 1100 1100 0110 + {MOV, "A,MKL" }, // c7: 0100 1100 1100 0111 + { }, // c8: 0100 1100 1100 1000 + {MOV, "A,SMH" }, // c9: 0100 1100 1100 1001 + { }, // ca: 0100 1100 1100 1010 + {MOV, "A,EOM" }, // cb: 0100 1100 1100 1011 + { }, // cc: 0100 1100 1100 1100 + {MOV, "A,TMM" }, // cd: 0100 1100 1100 1101 + {MOV, "A,PT" }, // ce: 0100 1100 1100 1110 7807 + { }, // cf: 0100 1100 1100 1111 + + { }, // d0: 0100 1100 1101 0000 + { }, // d1: 0100 1100 1101 0001 + { }, // d2: 0100 1100 1101 0010 + { }, // d3: 0100 1100 1101 0011 + { }, // d4: 0100 1100 1101 0100 + { }, // d5: 0100 1100 1101 0101 + { }, // d6: 0100 1100 1101 0110 + { }, // d7: 0100 1100 1101 0111 + { }, // d8: 0100 1100 1101 1000 + {MOV, "A,RXB" }, // d9: 0100 1100 1101 1001 + { }, // da: 0100 1100 1101 1010 + { }, // db: 0100 1100 1101 1011 + { }, // dc: 0100 1100 1101 1100 + { }, // dd: 0100 1100 1101 1101 + { }, // de: 0100 1100 1101 1110 + { }, // df: 0100 1100 1101 1111 + + { }, // e0: 0100 1100 1110 0000 + { }, // e1: 0100 1100 1110 0001 + { }, // e2: 0100 1100 1110 0010 + { }, // e3: 0100 1100 1110 0011 + { }, // e4: 0100 1100 1110 0100 + { }, // e5: 0100 1100 1110 0101 + { }, // e6: 0100 1100 1110 0110 + { }, // e7: 0100 1100 1110 0111 + { }, // e8: 0100 1100 1110 1000 + { }, // e9: 0100 1100 1110 1001 + { }, // ea: 0100 1100 1110 1010 + { }, // eb: 0100 1100 1110 1011 + { }, // ec: 0100 1100 1110 1100 + { }, // ed: 0100 1100 1110 1101 + { }, // ee: 0100 1100 1110 1110 + { }, // ef: 0100 1100 1110 1111 + + { }, // f0: 0100 1100 1111 0000 + { }, // f1: 0100 1100 1111 0001 + { }, // f2: 0100 1100 1111 0010 + { }, // f3: 0100 1100 1111 0011 + { }, // f4: 0100 1100 1111 0100 + { }, // f5: 0100 1100 1111 0101 + { }, // f6: 0100 1100 1111 0110 + { }, // f7: 0100 1100 1111 0111 + { }, // f8: 0100 1100 1111 1000 + { }, // f9: 0100 1100 1111 1001 + { }, // fa: 0100 1100 1111 1010 + { }, // fb: 0100 1100 1111 1011 + { }, // fc: 0100 1100 1111 1100 + { }, // fd: 0100 1100 1111 1101 + { }, // fe: 0100 1100 1111 1110 + { } // ff: 0100 1100 1111 1111 +}; + +const upd7810_base_disassembler::dasm_s upd7807_disassembler::d4D_7807[256] = +{ + { }, // 00: 0100 1101 0000 0000 + { }, // 01: 0100 1101 0000 0001 + { }, // 02: 0100 1101 0000 0010 + { }, // 03: 0100 1101 0000 0011 + { }, // 04: 0100 1101 0000 0100 + { }, // 05: 0100 1101 0000 0101 + { }, // 06: 0100 1101 0000 0110 + { }, // 07: 0100 1101 0000 0111 + { }, // 08: 0100 1101 0000 1000 + { }, // 09: 0100 1101 0000 1001 + { }, // 0a: 0100 1101 0000 1010 + { }, // 0b: 0100 1101 0000 1011 + { }, // 0c: 0100 1101 0000 1100 + { }, // 0d: 0100 1101 0000 1101 + { }, // 0e: 0100 1101 0000 1110 + { }, // 0f: 0100 1101 0000 1111 + + { }, // 10: 0100 1101 0001 0000 + { }, // 11: 0100 1101 0001 0001 + { }, // 12: 0100 1101 0001 0010 + { }, // 13: 0100 1101 0001 0011 + { }, // 14: 0100 1101 0001 0100 + { }, // 15: 0100 1101 0001 0101 + { }, // 16: 0100 1101 0001 0110 + { }, // 17: 0100 1101 0001 0111 + { }, // 18: 0100 1101 0001 1000 + { }, // 19: 0100 1101 0001 1001 + { }, // 1a: 0100 1101 0001 1010 + { }, // 1b: 0100 1101 0001 1011 + { }, // 1c: 0100 1101 0001 1100 + { }, // 1d: 0100 1101 0001 1101 + { }, // 1e: 0100 1101 0001 1110 + { }, // 1f: 0100 1101 0001 1111 + + { }, // 20: 0100 1101 0010 0000 + { }, // 21: 0100 1101 0010 0001 + { }, // 22: 0100 1101 0010 0010 + { }, // 23: 0100 1101 0010 0011 + { }, // 24: 0100 1101 0010 0100 + { }, // 25: 0100 1101 0010 0101 + { }, // 26: 0100 1101 0010 0110 + { }, // 27: 0100 1101 0010 0111 + { }, // 28: 0100 1101 0010 1000 + { }, // 29: 0100 1101 0010 1001 + { }, // 2a: 0100 1101 0010 1010 + { }, // 2b: 0100 1101 0010 1011 + { }, // 2c: 0100 1101 0010 1100 + { }, // 2d: 0100 1101 0010 1101 + { }, // 2e: 0100 1101 0010 1110 + { }, // 2f: 0100 1101 0010 1111 + + { }, // 30: 0100 1101 0011 0000 + { }, // 31: 0100 1101 0011 0001 + { }, // 32: 0100 1101 0011 0010 + { }, // 33: 0100 1101 0011 0011 + { }, // 34: 0100 1101 0011 0100 + { }, // 35: 0100 1101 0011 0101 + { }, // 36: 0100 1101 0011 0110 + { }, // 37: 0100 1101 0011 0111 + { }, // 38: 0100 1101 0011 1000 + { }, // 39: 0100 1101 0011 1001 + { }, // 3a: 0100 1101 0011 1010 + { }, // 3b: 0100 1101 0011 1011 + { }, // 3c: 0100 1101 0011 1100 + { }, // 3d: 0100 1101 0011 1101 + { }, // 3e: 0100 1101 0011 1110 + { }, // 3f: 0100 1101 0011 1111 + + { }, // 40: 0100 1101 0100 0000 + { }, // 41: 0100 1101 0100 0001 + { }, // 42: 0100 1101 0100 0010 + { }, // 43: 0100 1101 0100 0011 + { }, // 44: 0100 1101 0100 0100 + { }, // 45: 0100 1101 0100 0101 + { }, // 46: 0100 1101 0100 0110 + { }, // 47: 0100 1101 0100 0111 + { }, // 48: 0100 1101 0100 1000 + { }, // 49: 0100 1101 0100 1001 + { }, // 4a: 0100 1101 0100 1010 + { }, // 4b: 0100 1101 0100 1011 + { }, // 4c: 0100 1101 0100 1100 + { }, // 4d: 0100 1101 0100 1101 + { }, // 4e: 0100 1101 0100 1110 + { }, // 4f: 0100 1101 0100 1111 + + { }, // 50: 0100 1101 0101 0000 + { }, // 51: 0100 1101 0101 0001 + { }, // 52: 0100 1101 0101 0010 + { }, // 53: 0100 1101 0101 0011 + { }, // 54: 0100 1101 0101 0100 + { }, // 55: 0100 1101 0101 0101 + { }, // 56: 0100 1101 0101 0110 + { }, // 57: 0100 1101 0101 0111 + { }, // 58: 0100 1101 0101 1000 + { }, // 59: 0100 1101 0101 1001 + { }, // 5a: 0100 1101 0101 1010 + { }, // 5b: 0100 1101 0101 1011 + { }, // 5c: 0100 1101 0101 1100 + { }, // 5d: 0100 1101 0101 1101 + { }, // 5e: 0100 1101 0101 1110 + { }, // 5f: 0100 1101 0101 1111 + + { }, // 60: 0100 1101 0110 0000 + { }, // 61: 0100 1101 0110 0001 + { }, // 62: 0100 1101 0110 0010 + { }, // 63: 0100 1101 0110 0011 + { }, // 64: 0100 1101 0110 0100 + { }, // 65: 0100 1101 0110 0101 + { }, // 66: 0100 1101 0110 0110 + { }, // 67: 0100 1101 0110 0111 + { }, // 68: 0100 1101 0110 1000 + { }, // 69: 0100 1101 0110 1001 + { }, // 6a: 0100 1101 0110 1010 + { }, // 6b: 0100 1101 0110 1011 + { }, // 6c: 0100 1101 0110 1100 + { }, // 6d: 0100 1101 0110 1101 + { }, // 6e: 0100 1101 0110 1110 + { }, // 6f: 0100 1101 0110 1111 + + { }, // 70: 0100 1101 0111 0000 + { }, // 71: 0100 1101 0111 0001 + { }, // 72: 0100 1101 0111 0010 + { }, // 73: 0100 1101 0111 0011 + { }, // 74: 0100 1101 0111 0100 + { }, // 75: 0100 1101 0111 0101 + { }, // 76: 0100 1101 0111 0110 + { }, // 77: 0100 1101 0111 0111 + { }, // 78: 0100 1101 0111 1000 + { }, // 79: 0100 1101 0111 1001 + { }, // 7a: 0100 1101 0111 1010 + { }, // 7b: 0100 1101 0111 1011 + { }, // 7c: 0100 1101 0111 1100 + { }, // 7d: 0100 1101 0111 1101 + { }, // 7e: 0100 1101 0111 1110 + { }, // 7f: 0100 1101 0111 1111 + + { }, // 80: 0100 1101 1000 0000 + { }, // 81: 0100 1101 1000 0001 + { }, // 82: 0100 1101 1000 0010 + { }, // 83: 0100 1101 1000 0011 + { }, // 84: 0100 1101 1000 0100 + { }, // 85: 0100 1101 1000 0101 + { }, // 86: 0100 1101 1000 0110 + { }, // 87: 0100 1101 1000 0111 + { }, // 88: 0100 1101 1000 1000 + { }, // 89: 0100 1101 1000 1001 + { }, // 8a: 0100 1101 1000 1010 + { }, // 8b: 0100 1101 1000 1011 + { }, // 8c: 0100 1101 1000 1100 + { }, // 8d: 0100 1101 1000 1101 + { }, // 8e: 0100 1101 1000 1110 + { }, // 8f: 0100 1101 1000 1111 + + { }, // 90: 0100 1101 1001 0000 + { }, // 91: 0100 1101 1001 0001 + { }, // 92: 0100 1101 1001 0010 + { }, // 93: 0100 1101 1001 0011 + { }, // 94: 0100 1101 1001 0100 + { }, // 95: 0100 1101 1001 0101 + { }, // 96: 0100 1101 1001 0110 + { }, // 97: 0100 1101 1001 0111 + { }, // 98: 0100 1101 1001 1000 + { }, // 99: 0100 1101 1001 1001 + { }, // 9a: 0100 1101 1001 1010 + { }, // 9b: 0100 1101 1001 1011 + { }, // 9c: 0100 1101 1001 1100 + { }, // 9d: 0100 1101 1001 1101 + { }, // 9e: 0100 1101 1001 1110 + { }, // 9f: 0100 1101 1001 1111 + + { }, // a0: 0100 1101 1010 0000 + { }, // a1: 0100 1101 1010 0001 + { }, // a2: 0100 1101 1010 0010 + { }, // a3: 0100 1101 1010 0011 + { }, // a4: 0100 1101 1010 0100 + { }, // a5: 0100 1101 1010 0101 + { }, // a6: 0100 1101 1010 0110 + { }, // a7: 0100 1101 1010 0111 + { }, // a8: 0100 1101 1010 1000 + { }, // a9: 0100 1101 1010 1001 + { }, // aa: 0100 1101 1010 1010 + { }, // ab: 0100 1101 1010 1011 + { }, // ac: 0100 1101 1010 1100 + { }, // ad: 0100 1101 1010 1101 + { }, // ae: 0100 1101 1010 1110 + { }, // af: 0100 1101 1010 1111 + + { }, // b0: 0100 1101 1011 0000 + { }, // b1: 0100 1101 1011 0001 + { }, // b2: 0100 1101 1011 0010 + { }, // b3: 0100 1101 1011 0011 + { }, // b4: 0100 1101 1011 0100 + { }, // b5: 0100 1101 1011 0101 + { }, // b6: 0100 1101 1011 0110 + { }, // b7: 0100 1101 1011 0111 + { }, // b8: 0100 1101 1011 1000 + { }, // b9: 0100 1101 1011 1001 + { }, // ba: 0100 1101 1011 1010 + { }, // bb: 0100 1101 1011 1011 + { }, // bc: 0100 1101 1011 1100 + { }, // bd: 0100 1101 1011 1101 + { }, // be: 0100 1101 1011 1110 + { }, // bf: 0100 1101 1011 1111 + + {MOV, "PA,A" }, // c0: 0100 1101 1100 0000 + {MOV, "PB,A" }, // c1: 0100 1101 1100 0001 + {MOV, "PC,A" }, // c2: 0100 1101 1100 0010 + {MOV, "PD,A" }, // c3: 0100 1101 1100 0011 + { }, // c4: 0100 1101 1100 0100 + {MOV, "PF,A" }, // c5: 0100 1101 1100 0101 + {MOV, "MKH,A" }, // c6: 0100 1101 1100 0110 + {MOV, "MKL,A" }, // c7: 0100 1101 1100 0111 + { }, // c8: 0100 1101 1100 1000 + {MOV, "SMH,A" }, // c9: 0100 1101 1100 1001 + {MOV, "SML,A" }, // ca: 0100 1101 1100 1010 + {MOV, "EOM,A" }, // cb: 0100 1101 1100 1011 + {MOV, "ETMM,A" }, // cc: 0100 1101 1100 1100 + {MOV, "TMM,A" }, // cd: 0100 1101 1100 1101 + { }, // ce: 0100 1101 1100 1110 + { }, // cf: 0100 1101 1100 1111 + + {MOV, "MM,A" }, // d0: 0100 1101 1101 0000 + {MOV, "MCC,A" }, // d1: 0100 1101 1101 0001 + {MOV, "MA,A" }, // d2: 0100 1101 1101 0010 + {MOV, "MB,A" }, // d3: 0100 1101 1101 0011 + {MOV, "MC,A" }, // d4: 0100 1101 1101 0100 + { }, // d5: 0100 1101 1101 0101 + { }, // d6: 0100 1101 1101 0110 + {MOV, "MF,A" }, // d7: 0100 1101 1101 0111 + {MOV, "TXB,A" }, // d8: 0100 1101 1101 1000 + { }, // d9: 0100 1101 1101 1001 + {MOV, "TM0,A" }, // da: 0100 1101 1101 1010 + {MOV, "TM1,A" }, // db: 0100 1101 1101 1011 + { }, // dc: 0100 1101 1101 1100 + { }, // dd: 0100 1101 1101 1101 + { }, // de: 0100 1101 1101 1110 + { }, // df: 0100 1101 1101 1111 + + { }, // e0: 0100 1101 1110 0000 + { }, // e1: 0100 1101 1110 0001 + { }, // e2: 0100 1101 1110 0010 + { }, // e3: 0100 1101 1110 0011 + { }, // e4: 0100 1101 1110 0100 + {MOV, "MT,A" }, // e5: 0100 1101 1110 0101 7807 + { }, // e6: 0100 1101 1110 0110 + { }, // e7: 0100 1101 1110 0111 + { }, // e8: 0100 1101 1110 1000 + { }, // e9: 0100 1101 1110 1001 + { }, // ea: 0100 1101 1110 1010 + { }, // eb: 0100 1101 1110 1011 + { }, // ec: 0100 1101 1110 1100 + { }, // ed: 0100 1101 1110 1101 + { }, // ee: 0100 1101 1110 1110 + { }, // ef: 0100 1101 1110 1111 + + { }, // f0: 0100 1101 1111 0000 + { }, // f1: 0100 1101 1111 0001 + { }, // f2: 0100 1101 1111 0010 + { }, // f3: 0100 1101 1111 0011 + { }, // f4: 0100 1101 1111 0100 + { }, // f5: 0100 1101 1111 0101 + { }, // f6: 0100 1101 1111 0110 + { }, // f7: 0100 1101 1111 0111 + { }, // f8: 0100 1101 1111 1000 + { }, // f9: 0100 1101 1111 1001 + { }, // fa: 0100 1101 1111 1010 + { }, // fb: 0100 1101 1111 1011 + { }, // fc: 0100 1101 1111 1100 + { }, // fd: 0100 1101 1111 1101 + { }, // fe: 0100 1101 1111 1110 + { } // ff: 0100 1101 1111 1111 +}; + +const upd7810_base_disassembler::dasm_s upd7807_disassembler::d64_7807[256] = +{ + {MVI, "PA,%b" }, // 00: 0110 0100 0000 0000 xxxx xxxx + {MVI, "PB,%b" }, // 01: 0110 0100 0000 0001 xxxx xxxx + {MVI, "PC,%b" }, // 02: 0110 0100 0000 0010 xxxx xxxx + {MVI, "PD,%b" }, // 03: 0110 0100 0000 0011 xxxx xxxx + { }, // 04: 0110 0100 0000 0100 xxxx xxxx + {MVI, "PF,%b" }, // 05: 0110 0100 0000 0101 xxxx xxxx + {MVI, "MKH,%b" }, // 06: 0110 0100 0000 0110 xxxx xxxx + {MVI, "MKL,%b" }, // 07: 0110 0100 0000 0111 xxxx xxxx + {ANI, "PA,%b" }, // 08: 0110 0100 0000 1000 xxxx xxxx + {ANI, "PB,%b" }, // 09: 0110 0100 0000 1001 xxxx xxxx + {ANI, "PC,%b" }, // 0a: 0110 0100 0000 1010 xxxx xxxx + {ANI, "PD,%b" }, // 0b: 0110 0100 0000 1011 xxxx xxxx + { }, // 0c: 0110 0100 0000 1100 xxxx xxxx + {ANI, "PF,%b" }, // 0d: 0110 0100 0000 1101 xxxx xxxx + {ANI, "MKH,%b" }, // 0e: 0110 0100 0000 1110 xxxx xxxx + {ANI, "MKL,%b" }, // 0f: 0110 0100 0000 1111 xxxx xxxx + + {XRI, "PA,%b" }, // 10: 0110 0100 0001 0000 xxxx xxxx + {XRI, "PB,%b" }, // 11: 0110 0100 0001 0001 xxxx xxxx + {XRI, "PC,%b" }, // 12: 0110 0100 0001 0010 xxxx xxxx + {XRI, "PD,%b" }, // 13: 0110 0100 0001 0011 xxxx xxxx + { }, // 14: 0110 0100 0001 0100 xxxx xxxx + {XRI, "PF,%b" }, // 15: 0110 0100 0001 0101 xxxx xxxx + {XRI, "MKH,%b" }, // 16: 0110 0100 0001 0110 xxxx xxxx + {XRI, "MKL,%b" }, // 17: 0110 0100 0001 0111 xxxx xxxx + {ORI, "PA,%b" }, // 18: 0110 0100 0001 1000 xxxx xxxx + {ORI, "PB,%b" }, // 19: 0110 0100 0001 1001 xxxx xxxx + {ORI, "PC,%b" }, // 1a: 0110 0100 0001 1010 xxxx xxxx + {ORI, "PD,%b" }, // 1b: 0110 0100 0001 1011 xxxx xxxx + { }, // 1c: 0110 0100 0001 1100 xxxx xxxx + {ORI, "PF,%b" }, // 1d: 0110 0100 0001 1101 xxxx xxxx + {ORI, "MKH,%b" }, // 1e: 0110 0100 0001 1110 xxxx xxxx + {ORI, "MKL,%b" }, // 1f: 0110 0100 0001 1111 xxxx xxxx + + {ADINC, "PA,%b" }, // 20: 0110 0100 0010 0000 xxxx xxxx + {ADINC, "PB,%b" }, // 21: 0110 0100 0010 0001 xxxx xxxx + {ADINC, "PC,%b" }, // 22: 0110 0100 0010 0010 xxxx xxxx + {ADINC, "PD,%b" }, // 23: 0110 0100 0010 0011 xxxx xxxx + { }, // 24: 0110 0100 0010 0100 xxxx xxxx + {ADINC, "PF,%b" }, // 25: 0110 0100 0010 0101 xxxx xxxx + {ADINC, "MKH,%b" }, // 26: 0110 0100 0010 0110 xxxx xxxx + {ADINC, "MKL,%b" }, // 27: 0110 0100 0010 0111 xxxx xxxx + {GTI, "PA,%b" }, // 28: 0110 0100 0010 1000 xxxx xxxx + {GTI, "PB,%b" }, // 29: 0110 0100 0010 1001 xxxx xxxx + {GTI, "PC,%b" }, // 2a: 0110 0100 0010 1010 xxxx xxxx + {GTI, "PD,%b" }, // 2b: 0110 0100 0010 1011 xxxx xxxx + { }, // 2c: 0110 0100 0010 1100 xxxx xxxx + {GTI, "PF,%b" }, // 2d: 0110 0100 0010 1101 xxxx xxxx + {GTI, "MKH,%b" }, // 2e: 0110 0100 0010 1110 xxxx xxxx + {GTI, "MKL,%b" }, // 2f: 0110 0100 0010 1111 xxxx xxxx + + {SUINB, "PA,%b" }, // 30: 0110 0100 0011 0000 xxxx xxxx + {SUINB, "PB,%b" }, // 31: 0110 0100 0011 0001 xxxx xxxx + {SUINB, "PC,%b" }, // 32: 0110 0100 0011 0010 xxxx xxxx + {SUINB, "PD,%b" }, // 33: 0110 0100 0011 0011 xxxx xxxx + { }, // 34: 0110 0100 0011 0100 xxxx xxxx + {SUINB, "PF,%b" }, // 35: 0110 0100 0011 0101 xxxx xxxx + {SUINB, "MKH,%b" }, // 36: 0110 0100 0011 0110 xxxx xxxx + {SUINB, "MKL,%b" }, // 37: 0110 0100 0011 0111 xxxx xxxx + {LTI, "PA,%b" }, // 38: 0110 0100 0011 1000 xxxx xxxx + {LTI, "PB,%b" }, // 39: 0110 0100 0011 1001 xxxx xxxx + {LTI, "PC,%b" }, // 3a: 0110 0100 0011 1010 xxxx xxxx + {LTI, "PD,%b" }, // 3b: 0110 0100 0011 1011 xxxx xxxx + { }, // 3c: 0110 0100 0011 1100 xxxx xxxx + {LTI, "PF,%b" }, // 3d: 0110 0100 0011 1101 xxxx xxxx + {LTI, "MKH,%b" }, // 3e: 0110 0100 0011 1110 xxxx xxxx + {LTI, "MKL,%b" }, // 3f: 0110 0100 0011 1111 xxxx xxxx + + {ADI, "PA,%b" }, // 40: 0110 0100 0100 0000 xxxx xxxx + {ADI, "PB,%b" }, // 41: 0110 0100 0100 0001 xxxx xxxx + {ADI, "PC,%b" }, // 42: 0110 0100 0100 0010 xxxx xxxx + {ADI, "PD,%b" }, // 43: 0110 0100 0100 0011 xxxx xxxx + { }, // 44: 0110 0100 0100 0100 xxxx xxxx + {ADI, "PF,%b" }, // 45: 0110 0100 0100 0101 xxxx xxxx + {ADI, "MKH,%b" }, // 46: 0110 0100 0100 0110 xxxx xxxx + {ADI, "MKL,%b" }, // 47: 0110 0100 0100 0111 xxxx xxxx + {ONI, "PA,%b" }, // 48: 0110 0100 0100 1000 xxxx xxxx + {ONI, "PB,%b" }, // 49: 0110 0100 0100 1001 xxxx xxxx + {ONI, "PC,%b" }, // 4a: 0110 0100 0100 1010 xxxx xxxx + {ONI, "PD,%b" }, // 4b: 0110 0100 0100 1011 xxxx xxxx + { }, // 4c: 0110 0100 0100 1100 xxxx xxxx + {ONI, "PF,%b" }, // 4d: 0110 0100 0100 1101 xxxx xxxx + {ONI, "MKH,%b" }, // 4e: 0110 0100 0100 1110 xxxx xxxx + {ONI, "MKL,%b" }, // 4f: 0110 0100 0100 1111 xxxx xxxx + + {ACI, "PA,%b" }, // 50: 0110 0100 0101 0000 xxxx xxxx + {ACI, "PB,%b" }, // 51: 0110 0100 0101 0001 xxxx xxxx + {ACI, "PC,%b" }, // 52: 0110 0100 0101 0010 xxxx xxxx + {ACI, "PD,%b" }, // 53: 0110 0100 0101 0011 xxxx xxxx + { }, // 54: 0110 0100 0101 0100 xxxx xxxx + {ACI, "PF,%b" }, // 55: 0110 0100 0101 0101 xxxx xxxx + {ACI, "MKH,%b" }, // 56: 0110 0100 0101 0110 xxxx xxxx + {ACI, "MKL,%b" }, // 57: 0110 0100 0101 0111 xxxx xxxx + {OFFI, "PA,%b" }, // 58: 0110 0100 0101 1000 xxxx xxxx + {OFFI, "PB,%b" }, // 59: 0110 0100 0101 1001 xxxx xxxx + {OFFI, "PC,%b" }, // 5a: 0110 0100 0101 1010 xxxx xxxx + {OFFI, "PD,%b" }, // 5b: 0110 0100 0101 1011 xxxx xxxx + { }, // 5c: 0110 0100 0101 1100 xxxx xxxx + {OFFI, "PF,%b" }, // 5d: 0110 0100 0101 1101 xxxx xxxx + {OFFI, "MKH,%b" }, // 5e: 0110 0100 0101 1110 xxxx xxxx + {OFFI, "MKL,%b" }, // 5f: 0110 0100 0101 1111 xxxx xxxx + + {SUI, "PA,%b" }, // 60: 0110 0100 0110 0000 xxxx xxxx + {SUI, "PB,%b" }, // 61: 0110 0100 0110 0001 xxxx xxxx + {SUI, "PC,%b" }, // 62: 0110 0100 0110 0010 xxxx xxxx + {SUI, "PD,%b" }, // 63: 0110 0100 0110 0011 xxxx xxxx + { }, // 64: 0110 0100 0110 0100 xxxx xxxx + {SUI, "PF,%b" }, // 65: 0110 0100 0110 0101 xxxx xxxx + {SUI, "MKH,%b" }, // 66: 0110 0100 0110 0110 xxxx xxxx + {SUI, "MKL,%b" }, // 67: 0110 0100 0110 0111 xxxx xxxx + {NEI, "PA,%b" }, // 68: 0110 0100 0110 1000 xxxx xxxx + {NEI, "PB,%b" }, // 69: 0110 0100 0110 1001 xxxx xxxx + {NEI, "PC,%b" }, // 6a: 0110 0100 0110 1010 xxxx xxxx + {NEI, "PD,%b" }, // 6b: 0110 0100 0110 1011 xxxx xxxx + { }, // 6c: 0110 0100 0110 1100 xxxx xxxx + {NEI, "PF,%b" }, // 6d: 0110 0100 0110 1101 xxxx xxxx + {NEI, "MKH,%b" }, // 6e: 0110 0100 0110 1110 xxxx xxxx + {NEI, "MKL,%b" }, // 6f: 0110 0100 0110 1111 xxxx xxxx + + {SBI, "PA,%b" }, // 70: 0110 0100 0111 0000 xxxx xxxx + {SBI, "PB,%b" }, // 71: 0110 0100 0111 0001 xxxx xxxx + {SBI, "PC,%b" }, // 72: 0110 0100 0111 0010 xxxx xxxx + {SBI, "PD,%b" }, // 73: 0110 0100 0111 0011 xxxx xxxx + { }, // 74: 0110 0100 0111 0100 xxxx xxxx + {SBI, "PF,%b" }, // 75: 0110 0100 0111 0101 xxxx xxxx + {SBI, "MKH,%b" }, // 76: 0110 0100 0111 0110 xxxx xxxx + {SBI, "MKL,%b" }, // 77: 0110 0100 0111 0111 xxxx xxxx + {EQI, "PA,%b" }, // 78: 0110 0100 0111 1000 xxxx xxxx + {EQI, "PB,%b" }, // 79: 0110 0100 0111 1001 xxxx xxxx + {EQI, "PC,%b" }, // 7a: 0110 0100 0111 1010 xxxx xxxx + {EQI, "PD,%b" }, // 7b: 0110 0100 0111 1011 xxxx xxxx + { }, // 7c: 0110 0100 0111 1100 xxxx xxxx + {EQI, "PF,%b" }, // 7d: 0110 0100 0111 1101 xxxx xxxx + {EQI, "MKH,%b" }, // 7e: 0110 0100 0111 1110 xxxx xxxx + {EQI, "MKL,%b" }, // 7f: 0110 0100 0111 1111 xxxx xxxx + + { }, // 80: 0110 0100 1000 0000 xxxx xxxx + {MVI, "SMH,%b" }, // 81: 0110 0100 1000 0001 xxxx xxxx + { }, // 82: 0110 0100 1000 0010 xxxx xxxx + {MVI, "EOM,%b" }, // 83: 0110 0100 1000 0011 xxxx xxxx + { }, // 84: 0110 0100 1000 0100 xxxx xxxx + {MVI, "TMM,%b" }, // 85: 0110 0100 1000 0101 xxxx xxxx + { }, // 86: 0110 0100 1000 0110 xxxx xxxx + { }, // 87: 0110 0100 1000 0111 xxxx xxxx + { }, // 88: 0110 0100 1000 1000 xxxx xxxx + {ANI, "SMH,%b" }, // 89: 0110 0100 1000 1001 xxxx xxxx + { }, // 8a: 0110 0100 1000 1010 xxxx xxxx + {ANI, "EOM,%b" }, // 8b: 0110 0100 1000 1011 xxxx xxxx + { }, // 8c: 0110 0100 1000 1100 xxxx xxxx + {ANI, "TMM,%b" }, // 8d: 0110 0100 1000 1101 xxxx xxxx + { }, // 8e: 0110 0100 1000 1110 xxxx xxxx + { }, // 8f: 0110 0100 1000 1111 xxxx xxxx + + { }, // 90: 0110 0100 1001 0000 xxxx xxxx + {XRI, "SMH,%b" }, // 91: 0110 0100 1001 0001 xxxx xxxx + { }, // 92: 0110 0100 1001 0010 xxxx xxxx + {XRI, "EOM,%b" }, // 93: 0110 0100 1001 0011 xxxx xxxx + { }, // 94: 0110 0100 1001 0100 xxxx xxxx + {XRI, "TMM,%b" }, // 95: 0110 0100 1001 0101 xxxx xxxx + { }, // 96: 0110 0100 1001 0110 xxxx xxxx + { }, // 97: 0110 0100 1001 0111 xxxx xxxx + { }, // 98: 0110 0100 1001 1000 xxxx xxxx + {ORI, "SMH,%b" }, // 99: 0110 0100 1001 1001 xxxx xxxx + { }, // 9a: 0110 0100 1001 1010 xxxx xxxx + {ORI, "EOM,%b" }, // 9b: 0110 0100 1001 1011 xxxx xxxx + { }, // 9c: 0110 0100 1001 1100 xxxx xxxx + {ORI, "TMM,%b" }, // 9d: 0110 0100 1001 1101 xxxx xxxx + { }, // 9e: 0110 0100 1001 1110 xxxx xxxx + { }, // 9f: 0110 0100 1001 1111 xxxx xxxx + + { }, // a0: 0110 0100 1010 0000 xxxx xxxx + {ADINC, "SMH,%b" }, // a1: 0110 0100 1010 0001 xxxx xxxx + { }, // a2: 0110 0100 1010 0010 xxxx xxxx + {ADINC, "EOM,%b" }, // a3: 0110 0100 1010 0011 xxxx xxxx + { }, // a4: 0110 0100 1010 0100 xxxx xxxx + {ADINC, "TMM,%b" }, // a5: 0110 0100 1010 0101 xxxx xxxx + { }, // a6: 0110 0100 1010 0110 xxxx xxxx + { }, // a7: 0110 0100 1010 0111 xxxx xxxx + { }, // a8: 0110 0100 1010 1000 xxxx xxxx + {GTI, "SMH,%b" }, // a9: 0110 0100 1010 1001 xxxx xxxx + { }, // aa: 0110 0100 1010 1010 xxxx xxxx + {GTI, "EOM,%b" }, // ab: 0110 0100 1010 1011 xxxx xxxx + { }, // ac: 0110 0100 1010 1100 xxxx xxxx + {GTI, "TMM,%b" }, // ad: 0110 0100 1010 1101 xxxx xxxx + {GTI, "PT,%b" }, // ae: 0110 0100 1010 1110 xxxx xxxx + { }, // af: 0110 0100 1010 1111 xxxx xxxx + + { }, // b0: 0110 0100 1011 0000 xxxx xxxx + {SUINB, "SMH,%b" }, // b1: 0110 0100 1011 0001 xxxx xxxx + { }, // b2: 0110 0100 1011 0010 xxxx xxxx + {SUINB, "EOM,%b" }, // b3: 0110 0100 1011 0011 xxxx xxxx + { }, // b4: 0110 0100 1011 0100 xxxx xxxx + {SUINB, "TMM,%b" }, // b5: 0110 0100 1011 0101 xxxx xxxx + { }, // b6: 0110 0100 1011 0110 xxxx xxxx + { }, // b7: 0110 0100 1011 0111 xxxx xxxx + { }, // b8: 0110 0100 1011 1000 xxxx xxxx + {LTI, "SMH,%b" }, // b9: 0110 0100 1011 1001 xxxx xxxx + { }, // ba: 0110 0100 1011 1010 xxxx xxxx + {LTI, "EOM,%b" }, // bb: 0110 0100 1011 1011 xxxx xxxx + { }, // bc: 0110 0100 1011 1100 xxxx xxxx + {LTI, "TMM,%b" }, // bd: 0110 0100 1011 1101 xxxx xxxx + {LTI, "PT,%b" }, // be: 0110 0100 1011 1110 xxxx xxxx + { }, // bf: 0110 0100 1011 1111 xxxx xxxx + + { }, // c0: 0110 0100 1100 0000 xxxx xxxx + {ADI, "SMH,%b" }, // c1: 0110 0100 1100 0001 xxxx xxxx + { }, // c2: 0110 0100 1100 0010 xxxx xxxx + {ADI, "EOM,%b" }, // c3: 0110 0100 1100 0011 xxxx xxxx + { }, // c4: 0110 0100 1100 0100 xxxx xxxx + {ADI, "TMM,%b" }, // c5: 0110 0100 1100 0101 xxxx xxxx + { }, // c6: 0110 0100 1100 0110 xxxx xxxx + { }, // c7: 0110 0100 1100 0111 xxxx xxxx + { }, // c8: 0110 0100 1100 1000 xxxx xxxx + {ONI, "SMH,%b" }, // c9: 0110 0100 1100 1001 xxxx xxxx + { }, // ca: 0110 0100 1100 1010 xxxx xxxx + {ONI, "EOM,%b" }, // cb: 0110 0100 1100 1011 xxxx xxxx + { }, // cc: 0110 0100 1100 1100 xxxx xxxx + {ONI, "TMM,%b" }, // cd: 0110 0100 1100 1101 xxxx xxxx + {ONI, "PT,%b" }, // ce: 0110 0100 1100 1110 xxxx xxxx + { }, // cf: 0110 0100 1100 1111 xxxx xxxx + + { }, // d0: 0110 0100 1101 0000 xxxx xxxx + {ACI, "SMH,%b" }, // d1: 0110 0100 1101 0001 xxxx xxxx + { }, // d2: 0110 0100 1101 0010 xxxx xxxx + {ACI, "EOM,%b" }, // d3: 0110 0100 1101 0011 xxxx xxxx + { }, // d4: 0110 0100 1101 0100 xxxx xxxx + {ACI, "TMM,%b" }, // d5: 0110 0100 1101 0101 xxxx xxxx + { }, // d6: 0110 0100 1101 0110 xxxx xxxx + { }, // d7: 0110 0100 1101 0111 xxxx xxxx + { }, // d8: 0110 0100 1101 1000 xxxx xxxx + {OFFI, "SMH,%b" }, // d9: 0110 0100 1101 1001 xxxx xxxx + { }, // da: 0110 0100 1101 1010 xxxx xxxx + {OFFI, "EOM,%b" }, // db: 0110 0100 1101 1011 xxxx xxxx + { }, // dc: 0110 0100 1101 1100 xxxx xxxx + {OFFI, "TMM,%b" }, // dd: 0110 0100 1101 1101 xxxx xxxx + {OFFI, "PT,%b" }, // de: 0110 0100 1101 1110 xxxx xxxx + { }, // df: 0110 0100 1101 1111 xxxx xxxx + + { }, // e0: 0110 0100 1110 0000 xxxx xxxx + {SUI, "SMH,%b" }, // e1: 0110 0100 1110 0001 xxxx xxxx + { }, // e2: 0110 0100 1110 0010 xxxx xxxx + {SUI, "EOM,%b" }, // e3: 0110 0100 1110 0011 xxxx xxxx + { }, // e4: 0110 0100 1110 0100 xxxx xxxx + {SUI, "TMM,%b" }, // e5: 0110 0100 1110 0101 xxxx xxxx + { }, // e6: 0110 0100 1110 0110 xxxx xxxx + { }, // e7: 0110 0100 1110 0111 xxxx xxxx + { }, // e8: 0110 0100 1110 1000 xxxx xxxx + {NEI, "SMH,%b" }, // e9: 0110 0100 1110 1001 xxxx xxxx + { }, // ea: 0110 0100 1110 1010 xxxx xxxx + {NEI, "EOM,%b" }, // eb: 0110 0100 1110 1011 xxxx xxxx + { }, // ec: 0110 0100 1110 1100 xxxx xxxx + {NEI, "TMM,%b" }, // ed: 0110 0100 1110 1101 xxxx xxxx + {NEI, "PT,%b" }, // ee: 0110 0100 1110 1110 xxxx xxxx + { }, // ef: 0110 0100 1110 1111 xxxx xxxx + + { }, // f0: 0110 0100 1111 0000 xxxx xxxx + {SBI, "SMH,%b" }, // f1: 0110 0100 1111 0001 xxxx xxxx + { }, // f2: 0110 0100 1111 0010 xxxx xxxx + {SBI, "EOM,%b" }, // f3: 0110 0100 1111 0011 xxxx xxxx + { }, // f4: 0110 0100 1111 0100 xxxx xxxx + {SBI, "TMM,%b" }, // f5: 0110 0100 1111 0101 xxxx xxxx + { }, // f6: 0110 0100 1111 0110 xxxx xxxx + { }, // f7: 0110 0100 1111 0111 xxxx xxxx + { }, // f8: 0110 0100 1111 1000 xxxx xxxx + {EQI, "SMH,%b" }, // f9: 0110 0100 1111 1001 xxxx xxxx + { }, // fa: 0110 0100 1111 1010 xxxx xxxx + {EQI, "EOM,%b" }, // fb: 0110 0100 1111 1011 xxxx xxxx + { }, // fc: 0110 0100 1111 1100 xxxx xxxx + {EQI, "TMM,%b" }, // fd: 0110 0100 1111 1101 xxxx xxxx + {EQI, "PT,%b" }, // fe: 0110 0100 1111 1110 xxxx xxxx + { } // ff: 0110 0100 1111 1111 xxxx xxxx +}; + +const upd7810_base_disassembler::dasm_s upd7807_disassembler::XX_7807[256] = { {NOP, nullptr }, // 00: 0000 0000 {LDAW, "%a" }, // 01: 0000 0001 oooo oooo @@ -4020,7 +3827,7 @@ const dasm_s dasm_s::XX_7807[256] = * *********************************************************/ -const dasm_s dasm_s::d48_7801[256] = { +const upd7810_base_disassembler::dasm_s upd7801_disassembler::d48_7801[256] = { // 0x00 - 0x3F { SKIT, "F0" }, { SKIT, "FT" }, { SKIT, "F1" }, { SKIT, "F2" }, { SKIT, "FS" }, { }, { }, { }, @@ -4106,7 +3913,7 @@ const dasm_s dasm_s::d48_7801[256] = { { }, { }, { }, { } }; -const dasm_s dasm_s::d4C_7801[256] = { +const upd7810_base_disassembler::dasm_s upd7801_disassembler::d4C_7801[256] = { // 0x00 - 0x3F { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, @@ -4192,7 +3999,7 @@ const dasm_s dasm_s::d4C_7801[256] = { { }, { }, { }, { } }; -const dasm_s dasm_s::d4D_7801[256] = { +const upd7810_base_disassembler::dasm_s upd7801_disassembler::d4D_7801[256] = { // 0x00 - 0x3F { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, @@ -4278,7 +4085,7 @@ const dasm_s dasm_s::d4D_7801[256] = { { }, { }, { }, { } }; -const dasm_s dasm_s::d60_7801[256] = { +const upd7810_base_disassembler::dasm_s upd7801_disassembler::d60_7801[256] = { // 0x00 - 0x3F { }, { }, { }, { }, { }, { }, { }, { }, @@ -4364,7 +4171,7 @@ const dasm_s dasm_s::d60_7801[256] = { { EQA, "A,D" }, { EQA, "A,E" }, { EQA, "A,H" }, { EQA, "A,L" } }; -const dasm_s dasm_s::d64_7801[256] = { +const upd7810_base_disassembler::dasm_s upd7801_disassembler::d64_7801[256] = { // 0x00 - 0x3F { }, { }, { }, { }, { }, { }, { }, { }, @@ -4450,7 +4257,7 @@ const dasm_s dasm_s::d64_7801[256] = { { }, { }, { }, { } }; -const dasm_s dasm_s::d70_7801[256] = { +const upd7810_base_disassembler::dasm_s upd7801_disassembler::d70_7801[256] = { // 0x00 - 0x3F { }, { }, { }, { }, { }, { }, { }, { }, @@ -4536,7 +4343,7 @@ const dasm_s dasm_s::d70_7801[256] = { { EQAX, "DE+" }, { EQAX, "HL+" }, { EQAX, "DE-" }, { EQAX, "HL-" }, }; -const dasm_s dasm_s::d74_7801[256] = { +const upd7810_base_disassembler::dasm_s upd7801_disassembler::d74_7801[256] = { // 0x00 - 0x3F { }, { }, { }, { }, { }, { }, { }, { }, @@ -4622,7 +4429,7 @@ const dasm_s dasm_s::d74_7801[256] = { { }, { }, { }, { } }; -const dasm_s dasm_s::XX_7801[256] = { +const upd7810_base_disassembler::dasm_s upd7801_disassembler::XX_7801[256] = { // 0x00 - 0x3F { NOP, nullptr }, { HALT, nullptr }, { INX, "SP" }, { DCX, "SP" }, { LXI, "SP,%w" }, { ANIW, "%a,%b" }, { }, { ANI, "A,%b" }, @@ -4714,7 +4521,7 @@ const dasm_s dasm_s::XX_7801[256] = { * *********************************************************/ -const dasm_s dasm_s::d48_78c05[256] = { +const upd7810_base_disassembler::dasm_s upd78c05_disassembler::d48_78c05[256] = { // 0x00 - 0x3F { SKIT, "F0" }, { SKIT, "FT" }, { SKIT, "F1" }, { }, // TODO: PDF doesn't mention SKIT and SK { SKIT, "FS" }, { }, { }, { }, @@ -4800,7 +4607,7 @@ const dasm_s dasm_s::d48_78c05[256] = { { }, { }, { }, { } }; -const dasm_s dasm_s::d4C_78c05[256] = { +const upd7810_base_disassembler::dasm_s upd78c05_disassembler::d4C_78c05[256] = { // 0x00 - 0x3F { }, { }, { }, { }, { }, { }, { }, { }, @@ -4867,7 +4674,7 @@ const dasm_s dasm_s::d4C_78c05[256] = { // 0xC0 - 0xFF { MOV, "A,PA" }, { MOV, "A,PB" }, { MOV, "A,PC" }, { MOV, "A,MK" }, { MOV, "A,MB" }, { MOV, "A,MC" }, { MOV, "A,TM0" }, { MOV, "A,TM1" }, - { MOV, "A,S" }, { }, { }, { }, // TODO: Figure out what regsiter C9 indicates + { MOV, "A,S" }, { }, { }, { }, // TODO: Figure out what register C9 indicates { }, { }, { }, { }, { }, { }, { }, { }, @@ -4886,7 +4693,7 @@ const dasm_s dasm_s::d4C_78c05[256] = { { }, { }, { }, { } }; -const dasm_s dasm_s::d4D_78c05[256] = { +const upd7810_base_disassembler::dasm_s upd78c05_disassembler::d4D_78c05[256] = { // 0x00 - 0x3F { }, { }, { }, { }, { }, { }, { }, { }, @@ -4972,7 +4779,7 @@ const dasm_s dasm_s::d4D_78c05[256] = { { }, { }, { }, { } }; -const dasm_s dasm_s::d60_78c05[256] = { +const upd7810_base_disassembler::dasm_s upd78c05_disassembler::d60_78c05[256] = { // 0x00 - 0x3F { }, { }, { }, { }, { }, { }, { }, { }, @@ -5058,7 +4865,7 @@ const dasm_s dasm_s::d60_78c05[256] = { { EQA, "A,D" }, { EQA, "A,E" }, { EQA, "A,H" }, { EQA, "A,L" } }; -const dasm_s dasm_s::d64_78c05[256] = { +const upd7810_base_disassembler::dasm_s upd78c05_disassembler::d64_78c05[256] = { // 0x00 - 0x3F { }, { }, { }, { }, { }, { }, { }, { }, @@ -5144,7 +4951,7 @@ const dasm_s dasm_s::d64_78c05[256] = { { }, { }, { }, { } }; -const dasm_s dasm_s::d70_78c05[256] = { +const upd7810_base_disassembler::dasm_s upd78c05_disassembler::d70_78c05[256] = { // 0x00 - 0x3F { }, { }, { }, { }, { }, { }, { }, { }, @@ -5230,7 +5037,7 @@ const dasm_s dasm_s::d70_78c05[256] = { { EQAX, "DE+" }, { EQAX, "HL+" }, { EQAX, "DE-" }, { EQAX, "HL-" }, }; -const dasm_s dasm_s::d74_78c05[256] = { +const upd7810_base_disassembler::dasm_s upd78c05_disassembler::d74_78c05[256] = { // 0x00 - 0x3F { }, { }, { }, { }, { }, { }, { }, { }, @@ -5316,7 +5123,7 @@ const dasm_s dasm_s::d74_78c05[256] = { { }, { }, { }, { }, }; -const dasm_s dasm_s::XX_78c05[256] = { +const upd7810_base_disassembler::dasm_s upd78c05_disassembler::XX_78c05[256] = { // 0x00 - 0x3F { NOP, nullptr }, { HALT, nullptr }, { INX, "SP" }, { DCX, "SP" }, { LXI, "SP,%w" }, { ANIW, "%a,%b" }, { }, { ANI, "A,%b" }, @@ -5404,7 +5211,7 @@ const dasm_s dasm_s::XX_78c05[256] = { // register names for bit manipulation instructions -const char *const regname[32] = +const char *const upd7810_base_disassembler::regname[32] = { "illegal", "illegal", "illegal", "illegal", "illegal", "illegal", "illegal", "illegal", @@ -5416,17 +5223,17 @@ const char *const regname[32] = "illegal", "TMM", "PT", "illegal" }; -offs_t Dasm( std::ostream &stream, offs_t pc, const dasm_s (&dasmXX)[256], const uint8_t *oprom, const uint8_t *opram, bool is_7810 ) +offs_t upd7810_base_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms) { - unsigned idx = 0; - const uint8_t op = oprom[idx++]; - const dasm_s *desc = &dasmXX[op]; + offs_t idx = pc; + const uint8_t op = opcodes.r8(idx++); + const dasm_s *desc = &m_dasmXX[op]; if (desc->is_prefix()) - desc = &desc->prefix_get(oprom[idx++]); + desc = &desc->prefix_get(opcodes.r8(idx++)); util::stream_format(stream, "%-8.8s", desc->name()); - uint32_t flags = desc->is_call() ? DASMFLAG_STEP_OVER : desc->is_return() ? DASMFLAG_STEP_OUT : 0; + uint32_t flags = desc->is_call() ? STEP_OVER : desc->is_return() ? STEP_OUT : 0; uint8_t op2; int offset; uint16_t ea; @@ -5439,28 +5246,28 @@ offs_t Dasm( std::ostream &stream, offs_t pc, const dasm_s (&dasmXX)[256], const switch (*a) { case 'a': /* address V * 256 + offset */ - op2 = opram[idx++]; + op2 = params.r8(idx++); util::stream_format(stream, "VV:%02X", op2); break; case 'b': /* immediate byte */ - util::stream_format(stream, "$%02X", opram[idx++]); + util::stream_format(stream, "$%02X", params.r8(idx++)); break; case 'w': /* immediate word */ - ea = opram[idx++]; - ea += opram[idx++] << 8; + ea = params.r8(idx++); + ea += params.r8(idx++) << 8; util::stream_format(stream, "$%04X", ea); break; case 'd': /* JRE address */ - op2 = oprom[idx++]; + op2 = opcodes.r8(idx++); offset = (op & 1) ? -(256 - op2): + op2; util::stream_format(stream, "$%04X", ( pc + idx + offset ) & 0xFFFF ); break; case 't': /* CALT address */ - ea = 0x80 + 2 * (op & (is_7810 ? 0x1f : 0x3f)); + ea = 0x80 + 2 * (op & (m_is_7810 ? 0x1f : 0x3f)); util::stream_format(stream, "($%04X)", ea); break; case 'f': /* CALF address */ - op2 = oprom[idx++]; + op2 = opcodes.r8(idx++); ea = 0x800 + 0x100 * (op & 0x07) + op2; util::stream_format(stream, "$%04X", ea); break; @@ -5469,7 +5276,7 @@ offs_t Dasm( std::ostream &stream, offs_t pc, const dasm_s (&dasmXX)[256], const util::stream_format(stream, "$%04X", ( pc + idx + offset ) & 0xFFFF ); break; case 'i': /* bit manipulation */ - op2 = oprom[idx++]; + op2 = opcodes.r8(idx++); util::stream_format(stream, "%s,%d", regname[op2 & 0x1f], op2 >> 5); break; default: @@ -5480,27 +5287,30 @@ offs_t Dasm( std::ostream &stream, offs_t pc, const dasm_s (&dasmXX)[256], const stream << *a; } - return idx | flags | DASMFLAG_SUPPORTED; + return (idx - pc) | flags | SUPPORTED; } -} // anonymous namespace +upd7810_base_disassembler::upd7810_base_disassembler(const dasm_s *table, bool is_7810) : m_is_7810(is_7810), m_dasmXX(table) +{ +} + +uint32_t upd7810_base_disassembler::opcode_alignment() const +{ + return 1; +} -CPU_DISASSEMBLE( upd7810 ) +upd7810_disassembler::upd7810_disassembler() : upd7810_base_disassembler(XX_7810, true) { - return Dasm( stream, pc, dasm_s::XX_7810, oprom, opram, true ); } -CPU_DISASSEMBLE( upd7807 ) +upd7807_disassembler::upd7807_disassembler() : upd7810_base_disassembler(XX_7807, true) { - return Dasm( stream, pc, dasm_s::XX_7807, oprom, opram, true ); } -CPU_DISASSEMBLE( upd7801 ) +upd7801_disassembler::upd7801_disassembler() : upd7810_base_disassembler(XX_7801, false) { - return Dasm( stream, pc, dasm_s::XX_7801, oprom, opram, false ); } -CPU_DISASSEMBLE( upd78c05 ) +upd78c05_disassembler::upd78c05_disassembler() : upd7810_base_disassembler(XX_78c05, false) { - return Dasm( stream, pc, dasm_s::XX_78c05, oprom, opram, false ); } diff --git a/src/devices/cpu/upd7810/upd7810_dasm.h b/src/devices/cpu/upd7810/upd7810_dasm.h new file mode 100644 index 00000000000..a367ab24a48 --- /dev/null +++ b/src/devices/cpu/upd7810/upd7810_dasm.h @@ -0,0 +1,291 @@ +// license:BSD-3-Clause +// copyright-holders:Juergen Buchmueller +/***************************************************************************** + * + * Portable uPD7810/11, 7810H/11H, 78C10/C11/C14 disassembler + * + * NS20030112: added 7807. + * + *****************************************************************************/ + +#ifndef MAME_CPU_UPD7810_UPD7810DASM_H +#define MAME_CPU_UPD7810_UPD7810DASM_H + +#pragma once + +class upd7810_base_disassembler : public util::disasm_interface +{ +public: + struct dasm_s { + public: + dasm_s(); + dasm_s(uint8_t t, const char *a); + dasm_s(const dasm_s (&a)[256]); + + const char *name() const; + const char *args() const; + + bool is_prefix() const; + bool is_call() const; + bool is_return() const; + + const dasm_s &prefix_get(uint8_t op) const; + + uint8_t m_token; + const void *m_args; + + static const char *const token_names[]; + }; + + enum + { + prefix = 0, + illegal, + ACI, + ADC, + ADCW, + ADCX, + ADD, + ADDNC, + ADDNCW, + ADDNCX, + ADDW, + ADDX, + ADI, + ADINC, + ANA, + ANAW, + ANAX, + AND, + ANI, + ANIW, + BIT, + BLOCK, + CALB, + CALF, + CALL, + CALT, + CLC, + CLR, /* 7807 */ + CMC, /* 7807 */ + DAA, + DADC, + DADD, + DADDNC, + DAN, + DCR, + DCRW, + DCX, + DEQ, + DGT, + DI, + DIV, + DLT, + DMOV, + DNE, + DOFF, + DON, + DOR, + DRLL, + DRLR, + DSBB, + DSLL, + DSLR, + DSUB, + DSUBNB, + DXR, + EADD, + EI, + EQA, + EQAW, + EQAX, + EQI, + EQIW, + ESUB, + EX, /* 7801 */ + EXA, + EXH, + EXX, + EXR, /* 7807 */ + GTA, + GTAW, + GTAX, + GTI, + GTIW, + HALT, + IN, /* 7801 */ + INR, + INRW, + INX, + JB, + JEA, + JMP, + JR, + JRE, + LBCD, + LDAW, + LDAX, + LDEAX, + LDED, + LHLD, + LSPD, + LTA, + LTAW, + LTAX, + LTI, + LTIW, + LXI, + MOV, + MUL, + MVI, + MVIW, + MVIX, + NEA, + NEAW, + NEAX, + NEGA, + NEI, + NEIW, + NOP, + NOT, /* 7807 */ + OFFA, + OFFAW, + OFFAX, + OFFI, + OFFIW, + ONA, + ONAW, + ONAX, + ONI, + ONIW, + OR, /* 7807 */ + ORA, + ORAW, + ORAX, + ORI, + ORIW, + OUT, /* 7801 */ + PER, /* 7801 */ + PEX, /* 7801 */ + POP, + PUSH, + RET, + RETI, + RETS, + RLD, + RLL, + RLR, + RRD, + SBB, + SBBW, + SBBX, + SBCD, + SBI, + SDED, + SETB, /* 7807 */ + SHLD, + SIO, /* 7801 */ + SK, + SKIT, + SKN, + SKNIT, + SLL, + SLLC, + SLR, + SLRC, + SOFTI, + SSPD, + STAW, + STAX, + STC, + STEAX, + STM, /* 7801 */ + STOP, + SUB, + SUBNB, + SUBNBW, + SUBNBX, + SUBW, + SUBX, + SUI, + SUINB, + TABLE, + XOR, /* 7807 */ + XRA, + XRAW, + XRAX, + XRI + }; + + upd7810_base_disassembler(const dasm_s *table, bool is_7810); + virtual u32 opcode_alignment() const override; + virtual offs_t disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms) override; + + static const char *const regname[32]; + static const dasm_s d60[256]; + static const dasm_s d70[256]; + static const dasm_s d74[256]; + + bool m_is_7810; + const dasm_s *m_dasmXX; +}; + +class upd7810_disassembler : public upd7810_base_disassembler +{ +public: + static const dasm_s XX_7810[256]; + static const dasm_s d48_7810[256]; + static const dasm_s d4C_7810[256]; + static const dasm_s d4D_7810[256]; + static const dasm_s d64_7810[256]; + + upd7810_disassembler(); + virtual ~upd7810_disassembler() = default; +}; + +class upd7807_disassembler : public upd7810_base_disassembler +{ +public: + static const dasm_s XX_7807[256]; + static const dasm_s d48_7807[256]; + static const dasm_s d4C_7807[256]; + static const dasm_s d4D_7807[256]; + static const dasm_s d64_7807[256]; + + upd7807_disassembler(); + virtual ~upd7807_disassembler() = default; +}; + +class upd7801_disassembler : public upd7810_base_disassembler +{ +public: + static const dasm_s XX_7801[256]; + static const dasm_s d48_7801[256]; + static const dasm_s d4C_7801[256]; + static const dasm_s d4D_7801[256]; + static const dasm_s d60_7801[256]; + static const dasm_s d64_7801[256]; + static const dasm_s d70_7801[256]; + static const dasm_s d74_7801[256]; + + upd7801_disassembler(); + virtual ~upd7801_disassembler() = default; +}; + +class upd78c05_disassembler : public upd7810_base_disassembler +{ +public: + static const dasm_s XX_78c05[256]; + static const dasm_s d48_78c05[256]; + static const dasm_s d4C_78c05[256]; + static const dasm_s d4D_78c05[256]; + static const dasm_s d60_78c05[256]; + static const dasm_s d64_78c05[256]; + static const dasm_s d70_78c05[256]; + static const dasm_s d74_78c05[256]; + + upd78c05_disassembler(); + virtual ~upd78c05_disassembler() = default; +}; + +#endif |