From 5f76140aa53afa55081f8ea15ae94b3493588595 Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Fri, 17 Jul 2020 23:17:49 +1000 Subject: [PATCH] libretro: Expose main RAM to frontend --- .../libretro_host_interface.cpp | 25 +++++++++++++++++++ .../libretro_host_interface.h | 2 ++ src/duckstation-libretro/main.cpp | 4 +-- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/duckstation-libretro/libretro_host_interface.cpp b/src/duckstation-libretro/libretro_host_interface.cpp index 64af34bb9..687a8b1e1 100644 --- a/src/duckstation-libretro/libretro_host_interface.cpp +++ b/src/duckstation-libretro/libretro_host_interface.cpp @@ -5,6 +5,7 @@ #include "common/log.h" #include "common/string_util.h" #include "core/analog_controller.h" +#include "core/bus.h" #include "core/digital_controller.h" #include "core/game_list.h" #include "core/gpu.h" @@ -299,6 +300,30 @@ bool LibretroHostInterface::retro_unserialize(const void* data, size_t size) return true; } +void* LibretroHostInterface::retro_get_memory_data(unsigned id) +{ + switch (id) + { + case RETRO_MEMORY_SYSTEM_RAM: + return m_system ? m_system->GetBus()->GetRAM() : nullptr; + + default: + return nullptr; + } +} + +size_t LibretroHostInterface::retro_get_memory_size(unsigned id) +{ + switch (id) + { + case RETRO_MEMORY_SYSTEM_RAM: + return Bus::RAM_SIZE; + + default: + return 0; + } +} + bool LibretroHostInterface::AcquireHostDisplay() { // start in software mode, switch to hardware later diff --git a/src/duckstation-libretro/libretro_host_interface.h b/src/duckstation-libretro/libretro_host_interface.h index 030704fb3..ff1ab4f6d 100644 --- a/src/duckstation-libretro/libretro_host_interface.h +++ b/src/duckstation-libretro/libretro_host_interface.h @@ -37,6 +37,8 @@ public: size_t retro_serialize_size(); bool retro_serialize(void* data, size_t size); bool retro_unserialize(const void* data, size_t size); + void* retro_get_memory_data(unsigned id); + size_t retro_get_memory_size(unsigned id); protected: bool AcquireHostDisplay() override; diff --git a/src/duckstation-libretro/main.cpp b/src/duckstation-libretro/main.cpp index 41d6f4e5d..14bbc10d1 100644 --- a/src/duckstation-libretro/main.cpp +++ b/src/duckstation-libretro/main.cpp @@ -111,12 +111,12 @@ RETRO_API unsigned retro_get_region(void) RETRO_API void* retro_get_memory_data(unsigned id) { - return nullptr; + return g_libretro_host_interface.retro_get_memory_data(id); } RETRO_API size_t retro_get_memory_size(unsigned id) { - return 0; + return g_libretro_host_interface.retro_get_memory_size(id); } RETRO_API void retro_set_environment(retro_environment_t f)