Break off ITracer from IDebuggable, rename to ITraceable and make it an IEmulatorService, refactor things accordingly

This commit is contained in:
adelikat 2014-12-23 01:58:12 +00:00
parent 5d4f9a715a
commit 0f2197cec1
26 changed files with 34 additions and 110 deletions

View File

@ -17,8 +17,7 @@ namespace BizHawk.Client.EmuHawk
public partial class TraceLogger : Form, IToolFormAutoConfig
{
[RequiredService]
private IDebuggable _debugtarget { get; set; }
private ITracer Tracer { get { return _debugtarget.Tracer; } }
private ITraceable Tracer { get; set; }
[ConfigPersist]
private int MaxLines { get; set; }

View File

@ -2,7 +2,7 @@
namespace BizHawk.Emulation.Common
{
public class TraceBuffer : ITracer
public class TraceBuffer : ITraceable
{
private readonly StringBuilder buffer;

View File

@ -87,7 +87,7 @@
<Compile Include="Interfaces\ISoundProvider.cs" />
<Compile Include="Interfaces\IStatable.cs" />
<Compile Include="Interfaces\ISyncSoundProvider.cs" />
<Compile Include="Interfaces\ITracer.cs" />
<Compile Include="Interfaces\ITraceable.cs" />
<Compile Include="Interfaces\IVideoProvider.cs" />
<Compile Include="MemoryDomain.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />

View File

@ -115,22 +115,12 @@ namespace BizHawk.Emulation.Common.IEmulatorExtensions
return false;
}
// TODO: this is a pretty ugly way to handle this
var debuggable = (IDebuggable)core.ServiceProvider.GetService<IDebuggable>();
if (debuggable != null)
{
try
{
var tracer = debuggable.Tracer;
return true;
}
catch (NotImplementedException)
{
return false;
}
}
return core.ServiceProvider.HasService<ITraceable>();
}
return false;
public static ITraceable AsTracer(this IEmulator core)
{
return (ITraceable)core.ServiceProvider.GetService<ITraceable>();
}
public static bool MemoryCallbacksAvailable(this IEmulator core)

View File

@ -17,8 +17,6 @@ namespace BizHawk.Emulation.Common
/// <param name="value"></param>
void SetCpuRegister(string register, int value);
ITracer Tracer { get; }
IMemoryCallbackSystem MemoryCallbacks { get; }
/// <summary>

View File

@ -3,7 +3,7 @@
/// <summary>
/// Allows the cpu to dump trace info to a trace stream
/// </summary>
public interface ITracer
public interface ITraceable : IEmulatorService
{
// TODO: would it be faster (considering both disk and screen output) to keep the data as a List<string> directly?

View File

@ -120,12 +120,6 @@ namespace BizHawk.Emulation.Cores.Calculators
}
}
public ITracer Tracer
{
[FeatureNotImplemented]
get { throw new NotImplementedException(); }
}
public IMemoryCallbackSystem MemoryCallbacks { get; private set; }
[FeatureNotImplemented]

View File

@ -51,12 +51,6 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64
}
}
public ITracer Tracer
{
[FeatureNotImplemented]
get { throw new NotImplementedException(); }
}
public IMemoryCallbackSystem MemoryCallbacks
{
[FeatureNotImplemented]

View File

@ -56,8 +56,6 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
}
}
public ITracer Tracer { get; private set; }
public IMemoryCallbackSystem MemoryCallbacks { get; private set; }
public bool CanStep(StepType type)

View File

@ -21,6 +21,8 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
private readonly GameInfo _game;
private int _frame;
private ITraceable Tracer { get; set; }
[CoreConstructor("A26")]
public Atari2600(CoreComm comm, GameInfo game, byte[] rom, object settings, object syncSettings)
{
@ -47,6 +49,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
var ser = new BasicServiceProvider(this);
ser.Register<IDisassemblable>(Cpu);
ser.Register<ITraceable>(Tracer);
ServiceProvider = ser;
}

View File

@ -54,12 +54,6 @@ namespace BizHawk.Emulation.Cores.Atari.Atari7800
}
}
public ITracer Tracer
{
[FeatureNotImplemented]
get { throw new NotImplementedException(); }
}
public IMemoryCallbackSystem MemoryCallbacks
{
[FeatureNotImplemented]

View File

@ -121,12 +121,6 @@ namespace BizHawk.Emulation.Cores.ColecoVision
}
}
public ITracer Tracer
{
[FeatureNotImplemented]
get { throw new NotImplementedException(); }
}
public IMemoryCallbackSystem MemoryCallbacks
{
[FeatureNotImplemented]

View File

@ -65,6 +65,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
Header = " -Addr--- -Opcode- -Instruction------------------- -R0----- -R1----- -R2----- -R3----- -R4----- -R5----- -R6----- -R7----- -R8----- -R9----- -R10---- -R11---- -R12---- -R13(SP) -R14(LR) -R15(PC) -CPSR--- -SPSR---"
};
(ServiceProvider as BasicServiceProvider).Register<ITraceable>(Tracer);
CoreComm = comm;
comm.VsyncNum = 262144;
@ -112,8 +114,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
// TODO: optimize managed to unmanaged using the ActiveChanged event
public IInputCallbackSystem InputCallbacks { [FeatureNotImplemented]get { return _inputCallbacks; } }
public ITracer Tracer { get; private set; }
private ITraceable Tracer { get; set; }
public string SystemId { get { return "GBA"; } }
public bool DeterministicEmulation { get { return true; } }

View File

@ -71,6 +71,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
throw new InvalidOperationException("LoadRom() returned false!");
Tracer = new TraceBuffer();
ser.Register<ITraceable>(Tracer);
CoreComm.VsyncNum = 262144;
CoreComm.VsyncDen = 4389;
@ -117,7 +118,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
public int LagCount { get; set; }
public bool IsLagFrame { get; private set; }
public ITracer Tracer { get; private set; }
private ITraceable Tracer { get; set; }
public string SystemId { get { return "GBA"; } }

View File

@ -129,6 +129,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
ser.Register<IDisassemblable>(new GBDisassembler());
ServiceProvider = ser;
Tracer = new TraceBuffer();
ser.Register<ITraceable>(Tracer);
InitMemoryCallbacks();
CoreComm = comm;
@ -264,7 +265,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
throw new NotImplementedException();
}
public ITracer Tracer { get; private set; }
private ITraceable Tracer { get; set; }
/// <summary>
/// true if the emulator is currently emulating CGB

View File

@ -92,12 +92,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
private readonly MemoryCallbackSystem _memorycallbacks = new MemoryCallbackSystem();
public IMemoryCallbackSystem MemoryCallbacks { get { return _memorycallbacks; } }
public ITracer Tracer
{
[FeatureNotImplemented]
get { throw new NotImplementedException(); }
}
public IVideoProvider VideoProvider { get { return this; } }
public ISoundProvider SoundProvider { get { return null; } }
public ISyncSoundProvider SyncSoundProvider { get { return this; } }

View File

@ -60,15 +60,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64
throw new NotImplementedException();
}
public ITracer Tracer
{
[FeatureNotImplemented]
get
{
throw new NotImplementedException();
}
}
public IMemoryCallbackSystem MemoryCallbacks { get; private set; }
public bool CanStep(StepType type) { return false; }

View File

@ -38,7 +38,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
this.SyncSettings = (NESSyncSettings)SyncSettings ?? new NESSyncSettings();
this.ControllerSettings = this.SyncSettings.Controls;
CoreComm = comm;
Tracer = new TraceBuffer();
MemoryCallbacks = new MemoryCallbackSystem();
BootGodDB.Initialize();
videoProvider = new MyVideoProvider(this);
@ -53,6 +53,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
var ser = new BasicServiceProvider(this);
ser.Register<IDisassemblable>(cpu);
Tracer = new TraceBuffer();
ser.Register<ITraceable>(Tracer);
if (board is BANDAI_FCG_1)
{
var reader = (board as BANDAI_FCG_1).reader;
@ -951,7 +954,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
[FeatureNotImplemented]
public void Step(StepType type) { throw new NotImplementedException(); }
public ITracer Tracer { get; private set; }
private ITraceable Tracer { get; set; }
public IMemoryCallbackSystem MemoryCallbacks { get; private set; }
NESSettings Settings = new NESSettings();

View File

@ -408,15 +408,6 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES
[FeatureNotImplemented]
public void Step(StepType type) { throw new NotImplementedException(); }
public ITracer Tracer
{
[FeatureNotImplemented]
get
{
throw new NotImplementedException();
}
}
public IMemoryCallbackSystem MemoryCallbacks
{
[FeatureNotImplemented]

View File

@ -38,6 +38,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
ServiceProvider = new BasicServiceProvider(this);
MemoryCallbacks = new MemoryCallbackSystem();
Tracer = new TraceBuffer();
(ServiceProvider as BasicServiceProvider).Register<ITraceable>(Tracer);
_game = game;
CoreComm = comm;
@ -251,7 +252,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
// TODO: optimize managed to unmanaged using the ActiveChanged event
public IInputCallbackSystem InputCallbacks { [FeatureNotImplemented]get { return _inputCallbacks; } }
public ITracer Tracer { get; private set; }
public ITraceable Tracer { get; private set; }
public IMemoryCallbackSystem MemoryCallbacks { get; private set; }
public bool CanStep(StepType type) { return false; }

View File

@ -70,6 +70,8 @@ namespace BizHawk.Emulation.Cores.PCEngine
{
ServiceProvider = new BasicServiceProvider(this);
Tracer = new TraceBuffer();
(ServiceProvider as BasicServiceProvider).Register<ITraceable>(Tracer);
MemoryCallbacks = new MemoryCallbackSystem();
CoreComm = comm;
@ -94,7 +96,7 @@ namespace BizHawk.Emulation.Cores.PCEngine
public string BoardName { get { return null; } }
public ITracer Tracer { get; private set; }
private ITraceable Tracer { get; set; }
public IMemoryCallbackSystem MemoryCallbacks { get; private set; }
public PCEngine(CoreComm comm, GameInfo game, Disc disc, object Settings, object syncSettings)

View File

@ -303,15 +303,6 @@ namespace BizHawk.Emulation.Cores.Sega.Genesis
throw new NotImplementedException();
}
public ITracer Tracer
{
[FeatureNotImplemented]
get
{
throw new NotImplementedException();
}
}
int vdpcallback(int level) // Musashi handler
{
InterruptCallback(level);

View File

@ -108,7 +108,7 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem
IsSG1000 = game.System == "SG";
RomData = rom;
Tracer = new TraceBuffer();
(ServiceProvider as BasicServiceProvider).Register<ITraceable>(Tracer);
if (RomData.Length % BankSize != 0)
Array.Resize(ref RomData, ((RomData.Length / BankSize) + 1) * BankSize);
RomBanks = (byte)(RomData.Length / BankSize);
@ -216,7 +216,7 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem
public IEmulatorServiceProvider ServiceProvider { get; private set; }
public ITracer Tracer { get; private set; }
private ITraceable Tracer { get; set; }
string DetermineRegion(string gameRegion)
{

View File

@ -61,7 +61,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx
public GPGX(CoreComm comm, byte[] rom, DiscSystem.Disc CD, object Settings, object SyncSettings)
{
ServiceProvider = new BasicServiceProvider(this);
(ServiceProvider as BasicServiceProvider).Register<ITraceable>(_tracer);
// this can influence some things internally
string romextension = "GEN";
@ -392,14 +392,6 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx
private readonly TraceBuffer _tracer = new TraceBuffer();
public ITracer Tracer
{
get
{
return _tracer;
}
}
#endregion
// TODO: use render and rendersound

View File

@ -201,6 +201,7 @@ namespace BizHawk.Emulation.Cores.Sony.PSX
public Octoshock(CoreComm comm, List<DiscSystem.Disc> discs, List<string> discNames, byte[] exe, object settings, object syncSettings)
{
ServiceProvider = new BasicServiceProvider(this);
(ServiceProvider as BasicServiceProvider).Register<ITraceable>(tracer);
CoreComm = comm;
DriveLightEnabled = true;
@ -996,7 +997,7 @@ namespace BizHawk.Emulation.Cores.Sony.PSX
OctoshockDll.shock_SetRegister_CPU(psx, index, (uint)value);
}
public ITracer Tracer { get { return tracer; } }
public ITraceable Tracer { get { return tracer; } }
public int ShockTraceCallback(IntPtr opaque, uint PC, uint inst, string dis)
{

View File

@ -133,15 +133,6 @@ namespace BizHawk.Emulation.Cores.WonderSwan
public IEmulatorServiceProvider ServiceProvider { get; private set; }
public ITracer Tracer
{
[FeatureNotImplemented]
get
{
throw new NotImplementedException();
}
}
public void Dispose()
{
if (Core != IntPtr.Zero)