From f11ae17cfb8077346662ee92bf6e153b2ce517b7 Mon Sep 17 00:00:00 2001 From: zeromus Date: Fri, 11 Nov 2016 19:25:38 -0600 Subject: [PATCH] natt forgot to ever hook up SGB saveram, so I took care of it --- .../Consoles/Nintendo/SNES/LibsnesApi_QUERY.cs | 1 + .../Consoles/Nintendo/SNES/LibsnesCore.cs | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesApi_QUERY.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesApi_QUERY.cs index c9e2e446df..bc92dbf1dd 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesApi_QUERY.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesApi_QUERY.cs @@ -57,6 +57,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES public byte* QUERY_get_memory_data(SNES_MEMORY id) { string name = QUERY_MemoryNameForId(id); + if (!SharedMemoryBlocks.ContainsKey(name)) return null; var smb = SharedMemoryBlocks[name]; return (byte*)smb.Ptr; } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.cs index 0ac374f092..800a8812b4 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.cs @@ -788,7 +788,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES { get { - return api.QUERY_get_memory_size(LibsnesApi.SNES_MEMORY.CARTRIDGE_RAM) != 0; + return api.QUERY_get_memory_size(LibsnesApi.SNES_MEMORY.CARTRIDGE_RAM) != 0 || api.QUERY_get_memory_size(LibsnesApi.SNES_MEMORY.SGB_CARTRAM) != 0; } } @@ -796,6 +796,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES { byte* buf = api.QUERY_get_memory_data(LibsnesApi.SNES_MEMORY.CARTRIDGE_RAM); var size = api.QUERY_get_memory_size(LibsnesApi.SNES_MEMORY.CARTRIDGE_RAM); + if (buf == null) + { + buf = api.QUERY_get_memory_data(LibsnesApi.SNES_MEMORY.SGB_CARTRAM); + size = api.QUERY_get_memory_size(LibsnesApi.SNES_MEMORY.SGB_CARTRAM); + } var ret = new byte[size]; Marshal.Copy((IntPtr)buf, ret, 0, size); return ret; @@ -811,10 +816,15 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES public void StoreSaveRam(byte[] data) { + byte* buf = api.QUERY_get_memory_data(LibsnesApi.SNES_MEMORY.CARTRIDGE_RAM); var size = api.QUERY_get_memory_size(LibsnesApi.SNES_MEMORY.CARTRIDGE_RAM); + if (buf == null) + { + buf = api.QUERY_get_memory_data(LibsnesApi.SNES_MEMORY.SGB_CARTRAM); + size = api.QUERY_get_memory_size(LibsnesApi.SNES_MEMORY.SGB_CARTRAM); + } if (size == 0) return; if (size != data.Length) throw new InvalidOperationException("Somehow, we got a mismatch between saveram size and what bsnes says the saveram size is"); - byte* buf = api.QUERY_get_memory_data(LibsnesApi.SNES_MEMORY.CARTRIDGE_RAM); Marshal.Copy(data, 0, (IntPtr)buf, size); }