diff options
author | bunnei <ericbunnie@gmail.com> | 2014-04-05 21:23:59 +0200 |
---|---|---|
committer | bunnei <ericbunnie@gmail.com> | 2014-04-05 21:23:59 +0200 |
commit | ed15feebf1cc60356e374e3492e6086066a7d09e (patch) | |
tree | f5f647e2a5b0d86aa0687ce48d40797cc076483e /src/core | |
parent | Updated common_types.h to use Gekko's version w/ Rect and some useful unions (diff) | |
download | yuzu-ed15feebf1cc60356e374e3492e6086066a7d09e.tar yuzu-ed15feebf1cc60356e374e3492e6086066a7d09e.tar.gz yuzu-ed15feebf1cc60356e374e3492e6086066a7d09e.tar.bz2 yuzu-ed15feebf1cc60356e374e3492e6086066a7d09e.tar.lz yuzu-ed15feebf1cc60356e374e3492e6086066a7d09e.tar.xz yuzu-ed15feebf1cc60356e374e3492e6086066a7d09e.tar.zst yuzu-ed15feebf1cc60356e374e3492e6086066a7d09e.zip |
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/src/arm/arm_interface.h | 43 | ||||
-rw-r--r-- | src/core/src/arm/interpreter/arm_interpreter.h | 7 | ||||
-rw-r--r-- | src/core/src/hw/hw_lcd.cpp | 6 |
3 files changed, 48 insertions, 8 deletions
diff --git a/src/core/src/arm/arm_interface.h b/src/core/src/arm/arm_interface.h index 80518a779..daf35b51d 100644 --- a/src/core/src/arm/arm_interface.h +++ b/src/core/src/arm/arm_interface.h @@ -24,32 +24,65 @@ #pragma once +#include "common.h" #include "common_types.h" /// Generic ARM11 CPU interface class ARM_Interface { public: ARM_Interface() { + num_instructions_ = 0; } ~ARM_Interface() { } + /// Step CPU by one instruction void Step() { ExecuteInstruction(); - ticks_++; + num_instructions_++; } - - virtual void SetPC(u32 pc) = 0; + + /** + * Set the Program Counter to an address + * @param addr Address to set PC to + */ + virtual void SetPC(u32 addr) = 0; + + /* + * Get the current Program Counter + * @return Returns current PC + */ virtual u32 PC() = 0; + + /** + * Get an ARM register + * @param index Register index (0-15) + * @return Returns the value in the register + */ virtual u32 Reg(int index) = 0; + + /** + * Get the current CPSR register + * @return Returns the value of the CPSR register + */ virtual u32 CPSR() = 0; - u64 ticks() { return ticks_; } + /** + * Returns the number of clock ticks since the last rese + * @return Returns number of clock ticks + */ + virtual u64 GetTicks() = 0; + + /// Getter for num_instructions_ + u64 num_instructions() { return num_instructions_; } private: + /// Execture next instruction virtual void ExecuteInstruction() = 0; - u64 ticks_; + u64 num_instructions_; ///< Number of instructions executed + + DISALLOW_COPY_AND_ASSIGN(ARM_Interface); }; diff --git a/src/core/src/arm/interpreter/arm_interpreter.h b/src/core/src/arm/interpreter/arm_interpreter.h index 89f871fa9..074149f1b 100644 --- a/src/core/src/arm/interpreter/arm_interpreter.h +++ b/src/core/src/arm/interpreter/arm_interpreter.h @@ -24,6 +24,7 @@ #pragma once +#include "common.h" #include "common_types.h" #include "arm/arm_interface.h" @@ -45,6 +46,12 @@ public: u32 CPSR(); + u64 GetTicks() { + return ARMul_Time(state); + } + private: ARMul_State* state; + + DISALLOW_COPY_AND_ASSIGN(ARM_Interpreter); }; diff --git a/src/core/src/hw/hw_lcd.cpp b/src/core/src/hw/hw_lcd.cpp index 19e3b4ab4..7e3728346 100644 --- a/src/core/src/hw/hw_lcd.cpp +++ b/src/core/src/hw/hw_lcd.cpp @@ -28,7 +28,7 @@ namespace LCD { -static const u32 kFrameTicks = 268123480 / 30; // 268MHz / 30 frames per second +static const u32 kFrameTicks = 268123480 / 60; ///< 268MHz / 60 frames per second u64 g_last_ticks = 0; ///< Last CPU ticks @@ -42,7 +42,7 @@ inline void Write(u32 addr, const T data) { /// Update hardware void Update() { - u64 current_ticks = Core::g_app_core->ticks(); + u64 current_ticks = Core::g_app_core->GetTicks(); if ((current_ticks - g_last_ticks) >= kFrameTicks) { g_last_ticks = current_ticks; @@ -52,7 +52,7 @@ void Update() { /// Initialize hardware void Init() { - g_last_ticks = Core::g_app_core->ticks(); + g_last_ticks = Core::g_app_core->GetTicks(); NOTICE_LOG(LCD, "LCD initialized OK"); } |