diff options
Diffstat (limited to 'src/emu/didisasm.h')
-rw-r--r-- | src/emu/didisasm.h | 46 |
1 files changed, 12 insertions, 34 deletions
diff --git a/src/emu/didisasm.h b/src/emu/didisasm.h index df0d755e7d2..6b816f38d61 100644 --- a/src/emu/didisasm.h +++ b/src/emu/didisasm.h @@ -7,20 +7,19 @@ Device disassembly interfaces. ***************************************************************************/ +#ifndef MAME_EMU_DIDISASM_H +#define MAME_EMU_DIDISASM_H #pragma once -#ifndef __EMU_H__ -#error Dont include this file directly; include emu.h instead. -#endif +#include "disasmintf.h" -#ifndef MAME_EMU_DIDISASM_H -#define MAME_EMU_DIDISASM_H +#include <memory> +#include <utility> -#include "disasmintf.h" #define MCFG_DEVICE_DISASSEMBLE_OVERRIDE(_class, _func) \ - dynamic_cast<device_disasm_interface *>(device)->set_dasm_override(dasm_override_delegate(&_class::_func, #_class "::" #_func, nullptr, (_class *)nullptr)); + dynamic_cast<device_disasm_interface *>(device)->set_dasm_override(dasm_override_delegate(&_class::_func, #_class "::" #_func, nullptr, (_class *)nullptr)); //************************************************************************** // TYPE DEFINITIONS @@ -41,12 +40,14 @@ public: // Override void set_dasm_override(dasm_override_delegate dasm_override); + template <typename Obj> void set_dasm_override(Obj &&cb) { m_dasm_override = std::forward<Obj>(cb); } + // disassembler request - util::disasm_interface *get_disassembler(); + util::disasm_interface &get_disassembler(); protected: // disassembler creation - virtual util::disasm_interface *create_disassembler() = 0; + virtual std::unique_ptr<util::disasm_interface> create_disassembler() = 0; // delegate resolving virtual void interface_pre_start() override; @@ -54,33 +55,10 @@ protected: private: std::unique_ptr<util::disasm_interface> m_disasm; dasm_override_delegate m_dasm_override; + bool m_started; }; // iterator typedef device_interface_iterator<device_disasm_interface> disasm_interface_iterator; -class device_disasm_indirect : public util::disasm_interface -{ -public: - device_disasm_indirect(util::disasm_interface *upper, dasm_override_delegate &dasm_override); - virtual ~device_disasm_indirect() = default; - - virtual u32 interface_flags() const override; - virtual u32 page_address_bits() const override; - virtual u32 page2_address_bits() const override; - virtual offs_t pc_linear_to_real(offs_t pc) const override; - virtual offs_t pc_real_to_linear(offs_t pc) const override; - virtual u8 decrypt8 (u8 value, offs_t pc, bool opcode) const override; - virtual u16 decrypt16(u16 value, offs_t pc, bool opcode) const override; - virtual u32 decrypt32(u32 value, offs_t pc, bool opcode) const override; - virtual u64 decrypt64(u64 value, offs_t pc, bool opcode) const override; - - 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: - std::unique_ptr<util::disasm_interface> m_disasm; - dasm_override_delegate &m_dasm_override; -}; - -#endif /* MAME_EMU_DIDISASM_H */ +#endif // MAME_EMU_DIDISASM_H |