summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar bunnei2014-08-29 23:24:32 -0400
committerGravatar bunnei2014-08-30 23:23:38 -0400
commiteb36d3fc903db8848f7493009c7b59c8ce038de9 (patch)
treef19f2b2bef6d36e65257e5edd1da1358c4edea6c
parentLoader: Added support for loading raw BIN executables. (diff)
downloadyuzu-eb36d3fc903db8848f7493009c7b59c8ce038de9.tar.gz
yuzu-eb36d3fc903db8848f7493009c7b59c8ce038de9.tar.xz
yuzu-eb36d3fc903db8848f7493009c7b59c8ce038de9.zip
Core: Refactor core to use only one function for execution.
Core: Cleaned up comment to be more readable. Citra: Changed loop to be more readable.
-rw-r--r--src/citra/citra.cpp4
-rw-r--r--src/core/core.cpp26
-rw-r--r--src/core/core.h11
3 files changed, 20 insertions, 21 deletions
diff --git a/src/citra/citra.cpp b/src/citra/citra.cpp
index 9399ff296..7dc721dc3 100644
--- a/src/citra/citra.cpp
+++ b/src/citra/citra.cpp
@@ -31,7 +31,9 @@ int __cdecl main(int argc, char **argv) {
31 return -1; 31 return -1;
32 } 32 }
33 33
34 Core::RunLoop(); 34 while(true) {
35 Core::RunLoop();
36 }
35 37
36 delete emu_window; 38 delete emu_window;
37 39
diff --git a/src/core/core.cpp b/src/core/core.cpp
index fc9909377..f21801e52 100644
--- a/src/core/core.cpp
+++ b/src/core/core.cpp
@@ -6,6 +6,8 @@
6#include "common/log.h" 6#include "common/log.h"
7#include "common/symbols.h" 7#include "common/symbols.h"
8 8
9#include "video_core/video_core.h"
10
9#include "core/core.h" 11#include "core/core.h"
10#include "core/mem_map.h" 12#include "core/mem_map.h"
11#include "core/hw/hw.h" 13#include "core/hw/hw.h"
@@ -24,29 +26,17 @@ ARM_Interface* g_app_core = nullptr; ///< ARM11 application core
24ARM_Interface* g_sys_core = nullptr; ///< ARM11 system (OS) core 26ARM_Interface* g_sys_core = nullptr; ///< ARM11 system (OS) core
25 27
26/// Run the core CPU loop 28/// Run the core CPU loop
27void RunLoop() { 29void RunLoop(int tight_loop) {
28 for (;;){ 30 g_app_core->Run(tight_loop);
29 // This function loops for 100 instructions in the CPU before trying to update hardware. 31 HW::Update();
30 // This is a little bit faster than SingleStep, and should be pretty much equivalent. The 32 if (HLE::g_reschedule) {
31 // number of instructions chosen is fairly arbitrary, however a large number will more 33 Kernel::Reschedule();
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);
36 HW::Update();
37 if (HLE::g_reschedule) {
38 Kernel::Reschedule();
39 }
40 } 34 }
41} 35}
42 36
43/// Step the CPU one instruction 37/// Step the CPU one instruction
44void SingleStep() { 38void SingleStep() {
45 g_app_core->Step(); 39 RunLoop(1);
46 HW::Update();
47 if (HLE::g_reschedule) {
48 Kernel::Reschedule();
49 }
50} 40}
51 41
52/// Halt the core 42/// Halt the core
diff --git a/src/core/core.h b/src/core/core.h
index 4b42dabcb..9c72c8b3f 100644
--- a/src/core/core.h
+++ b/src/core/core.h
@@ -19,8 +19,15 @@ extern ARM_Interface* g_sys_core; ///< ARM11 system (OS) core
19/// Start the core 19/// Start the core
20void Start(); 20void Start();
21 21
22/// Run the core CPU loop 22/**
23void RunLoop(); 23 * Run the core CPU loop
24 * This function loops for 100 instructions in the CPU before trying to update hardware. This is a
25 * little bit faster than SingleStep, and should be pretty much equivalent. The number of
26 * instructions chosen is fairly arbitrary, however a large number will more drastically affect the
27 * frequency of GSP interrupts and likely break things. The point of this is to just loop in the CPU
28 * for more than 1 instruction to reduce overhead and make it a little bit faster...
29 */
30void RunLoop(int tight_loop=100);
24 31
25/// Step the CPU one instruction 32/// Step the CPU one instruction
26void SingleStep(); 33void SingleStep();