diff --git a/src/BizHawk.Emulation.Cores/Libretro/LibretroCore.cs b/src/BizHawk.Emulation.Cores/Libretro/LibretroCore.cs index 57492acd2b..28119d9b80 100644 --- a/src/BizHawk.Emulation.Cores/Libretro/LibretroCore.cs +++ b/src/BizHawk.Emulation.Cores/Libretro/LibretroCore.cs @@ -122,6 +122,8 @@ namespace BizHawk.Emulation.Cores.Libretro SetupResampler(api.comm->env.retro_system_av_info.timing.fps, api.comm->env.retro_system_av_info.timing.sample_rate); (ServiceProvider as BasicServiceProvider).Register(resampler); + + InitMemoryDomains(); // im going to assume this should happen when a game is loaded } public IEmulatorServiceProvider ServiceProvider { get; } @@ -372,6 +374,24 @@ namespace BizHawk.Emulation.Cores.Libretro LagCount = reader.ReadInt32(); IsLagFrame = reader.ReadBoolean(); } + + private readonly List _memoryDomains = new(); + private IMemoryDomains MemoryDomains { get; set; } + + private void InitMemoryDomains() + { + foreach (LibretroApi.RETRO_MEMORY m in Enum.GetValues(typeof(LibretroApi.RETRO_MEMORY))) + { + var mem = api.QUERY_GetMemory(m); + if (mem.Item1 != IntPtr.Zero && mem.Item2 > 0) + { + _memoryDomains.Add(new MemoryDomainIntPtr(Enum.GetName(m.GetType(), m), MemoryDomain.Endian.Little, mem.Item1, (long)mem.Item2, true, 1)); + } + } + + MemoryDomains = new MemoryDomainList(_memoryDomains); + (ServiceProvider as BasicServiceProvider).Register(MemoryDomains); + } } } \ No newline at end of file