1 // license:BSD-3-Clause 2 // copyright-holders:Vas Crabb 3 /***************************************************************************** 4 * 5 * 4004dasm.cpp 6 * 7 * Intel MCS-40 CPU Disassembly 8 * 9 *****************************************************************************/ 10 11 #ifndef MAME_CPU_MCS40_MCS40DASM_H 12 #define MAME_CPU_MCS40_MCS40DASM_H 13 14 #pragma once 15 16 class mcs40_disassembler : public util::disasm_interface 17 { 18 public: 19 enum class level 20 { 21 I4004, 22 I4040 23 }; 24 25 mcs40_disassembler(level lvl, unsigned pcmask); 26 virtual ~mcs40_disassembler() = default; 27 28 virtual u32 opcode_alignment() const override; 29 virtual offs_t disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms) override; 30 interface_flags()31 virtual u32 interface_flags() const override { return PAGED; } page_address_bits()32 virtual u32 page_address_bits() const override { return 12; } 33 34 private: 35 enum class format 36 { 37 ILL, 38 SIMPLE, 39 IMM4, 40 REG, 41 REGPAGE, 42 PAIR, 43 PAIRIMM, 44 ABS, 45 PAGE, 46 COND, 47 EXT 48 }; 49 50 struct op 51 { 52 format m_format; 53 level m_level; 54 char const *m_name; 55 op const *m_ext; 56 }; 57 58 static op const f_opx_0[16]; 59 static op const f_opx_2[16]; 60 static op const f_opx_3[16]; 61 static op const f_opx_io[16]; 62 static op const f_opx_f[16]; 63 static op const f_ops[16]; 64 static char const *const f_cond[16]; 65 66 level m_lvl; 67 unsigned m_pcmask; 68 }; 69 70 class i4004_disassembler : public mcs40_disassembler 71 { 72 public: 73 i4004_disassembler(); 74 virtual ~i4004_disassembler() = default; 75 }; 76 77 class i4040_disassembler : public mcs40_disassembler 78 { 79 public: 80 i4040_disassembler(); 81 virtual ~i4040_disassembler() = default; 82 }; 83 84 #endif 85