mirror of
https://github.com/SourMesen/Mesen2.git
synced 2025-04-02 10:21:44 -04:00
NES: Fixed NSF playback issues due to incorrect state at power on/reset
This commit is contained in:
parent
deb8d736d2
commit
dea1a2fd58
4 changed files with 11 additions and 0 deletions
|
@ -166,6 +166,7 @@ public:
|
|||
|
||||
virtual ~BaseMapper();
|
||||
virtual void Reset(bool softReset);
|
||||
virtual void OnAfterResetPowerOn() {}
|
||||
|
||||
GameSystem GetGameSystem();
|
||||
PpuModel GetPpuModel();
|
||||
|
|
|
@ -88,6 +88,11 @@ void NsfMapper::Reset(bool softReset)
|
|||
if(!softReset) {
|
||||
_songNumber = _nsfHeader.StartingSong - 1;
|
||||
}
|
||||
}
|
||||
|
||||
void NsfMapper::OnAfterResetPowerOn()
|
||||
{
|
||||
//Do this after reset/power on sequence is over, otherwise cpu reset will reset all these values
|
||||
|
||||
//INIT logic
|
||||
NesMemoryManager* mm = _console->GetMemoryManager();
|
||||
|
@ -137,7 +142,9 @@ void NsfMapper::Reset(bool softReset)
|
|||
state.A = _songNumber;
|
||||
state.X = (_nsfHeader.Flags & 0x01) ? 1 : 0; //PAL = 1, NTSC = 0
|
||||
state.Y = 0;
|
||||
state.SP = 0xFD;
|
||||
|
||||
//Disable Frame Counter & DMC interrupts
|
||||
_console->GetCpu()->SetIrqMask((uint8_t)IRQSource::External);
|
||||
_irqCounter = 0;
|
||||
|
||||
|
|
|
@ -82,6 +82,7 @@ protected:
|
|||
void InitMapper() override;
|
||||
void InitMapper(RomData& romData) override;
|
||||
void Reset(bool softReset) override;
|
||||
void OnAfterResetPowerOn() override;
|
||||
void GetMemoryRanges(MemoryRanges &ranges) override;
|
||||
|
||||
uint32_t GetIrqReloadValue();
|
||||
|
|
|
@ -120,6 +120,7 @@ void NesConsole::Reset()
|
|||
if(_vsSubConsole) {
|
||||
_vsSubConsole->Reset();
|
||||
}
|
||||
_mapper->OnAfterResetPowerOn();
|
||||
}
|
||||
|
||||
LoadRomResult NesConsole::LoadRom(VirtualFile& romFile)
|
||||
|
@ -190,6 +191,7 @@ LoadRomResult NesConsole::LoadRom(VirtualFile& romFile)
|
|||
_memoryManager->Reset(false);
|
||||
_controlManager->Reset(false);
|
||||
_cpu->Reset(false, _region);
|
||||
_mapper->OnAfterResetPowerOn();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue