- while (!finished)
- {
-#ifdef SPEED_CONTROL
- nTime = SDL_GetTicks() - nNormalLast; // calcule le temps écoulé depuis le dernier affichage
- // nTime est en mili-secondes.
- // détermine le nombre de trames à passer + 1
- nCount = (nTime * 600 - nNormalFrac) / 10000;
-
- // si le nombre de trames à passer + 1 est nul ou négatif,
- // ne rien faire pendant 2 ms
- if (nCount <= 0)
- {
- //Sleep(2);
- //SDL_Delay(1);
- } // No need to do anything for a bit
- else
- {
- nNormalFrac += nCount * 10000; //
- nNormalLast += nNormalFrac / 600; // add the duration of nNormalFrac frames
- nNormalFrac %= 600; //
-
- // Pas plus de 9 (10-1) trames non affichées
- if (nCount > 10)
- nCount = 10;
- for(int i=0; i<nCount-1; i++)
- jaguar_exec(backbuffer, false);
-#endif
- // Setting up new backbuffer with new pixels and data
-// jaguar_exec(backbuffer, true);
- JaguarExecute(backbuffer, true);
- totalFrames++;
-
- // Simple frameskip
- if (nFrame == nFrameskip)
- {
-// int32 * vs = (int32 *)surface->lock();
- if (SDL_MUSTLOCK(surface))
- while (SDL_LockSurface(surface) < 0)
- SDL_Delay(10);
-// uint8 * vs = (Uint8 *)surface->pixels;
-// memcpy(vs, backbuffer, tom_width * tom_height * 2);
- memcpy(surface->pixels, backbuffer, tom_width * tom_height * 2);
-// surface->unlock();
- if (SDL_MUSTLOCK(surface))
- SDL_UnlockSurface(surface);
-// surface->copy(console);
- SDL_Rect srcrect, dstrect;
- srcrect.x = srcrect.y = 0, srcrect.w = surface->w, srcrect.h = surface->h;
- dstrect.x = dstrect.y = 0, dstrect.w = surface->w, dstrect.h = surface->h;
-// SDL_LowerBlit(surface, &srcrect, dst.surface, &dstrect);
- SDL_BlitSurface(surface, &srcrect, mainSurface, &dstrect);
-// dst.updates[dst.nupdates++] = dstrect;
-// console.update();
- SDL_Flip(mainSurface);
-// nupdates = 0;
-
- nFrame = 0;
- }
- else
- nFrame++;
-
- joystick_exec();
-
-#ifdef SPEED_CONTROL
- }
-#endif
- }