Răsfoiți Sursa

arm: Get rid of some magic constants. Specify proper ARM mode.

Initially, we were starting the emulator in USER26MODE, which is incorrect, this should be USER32MODE.
Lioncash 11 ani în urmă
părinte
comite
c94c41f95a

+ 2 - 2
src/core/arm/dyncom/arm_dyncom.cpp

@@ -23,7 +23,7 @@ ARM_DynCom::ARM_DynCom() {
 
     ARMul_NewState((ARMul_State*)state.get());
 
-    state->abort_model = 0;
+    state->abort_model = ABORT_BASE_RESTORED;
     state->cpu = (cpu_config_t*)&s_arm11_cpu_info;
     state->bigendSig = LOW;
 
@@ -34,7 +34,7 @@ ARM_DynCom::ARM_DynCom() {
     ARMul_CoProInit(state.get());
     ARMul_Reset(state.get());
     state->NextInstr = RESUME; // NOTE: This will be overwritten by LoadContext
-    state->Emulate = 3;
+    state->Emulate = RUN;
 
     state->Reg[15] = 0x00000000;
     state->Reg[13] = 0x10000000; // Set stack pointer to the top of the stack

+ 1 - 1
src/core/arm/interpreter/arminit.cpp

@@ -74,7 +74,7 @@ ARMul_State* ARMul_NewState(ARMul_State* state)
     for (unsigned int i = 0; i < 7; i++)
         state->Spsr[i] = 0;
 
-    state->Mode = 0;
+    state->Mode = USER32MODE;
 
     state->VectorCatch = 0;
     state->Aborted = false;

+ 7 - 0
src/core/arm/skyeye_common/armdefs.h

@@ -50,6 +50,13 @@ enum {
     INSTCACHE = 2,
 };
 
+// Abort models
+enum {
+    ABORT_BASE_RESTORED = 0,
+    ABORT_EARLY         = 1,
+    ABORT_BASE_UPDATED  = 2
+};
+
 #define POS(i) ( (~(i)) >> 31 )
 #define NEG(i) ( (i) >> 31 )