From 896ef80d3ac09e08f01f83ba14ed904db3c80192 Mon Sep 17 00:00:00 2001 From: Nathaniel Walizer Date: Sun, 12 Jan 2025 11:18:40 -0800 Subject: [PATCH] Force internal mapper state update on system state load --- src/map/cnrom.c | 2 ++ src/map/mmc1.c | 6 ++++++ src/map/mmc3.c | 10 ++++++++++ 3 files changed, 18 insertions(+) diff --git a/src/map/cnrom.c b/src/map/cnrom.c index d7ee707..fa68dd1 100644 --- a/src/map/cnrom.c +++ b/src/map/cnrom.c @@ -110,6 +110,8 @@ int cnrom_state_read(nes_mapper* nes_map, const void* data) { memcpy(map->vram, ptr, sizeof(map->vram)); ptr += sizeof(map->vram); + cnrom_set_bank(map, map->bank); + return (ptr - data); } diff --git a/src/map/mmc1.c b/src/map/mmc1.c index 302a9f7..6df73b3 100644 --- a/src/map/mmc1.c +++ b/src/map/mmc1.c @@ -246,8 +246,14 @@ int mmc1_state_size(const nes_mapper* nes_map) { int mmc1_state_read(nes_mapper* nes_map, const void* data) { mmc1_mapper* map = (mmc1_mapper*)nes_map->data; + int size = mmc1_state_size(nes_map); memcpy(&(map->reg_shift), data, size); + + mmc1_update_prg(map); + mmc1_update_chr(map); + mmc1_update_vram(map); + return size; } diff --git a/src/map/mmc3.c b/src/map/mmc3.c index be5a34d..bc70e65 100644 --- a/src/map/mmc3.c +++ b/src/map/mmc3.c @@ -355,8 +355,18 @@ int mmc3_state_size(const nes_mapper* nes_map) { int mmc3_state_read(nes_mapper* nes_map, const void* data) { mmc3_mapper* map = (mmc3_mapper*)nes_map->data; + + uint8_t old_bank_select = map->bank_select; + int size = mmc3_state_size(nes_map); memcpy(map->r, data, size); + + uint8_t new_bank_select = map->bank_select; + map->bank_select = old_bank_select; + + mmc3_update_rom_mode(map, new_bank_select); + mmc3_update_vram(map); + return size; }