From: notaz Date: Mon, 5 Dec 2011 00:34:30 +0000 (+0200) Subject: psxcounters: handle overflow = target case X-Git-Tag: r12~38 X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=commitdiff_plain;h=53c361f0abe1fca37806bec2c20afc661c998df6 psxcounters: handle overflow = target case otherwise would need multiple calls to psxRcntUpdate() to get overflow irq, but currently psxRcntUpdate() is only called once. --- diff --git a/libpcsxcore/psxcounters.c b/libpcsxcore/psxcounters.c index 7317c87a..2ea7c63b 100644 --- a/libpcsxcore/psxcounters.c +++ b/libpcsxcore/psxcounters.c @@ -190,6 +190,8 @@ void psxRcntReset( u32 index ) { u32 count; + rcnts[index].mode |= RcUnknown10; + if( rcnts[index].counterState == CountToTarget ) { if( rcnts[index].mode & RcCountToTarget ) @@ -218,8 +220,14 @@ void psxRcntReset( u32 index ) } rcnts[index].mode |= RcCountEqTarget; + + psxRcntSet(); + + if( count < 0xffff ) // special case, overflow too? + return; } - else if( rcnts[index].counterState == CountToOverflow ) + + if( rcnts[index].counterState == CountToOverflow ) { count = psxRegs.cycle; count -= rcnts[index].cycleStart; @@ -242,8 +250,6 @@ void psxRcntReset( u32 index ) rcnts[index].mode |= RcOverflow; } - rcnts[index].mode |= RcUnknown10; - psxRcntSet(); }