From d854ca66f55d2bba536bcee7b3a163ce5650c3d9 Mon Sep 17 00:00:00 2001 From: Andre Leiradella Date: Thu, 13 Jul 2017 00:23:01 +0100 Subject: [PATCH] Memory map all the available RAM --- src/cheat.c | 5 ++++- src/cheat.h | 2 ++ src/drivers/libretro/libretro.c | 24 +++++++++++++++++++++++- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/cheat.c b/src/cheat.c index 79be91f..1bdd82c 100644 --- a/src/cheat.c +++ b/src/cheat.c @@ -32,6 +32,7 @@ #include "fceu-memory.h" static uint8 *CheatRPtrs[64]; +uint8 *MMapPtrs[64]; void FCEU_CheatResetRAM(void) { int x; @@ -44,8 +45,10 @@ void FCEU_CheatAddRAM(int s, uint32 A, uint8 *p) { uint32 AB = A >> 10; int x; - for (x = s - 1; x >= 0; x--) + for (x = s - 1; x >= 0; x--) { CheatRPtrs[AB + x] = p - A; + MMapPtrs[AB + x] = p + 1024 * x; + } } diff --git a/src/cheat.h b/src/cheat.h index 824e513..9081c96 100644 --- a/src/cheat.h +++ b/src/cheat.h @@ -1,6 +1,8 @@ #ifndef _FCEU_CHEAT_H #define _FCEU_CHEAT_H +extern uint8 *MMapPtrs[64]; + void FCEU_CheatResetRAM(void); void FCEU_CheatAddRAM(int s, uint32 A, uint8 *p); diff --git a/src/drivers/libretro/libretro.c b/src/drivers/libretro/libretro.c index 7c3a1c0..b0f42d8 100644 --- a/src/drivers/libretro/libretro.c +++ b/src/drivers/libretro/libretro.c @@ -1644,7 +1644,7 @@ extern uint32_t iNESGameCRC32; bool retro_load_game(const struct retro_game_info *game) { - unsigned i; + unsigned i, j; char* dir=NULL; char* sav_dir=NULL; size_t fourscore_len = sizeof(fourscore_db_list) / sizeof(fourscore_db_list[0]); @@ -1701,6 +1701,9 @@ bool retro_load_game(const struct retro_game_info *game) { 0 }, }; + struct retro_memory_descriptor descs[64]; + struct retro_memory_map mmaps; + if (!game) return false; @@ -1766,6 +1769,25 @@ bool retro_load_game(const struct retro_game_info *game) } } + memset(descs, 0, sizeof(descs)); + i = 0; + + for (j = 0; j < 64; j++) + { + if (MMapPtrs[j] != NULL) + { + descs[i].ptr = MMapPtrs[j]; + descs[i].start = j * 1024; + descs[i].len = 1024; + descs[i].select = 0; + i++; + } + } + + mmaps.descriptors = descs; + mmaps.num_descriptors = i; + environ_cb(RETRO_ENVIRONMENT_SET_MEMORY_MAPS, &mmaps); + return true; }