# HG changeset patch # User Mike Pavone # Date 1368682645 25200 # Node ID 5c34a9c39394f8d6e4c622f3964f6937dce0606e # Parent f8c6f8684cd6751458db1162a41ae499781af65e Re-enable frame limit, but add a command line flag to disable it diff -r f8c6f8684cd6 -r 5c34a9c39394 blastem.c --- a/blastem.c Wed May 15 22:37:04 2013 -0700 +++ b/blastem.c Wed May 15 22:37:25 2013 -0700 @@ -27,6 +27,7 @@ int headless = 0; int z80_enabled = 1; +int frame_limit = 1; #ifndef MIN #define MIN(a,b) ((a) < (b) ? (a) : (b)) @@ -197,7 +198,7 @@ //printf("reached frame end | 68K Cycles: %d, MCLK Cycles: %d\n", context->current_cycle, mclks); vdp_run_context(v_context, MCLKS_PER_FRAME); if (!headless) { - break_on_sync |= wait_render_frame(v_context); + break_on_sync |= wait_render_frame(v_context, frame_limit); } frame++; mclks -= MCLKS_PER_FRAME; @@ -242,7 +243,7 @@ vdp_run_dma_done(v_context, MCLKS_PER_FRAME); if (v_context->cycles >= MCLKS_PER_FRAME) { if (!headless) { - wait_render_frame(v_context); + wait_render_frame(v_context, frame_limit); } vdp_adjust_cycles(v_context, MCLKS_PER_FRAME); io_adjust_cycles(&gamepad_1, v_context->cycles/MCLKS_PER_68K, MCLKS_PER_FRAME/MCLKS_PER_68K); @@ -259,7 +260,7 @@ vdp_run_dma_done(v_context, MCLKS_PER_FRAME); if (v_context->cycles >= MCLKS_PER_FRAME) { if (!headless) { - wait_render_frame(v_context); + wait_render_frame(v_context, frame_limit); } vdp_adjust_cycles(v_context, MCLKS_PER_FRAME); io_adjust_cycles(&gamepad_1, v_context->cycles/MCLKS_PER_68K, MCLKS_PER_FRAME/MCLKS_PER_68K); @@ -1042,6 +1043,9 @@ case 'd': debug = 1; break; + case 'f': + frame_limit = 0; + break; case 'l': address_log = fopen("address.log", "w"); break; diff -r f8c6f8684cd6 -r 5c34a9c39394 render.h --- a/render.h Wed May 15 22:37:04 2013 -0700 +++ b/render.h Wed May 15 22:37:25 2013 -0700 @@ -5,7 +5,7 @@ void render_init(int width, int height); void render_context(vdp_context * context); void render_wait_quit(vdp_context * context); -int wait_render_frame(vdp_context * context); +int wait_render_frame(vdp_context * context, int frame_limit); #endif //RENDER_SDL_H_ diff -r f8c6f8684cd6 -r 5c34a9c39394 render_sdl.c --- a/render_sdl.c Wed May 15 22:37:04 2013 -0700 +++ b/render_sdl.c Wed May 15 22:37:25 2013 -0700 @@ -232,7 +232,7 @@ #define MIN_DELAY 5 uint32_t frame_counter = 0; uint32_t start = 0; -int wait_render_frame(vdp_context * context) +int wait_render_frame(vdp_context * context, int frame_limit) { FILE * outfile; SDL_Event event; @@ -358,18 +358,20 @@ exit(0); } } - //TODO: Adjust frame delay so we actually get 60 FPS rather than 62.5 FPS - /*uint32_t current = SDL_GetTicks(); - uint32_t desired = last_frame + FRAME_DELAY; - if (current < desired) { - uint32_t delay = last_frame + FRAME_DELAY - current; - //TODO: Calculate MIN_DELAY at runtime - if (delay > MIN_DELAY) { - SDL_Delay((delay/MIN_DELAY)*MIN_DELAY); + if (frame_limit) { + //TODO: Adjust frame delay so we actually get 60 FPS rather than 62.5 FPS + uint32_t current = SDL_GetTicks(); + uint32_t desired = last_frame + FRAME_DELAY; + if (current < desired) { + uint32_t delay = last_frame + FRAME_DELAY - current; + //TODO: Calculate MIN_DELAY at runtime + if (delay > MIN_DELAY) { + SDL_Delay((delay/MIN_DELAY)*MIN_DELAY); + } + while ((desired) >= SDL_GetTicks()) { + } } - while ((desired) >= SDL_GetTicks()) { - } - }*/ + } render_context(context);