diff options
author | Michael Pavone <pavone@retrodev.com> | 2019-04-23 18:37:08 -0700 |
---|---|---|
committer | Michael Pavone <pavone@retrodev.com> | 2019-04-23 18:37:08 -0700 |
commit | b36538a1ae80cbf4b95c4cbb4c41cf0e20a994ea (patch) | |
tree | a1f595df2098eb4d3322d8aaefe120c165fcf8a4 | |
parent | d41b0ba8b54ad839cd5711383dd36d6ea3dc0cd7 (diff) |
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
-rw-r--r-- | genesis.c | 9 |
1 files changed, 9 insertions, 0 deletions
@@ -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); } } |