Libretro: Add savedata support
Jeffrey Pfau jeffrey@endrift.com
Sun, 08 Mar 2015 22:24:29 -0700
1 files changed,
22 insertions(+),
9 deletions(-)
jump to
M
src/platform/libretro/libretro.c
→
src/platform/libretro/libretro.c
@@ -171,9 +171,8 @@ if (!GBAIsROM(rom)) {
return false; } - // TODO - save = 0; - savedata = 0; + savedata = malloc(SIZE_CART_FLASH1M); + save = VFileFromMemory(savedata, SIZE_CART_FLASH1M); GBALoadROM(&gba, rom, save, game->path); ARMReset(&cpu);@@ -232,15 +231,29 @@ return false;
} void* retro_get_memory_data(unsigned id) { - // TODO - UNUSED(id); - return 0; + if (id != RETRO_MEMORY_SAVE_RAM) { + return 0; + } + return savedata; } size_t retro_get_memory_size(unsigned id) { - // TODO - UNUSED(id); - return 0; + if (id != RETRO_MEMORY_SAVE_RAM) { + return 0; + } + switch (gba.memory.savedata.type) { + case SAVEDATA_AUTODETECT: + case SAVEDATA_FLASH1M: + return SIZE_CART_FLASH1M; + case SAVEDATA_FLASH512: + return SIZE_CART_FLASH512; + case SAVEDATA_EEPROM: + return SIZE_CART_EEPROM; + case SAVEDATA_SRAM: + return SIZE_CART_SRAM; + case SAVEDATA_FORCE_NONE: + return 0; + } } void GBARetroLog(struct GBAThread* thread, enum GBALogLevel level, const char* format, va_list args) {