2017-04-15 19:53:02 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
|
|
|
|
using BizHawk.Emulation.Common;
|
|
|
|
|
using BizHawk.Common.NumberExtensions;
|
|
|
|
|
|
|
|
|
|
namespace BizHawk.Emulation.Cores.Sony.PSX
|
|
|
|
|
{
|
|
|
|
|
public partial class Octoshock
|
|
|
|
|
{
|
2016-08-21 20:52:42 +00:00
|
|
|
|
public TraceBuffer Tracer { get; private set; }
|
|
|
|
|
|
|
|
|
|
public static string TraceHeader = "R3000A: PC, machine code, mnemonic, operands, registers (GPRs, lo, hi, sr, cause, epc)";
|
2016-08-21 20:27:31 +00:00
|
|
|
|
|
|
|
|
|
OctoshockDll.ShockCallback_Trace trace_cb;
|
2017-04-15 19:53:02 +00:00
|
|
|
|
|
|
|
|
|
public void ShockTraceCallback(IntPtr opaque, uint PC, uint inst, string dis)
|
|
|
|
|
{
|
|
|
|
|
var regs = GetCpuFlagsAndRegisters();
|
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
|
|
|
|
|
|
foreach (var r in regs)
|
|
|
|
|
{
|
|
|
|
|
if (r.Key != "pc")
|
2019-04-03 16:41:18 +00:00
|
|
|
|
sb.Append($"{r.Key}:{r.Value.Value.ToHexString(r.Value.BitSize / 4)} ");
|
2016-08-21 20:27:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-04-15 19:53:02 +00:00
|
|
|
|
Tracer.Put(new TraceInfo
|
|
|
|
|
{
|
2019-04-03 16:41:18 +00:00
|
|
|
|
Disassembly = $"{PC:X8}: {inst:X8} {dis.PadRight(30)}",
|
2017-04-15 19:53:02 +00:00
|
|
|
|
RegisterInfo = sb.ToString().Trim()
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2016-08-23 21:04:44 +00:00
|
|
|
|
private void ConnectTracer()
|
|
|
|
|
{
|
2017-04-15 19:53:02 +00:00
|
|
|
|
trace_cb = new OctoshockDll.ShockCallback_Trace(ShockTraceCallback);
|
|
|
|
|
Tracer = new TraceBuffer() { Header = TraceHeader };
|
|
|
|
|
ServiceProvider = new BasicServiceProvider(this);
|
|
|
|
|
(ServiceProvider as BasicServiceProvider).Register<ITraceable>(Tracer);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|