CachedInterpreter: Implement breakpoints.
There were missed on the initial implementation of the cached interpreter.
This commit is contained in:
parent
8a3679bebc
commit
03c88c83ac
|
@ -109,6 +109,7 @@ void CachedInterpreter::ExecuteOneBlock()
|
|||
|
||||
void CachedInterpreter::Run()
|
||||
{
|
||||
const CPU::State* state_ptr = CPU::GetStatePtr();
|
||||
while (CPU::GetState() == CPU::State::Running)
|
||||
{
|
||||
// Start new timing slice
|
||||
|
@ -118,7 +119,7 @@ void CachedInterpreter::Run()
|
|||
do
|
||||
{
|
||||
ExecuteOneBlock();
|
||||
} while (PowerPC::ppcState.downcount > 0);
|
||||
} while (PowerPC::ppcState.downcount > 0 && *state_ptr == CPU::State::Running);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -169,6 +170,17 @@ static bool CheckDSI(u32 data)
|
|||
return false;
|
||||
}
|
||||
|
||||
static bool CheckBreakpoint(u32 data)
|
||||
{
|
||||
PowerPC::CheckBreakPoints();
|
||||
if (CPU::GetState() != CPU::State::Running)
|
||||
{
|
||||
PowerPC::ppcState.downcount -= data;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CachedInterpreter::HandleFunctionHooking(u32 address)
|
||||
{
|
||||
return HLE::ReplaceFunctionIfPossible(address, [&](u32 function, HLE::HookType type) {
|
||||
|
@ -225,10 +237,18 @@ void CachedInterpreter::Jit(u32 address)
|
|||
|
||||
if (!op.skip)
|
||||
{
|
||||
const bool breakpoint = SConfig::GetInstance().bEnableDebugging &&
|
||||
PowerPC::breakpoints.IsAddressBreakPoint(op.address);
|
||||
const bool check_fpu = (op.opinfo->flags & FL_USE_FPU) && !js.firstFPInstructionFound;
|
||||
const bool endblock = (op.opinfo->flags & FL_ENDBLOCK) != 0;
|
||||
const bool memcheck = (op.opinfo->flags & FL_LOADSTORE) && jo.memcheck;
|
||||
|
||||
if (breakpoint)
|
||||
{
|
||||
m_code.emplace_back(WritePC, op.address);
|
||||
m_code.emplace_back(CheckBreakpoint, js.downcountAmount);
|
||||
}
|
||||
|
||||
if (check_fpu)
|
||||
{
|
||||
m_code.emplace_back(WritePC, op.address);
|
||||
|
|
Loading…
Reference in New Issue