Просмотр исходного кода

arm_interface: Support retrieval/storage to CP15 registers

Lioncash 11 лет назад
Родитель
Сommit
c3ffe8f9c3

+ 15 - 0
src/core/arm/arm_interface.h

@@ -6,6 +6,7 @@
 
 #include "common/common.h"
 #include "common/common_types.h"
+#include "core/arm/skyeye_common/arm_regformat.h"
 
 namespace Core {
     struct ThreadContext;
@@ -73,6 +74,20 @@ public:
      */
     virtual void SetCPSR(u32 cpsr) = 0;
 
+    /**
+     * Gets the value stored in a CP15 register.
+     * @param reg The CP15 register to retrieve the value from.
+     * @return the value stored in the given CP15 register.
+     */
+    virtual u32 GetCP15Register(CP15Register reg) = 0;
+
+    /**
+     * Stores the given value into the indicated CP15 register.
+     * @param reg   The CP15 register to store the value into.
+     * @param value The value to store into the CP15 register.
+     */
+    virtual void SetCP15Register(CP15Register reg, u32 value) = 0;
+
     /**
      * Advance the CPU core by the specified number of ticks (e.g. to simulate CPU execution time)
      * @param ticks Number of ticks to advance the CPU core

+ 8 - 0
src/core/arm/dyncom/arm_dyncom.cpp

@@ -68,6 +68,14 @@ void ARM_DynCom::SetCPSR(u32 cpsr) {
     state->Cpsr = cpsr;
 }
 
+u32 ARM_DynCom::GetCP15Register(CP15Register reg) {
+    return state->CP15[reg];
+}
+
+void ARM_DynCom::SetCP15Register(CP15Register reg, u32 value) {
+    state->CP15[reg] = value;
+}
+
 void ARM_DynCom::AddTicks(u64 ticks) {
     down_count -= ticks;
     if (down_count < 0)

+ 2 - 0
src/core/arm/dyncom/arm_dyncom.h

@@ -22,6 +22,8 @@ public:
     void SetReg(int index, u32 value) override;
     u32 GetCPSR() const override;
     void SetCPSR(u32 cpsr) override;
+    u32 GetCP15Register(CP15Register reg) override;
+    void SetCP15Register(CP15Register reg, u32 value) override;
 
     void AddTicks(u64 ticks) override;