aboutsummaryrefslogtreecommitdiff
path: root/src/core/core.cpp
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2014-08-06 18:30:01 -0400
committerbunnei <bunneidev@gmail.com>2014-08-06 18:30:01 -0400
commitd0c179485392903fa413543d6b6908d45bc1f0fb (patch)
treea2e85ca4b091042e2e45446fda5b36bf6f62d2b3 /src/core/core.cpp
parent90aaab1df0fe0a0518200c71df6ebe1bcf8eb783 (diff)
parent0805ecbaca70159ccc3d43c643b4ade7168795bc (diff)
Merge pull request #34 from bunnei/gsp-command-synch
Gsp command synch
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 7dc0809d05..fc9909377a 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();
}
}