From 07cc2cf76ab85656a11aee05c308176e4e1c9105 Mon Sep 17 00:00:00 2001 From: holub Date: Fri, 27 Dec 2024 21:56:18 -0500 Subject: cpu/mpk1839/kl1839vm1.cpp: Improved VAX-11 code decoder in user space (#13107) --- src/devices/cpu/vax/vaxdasm.cpp | 46 ++++++++++++++++++----------------------- src/devices/cpu/vax/vaxdasm.h | 14 ++++++++++++- 2 files changed, 33 insertions(+), 27 deletions(-) (limited to 'src/devices/cpu/vax') diff --git a/src/devices/cpu/vax/vaxdasm.cpp b/src/devices/cpu/vax/vaxdasm.cpp index 423f5746ebc..229d3972fda 100644 --- a/src/devices/cpu/vax/vaxdasm.cpp +++ b/src/devices/cpu/vax/vaxdasm.cpp @@ -23,37 +23,11 @@ u32 vax_disassembler::opcode_alignment() const return 1; } -enum class vax_disassembler::mode : u8 -{ - none, - rb, srb, urb, cntb, rw, srw, urw, mskw, rl, srl, url, posl, prl, rq, srq, urq, ro, uro, - mb, mw, ml, mq, mo, - wb, ww, wl, wq, wo, - ab, aw, al, aq, ao, - bb, bw, - vb -}; - namespace { using namespace std::literals; using mode = vax_disassembler::mode; -static constexpr bool is_read_mode(mode m) -{ - switch (m) - { - case mode::rb: case mode::srb: case mode::urb: case mode::cntb: - case mode::rw: case mode::srw: case mode::urw: case mode::mskw: - case mode::rl: case mode::srl: case mode::url: case mode::posl: case mode::prl: - case mode::rq: case mode::urq: - case mode::ro: case mode::uro: - return true; - default: - return false; - } -} - static constexpr bool is_address_mode(mode m) { return m == mode::ab || m == mode::aw || m == mode::al || m == mode::aq || m == mode::ao; @@ -1119,3 +1093,23 @@ offs_t vax_disassembler::disassemble(std::ostream &stream, offs_t pc, const vax_ else return disassemble_inst(stream, s_nonprefix_ops[op], pc, ppc, opcodes); } + +bool vax_disassembler::is_read_mode(vax_disassembler::mode m) +{ + switch (m) + { + case mode::rb: case mode::srb: case mode::urb: case mode::cntb: + case mode::rw: case mode::srw: case mode::urw: case mode::mskw: + case mode::rl: case mode::srl: case mode::url: case mode::posl: case mode::prl: + case mode::rq: case mode::urq: + case mode::ro: case mode::uro: + return true; + default: + return false; + } +} + +const vax_disassembler::mode* vax_disassembler::get_operands(u8 op) +{ + return s_nonprefix_ops[op].operand; +} diff --git a/src/devices/cpu/vax/vaxdasm.h b/src/devices/cpu/vax/vaxdasm.h index e5549d4d59f..e12657daab9 100644 --- a/src/devices/cpu/vax/vaxdasm.h +++ b/src/devices/cpu/vax/vaxdasm.h @@ -9,7 +9,16 @@ class vax_disassembler : public util::disasm_interface { public: - enum class mode : u8; + enum class mode : u8 + { + none, + rb, srb, urb, cntb, rw, srw, urw, mskw, rl, srl, url, posl, prl, rq, srq, urq, ro, uro, + mb, mw, ml, mq, mo, + wb, ww, wl, wq, wo, + ab, aw, al, aq, ao, + bb, bw, + vb + }; struct opdef { @@ -21,6 +30,9 @@ public: // construction/destruction vax_disassembler(); + static bool is_read_mode(mode m); + static const mode* get_operands(u8 op); + protected: // disassembler overrides virtual u32 opcode_alignment() const override; -- cgit v1.2.3-70-g09d2