2015-01-17 19:10:58 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
|
|
|
|
|
using BizHawk.Emulation.Common;
|
|
|
|
|
|
|
|
|
|
namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
|
|
|
|
{
|
|
|
|
|
public partial class GambatteLink : IStatable
|
|
|
|
|
{
|
|
|
|
|
public bool BinarySaveStatesPreferred { get { return true; } }
|
|
|
|
|
|
|
|
|
|
public void SaveStateText(TextWriter writer)
|
|
|
|
|
{
|
|
|
|
|
var s = new DGBSerialized
|
|
|
|
|
{
|
|
|
|
|
L = L.SaveState(),
|
|
|
|
|
R = R.SaveState(),
|
|
|
|
|
IsLagFrame = IsLagFrame,
|
|
|
|
|
LagCount = LagCount,
|
|
|
|
|
Frame = Frame,
|
2017-04-25 16:06:50 +00:00
|
|
|
|
overflowL = _overflowL,
|
|
|
|
|
overflowR = _overflowR,
|
|
|
|
|
LatchL = _latchLeft,
|
|
|
|
|
LatchR = _latchRight,
|
|
|
|
|
cableconnected = _cableconnected,
|
|
|
|
|
cablediscosignal = _cablediscosignal
|
2015-01-17 19:10:58 +00:00
|
|
|
|
};
|
|
|
|
|
ser.Serialize(writer, s);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void LoadStateText(TextReader reader)
|
|
|
|
|
{
|
|
|
|
|
var s = (DGBSerialized)ser.Deserialize(reader, typeof(DGBSerialized));
|
|
|
|
|
L.LoadState(s.L);
|
|
|
|
|
R.LoadState(s.R);
|
|
|
|
|
IsLagFrame = s.IsLagFrame;
|
|
|
|
|
LagCount = s.LagCount;
|
|
|
|
|
Frame = s.Frame;
|
2017-04-25 16:06:50 +00:00
|
|
|
|
_overflowL = s.overflowL;
|
|
|
|
|
_overflowR = s.overflowR;
|
|
|
|
|
_latchLeft = s.LatchL;
|
|
|
|
|
_latchRight = s.LatchR;
|
|
|
|
|
_cableconnected = s.cableconnected;
|
|
|
|
|
_cablediscosignal = s.cablediscosignal;
|
2015-01-17 19:10:58 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SaveStateBinary(BinaryWriter writer)
|
|
|
|
|
{
|
|
|
|
|
L.SaveStateBinary(writer);
|
|
|
|
|
R.SaveStateBinary(writer);
|
|
|
|
|
// other variables
|
|
|
|
|
writer.Write(IsLagFrame);
|
|
|
|
|
writer.Write(LagCount);
|
|
|
|
|
writer.Write(Frame);
|
2017-04-25 16:06:50 +00:00
|
|
|
|
writer.Write(_overflowL);
|
|
|
|
|
writer.Write(_overflowR);
|
|
|
|
|
writer.Write(_latchLeft);
|
|
|
|
|
writer.Write(_latchRight);
|
|
|
|
|
writer.Write(_cableconnected);
|
|
|
|
|
writer.Write(_cablediscosignal);
|
2015-01-17 19:10:58 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void LoadStateBinary(BinaryReader reader)
|
|
|
|
|
{
|
|
|
|
|
L.LoadStateBinary(reader);
|
|
|
|
|
R.LoadStateBinary(reader);
|
|
|
|
|
// other variables
|
|
|
|
|
IsLagFrame = reader.ReadBoolean();
|
|
|
|
|
LagCount = reader.ReadInt32();
|
|
|
|
|
Frame = reader.ReadInt32();
|
2017-04-25 16:06:50 +00:00
|
|
|
|
_overflowL = reader.ReadInt32();
|
|
|
|
|
_overflowR = reader.ReadInt32();
|
|
|
|
|
_latchLeft = reader.ReadInt32();
|
|
|
|
|
_latchRight = reader.ReadInt32();
|
|
|
|
|
_cableconnected = reader.ReadBoolean();
|
|
|
|
|
_cablediscosignal = reader.ReadBoolean();
|
2015-01-17 19:10:58 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public byte[] SaveStateBinary()
|
|
|
|
|
{
|
|
|
|
|
MemoryStream ms = new MemoryStream();
|
|
|
|
|
BinaryWriter bw = new BinaryWriter(ms);
|
|
|
|
|
SaveStateBinary(bw);
|
|
|
|
|
bw.Flush();
|
|
|
|
|
return ms.ToArray();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private JsonSerializer ser = new JsonSerializer { Formatting = Formatting.Indented };
|
|
|
|
|
|
|
|
|
|
private class DGBSerialized
|
|
|
|
|
{
|
|
|
|
|
public TextState<Gameboy.TextStateData> L;
|
|
|
|
|
public TextState<Gameboy.TextStateData> R;
|
|
|
|
|
// other data
|
|
|
|
|
public bool IsLagFrame;
|
|
|
|
|
public int LagCount;
|
|
|
|
|
public int Frame;
|
|
|
|
|
public int overflowL;
|
|
|
|
|
public int overflowR;
|
|
|
|
|
public int LatchL;
|
|
|
|
|
public int LatchR;
|
|
|
|
|
public bool cableconnected;
|
|
|
|
|
public bool cablediscosignal;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|