X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=libpcsxcore%2Fpsxcounters.c;fp=libpcsxcore%2Fpsxcounters.c;h=177ccb75214ab42a44622069fa8e4e17a01b17ac;hp=3f6e13956e45e796ccb0bb14e165fbae82bc02f3;hb=4f55097de04a34ddcc83647f3b1f69570d7f1e36;hpb=48e74ef5e10804f8809fae397be4234e8bf613a7 diff --git a/libpcsxcore/psxcounters.c b/libpcsxcore/psxcounters.c index 3f6e1395..177ccb75 100644 --- a/libpcsxcore/psxcounters.c +++ b/libpcsxcore/psxcounters.c @@ -74,6 +74,7 @@ static u32 hSyncCount = 0; static u32 spuSyncCount = 0; static u32 hsync_steps = 0; static u32 gpu_wants_hcnt = 0; +static u32 base_cycle = 0; u32 psxNextCounter = 0, psxNextsCounter = 0; @@ -322,7 +323,14 @@ void psxRcntUpdate() hsync_steps = 1; rcnts[3].cycleStart = cycle - leftover_cycles; - rcnts[3].cycle = hsync_steps * rcnts[3].target; + if (Config.PsxType) + // 20.12 precision, clk / 50 / 313 ~= 2164.14 + base_cycle += hsync_steps * 8864320; + else + // clk / 60 / 263 ~= 2146.31 + base_cycle += hsync_steps * 8791293; + rcnts[3].cycle = base_cycle >> 12; + base_cycle &= 0xfff; psxRcntSet(); } @@ -494,6 +502,8 @@ s32 psxRcntFreeze( gzFile f, s32 Mode ) if (Mode == 0) hsync_steps = (psxRegs.cycle - rcnts[3].cycleStart) / rcnts[3].target; + base_cycle = 0; + return 0; }