summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/vax
diff options
context:
space:
mode:
author holub <andrei.holub@gmail.com>2024-12-27 21:56:18 -0500
committer GitHub <noreply@github.com>2024-12-27 21:56:18 -0500
commit07cc2cf76ab85656a11aee05c308176e4e1c9105 (patch)
treea79068c6042d8446826c34fd199e414fd2251dfa /src/devices/cpu/vax
parent39aac1bc7035c10a41bcf0547139279651249519 (diff)
cpu/mpk1839/kl1839vm1.cpp: Improved VAX-11 code decoder in user space (#13107)
Diffstat (limited to 'src/devices/cpu/vax')
-rw-r--r--src/devices/cpu/vax/vaxdasm.cpp46
-rw-r--r--src/devices/cpu/vax/vaxdasm.h14
2 files changed, 33 insertions, 27 deletions
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;