From 28315c5ca2c2da86b435de75364e8c61d4b2dcdd Mon Sep 17 00:00:00 2001 From: Zac Date: Tue, 2 Jul 2024 23:50:11 +0000 Subject: [PATCH] Match MarkClockTick (thanks to mono21400) --- src/P2/clock.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/src/P2/clock.c b/src/P2/clock.c index 0c7bc179..7fbab862 100644 --- a/src/P2/clock.c +++ b/src/P2/clock.c @@ -5,12 +5,56 @@ float g_rtClockPowerUp = 1.0f; struct CLOCK g_clock; TICK s_tickLastRaw;*/ +static const int CLOCK_FRAMERATE = 60; // 60 FPS +static const float CLOCK_FRAMETIME = 1.f / CLOCK_FRAMERATE; // 1/60th of a second + +static const int CLOCK_EE_TICK_RATE = 294912000; // 294.912 MHz +static const float CLOCK_EE_TICK_DURATION = 1.f / CLOCK_EE_TICK_RATE; // 1/294.912 MHz + void SetClockRate(float rt) { g_rtClock = rt; SetClockEnabled(&g_clock, rt > 0.0f); } -INCLUDE_ASM(const s32, "P2/clock", MarkClockTick); +void MarkClockTick(CLOCK* pclock) +{ + float dt; + float t1; + + const TICK tickFrame = TickNow(); + const TICK deltaTick = tickFrame - pclock->tickFrame; + + dt = deltaTick * CLOCK_EE_TICK_DURATION; + + t1 = CLOCK_FRAMETIME * 2; + + if (dt < CLOCK_FRAMETIME) { + dt = CLOCK_FRAMETIME; + } + else if (t1 < dt) { + dt = t1; + } + + pclock->dtReal = dt; + + float dtFinal = 0.0f; + + if (pclock->fEnabled) { + dtFinal = dt; + } + + dtFinal *= g_rtClockPowerUp * g_rtClock; + + if (CLOCK_FRAMETIME <= dtFinal) { + pclock->dtReal = dtFinal; + } + + pclock->t += dtFinal; + pclock->dtPrev = pclock->dt; + pclock->dt = dtFinal; + pclock->tReal += pclock->dtReal; + pclock->tickFrame = tickFrame; +} INCLUDE_ASM(const s32, "P2/clock", MarkClockTickRealOnly); @@ -26,5 +70,5 @@ void SetClockEnabled(CLOCK *pclock, int fEnabled) INCLUDE_ASM(const s32, "P2/clock", StartupClock); -INCLUDE_ASM(const s32, "P2/clock", TickNow); +INCLUDE_ASM(const s32, "P2/clock", TickNow__Fv); INCLUDE_ASM(const s32, "P2/clock", func_00143140); // empty, not really a function