aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/core.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/core.cpp')
-rw-r--r--src/core/core.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/core/core.cpp b/src/core/core.cpp
index 7dc0809d..fc990937 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
/// Run the core CPU loop
void RunLoop() {
for (;;){
- g_app_core->Run(GPU::kFrameTicks);
+ // This function loops for 100 instructions in the CPU before trying to update hardware.
+ // This is a little bit faster than SingleStep, and should be pretty much equivalent. The
+ // number of instructions chosen is fairly arbitrary, however a large number will more
+ // drastically affect the frequency of GSP interrupts and likely break things. The point of
+ // this is to just loop in the CPU for more than 1 instruction to reduce overhead and make
+ // it a little bit faster...
+ g_app_core->Run(100);
HW::Update();
- Kernel::Reschedule();
+ if (HLE::g_reschedule) {
+ Kernel::Reschedule();
+ }
}
}
/// Step the CPU one instruction
void SingleStep() {
g_app_core->Step();
-
- // Update and reschedule after approx. 1 frame
- u64 current_ticks = Core::g_app_core->GetTicks();
- if ((current_ticks - g_last_ticks) >= GPU::kFrameTicks || HLE::g_reschedule) {
- g_last_ticks = current_ticks;
- HW::Update();
+ HW::Update();
+ if (HLE::g_reschedule) {
Kernel::Reschedule();
}
}