summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/m88000/m88000d.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/m88000/m88000d.h')
-rw-r--r--src/devices/cpu/m88000/m88000d.h106
1 files changed, 106 insertions, 0 deletions
diff --git a/src/devices/cpu/m88000/m88000d.h b/src/devices/cpu/m88000/m88000d.h
new file mode 100644
index 00000000000..8bf421fa97c
--- /dev/null
+++ b/src/devices/cpu/m88000/m88000d.h
@@ -0,0 +1,106 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+
+#ifndef MAME_CPU_M88000_M88000D_H
+#define MAME_CPU_M88000_M88000D_H
+
+#pragma once
+
+#include <map>
+
+class m88000_disassembler : public util::disasm_interface
+{
+protected:
+ enum class addressing
+ {
+ TRIADIC,
+ FP,
+ IMM6,
+ BITFIELD,
+ SIMM16,
+ IMM16,
+ CR,
+ SI16_GRF,
+ SI16_XRF,
+ SCALED,
+ JUMP,
+ VEC9,
+ D16,
+ D26,
+ NONE
+ };
+
+ struct instruction
+ {
+ u32 mask;
+ const char *mnemonic;
+ addressing mode;
+ };
+
+ // construction/destruction
+ m88000_disassembler(const std::map<u32, const m88000_disassembler::instruction> &ops);
+
+ // disassembler overrides
+ virtual u32 opcode_alignment() const override;
+ virtual offs_t disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer &params) override;
+
+ // control register helpers
+ virtual void format_gcr(std::ostream &stream, u8 cr) = 0;
+ virtual void format_fcr(std::ostream &stream, u8 cr) = 0;
+
+private:
+ void format_condition(std::ostream &stream, u8 cnd);
+
+ // disassembly helpers
+ offs_t dasm_triadic(std::ostream &stream, const char *mnemonic, u32 inst);
+ offs_t dasm_fp(std::ostream &stream, const char *mnemonic, u32 inst);
+ offs_t dasm_imm6(std::ostream &stream, const char *mnemonic, u32 inst);
+ offs_t dasm_bitfield(std::ostream &stream, const char *mnemonic, u32 inst);
+ offs_t dasm_simm16(std::ostream &stream, const char *mnemonic, u32 inst);
+ offs_t dasm_imm16(std::ostream &stream, const char *mnemonic, u32 inst);
+ offs_t dasm_cr(std::ostream &stream, const char *mnemonic, u32 inst);
+ offs_t dasm_si16(std::ostream &stream, const char *mnemonic, u32 inst, bool xrf);
+ offs_t dasm_scaled(std::ostream &stream, const char *mnemonic, u32 inst);
+ offs_t dasm_jump(std::ostream &stream, const char *mnemonic, u32 inst);
+ offs_t dasm_vec9(std::ostream &stream, const char *mnemonic, u32 inst);
+ offs_t dasm_d16(std::ostream &stream, const char *mnemonic, u32 inst, offs_t pc);
+ offs_t dasm_d26(std::ostream &stream, const char *mnemonic, u32 inst, offs_t pc);
+ offs_t dasm_none(std::ostream &stream, const char *mnemonic, u32 inst);
+ offs_t dasm_illop(std::ostream &stream, u32 inst);
+
+ const std::map<u32, const instruction> &m_ops;
+};
+
+class mc88100_disassembler : public m88000_disassembler
+{
+public:
+ // construction/destruction
+ mc88100_disassembler();
+
+protected:
+ // control register helpers
+ virtual void format_gcr(std::ostream &stream, u8 cr) override;
+ virtual void format_fcr(std::ostream &stream, u8 cr) override;
+
+private:
+ // decode map
+ static const std::map<u32, const instruction> s_ops;
+};
+
+class mc88110_disassembler : public m88000_disassembler
+{
+public:
+ // construction/destruction
+ mc88110_disassembler();
+
+protected:
+ // control register helpers
+ virtual void format_gcr(std::ostream &stream, u8 cr) override;
+ virtual void format_fcr(std::ostream &stream, u8 cr) override;
+
+private:
+ // decode map
+ static const std::map<u32, const instruction> s_ops;
+};
+
+#endif // MAME_CPU_M88000_M88000D_H