From cacf8913307e8b3bf10c48935ba26aafa14cb55c Mon Sep 17 00:00:00 2001 From: Jaklyy <102590697+Jaklyy@users.noreply.github.com> Date: Mon, 16 Dec 2024 13:13:24 -0500 Subject: [PATCH] Revert "run arm 7 first?" Caused performance issues in games??? --- src/NDS.cpp | 87 +++++++++++++++++++++++++++-------------------------- 1 file changed, 44 insertions(+), 43 deletions(-) diff --git a/src/NDS.cpp b/src/NDS.cpp index a6444573..605c35c7 100644 --- a/src/NDS.cpp +++ b/src/NDS.cpp @@ -1651,88 +1651,89 @@ u32 NDS::RunFrame() while (Running && GPU.TotalScanlines==0) { u64 target = NextTarget(); - - ARM7Target = target; + + ARM9Target = target << ARM9ClockShift; //ARM7Target = target; - //while (ARM7Timestamp < ARM7Target) + while (std::max(std::max(ARM9Timestamp, DMA9Timestamp), A9ContentionTS << ARM9ClockShift) < ARM9Target) { - //printf("A7 LOOP: %lli %lli\n", ARM9Timestamp>>ARM9ClockShift, ARM7Timestamp); - CurCPU = 1; - RunTimers(1); + CurCPU = 0; + RunTimers(0); + GPU.GPU3D.Run(); - if (ARM7.MRTrack.Type == MainRAMType::Null) + if (ARM9.MRTrack.Type == MainRAMType::Null) { - if (CPUStop & CPUStop_DMA7) + if (CPUStop & CPUStop_GXStall) { - DMAs[4].Run(); - if (ARM7.MRTrack.Type == MainRAMType::Null) DMAs[5].Run(); - if (ARM7.MRTrack.Type == MainRAMType::Null) DMAs[6].Run(); - if (ARM7.MRTrack.Type == MainRAMType::Null) DMAs[7].Run(); + // GXFIFO stall + s32 cycles = GPU.GPU3D.CyclesToRunFor(); + DMA9Timestamp = std::min(ARM9Target, std::max(ARM9Timestamp+(cycles<(*this); - dsi.RunNDMAs(1); + dsi.RunNDMAs(0); } } else { - //if (ARM7.abt > 16) ARM7Timestamp = ARM7Target; - ARM7.Execute(); + //if (ARM9.abt) ARM9Timestamp = ARM9Target; + ARM9.Execute(); } } - RunTimers(1); - //printf("MAIN LOOP: 9 %lli %08X %08llX %i 7 %lli %08X %08llX %i %i %08X\n", ARM9Timestamp>>ARM9ClockShift, ARM9.PC, ARM9.CurInstr, (u8)ARM9.MRTrack.Type, ARM7Timestamp, ARM7.R[15], ARM7.CurInstr, (u8)ARM7.MRTrack.Type, IME[1], IE[1]); + RunTimers(0); + GPU.GPU3D.Run(); + //if (MainRAMHandle()) break; MainRAMHandle(); - target = ARM7Timestamp << ARM9ClockShift;//std::max(std::max(ARM9Timestamp, DMA9Timestamp) >> ARM9ClockShift, A9ContentionTS); - if (target <= std::max(std::max(ARM9Timestamp, DMA9Timestamp), A9ContentionTS << ARM9ClockShift)) target = std::max(std::max(ARM9Timestamp, DMA9Timestamp), A9ContentionTS << ARM9ClockShift) + 1; + target = std::max(std::max(ARM9Timestamp, DMA9Timestamp) >> ARM9ClockShift, A9ContentionTS); + if (target == ARM7Timestamp) target++; - while (std::max(std::max(ARM9Timestamp, DMA9Timestamp), A9ContentionTS << ARM9ClockShift) < target) + while (ARM7Timestamp < target) { - ARM9Target = target; - CurCPU = 0; - RunTimers(0); - GPU.GPU3D.Run(); + ARM7Target = target; + //printf("A7 LOOP: %lli %lli\n", ARM9Timestamp>>ARM9ClockShift, ARM7Timestamp); + CurCPU = 1; + RunTimers(1); - if (ARM9.MRTrack.Type == MainRAMType::Null) + if (ARM7.MRTrack.Type == MainRAMType::Null) { - if (CPUStop & CPUStop_GXStall) + if (CPUStop & CPUStop_DMA7) { - // GXFIFO stall - s32 cycles = GPU.GPU3D.CyclesToRunFor(); - DMA9Timestamp = std::min(ARM9Target, std::max(ARM9Timestamp+(cycles<(*this); - dsi.RunNDMAs(0); + dsi.RunNDMAs(1); } } else { - //if (ARM9.abt) ARM9Timestamp = ARM9Target; - ARM9.Execute(); + //if (ARM7.abt > 16) ARM7Timestamp = ARM7Target; + ARM7.Execute(); } } - RunTimers(0); - GPU.GPU3D.Run(); - if (MainRAMHandle()) break; + RunTimers(1); + + if (!MainRAMHandle()) break; } } - RunSystem(target>>ARM9ClockShift); + RunSystem(target); if (CPUStop & CPUStop_Sleep) {