From 613698e7944baf707f69981b398f7f698b5cb94d Mon Sep 17 00:00:00 2001 From: David Skywalker Date: Fri, 11 Mar 2016 03:35:26 +0100 Subject: [PATCH] add primary NES memory access, allow get cheevos. --- src/drivers/libretro/libretro.c | 64 +++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 18 deletions(-) diff --git a/src/drivers/libretro/libretro.c b/src/drivers/libretro/libretro.c index ae22c7d..d265a87 100644 --- a/src/drivers/libretro/libretro.c +++ b/src/drivers/libretro/libretro.c @@ -1377,28 +1377,56 @@ unsigned retro_get_region(void) return FSettings.PAL ? RETRO_REGION_PAL : RETRO_REGION_NTSC; } -void *retro_get_memory_data(unsigned id) + +void *retro_get_memory_data(unsigned type) { - if (id != RETRO_MEMORY_SAVE_RAM) - return NULL; + uint8_t* data; - if (iNESCart.battery) - return iNESCart.SaveGame[0]; - if (UNIFCart.battery) - return UNIFCart.SaveGame[0]; - - return 0; + switch(type) + { + case RETRO_MEMORY_SAVE_RAM: + if (iNESCart.battery) + return iNESCart.SaveGame[0]; + else if (UNIFCart.battery) + return UNIFCart.SaveGame[0]; + else + data = NULL; + break; + case RETRO_MEMORY_SYSTEM_RAM: + // TODO: add ExWRAM(0x2000) support ? + data = RAM; + break; + default: + data = NULL; + break; + } + + return data; } -size_t retro_get_memory_size(unsigned id) +size_t retro_get_memory_size(unsigned type) { - if (id != RETRO_MEMORY_SAVE_RAM) - return 0; + unsigned size; - if (iNESCart.battery) - return iNESCart.SaveGameLen[0]; - if (UNIFCart.battery) - return UNIFCart.SaveGameLen[0]; - - return 0; + switch(type) + { + case RETRO_MEMORY_SAVE_RAM: + if (iNESCart.battery) + size = iNESCart.SaveGameLen[0]; + else if (UNIFCart.battery) + size = UNIFCart.SaveGameLen[0]; + else + size = 0; + break; + case RETRO_MEMORY_SYSTEM_RAM: + // TODO: detect ExWRAM(0x2000) ? + // NES BASE RAM (0x800) + size = 0x800; + break; + default: + size = 0; + break; + } + + return size; }