[Projecy64] Pause emulation during changing breakpoints
This commit is contained in:
parent
fafb7c207a
commit
d2e67dc1d9
|
@ -33,6 +33,7 @@ const char * SystemEventName(SystemEvent event)
|
||||||
case SysEvent_PauseCPU_SearchMemory: return "SysEvent_PauseCPU_SearchMemory";
|
case SysEvent_PauseCPU_SearchMemory: return "SysEvent_PauseCPU_SearchMemory";
|
||||||
case SysEvent_PauseCPU_Settings: return "SysEvent_PauseCPU_Settings";
|
case SysEvent_PauseCPU_Settings: return "SysEvent_PauseCPU_Settings";
|
||||||
case SysEvent_PauseCPU_Cheats: return "SysEvent_PauseCPU_Cheats";
|
case SysEvent_PauseCPU_Cheats: return "SysEvent_PauseCPU_Cheats";
|
||||||
|
case SysEvent_PauseCPU_ChangingBPs: return "SysEvent_PauseCPU_ChangingBPs";
|
||||||
case SysEvent_ResumeCPU_FromMenu: return "SysEvent_ResumeCPU_FromMenu";
|
case SysEvent_ResumeCPU_FromMenu: return "SysEvent_ResumeCPU_FromMenu";
|
||||||
case SysEvent_ResumeCPU_AppGainedActive: return "SysEvent_ResumeCPU_AppGainedActive";
|
case SysEvent_ResumeCPU_AppGainedActive: return "SysEvent_ResumeCPU_AppGainedActive";
|
||||||
case SysEvent_ResumeCPU_AppGainedFocus: return "SysEvent_ResumeCPU_AppGainedFocus";
|
case SysEvent_ResumeCPU_AppGainedFocus: return "SysEvent_ResumeCPU_AppGainedFocus";
|
||||||
|
@ -42,6 +43,7 @@ const char * SystemEventName(SystemEvent event)
|
||||||
case SysEvent_ResumeCPU_SearchMemory: return "SysEvent_ResumeCPU_SearchMemory";
|
case SysEvent_ResumeCPU_SearchMemory: return "SysEvent_ResumeCPU_SearchMemory";
|
||||||
case SysEvent_ResumeCPU_Settings: return "SysEvent_ResumeCPU_Settings";
|
case SysEvent_ResumeCPU_Settings: return "SysEvent_ResumeCPU_Settings";
|
||||||
case SysEvent_ResumeCPU_Cheats: return "SysEvent_ResumeCPU_Cheats";
|
case SysEvent_ResumeCPU_Cheats: return "SysEvent_ResumeCPU_Cheats";
|
||||||
|
case SysEvent_ResumeCPU_ChangingBPs: return "SysEvent_ResumeCPU_ChangingBPs";
|
||||||
case SysEvent_ChangingFullScreen: return "SysEvent_ChangingFullScreen";
|
case SysEvent_ChangingFullScreen: return "SysEvent_ChangingFullScreen";
|
||||||
case SysEvent_ChangePlugins: return "SysEvent_ChangePlugins";
|
case SysEvent_ChangePlugins: return "SysEvent_ChangePlugins";
|
||||||
case SysEvent_SaveMachineState: return "SysEvent_SaveMachineState";
|
case SysEvent_SaveMachineState: return "SysEvent_SaveMachineState";
|
||||||
|
@ -257,6 +259,14 @@ void CSystemEvents::ExecuteEvents()
|
||||||
bPause = true;
|
bPause = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case SysEvent_PauseCPU_ChangingBPs:
|
||||||
|
if (!g_Settings->LoadBool(GameRunning_CPU_Paused))
|
||||||
|
{
|
||||||
|
g_Settings->SaveBool(GameRunning_CPU_Paused, true);
|
||||||
|
g_Settings->SaveDword(GameRunning_CPU_PausedType, PauseType_ChangingBPs);
|
||||||
|
bPause = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case SysEvent_ResetRecompilerCode:
|
case SysEvent_ResetRecompilerCode:
|
||||||
g_Recompiler->ResetRecompCode(true);
|
g_Recompiler->ResetRecompCode(true);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -30,6 +30,7 @@ enum SystemEvent
|
||||||
SysEvent_PauseCPU_SearchMemory,
|
SysEvent_PauseCPU_SearchMemory,
|
||||||
SysEvent_PauseCPU_Settings,
|
SysEvent_PauseCPU_Settings,
|
||||||
SysEvent_PauseCPU_Cheats,
|
SysEvent_PauseCPU_Cheats,
|
||||||
|
SysEvent_PauseCPU_ChangingBPs,
|
||||||
SysEvent_ResumeCPU_FromMenu,
|
SysEvent_ResumeCPU_FromMenu,
|
||||||
SysEvent_ResumeCPU_AppGainedActive,
|
SysEvent_ResumeCPU_AppGainedActive,
|
||||||
SysEvent_ResumeCPU_AppGainedFocus,
|
SysEvent_ResumeCPU_AppGainedFocus,
|
||||||
|
@ -39,6 +40,7 @@ enum SystemEvent
|
||||||
SysEvent_ResumeCPU_SearchMemory,
|
SysEvent_ResumeCPU_SearchMemory,
|
||||||
SysEvent_ResumeCPU_Settings,
|
SysEvent_ResumeCPU_Settings,
|
||||||
SysEvent_ResumeCPU_Cheats,
|
SysEvent_ResumeCPU_Cheats,
|
||||||
|
SysEvent_ResumeCPU_ChangingBPs,
|
||||||
SysEvent_ChangingFullScreen,
|
SysEvent_ChangingFullScreen,
|
||||||
SysEvent_ChangePlugins,
|
SysEvent_ChangePlugins,
|
||||||
SysEvent_SaveMachineState,
|
SysEvent_SaveMachineState,
|
||||||
|
|
|
@ -213,7 +213,8 @@ void CN64System::ExternalEvent(SystemEvent action)
|
||||||
case SysEvent_PauseCPU_SearchMemory:
|
case SysEvent_PauseCPU_SearchMemory:
|
||||||
case SysEvent_PauseCPU_Settings:
|
case SysEvent_PauseCPU_Settings:
|
||||||
case SysEvent_PauseCPU_Cheats:
|
case SysEvent_PauseCPU_Cheats:
|
||||||
if (!g_Settings->LoadBool(GameRunning_CPU_Paused))
|
case SysEvent_PauseCPU_ChangingBPs:
|
||||||
|
if (!WaitingForStep() && !g_Settings->LoadBool(GameRunning_CPU_Paused))
|
||||||
{
|
{
|
||||||
QueueEvent(action);
|
QueueEvent(action);
|
||||||
}
|
}
|
||||||
|
@ -270,6 +271,12 @@ void CN64System::ExternalEvent(SystemEvent action)
|
||||||
m_hPauseEvent.Trigger();
|
m_hPauseEvent.Trigger();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case SysEvent_ResumeCPU_ChangingBPs:
|
||||||
|
if (g_Settings->LoadDword(GameRunning_CPU_PausedType) == PauseType_ChangingBPs)
|
||||||
|
{
|
||||||
|
m_hPauseEvent.Trigger();
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
WriteTrace(TraceN64System, TraceError, "Unknown event %d", action);
|
WriteTrace(TraceN64System, TraceError, "Unknown event %d", action);
|
||||||
g_Notify->BreakPoint(__FILE__, __LINE__);
|
g_Notify->BreakPoint(__FILE__, __LINE__);
|
||||||
|
|
|
@ -34,6 +34,7 @@ enum PauseType
|
||||||
PauseType_SearchMemory,
|
PauseType_SearchMemory,
|
||||||
PauseType_Settings,
|
PauseType_Settings,
|
||||||
PauseType_Cheats,
|
PauseType_Cheats,
|
||||||
|
PauseType_ChangingBPs,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum CPU_TYPE
|
enum CPU_TYPE
|
||||||
|
|
|
@ -25,12 +25,14 @@ bool CBreakpoints::RBPAdd(uint32_t address)
|
||||||
{
|
{
|
||||||
if (!ReadBPExists8(address))
|
if (!ReadBPExists8(address))
|
||||||
{
|
{
|
||||||
|
PreUpdateBP();
|
||||||
m_ReadMem.insert(breakpoints_t::value_type(address, false));
|
m_ReadMem.insert(breakpoints_t::value_type(address, false));
|
||||||
UpdateAlignedReadBP();
|
UpdateAlignedReadBP();
|
||||||
if (!HaveReadBP())
|
if (!HaveReadBP())
|
||||||
{
|
{
|
||||||
g_Settings->SaveBool(Debugger_ReadBPExists, true);
|
g_Settings->SaveBool(Debugger_ReadBPExists, true);
|
||||||
}
|
}
|
||||||
|
PostUpdateBP();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -40,12 +42,14 @@ bool CBreakpoints::WBPAdd(uint32_t address)
|
||||||
{
|
{
|
||||||
if (!WriteBPExists8(address))
|
if (!WriteBPExists8(address))
|
||||||
{
|
{
|
||||||
|
PreUpdateBP();
|
||||||
m_WriteMem.insert(breakpoints_t::value_type(address, false));
|
m_WriteMem.insert(breakpoints_t::value_type(address, false));
|
||||||
UpdateAlignedWriteBP();
|
UpdateAlignedWriteBP();
|
||||||
if (!HaveWriteBP())
|
if (!HaveWriteBP())
|
||||||
{
|
{
|
||||||
g_Settings->SaveBool(Debugger_WriteBPExists, true);
|
g_Settings->SaveBool(Debugger_WriteBPExists, true);
|
||||||
}
|
}
|
||||||
|
PostUpdateBP();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -53,6 +57,7 @@ bool CBreakpoints::WBPAdd(uint32_t address)
|
||||||
|
|
||||||
bool CBreakpoints::AddExecution(uint32_t address, bool bTemporary)
|
bool CBreakpoints::AddExecution(uint32_t address, bool bTemporary)
|
||||||
{
|
{
|
||||||
|
PreUpdateBP();
|
||||||
breakpoints_t::_Pairib res = m_Execution.insert(breakpoint_t::value_type(address, bTemporary));
|
breakpoints_t::_Pairib res = m_Execution.insert(breakpoint_t::value_type(address, bTemporary));
|
||||||
if (!res.second && !bTemporary)
|
if (!res.second && !bTemporary)
|
||||||
{
|
{
|
||||||
|
@ -62,12 +67,13 @@ bool CBreakpoints::AddExecution(uint32_t address, bool bTemporary)
|
||||||
{
|
{
|
||||||
g_Settings->SaveBool(Debugger_HaveExecutionBP, true);
|
g_Settings->SaveBool(Debugger_HaveExecutionBP, true);
|
||||||
}
|
}
|
||||||
g_BaseSystem->ExternalEvent(SysEvent_ResetRecompilerCode);
|
PostUpdateBP();
|
||||||
return !res.second;
|
return !res.second;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBreakpoints::RBPRemove(uint32_t address)
|
void CBreakpoints::RBPRemove(uint32_t address)
|
||||||
{
|
{
|
||||||
|
PreUpdateBP();
|
||||||
breakpoints_t::iterator itr = m_ReadMem.find(address);
|
breakpoints_t::iterator itr = m_ReadMem.find(address);
|
||||||
if (itr != m_ReadMem.end())
|
if (itr != m_ReadMem.end())
|
||||||
{
|
{
|
||||||
|
@ -78,10 +84,12 @@ void CBreakpoints::RBPRemove(uint32_t address)
|
||||||
g_Settings->SaveBool(Debugger_ReadBPExists, false);
|
g_Settings->SaveBool(Debugger_ReadBPExists, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
PostUpdateBP();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBreakpoints::WBPRemove(uint32_t address)
|
void CBreakpoints::WBPRemove(uint32_t address)
|
||||||
{
|
{
|
||||||
|
PreUpdateBP();
|
||||||
breakpoints_t::iterator itr = m_WriteMem.find(address);
|
breakpoints_t::iterator itr = m_WriteMem.find(address);
|
||||||
if (itr != m_WriteMem.end())
|
if (itr != m_WriteMem.end())
|
||||||
{
|
{
|
||||||
|
@ -92,10 +100,12 @@ void CBreakpoints::WBPRemove(uint32_t address)
|
||||||
g_Settings->SaveBool(Debugger_WriteBPExists, false);
|
g_Settings->SaveBool(Debugger_WriteBPExists, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
PostUpdateBP();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBreakpoints::RemoveExecution(uint32_t address)
|
void CBreakpoints::RemoveExecution(uint32_t address)
|
||||||
{
|
{
|
||||||
|
PreUpdateBP();
|
||||||
breakpoints_t::iterator itr = m_Execution.find(address);
|
breakpoints_t::iterator itr = m_Execution.find(address);
|
||||||
if (itr != m_Execution.end())
|
if (itr != m_Execution.end())
|
||||||
{
|
{
|
||||||
|
@ -105,6 +115,7 @@ void CBreakpoints::RemoveExecution(uint32_t address)
|
||||||
g_Settings->SaveBool(Debugger_HaveExecutionBP, false);
|
g_Settings->SaveBool(Debugger_HaveExecutionBP, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
PostUpdateBP();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBreakpoints::RBPToggle(uint32_t address)
|
void CBreakpoints::RBPToggle(uint32_t address)
|
||||||
|
@ -133,22 +144,28 @@ void CBreakpoints::EBPToggle(uint32_t address, bool bTemporary)
|
||||||
|
|
||||||
void CBreakpoints::RBPClear()
|
void CBreakpoints::RBPClear()
|
||||||
{
|
{
|
||||||
|
PreUpdateBP();
|
||||||
m_ReadMem.clear();
|
m_ReadMem.clear();
|
||||||
UpdateAlignedReadBP();
|
UpdateAlignedReadBP();
|
||||||
g_Settings->SaveBool(Debugger_ReadBPExists, false);
|
g_Settings->SaveBool(Debugger_ReadBPExists, false);
|
||||||
|
PostUpdateBP();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBreakpoints::WBPClear()
|
void CBreakpoints::WBPClear()
|
||||||
{
|
{
|
||||||
|
PreUpdateBP();
|
||||||
m_WriteMem.clear();
|
m_WriteMem.clear();
|
||||||
UpdateAlignedWriteBP();
|
UpdateAlignedWriteBP();
|
||||||
g_Settings->SaveBool(Debugger_WriteBPExists, false);
|
g_Settings->SaveBool(Debugger_WriteBPExists, false);
|
||||||
|
PostUpdateBP();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBreakpoints::EBPClear()
|
void CBreakpoints::EBPClear()
|
||||||
{
|
{
|
||||||
|
PreUpdateBP();
|
||||||
m_Execution.clear();
|
m_Execution.clear();
|
||||||
g_Settings->SaveBool(Debugger_HaveExecutionBP, false);
|
g_Settings->SaveBool(Debugger_HaveExecutionBP, false);
|
||||||
|
PostUpdateBP();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBreakpoints::BPClear()
|
void CBreakpoints::BPClear()
|
||||||
|
@ -330,3 +347,20 @@ size_t CBreakpoints::NumMemLocks()
|
||||||
{
|
{
|
||||||
return m_MemLocks.size();
|
return m_MemLocks.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CBreakpoints::PreUpdateBP()
|
||||||
|
{
|
||||||
|
if (g_BaseSystem)
|
||||||
|
{
|
||||||
|
g_BaseSystem->ExternalEvent(SysEvent_PauseCPU_ChangingBPs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CBreakpoints::PostUpdateBP()
|
||||||
|
{
|
||||||
|
if (g_BaseSystem)
|
||||||
|
{
|
||||||
|
g_BaseSystem->ExternalEvent(SysEvent_ResetRecompilerCode);
|
||||||
|
g_BaseSystem->ExternalEvent(SysEvent_ResumeCPU_ChangingBPs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -68,6 +68,8 @@ public:
|
||||||
size_t NumMemLocks(void);
|
size_t NumMemLocks(void);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void PreUpdateBP();
|
||||||
|
void PostUpdateBP();
|
||||||
void UpdateAlignedWriteBP(void);
|
void UpdateAlignedWriteBP(void);
|
||||||
void UpdateAlignedReadBP(void);
|
void UpdateAlignedReadBP(void);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue