return;
rpt_did_reset = 1;
- is_syncline = 0;
+ events_reset_syncline();
vsyncmintime = read_processor_time () + vsynctimebase;
write_log (_T("Resetting frame rate hack\n"));
}
int vs = isvsync_chipset ();
int status = 0;
- is_syncline = 0;
+ events_reset_syncline();
static struct mavg_data ma_frameskipt;
int frameskipt_avg = mavg (&ma_frameskipt, frameskiptime, MAVG_VSYNC_SIZE);
{
frame_time_t maxtime = read_processor_time() + 2 * vsynctimebase;
- is_syncline = 0;
if (is_last_line()) {
do_render_slice(-1, 0, vpos - 1);
while (!currprefs.turbo_emulation && sync_timeout_check(maxtime)) {
bool input_read_done = false;
bool was_syncline = is_syncline != 0;
- is_syncline = 0;
+ events_reset_syncline();
if (vpos == 0) {
int firstline, lastline;
linesync_first_last_line(&firstline, &lastline);
bool input_read_done = false;
bool was_syncline = is_syncline != 0;
- is_syncline = 0;
+ events_reset_syncline();
if (vpos == 0 && !was_syncline) {
int firstline, lastline;
linesync_first_last_line(&firstline, &lastline);
maybe_process_pull_audio();
if (currprefs.m68k_speed < 0 && !was_syncline) {
is_syncline = -1;
+ is_syncline_end = target_get_display_scanline(-1);
return 0;
}
target_spin(0);
maybe_process_pull_audio();
if (currprefs.m68k_speed < 0 && !was_syncline) {
is_syncline = -1;
+ is_syncline_end = target_get_display_scanline(-1);
return 0;
}
target_spin(0);
}
+
if ((int)rpt - (int)vsyncmintime < vsynctimebase && (int)rpt - (int)vsyncmintime > -vsynctimebase) {
vsyncmintime += vsynctimebase;
} else {
bool input_read_done = false;
bool was_syncline = is_syncline != 0;
- is_syncline = 0;
+ events_reset_syncline();
if (vpos == 0 && !was_syncline) {
int firstline, lastline;
linesync_first_last_line(&firstline, &lastline);
break;
if (currprefs.m68k_speed < 0 && !was_syncline) {
is_syncline = -1;
+ is_syncline_end = vp;
return 0;
}
maybe_process_pull_audio();
void vsync_event_done(void)
{
if (!isvsync_chipset()) {
- is_syncline = 0;
+ events_reset_syncline();
return;
}
if (currprefs.gfx_display_sections <= 1) {
}
} else if (currprefs.m68k_speed_throttle) {
vsyncmintime = read_processor_time (); /* end of CPU emulation time */
- is_syncline = 0;
+ events_reset_syncline();
maybe_process_pull_audio();
} else {
vsyncmintime = vsyncmaxtime; /* emulate if still time left */
/* end of scanline, run cpu emulation as long as we still have time */
vsyncmintime += vsynctimeperline;
linecounter++;
- is_syncline = 0;
+ events_reset_syncline();
if (vsync_isdone(NULL) <= 0 && !currprefs.turbo_emulation) {
if ((int)vsyncmaxtime - (int)vsyncmintime > 0) {
if ((int)vsyncwaittime - (int)vsyncmintime > 0) {
int vsynctimebase;
int event2_count;
+static void events_fast(void)
+{
+ cycles_do_special();
+}
+
+void events_reset_syncline(void)
+{
+ is_syncline = 0;
+ events_fast();
+}
+
void events_schedule (void)
{
int i;
if (is_syncline == -1) {
if (!isvsync_chipset()) {
- is_syncline = 0;
+ events_reset_syncline();
return false;
}
// wait for vblank
audio_finish_pull();
int done = vsync_isdone(NULL);
+ if (done == -2) {
+ // if no vsync thread
+ int vp = target_get_display_scanline(-1);
+ if (vp < is_syncline_end)
+ done = 1;
+ else if (vp > is_syncline_end)
+ is_syncline_end = vp;
+ }
if (!done) {
#ifdef WITH_PPC
if (ppc_state) {
- if (is_syncline == 1) {
- uae_ppc_execute_check();
- } else {
- uae_ppc_execute_quick();
- }
+ uae_ppc_execute_quick();
}
#endif
if (currprefs.cachesize)
} else if (is_syncline == -2) {
if (!isvsync_chipset()) {
- is_syncline = 0;
+ events_reset_syncline();
return false;
}
// wait for vblank or early vblank
audio_finish_pull();
int done = vsync_isdone(NULL);
+ if (done == -2)
+ done = 0;
int vp = target_get_display_scanline(-1);
if (vp < 0 || vp >= is_syncline_end)
- done = true;
+ done = 1;
if (!done) {
#ifdef WITH_PPC
if (ppc_state) {
- if (is_syncline == 1) {
- uae_ppc_execute_check();
- } else {
- uae_ppc_execute_quick();
- }
+ uae_ppc_execute_quick();
}
#endif
if (currprefs.cachesize)
} else if (is_syncline > 0) {
if (!isvsync_chipset()) {
- is_syncline = 0;
+ events_reset_syncline();
return false;
}
audio_finish_pull();
return true;
}
}
- is_syncline = 0;
+ events_reset_syncline();
} else if (is_syncline < -10) {
return true;
}
}
- is_syncline = 0;
+ events_reset_syncline();
}
return false;
}