summaryrefslogtreecommitdiff
path: root/libblastem.c
diff options
context:
space:
mode:
authornegativeExponent <negativeExponent@users.noreply.github.com>2020-04-13 21:56:00 -0700
committernegativeExponent <negativeExponent@users.noreply.github.com>2020-04-13 21:56:00 -0700
commit0a95286145a4e48bd6ef3ed605727b01cc26c9f6 (patch)
tree4008410bb1a427ea40651de1a0693dd6507d7c74 /libblastem.c
parent1fa2143c1aee80784f4a9aca1e9a544fc71584c0 (diff)
Add memory hook for genesis/megadrive save and cheevos support
Diffstat (limited to 'libblastem.c')
-rw-r--r--libblastem.c42
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;
}