diff options
| author | 2014-10-27 22:51:10 -0400 | |
|---|---|---|
| committer | 2014-10-27 22:51:10 -0400 | |
| commit | 48f80bb79efc3b27f8ff965c43aafeffff99e0e1 (patch) | |
| tree | 3d08f714f3392ba6aadb0641bac420d8f24c29dc /src/core | |
| parent | Merge pull request #141 from archshift/crash-hunt (diff) | |
| parent | Added `gpu_refresh_rate` config setting for the new interpreter speed hack. (diff) | |
| download | yuzu-48f80bb79efc3b27f8ff965c43aafeffff99e0e1.tar.gz yuzu-48f80bb79efc3b27f8ff965c43aafeffff99e0e1.tar.xz yuzu-48f80bb79efc3b27f8ff965c43aafeffff99e0e1.zip | |
Merge pull request #151 from archshift/dyncom-enabled
Use configuration files to enable or disable the new dyncom interpreter.
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/core.cpp | 17 | ||||
| -rw-r--r-- | src/core/core.h | 5 | ||||
| -rw-r--r-- | src/core/hw/gpu.cpp | 7 | ||||
| -rw-r--r-- | src/core/hw/gpu.h | 3 | ||||
| -rw-r--r-- | src/core/settings.h | 6 |
5 files changed, 32 insertions, 6 deletions
diff --git a/src/core/core.cpp b/src/core/core.cpp index 01d4f0afa..25c78d33c 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp | |||
| @@ -5,12 +5,14 @@ | |||
| 5 | #include "common/common_types.h" | 5 | #include "common/common_types.h" |
| 6 | 6 | ||
| 7 | #include "core/core.h" | 7 | #include "core/core.h" |
| 8 | #include "core/hw/hw.h" | 8 | |
| 9 | #include "core/settings.h" | ||
| 9 | #include "core/arm/disassembler/arm_disasm.h" | 10 | #include "core/arm/disassembler/arm_disasm.h" |
| 10 | #include "core/arm/interpreter/arm_interpreter.h" | 11 | #include "core/arm/interpreter/arm_interpreter.h" |
| 11 | 12 | #include "core/arm/dyncom/arm_dyncom.h" | |
| 12 | #include "core/hle/hle.h" | 13 | #include "core/hle/hle.h" |
| 13 | #include "core/hle/kernel/thread.h" | 14 | #include "core/hle/kernel/thread.h" |
| 15 | #include "core/hw/hw.h" | ||
| 14 | 16 | ||
| 15 | namespace Core { | 17 | namespace Core { |
| 16 | 18 | ||
| @@ -48,9 +50,18 @@ int Init() { | |||
| 48 | NOTICE_LOG(MASTER_LOG, "initialized OK"); | 50 | NOTICE_LOG(MASTER_LOG, "initialized OK"); |
| 49 | 51 | ||
| 50 | g_disasm = new ARM_Disasm(); | 52 | g_disasm = new ARM_Disasm(); |
| 51 | g_app_core = new ARM_Interpreter(); | ||
| 52 | g_sys_core = new ARM_Interpreter(); | 53 | g_sys_core = new ARM_Interpreter(); |
| 53 | 54 | ||
| 55 | switch (Settings::values.cpu_core) { | ||
| 56 | case CPU_FastInterpreter: | ||
| 57 | g_app_core = new ARM_DynCom(); | ||
| 58 | break; | ||
| 59 | case CPU_Interpreter: | ||
| 60 | default: | ||
| 61 | g_app_core = new ARM_Interpreter(); | ||
| 62 | break; | ||
| 63 | } | ||
| 64 | |||
| 54 | g_last_ticks = Core::g_app_core->GetTicks(); | 65 | g_last_ticks = Core::g_app_core->GetTicks(); |
| 55 | 66 | ||
| 56 | return 0; | 67 | return 0; |
diff --git a/src/core/core.h b/src/core/core.h index 87da252b8..872dc0cd1 100644 --- a/src/core/core.h +++ b/src/core/core.h | |||
| @@ -11,6 +11,11 @@ | |||
| 11 | 11 | ||
| 12 | namespace Core { | 12 | namespace Core { |
| 13 | 13 | ||
| 14 | enum CPUCore { | ||
| 15 | CPU_Interpreter, | ||
| 16 | CPU_FastInterpreter | ||
| 17 | }; | ||
| 18 | |||
| 14 | extern ARM_Interface* g_app_core; ///< ARM11 application core | 19 | extern ARM_Interface* g_app_core; ///< ARM11 application core |
| 15 | extern ARM_Interface* g_sys_core; ///< ARM11 system (OS) core | 20 | extern ARM_Interface* g_sys_core; ///< ARM11 system (OS) core |
| 16 | 21 | ||
diff --git a/src/core/hw/gpu.cpp b/src/core/hw/gpu.cpp index 33a0e0fe7..76dbe3fdc 100644 --- a/src/core/hw/gpu.cpp +++ b/src/core/hw/gpu.cpp | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | #include "common/common_types.h" | 5 | #include "common/common_types.h" |
| 6 | 6 | ||
| 7 | #include "core/settings.h" | ||
| 7 | #include "core/core.h" | 8 | #include "core/core.h" |
| 8 | #include "core/mem_map.h" | 9 | #include "core/mem_map.h" |
| 9 | 10 | ||
| @@ -24,6 +25,9 @@ u32 g_cur_line = 0; ///< Current vertical screen line | |||
| 24 | u64 g_last_line_ticks = 0; ///< CPU tick count from last vertical screen line | 25 | u64 g_last_line_ticks = 0; ///< CPU tick count from last vertical screen line |
| 25 | u64 g_last_frame_ticks = 0; ///< CPU tick count from last frame | 26 | u64 g_last_frame_ticks = 0; ///< CPU tick count from last frame |
| 26 | 27 | ||
| 28 | static u32 kFrameCycles = 0; ///< 268MHz / 60 frames per second | ||
| 29 | static u32 kFrameTicks = 0; ///< Approximate number of instructions/frame | ||
| 30 | |||
| 27 | template <typename T> | 31 | template <typename T> |
| 28 | inline void Read(T &var, const u32 raw_addr) { | 32 | inline void Read(T &var, const u32 raw_addr) { |
| 29 | u32 addr = raw_addr - 0x1EF00000; | 33 | u32 addr = raw_addr - 0x1EF00000; |
| @@ -214,6 +218,9 @@ void Update() { | |||
| 214 | 218 | ||
| 215 | /// Initialize hardware | 219 | /// Initialize hardware |
| 216 | void Init() { | 220 | void Init() { |
| 221 | kFrameCycles = 268123480 / Settings::values.gpu_refresh_rate; | ||
| 222 | kFrameTicks = kFrameCycles / 3; | ||
| 223 | |||
| 217 | g_cur_line = 0; | 224 | g_cur_line = 0; |
| 218 | g_last_frame_ticks = g_last_line_ticks = Core::g_app_core->GetTicks(); | 225 | g_last_frame_ticks = g_last_line_ticks = Core::g_app_core->GetTicks(); |
| 219 | 226 | ||
diff --git a/src/core/hw/gpu.h b/src/core/hw/gpu.h index 92097d182..3fa7b9ccf 100644 --- a/src/core/hw/gpu.h +++ b/src/core/hw/gpu.h | |||
| @@ -11,9 +11,6 @@ | |||
| 11 | 11 | ||
| 12 | namespace GPU { | 12 | namespace GPU { |
| 13 | 13 | ||
| 14 | static const u32 kFrameCycles = 268123480 / 60; ///< 268MHz / 60 frames per second | ||
| 15 | static const u32 kFrameTicks = kFrameCycles / 3; ///< Approximate number of instructions/frame | ||
| 16 | |||
| 17 | // Returns index corresponding to the Regs member labeled by field_name | 14 | // Returns index corresponding to the Regs member labeled by field_name |
| 18 | // TODO: Due to Visual studio bug 209229, offsetof does not return constant expressions | 15 | // TODO: Due to Visual studio bug 209229, offsetof does not return constant expressions |
| 19 | // when used with array elements (e.g. GPU_REG_INDEX(memory_fill_config[0])). | 16 | // when used with array elements (e.g. GPU_REG_INDEX(memory_fill_config[0])). |
diff --git a/src/core/settings.h b/src/core/settings.h index d586e2ef4..6a6265e18 100644 --- a/src/core/settings.h +++ b/src/core/settings.h | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | namespace Settings { | 7 | namespace Settings { |
| 8 | 8 | ||
| 9 | struct Values { | 9 | struct Values { |
| 10 | // Controls | ||
| 10 | int pad_a_key; | 11 | int pad_a_key; |
| 11 | int pad_b_key; | 12 | int pad_b_key; |
| 12 | int pad_x_key; | 13 | int pad_x_key; |
| @@ -25,6 +26,11 @@ struct Values { | |||
| 25 | int pad_sleft_key; | 26 | int pad_sleft_key; |
| 26 | int pad_sright_key; | 27 | int pad_sright_key; |
| 27 | 28 | ||
| 29 | // Core | ||
| 30 | int cpu_core; | ||
| 31 | int gpu_refresh_rate; | ||
| 32 | |||
| 33 | // Data Storage | ||
| 28 | bool use_virtual_sd; | 34 | bool use_virtual_sd; |
| 29 | } extern values; | 35 | } extern values; |
| 30 | 36 | ||