# HG changeset patch # User Michael Pavone # Date 1556069828 25200 # Node ID ef3d368d59b0309809d119402087febbd27a6d38 # Parent 882746581f17d3f80300a584febf5902f7e07efc 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 diff -r 882746581f17 -r ef3d368d59b0 genesis.c --- a/genesis.c Tue Apr 23 08:47:52 2019 -0700 +++ b/genesis.c Tue Apr 23 18:37:08 2019 -0700 @@ -1230,7 +1230,13 @@ 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 @@ 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); } }