# HG changeset patch # User Michael Pavone # Date 1662933882 25200 # Node ID b6fdedd3b070d72ae5b7e88728f665ecd3d65e06 # Parent 54cd40fc0da57141a59e9622deedcc66a2a124e2 Fix SRAM endianness for word-wide SRAM combined with Sega mapper diff -r 54cd40fc0da5 -r b6fdedd3b070 sega_mapper.c --- a/sega_mapper.c Thu Sep 08 21:18:30 2022 -0700 +++ b/sega_mapper.c Sun Sep 11 15:04:42 2022 -0700 @@ -5,10 +5,11 @@ { genesis_context * gen = context->system; address &= gen->save_ram_mask; + uint16_t *word_storage = (uint16_t *)gen->save_storage; switch(gen->save_type) { case RAM_FLAG_BOTH: - return gen->save_storage[address] << 8 | gen->save_storage[address+1]; + return word_storage[address >> 1]; case RAM_FLAG_EVEN: return gen->save_storage[address >> 1] << 8 | 0xFF; case RAM_FLAG_ODD: @@ -24,7 +25,7 @@ switch(gen->save_type) { case RAM_FLAG_BOTH: - return gen->save_storage[address]; + return gen->save_storage[address ^ 1]; case RAM_FLAG_EVEN: if (address & 1) { return 0xFF; @@ -53,12 +54,12 @@ return context; } if ((gen->bank_regs[0] & 0x3) == 1) { + uint16_t *word_storage = (uint16_t *)gen->save_storage; address &= gen->save_ram_mask; switch(gen->save_type) { case RAM_FLAG_BOTH: - gen->save_storage[address] = value >> 8; - gen->save_storage[address+1] = value; + word_storage[address >> 1] = value; break; case RAM_FLAG_EVEN: gen->save_storage[address >> 1] = value >> 8; @@ -79,7 +80,7 @@ switch(gen->save_type) { case RAM_FLAG_BOTH: - gen->save_storage[address] = value; + gen->save_storage[address ^ 1] = value; break; case RAM_FLAG_EVEN: if (!(address & 1)) {