diff options
Diffstat (limited to 'src/devices/cpu/h16/h16dasm.h')
-rw-r--r-- | src/devices/cpu/h16/h16dasm.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/devices/cpu/h16/h16dasm.h b/src/devices/cpu/h16/h16dasm.h new file mode 100644 index 00000000000..e8a633728f8 --- /dev/null +++ b/src/devices/cpu/h16/h16dasm.h @@ -0,0 +1,55 @@ +// license:BSD-3-Clause +// copyright-holders:AJR + +#ifndef MAME_CPU_H16_H16DASM_H +#define MAME_CPU_H16_H16DASM_H + +#pragma once + +class h16_disassembler : public util::disasm_interface +{ +public: + // construction/destruction + h16_disassembler(); + + // 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 ¶ms) override; + +private: + enum class ea_mode { + SIGNED, + UNSIGNED, + DESTINATION, + MEMORY, + PLAIN_MEMORY, + ADDRESS, + BITFIELD + }; + + static const char *const s_conditions[16]; + static const char *const s_term_conditions[16]; + static const char *const s_basic_ops[4]; + static const char *const s_logical_ops[3]; + static const char *const s_sft_ops[8]; + static const char *const s_bit_ops[4]; + static const char *const s_bf_ops[3]; + static const char *const s_cr_ops[5]; + + // formatting/disassembly helpers + void format_register(std::ostream &stream, char bank, u8 n) const; + void format_register_to_register(std::ostream &stream, u8 rr) const; + void format_register_list(std::ostream &stream, u16 rl) const; + u8 get_cr_size(u8 cr) const; + void format_cr(std::ostream &stream, u8 cr) const; + void format_s8(std::ostream &stream, u8 data) const; + void format_s16(std::ostream &stream, u16 data) const; + void format_s32(std::ostream &stream, u32 data) const; + void dasm_displacement(std::ostream &stream, offs_t &pc, const data_buffer &opcodes, u8 sd) const; + void dasm_ea(std::ostream &stream, offs_t &pc, const h16_disassembler::data_buffer &opcodes, u8 ea, char bank, ea_mode mode, u8 sz) const; + void dasm_eas_ead(std::ostream &stream, offs_t &pc, const h16_disassembler::data_buffer &opcodes, ea_mode smode, ea_mode dmode, u8 sz) const; + void dasm_eas_ead(std::ostream &stream, offs_t &pc, const h16_disassembler::data_buffer &opcodes, ea_mode smode, ea_mode dmode, u8 szs, u8 szd) const; + void dasm_branch_disp(std::ostream &stream, offs_t &pc, const h16_disassembler::data_buffer &opcodes, u8 sz) const; +}; + +#endif // MAME_CPU_H16_H16DASM_H |