7800: savestates
This commit is contained in:
parent
7bb1baf2ab
commit
0636bda89d
|
@ -40,10 +40,10 @@ namespace BizHawk
|
||||||
public bool StartAsyncSound() { return false; }
|
public bool StartAsyncSound() { return false; }
|
||||||
public void EndAsyncSound() { }
|
public void EndAsyncSound() { }
|
||||||
public bool DeterministicEmulation { get; set; }
|
public bool DeterministicEmulation { get; set; }
|
||||||
public void SaveStateText(TextWriter writer) { }
|
public void SaveStateText(TextWriter writer) { SyncState(new Serializer(writer)); }
|
||||||
public void LoadStateText(TextReader reader) { }
|
public void LoadStateText(TextReader reader) { SyncState(new Serializer(reader)); }
|
||||||
public void SaveStateBinary(BinaryWriter bw) { }
|
public void SaveStateBinary(BinaryWriter bw) { SyncState(new Serializer(bw)); }
|
||||||
public void LoadStateBinary(BinaryReader br) { }
|
public void LoadStateBinary(BinaryReader br) { SyncState(new Serializer(br)); }
|
||||||
private IList<MemoryDomain> memoryDomains;
|
private IList<MemoryDomain> memoryDomains;
|
||||||
public IList<MemoryDomain> MemoryDomains { get { return null; } }
|
public IList<MemoryDomain> MemoryDomains { get { return null; } }
|
||||||
public MemoryDomain MainMemory { get { return null; } }
|
public MemoryDomain MainMemory { get { return null; } }
|
||||||
|
@ -205,7 +205,7 @@ namespace BizHawk
|
||||||
theMachine.Reset();
|
theMachine.Reset();
|
||||||
if (avProvider != null)
|
if (avProvider != null)
|
||||||
avProvider.Dispose();
|
avProvider.Dispose();
|
||||||
avProvider = new MyAVProvider(theMachine);
|
avProvider.ConnectToMachine(theMachine);
|
||||||
// to sync exactly with audio as this emulator creates and times it, the frame rate should be exactly 60:1 or 50:1
|
// to sync exactly with audio as this emulator creates and times it, the frame rate should be exactly 60:1 or 50:1
|
||||||
CoreComm.VsyncNum = theMachine.FrameHZ;
|
CoreComm.VsyncNum = theMachine.FrameHZ;
|
||||||
CoreComm.VsyncDen = 1;
|
CoreComm.VsyncDen = 1;
|
||||||
|
@ -213,9 +213,25 @@ namespace BizHawk
|
||||||
|
|
||||||
void SyncState(Serializer ser) //TODO
|
void SyncState(Serializer ser) //TODO
|
||||||
{
|
{
|
||||||
|
byte[] core = null;
|
||||||
|
if (ser.IsWriter)
|
||||||
|
{
|
||||||
|
var ms = new MemoryStream();
|
||||||
|
theMachine.Serialize(new BinaryWriter(ms));
|
||||||
|
ms.Close();
|
||||||
|
core = ms.ToArray();
|
||||||
|
}
|
||||||
|
ser.BeginSection("Atari7800");
|
||||||
|
ser.Sync("core", ref core, false);
|
||||||
ser.Sync("Lag", ref _lagcount);
|
ser.Sync("Lag", ref _lagcount);
|
||||||
ser.Sync("Frame", ref _frame);
|
ser.Sync("Frame", ref _frame);
|
||||||
ser.Sync("IsLag", ref _islag);
|
ser.Sync("IsLag", ref _islag);
|
||||||
|
ser.EndSection();
|
||||||
|
if (ser.IsReader)
|
||||||
|
{
|
||||||
|
theMachine = MachineBase.Deserialize(new BinaryReader(new MemoryStream(core, false)));
|
||||||
|
avProvider.ConnectToMachine(theMachine);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SoftReset() //TOOD: hook this up
|
private void SoftReset() //TOOD: hook this up
|
||||||
|
@ -223,12 +239,12 @@ namespace BizHawk
|
||||||
theMachine.Reset();
|
theMachine.Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
MyAVProvider avProvider;
|
MyAVProvider avProvider = new MyAVProvider();
|
||||||
|
|
||||||
class MyAVProvider : IVideoProvider, ISyncSoundProvider, IDisposable
|
class MyAVProvider : IVideoProvider, ISyncSoundProvider, IDisposable
|
||||||
{
|
{
|
||||||
public FrameBuffer framebuffer { get; private set; }
|
public FrameBuffer framebuffer { get; private set; }
|
||||||
public MyAVProvider(MachineBase m)
|
public void ConnectToMachine(MachineBase m)
|
||||||
{
|
{
|
||||||
framebuffer = m.CreateFrameBuffer();
|
framebuffer = m.CreateFrameBuffer();
|
||||||
BufferWidth = framebuffer.VisiblePitch;
|
BufferWidth = framebuffer.VisiblePitch;
|
||||||
|
@ -236,6 +252,8 @@ namespace BizHawk
|
||||||
vidbuffer = new int[BufferWidth * BufferHeight];
|
vidbuffer = new int[BufferWidth * BufferHeight];
|
||||||
|
|
||||||
uint samplerate = (uint)m.SoundSampleFrequency;
|
uint samplerate = (uint)m.SoundSampleFrequency;
|
||||||
|
if (resampler != null)
|
||||||
|
resampler.Dispose();
|
||||||
resampler = new Emulation.Sound.Utilities.SpeexResampler(3, samplerate, 44100, samplerate, 44100, null, null);
|
resampler = new Emulation.Sound.Utilities.SpeexResampler(3, samplerate, 44100, samplerate, 44100, null, null);
|
||||||
dcfilter = Emulation.Sound.Utilities.DCFilter.DetatchedMode(256);
|
dcfilter = Emulation.Sound.Utilities.DCFilter.DetatchedMode(256);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue