clean up vbanext core

This commit is contained in:
goyuken 2014-12-05 02:27:39 +00:00
parent 3dfd57197d
commit a7ad7e20e9
1 changed files with 14 additions and 17 deletions

View File

@ -102,7 +102,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
if (Controller["Power"])
LibVBANext.Reset(Core);
SyncCallbacks();
SyncTraceCallback();
IsLagFrame = LibVBANext.FrameAdvance(Core, GetButtons(), videobuff, soundbuff, out numsamp, videopalette);
@ -114,15 +114,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
public int LagCount { get; set; }
public bool IsLagFrame { get; private set; }
private readonly InputCallbackSystem _inputCallbacks = new InputCallbackSystem();
// TODO: optimize managed to unmanaged using the ActiveChanged event
public IInputCallbackSystem InputCallbacks { [FeatureNotImplemented]get { return _inputCallbacks; } }
public ITracer Tracer { get; private set; }
public IMemoryCallbackSystem MemoryCallbacks { get; private set; }
public string SystemId { get { return "GBA"; } }
public bool DeterministicEmulation { get; private set; }
@ -275,6 +268,12 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
LibVBANext.AddressCallback writecb;
LibVBANext.TraceCallback tracecb;
private readonly InputCallbackSystem _inputCallbacks = new InputCallbackSystem();
public IInputCallbackSystem InputCallbacks { get { return _inputCallbacks; } }
private readonly MemoryCallbackSystem _memorycallbacks = new MemoryCallbackSystem();
public IMemoryCallbackSystem MemoryCallbacks { get { return _memorycallbacks; } }
string Trace(uint addr, uint opcode)
{
return
@ -292,25 +291,23 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
writecb = new LibVBANext.AddressCallback((addr) => MemoryCallbacks.CallWrite(addr));
tracecb = new LibVBANext.TraceCallback((addr, opcode) => Tracer.Put(Trace(addr, opcode)));
_inputCallbacks.ActiveChanged += SyncPadCallback;
_memorycallbacks.ActiveChanged += SyncMemoryCallbacks;
}
bool _inputcbactive = false;
void SyncPadCallback()
{
bool _inputcbactive_new = InputCallbacks.Any();
if (_inputcbactive != _inputcbactive_new)
{
_inputcbactive = _inputcbactive_new;
LibVBANext.SetPadCallback(Core, _inputcbactive ? padcb : null);
}
LibVBANext.SetPadCallback(Core, InputCallbacks.Any() ? padcb : null);
}
void SyncCallbacks()
void SyncMemoryCallbacks()
{
//LibVBANext.SetPadCallback(Core, InputCallbacks.Any() ? padcb : null);
LibVBANext.SetFetchCallback(Core, MemoryCallbacks.HasExecutes ? fetchcb : null);
LibVBANext.SetReadCallback(Core, MemoryCallbacks.HasReads ? readcb : null);
LibVBANext.SetWriteCallback(Core, MemoryCallbacks.HasWrites ? writecb : null);
}
void SyncTracerCallback()
{
LibVBANext.SetTraceCallback(Core, Tracer.Enabled ? tracecb : null);
}