diff options
| author | 2015-04-06 09:12:55 -0400 | |
|---|---|---|
| committer | 2015-04-06 09:16:42 -0400 | |
| commit | e628ed481079d26cad4980f5094dbca16bae96c8 (patch) | |
| tree | 773a71ee934b84927ba3f6a80faff35c67ac276a /src | |
| parent | Merge pull request #682 from yuriks/virtmem2 (diff) | |
| download | yuzu-e628ed481079d26cad4980f5094dbca16bae96c8.tar.gz yuzu-e628ed481079d26cad4980f5094dbca16bae96c8.tar.xz yuzu-e628ed481079d26cad4980f5094dbca16bae96c8.zip | |
dyncom: Set CP15 reset values on initialization
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/arm/interpreter/arminit.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/core/arm/interpreter/arminit.cpp b/src/core/arm/interpreter/arminit.cpp index 4ac827e0a..710115375 100644 --- a/src/core/arm/interpreter/arminit.cpp +++ b/src/core/arm/interpreter/arminit.cpp | |||
| @@ -66,6 +66,64 @@ void ARMul_SelectProcessor(ARMul_State* state, unsigned properties) | |||
| 66 | ARMul_CoProInit(state); | 66 | ARMul_CoProInit(state); |
| 67 | } | 67 | } |
| 68 | 68 | ||
| 69 | // Resets certain MPCore CP15 values to their ARM-defined reset values. | ||
| 70 | static void ResetMPCoreCP15Registers(ARMul_State* cpu) | ||
| 71 | { | ||
| 72 | // c0 | ||
| 73 | cpu->CP15[CP15(CP15_MAIN_ID)] = 0x410FB024; | ||
| 74 | cpu->CP15[CP15(CP15_TLB_TYPE)] = 0x00000800; | ||
| 75 | cpu->CP15[CP15(CP15_PROCESSOR_FEATURE_0)] = 0x00000111; | ||
| 76 | cpu->CP15[CP15(CP15_PROCESSOR_FEATURE_1)] = 0x00000001; | ||
| 77 | cpu->CP15[CP15(CP15_DEBUG_FEATURE_0)] = 0x00000002; | ||
| 78 | cpu->CP15[CP15(CP15_MEMORY_MODEL_FEATURE_0)] = 0x01100103; | ||
| 79 | cpu->CP15[CP15(CP15_MEMORY_MODEL_FEATURE_1)] = 0x10020302; | ||
| 80 | cpu->CP15[CP15(CP15_MEMORY_MODEL_FEATURE_2)] = 0x01222000; | ||
| 81 | cpu->CP15[CP15(CP15_MEMORY_MODEL_FEATURE_3)] = 0x00000000; | ||
| 82 | cpu->CP15[CP15(CP15_ISA_FEATURE_0)] = 0x00100011; | ||
| 83 | cpu->CP15[CP15(CP15_ISA_FEATURE_1)] = 0x12002111; | ||
| 84 | cpu->CP15[CP15(CP15_ISA_FEATURE_2)] = 0x11221011; | ||
| 85 | cpu->CP15[CP15(CP15_ISA_FEATURE_3)] = 0x01102131; | ||
| 86 | cpu->CP15[CP15(CP15_ISA_FEATURE_4)] = 0x00000141; | ||
| 87 | |||
| 88 | // c1 | ||
| 89 | cpu->CP15[CP15(CP15_CONTROL)] = 0x00054078; | ||
| 90 | cpu->CP15[CP15(CP15_AUXILIARY_CONTROL)] = 0x0000000F; | ||
| 91 | cpu->CP15[CP15(CP15_COPROCESSOR_ACCESS_CONTROL)] = 0x00000000; | ||
| 92 | |||
| 93 | // c2 | ||
| 94 | cpu->CP15[CP15(CP15_TRANSLATION_BASE_TABLE_0)] = 0x00000000; | ||
| 95 | cpu->CP15[CP15(CP15_TRANSLATION_BASE_TABLE_1)] = 0x00000000; | ||
| 96 | cpu->CP15[CP15(CP15_TRANSLATION_BASE_CONTROL)] = 0x00000000; | ||
| 97 | |||
| 98 | // c3 | ||
| 99 | cpu->CP15[CP15(CP15_DOMAIN_ACCESS_CONTROL)] = 0x00000000; | ||
| 100 | |||
| 101 | // c7 | ||
| 102 | cpu->CP15[CP15(CP15_PHYS_ADDRESS)] = 0x00000000; | ||
| 103 | |||
| 104 | // c9 | ||
| 105 | cpu->CP15[CP15(CP15_DATA_CACHE_LOCKDOWN)] = 0xFFFFFFF0; | ||
| 106 | |||
| 107 | // c10 | ||
| 108 | cpu->CP15[CP15(CP15_TLB_LOCKDOWN)] = 0x00000000; | ||
| 109 | cpu->CP15[CP15(CP15_PRIMARY_REGION_REMAP)] = 0x00098AA4; | ||
| 110 | cpu->CP15[CP15(CP15_NORMAL_REGION_REMAP)] = 0x44E048E0; | ||
| 111 | |||
| 112 | // c13 | ||
| 113 | cpu->CP15[CP15(CP15_PID)] = 0x00000000; | ||
| 114 | cpu->CP15[CP15(CP15_CONTEXT_ID)] = 0x00000000; | ||
| 115 | cpu->CP15[CP15(CP15_THREAD_UPRW)] = 0x00000000; | ||
| 116 | cpu->CP15[CP15(CP15_THREAD_URO)] = 0x00000000; | ||
| 117 | cpu->CP15[CP15(CP15_THREAD_PRW)] = 0x00000000; | ||
| 118 | |||
| 119 | // c15 | ||
| 120 | cpu->CP15[CP15(CP15_PERFORMANCE_MONITOR_CONTROL)] = 0x00000000; | ||
| 121 | cpu->CP15[CP15(CP15_MAIN_TLB_LOCKDOWN_VIRT_ADDRESS)] = 0x00000000; | ||
| 122 | cpu->CP15[CP15(CP15_MAIN_TLB_LOCKDOWN_PHYS_ADDRESS)] = 0x00000000; | ||
| 123 | cpu->CP15[CP15(CP15_MAIN_TLB_LOCKDOWN_ATTRIBUTE)] = 0x00000000; | ||
| 124 | cpu->CP15[CP15(CP15_TLB_DEBUG_CONTROL)] = 0x00000000; | ||
| 125 | } | ||
| 126 | |||
| 69 | /***************************************************************************\ | 127 | /***************************************************************************\ |
| 70 | * Call this routine to set up the initial machine state (or perform a RESET * | 128 | * Call this routine to set up the initial machine state (or perform a RESET * |
| 71 | \***************************************************************************/ | 129 | \***************************************************************************/ |
| @@ -80,6 +138,8 @@ void ARMul_Reset(ARMul_State* state) | |||
| 80 | state->Bank = SVCBANK; | 138 | state->Bank = SVCBANK; |
| 81 | FLUSHPIPE; | 139 | FLUSHPIPE; |
| 82 | 140 | ||
| 141 | ResetMPCoreCP15Registers(state); | ||
| 142 | |||
| 83 | state->EndCondition = 0; | 143 | state->EndCondition = 0; |
| 84 | state->ErrorCode = 0; | 144 | state->ErrorCode = 0; |
| 85 | 145 | ||