Refactor ITraceable and related types
This commit is contained in:
parent
9ec72fd543
commit
4973e3eba1
|
@ -15,8 +15,10 @@ namespace BizHawk.Emulation.Common
|
|||
/// </summary>
|
||||
public abstract class CallbackBasedTraceBuffer : ITraceable
|
||||
{
|
||||
private const string DEFAULT_HEADER = "Instructions";
|
||||
|
||||
/// <exception cref="InvalidOperationException"><paramref name="debuggableCore"/> does not provide memory callback support or does not implement <see cref="IDebuggable.GetCpuFlagsAndRegisters"/></exception>
|
||||
protected CallbackBasedTraceBuffer(IDebuggable debuggableCore, IMemoryDomains memoryDomains, IDisassemblable disassembler)
|
||||
protected CallbackBasedTraceBuffer(IDebuggable debuggableCore, IMemoryDomains memoryDomains, IDisassemblable disassembler, string header = DEFAULT_HEADER)
|
||||
{
|
||||
if (!debuggableCore.MemoryCallbacksAvailable())
|
||||
{
|
||||
|
@ -32,7 +34,7 @@ namespace BizHawk.Emulation.Common
|
|||
throw new InvalidOperationException($"{nameof(IDebuggable.GetCpuFlagsAndRegisters)} is required");
|
||||
}
|
||||
|
||||
Header = "Instructions";
|
||||
Header = header;
|
||||
DebuggableCore = debuggableCore;
|
||||
MemoryDomains = memoryDomains;
|
||||
Disassembler = disassembler;
|
||||
|
@ -48,20 +50,9 @@ namespace BizHawk.Emulation.Common
|
|||
|
||||
private ITraceSink _sink;
|
||||
|
||||
public bool Enabled => Sink != null;
|
||||
|
||||
public void Put(TraceInfo info)
|
||||
{
|
||||
Sink.Put(info);
|
||||
}
|
||||
|
||||
public ITraceSink Sink
|
||||
{
|
||||
private get
|
||||
{
|
||||
return _sink;
|
||||
}
|
||||
|
||||
get => _sink;
|
||||
set
|
||||
{
|
||||
_sink = value;
|
||||
|
@ -75,7 +66,7 @@ namespace BizHawk.Emulation.Common
|
|||
}
|
||||
}
|
||||
|
||||
public string Header { get; protected set; }
|
||||
public string Header { get; }
|
||||
|
||||
private class TracingMemoryCallback : IMemoryCallback
|
||||
{
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
#nullable disable
|
||||
|
||||
namespace BizHawk.Emulation.Common
|
||||
namespace BizHawk.Emulation.Common
|
||||
{
|
||||
/// <summary>
|
||||
/// A generic implementation of ITraceable that can be used by any core
|
||||
|
@ -8,15 +6,12 @@ namespace BizHawk.Emulation.Common
|
|||
/// <seealso cref="ITraceable" />
|
||||
public class TraceBuffer : ITraceable
|
||||
{
|
||||
public string Header { get; set; } = "Instructions";
|
||||
private const string DEFAULT_HEADER = "Instructions";
|
||||
|
||||
public ITraceSink Sink { private get; set; }
|
||||
public string Header { get; }
|
||||
|
||||
public bool Enabled => Sink != null;
|
||||
public ITraceSink? Sink { get; set; }
|
||||
|
||||
public void Put(TraceInfo info)
|
||||
{
|
||||
Sink.Put(info);
|
||||
}
|
||||
public TraceBuffer(string header = DEFAULT_HEADER) => Header = header;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -484,5 +484,10 @@ namespace BizHawk.Emulation.Common
|
|||
|
||||
public static string SystemIDToDisplayName(string sysID)
|
||||
=> SystemIDDisplayNames.TryGetValue(sysID, out var dispName) ? dispName : string.Empty;
|
||||
|
||||
public static bool IsEnabled(this ITraceable core) => core.Sink is not null;
|
||||
|
||||
/// <remarks>TODO no-op instead of NRE when not "enabled"?</remarks>
|
||||
public static void Put(this ITraceable core, TraceInfo info) => core.Sink.Put(info);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
#nullable disable
|
||||
|
||||
namespace BizHawk.Emulation.Common
|
||||
namespace BizHawk.Emulation.Common
|
||||
{
|
||||
public interface ITraceSink
|
||||
{
|
||||
|
@ -23,25 +21,19 @@ namespace BizHawk.Emulation.Common
|
|||
/// that's right, we can only have one sink.
|
||||
/// a sink can route to two other sinks if it has to, though
|
||||
/// </summary>
|
||||
ITraceSink Sink { set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether tracing is enabled
|
||||
/// This is defined as equivalent to Sink != null
|
||||
/// It's put here because it's such a common operation to check whether it's enabled, and it's not nice to write Sink != null all over
|
||||
/// </summary>
|
||||
bool Enabled { get; }
|
||||
|
||||
/// <summary>
|
||||
/// This is defined as equivalent to Sink.Put
|
||||
/// TBD: could it be defined as equivalent to if(Enabled) Sink.Put()? Probably not, that's just a small amount of wasted work
|
||||
/// </summary>
|
||||
void Put(TraceInfo info);
|
||||
ITraceSink? Sink { get; set; }
|
||||
}
|
||||
|
||||
public class TraceInfo
|
||||
public readonly struct TraceInfo
|
||||
{
|
||||
public string Disassembly { get; set; }
|
||||
public string RegisterInfo { get; set; }
|
||||
public readonly string Disassembly;
|
||||
|
||||
public readonly string RegisterInfo;
|
||||
|
||||
public TraceInfo(string disassembly, string registerInfo)
|
||||
{
|
||||
Disassembly = disassembly;
|
||||
RegisterInfo = registerInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,11 +19,9 @@ namespace BizHawk.Emulation.Cores.Components.CP1610
|
|||
public int opcode;
|
||||
|
||||
public TraceInfo CP1610State(bool disassemble = true)
|
||||
{
|
||||
return new TraceInfo
|
||||
{
|
||||
Disassembly = $"{RegisterPC - 1:X4}: {opcode:X2} {(disassemble ? Disassemble((ushort)(RegisterPC - 1), out _) : "---")} ".PadRight(26),
|
||||
RegisterInfo = string.Join(" ",
|
||||
=> new(
|
||||
disassembly: $"{RegisterPC - 1:X4}: {opcode:X2} {(disassemble ? Disassemble((ushort)(RegisterPC - 1), out _) : "---")} ".PadRight(26),
|
||||
registerInfo: string.Join(" ",
|
||||
new[]
|
||||
{
|
||||
$"Cy:{TotalExecutedCycles}",
|
||||
|
@ -34,10 +32,7 @@ namespace BizHawk.Emulation.Cores.Components.CP1610
|
|||
FlagO ? "O" : "o",
|
||||
FlagI ? "I" : "i",
|
||||
FlagD ? "D" : "d")
|
||||
}
|
||||
.Concat(Register.Select((r, i) => $"R{i}:{4:X4}")))
|
||||
};
|
||||
}
|
||||
}.Concat(Register.Select((r, i) => $"R{i}:{4:X4}"))));
|
||||
|
||||
private void Calc_FlagC(int result)
|
||||
{
|
||||
|
|
|
@ -381,11 +381,9 @@ namespace BizHawk.Emulation.Cores.Components.H6280
|
|||
public string TraceHeader => "HuC6280: PC, machine code, mnemonic, operands, registers (A, X, Y, P, SP, Cy), flags (NVTBDIZC)";
|
||||
|
||||
public TraceInfo State()
|
||||
{
|
||||
return new TraceInfo
|
||||
{
|
||||
Disassembly = $"{MPR[PC >> 13]:X2}:{PC:X4}: {ReadMemory(PC):X2} {Disassemble(PC, out _)} ".PadRight(30),
|
||||
RegisterInfo = string.Join(" ",
|
||||
=> new(
|
||||
disassembly: $"{MPR[PC >> 13]:X2}:{PC:X4}: {ReadMemory(PC):X2} {Disassemble(PC, out _)} ".PadRight(30),
|
||||
registerInfo: string.Join(" ",
|
||||
$"A:{A:X2}",
|
||||
$"X:{X:X2}",
|
||||
$"Y:{Y:X2}",
|
||||
|
@ -400,9 +398,7 @@ namespace BizHawk.Emulation.Cores.Components.H6280
|
|||
FlagD ? "D" : "d",
|
||||
FlagI ? "I" : "i",
|
||||
FlagZ ? "Z" : "z",
|
||||
FlagC ? "C" : "c"))
|
||||
};
|
||||
}
|
||||
FlagC ? "C" : "c")));
|
||||
|
||||
private static readonly byte[] TableNZ =
|
||||
{
|
||||
|
|
|
@ -448,7 +448,7 @@ namespace BizHawk.Emulation.Cores.Components.I8048
|
|||
{
|
||||
IRQPending = false;
|
||||
|
||||
TraceCallback?.Invoke(new TraceInfo { Disassembly = "====IRQ====", RegisterInfo = "" });
|
||||
TraceCallback?.Invoke(new(disassembly: "====IRQ====", registerInfo: string.Empty));
|
||||
|
||||
IRQ_(0);
|
||||
IRQCallback();
|
||||
|
@ -458,7 +458,7 @@ namespace BizHawk.Emulation.Cores.Components.I8048
|
|||
{
|
||||
TIRQPending = false;
|
||||
|
||||
TraceCallback?.Invoke(new TraceInfo { Disassembly = "====TIRQ====", RegisterInfo = "" });
|
||||
TraceCallback?.Invoke(new(disassembly: "====TIRQ====", registerInfo: string.Empty));
|
||||
|
||||
IRQ_(1);
|
||||
IRQCallback();
|
||||
|
@ -522,11 +522,9 @@ namespace BizHawk.Emulation.Cores.Components.I8048
|
|||
public string TraceHeader => "I8048: PC, machine code, mnemonic, operands, registers (A, B, X, Y, US, SP, DP, CC), Cy, flags (CAFBIFT0T1TFR)";
|
||||
|
||||
public TraceInfo State(bool disassemble = true)
|
||||
{
|
||||
return new TraceInfo
|
||||
{
|
||||
Disassembly = $"{(disassemble ? Disassemble(Regs[PC], ReadMemory, out _) : "---")} ".PadRight(50),
|
||||
RegisterInfo = string.Format(
|
||||
=> new(
|
||||
disassembly: $"{(disassemble ? Disassemble(Regs[PC], ReadMemory, out _) : "---")} ".PadRight(50),
|
||||
registerInfo: string.Format(
|
||||
"A:{0:X2} R0:{1:X2} R1:{2:X2} R2:{3:X2} R3:{4:X2} R4:{5:X2} R5:{6:X2} R6:{7:X2} R7:{8:X2} PSW:{9:X4} Cy:{10} LY:{11} {12}{13}{14}{15}{16}{17}{18}{19}{20}{21}{22}",
|
||||
Regs[A],
|
||||
Regs[(ushort)(R0 + RB)],
|
||||
|
@ -550,10 +548,7 @@ namespace BizHawk.Emulation.Cores.Components.I8048
|
|||
T0 ? "T" : "t",
|
||||
T1 ? "T" : "t",
|
||||
TF ? "T" : "t",
|
||||
RB > 0 ? "R" : "r"
|
||||
)
|
||||
};
|
||||
}
|
||||
RB > 0 ? "R" : "r"));
|
||||
|
||||
/// <summary>
|
||||
/// Optimization method to set cur_instr
|
||||
|
|
|
@ -164,11 +164,7 @@ namespace BizHawk.Emulation.Cores.Components.LR35902
|
|||
{
|
||||
interrupts_enabled = false;
|
||||
|
||||
TraceCallback?.Invoke(new TraceInfo
|
||||
{
|
||||
Disassembly = "====IRQ====",
|
||||
RegisterInfo = ""
|
||||
});
|
||||
TraceCallback?.Invoke(new(disassembly: "====IRQ====", registerInfo: string.Empty));
|
||||
|
||||
// call interrupt processor
|
||||
// lowest bit set is highest priority
|
||||
|
@ -333,11 +329,7 @@ namespace BizHawk.Emulation.Cores.Components.LR35902
|
|||
{
|
||||
interrupts_enabled = false;
|
||||
|
||||
TraceCallback?.Invoke(new TraceInfo
|
||||
{
|
||||
Disassembly = "====IRQ====",
|
||||
RegisterInfo = ""
|
||||
});
|
||||
TraceCallback?.Invoke(new(disassembly: "====IRQ====", registerInfo: string.Empty));
|
||||
|
||||
RegPC--;
|
||||
|
||||
|
@ -347,11 +339,7 @@ namespace BizHawk.Emulation.Cores.Components.LR35902
|
|||
}
|
||||
else
|
||||
{
|
||||
TraceCallback?.Invoke(new TraceInfo
|
||||
{
|
||||
Disassembly = "====un-halted====",
|
||||
RegisterInfo = ""
|
||||
});
|
||||
TraceCallback?.Invoke(new(disassembly: "====un-halted====", registerInfo: string.Empty));
|
||||
|
||||
OnExecFetch?.Invoke(RegPC);
|
||||
if (TraceCallback != null && !CB_prefix) TraceCallback(State(useRGBDSSyntax));
|
||||
|
@ -364,11 +352,7 @@ namespace BizHawk.Emulation.Cores.Components.LR35902
|
|||
{
|
||||
interrupts_enabled = false;
|
||||
|
||||
TraceCallback?.Invoke(new TraceInfo
|
||||
{
|
||||
Disassembly = "====IRQ====",
|
||||
RegisterInfo = ""
|
||||
});
|
||||
TraceCallback?.Invoke(new(disassembly: "====IRQ====", registerInfo: string.Empty));
|
||||
halted = false;
|
||||
|
||||
if (Halt_bug_4)
|
||||
|
@ -407,11 +391,7 @@ namespace BizHawk.Emulation.Cores.Components.LR35902
|
|||
else if (temp)
|
||||
{
|
||||
// even if interrupt servicing is disabled, any interrupt flag raised still resumes execution
|
||||
TraceCallback?.Invoke(new TraceInfo
|
||||
{
|
||||
Disassembly = "====un-halted====",
|
||||
RegisterInfo = ""
|
||||
});
|
||||
TraceCallback?.Invoke(new(disassembly: "====un-halted====", registerInfo: string.Empty));
|
||||
halted = false;
|
||||
|
||||
if (is_GBC)
|
||||
|
@ -493,21 +473,13 @@ namespace BizHawk.Emulation.Cores.Components.LR35902
|
|||
interrupts_enabled = false;
|
||||
I_use = false;
|
||||
|
||||
TraceCallback?.Invoke(new TraceInfo
|
||||
{
|
||||
Disassembly = "====un-stop====",
|
||||
RegisterInfo = ""
|
||||
});
|
||||
TraceCallback?.Invoke(new(disassembly: "====un-stop====", registerInfo: string.Empty));
|
||||
|
||||
stopped = false;
|
||||
stop_check = false;
|
||||
stop_time = 0;
|
||||
|
||||
TraceCallback?.Invoke(new TraceInfo
|
||||
{
|
||||
Disassembly = "====IRQ====",
|
||||
RegisterInfo = ""
|
||||
});
|
||||
TraceCallback?.Invoke(new(disassembly: "====IRQ====", registerInfo: string.Empty));
|
||||
|
||||
// call interrupt processor
|
||||
// lowest bit set is highest priority
|
||||
|
@ -527,11 +499,7 @@ namespace BizHawk.Emulation.Cores.Components.LR35902
|
|||
|
||||
if (stop_time == 0)
|
||||
{
|
||||
TraceCallback?.Invoke(new TraceInfo
|
||||
{
|
||||
Disassembly = "====un-stop====",
|
||||
RegisterInfo = ""
|
||||
});
|
||||
TraceCallback?.Invoke(new(disassembly: "====un-stop====", registerInfo: string.Empty));
|
||||
|
||||
stopped = false;
|
||||
|
||||
|
@ -555,11 +523,7 @@ namespace BizHawk.Emulation.Cores.Components.LR35902
|
|||
if ((buttons_pressed & 0xF) != 0xF)
|
||||
{
|
||||
// TODO: On a gameboy, you can only un-STOP once, needs further testing
|
||||
TraceCallback?.Invoke(new TraceInfo
|
||||
{
|
||||
Disassembly = "====un-stop====",
|
||||
RegisterInfo = ""
|
||||
});
|
||||
TraceCallback?.Invoke(new(disassembly: "====un-stop====", registerInfo: string.Empty));
|
||||
|
||||
stopped = false;
|
||||
OnExecFetch?.Invoke(RegPC);
|
||||
|
@ -753,11 +717,9 @@ namespace BizHawk.Emulation.Cores.Components.LR35902
|
|||
public string TraceHeader => "LR35902: PC, machine code, mnemonic, operands, registers (A, F, B, C, D, E, H, L, SP), Cy, flags (ZNHCI)";
|
||||
|
||||
public TraceInfo State(bool useRGBDSSyntax, bool disassemble = true)
|
||||
{
|
||||
return new TraceInfo
|
||||
{
|
||||
Disassembly = $"{(disassemble ? Disassemble(RegPC, ReadMemory, useRGBDSSyntax, out _) : "---")} ".PadRight(40),
|
||||
RegisterInfo = string.Join(" ",
|
||||
=> new(
|
||||
disassembly: $"{(disassemble ? Disassemble(RegPC, ReadMemory, useRGBDSSyntax, out _) : "---")} ".PadRight(40),
|
||||
registerInfo: string.Join(" ",
|
||||
$"A:{Regs[A]:X2}",
|
||||
$"F:{Regs[F]:X2}",
|
||||
$"B:{Regs[B]:X2}",
|
||||
|
@ -775,9 +737,7 @@ namespace BizHawk.Emulation.Cores.Components.LR35902
|
|||
FlagH ? "H" : "h",
|
||||
FlagC ? "C" : "c",
|
||||
FlagI ? "I" : "i",
|
||||
interrupts_enabled ? "E" : "e"))
|
||||
};
|
||||
}
|
||||
interrupts_enabled ? "E" : "e")));
|
||||
|
||||
private void FetchInstruction(int op)
|
||||
{
|
||||
|
|
|
@ -433,7 +433,7 @@ namespace BizHawk.Emulation.Cores.Components.MC6800
|
|||
irq_pntr = -1;
|
||||
IRQS = 3;
|
||||
|
||||
TraceCallback?.Invoke(new TraceInfo { Disassembly = "====CWAI NMI====", RegisterInfo = "" });
|
||||
TraceCallback?.Invoke(new(disassembly: "====CWAI NMI====", registerInfo: string.Empty));
|
||||
}
|
||||
else if (IRQPending && !FlagI)
|
||||
{
|
||||
|
@ -446,7 +446,7 @@ namespace BizHawk.Emulation.Cores.Components.MC6800
|
|||
irq_pntr = -1;
|
||||
IRQS = 3;
|
||||
|
||||
TraceCallback?.Invoke(new TraceInfo { Disassembly = "====CWAI IRQ====", RegisterInfo = "" });
|
||||
TraceCallback?.Invoke(new(disassembly: "====CWAI IRQ====", registerInfo: string.Empty));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -465,7 +465,7 @@ namespace BizHawk.Emulation.Cores.Components.MC6800
|
|||
{
|
||||
NMIPending = false;
|
||||
|
||||
TraceCallback?.Invoke(new TraceInfo { Disassembly = "====NMI====", RegisterInfo = "" });
|
||||
TraceCallback?.Invoke(new(disassembly: "====NMI====", registerInfo: string.Empty));
|
||||
|
||||
NMI_();
|
||||
NMICallback();
|
||||
|
@ -476,7 +476,7 @@ namespace BizHawk.Emulation.Cores.Components.MC6800
|
|||
{
|
||||
IRQPending = false;
|
||||
|
||||
TraceCallback?.Invoke(new TraceInfo { Disassembly = "====IRQ====", RegisterInfo = "" });
|
||||
TraceCallback?.Invoke(new(disassembly: "====IRQ====", registerInfo: string.Empty));
|
||||
|
||||
IRQ_();
|
||||
IRQCallback();
|
||||
|
@ -501,11 +501,9 @@ namespace BizHawk.Emulation.Cores.Components.MC6800
|
|||
public string TraceHeader => "MC6809: PC, machine code, mnemonic, operands, registers (A, B, X, SP, CC), Cy, flags (EHINZVC)";
|
||||
|
||||
public TraceInfo State(bool disassemble = true)
|
||||
{
|
||||
return new TraceInfo
|
||||
{
|
||||
Disassembly = $"{(disassemble ? Disassemble(Regs[PC], ReadMemory, out _) : "---")} ".PadRight(50),
|
||||
RegisterInfo = string.Format(
|
||||
=> new(
|
||||
disassembly: $"{(disassemble ? Disassemble(Regs[PC], ReadMemory, out _) : "---")} ".PadRight(50),
|
||||
registerInfo: string.Format(
|
||||
"A:{0:X2} B:{1:X2} X:{2:X4} SP:{3:X4} CC:{4:X2} Cy:{5} {6}{7}{8}{9}{10}{11}",
|
||||
Regs[A],
|
||||
Regs[B],
|
||||
|
@ -518,10 +516,7 @@ namespace BizHawk.Emulation.Cores.Components.MC6800
|
|||
FlagN ? "N" : "n",
|
||||
FlagZ ? "Z" : "z",
|
||||
FlagV ? "V" : "v",
|
||||
FlagC ? "C" : "c"
|
||||
)
|
||||
};
|
||||
}
|
||||
FlagC ? "C" : "c"));
|
||||
|
||||
/// <summary>
|
||||
/// Optimization method to set cur_instr
|
||||
|
|
|
@ -473,7 +473,7 @@ namespace BizHawk.Emulation.Cores.Components.MC6809
|
|||
irq_pntr = -1;
|
||||
IRQS = 3;
|
||||
|
||||
TraceCallback?.Invoke(new TraceInfo { Disassembly = "====CWAI NMI====", RegisterInfo = "" });
|
||||
TraceCallback?.Invoke(new(disassembly: "====CWAI NMI====", registerInfo: string.Empty));
|
||||
}
|
||||
else if (FIRQPending && !FlagF)
|
||||
{
|
||||
|
@ -486,7 +486,7 @@ namespace BizHawk.Emulation.Cores.Components.MC6809
|
|||
irq_pntr = -1;
|
||||
IRQS = 3;
|
||||
|
||||
TraceCallback?.Invoke(new TraceInfo { Disassembly = "====CWAI FIRQ====", RegisterInfo = "" });
|
||||
TraceCallback?.Invoke(new(disassembly: "====CWAI FIRQ====", registerInfo: string.Empty));
|
||||
}
|
||||
else if (IRQPending && !FlagI)
|
||||
{
|
||||
|
@ -499,7 +499,7 @@ namespace BizHawk.Emulation.Cores.Components.MC6809
|
|||
irq_pntr = -1;
|
||||
IRQS = 3;
|
||||
|
||||
TraceCallback?.Invoke(new TraceInfo { Disassembly = "====CWAI IRQ====", RegisterInfo = "" });
|
||||
TraceCallback?.Invoke(new(disassembly: "====CWAI IRQ====", registerInfo: string.Empty));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -522,7 +522,7 @@ namespace BizHawk.Emulation.Cores.Components.MC6809
|
|||
irq_pntr = -1;
|
||||
IRQS = 3;
|
||||
|
||||
TraceCallback?.Invoke(new TraceInfo { Disassembly = "====SYNC NMI====", RegisterInfo = "" });
|
||||
TraceCallback?.Invoke(new(disassembly: "====SYNC NMI====", registerInfo: string.Empty));
|
||||
}
|
||||
else if (FIRQPending)
|
||||
{
|
||||
|
@ -537,7 +537,7 @@ namespace BizHawk.Emulation.Cores.Components.MC6809
|
|||
irq_pntr = -1;
|
||||
IRQS = 3;
|
||||
|
||||
TraceCallback?.Invoke(new TraceInfo { Disassembly = "====SYNC FIRQ====", RegisterInfo = "" });
|
||||
TraceCallback?.Invoke(new(disassembly: "====SYNC FIRQ====", registerInfo: string.Empty));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -563,7 +563,7 @@ namespace BizHawk.Emulation.Cores.Components.MC6809
|
|||
irq_pntr = -1;
|
||||
IRQS = 3;
|
||||
|
||||
TraceCallback?.Invoke(new TraceInfo { Disassembly = "====SYNC IRQ====", RegisterInfo = "" });
|
||||
TraceCallback?.Invoke(new(disassembly: "====SYNC IRQ====", registerInfo: string.Empty));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -593,7 +593,7 @@ namespace BizHawk.Emulation.Cores.Components.MC6809
|
|||
{
|
||||
NMIPending = false;
|
||||
|
||||
TraceCallback?.Invoke(new TraceInfo { Disassembly = "====NMI====", RegisterInfo = "" });
|
||||
TraceCallback?.Invoke(new(disassembly: "====NMI====", registerInfo: string.Empty));
|
||||
|
||||
NMI_();
|
||||
NMICallback();
|
||||
|
@ -604,7 +604,7 @@ namespace BizHawk.Emulation.Cores.Components.MC6809
|
|||
{
|
||||
FIRQPending = false;
|
||||
|
||||
TraceCallback?.Invoke(new TraceInfo { Disassembly = "====FIRQ====", RegisterInfo = "" });
|
||||
TraceCallback?.Invoke(new(disassembly: "====FIRQ====", registerInfo: string.Empty));
|
||||
|
||||
FIRQ_();
|
||||
FIRQCallback();
|
||||
|
@ -615,7 +615,7 @@ namespace BizHawk.Emulation.Cores.Components.MC6809
|
|||
{
|
||||
IRQPending = false;
|
||||
|
||||
TraceCallback?.Invoke(new TraceInfo { Disassembly = "====IRQ====", RegisterInfo = "" });
|
||||
TraceCallback?.Invoke(new(disassembly: "====IRQ====", registerInfo: string.Empty));
|
||||
IRQ_();
|
||||
IRQCallback();
|
||||
instr_pntr = irq_pntr = 0;
|
||||
|
@ -639,11 +639,9 @@ namespace BizHawk.Emulation.Cores.Components.MC6809
|
|||
public string TraceHeader => "MC6809: PC, machine code, mnemonic, operands, registers (A, B, X, Y, US, SP, DP, CC), Cy, flags (EFHINZVC)";
|
||||
|
||||
public TraceInfo State(bool disassemble = true)
|
||||
{
|
||||
return new TraceInfo
|
||||
{
|
||||
Disassembly = $"{(disassemble ? Disassemble(Regs[PC], ReadMemory, out _) : "---")} ".PadRight(50),
|
||||
RegisterInfo = string.Format(
|
||||
=> new(
|
||||
disassembly: $"{(disassemble ? Disassemble(Regs[PC], ReadMemory, out _) : "---")} ".PadRight(50),
|
||||
registerInfo: string.Format(
|
||||
"A:{0:X2} B:{1:X2} X:{2:X4} Y:{3:X4} US:{4:X4} SP:{5:X4} DP:{6:X2} CC:{7:X2} Cy:{8} {9}{10}{11}{12}{13}{14}{15}{16}",
|
||||
Regs[A],
|
||||
Regs[B],
|
||||
|
@ -661,10 +659,7 @@ namespace BizHawk.Emulation.Cores.Components.MC6809
|
|||
FlagN ? "N" : "n",
|
||||
FlagZ ? "Z" : "z",
|
||||
FlagV ? "V" : "v",
|
||||
FlagC ? "C" : "c"
|
||||
)
|
||||
};
|
||||
}
|
||||
FlagC ? "C" : "c"));
|
||||
|
||||
/// <summary>
|
||||
/// Optimization method to set cur_instr
|
||||
|
|
|
@ -561,12 +561,7 @@ namespace BizHawk.Emulation.Cores.Components.M6502
|
|||
interrupt_pending = false;
|
||||
if (NMI)
|
||||
{
|
||||
TraceCallback?.Invoke(new TraceInfo
|
||||
{
|
||||
Disassembly = "====NMI====",
|
||||
RegisterInfo = ""
|
||||
});
|
||||
|
||||
TraceCallback?.Invoke(new(disassembly: "====NMI====", registerInfo: string.Empty));
|
||||
ea = NMIVector;
|
||||
opcode = VOP_NMI;
|
||||
NMI = false;
|
||||
|
@ -577,11 +572,7 @@ namespace BizHawk.Emulation.Cores.Components.M6502
|
|||
|
||||
if (IRQ && !my_iflag)
|
||||
{
|
||||
TraceCallback?.Invoke(new TraceInfo
|
||||
{
|
||||
Disassembly = "====IRQ====",
|
||||
RegisterInfo = ""
|
||||
});
|
||||
TraceCallback?.Invoke(new(disassembly: "====IRQ====", registerInfo: string.Empty));
|
||||
ea = IRQVector;
|
||||
opcode = VOP_IRQ;
|
||||
mi = 0;
|
||||
|
|
|
@ -94,13 +94,7 @@ namespace BizHawk.Emulation.Cores.Components.M6502
|
|||
|
||||
public TraceInfo State(bool disassemble = true)
|
||||
{
|
||||
if (!disassemble)
|
||||
{
|
||||
return new TraceInfo {
|
||||
Disassembly = "",
|
||||
RegisterInfo = ""
|
||||
};
|
||||
}
|
||||
if (!disassemble) return new(disassembly: string.Empty, registerInfo: string.Empty);
|
||||
|
||||
string rawbytes = "";
|
||||
string disasm = Disassemble(PC, out var length);
|
||||
|
@ -110,10 +104,9 @@ namespace BizHawk.Emulation.Cores.Components.M6502
|
|||
rawbytes += $" {_link.PeekMemory((ushort)(PC + i)):X2}";
|
||||
}
|
||||
|
||||
return new TraceInfo
|
||||
{
|
||||
Disassembly = $"{PC:X4}: {rawbytes,-9} {disasm} ".PadRight(32),
|
||||
RegisterInfo = string.Join(" ",
|
||||
return new(
|
||||
disassembly: $"{PC:X4}: {rawbytes,-9} {disasm} ".PadRight(32),
|
||||
registerInfo: string.Join(" ",
|
||||
$"A:{A:X2}",
|
||||
$"X:{X:X2}",
|
||||
$"Y:{Y:X2}",
|
||||
|
@ -131,8 +124,7 @@ namespace BizHawk.Emulation.Cores.Components.M6502
|
|||
// !RDY ? "R" : "r"
|
||||
),
|
||||
$"Cy:{TotalExecutedCycles}",
|
||||
$"PPU-Cy:{ext_ppu_cycle}")
|
||||
};
|
||||
$"PPU-Cy:{ext_ppu_cycle}"));
|
||||
}
|
||||
|
||||
public bool AtStart => opcode == VOP_Fetch1 || Microcode[opcode][mi] >= Uop.End;
|
||||
|
|
|
@ -775,7 +775,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A
|
|||
{
|
||||
nonMaskableInterruptPending = false;
|
||||
|
||||
TraceCallback?.Invoke(new TraceInfo { Disassembly = "====NMI====", RegisterInfo = "" });
|
||||
TraceCallback?.Invoke(new(disassembly: "====NMI====", registerInfo: string.Empty));
|
||||
|
||||
iff2 = iff1;
|
||||
iff1 = false;
|
||||
|
@ -796,7 +796,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A
|
|||
iff1 = iff2 = false;
|
||||
EI_pending = 0;
|
||||
|
||||
TraceCallback?.Invoke(new TraceInfo { Disassembly = "====IRQ====", RegisterInfo = "" });
|
||||
TraceCallback?.Invoke(new(disassembly: "====IRQ====", registerInfo: string.Empty));
|
||||
|
||||
switch (interruptMode)
|
||||
{
|
||||
|
@ -867,10 +867,9 @@ namespace BizHawk.Emulation.Cores.Components.Z80A
|
|||
}
|
||||
}
|
||||
|
||||
return new TraceInfo
|
||||
{
|
||||
Disassembly = $"{RegPC:X4}: {byte_code.PadRight(12)} {disasm.PadRight(26)}",
|
||||
RegisterInfo = string.Join(" ",
|
||||
return new(
|
||||
disassembly: $"{RegPC:X4}: {byte_code.PadRight(12)} {disasm.PadRight(26)}",
|
||||
registerInfo: string.Join(" ",
|
||||
$"AF:{(Regs[A] << 8) + Regs[F]:X4}",
|
||||
$"BC:{(Regs[B] << 8) + Regs[C]:X4}",
|
||||
$"DE:{(Regs[D] << 8) + Regs[E]:X4}",
|
||||
|
@ -888,8 +887,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A
|
|||
Flag5 ? "5" : "-",
|
||||
FlagZ ? "Z" : "z",
|
||||
FlagS ? "S" : "s",
|
||||
FlagI ? "E" : "e"))
|
||||
};
|
||||
FlagI ? "E" : "e")));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -13,7 +13,7 @@ namespace BizHawk.Emulation.Cores.Calculators
|
|||
_controller = controller;
|
||||
_lagged = true;
|
||||
|
||||
if (_tracer.Enabled)
|
||||
if (_tracer.IsEnabled())
|
||||
{
|
||||
_cpu.TraceCallback = s => _tracer.Put(s);
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ namespace BizHawk.Emulation.Cores.Calculators
|
|||
HardReset();
|
||||
SetupMemoryDomains();
|
||||
|
||||
_tracer = new TraceBuffer { Header = _cpu.TraceHeader };
|
||||
_tracer = new TraceBuffer(_cpu.TraceHeader);
|
||||
|
||||
ser.Register<ITraceable>(_tracer);
|
||||
ser.Register<IDisassemblable>(_cpu);
|
||||
|
|
|
@ -27,7 +27,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC
|
|||
|
||||
_isLag = true;
|
||||
|
||||
if (_tracer.Enabled)
|
||||
if (_tracer.IsEnabled())
|
||||
{
|
||||
_cpu.TraceCallback = s => _tracer.Put(s);
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC
|
|||
CoreComm = lp.Comm;
|
||||
_gameInfo = lp.Roms.Select(r => r.Game).ToList();
|
||||
_cpu = new Z80A();
|
||||
_tracer = new TraceBuffer { Header = _cpu.TraceHeader };
|
||||
_tracer = new TraceBuffer(_cpu.TraceHeader);
|
||||
_files = lp.Roms.Select(r => r.RomData).ToList();
|
||||
|
||||
var settings = lp.Settings ?? new AmstradCPCSettings();
|
||||
|
|
|
@ -139,7 +139,7 @@ namespace BizHawk.Emulation.Cores.Computers.AppleII
|
|||
|
||||
private void StepInto()
|
||||
{
|
||||
if (_tracer.Enabled)
|
||||
if (_tracer.IsEnabled())
|
||||
{
|
||||
_machine.Cpu.TraceCallback = TracerWrapper;
|
||||
}
|
||||
|
|
|
@ -24,10 +24,8 @@ namespace BizHawk.Emulation.Cores.Computers.AppleII
|
|||
var ser = new BasicServiceProvider(this);
|
||||
ServiceProvider = ser;
|
||||
|
||||
_tracer = new TraceBuffer
|
||||
{
|
||||
Header = "6502: PC, opcode, register (A, X, Y, P, SP, Cy), flags (NVTBDIZC)"
|
||||
};
|
||||
const string TRACE_HEADER = "6502: PC, opcode, register (A, X, Y, P, SP, Cy), flags (NVTBDIZC)";
|
||||
_tracer = new TraceBuffer(TRACE_HEADER);
|
||||
|
||||
_disk1 = _romSet[0];
|
||||
|
||||
|
@ -121,17 +119,11 @@ namespace BizHawk.Emulation.Cores.Computers.AppleII
|
|||
private bool _prevPressed;
|
||||
|
||||
private void TracerWrapper(string[] content)
|
||||
{
|
||||
_tracer.Put(new TraceInfo
|
||||
{
|
||||
Disassembly = content[0],
|
||||
RegisterInfo = content[1]
|
||||
});
|
||||
}
|
||||
=> _tracer.Put(new(disassembly: content[0], registerInfo: content[1]));
|
||||
|
||||
private void FrameAdv(IController controller, bool render, bool renderSound)
|
||||
{
|
||||
if (_tracer.Enabled)
|
||||
if (_tracer.IsEnabled())
|
||||
{
|
||||
_machine.Cpu.TraceCallback = TracerWrapper;
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64
|
|||
{
|
||||
_board.Controller = controller;
|
||||
|
||||
if (_tracer.Enabled)
|
||||
if (_tracer.IsEnabled())
|
||||
{
|
||||
_board.Cpu.TraceCallback = s => _tracer.Put(s);
|
||||
}
|
||||
|
|
|
@ -54,7 +54,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64
|
|||
ser.Register<IVideoProvider>(_board.Vic);
|
||||
ser.Register<IDriveLight>(this);
|
||||
|
||||
_tracer = new TraceBuffer { Header = _board.Cpu.TraceHeader };
|
||||
_tracer = new TraceBuffer(_board.Cpu.TraceHeader);
|
||||
ser.Register<ITraceable>(_tracer);
|
||||
ser.Register<IStatable>(new StateSerializer(SyncState));
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ namespace BizHawk.Emulation.Cores.Computers.MSX
|
|||
|
||||
if (current_controller == MSXControllerKB) { kb_rows_check(controller); }
|
||||
|
||||
if (Tracer.Enabled)
|
||||
if (Tracer.IsEnabled())
|
||||
{
|
||||
tracecb = MakeTrace;
|
||||
}
|
||||
|
|
|
@ -81,7 +81,7 @@ namespace BizHawk.Emulation.Cores.Computers.MSX
|
|||
|
||||
Console.WriteLine(Header_Length + " " + Disasm_Length + " " + Reg_String_Length);
|
||||
|
||||
Tracer = new TraceBuffer { Header = newHeader.ToString() };
|
||||
Tracer = new TraceBuffer(newHeader.ToString());
|
||||
|
||||
var serviceProvider = ServiceProvider as BasicServiceProvider;
|
||||
serviceProvider.Register<ITraceable>(Tracer);
|
||||
|
@ -132,11 +132,7 @@ namespace BizHawk.Emulation.Cores.Computers.MSX
|
|||
LibMSX.MSX_getdisassembly(MSX_Pntr, new_d, t, Disasm_Length);
|
||||
LibMSX.MSX_getregisterstate(MSX_Pntr, new_r, t, Reg_String_Length);
|
||||
|
||||
Tracer.Put(new TraceInfo
|
||||
{
|
||||
Disassembly = new_d.ToString().PadRight(36),
|
||||
RegisterInfo = new_r.ToString()
|
||||
});
|
||||
Tracer.Put(new(disassembly: new_d.ToString().PadRight(36), registerInfo: new_r.ToString()));
|
||||
}
|
||||
|
||||
private readonly MemoryCallbackSystem _memorycallbacks = new MemoryCallbackSystem(new[] { "System Bus" });
|
||||
|
|
|
@ -27,7 +27,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum
|
|||
|
||||
_isLag = true;
|
||||
|
||||
if (_tracer.Enabled)
|
||||
if (_tracer.IsEnabled())
|
||||
{
|
||||
_cpu.TraceCallback = s => _tracer.Put(s);
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum
|
|||
|
||||
_cpu = new Z80A();
|
||||
|
||||
_tracer = new TraceBuffer { Header = _cpu.TraceHeader };
|
||||
_tracer = new TraceBuffer(_cpu.TraceHeader);
|
||||
|
||||
_files = lp.Roms.Select(r => r.RomData).ToList();
|
||||
|
||||
|
|
|
@ -317,7 +317,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
if (cyc_counter == 3)
|
||||
{
|
||||
_m6532.Timer.Tick();
|
||||
if (Tracer.Enabled && Cpu.AtStart)
|
||||
if (Tracer.IsEnabled() && Cpu.AtStart)
|
||||
{
|
||||
Tracer.Put(Cpu.TraceState());
|
||||
}
|
||||
|
|
|
@ -47,7 +47,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
RebootCore();
|
||||
SetupMemoryDomains();
|
||||
|
||||
Tracer = new TraceBuffer { Header = Cpu.TraceHeader };
|
||||
Tracer = new TraceBuffer(Cpu.TraceHeader);
|
||||
|
||||
ser.Register<IDisassemblable>(Cpu);
|
||||
ser.Register<ITraceable>(Tracer);
|
||||
|
|
|
@ -59,7 +59,7 @@ namespace BizHawk.Emulation.Cores.Atari.A7800Hawk
|
|||
|
||||
public bool FrameAdvance(IController controller, bool render, bool renderSound)
|
||||
{
|
||||
if (_tracer.Enabled)
|
||||
if (_tracer.IsEnabled())
|
||||
{
|
||||
cpu.TraceCallback = s => _tracer.Put(s);
|
||||
}
|
||||
|
|
|
@ -261,7 +261,7 @@ namespace BizHawk.Emulation.Cores.Atari.A7800Hawk
|
|||
ser.Register<ISoundProvider>(this);
|
||||
ServiceProvider = ser;
|
||||
|
||||
_tracer = new TraceBuffer { Header = cpu.TraceHeader };
|
||||
_tracer = new TraceBuffer(cpu.TraceHeader);
|
||||
ser.Register<ITraceable>(_tracer);
|
||||
ser.Register<IStatable>(new StateSerializer(SyncState));
|
||||
SetupMemoryDomains();
|
||||
|
|
|
@ -26,7 +26,7 @@ namespace BizHawk.Emulation.Cores.ColecoVision
|
|||
}
|
||||
|
||||
_isLag = true;
|
||||
if (_tracer.Enabled)
|
||||
if (_tracer.IsEnabled())
|
||||
{
|
||||
_cpu.TraceCallback = s => _tracer.Put(s);
|
||||
}
|
||||
|
|
|
@ -57,15 +57,14 @@ namespace BizHawk.Emulation.Cores.ColecoVision
|
|||
LoadRom(rom, skipBios);
|
||||
SetupMemoryDomains();
|
||||
|
||||
_tracer.Header = _cpu.TraceHeader;
|
||||
ser.Register<IDisassemblable>(_cpu);
|
||||
ser.Register<ITraceable>(_tracer);
|
||||
ser.Register<ITraceable>(_tracer = new TraceBuffer(_cpu.TraceHeader));
|
||||
}
|
||||
|
||||
private readonly Z80A _cpu;
|
||||
private readonly TMS9918A _vdp;
|
||||
private readonly byte[] _biosRom;
|
||||
private readonly TraceBuffer _tracer = new TraceBuffer();
|
||||
private readonly TraceBuffer _tracer;
|
||||
|
||||
private byte[] _romData;
|
||||
private byte[] _ram = new byte[1024];
|
||||
|
|
|
@ -31,7 +31,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF
|
|||
_controller = controller;
|
||||
_isLag = false;
|
||||
|
||||
if (_tracer.Enabled)
|
||||
if (_tracer.IsEnabled())
|
||||
{
|
||||
CPU.TraceCallback = s => _tracer.Put(s);
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF
|
|||
DummyReadMemory = ReadBus
|
||||
};
|
||||
|
||||
_tracer = new TraceBuffer { Header = CPU.TraceHeader };
|
||||
_tracer = new TraceBuffer(CPU.TraceHeader);
|
||||
|
||||
var bios01 = comm.CoreFileProvider.GetFirmwareOrThrow(new("ChannelF", "ChannelF_sl131253"));
|
||||
var bios02 = comm.CoreFileProvider.GetFirmwareOrThrow(new("ChannelF", "ChannelF_sl131254"));
|
||||
|
|
|
@ -723,14 +723,13 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF
|
|||
}
|
||||
}
|
||||
|
||||
return new TraceInfo
|
||||
{
|
||||
Disassembly = string.Format(
|
||||
return new(
|
||||
disassembly: string.Format(
|
||||
"{0:X4}: {1} {2}",
|
||||
pc,
|
||||
byte_code.PadRight(12),
|
||||
disasm.PadRight(26)),
|
||||
RegisterInfo = string.Format(
|
||||
registerInfo: string.Format(
|
||||
"Flags:{75}{76}{77}{78}{79} " +
|
||||
"PC1:{0:X4} DC0:{1:X4} A:{2:X2} ISAR:{3:X2} DB:{4:X2} IO:{5:X2} J:{6:X2} H:{7:X4} K:{8:X4} Q:{9:X4} " +
|
||||
"R0:{10:X2} R1:{11:X2} R2:{12:X2} R3:{13:X2} R4:{14:X2} R5:{15:X2} R6:{16:X2} R7:{17:X2} R8:{18:X2} R9:{19:X2} " +
|
||||
|
@ -763,9 +762,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF
|
|||
FlagO ? "O" : "o",
|
||||
FlagZ ? "Z" : "z",
|
||||
FlagC ? "C" : "c",
|
||||
FlagS ? "S" : "s"),
|
||||
|
||||
};
|
||||
FlagS ? "S" : "s"));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -12,7 +12,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex
|
|||
|
||||
public bool FrameAdvance(IController controller, bool render, bool rendersound)
|
||||
{
|
||||
if (_tracer.Enabled)
|
||||
if (_tracer.IsEnabled())
|
||||
{
|
||||
cpu.TraceCallback = s => _tracer.Put(s);
|
||||
}
|
||||
|
|
|
@ -102,7 +102,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex
|
|||
_settings = new object(); // TODO: wtf is this
|
||||
_syncSettings = (VectrexSyncSettings)syncSettings ?? new VectrexSyncSettings();
|
||||
|
||||
_tracer = new TraceBuffer { Header = cpu.TraceHeader };
|
||||
_tracer = new TraceBuffer(cpu.TraceHeader);
|
||||
ser.Register<ITraceable>(_tracer);
|
||||
ser.Register<IStatable>(new StateSerializer(SyncState));
|
||||
SetupMemoryDomains();
|
||||
|
|
|
@ -10,7 +10,7 @@ namespace BizHawk.Emulation.Cores.Intellivision
|
|||
|
||||
public bool FrameAdvance(IController controller, bool render, bool renderSound)
|
||||
{
|
||||
if (_tracer.Enabled)
|
||||
if (_tracer.IsEnabled())
|
||||
{
|
||||
_cpu.TraceCallback = s => _tracer.Put(s);
|
||||
}
|
||||
|
|
|
@ -58,7 +58,7 @@ namespace BizHawk.Emulation.Cores.Intellivision
|
|||
LoadExecutiveRom(comm.CoreFileProvider.GetFirmwareOrThrow(new("INTV", "EROM"), "Executive ROM is required."));
|
||||
LoadGraphicsRom(comm.CoreFileProvider.GetFirmwareOrThrow(new("INTV", "GROM"), "Graphics ROM is required."));
|
||||
|
||||
_tracer = new TraceBuffer { Header = _cpu.TraceHeader };
|
||||
_tracer = new TraceBuffer(_cpu.TraceHeader);
|
||||
ser.Register<ITraceable>(_tracer);
|
||||
ser.Register<IStatable>(new StateSerializer(SyncState));
|
||||
SetupMemoryDomains();
|
||||
|
|
|
@ -18,7 +18,7 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk
|
|||
{
|
||||
//Console.WriteLine("-----------------------FRAME-----------------------");
|
||||
|
||||
if (_tracer.Enabled)
|
||||
if (_tracer.IsEnabled())
|
||||
{
|
||||
cpu.TraceCallback = s => _tracer.Put(s);
|
||||
}
|
||||
|
|
|
@ -79,7 +79,7 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk
|
|||
ser.Register<IVideoProvider>(this);
|
||||
ServiceProvider = ser;
|
||||
|
||||
_tracer = new TraceBuffer { Header = cpu.TraceHeader };
|
||||
_tracer = new TraceBuffer(cpu.TraceHeader);
|
||||
ser.Register(_tracer);
|
||||
ser.Register<IStatable>(new StateSerializer(SyncState));
|
||||
SetupMemoryDomains();
|
||||
|
|
|
@ -48,7 +48,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.BSNES
|
|||
};
|
||||
// TODO: I really don't think stuff like this should be set every single frame (only on change)
|
||||
Api.core.snes_set_layer_enables(ref enables);
|
||||
Api.core.snes_set_trace_enabled(_tracer.Enabled);
|
||||
Api.core.snes_set_trace_enabled(_tracer.IsEnabled());
|
||||
Api.core.snes_set_video_enabled(render);
|
||||
Api.core.snes_set_audio_enabled(renderSound);
|
||||
|
||||
|
|
|
@ -138,10 +138,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.BSNES
|
|||
|
||||
SetMemoryDomains();
|
||||
|
||||
_tracer = new TraceBuffer
|
||||
{
|
||||
Header = "65816: PC, mnemonic, operands, registers (A, X, Y, S, D, B, flags (NVMXDIZC), V, H)"
|
||||
};
|
||||
const string TRACE_HEADER = "65816: PC, mnemonic, operands, registers (A, X, Y, S, D, B, flags (NVMXDIZC), V, H)";
|
||||
_tracer = new TraceBuffer(TRACE_HEADER);
|
||||
ser.Register<IDisassemblable>(new W65816_DisassemblerService());
|
||||
ser.Register(_tracer);
|
||||
|
||||
|
@ -381,12 +379,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.BSNES
|
|||
}
|
||||
|
||||
private void snes_trace(string disassembly, string registerInfo)
|
||||
{
|
||||
_tracer.Put(new TraceInfo
|
||||
{
|
||||
Disassembly = disassembly,
|
||||
RegisterInfo = registerInfo
|
||||
});
|
||||
}
|
||||
=> _tracer.Put(new(disassembly: disassembly, registerInfo: registerInfo));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -66,10 +66,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
|
|||
ServiceProvider = ser;
|
||||
PutSettings(_settings);
|
||||
|
||||
Tracer = new TraceBuffer
|
||||
{
|
||||
Header = "ARM7: PC, machine code, mnemonic, operands, registers"
|
||||
};
|
||||
const string TRACE_HEADER = "ARM7: PC, machine code, mnemonic, operands, registers";
|
||||
Tracer = new TraceBuffer(TRACE_HEADER);
|
||||
_tracecb = msg => Tracer.Put(_traceInfo(msg));
|
||||
ser.Register(Tracer);
|
||||
MemoryCallbacks = new MGBAMemoryCallbackSystem(this);
|
||||
|
@ -107,11 +105,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
|
|||
sb.Append($" { RegisterNames[i] }:{ regs[RegisterNames[i]].Value:X8}");
|
||||
}
|
||||
|
||||
return new TraceInfo
|
||||
{
|
||||
Disassembly = $"{pc:X8}: { machineCode } { instruction }".PadRight(50),
|
||||
RegisterInfo = sb.ToString()
|
||||
};
|
||||
return new(
|
||||
disassembly: $"{pc:X8}: { machineCode } { instruction }".PadRight(50),
|
||||
registerInfo: sb.ToString());
|
||||
}
|
||||
|
||||
public bool FrameAdvance(IController controller, bool render, bool renderSound = true)
|
||||
|
@ -124,7 +120,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
|
|||
WireMemoryDomainPointers();
|
||||
}
|
||||
|
||||
LibmGBA.BizSetTraceCallback(Core, Tracer.Enabled ? _tracecb : null);
|
||||
LibmGBA.BizSetTraceCallback(Core, Tracer.IsEnabled() ? _tracecb : null);
|
||||
|
||||
IsLagFrame = LibmGBA.BizAdvance(
|
||||
Core,
|
||||
|
|
|
@ -45,7 +45,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk
|
|||
ppu.color_palette[3] = color_palette_Gr[3];
|
||||
}
|
||||
|
||||
if (_tracer.Enabled)
|
||||
if (_tracer.IsEnabled())
|
||||
{
|
||||
cpu.TraceCallback = s => _tracer.Put(s);
|
||||
}
|
||||
|
|
|
@ -187,7 +187,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk
|
|||
_ = PutSettings(settings ?? new GBSettings());
|
||||
_syncSettings = (GBSyncSettings)syncSettings ?? new GBSyncSettings();
|
||||
|
||||
_tracer = new TraceBuffer { Header = cpu.TraceHeader };
|
||||
_tracer = new TraceBuffer(cpu.TraceHeader);
|
||||
ser.Register<ITraceable>(_tracer);
|
||||
ser.Register<IStatable>(new StateSerializer(SyncState));
|
||||
ser.Register<IDisassemblable>(_disassembler);
|
||||
|
|
|
@ -44,7 +44,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink
|
|||
R.ppu.color_palette[3] = color_palette_Gr[3];
|
||||
}
|
||||
|
||||
if (_tracer.Enabled)
|
||||
if (_tracer.IsEnabled())
|
||||
{
|
||||
L.cpu.TraceCallback = s => _tracer.Put(s);
|
||||
}
|
||||
|
|
|
@ -61,7 +61,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink
|
|||
ser.Register<IVideoProvider>(this);
|
||||
ser.Register<ISoundProvider>(this);
|
||||
|
||||
_tracer = new TraceBuffer { Header = L.cpu.TraceHeader };
|
||||
_tracer = new TraceBuffer(L.cpu.TraceHeader);
|
||||
ser.Register<ITraceable>(_tracer);
|
||||
|
||||
_lStates = L.ServiceProvider.GetService<IStatable>();
|
||||
|
|
|
@ -59,7 +59,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink3x
|
|||
R.ppu.color_palette[3] = color_palette_Gr[3];
|
||||
}
|
||||
|
||||
if (_tracer.Enabled)
|
||||
if (_tracer.IsEnabled())
|
||||
{
|
||||
L.cpu.TraceCallback = s => _tracer.Put(s);
|
||||
}
|
||||
|
|
|
@ -68,7 +68,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink3x
|
|||
ser.Register<IVideoProvider>(this);
|
||||
ser.Register<ISoundProvider>(this);
|
||||
|
||||
_tracer = new TraceBuffer { Header = L.cpu.TraceHeader };
|
||||
_tracer = new TraceBuffer(L.cpu.TraceHeader);
|
||||
ser.Register(_tracer);
|
||||
|
||||
_lStates = L.ServiceProvider.GetService<IStatable>();
|
||||
|
|
|
@ -74,7 +74,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink4x
|
|||
D.ppu.color_palette[3] = color_palette_Gr[3];
|
||||
}
|
||||
|
||||
if (_tracer.Enabled)
|
||||
if (_tracer.IsEnabled())
|
||||
{
|
||||
A.cpu.TraceCallback = s => _tracer.Put(s);
|
||||
}
|
||||
|
|
|
@ -96,7 +96,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink4x
|
|||
ser.Register<IVideoProvider>(this);
|
||||
ser.Register<ISoundProvider>(this);
|
||||
|
||||
_tracer = new TraceBuffer { Header = A.cpu.TraceHeader };
|
||||
_tracer = new TraceBuffer(A.cpu.TraceHeader);
|
||||
ser.Register(_tracer);
|
||||
|
||||
ServiceProvider = ser;
|
||||
|
|
|
@ -15,16 +15,13 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
|||
int[] s = new int[14];
|
||||
System.Runtime.InteropServices.Marshal.Copy(_s, s, 0, 14);
|
||||
|
||||
Tracer.Put(new TraceInfo
|
||||
{
|
||||
Disassembly =
|
||||
LR35902.Disassemble(
|
||||
(ushort) s[1],
|
||||
addr => (addr == (ushort)s[1]) ? (byte)((s[12] >> 16) & 0xFF) : ((addr == (ushort)s[1] + 1) ? (byte)((s[12] >> 8) & 0xFF) : (byte)(s[12] & 0xFF)),
|
||||
_settings.RgbdsSyntax,
|
||||
out _).PadRight(36),
|
||||
RegisterInfo =
|
||||
string.Format(
|
||||
Tracer.Put(new(
|
||||
disassembly: LR35902.Disassemble(
|
||||
(ushort) s[1],
|
||||
addr => (addr == (ushort)s[1]) ? (byte)((s[12] >> 16) & 0xFF) : ((addr == (ushort)s[1] + 1) ? (byte)((s[12] >> 8) & 0xFF) : (byte)(s[12] & 0xFF)),
|
||||
_settings.RgbdsSyntax,
|
||||
out _).PadRight(36),
|
||||
registerInfo: string.Format(
|
||||
"A:{3:x2} F:{8:x2} B:{4:x2} C:{5:x2} D:{6:x2} E:{7:x2} H:{9:x2} L:{10:x2} LY:{13:x2} SP:{2:x2} {11} Cy:{0}",
|
||||
s[0],
|
||||
s[1] & 0xffff,
|
||||
|
@ -39,8 +36,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
|||
s[10] & 0xff,
|
||||
s[11] != 0 ? "skip" : "",
|
||||
s[12] & 0xffffff,
|
||||
s[13] & 0xff)
|
||||
});
|
||||
s[13] & 0xff)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,10 +24,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
|||
var ser = new BasicServiceProvider(this);
|
||||
ser.Register<IDisassemblable>(_disassembler);
|
||||
ServiceProvider = ser;
|
||||
Tracer = new TraceBuffer
|
||||
{
|
||||
Header = "LR35902: PC, opcode, registers (A, F, B, C, D, E, H, L, LY, SP, CY)"
|
||||
};
|
||||
const string TRACE_HEADER = "LR35902: PC, opcode, registers (A, F, B, C, D, E, H, L, LY, SP, CY)";
|
||||
Tracer = new TraceBuffer(TRACE_HEADER);
|
||||
ser.Register<ITraceable>(Tracer);
|
||||
InitMemoryCallbacks();
|
||||
|
||||
|
@ -327,7 +325,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
|||
LibGambatte.gambatte_reset(GambatteState);
|
||||
}
|
||||
|
||||
if (Tracer.Enabled)
|
||||
if (Tracer.IsEnabled())
|
||||
{
|
||||
_tracecb = MakeTrace;
|
||||
}
|
||||
|
|
|
@ -17,11 +17,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64
|
|||
var length = 0;
|
||||
var disasm = Disassemble(MemoryDomains.SystemBus, pc, out length);
|
||||
|
||||
var traceInfo = new TraceInfo
|
||||
{
|
||||
Disassembly = $"{pc:X}: {disasm.PadRight(32)}"
|
||||
};
|
||||
|
||||
var sb = new StringBuilder();
|
||||
|
||||
for (int i = 1; i < 32; i++) // r0 is always zero
|
||||
|
@ -45,16 +40,14 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64
|
|||
|
||||
// drop MMU co-processor regs for now
|
||||
|
||||
traceInfo.RegisterInfo = sb.ToString().Trim();
|
||||
|
||||
Tracer.Put(traceInfo);
|
||||
Tracer.Put(new(disassembly: $"{pc:X}: {disasm.PadRight(32)}", registerInfo: sb.ToString().Trim()));
|
||||
}
|
||||
|
||||
private const string TraceHeader = "r3400: PC, mnemonic, operands, registers (GPRs, Load/Link Bit, MultHI, MultLO, Implementation/Revision, Control/Status, FGRs)";
|
||||
|
||||
private void ConnectTracer()
|
||||
{
|
||||
Tracer = new TraceBuffer { Header = TraceHeader };
|
||||
Tracer = new TraceBuffer(TraceHeader);
|
||||
(ServiceProvider as BasicServiceProvider).Register<ITraceable>(Tracer);
|
||||
_tracecb = new mupen64plusApi.TraceCallback(MakeTrace);
|
||||
}
|
||||
|
|
|
@ -214,14 +214,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64
|
|||
|
||||
IsVIFrame = false;
|
||||
|
||||
if (Tracer != null && Tracer.Enabled)
|
||||
{
|
||||
api.setTraceCallback(_tracecb);
|
||||
}
|
||||
else
|
||||
{
|
||||
api.setTraceCallback(null);
|
||||
}
|
||||
api.setTraceCallback(Tracer?.IsEnabled() is true ? _tracecb : null);
|
||||
|
||||
_audioProvider.RenderSound = rendersound;
|
||||
|
||||
|
|
|
@ -287,7 +287,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
|||
{
|
||||
_controller = controller;
|
||||
|
||||
if (Tracer.Enabled)
|
||||
if (Tracer.IsEnabled())
|
||||
cpu.TraceCallback = s => Tracer.Put(s);
|
||||
else
|
||||
cpu.TraceCallback = null;
|
||||
|
|
|
@ -52,7 +52,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
|||
|
||||
ser.Register<IDisassemblable>(cpu);
|
||||
|
||||
Tracer = new TraceBuffer { Header = cpu.TraceHeader };
|
||||
Tracer = new TraceBuffer(cpu.TraceHeader);
|
||||
ser.Register<ITraceable>(Tracer);
|
||||
ser.Register<IVideoProvider>(videoProvider);
|
||||
ser.Register<ISoundProvider>(this);
|
||||
|
|
|
@ -28,21 +28,19 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES
|
|||
|
||||
string opcodeStr = MOS6502X.Disassemble(pc, out _, address => _memoryDomains.SystemBus.PeekByte(address));
|
||||
|
||||
Tracer.Put(new TraceInfo
|
||||
{
|
||||
Disassembly = $"{pc:X4}: {opcodeStr}".PadRight(26),
|
||||
RegisterInfo = string.Join(" ",
|
||||
Tracer.Put(new(
|
||||
disassembly: $"{pc:X4}: {opcodeStr}".PadRight(26),
|
||||
registerInfo: string.Join(" ",
|
||||
$"A:{a:X2}",
|
||||
$"X:{x:X2}",
|
||||
$"Y:{y:X2}",
|
||||
$"P:{p:X2}",
|
||||
$"SP:{sp:X2}")
|
||||
});
|
||||
$"SP:{sp:X2}")));
|
||||
}
|
||||
|
||||
private void ConnectTracer()
|
||||
{
|
||||
Tracer = new TraceBuffer { Header = TraceHeader };
|
||||
Tracer = new TraceBuffer(TraceHeader);
|
||||
((BasicServiceProvider) ServiceProvider).Register<ITraceable>(Tracer);
|
||||
_traceCb = MakeTrace;
|
||||
}
|
||||
|
|
|
@ -194,7 +194,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES
|
|||
|
||||
SetPads(controller, out var j1, out var j2);
|
||||
|
||||
QN.qn_set_tracecb(Context, Tracer.Enabled ? _traceCb : null);
|
||||
QN.qn_set_tracecb(Context, Tracer.IsEnabled() ? _traceCb : null);
|
||||
|
||||
LibQuickNES.ThrowStringError(QN.qn_emulate_frame(Context, j1, j2));
|
||||
IsLagFrame = QN.qn_get_joypad_read_count(Context) == 0;
|
||||
|
|
|
@ -20,7 +20,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
|||
|
||||
IsLagFrame = true;
|
||||
|
||||
if (_tracer.Enabled)
|
||||
if (_tracer.IsEnabled())
|
||||
{
|
||||
//Api.QUERY_set_trace_callback(1<<(int)LibsnesApi.eTRACE.SMP, _tracecb); //TEST -- it works but theres no way to control it from the frontend now
|
||||
|
||||
|
|
|
@ -36,10 +36,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
|||
var ser = new BasicServiceProvider(this);
|
||||
ServiceProvider = ser;
|
||||
|
||||
_tracer = new TraceBuffer
|
||||
{
|
||||
Header = "65816: PC, mnemonic, operands, registers (A, X, Y, S, D, DB, flags (NVMXDIZC), V, H)"
|
||||
};
|
||||
const string TRACE_HEADER = "65816: PC, mnemonic, operands, registers (A, X, Y, S, D, DB, flags (NVMXDIZC), V, H)";
|
||||
_tracer = new TraceBuffer(TRACE_HEADER);
|
||||
|
||||
ser.Register<IDisassemblable>(new W65816_DisassemblerService());
|
||||
|
||||
|
@ -352,34 +350,17 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
|||
if (which == (uint)LibsnesApi.eTRACE.CPU)
|
||||
{
|
||||
var split = msg.Split(new[] { splitStr }, 2, StringSplitOptions.None);
|
||||
|
||||
_tracer.Put(new TraceInfo
|
||||
{
|
||||
Disassembly = split[0].PadRight(34),
|
||||
RegisterInfo = splitStr + split[1]
|
||||
});
|
||||
_tracer.Put(new(disassembly: split[0].PadRight(34), registerInfo: splitStr + split[1]));
|
||||
}
|
||||
else if (which == (uint)LibsnesApi.eTRACE.SMP)
|
||||
{
|
||||
int idx = msg.IndexOf("YA:");
|
||||
string dis = msg.Substring(0,idx).TrimEnd();
|
||||
string regs = msg.Substring(idx);
|
||||
_tracer.Put(new TraceInfo
|
||||
{
|
||||
Disassembly = dis,
|
||||
RegisterInfo = regs
|
||||
});
|
||||
_tracer.Put(new(disassembly: msg.Substring(0, idx).TrimEnd(), registerInfo: msg.Substring(idx)));
|
||||
}
|
||||
else if (which == (uint)LibsnesApi.eTRACE.GB)
|
||||
{
|
||||
int idx = msg.IndexOf("AF:");
|
||||
string dis = msg.Substring(0,idx).TrimEnd();
|
||||
string regs = msg.Substring(idx);
|
||||
_tracer.Put(new TraceInfo
|
||||
{
|
||||
Disassembly = dis,
|
||||
RegisterInfo = regs
|
||||
});
|
||||
_tracer.Put(new(disassembly: msg.Substring(0, idx).TrimEnd(), registerInfo: msg.Substring(idx)));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubGBHawk
|
|||
_GBCore.ppu.color_palette[2] = GBHawk.GBHawk.color_palette_Gr[2];
|
||||
_GBCore.ppu.color_palette[3] = GBHawk.GBHawk.color_palette_Gr[3];
|
||||
}
|
||||
if (_tracer.Enabled)
|
||||
if (_tracer.IsEnabled())
|
||||
{
|
||||
_GBCore.cpu.TraceCallback = s => _tracer.Put(s);
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubGBHawk
|
|||
ser.Register(_GBCore.ServiceProvider.GetService<IRegionable>());
|
||||
ser.Register(_GBCore.ServiceProvider.GetService<ICodeDataLogger>());
|
||||
|
||||
_tracer = new TraceBuffer { Header = _GBCore.cpu.TraceHeader };
|
||||
_tracer = new TraceBuffer(_GBCore.cpu.TraceHeader);
|
||||
ser.Register(_tracer);
|
||||
|
||||
_GBCore.ControllerDefinition.AddAxis("Input Cycle", 0.RangeTo(70224), 70224);
|
||||
|
|
|
@ -12,7 +12,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk
|
|||
public bool FrameAdvance(IController controller, bool render, bool renderSound)
|
||||
{
|
||||
//Console.WriteLine("-----------------------FRAME-----------------------");
|
||||
if (_tracer.Enabled)
|
||||
if (_tracer.IsEnabled())
|
||||
{
|
||||
_nesCore.cpu.TraceCallback = s => _tracer.Put(s);
|
||||
}
|
||||
|
|
|
@ -41,7 +41,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk
|
|||
ser.Register(_nesCore.ServiceProvider.GetService<IRegionable>());
|
||||
ser.Register(_nesCore.ServiceProvider.GetService<ICodeDataLogger>());
|
||||
|
||||
_tracer = new TraceBuffer { Header = "6502: PC, machine code, mnemonic, operands, registers (A, X, Y, P, SP), flags (NVTBDIZCR), CPU Cycle, PPU Cycle" };
|
||||
const string TRACE_HEADER = "6502: PC, machine code, mnemonic, operands, registers (A, X, Y, P, SP), flags (NVTBDIZCR), CPU Cycle, PPU Cycle";
|
||||
_tracer = new TraceBuffer(TRACE_HEADER);
|
||||
ser.Register(_tracer);
|
||||
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ namespace BizHawk.Emulation.Cores.PCEngine
|
|||
CheckSpriteLimit();
|
||||
PSG.BeginFrame(Cpu.TotalExecutedCycles);
|
||||
|
||||
Cpu.Debug = Tracer.Enabled;
|
||||
Cpu.Debug = Tracer.IsEnabled();
|
||||
|
||||
if (SuperGrafx)
|
||||
{
|
||||
|
|
|
@ -225,11 +225,7 @@ namespace BizHawk.Emulation.Cores.PCEngine
|
|||
RomLength = RomData.Length;
|
||||
|
||||
// user request: current value of the SF2MapperLatch on the tracelogger
|
||||
Cpu.Logger = s => Tracer.Put(new TraceInfo
|
||||
{
|
||||
Disassembly = $"{SF2MapperLatch:X1}:{s}",
|
||||
RegisterInfo = ""
|
||||
});
|
||||
Cpu.Logger = s => Tracer.Put(new(disassembly: $"{SF2MapperLatch:X1}:{s}", registerInfo: string.Empty));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -319,7 +315,7 @@ namespace BizHawk.Emulation.Cores.PCEngine
|
|||
|
||||
Cpu.ResetPC();
|
||||
|
||||
Tracer = new TraceBuffer { Header = Cpu.TraceHeader };
|
||||
Tracer = new TraceBuffer(Cpu.TraceHeader);
|
||||
var ser = new BasicServiceProvider(this);
|
||||
ServiceProvider = ser;
|
||||
ser.Register<ITraceable>(Tracer);
|
||||
|
|
|
@ -15,7 +15,7 @@ namespace BizHawk.Emulation.Cores.Sega.GGHawkLink
|
|||
public bool FrameAdvance(IController controller, bool render, bool renderSound)
|
||||
{
|
||||
//Console.WriteLine("-----------------------FRAME-----------------------");
|
||||
if (_tracer.Enabled)
|
||||
if (_tracer.IsEnabled())
|
||||
{
|
||||
L.Cpu.TraceCallback = s => _tracer.Put(s);
|
||||
}
|
||||
|
|
|
@ -45,7 +45,7 @@ namespace BizHawk.Emulation.Cores.Sega.GGHawkLink
|
|||
ser.Register<IVideoProvider>(this);
|
||||
ser.Register<ISoundProvider>(this);
|
||||
|
||||
_tracer = new TraceBuffer { Header = L.Cpu.TraceHeader };
|
||||
_tracer = new TraceBuffer(L.Cpu.TraceHeader);
|
||||
ser.Register(_tracer);
|
||||
|
||||
ServiceProvider = ser;
|
||||
|
|
|
@ -20,7 +20,7 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem
|
|||
PSG.Set_Panning(Settings.ForceStereoSeparation ? ForceStereoByte : (byte)0xFF);
|
||||
}
|
||||
|
||||
if (Tracer.Enabled)
|
||||
if (Tracer.IsEnabled())
|
||||
{
|
||||
Cpu.TraceCallback = s => Tracer.Put(s);
|
||||
}
|
||||
|
|
|
@ -194,7 +194,7 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem
|
|||
//this manages the linkage between the cpu and mapper callbacks so it needs running before bootup is complete
|
||||
((ICodeDataLogger)this).SetCDL(null);
|
||||
|
||||
Tracer = new TraceBuffer { Header = Cpu.TraceHeader };
|
||||
Tracer = new TraceBuffer(Cpu.TraceHeader);
|
||||
|
||||
ser.Register(Tracer);
|
||||
ser.Register<IDisassemblable>(Cpu);
|
||||
|
|
|
@ -10,11 +10,10 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx
|
|||
|
||||
public class GPGXTraceBuffer : CallbackBasedTraceBuffer
|
||||
{
|
||||
private const string TRACE_HEADER = "M68K: PC, machine code, mnemonic, operands, registers (D0-D7, A0-A7, SR, USP), flags (XNZVC)";
|
||||
|
||||
public GPGXTraceBuffer(IDebuggable debuggableCore, IMemoryDomains memoryDomains, IDisassemblable disassembler)
|
||||
: base(debuggableCore, memoryDomains, disassembler)
|
||||
{
|
||||
Header = "M68K: PC, machine code, mnemonic, operands, registers (D0-D7, A0-A7, SR, USP), flags (XNZVC)";
|
||||
}
|
||||
: base(debuggableCore, memoryDomains, disassembler, TRACE_HEADER) {}
|
||||
|
||||
protected override void TraceFromCallback(uint addr, uint value, uint flags)
|
||||
{
|
||||
|
@ -22,11 +21,6 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx
|
|||
uint pc = (uint)regs["M68K PC"].Value;
|
||||
var disasm = Disassembler.Disassemble(MemoryDomains.SystemBus, pc & 0xFFFFFF, out _);
|
||||
|
||||
var traceInfo = new TraceInfo
|
||||
{
|
||||
Disassembly = $"{pc:X6}: {disasm}".PadRight(50)
|
||||
};
|
||||
|
||||
var sb = new StringBuilder();
|
||||
|
||||
foreach (var r in regs)
|
||||
|
@ -49,9 +43,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx
|
|||
(sr & 2) > 0 ? "V" : "v",
|
||||
(sr & 1) > 0 ? "C" : "c"));
|
||||
|
||||
traceInfo.RegisterInfo = sb.ToString().Trim();
|
||||
|
||||
Put(traceInfo);
|
||||
this.Put(new(disassembly: $"{pc:X6}: {disasm}".PadRight(50), registerInfo: sb.ToString().Trim()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ namespace BizHawk.Emulation.Cores.Sony.PSX
|
|||
{
|
||||
public TraceBuffer Tracer { get; private set; }
|
||||
|
||||
public static string TraceHeader = "R3000A: PC, machine code, mnemonic, operands, registers (GPRs, lo, hi, sr, cause, epc)";
|
||||
public const string TraceHeader = "R3000A: PC, machine code, mnemonic, operands, registers (GPRs, lo, hi, sr, cause, epc)";
|
||||
|
||||
private OctoshockDll.ShockCallback_Trace trace_cb;
|
||||
|
||||
|
@ -25,17 +25,13 @@ namespace BizHawk.Emulation.Cores.Sony.PSX
|
|||
sb.Append($"{r.Key}:{r.Value.Value.ToHexString(r.Value.BitSize / 4)} ");
|
||||
}
|
||||
|
||||
Tracer.Put(new TraceInfo
|
||||
{
|
||||
Disassembly = $"{PC:X8}: {inst:X8} {dis.PadRight(30)}",
|
||||
RegisterInfo = sb.ToString().Trim()
|
||||
});
|
||||
Tracer.Put(new(disassembly: $"{PC:X8}: {inst:X8} {dis.PadRight(30)}", registerInfo: sb.ToString().Trim()));
|
||||
}
|
||||
|
||||
private void ConnectTracer()
|
||||
{
|
||||
trace_cb = new OctoshockDll.ShockCallback_Trace(ShockTraceCallback);
|
||||
Tracer = new TraceBuffer { Header = TraceHeader };
|
||||
Tracer = new TraceBuffer(TraceHeader);
|
||||
ServiceProvider = new BasicServiceProvider(this);
|
||||
(ServiceProvider as BasicServiceProvider).Register<ITraceable>(Tracer);
|
||||
}
|
||||
|
|
|
@ -829,7 +829,7 @@ namespace BizHawk.Emulation.Cores.Sony.PSX
|
|||
OctoshockDll.shock_SetRenderOptions(psx, ref ropts);
|
||||
|
||||
//prep tracer
|
||||
if (Tracer.Enabled)
|
||||
if (Tracer.IsEnabled())
|
||||
OctoshockDll.shock_SetTraceCallback(psx, IntPtr.Zero, trace_cb);
|
||||
else
|
||||
OctoshockDll.shock_SetTraceCallback(psx, IntPtr.Zero, null);
|
||||
|
|
Loading…
Reference in New Issue