From c3211c9c802309a1b391d75934cc18cad98cdcb9 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Thu, 12 Feb 2015 15:04:47 -0500 Subject: dyncom: Clean up the constructor Some function calls aren't necessary and would be handled by regular initialization routines. --- src/core/arm/dyncom/arm_dyncom.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) (limited to 'src/core/arm/dyncom/arm_dyncom.cpp') diff --git a/src/core/arm/dyncom/arm_dyncom.cpp b/src/core/arm/dyncom/arm_dyncom.cpp index c4af85242..6a95ede24 100644 --- a/src/core/arm/dyncom/arm_dyncom.cpp +++ b/src/core/arm/dyncom/arm_dyncom.cpp @@ -19,25 +19,22 @@ ARM_DynCom::ARM_DynCom() { state = std::unique_ptr(new ARMul_State); ARMul_NewState(state.get()); + ARMul_SelectProcessor(state.get(), ARM_v6_Prop | ARM_v5_Prop | ARM_v5e_Prop); state->abort_model = ABORT_BASE_RESTORED; state->cpu = (cpu_config_t*)&s_arm11_cpu_info; - state->bigendSig = LOW; - ARMul_SelectProcessor(state.get(), ARM_v6_Prop | ARM_v5_Prop | ARM_v5e_Prop); + state->bigendSig = LOW; state->lateabtSig = LOW; + state->NirqSig = HIGH; // Reset the core to initial state - ARMul_CoProInit(state.get()); ARMul_Reset(state.get()); state->NextInstr = RESUME; // NOTE: This will be overwritten by LoadContext state->Emulate = RUN; - state->Reg[15] = 0x00000000; state->Reg[13] = 0x10000000; // Set stack pointer to the top of the stack - state->NirqSig = HIGH; - - VFPInit(state.get()); // Initialize the VFP + state->Reg[15] = 0x00000000; } ARM_DynCom::~ARM_DynCom() { -- cgit v1.2.3 From b7fac494cdda9efb65168b116b1673af4ab9f242 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Thu, 12 Feb 2015 15:11:39 -0500 Subject: dyncom: Switch the app and system cores into the correct mode at initialization --- src/core/arm/dyncom/arm_dyncom.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/core/arm/dyncom/arm_dyncom.cpp') diff --git a/src/core/arm/dyncom/arm_dyncom.cpp b/src/core/arm/dyncom/arm_dyncom.cpp index 6a95ede24..bbcbbdd2b 100644 --- a/src/core/arm/dyncom/arm_dyncom.cpp +++ b/src/core/arm/dyncom/arm_dyncom.cpp @@ -7,6 +7,7 @@ #include "core/arm/dyncom/arm_dyncom.h" #include "core/arm/dyncom/arm_dyncom_interpreter.h" +#include "core/arm/dyncom/arm_dyncom_run.h" #include "core/core.h" #include "core/core_timing.h" @@ -15,7 +16,7 @@ const static cpu_config_t s_arm11_cpu_info = { "armv6", "arm11", 0x0007b000, 0x0007f000, NONCACHE }; -ARM_DynCom::ARM_DynCom() { +ARM_DynCom::ARM_DynCom(PrivilegeMode initial_mode) { state = std::unique_ptr(new ARMul_State); ARMul_NewState(state.get()); @@ -33,6 +34,9 @@ ARM_DynCom::ARM_DynCom() { state->NextInstr = RESUME; // NOTE: This will be overwritten by LoadContext state->Emulate = RUN; + // Switch to the desired privilege mode. + switch_mode(state.get(), initial_mode); + state->Reg[13] = 0x10000000; // Set stack pointer to the top of the stack state->Reg[15] = 0x00000000; } -- cgit v1.2.3