diff options
author | negativeExponent <negativeExponent@users.noreply.github.com> | 2020-04-13 21:56:00 -0700 |
---|---|---|
committer | negativeExponent <negativeExponent@users.noreply.github.com> | 2020-04-13 21:56:00 -0700 |
commit | 0a95286145a4e48bd6ef3ed605727b01cc26c9f6 (patch) | |
tree | 4008410bb1a427ea40651de1a0693dd6507d7c74 | |
parent | 1fa2143c1aee80784f4a9aca1e9a544fc71584c0 (diff) |
Add memory hook for genesis/megadrive save and cheevos support
-rw-r--r-- | libblastem.c | 42 |
1 files changed, 28 insertions, 14 deletions
diff --git a/libblastem.c b/libblastem.c index 1beab44..b6b6ed8 100644 --- a/libblastem.c +++ b/libblastem.c @@ -269,35 +269,39 @@ RETRO_API unsigned retro_get_region(void) /* Gets region of memory. */ RETRO_API void *retro_get_memory_data(unsigned id) { - if (id == RETRO_MEMORY_SYSTEM_RAM) - { - switch (stype) - { - case SYSTEM_GENESIS: - { + switch (id) { + case RETRO_MEMORY_SYSTEM_RAM: + switch (stype) { + case SYSTEM_GENESIS: { genesis_context *gen = (genesis_context *)current_system; return (uint8_t *)gen->work_ram; } - break; #ifndef NO_Z80 - case SYSTEM_SMS: - { + case SYSTEM_SMS: { sms_context *sms = (sms_context *)current_system; return sms->ram; } - break; #endif } + break; + case RETRO_MEMORY_SAVE_RAM: + if (stype == SYSTEM_GENESIS) { + genesis_context *gen = (genesis_context *)current_system; + if (gen->save_type != SAVE_NONE) + return gen->save_storage; + } + break; + default: + break; } return NULL; } RETRO_API size_t retro_get_memory_size(unsigned id) { - if (id == RETRO_MEMORY_SYSTEM_RAM) - { - switch (stype) - { + switch (id) { + case RETRO_MEMORY_SYSTEM_RAM: + switch (stype) { case SYSTEM_GENESIS: return RAM_WORDS * sizeof(uint16_t); #ifndef NO_Z80 @@ -305,6 +309,16 @@ RETRO_API size_t retro_get_memory_size(unsigned id) return SMS_RAM_SIZE; #endif } + break; + case RETRO_MEMORY_SAVE_RAM: + if (stype == SYSTEM_GENESIS) { + genesis_context *gen = (genesis_context *)current_system; + if (gen->save_type != SAVE_NONE) + return gen->save_size; + } + break; + default: + break; } return 0; } |