From df9b04bb5ba0a8dd3920deb3e445dd013c20423b Mon Sep 17 00:00:00 2001 From: zilmar Date: Thu, 12 Sep 2024 15:13:45 +0930 Subject: [PATCH] RSP: Change RunInterpreterCPU to ExecuteOps --- Source/Project64-rsp-core/cpu/RSPCpu.cpp | 2 +- Source/Project64-rsp-core/cpu/RspSystem.cpp | 15 ++++++++++----- Source/Project64-rsp-core/cpu/RspSystem.h | 2 +- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Source/Project64-rsp-core/cpu/RSPCpu.cpp b/Source/Project64-rsp-core/cpu/RSPCpu.cpp index faee8c43b..3f1b4ceb9 100644 --- a/Source/Project64-rsp-core/cpu/RSPCpu.cpp +++ b/Source/Project64-rsp-core/cpu/RSPCpu.cpp @@ -113,7 +113,7 @@ uint32_t DoRspCycles(uint32_t Cycles) break; case RSPCpuMethod::Interpreter: case RSPCpuMethod::HighLevelEmulation: - RSPSystem.RunInterpreterCPU(Cycles); + RSPSystem.ExecuteOps((uint32_t)-1, (uint32_t)-1); break; } if (g_RSPDebugger != nullptr) diff --git a/Source/Project64-rsp-core/cpu/RspSystem.cpp b/Source/Project64-rsp-core/cpu/RspSystem.cpp index de9cb8691..154d62505 100644 --- a/Source/Project64-rsp-core/cpu/RspSystem.cpp +++ b/Source/Project64-rsp-core/cpu/RspSystem.cpp @@ -107,26 +107,32 @@ void CRSPSystem::RunRecompiler(void) m_Recompiler.RunCPU(); } -uint32_t CRSPSystem::RunInterpreterCPU(uint32_t Cycles) +void CRSPSystem::ExecuteOps(uint32_t Cycles, uint32_t TargetPC) { - uint32_t CycleCount; RSP_Running = true; if (g_RSPDebugger != nullptr) { g_RSPDebugger->StartingCPU(); } - CycleCount = 0; uint32_t & GprR0 = m_Reg.m_GPR[0].UW; uint32_t & ProgramCounter = *m_SP_PC_REG; - while (RSP_Running) + while (RSP_Running && Cycles > 0) { if (g_RSPDebugger != nullptr) { g_RSPDebugger->BeforeExecuteOp(); } + if (TargetPC != -1 && (ProgramCounter & 0xFFC) == TargetPC) + { + break; + } m_OpCode.Value = *(uint32_t *)(m_IMEM + (ProgramCounter & 0xFFC)); (m_Op.*(m_Op.Jump_Opcode[m_OpCode.op]))(); GprR0 = 0x00000000; // MIPS $zero hard-wired to 0 + if (Cycles != (uint32_t)-1) + { + Cycles -= 1; + } switch (m_NextInstruction) { @@ -152,5 +158,4 @@ uint32_t CRSPSystem::RunInterpreterCPU(uint32_t Cycles) break; } } - return Cycles; } diff --git a/Source/Project64-rsp-core/cpu/RspSystem.h b/Source/Project64-rsp-core/cpu/RspSystem.h index 1023b0f4c..cc7d98c8c 100644 --- a/Source/Project64-rsp-core/cpu/RspSystem.h +++ b/Source/Project64-rsp-core/cpu/RspSystem.h @@ -33,7 +33,7 @@ public: void RomClosed(void); void RunRecompiler(void); - uint32_t RunInterpreterCPU(uint32_t Cycles); + void ExecuteOps(uint32_t Cycles, uint32_t TargetPC); private: CRSPSystem(const CRSPSystem &);