aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/arm/arm_interface.h
diff options
context:
space:
mode:
authorGravatar bunnei <ericbunnie@gmail.com>2014-04-08 19:25:03 -0400
committerGravatar bunnei <ericbunnie@gmail.com>2014-04-08 19:25:03 -0400
commit63e46abdb8764bc97e91bae862c8d461e61b1965 (patch)
treee73f4aa25d7b4015a265e7bbfb6004dab7561027 /src/core/arm/arm_interface.h
parent03c245345e1f319da5007c15019ed54432029fb8 (diff)
got rid of 'src' folders in each sub-project
Diffstat (limited to 'src/core/arm/arm_interface.h')
-rw-r--r--src/core/arm/arm_interface.h68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/core/arm/arm_interface.h b/src/core/arm/arm_interface.h
new file mode 100644
index 00000000..eee2f624
--- /dev/null
+++ b/src/core/arm/arm_interface.h
@@ -0,0 +1,68 @@
+// Copyright 2014 Citra Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
+
+#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();
+ num_instructions_++;
+ }
+
+ /**
+ * 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;
+
+ /**
+ * 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 num_instructions_; ///< Number of instructions executed
+
+ DISALLOW_COPY_AND_ASSIGN(ARM_Interface);
+};