diff options
Diffstat (limited to 'Source/Core/DolphinQt/Debugger/CodeWidget.cpp')
| -rw-r--r-- | Source/Core/DolphinQt/Debugger/CodeWidget.cpp | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/Source/Core/DolphinQt/Debugger/CodeWidget.cpp b/Source/Core/DolphinQt/Debugger/CodeWidget.cpp index 02286fa8b1..1f82c969de 100644 --- a/Source/Core/DolphinQt/Debugger/CodeWidget.cpp +++ b/Source/Core/DolphinQt/Debugger/CodeWidget.cpp @@ -442,12 +442,13 @@ void CodeWidget::Step() Common::Event sync_event; - PowerPC::CoreMode old_mode = PowerPC::GetMode(); - PowerPC::SetMode(PowerPC::CoreMode::Interpreter); - PowerPC::breakpoints.ClearAllTemporary(); + auto& power_pc = m_system.GetPowerPC(); + PowerPC::CoreMode old_mode = power_pc.GetMode(); + power_pc.SetMode(PowerPC::CoreMode::Interpreter); + power_pc.GetBreakPoints().ClearAllTemporary(); cpu.StepOpcode(&sync_event); sync_event.WaitFor(std::chrono::milliseconds(20)); - PowerPC::SetMode(old_mode); + power_pc.SetMode(old_mode); Core::DisplayMessage(tr("Step successful!").toStdString(), 2000); // Will get a UpdateDisasmDialog(), don't update the GUI here. } @@ -466,8 +467,9 @@ void CodeWidget::StepOver() if (inst.LK) { - PowerPC::breakpoints.ClearAllTemporary(); - PowerPC::breakpoints.Add(m_system.GetPPCState().pc + 4, true); + auto& breakpoints = m_system.GetPowerPC().GetBreakPoints(); + breakpoints.ClearAllTemporary(); + breakpoints.Add(m_system.GetPPCState().pc + 4, true); cpu.EnableStepping(false); Core::DisplayMessage(tr("Step over in progress...").toStdString(), 2000); } @@ -501,14 +503,16 @@ void CodeWidget::StepOut() using clock = std::chrono::steady_clock; clock::time_point timeout = clock::now() + std::chrono::seconds(5); - auto& ppc_state = m_system.GetPPCState(); + auto& power_pc = m_system.GetPowerPC(); + auto& ppc_state = power_pc.GetPPCState(); + auto& breakpoints = power_pc.GetBreakPoints(); { Core::CPUThreadGuard guard(m_system); - PowerPC::breakpoints.ClearAllTemporary(); + breakpoints.ClearAllTemporary(); - PowerPC::CoreMode old_mode = PowerPC::GetMode(); - PowerPC::SetMode(PowerPC::CoreMode::Interpreter); + PowerPC::CoreMode old_mode = power_pc.GetMode(); + power_pc.SetMode(PowerPC::CoreMode::Interpreter); // Loop until either the current instruction is a return instruction with no Link flag // or a breakpoint is detected so it can step at the breakpoint. If the PC is currently @@ -518,7 +522,7 @@ void CodeWidget::StepOut() { if (WillInstructionReturn(m_system, inst)) { - PowerPC::SingleStep(); + power_pc.SingleStep(); break; } @@ -528,24 +532,24 @@ void CodeWidget::StepOut() u32 next_pc = ppc_state.pc + 4; do { - PowerPC::SingleStep(); + power_pc.SingleStep(); } while (ppc_state.pc != next_pc && clock::now() < timeout && - !PowerPC::breakpoints.IsAddressBreakPoint(ppc_state.pc)); + !breakpoints.IsAddressBreakPoint(ppc_state.pc)); } else { - PowerPC::SingleStep(); + power_pc.SingleStep(); } inst = PowerPC::MMU::HostRead_Instruction(guard, ppc_state.pc); - } while (clock::now() < timeout && !PowerPC::breakpoints.IsAddressBreakPoint(ppc_state.pc)); + } while (clock::now() < timeout && !breakpoints.IsAddressBreakPoint(ppc_state.pc)); - PowerPC::SetMode(old_mode); + power_pc.SetMode(old_mode); } emit Host::GetInstance()->UpdateDisasmDialog(); - if (PowerPC::breakpoints.IsAddressBreakPoint(ppc_state.pc)) + if (breakpoints.IsAddressBreakPoint(ppc_state.pc)) Core::DisplayMessage(tr("Breakpoint encountered! Step out aborted.").toStdString(), 2000); else if (clock::now() >= timeout) Core::DisplayMessage(tr("Step out timed out!").toStdString(), 2000); |
