diff --git a/src/BizHawk.Emulation.Cores/Consoles/Sega/Saturn/LibSaturnus.cs b/src/BizHawk.Emulation.Cores/Consoles/Sega/Saturn/LibSaturnus.cs new file mode 100644 index 0000000000..366a21f422 --- /dev/null +++ b/src/BizHawk.Emulation.Cores/Consoles/Sega/Saturn/LibSaturnus.cs @@ -0,0 +1,15 @@ +using BizHawk.BizInvoke; +using BizHawk.Emulation.Cores.Waterbox; + +namespace BizHawk.Emulation.Cores.Consoles.Sega.Saturn +{ + public abstract class LibSaturnus : LibNymaCore + { + [BizImport(CC)] + public abstract int GetSaveRamLength(); + [BizImport(CC)] + public abstract void GetSaveRam(byte[] data); + [BizImport(CC)] + public abstract void PutSaveRam(byte[] data, int length); + } +} diff --git a/src/BizHawk.Emulation.Cores/Consoles/Sega/Saturn/Saturnus.cs b/src/BizHawk.Emulation.Cores/Consoles/Sega/Saturn/Saturnus.cs index 88cb73249d..0b6124e695 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Sega/Saturn/Saturnus.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Sega/Saturn/Saturnus.cs @@ -9,6 +9,8 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.Saturn [PortedCore(CoreNames.Saturnus, "Mednafen Team", "1.29.0", "https://mednafen.github.io/releases/")] public class Saturnus : NymaCore, IRegionable { + private readonly LibSaturnus _saturnus; + private Saturnus(CoreComm comm) : base(comm, VSystemID.Raw.NULL, null, null, null) { @@ -42,7 +44,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.Saturn { "FIRMWARE:$ULTRA", new("SAT", "ULTRAMAN") }, // { "FIRMWARE:$SATAR", new("SAT", "AR") }, // action replay garbage }; - DoInit<LibNymaCore>(lp, "ss.wbx", firmwares); + _saturnus = DoInit<LibSaturnus>(lp, "ss.wbx", firmwares); _cachedSettingsInfo ??= SettingsInfo.Clone(); } @@ -99,5 +101,17 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.Saturn } return ret; } + + public new bool SaveRamModified => true; + + public new byte[] CloneSaveRam() + { + var data = new byte[_saturnus.GetSaveRamLength()]; + _saturnus.GetSaveRam(data); + return data; + } + + public new void StoreSaveRam(byte[] data) + => _saturnus.PutSaveRam(data, data.Length); } }