diff options
Diffstat (limited to 'src/devices/cpu/st9/st9dasm.h')
-rw-r--r-- | src/devices/cpu/st9/st9dasm.h | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/src/devices/cpu/st9/st9dasm.h b/src/devices/cpu/st9/st9dasm.h new file mode 100644 index 00000000000..95a7169ee98 --- /dev/null +++ b/src/devices/cpu/st9/st9dasm.h @@ -0,0 +1,90 @@ +// license:BSD-3-Clause +// copyright-holders:AJR + +#ifndef MAME_CPU_ST9_ST9DASM_H +#define MAME_CPU_ST9_ST9DASM_H + +#pragma once + +class st9_disassembler : public util::disasm_interface +{ +public: + // construction/destruction + st9_disassembler(); + +protected: + // util::disasm_interface 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; + + // formatting helpers + void format_dir(std::ostream &stream, u8 r) const; + void format_dirw(std::ostream &stream, u8 rr) const; + void format_imm(std::ostream &stream, u8 n) const; + void format_immw(std::ostream &stream, u16 n) const; + void format_disp(std::ostream &stream, s8 n) const; + void format_dispw(std::ostream &stream, u16 nn) const; + void format_label(std::ostream &stream, u16 nn) const; + + // disassembly helpers + offs_t dasm_unknown(std::ostream &stream, u8 opc) const; + offs_t dasm_06(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_0f(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_1f(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_26(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_2f(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_36(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + virtual offs_t dasm_3f(std::ostream &stream, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_60(std::ostream &stream, u8 byte1, u8 byte2) const; + offs_t dasm_6f(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_72(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + virtual offs_t dasm_73(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_74(std::ostream &stream, u8 byte1) const; + virtual offs_t dasm_75(std::ostream &stream, u8 byte1) const; + offs_t dasm_7e(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_7f(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_86(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_8f(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_96(std::ostream &stream, u8 byte1, u8 byte2) const; + offs_t dasm_a6(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_b4(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + virtual offs_t dasm_b6(std::ostream &stream, u8 opc, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_be(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_bf(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_c2(std::ostream &stream, u8 opc, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_c4(std::ostream &stream, u8 opc, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_c6(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_c7(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_cf(std::ostream &stream, u8 opc, u8 byte1) const; + virtual offs_t dasm_d4(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_d5(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_e2(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_e6(std::ostream &stream, u8 byte1, u8 byte2) const; + offs_t dasm_e7(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_ef(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_f2(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + offs_t dasm_f3(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const; + virtual offs_t dasm_f6(std::ostream &stream, u8 byte1) const; +}; + +class st9p_disassembler : public st9_disassembler +{ +public: + // construction/destruction + using st9_disassembler::st9_disassembler; + +protected: + // util::disasm_interface overrides + virtual u32 interface_flags() const override; + virtual u32 page_address_bits() const override; + + // st9_disassembler overrides + virtual offs_t dasm_3f(std::ostream &stream, offs_t pc, const data_buffer &opcodes) const override; + virtual offs_t dasm_73(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const override; + virtual offs_t dasm_75(std::ostream &stream, u8 byte1) const override; + virtual offs_t dasm_b6(std::ostream &stream, u8 opc, u8 byte1, offs_t pc, const data_buffer &opcodes) const override; + virtual offs_t dasm_d4(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const override; + virtual offs_t dasm_f6(std::ostream &stream, u8 byte1) const override; +}; + +#endif // MAME_CPU_ST9_ST9DASM_H |