mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	cleaned up arm_interface, added a setter to set registers for use with HLE return values
This commit is contained in:
		
							parent
							
								
									59d00e6e4b
								
							
						
					
					
						commit
						95e5436f41
					
				
					 2 changed files with 86 additions and 22 deletions
				
			
		|  | @ -31,30 +31,61 @@ ARM_Interpreter::ARM_Interpreter()  { | |||
|     m_state->Reg[13] = 0x10000000; // Set stack pointer to the top of the stack
 | ||||
| } | ||||
| 
 | ||||
| void ARM_Interpreter::SetPC(u32 pc) { | ||||
|     m_state->pc = m_state->Reg[15] = pc; | ||||
| } | ||||
| 
 | ||||
| u32 ARM_Interpreter::GetPC() const { | ||||
|     return m_state->pc; | ||||
| } | ||||
| 
 | ||||
| u32 ARM_Interpreter::GetReg(int index) const { | ||||
|     return m_state->Reg[index]; | ||||
| } | ||||
| 
 | ||||
| u32 ARM_Interpreter::GetCPSR() const { | ||||
|     return m_state->Cpsr; | ||||
| } | ||||
| 
 | ||||
| u64 ARM_Interpreter::GetTicks() const { | ||||
|     return ARMul_Time(m_state); | ||||
| } | ||||
| 
 | ||||
| ARM_Interpreter::~ARM_Interpreter() { | ||||
|     delete m_state; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * Set the Program Counter to an address | ||||
|  * @param addr Address to set PC to | ||||
|  */ | ||||
| void ARM_Interpreter::SetPC(u32 pc) { | ||||
|     m_state->pc = m_state->Reg[15] = pc; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Get the current Program Counter | ||||
|  * @return Returns current PC | ||||
|  */ | ||||
| u32 ARM_Interpreter::GetPC() const { | ||||
|     return m_state->pc; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * Get an ARM register | ||||
|  * @param index Register index (0-15) | ||||
|  * @return Returns the value in the register | ||||
|  */ | ||||
| u32 ARM_Interpreter::GetReg(int index) const { | ||||
|     return m_state->Reg[index]; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * Set an ARM register | ||||
|  * @param index Register index (0-15) | ||||
|  * @param value Value to set register to | ||||
|  */ | ||||
| void ARM_Interpreter::SetReg(int index, u32 value) { | ||||
|     m_state->Reg[index] = value; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * Get the current CPSR register | ||||
|  * @return Returns the value of the CPSR register | ||||
|  */ | ||||
| u32 ARM_Interpreter::GetCPSR() const { | ||||
|     return m_state->Cpsr; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * Returns the number of clock ticks since the last reset | ||||
|  * @return Returns number of clock ticks | ||||
|  */ | ||||
| u64 ARM_Interpreter::GetTicks() const { | ||||
|     return ARMul_Time(m_state); | ||||
| } | ||||
| 
 | ||||
| /// Execture next instruction
 | ||||
| void ARM_Interpreter::ExecuteInstruction() { | ||||
|     m_state->step++; | ||||
|     m_state->cycle++; | ||||
|  |  | |||
|  | @ -12,22 +12,55 @@ | |||
| 
 | ||||
| class ARM_Interpreter : virtual public ARM_Interface { | ||||
| public: | ||||
| 
 | ||||
|     ARM_Interpreter(); | ||||
|     ~ARM_Interpreter(); | ||||
| 
 | ||||
|     void ExecuteInstruction(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Set the Program Counter to an address | ||||
|      * @param addr Address to set PC to | ||||
|      */ | ||||
|     void SetPC(u32 pc); | ||||
| 
 | ||||
|     /*
 | ||||
|      * Get the current Program Counter | ||||
|      * @return Returns current PC | ||||
|      */ | ||||
|     u32 GetPC() const; | ||||
| 
 | ||||
|     /**
 | ||||
|      * Get an ARM register | ||||
|      * @param index Register index (0-15) | ||||
|      * @return Returns the value in the register | ||||
|      */ | ||||
|     u32 GetReg(int index) const; | ||||
| 
 | ||||
|     /**
 | ||||
|      * Set an ARM register | ||||
|      * @param index Register index (0-15) | ||||
|      * @param value Value to set register to | ||||
|      */ | ||||
|     void SetReg(int index, u32 value); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Get the current CPSR register | ||||
|      * @return Returns the value of the CPSR register | ||||
|      */ | ||||
|     u32 GetCPSR() const; | ||||
| 
 | ||||
|     /**
 | ||||
|      * Returns the number of clock ticks since the last reset | ||||
|      * @return Returns number of clock ticks | ||||
|      */ | ||||
|     u64 GetTicks() const; | ||||
| 
 | ||||
| protected: | ||||
| 
 | ||||
|     /// Execture next instruction
 | ||||
|     void ExecuteInstruction(); | ||||
| 
 | ||||
| private: | ||||
| 
 | ||||
|     ARMul_State* m_state; | ||||
| 
 | ||||
|     DISALLOW_COPY_AND_ASSIGN(ARM_Interpreter); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue