Fixed SRAM related issues - Caused Metroid/Kirby slowdowns. Fixed console object destruction to allow save to disk at destruction time.

This commit is contained in:
Souryo 2014-06-26 11:41:27 -04:00
parent 88d57ec12e
commit 7180c64d50
3 changed files with 16 additions and 12 deletions

View file

@ -167,7 +167,7 @@ class BaseMapper : public IMemoryHandler, public Snapshotable
InitMapper();
}
~BaseMapper()
virtual ~BaseMapper()
{
delete[] _prgRAM;
delete[] _chrRAM;

View file

@ -27,11 +27,16 @@ MemoryManager::MemoryManager(shared_ptr<BaseMapper> mapper)
memset(_vramWriteHandlers, 0, VRAMSize * sizeof(IMemoryHandler*));
//Load battery data if present
_mapper->LoadBattery(_SRAM);
if(_mapper->HasBattery()) {
_mapper->LoadBattery(_SRAM);
}
}
MemoryManager::~MemoryManager()
{
if(_mapper->HasBattery()) {
_mapper->SaveBattery(_SRAM);
}
delete[] _internalRAM;
delete[] _videoRAM;
delete[] _SRAM;
@ -120,10 +125,7 @@ void MemoryManager::Write(uint16_t addr, uint8_t value)
} else if(addr <= 0x5FFF) {
_expansionRAM[addr & 0x1FFF] = value;
} else if(addr <= 0x7FFF) {
if(_SRAM[addr & 0x1FFF] != value) {
_SRAM[addr & 0x1FFF] = value;
_mapper->SaveBattery(_SRAM);
}
_SRAM[addr & 0x1FFF] = value;
} else {
WriteRegister(addr, value);
}

View file

@ -213,15 +213,17 @@ namespace NES {
_soundManager->Reset();
if(_console) {
_console->Stop();
if(powerOff) {
_console.release();
} else {
_renderer->SetFlags(UIFlags::ShowPauseScreen);
}
}
if(_emuThread) {
_emuThread->join();
_emuThread.release();
if(powerOff) {
_console.reset(nullptr);
} else {
_renderer->SetFlags(UIFlags::ShowPauseScreen);
}
_emuThread.reset(nullptr);
}
SetMenuEnabled(ID_NES_PAUSE, false);