gen: savestates work, though they're nes-style brittle savestates for now

This commit is contained in:
beirich 2012-09-17 23:28:22 +00:00
parent 1402eb8470
commit b2e48d8749
1 changed files with 25 additions and 5 deletions

View File

@ -271,6 +271,15 @@ namespace BizHawk.Emulation.Consoles.Sega
public void SaveStateText(TextWriter writer) public void SaveStateText(TextWriter writer)
{ {
var buf = new byte[141485 + SaveRAM.Length];
var stream = new MemoryStream(buf);
var bwriter = new BinaryWriter(stream);
SaveStateBinary(bwriter);
writer.WriteLine("Version 1");
writer.Write("BigFatBlob ");
buf.SaveAsHex(writer);
/*writer.WriteLine("[MegaDrive]"); /*writer.WriteLine("[MegaDrive]");
MainCPU.SaveStateText(writer, "Main68K"); MainCPU.SaveStateText(writer, "Main68K");
SoundCPU.SaveStateText(writer); SoundCPU.SaveStateText(writer);
@ -288,6 +297,14 @@ namespace BizHawk.Emulation.Consoles.Sega
public void LoadStateText(TextReader reader) public void LoadStateText(TextReader reader)
{ {
var buf = new byte[141485 + SaveRAM.Length];
var version = reader.ReadLine();
if (version != "Version 1")
throw new Exception("Not a valid state vesrion! sorry! your state is bad! Robust states will be added later!");
var omgstate = reader.ReadLine().Split(' ')[1];
buf.ReadFromHex(omgstate);
LoadStateBinary(new BinaryReader(new MemoryStream(buf)));
/*while (true) /*while (true)
{ {
string[] args = reader.ReadLine().Split(' '); string[] args = reader.ReadLine().Split(' ');
@ -323,17 +340,20 @@ namespace BizHawk.Emulation.Consoles.Sega
SoundCPU.SaveStateBinary(writer); // 46 SoundCPU.SaveStateBinary(writer); // 46
PSG.SaveStateBinary(writer); // 15 PSG.SaveStateBinary(writer); // 15
VDP.SaveStateBinary(writer); // 65781 VDP.SaveStateBinary(writer); // 65781
YM2612.SaveStateBinary(writer); // 35 YM2612.SaveStateBinary(writer); // 1785
writer.Write(Ram); // 65535 writer.Write(Ram); // 65535
writer.Write(Z80Ram); // 8192 writer.Write(Z80Ram); // 8192
writer.Write(Frame); // 4 writer.Write(Frame); // 4
// lag counter crap TODO
writer.Write(M68000HasZ80Bus); // 1 writer.Write(M68000HasZ80Bus); // 1
writer.Write(Z80Reset); // 1 writer.Write(Z80Reset); // 1
// TODO Saveram/EEPROM if (SaveRAM.Length > 0)
writer.Write(SaveRAM);
// TODO: EEPROM/cart HW state
// TODO: lag counter crap
} }
public void LoadStateBinary(BinaryReader reader) public void LoadStateBinary(BinaryReader reader)
@ -354,7 +374,7 @@ namespace BizHawk.Emulation.Consoles.Sega
public byte[] SaveStateBinary() public byte[] SaveStateBinary()
{ {
var buf = new byte[141485]; var buf = new byte[141485+SaveRAM.Length];
var stream = new MemoryStream(buf); var stream = new MemoryStream(buf);
var writer = new BinaryWriter(stream); var writer = new BinaryWriter(stream);
SaveStateBinary(writer); SaveStateBinary(writer);