mirror of
https://github.com/Lime3DS/Lime3DS
synced 2024-12-28 01:52:29 -06:00
dyncom: Properly return the value of the user RO thread register
This commit is contained in:
parent
e628ed4810
commit
23dd2ca8a6
2 changed files with 10 additions and 4 deletions
|
@ -16,6 +16,7 @@
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
#include "core/mem_map.h"
|
||||||
#include "core/arm/skyeye_common/armdefs.h"
|
#include "core/arm/skyeye_common/armdefs.h"
|
||||||
#include "core/arm/skyeye_common/armemu.h"
|
#include "core/arm/skyeye_common/armemu.h"
|
||||||
|
|
||||||
|
@ -138,8 +139,16 @@ void ARMul_Reset(ARMul_State* state)
|
||||||
state->Bank = SVCBANK;
|
state->Bank = SVCBANK;
|
||||||
FLUSHPIPE;
|
FLUSHPIPE;
|
||||||
|
|
||||||
|
// Reset CP15
|
||||||
ResetMPCoreCP15Registers(state);
|
ResetMPCoreCP15Registers(state);
|
||||||
|
|
||||||
|
// This is separate from the CP15 register reset function, as
|
||||||
|
// this isn't an ARM-defined reset value; it's set by the 3DS.
|
||||||
|
//
|
||||||
|
// TODO: Whenever TLS is implemented, this should contain
|
||||||
|
// the address of the 0x200-byte TLS
|
||||||
|
state->CP15[CP15(CP15_THREAD_URO)] = Memory::KERNEL_MEMORY_VADDR;
|
||||||
|
|
||||||
state->EndCondition = 0;
|
state->EndCondition = 0;
|
||||||
state->ErrorCode = 0;
|
state->ErrorCode = 0;
|
||||||
|
|
||||||
|
|
|
@ -227,11 +227,8 @@ u32 ReadCP15Register(ARMul_State* cpu, u32 crn, u32 opcode_1, u32 crm, u32 opcod
|
||||||
if (opcode_2 == 2)
|
if (opcode_2 == 2)
|
||||||
return cpu->CP15[CP15(CP15_THREAD_UPRW)];
|
return cpu->CP15[CP15(CP15_THREAD_UPRW)];
|
||||||
|
|
||||||
// TODO: Whenever TLS is implemented, this should return
|
|
||||||
// "cpu->CP15[CP15(CP15_THREAD_URO)];"
|
|
||||||
// which contains the address of the 0x200-byte TLS
|
|
||||||
if (opcode_2 == 3)
|
if (opcode_2 == 3)
|
||||||
return Memory::KERNEL_MEMORY_VADDR;
|
return cpu->CP15[CP15(CP15_THREAD_URO)];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (InAPrivilegedMode(cpu))
|
if (InAPrivilegedMode(cpu))
|
||||||
|
|
Loading…
Reference in a new issue