From b36538a1ae80cbf4b95c4cbb4c41cf0e20a994ea Mon Sep 17 00:00:00 2001 From: Michael Pavone Date: Tue, 23 Apr 2019 18:37:08 -0700 Subject: 16-bit wide save RAM is stored in memory byteswapped for performance reasons, but saving it to disc that way isn't great. Swap before save/after load to fix --- genesis.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'genesis.c') diff --git a/genesis.c b/genesis.c index 99dce0f..0049fcf 100644 --- a/genesis.c +++ b/genesis.c @@ -1230,7 +1230,13 @@ static void persist_save(system_header *system) fprintf(stderr, "Failed to open %s file %s for writing\n", save_type_name(gen->save_type), save_filename); return; } + if (gen->save_type == RAM_FLAG_BOTH) { + byteswap_rom(gen->save_size, (uint16_t *)gen->save_storage); + } fwrite(gen->save_storage, 1, gen->save_size, f); + if (gen->save_type == RAM_FLAG_BOTH) { + byteswap_rom(gen->save_size, (uint16_t *)gen->save_storage); + } fclose(f); printf("Saved %s to %s\n", save_type_name(gen->save_type), save_filename); } @@ -1243,6 +1249,9 @@ static void load_save(system_header *system) uint32_t read = fread(gen->save_storage, 1, gen->save_size, f); fclose(f); if (read > 0) { + if (gen->save_type == RAM_FLAG_BOTH) { + byteswap_rom(gen->save_size, (uint16_t *)gen->save_storage); + } printf("Loaded %s from %s\n", save_type_name(gen->save_type), save_filename); } } -- cgit v1.2.3