summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/didisasm.cpp
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2016-06-24 22:34:13 -0400
committer AJR <ajrhacker@users.noreply.github.com>2016-06-24 22:34:13 -0400
commit38c4b762f03769155fb8f8d2ce7c9dd47ece5f46 (patch)
treeda1ed7105cd7d23f65cd8370d849be64922d2259 /src/emu/didisasm.cpp
parent9fccecfcf393e8d23e307e3a1a1fc590829b2136 (diff)
Move disasm overrides into interface, reducing driver-debugger dependencies (nw)
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;
+}