Core: Fix bug in not creating save state correctly

This commit is contained in:
zilmar 2023-12-07 17:43:48 +10:30
parent 10b550bb63
commit 15175d3fe2
3 changed files with 7 additions and 6 deletions

View File

@ -1671,11 +1671,11 @@ bool CN64System::SaveState()
zipWriteInFileInZip(file, g_Rom->GetRomAddress(), 0x40);
}
zipWriteInFileInZip(file, &NextViTimer, sizeof(uint32_t));
int32_t WriteProgramCounter = ((int32_t)m_Reg.m_PROGRAM_COUNTER);
int64_t WriteProgramCounter = ((int32_t)m_Reg.m_PROGRAM_COUNTER);
zipWriteInFileInZip(file, &WriteProgramCounter, sizeof(int64_t));
zipWriteInFileInZip(file, m_Reg.m_GPR, sizeof(int64_t) * 32);
zipWriteInFileInZip(file, m_Reg.m_FPR, sizeof(int64_t) * 32);
zipWriteInFileInZip(file, m_Reg.m_CP0, sizeof(uint32_t) * 32);
zipWriteInFileInZip(file, m_Reg.m_CP0, sizeof(uint64_t) * 32);
zipWriteInFileInZip(file, m_Reg.m_FPCR, sizeof(uint32_t) * 32);
zipWriteInFileInZip(file, &m_Reg.m_HI, sizeof(int64_t));
zipWriteInFileInZip(file, &m_Reg.m_LO, sizeof(int64_t));
@ -1742,7 +1742,7 @@ bool CN64System::SaveState()
hSaveFile.Write(g_Rom->GetRomAddress(), 0x40);
}
hSaveFile.Write(&NextViTimer, sizeof(uint32_t));
int32_t WriteProgramCounter = ((int32_t)m_Reg.m_PROGRAM_COUNTER);
int64_t WriteProgramCounter = ((int32_t)m_Reg.m_PROGRAM_COUNTER);
hSaveFile.Write(&WriteProgramCounter, sizeof(int64_t));
hSaveFile.Write(m_Reg.m_GPR, sizeof(int64_t) * 32);
hSaveFile.Write(m_Reg.m_FPR, sizeof(int64_t) * 32);

View File

@ -109,8 +109,6 @@ void CRSP_Plugin::RomClose(RenderWindow * Render)
}
CPlugin::RomClose(Render);
m_RunEvent.Reset();
m_Plugins = nullptr;
m_System = nullptr;
}
bool CRSP_Plugin::Initiate(CPlugins * Plugins, CN64System * System)
@ -563,7 +561,7 @@ uint32_t CRSP_Plugin::RspThread(void)
CRegisters & Reg = m_System->m_Reg;
for (;;)
{
if ((Reg.SP_STATUS_REG & SP_STATUS_HALT) != 0)
if ((Reg.SP_STATUS_REG & SP_STATUS_HALT) != 0 || !RspMultiThreaded())
{
m_RunEvent.Reset();
m_RunEvent.IsTriggered(SyncEvent::INFINITE_TIMEOUT);

View File

@ -59,6 +59,9 @@ public:
void * GetDebugMenu(void);
void ProcessMenuItem(int32_t id);
void PauseRSPThread(void);
void ResumeRSPThread(void);
private:
CRSP_Plugin(const CRSP_Plugin &);
CRSP_Plugin & operator=(const CRSP_Plugin &);