diff options
Diffstat (limited to 'src/devices/cpu/mcs40/mcs40dasm.h')
-rw-r--r-- | src/devices/cpu/mcs40/mcs40dasm.h | 81 |
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 ¶ms) 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 |