add timing correction for GB games

This commit is contained in:
dborth 2008-10-25 18:41:40 +00:00
parent 0ae30cfd17
commit 4e0ff85b3f

View File

@ -132,9 +132,6 @@ static u32 autoFrameSkipLastTime = 0;
void system10Frames(int rate) void system10Frames(int rate)
{ {
if (cartridgeType == 1)
return;
u32 time = systemGetClock(); u32 time = systemGetClock();
u32 diff = time - autoFrameSkipLastTime; u32 diff = time - autoFrameSkipLastTime;
@ -146,29 +143,32 @@ void system10Frames(int rate)
else else
timeOff = 0; // timeoff was not valid timeOff = 0; // timeoff was not valid
// consider increasing skip if (cartridgeType == 2) // GBA games require frameskipping
if(diff >= 270) {
systemFrameSkip += 4; // consider increasing skip
else if(diff >= 240) if(diff >= 270)
systemFrameSkip += 3; systemFrameSkip += 4;
else if(diff >= 210) else if(diff >= 240)
systemFrameSkip += 2; systemFrameSkip += 3;
else if(diff >= 170) else if(diff >= 210)
systemFrameSkip += 1; systemFrameSkip += 2;
else if(diff >= 170)
systemFrameSkip += 1;
// consider decreasing skip // consider decreasing skip
else if(diff <= 90) else if(diff <= 90)
systemFrameSkip -= 3; systemFrameSkip -= 3;
else if(diff <= 120) else if(diff <= 120)
systemFrameSkip -= 2; systemFrameSkip -= 2;
else if(diff <= 135) else if(diff <= 135)
systemFrameSkip -= 1; systemFrameSkip -= 1;
// correct invalid frame skip values // correct invalid frame skip values
if(systemFrameSkip > 20) if(systemFrameSkip > 20)
systemFrameSkip = 20; systemFrameSkip = 20;
else if(systemFrameSkip < 0) else if(systemFrameSkip < 0)
systemFrameSkip = 0; systemFrameSkip = 0;
}
autoFrameSkipLastTime = time + timeOff; // total time = processing time + sleep time autoFrameSkipLastTime = time + timeOff; // total time = processing time + sleep time