gpgx: move to normal tracing method too
CallbackBasedTraceBuffer seems deprecated
This commit is contained in:
parent
799afc6b0a
commit
8e92c5fd17
|
@ -108,7 +108,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
if (ToWindowRadio.Checked)
|
||||
TraceView.VirtualListSize = _instructions.Count;
|
||||
else
|
||||
else if (_streamWriter != null)
|
||||
{
|
||||
_streamWriter.Close();
|
||||
_streamWriter = null;
|
||||
|
|
|
@ -48,6 +48,11 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx
|
|||
Frame++;
|
||||
_drivelight = false;
|
||||
|
||||
if (Tracer.Enabled)
|
||||
LibGPGX.gpgx_set_trace_callback(_tracecb);
|
||||
else
|
||||
LibGPGX.gpgx_set_trace_callback(null);
|
||||
|
||||
LibGPGX.gpgx_advance();
|
||||
UpdateVideo();
|
||||
update_audio();
|
||||
|
|
|
@ -9,58 +9,60 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx
|
|||
{
|
||||
public partial class GPGX
|
||||
{
|
||||
private readonly ITraceable Tracer;
|
||||
public TraceBuffer Tracer { get; private set; }
|
||||
|
||||
public class GPGXTraceBuffer : CallbackBasedTraceBuffer
|
||||
private LibGPGX.trace_cb _tracecb;
|
||||
|
||||
private void MakeTrace()
|
||||
{
|
||||
public GPGXTraceBuffer(IDebuggable debuggableCore, IMemoryDomains memoryDomains, IDisassemblable disassembler)
|
||||
: base(debuggableCore, memoryDomains, disassembler)
|
||||
var regs = GetCpuFlagsAndRegisters();
|
||||
uint pc = (uint)regs["M68K PC"].Value;
|
||||
var length = 0;
|
||||
var disasm = Disassemble(MemoryDomains.SystemBus, pc, out length).PadRight(40);
|
||||
|
||||
var traceInfo = new TraceInfo
|
||||
{
|
||||
Header = "M68K: PC, machine code, mnemonic, arguments, registers (D0-D7, A0-A7, SR, USP, status flags)";
|
||||
}
|
||||
Disassembly = string.Format("{0:X6}: {1}", pc, disasm)
|
||||
};
|
||||
|
||||
public override void TraceFromCallback()
|
||||
var sb = new StringBuilder();
|
||||
|
||||
foreach (var r in regs)
|
||||
{
|
||||
var regs = DebuggableCore.GetCpuFlagsAndRegisters();
|
||||
uint pc = (uint)regs["M68K PC"].Value;
|
||||
var length = 0;
|
||||
var disasm = Disassembler.Disassemble(MemoryDomains.SystemBus, pc, out length);
|
||||
|
||||
var traceInfo = new TraceInfo
|
||||
if (r.Key.StartsWith("M68K")) // drop Z80 regs until it has its own debugger/tracer
|
||||
{
|
||||
Disassembly = string.Format("{0:X6}: {1}", pc, disasm)
|
||||
};
|
||||
|
||||
var sb = new StringBuilder();
|
||||
|
||||
foreach (var r in regs)
|
||||
{
|
||||
if (r.Key.StartsWith("M68K")) // drop Z80 regs until it has its own debugger/tracer
|
||||
if (r.Key != "M68K SP" && r.Key != "M68K ISP" && // copies of a7
|
||||
r.Key != "M68K PC" && // already present in every line start
|
||||
r.Key != "M68K IR") // copy of last opcode, already shown in raw bytes
|
||||
{
|
||||
if (r.Key != "M68K SP" && r.Key != "M68K ISP" && // copies of a7
|
||||
r.Key != "M68K PC" && // already present in every line start
|
||||
r.Key != "M68K IR") // copy of last opcode, already shown in raw bytes
|
||||
{
|
||||
sb.Append(
|
||||
string.Format("{0}:{1} ",
|
||||
r.Key.Replace("M68K", string.Empty).Trim(),
|
||||
r.Value.Value.ToHexString(r.Value.BitSize / 4)));
|
||||
}
|
||||
sb.Append(
|
||||
string.Format("{0}:{1} ",
|
||||
r.Key.Replace("M68K", string.Empty).Trim(),
|
||||
r.Value.Value.ToHexString(r.Value.BitSize / 4)));
|
||||
}
|
||||
}
|
||||
var sr = regs["M68K SR"].Value;
|
||||
sb.Append(
|
||||
string.Format("{0}{1}{2}{3}{4}",
|
||||
(sr & 16) > 0 ? "X" : "x",
|
||||
(sr & 8) > 0 ? "N" : "n",
|
||||
(sr & 4) > 0 ? "Z" : "z",
|
||||
(sr & 2) > 0 ? "V" : "v",
|
||||
(sr & 1) > 0 ? "C" : "c"));
|
||||
|
||||
traceInfo.RegisterInfo = sb.ToString().Trim();
|
||||
|
||||
Put(traceInfo);
|
||||
}
|
||||
var sr = regs["M68K SR"].Value;
|
||||
sb.Append(
|
||||
string.Format("{0}{1}{2}{3}{4}",
|
||||
(sr & 16) > 0 ? "X" : "x",
|
||||
(sr & 8) > 0 ? "N" : "n",
|
||||
(sr & 4) > 0 ? "Z" : "z",
|
||||
(sr & 2) > 0 ? "V" : "v",
|
||||
(sr & 1) > 0 ? "C" : "c"));
|
||||
|
||||
traceInfo.RegisterInfo = sb.ToString().Trim();
|
||||
|
||||
Tracer.Put(traceInfo);
|
||||
}
|
||||
|
||||
private const string TraceHeader = "M68K: PC, machine code, mnemonic, arguments, registers (D0-D7, A0-A7, SR, USP, status flags)";
|
||||
|
||||
private void ConnectTracer()
|
||||
{
|
||||
Tracer = new TraceBuffer { Header = TraceHeader };
|
||||
(ServiceProvider as BasicServiceProvider).Register<ITraceable>(Tracer);
|
||||
_tracecb = new LibGPGX.trace_cb(MakeTrace);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -164,8 +164,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx
|
|||
InitMemCallbacks();
|
||||
KillMemCallbacks();
|
||||
|
||||
Tracer = new GPGXTraceBuffer(this, MemoryDomains, this);
|
||||
(ServiceProvider as BasicServiceProvider).Register<ITraceable>(Tracer);
|
||||
ConnectTracer();
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
|
|
@ -155,12 +155,18 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx
|
|||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||
public delegate void mem_cb(uint addr);
|
||||
|
||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||
public delegate void CDCallback(int addr, CDLog_AddrType addrtype, CDLog_Flags flags);
|
||||
|
||||
[DllImport("libgenplusgx.dll", CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern void gpgx_set_mem_callback(mem_cb read, mem_cb write, mem_cb exec);
|
||||
|
||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||
public delegate void trace_cb();
|
||||
|
||||
[DllImport("libgenplusgx.dll", CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern void gpgx_set_trace_callback(trace_cb cb);
|
||||
|
||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||
public delegate void CDCallback(int addr, CDLog_AddrType addrtype, CDLog_Flags flags);
|
||||
|
||||
[DllImport("libgenplusgx.dll", CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern void gpgx_set_cd_callback(CDCallback cd);
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ typedef void (*CDCallback)(int32 addr, int32 addrtype, int32 flags);
|
|||
extern void (*biz_execcb)(unsigned addr);
|
||||
extern void (*biz_readcb)(unsigned addr);
|
||||
extern void (*biz_writecb)(unsigned addr);
|
||||
extern void (*biz_tracecb)(void);
|
||||
extern CDCallback biz_cdcallback;
|
||||
extern unsigned biz_lastpc;
|
||||
|
||||
|
|
|
@ -60,6 +60,7 @@ extern void zap(void);
|
|||
void (*biz_execcb)(unsigned addr) = NULL;
|
||||
void (*biz_readcb)(unsigned addr) = NULL;
|
||||
void (*biz_writecb)(unsigned addr) = NULL;
|
||||
void (*biz_tracecb)(void) = NULL;
|
||||
CDCallback biz_cdcallback = NULL;
|
||||
unsigned biz_lastpc = 0;
|
||||
|
||||
|
@ -595,6 +596,11 @@ GPGX_EX void gpgx_set_mem_callback(void (*read)(unsigned), void (*write)(unsigne
|
|||
biz_execcb = exec;
|
||||
}
|
||||
|
||||
GPGX_EX void gpgx_set_trace_callback(void (*trace)(void))
|
||||
{
|
||||
biz_tracecb = trace;
|
||||
}
|
||||
|
||||
GPGX_EX void gpgx_set_cd_callback(CDCallback cdcallback)
|
||||
{
|
||||
biz_cdcallback = cdcallback;
|
||||
|
|
|
@ -339,6 +339,9 @@ void m68k_run(unsigned int cycles)
|
|||
/* Set the address space for reads */
|
||||
m68ki_use_data_space() /* auto-disable (see m68kcpu.h) */
|
||||
|
||||
if (biz_tracecb)
|
||||
biz_tracecb();
|
||||
|
||||
if (biz_execcb)
|
||||
biz_execcb(REG_PC);
|
||||
|
||||
|
|
Binary file not shown.
Loading…
Reference in New Issue