From 78f20510e514abceb4a11a9741c41cf9fedd4f89 Mon Sep 17 00:00:00 2001 From: feos Date: Sun, 21 Feb 2016 18:13:45 +0300 Subject: [PATCH] lua: emu.disassemble(uint pc, string name = "") --- .../lua/EmuLuaLibrary.Emu.cs | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/BizHawk.Client.Common/lua/EmuLuaLibrary.Emu.cs b/BizHawk.Client.Common/lua/EmuLuaLibrary.Emu.cs index 93f55f608f..40430ffee2 100644 --- a/BizHawk.Client.Common/lua/EmuLuaLibrary.Emu.cs +++ b/BizHawk.Client.Common/lua/EmuLuaLibrary.Emu.cs @@ -25,6 +25,12 @@ namespace BizHawk.Client.Common [OptionalService] public IDebuggable DebuggableCore { get; set; } + [OptionalService] + public IDisassemblable DisassemblableCore { get; set; } + + [OptionalService] + private IMemoryDomains MemoryDomains { get; set; } + [OptionalService] public IInputPollable InputPollableCore { get; set; } @@ -66,6 +72,37 @@ namespace BizHawk.Client.Common return Emulator.Frame; } + [LuaMethodAttributes( + "disassemble", + "Returns the disassembly object (disasm string and length int) for the given PC address. Uses System Bus domain if no domain name provided" + )] + public object Disassemble(uint pc, string name = "") + { + try + { + if (DisassemblableCore == null) + { + throw new NotImplementedException(); + } + + int l; + MemoryDomain domain = MemoryDomains.SystemBus; + + if (!string.IsNullOrEmpty(name)) + domain = MemoryDomains[name]; + + var d = DisassemblableCore.Disassemble(domain, pc, out l); + return new { disasm = d, length = l }; + } + catch (NotImplementedException) + { + Log(string.Format( + "Error: {0} does not yet implement disassemble()", + Emulator.Attributes().CoreName)); + return null; + } + } + // TODO: what about 64 bit registers? [LuaMethodAttributes( "getregister",