1
0
Fork 0

new callback and tick handling in main loop.

Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@1151
This commit is contained in:
Sjoerd van der Berg 2003-07-26 10:25:38 +00:00
parent 41d13152f4
commit 4a07f3e97b

View file

@ -99,24 +99,31 @@ void INT10_Init(Section*);
static LoopHandler * loop;
Bitu RemainTicks;;
Bitu LastTicks;
Bits RemainTicks;;
Bits LastTicks;
static Bitu Normal_Loop(void) {
Bitu ret,NewTicks;
while (RemainTicks) {
ret=PIC_RunQueue();
#if C_DEBUG
if (DEBUG_ExitLoop()) return 0;
#endif
if (ret) return ret;
RemainTicks--;
TIMER_AddTick();
GFX_Events();
Bits ret,NewTicks;
while (1) {
if (PIC_RunQueue()) {
ret=(*cpudecoder)();
if (ret<0) return 1;
if (ret>0) {
Bitu blah=(*CallBack_Handlers[ret])();
if (blah) return blah;
}
} else {
if (RemainTicks>0) {
TIMER_AddTick();
RemainTicks--;
GFX_Events();
} else goto increaseticks;
}
}
increaseticks:
NewTicks=GetTicks();
if (NewTicks>LastTicks) {
RemainTicks+=NewTicks-LastTicks;
RemainTicks=NewTicks-LastTicks;
if (RemainTicks>20) {
// LOG_DEBUG("Ticks to handle overflow %d",RemainTicks);
RemainTicks=20;
@ -124,7 +131,7 @@ static Bitu Normal_Loop(void) {
LastTicks=NewTicks;
}
//TODO Make this selectable in the config file, since it gives some lag */
if (!RemainTicks) {
if (RemainTicks<=0) {
SDL_Delay(1);
return 0;
}