diff options
Diffstat (limited to 'src/core/core.cpp')
| -rw-r--r-- | src/core/core.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/core/core.cpp b/src/core/core.cpp index 7dc0809d0..fc9909377 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp | |||
| @@ -26,21 +26,25 @@ ARM_Interface* g_sys_core = nullptr; ///< ARM11 system (OS) core | |||
| 26 | /// Run the core CPU loop | 26 | /// Run the core CPU loop |
| 27 | void RunLoop() { | 27 | void RunLoop() { |
| 28 | for (;;){ | 28 | for (;;){ |
| 29 | g_app_core->Run(GPU::kFrameTicks); | 29 | // This function loops for 100 instructions in the CPU before trying to update hardware. |
| 30 | // This is a little bit faster than SingleStep, and should be pretty much equivalent. The | ||
| 31 | // number of instructions chosen is fairly arbitrary, however a large number will more | ||
| 32 | // drastically affect the frequency of GSP interrupts and likely break things. The point of | ||
| 33 | // this is to just loop in the CPU for more than 1 instruction to reduce overhead and make | ||
| 34 | // it a little bit faster... | ||
| 35 | g_app_core->Run(100); | ||
| 30 | HW::Update(); | 36 | HW::Update(); |
| 31 | Kernel::Reschedule(); | 37 | if (HLE::g_reschedule) { |
| 38 | Kernel::Reschedule(); | ||
| 39 | } | ||
| 32 | } | 40 | } |
| 33 | } | 41 | } |
| 34 | 42 | ||
| 35 | /// Step the CPU one instruction | 43 | /// Step the CPU one instruction |
| 36 | void SingleStep() { | 44 | void SingleStep() { |
| 37 | g_app_core->Step(); | 45 | g_app_core->Step(); |
| 38 | 46 | HW::Update(); | |
| 39 | // Update and reschedule after approx. 1 frame | 47 | if (HLE::g_reschedule) { |
| 40 | u64 current_ticks = Core::g_app_core->GetTicks(); | ||
| 41 | if ((current_ticks - g_last_ticks) >= GPU::kFrameTicks || HLE::g_reschedule) { | ||
| 42 | g_last_ticks = current_ticks; | ||
| 43 | HW::Update(); | ||
| 44 | Kernel::Reschedule(); | 48 | Kernel::Reschedule(); |
| 45 | } | 49 | } |
| 46 | } | 50 | } |