diff options
| author | 2015-04-06 15:06:07 -0400 | |
|---|---|---|
| committer | 2015-04-06 15:06:07 -0400 | |
| commit | 14dcd986535c681601d6f255899157aff021a5d2 (patch) | |
| tree | fb35f0b8444122438dcdf41b4a3b0bf32e4d7d29 /src/core/arm/interpreter/arminit.cpp | |
| parent | Merge pull request #684 from lioncash/uninit (diff) | |
| parent | core: Migrate 3DS-specific CP15 register setting into Init (diff) | |
| download | yuzu-14dcd986535c681601d6f255899157aff021a5d2.tar.gz yuzu-14dcd986535c681601d6f255899157aff021a5d2.tar.xz yuzu-14dcd986535c681601d6f255899157aff021a5d2.zip | |
Merge pull request #685 from lioncash/cpregs
dyncom: Set the MPCore CP15 register reset values on initialization.
Diffstat (limited to 'src/core/arm/interpreter/arminit.cpp')
| -rw-r--r-- | src/core/arm/interpreter/arminit.cpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/core/arm/interpreter/arminit.cpp b/src/core/arm/interpreter/arminit.cpp index 4ac827e0a..1d732fe84 100644 --- a/src/core/arm/interpreter/arminit.cpp +++ b/src/core/arm/interpreter/arminit.cpp | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | 16 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ |
| 17 | 17 | ||
| 18 | #include <cstring> | 18 | #include <cstring> |
| 19 | #include "core/mem_map.h" | ||
| 19 | #include "core/arm/skyeye_common/armdefs.h" | 20 | #include "core/arm/skyeye_common/armdefs.h" |
| 20 | #include "core/arm/skyeye_common/armemu.h" | 21 | #include "core/arm/skyeye_common/armemu.h" |
| 21 | 22 | ||
| @@ -66,6 +67,64 @@ void ARMul_SelectProcessor(ARMul_State* state, unsigned properties) | |||
| 66 | ARMul_CoProInit(state); | 67 | ARMul_CoProInit(state); |
| 67 | } | 68 | } |
| 68 | 69 | ||
| 70 | // Resets certain MPCore CP15 values to their ARM-defined reset values. | ||
| 71 | static void ResetMPCoreCP15Registers(ARMul_State* cpu) | ||
| 72 | { | ||
| 73 | // c0 | ||
| 74 | cpu->CP15[CP15_MAIN_ID] = 0x410FB024; | ||
| 75 | cpu->CP15[CP15_TLB_TYPE] = 0x00000800; | ||
| 76 | cpu->CP15[CP15_PROCESSOR_FEATURE_0] = 0x00000111; | ||
| 77 | cpu->CP15[CP15_PROCESSOR_FEATURE_1] = 0x00000001; | ||
| 78 | cpu->CP15[CP15_DEBUG_FEATURE_0] = 0x00000002; | ||
| 79 | cpu->CP15[CP15_MEMORY_MODEL_FEATURE_0] = 0x01100103; | ||
| 80 | cpu->CP15[CP15_MEMORY_MODEL_FEATURE_1] = 0x10020302; | ||
| 81 | cpu->CP15[CP15_MEMORY_MODEL_FEATURE_2] = 0x01222000; | ||
| 82 | cpu->CP15[CP15_MEMORY_MODEL_FEATURE_3] = 0x00000000; | ||
| 83 | cpu->CP15[CP15_ISA_FEATURE_0] = 0x00100011; | ||
| 84 | cpu->CP15[CP15_ISA_FEATURE_1] = 0x12002111; | ||
| 85 | cpu->CP15[CP15_ISA_FEATURE_2] = 0x11221011; | ||
| 86 | cpu->CP15[CP15_ISA_FEATURE_3] = 0x01102131; | ||
| 87 | cpu->CP15[CP15_ISA_FEATURE_4] = 0x00000141; | ||
| 88 | |||
| 89 | // c1 | ||
| 90 | cpu->CP15[CP15_CONTROL] = 0x00054078; | ||
| 91 | cpu->CP15[CP15_AUXILIARY_CONTROL] = 0x0000000F; | ||
| 92 | cpu->CP15[CP15_COPROCESSOR_ACCESS_CONTROL] = 0x00000000; | ||
| 93 | |||
| 94 | // c2 | ||
| 95 | cpu->CP15[CP15_TRANSLATION_BASE_TABLE_0] = 0x00000000; | ||
| 96 | cpu->CP15[CP15_TRANSLATION_BASE_TABLE_1] = 0x00000000; | ||
| 97 | cpu->CP15[CP15_TRANSLATION_BASE_CONTROL] = 0x00000000; | ||
| 98 | |||
| 99 | // c3 | ||
| 100 | cpu->CP15[CP15_DOMAIN_ACCESS_CONTROL] = 0x00000000; | ||
| 101 | |||
| 102 | // c7 | ||
| 103 | cpu->CP15[CP15_PHYS_ADDRESS] = 0x00000000; | ||
| 104 | |||
| 105 | // c9 | ||
| 106 | cpu->CP15[CP15_DATA_CACHE_LOCKDOWN] = 0xFFFFFFF0; | ||
| 107 | |||
| 108 | // c10 | ||
| 109 | cpu->CP15[CP15_TLB_LOCKDOWN] = 0x00000000; | ||
| 110 | cpu->CP15[CP15_PRIMARY_REGION_REMAP] = 0x00098AA4; | ||
| 111 | cpu->CP15[CP15_NORMAL_REGION_REMAP] = 0x44E048E0; | ||
| 112 | |||
| 113 | // c13 | ||
| 114 | cpu->CP15[CP15_PID] = 0x00000000; | ||
| 115 | cpu->CP15[CP15_CONTEXT_ID] = 0x00000000; | ||
| 116 | cpu->CP15[CP15_THREAD_UPRW] = 0x00000000; | ||
| 117 | cpu->CP15[CP15_THREAD_URO] = 0x00000000; | ||
| 118 | cpu->CP15[CP15_THREAD_PRW] = 0x00000000; | ||
| 119 | |||
| 120 | // c15 | ||
| 121 | cpu->CP15[CP15_PERFORMANCE_MONITOR_CONTROL] = 0x00000000; | ||
| 122 | cpu->CP15[CP15_MAIN_TLB_LOCKDOWN_VIRT_ADDRESS] = 0x00000000; | ||
| 123 | cpu->CP15[CP15_MAIN_TLB_LOCKDOWN_PHYS_ADDRESS] = 0x00000000; | ||
| 124 | cpu->CP15[CP15_MAIN_TLB_LOCKDOWN_ATTRIBUTE] = 0x00000000; | ||
| 125 | cpu->CP15[CP15_TLB_DEBUG_CONTROL] = 0x00000000; | ||
| 126 | } | ||
| 127 | |||
| 69 | /***************************************************************************\ | 128 | /***************************************************************************\ |
| 70 | * Call this routine to set up the initial machine state (or perform a RESET * | 129 | * Call this routine to set up the initial machine state (or perform a RESET * |
| 71 | \***************************************************************************/ | 130 | \***************************************************************************/ |
| @@ -80,6 +139,8 @@ void ARMul_Reset(ARMul_State* state) | |||
| 80 | state->Bank = SVCBANK; | 139 | state->Bank = SVCBANK; |
| 81 | FLUSHPIPE; | 140 | FLUSHPIPE; |
| 82 | 141 | ||
| 142 | ResetMPCoreCP15Registers(state); | ||
| 143 | |||
| 83 | state->EndCondition = 0; | 144 | state->EndCondition = 0; |
| 84 | state->ErrorCode = 0; | 145 | state->ErrorCode = 0; |
| 85 | 146 | ||