summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/didisasm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/didisasm.cpp')
-rw-r--r--src/emu/didisasm.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/emu/didisasm.cpp b/src/emu/didisasm.cpp
index 9abca9e3f96..ef3882cba8b 100644
--- a/src/emu/didisasm.cpp
+++ b/src/emu/didisasm.cpp
@@ -21,6 +21,7 @@
device_disasm_interface::device_disasm_interface(const machine_config &mconfig, device_t &device)
: device_interface(device, "disasm")
+ , m_dasm_override(nullptr)
{
}
@@ -32,3 +33,35 @@ device_disasm_interface::device_disasm_interface(const machine_config &mconfig,
device_disasm_interface::~device_disasm_interface()
{
}
+
+
+//-------------------------------------------------
+// static_set_dasm_override - configuration
+// helper to override disassemble function
+//-------------------------------------------------
+
+void device_disasm_interface::static_set_dasm_override(device_t &device, dasm_override_func dasm_override)
+{
+ device_disasm_interface *dasm;
+ if (!device.interface(dasm))
+ throw emu_fatalerror("MCFG_DEVICE_DISASSEMBLE_OVERRIDE called on device '%s' with no disasm interface", device.tag());
+ dasm->m_dasm_override = dasm_override;
+}
+
+
+//-------------------------------------------------
+// disassemble - interface for disassembly
+//-------------------------------------------------
+
+offs_t device_disasm_interface::disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
+{
+ offs_t result = 0;
+
+ // check for disassembler override
+ if (m_dasm_override != nullptr)
+ result = (*m_dasm_override)(device(), buffer, pc, oprom, opram, options);
+ if (result == 0)
+ result = disasm_disassemble(buffer, pc, oprom, opram, options);
+
+ return result;
+}