diff options
author | notaz | 2011-10-26 02:38:58 +0300 |
---|---|---|
committer | notaz | 2011-10-30 23:48:08 +0200 |
commit | 4f55097de04a34ddcc83647f3b1f69570d7f1e36 (patch) | |
tree | 05c2c582df2d57a2e309090b2315b9c97c9852a5 /libpcsxcore | |
parent | 48e74ef5e10804f8809fae397be4234e8bf613a7 (diff) | |
download | pcsx_rearmed-4f55097de04a34ddcc83647f3b1f69570d7f1e36.tar.gz pcsx_rearmed-4f55097de04a34ddcc83647f3b1f69570d7f1e36.tar.bz2 pcsx_rearmed-4f55097de04a34ddcc83647f3b1f69570d7f1e36.zip |
psxcounters: use higher precision for vsync timing
don't know why this is needed (having things like BIAS in mind),
maybe desyncs with cdrom code or SPU?
Tuned this on RE1.
Diffstat (limited to 'libpcsxcore')
-rw-r--r-- | libpcsxcore/psxcounters.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/libpcsxcore/psxcounters.c b/libpcsxcore/psxcounters.c index 3f6e139..177ccb7 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; } |