summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/mcs40/mcs40dasm.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/mcs40/mcs40dasm.h')
-rw-r--r--src/devices/cpu/mcs40/mcs40dasm.h81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/devices/cpu/mcs40/mcs40dasm.h b/src/devices/cpu/mcs40/mcs40dasm.h
new file mode 100644
index 00000000000..937b71d9358
--- /dev/null
+++ b/src/devices/cpu/mcs40/mcs40dasm.h
@@ -0,0 +1,81 @@
+// license:BSD-3-Clause
+// copyright-holders:Vas Crabb
+/*****************************************************************************
+ *
+ * 4004dasm.cpp
+ *
+ * Intel MCS-40 CPU Disassembly
+ *
+ *****************************************************************************/
+
+#ifndef MAME_CPU_MCS40_MCS40DASM_H
+#define MAME_CPU_MCS40_MCS40DASM_H
+
+#pragma once
+
+class mcs40_disassembler : public util::disasm_interface
+{
+public:
+ enum class level
+ {
+ I4004,
+ I4040
+ };
+
+ mcs40_disassembler(level lvl, unsigned pcmask);
+ virtual ~mcs40_disassembler() = default;
+
+ 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;
+
+private:
+ enum class format
+ {
+ ILL,
+ SIMPLE,
+ IMM4,
+ REG,
+ REGPAGE,
+ PAIR,
+ PAIRIMM,
+ ABS,
+ PAGE,
+ COND,
+ EXT
+ };
+
+ struct op
+ {
+ format m_format;
+ level m_level;
+ char const *m_name;
+ op const *m_ext;
+ };
+
+ static op const f_opx_0[16];
+ static op const f_opx_2[16];
+ static op const f_opx_3[16];
+ static op const f_opx_io[16];
+ static op const f_opx_f[16];
+ static op const f_ops[16];
+ static char const *const f_cond[16];
+
+ level m_lvl;
+ unsigned m_pcmask;
+};
+
+class i4004_disassembler : public mcs40_disassembler
+{
+public:
+ i4004_disassembler();
+ virtual ~i4004_disassembler() = default;
+};
+
+class i4040_disassembler : public mcs40_disassembler
+{
+public:
+ i4040_disassembler();
+ virtual ~i4040_disassembler() = default;
+};
+
+#endif