Add support for binary savestate as BSON, but turn it off and make binary savestates a stupid text clone because BSON sucks

This commit is contained in:
goyuken 2015-05-18 01:52:14 +00:00
parent 9f0e4f0735
commit d91e6f184a
4 changed files with 83 additions and 90 deletions

View File

@ -4,6 +4,7 @@ using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Jellyfish.Virtu;
using Newtonsoft.Json.Bson;
namespace BizHawk.Emulation.Cores.Computers.AppleII
{
@ -89,52 +90,41 @@ namespace BizHawk.Emulation.Cores.Computers.AppleII
DeserializeEverything(new JsonTextReader(reader));
}
/*
* These are horrible; the LoadStateBinary() takes over 10x as long as LoadStateText()
* Until we figure out why JSON.NET's BSONwriter sucks and how to fix it, stick with text-as-binary
public void SaveStateBinary(BinaryWriter writer)
{
/*
writer.Write(Frame);
writer.Write(LagCount);
writer.Write(IsLagFrame);
writer.Write(CurrentDisk);
_machine.SaveState(writer);
*/
SerializeEverything(new BsonWriter(writer));
}
public void LoadStateBinary(BinaryReader reader)
{
/*
Frame = reader.ReadInt32();
LagCount = reader.ReadInt32();
IsLagFrame = reader.ReadBoolean();
CurrentDisk = reader.ReadInt32();
InitDisk();
_machine.LoadState(reader);
*/
DeserializeEverything(new BsonReader(reader));
}
*/
public void SaveStateBinary(BinaryWriter writer)
{
var tw = new StreamWriter(writer.BaseStream, new System.Text.UTF8Encoding(false));
SaveStateText(tw);
tw.Flush();
}
public void LoadStateBinary(BinaryReader reader)
{
var tr = new StreamReader(reader.BaseStream, System.Text.Encoding.UTF8);
LoadStateText(tr);
}
public byte[] SaveStateBinary()
{
return new byte[16];
if (_stateBuffer == null)
{
var stream = new MemoryStream();
var writer = new BinaryWriter(stream);
SaveStateBinary(writer);
_stateBuffer = stream.ToArray();
writer.Close();
return _stateBuffer;
}
else
{
var stream = new MemoryStream(_stateBuffer);
var writer = new BinaryWriter(stream);
SaveStateBinary(writer);
writer.Close();
return _stateBuffer;
}
// our savestate array can be of varying sizes, so this can't be too clever
var stream = new MemoryStream();
var writer = new BinaryWriter(stream);
SaveStateBinary(writer);
writer.Flush();
return stream.ToArray();
}
private byte[] _stateBuffer;
}
}

View File

@ -16,10 +16,10 @@
public int[] fb;
public void SetPixel(int x, int y, uint color)
public void SetPixel(int x, int y, int color)
{
int i = 560 * y + x;
fb[i] = fb[i + 560] = (int)color;
fb[i] = fb[i + 560] = color;
}
}
}

View File

@ -31,23 +31,26 @@ namespace Jellyfish.Virtu
VideoService = new Services.VideoService();
//#if SILVERLIGHT || WPF
_colorBlack = 0xFF000000; // BGRA
_colorDarkBlue = 0xFF000099;
_colorDarkGreen = 0xFF117722;
_colorMediumBlue = 0xFF0000FF;
_colorBrown = 0xFF885500;
_colorLightGrey = 0xFF99AAAA;
_colorGreen = 0xFF00EE11;
_colorAquamarine = 0xFF55FFAA;
_colorDeepRed = 0xFFFF1111;
_colorPurple = 0xFFDD00DD;
_colorDarkGrey = 0xFF445555;
_colorLightBlue = 0xFF33AAFF;
_colorOrange = 0xFFFF4411;
_colorPink = 0xFFFF9988;
_colorYellow = 0xFFFFFF11;
_colorWhite = 0xFFFFFFFF;
_colorMonochrome = 0xFF00AA00;
unchecked
{
_colorBlack = (int)0xFF000000; // BGRA
_colorDarkBlue = (int)0xFF000099;
_colorDarkGreen = (int)0xFF117722;
_colorMediumBlue = (int)0xFF0000FF;
_colorBrown = (int)0xFF885500;
_colorLightGrey = (int)0xFF99AAAA;
_colorGreen = (int)0xFF00EE11;
_colorAquamarine = (int)0xFF55FFAA;
_colorDeepRed = (int)0xFFFF1111;
_colorPurple = (int)0xFFDD00DD;
_colorDarkGrey = (int)0xFF445555;
_colorLightBlue = (int)0xFF33AAFF;
_colorOrange = (int)0xFFFF4411;
_colorPink = (int)0xFFFF9988;
_colorYellow = (int)0xFFFFFF11;
_colorWhite = (int)0xFFFFFFFF;
_colorMonochrome = (int)0xFF00AA00;
}
//#else
// _colorBlack = 0xFF000000; // RGBA
// _colorDarkBlue = 0xFF990000;
@ -1019,39 +1022,39 @@ namespace Jellyfish.Virtu
}
[Newtonsoft.Json.JsonIgnore]
public uint ColorBlack { get { return _colorBlack; } set { _colorBlack = value; SetPalette(); } }
public int ColorBlack { get { return _colorBlack; } set { _colorBlack = value; SetPalette(); } }
[Newtonsoft.Json.JsonIgnore]
public uint ColorDarkBlue { get { return _colorDarkBlue; } set { _colorDarkBlue = value; SetPalette(); } }
public int ColorDarkBlue { get { return _colorDarkBlue; } set { _colorDarkBlue = value; SetPalette(); } }
[Newtonsoft.Json.JsonIgnore]
public uint ColorDarkGreen { get { return _colorDarkGreen; } set { _colorDarkGreen = value; SetPalette(); } }
public int ColorDarkGreen { get { return _colorDarkGreen; } set { _colorDarkGreen = value; SetPalette(); } }
[Newtonsoft.Json.JsonIgnore]
public uint ColorMediumBlue { get { return _colorMediumBlue; } set { _colorMediumBlue = value; SetPalette(); } }
public int ColorMediumBlue { get { return _colorMediumBlue; } set { _colorMediumBlue = value; SetPalette(); } }
[Newtonsoft.Json.JsonIgnore]
public uint ColorBrown { get { return _colorBrown; } set { _colorBrown = value; SetPalette(); } }
public int ColorBrown { get { return _colorBrown; } set { _colorBrown = value; SetPalette(); } }
[Newtonsoft.Json.JsonIgnore]
public uint ColorLightGrey { get { return _colorLightGrey; } set { _colorLightGrey = value; SetPalette(); } }
public int ColorLightGrey { get { return _colorLightGrey; } set { _colorLightGrey = value; SetPalette(); } }
[Newtonsoft.Json.JsonIgnore]
public uint ColorGreen { get { return _colorGreen; } set { _colorGreen = value; SetPalette(); } }
public int ColorGreen { get { return _colorGreen; } set { _colorGreen = value; SetPalette(); } }
[Newtonsoft.Json.JsonIgnore]
public uint ColorAquamarine { get { return _colorAquamarine; } set { _colorAquamarine = value; SetPalette(); } }
public int ColorAquamarine { get { return _colorAquamarine; } set { _colorAquamarine = value; SetPalette(); } }
[Newtonsoft.Json.JsonIgnore]
public uint ColorDeepRed { get { return _colorDeepRed; } set { _colorDeepRed = value; SetPalette(); } }
public int ColorDeepRed { get { return _colorDeepRed; } set { _colorDeepRed = value; SetPalette(); } }
[Newtonsoft.Json.JsonIgnore]
public uint ColorPurple { get { return _colorPurple; } set { _colorPurple = value; SetPalette(); } }
public int ColorPurple { get { return _colorPurple; } set { _colorPurple = value; SetPalette(); } }
[Newtonsoft.Json.JsonIgnore]
public uint ColorDarkGrey { get { return _colorDarkGrey; } set { _colorDarkGrey = value; SetPalette(); } }
public int ColorDarkGrey { get { return _colorDarkGrey; } set { _colorDarkGrey = value; SetPalette(); } }
[Newtonsoft.Json.JsonIgnore]
public uint ColorLightBlue { get { return _colorLightBlue; } set { _colorLightBlue = value; SetPalette(); } }
public int ColorLightBlue { get { return _colorLightBlue; } set { _colorLightBlue = value; SetPalette(); } }
[Newtonsoft.Json.JsonIgnore]
public uint ColorOrange { get { return _colorOrange; } set { _colorOrange = value; SetPalette(); } }
public int ColorOrange { get { return _colorOrange; } set { _colorOrange = value; SetPalette(); } }
[Newtonsoft.Json.JsonIgnore]
public uint ColorPink { get { return _colorPink; } set { _colorPink = value; SetPalette(); } }
public int ColorPink { get { return _colorPink; } set { _colorPink = value; SetPalette(); } }
[Newtonsoft.Json.JsonIgnore]
public uint ColorYellow { get { return _colorYellow; } set { _colorYellow = value; SetPalette(); } }
public int ColorYellow { get { return _colorYellow; } set { _colorYellow = value; SetPalette(); } }
[Newtonsoft.Json.JsonIgnore]
public uint ColorWhite { get { return _colorWhite; } set { _colorWhite = value; SetPalette(); } }
public int ColorWhite { get { return _colorWhite; } set { _colorWhite = value; SetPalette(); } }
[Newtonsoft.Json.JsonIgnore]
public uint ColorMonochrome { get { return _colorMonochrome; } set { _colorMonochrome = value; SetPalette(); } }
public int ColorMonochrome { get { return _colorMonochrome; } set { _colorMonochrome = value; SetPalette(); } }
[Newtonsoft.Json.JsonIgnore]
public bool IsMonochrome { get { return _isMonochrome; } set { _isMonochrome = value; DirtyScreen(); } }
public ScannerOptions ScannerOptions { get { return _scannerOptions; } set { _scannerOptions = value; SetScanner(); } }
@ -1066,23 +1069,23 @@ namespace Jellyfish.Virtu
private Memory _memory;
public VideoService VideoService { get; private set; }
private uint _colorBlack;
private uint _colorDarkBlue;
private uint _colorDarkGreen;
private uint _colorMediumBlue;
private uint _colorBrown;
private uint _colorLightGrey;
private uint _colorGreen;
private uint _colorAquamarine;
private uint _colorDeepRed;
private uint _colorPurple;
private uint _colorDarkGrey;
private uint _colorLightBlue;
private uint _colorOrange;
private uint _colorPink;
private uint _colorYellow;
private uint _colorWhite;
private uint _colorMonochrome;
private int _colorBlack;
private int _colorDarkBlue;
private int _colorDarkGreen;
private int _colorMediumBlue;
private int _colorBrown;
private int _colorLightGrey;
private int _colorGreen;
private int _colorAquamarine;
private int _colorDeepRed;
private int _colorPurple;
private int _colorDarkGrey;
private int _colorLightBlue;
private int _colorOrange;
private int _colorPink;
private int _colorYellow;
private int _colorWhite;
private int _colorMonochrome;
private bool _isMonochrome;
private bool _isTextInversed;
private ScannerOptions _scannerOptions;
@ -1094,7 +1097,7 @@ namespace Jellyfish.Virtu
private int _vLineLeaveVBlank;
private ushort[] _charSet;
private uint[] _colorPalette = new uint[ColorPaletteCount];
private int[] _colorPalette = new int[ColorPaletteCount];
private bool[] _isCellDirty = new bool[Height * CellColumns + 1]; // includes sentinel
}
}

Binary file not shown.