diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.cs index 8a2f6f6e0d..84a24bf557 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.cs @@ -1,4 +1,5 @@ using System; +using System.Text; using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Nintendo.GBA @@ -58,7 +59,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA _tracer = new TraceBuffer() { - Header = "ARM7: PC, mnemonic, operands, registers" + Header = "ARM7: PC, machine code, mnemonic, operands, registers" }; _tracecb = new LibmGBA.TraceCallback((msg) => _tracer.Put(_traceInfo(msg))); ser.Register(_tracer); @@ -80,12 +81,24 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA private TraceInfo _traceInfo(string msg) { - var split = msg.Split('|'); + var disasm = msg.Split('|')[1]; + var split = disasm.Split(':'); + var machineCode = split[0].PadLeft(8); + var instruction = split[1].Trim(); + var regs = GetCpuFlagsAndRegisters(); + var wordSize = (regs["CPSR"].Value & 32) == 0 ? 4UL : 2UL; + var pc = regs["R15"].Value - wordSize * 2; + var sb = new StringBuilder(); + + for (var i = 0; i < RegisterNames.Length; i++) + { + sb.Append($" { RegisterNames[i] }:{ regs[RegisterNames[i]].Value:X8}"); + } return new TraceInfo { - Disassembly = split[1].Trim().PadRight(40), - RegisterInfo = split[0] + Disassembly = $"{pc:X8}: { machineCode } { instruction }".PadRight(50), + RegisterInfo = sb.ToString() }; }