IEmulator: clarify naming and implementations so it's clear that CloneSaveRam() always returns a clone that you can do whatever you want with (but won't modify the underlying)
This commit is contained in:
parent
e29e4a1227
commit
f0c8bd3842
|
@ -1354,7 +1354,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
else
|
||||
{
|
||||
var oldram = Global.Emulator.ReadSaveRam();
|
||||
var oldram = Global.Emulator.CloneSaveRam();
|
||||
if (oldram == null)
|
||||
{
|
||||
// we're eating this one now. the possible negative consequence is that a user could lose
|
||||
|
@ -1401,7 +1401,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
|
||||
var writer = new BinaryWriter(new FileStream(path, FileMode.Create, FileAccess.Write));
|
||||
var saveram = Global.Emulator.ReadSaveRam();
|
||||
var saveram = Global.Emulator.CloneSaveRam();
|
||||
|
||||
writer.Write(saveram, 0, saveram.Length);
|
||||
writer.Close();
|
||||
|
|
|
@ -72,7 +72,7 @@ namespace BizHawk.Emulation.Common
|
|||
public int LagCount { get { return 0; } set { return; } }
|
||||
public bool IsLagFrame { get { return false; } }
|
||||
|
||||
public byte[] ReadSaveRam() { return null; }
|
||||
public byte[] CloneSaveRam() { return null; }
|
||||
public void StoreSaveRam(byte[] data) { }
|
||||
public void ClearSaveRam() { }
|
||||
public bool DeterministicEmulation { get { return true; } }
|
||||
|
|
|
@ -81,7 +81,7 @@ namespace BizHawk.Emulation.Common
|
|||
/// <summary>
|
||||
/// return a copy of the saveram. editing it won't do you any good unless you later call StoreSaveRam()
|
||||
/// </summary>
|
||||
byte[] ReadSaveRam();
|
||||
byte[] CloneSaveRam();
|
||||
|
||||
/// <summary>
|
||||
/// store new saveram to the emu core. the data should be the same size as the return from ReadSaveRam()
|
||||
|
|
|
@ -523,7 +523,7 @@ namespace BizHawk.Emulation.Cores.Calculators
|
|||
|
||||
public bool DeterministicEmulation { get { return true; } }
|
||||
|
||||
public byte[] ReadSaveRam() { return null; }
|
||||
public byte[] CloneSaveRam() { return null; }
|
||||
public void StoreSaveRam(byte[] data) { }
|
||||
public void ClearSaveRam() { }
|
||||
public bool SaveRamModified
|
||||
|
|
|
@ -21,7 +21,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64
|
|||
SyncState(new Serializer(reader));
|
||||
}
|
||||
|
||||
public byte[] ReadSaveRam()
|
||||
public byte[] CloneSaveRam()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -249,7 +249,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600
|
|||
ser.EndSection();
|
||||
}
|
||||
|
||||
public byte[] ReadSaveRam()
|
||||
public byte[] CloneSaveRam()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -73,7 +73,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari7800
|
|||
private int _frame = 0;
|
||||
|
||||
#region saveram
|
||||
public byte[] ReadSaveRam()
|
||||
public byte[] CloneSaveRam()
|
||||
{
|
||||
return (byte[])hsram.Clone();
|
||||
}
|
||||
|
|
|
@ -169,7 +169,7 @@ namespace BizHawk.Emulation.Cores.ColecoVision
|
|||
}
|
||||
}
|
||||
|
||||
public byte[] ReadSaveRam() { return null; }
|
||||
public byte[] CloneSaveRam() { return null; }
|
||||
public void StoreSaveRam(byte[] data) { }
|
||||
public void ClearSaveRam() { }
|
||||
public bool SaveRamModified { get; set; }
|
||||
|
|
|
@ -161,7 +161,7 @@ namespace BizHawk.Emulation.Cores.Intellivision
|
|||
public bool DeterministicEmulation { get { return true; } }
|
||||
|
||||
|
||||
public byte[] ReadSaveRam() { return null; }
|
||||
public byte[] CloneSaveRam() { return null; }
|
||||
public void StoreSaveRam(byte[] data) { }
|
||||
public void ClearSaveRam() { }
|
||||
public bool SaveRamModified
|
||||
|
|
|
@ -105,7 +105,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
|
|||
|
||||
#region saveram
|
||||
|
||||
public byte[] ReadSaveRam()
|
||||
public byte[] CloneSaveRam()
|
||||
{
|
||||
if (disposed)
|
||||
throw new ObjectDisposedException(this.GetType().ToString());
|
||||
|
|
|
@ -106,7 +106,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
|
|||
|
||||
#region SaveRam
|
||||
|
||||
public byte[] ReadSaveRam()
|
||||
public byte[] CloneSaveRam()
|
||||
{
|
||||
return new byte[16];
|
||||
}
|
||||
|
|
|
@ -453,7 +453,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
|||
|
||||
#region saveram
|
||||
|
||||
public byte[] ReadSaveRam()
|
||||
public byte[] CloneSaveRam()
|
||||
{
|
||||
int length = LibGambatte.gambatte_savesavedatalength(GambatteState);
|
||||
|
||||
|
|
|
@ -231,10 +231,10 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
|||
|
||||
#region saveram
|
||||
|
||||
public byte[] ReadSaveRam()
|
||||
public byte[] CloneSaveRam()
|
||||
{
|
||||
byte[] lb = L.ReadSaveRam();
|
||||
byte[] rb = R.ReadSaveRam();
|
||||
byte[] lb = L.CloneSaveRam();
|
||||
byte[] rb = R.CloneSaveRam();
|
||||
byte[] ret = new byte[lb.Length + rb.Length];
|
||||
Buffer.BlockCopy(lb, 0, ret, 0, lb.Length);
|
||||
Buffer.BlockCopy(rb, 0, ret, lb.Length, rb.Length);
|
||||
|
@ -243,8 +243,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
|||
|
||||
public void StoreSaveRam(byte[] data)
|
||||
{
|
||||
byte[] lb = new byte[L.ReadSaveRam().Length];
|
||||
byte[] rb = new byte[R.ReadSaveRam().Length];
|
||||
byte[] lb = new byte[L.CloneSaveRam().Length];
|
||||
byte[] rb = new byte[R.CloneSaveRam().Length];
|
||||
Buffer.BlockCopy(data, 0, lb, 0, lb.Length);
|
||||
Buffer.BlockCopy(data, lb.Length, rb, 0, rb.Length);
|
||||
L.StoreSaveRam(lb);
|
||||
|
|
|
@ -276,7 +276,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64
|
|||
|
||||
public bool DeterministicEmulation { get { return false; } }
|
||||
|
||||
public byte[] ReadSaveRam()
|
||||
public byte[] CloneSaveRam()
|
||||
{
|
||||
return api.SaveSaveram();
|
||||
}
|
||||
|
|
|
@ -577,7 +577,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi
|
|||
{
|
||||
if (saveram_backup != null)
|
||||
{
|
||||
return saveram_backup;
|
||||
return (byte[])saveram_backup.Clone();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -323,7 +323,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
|||
|
||||
|
||||
|
||||
public byte[] ReadSaveRam()
|
||||
public byte[] CloneSaveRam()
|
||||
{
|
||||
if (board is FDS)
|
||||
return (board as FDS).ReadSaveRam();
|
||||
|
|
|
@ -190,10 +190,10 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES
|
|||
SaveRamBuff = new byte[size];
|
||||
}
|
||||
|
||||
public byte[] ReadSaveRam()
|
||||
public byte[] CloneSaveRam()
|
||||
{
|
||||
LibQuickNES.ThrowStringError(LibQuickNES.qn_battery_ram_save(Context, SaveRamBuff, SaveRamBuff.Length));
|
||||
return SaveRamBuff;
|
||||
return (byte[])SaveRamBuff.Clone();
|
||||
}
|
||||
|
||||
public void StoreSaveRam(byte[] data)
|
||||
|
|
|
@ -737,7 +737,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
|||
}
|
||||
}
|
||||
|
||||
public byte[] ReadSaveRam()
|
||||
public byte[] CloneSaveRam()
|
||||
{
|
||||
byte* buf = api.QUERY_get_memory_data(LibsnesApi.SNES_MEMORY.CARTRIDGE_RAM);
|
||||
var size = api.QUERY_get_memory_size(LibsnesApi.SNES_MEMORY.CARTRIDGE_RAM);
|
||||
|
|
|
@ -62,7 +62,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES9X
|
|||
|
||||
#region saveram
|
||||
|
||||
public byte[] ReadSaveRam()
|
||||
public byte[] CloneSaveRam()
|
||||
{
|
||||
return new byte[0];
|
||||
}
|
||||
|
|
|
@ -357,7 +357,7 @@ namespace BizHawk.Emulation.Cores.PCEngine
|
|||
public string Region { get; set; }
|
||||
public bool DeterministicEmulation { get { return true; } }
|
||||
|
||||
public byte[] ReadSaveRam()
|
||||
public byte[] CloneSaveRam()
|
||||
{
|
||||
if (BRAM != null)
|
||||
return (byte[])BRAM.Clone();
|
||||
|
|
|
@ -41,7 +41,7 @@ namespace BizHawk.Emulation.Cores.Sega.Genesis
|
|||
Console.WriteLine("SaveRAM enabled. Start: ${0:X6} End: ${1:X6} Length: ${2:X} Mode: {3}", SaveRamStartOffset, SaveRamEndOffset, SaveRamLength, RH_SRamInterpretation());
|
||||
}
|
||||
|
||||
public byte[] ReadSaveRam() { return (byte[])SaveRAM.Clone(); }
|
||||
public byte[] CloneSaveRam() { return (byte[])SaveRAM.Clone(); }
|
||||
public void StoreSaveRam(byte[] data) { Array.Copy(data, SaveRAM, data.Length); }
|
||||
public void ClearSaveRam() { SaveRAM = new byte[SaveRAM.Length]; }
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem
|
|||
|
||||
public byte[] BiosRom;
|
||||
|
||||
public byte[] ReadSaveRam()
|
||||
public byte[] CloneSaveRam()
|
||||
{
|
||||
if (SaveRAM != null)
|
||||
return (byte[])SaveRAM.Clone();
|
||||
|
|
|
@ -308,11 +308,18 @@ namespace BizHawk.Emulation.Cores.Sega.Saturn
|
|||
|
||||
#region saveram
|
||||
|
||||
public byte[] ReadSaveRam()
|
||||
public byte[] CloneSaveRam()
|
||||
{
|
||||
if (Disposed)
|
||||
{
|
||||
return DisposedSaveRam ?? new byte[0];
|
||||
if (DisposedSaveRam != null)
|
||||
{
|
||||
return (byte[])DisposedSaveRam.Clone();
|
||||
}
|
||||
else
|
||||
{
|
||||
return new byte[0];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -554,7 +561,7 @@ namespace BizHawk.Emulation.Cores.Sega.Saturn
|
|||
{
|
||||
ActivateGL();
|
||||
if (SaveRamModified)
|
||||
DisposedSaveRam = ReadSaveRam();
|
||||
DisposedSaveRam = CloneSaveRam();
|
||||
LibYabause.libyabause_setvidbuff(IntPtr.Zero);
|
||||
LibYabause.libyabause_setsndbuff(IntPtr.Zero);
|
||||
LibYabause.libyabause_deinit();
|
||||
|
|
|
@ -412,11 +412,18 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx
|
|||
|
||||
byte[] DisposedSaveRam = null;
|
||||
|
||||
public byte[] ReadSaveRam()
|
||||
public byte[] CloneSaveRam()
|
||||
{
|
||||
if (disposed)
|
||||
{
|
||||
return DisposedSaveRam ?? new byte[0];
|
||||
if (DisposedSaveRam != null)
|
||||
{
|
||||
return (byte[])DisposedSaveRam.Clone();
|
||||
}
|
||||
else
|
||||
{
|
||||
return new byte[0];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -652,7 +659,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx
|
|||
if (AttachedCore != this)
|
||||
throw new Exception();
|
||||
if (SaveRamModified)
|
||||
DisposedSaveRam = ReadSaveRam();
|
||||
DisposedSaveRam = CloneSaveRam();
|
||||
KillMemCallbacks();
|
||||
AttachedCore = null;
|
||||
disposed = true;
|
||||
|
|
|
@ -149,7 +149,7 @@ namespace BizHawk.Emulation.Cores.Sony.PSP
|
|||
get { return true; }
|
||||
}
|
||||
|
||||
public byte[] ReadSaveRam()
|
||||
public byte[] CloneSaveRam()
|
||||
{
|
||||
return new byte[0];
|
||||
}
|
||||
|
|
|
@ -271,7 +271,7 @@ namespace BizHawk.Emulation.Cores.Sony.PSX
|
|||
public int LagCount { get { return 0; } set { return; } }
|
||||
public bool IsLagFrame { get { return false; } }
|
||||
|
||||
public byte[] ReadSaveRam() { return null; }
|
||||
public byte[] CloneSaveRam() { return null; }
|
||||
public void StoreSaveRam(byte[] data) { }
|
||||
public void ClearSaveRam() { }
|
||||
public bool DeterministicEmulation { get { return true; } }
|
||||
|
|
|
@ -185,11 +185,11 @@ namespace BizHawk.Emulation.Cores.WonderSwan
|
|||
|
||||
byte[] saverambuff;
|
||||
|
||||
public byte[] ReadSaveRam()
|
||||
public byte[] CloneSaveRam()
|
||||
{
|
||||
if (!BizSwan.bizswan_saveramsave(Core, saverambuff, saverambuff.Length))
|
||||
throw new InvalidOperationException("bizswan_saveramsave() returned false!");
|
||||
return saverambuff;
|
||||
return (byte[])saverambuff.Clone();
|
||||
}
|
||||
|
||||
public void StoreSaveRam(byte[] data)
|
||||
|
|
|
@ -243,7 +243,7 @@ namespace BizHawk.Emulation.Cores
|
|||
|
||||
byte[] saverambuff = new byte[0];
|
||||
|
||||
public byte[] ReadSaveRam()
|
||||
public byte[] CloneSaveRam()
|
||||
{
|
||||
int size = (int)retro.retro_get_memory_size(LibRetro.RETRO_MEMORY.SAVE_RAM);
|
||||
if (saverambuff.Length != size)
|
||||
|
@ -254,7 +254,7 @@ namespace BizHawk.Emulation.Cores
|
|||
throw new Exception("retro_get_memory_data(RETRO_MEMORY_SAVE_RAM) returned NULL");
|
||||
|
||||
Marshal.Copy(src, saverambuff, 0, size);
|
||||
return saverambuff;
|
||||
return (byte[])saverambuff.Clone();
|
||||
}
|
||||
|
||||
public void StoreSaveRam(byte[] data)
|
||||
|
|
Loading…
Reference in New Issue