From f14855bf6b19c282eb6a71b0cb95849ad37c865a Mon Sep 17 00:00:00 2001 From: Souryo Date: Sat, 7 Oct 2017 20:32:55 -0400 Subject: [PATCH] Savestates: Fixed 4-screen mirroring games not saving the extra 2 nametables to file --- Core/BaseMapper.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Core/BaseMapper.cpp b/Core/BaseMapper.cpp index c27e6987..6fe43628 100644 --- a/Core/BaseMapper.cpp +++ b/Core/BaseMapper.cpp @@ -449,6 +449,20 @@ void BaseMapper::StreamState(bool saving) ArrayInfo nametableIndexes = { _nametableIndexes, 4 }; Stream(_mirroringType, chrRam, workRam, saveRam, prgPageNumbers, chrPageNumbers, nametableIndexes); + bool hasExtraNametable[2] = { _cartNametableRam[0] != nullptr, _cartNametableRam[1] != nullptr }; + Stream(hasExtraNametable[0], hasExtraNametable[1]); + + for(int i = 0; i < 2; i++) { + if(hasExtraNametable[i]) { + if(!_cartNametableRam[i]) { + _cartNametableRam[i] = new uint8_t[0x400]; + } + + ArrayInfo ram = { _cartNametableRam[i], 0x400 }; + Stream(ram); + } + } + if(!saving) { for(uint16_t i = 0; i < 64; i++) { if(_prgPageNumbers[i] != 0xEEEEEEEE) {