X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libpcsxcore%2Fpsxcounters.c;h=2ea7c63bc7aaccd6b5a8a32202427e1cd352cd15;hb=53c361f0abe1fca37806bec2c20afc661c998df6;hp=6f82abd5ae3baf3ae7e73ae05a35f9656d394354;hpb=24de2dd4dbdd50e44c91c40ebbc7d59ee1c0ac9b;p=pcsx_rearmed.git diff --git a/libpcsxcore/psxcounters.c b/libpcsxcore/psxcounters.c index 6f82abd5..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(); } @@ -294,11 +300,13 @@ void psxRcntUpdate() // VSync irq. if( hSyncCount == VBlankStart[Config.PsxType] ) { - //if( !(HW_GPU_STATUS & PSXGPU_ILACE) ) // hmh + if( !(HW_GPU_STATUS & PSXGPU_ILACE) ) HW_GPU_STATUS |= PSXGPU_LCF; - // For the best times. :D - //setIrq( 0x01 ); + setIrq( 0x01 ); + + EmuUpdate(); + GPU_updateLace(); } // Update lace. (with InuYasha fix) @@ -307,11 +315,6 @@ void psxRcntUpdate() hSyncCount = 0; frame_counter++; - setIrq( 0x01 ); - - EmuUpdate(); - GPU_updateLace(); - HW_GPU_STATUS &= ~PSXGPU_LCF; if( HW_GPU_STATUS & PSXGPU_ILACE ) HW_GPU_STATUS |= frame_counter << 31;