mirror of
https://github.com/dborth/vbagx.git
synced 2025-02-19 20:12:45 +01:00
add timing correction for GB games
This commit is contained in:
parent
0ae30cfd17
commit
4e0ff85b3f
@ -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
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user