- // Set up the backbuffer
- int16 * backbuffer = (int16 *)malloc(845 * 525 * sizeof(int16));
- memset(backbuffer, 0xAA, tom_getVideoModeWidth() * tom_getVideoModeHeight() * sizeof(int16));
+ totalFrames = 0;
+ startTime = clock();
+ nNormalLast = 0; // Last value of timeGetTime()
+ nNormalFrac = 0; // Extra fraction we did
+ nNormalLast = SDL_GetTicks(); //timeGetTime();
+
+ 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
+ JaguarExecute(backbuffer, true);
+ totalFrames++;
+
+ // GUI stuff here...
+ if (showGUI)
+ {
+ extern uint32 gpu_pc, dsp_pc;
+ DrawString(backbuffer, 8, 8, false, "GPU PC: %08X", gpu_pc);
+ DrawString(backbuffer, 8, 16, false, "DSP PC: %08X", dsp_pc);
+ }
+
+ // Simple frameskip
+ if (nFrame == nFrameskip)
+ {
+ RenderBackbuffer();
+ nFrame = 0;
+ }
+ else
+ nFrame++;
+
+ joystick_exec();
+
+#ifdef SPEED_CONTROL
+ }
+#endif
+ }