frame_shown = false;
frame_rendered = false;
- if (quit_program > 0) {
- /* prevent possible infinite loop at wait_cycles().. */
- ad->framecnt = 0;
- //reset_decisions_scanline_start();
- //reset_decisions_hsync_start();
- return;
- }
-
if (vblank_hz_mult > 0) {
vblank_hz_state ^= 1;
} else {
}
}
-static bool vsync_line;
+static bool uae_quit_check(void)
+{
+ if (quit_program < 0) {
+#ifdef SAVESTATE
+ if (!savestate_state && quit_program == -UAE_QUIT && currprefs.quitstatefile[0]) {
+ savestate_initsave(currprefs.quitstatefile, 1, 1, true);
+ save_state(currprefs.quitstatefile, _T(""));
+ }
+#endif
+ quit_program = -quit_program;
+ set_inhibit_frame(0, IHF_QUIT_PROGRAM);
+ set_special(SPCFLAG_BRK | SPCFLAG_MODE_CHANGE);
+ return true;
+ }
+ if (quit_program > 0) {
+ struct amigadisplay *ad = &adisplays[0];
+ /* prevent possible infinite loop at wait_cycles().. */
+ ad->framecnt = 0;
+ return true;
+ }
+ return false;
+}
+
// executed at start of scanline
static void hsync_handler(bool vs)
{
uae_reset(0, 0);
return;
}
-
+ if (uae_quit_check()) {
+ return;
+ }
}
if (vpos == vsync_startline + 1 && !maxvpos_display_vsync_next) {
inputdevice_read_msg(true);
}
}
- vsync_line = vs;
hsync_handler_post(vs);
}
vsync_display_render();
vsync_display_rendered = false;
virtual_vsync_check();
+ uae_quit_check();
}
static void custom_trigger_start_nosync(void)
blt_info.nasty_cnt = 0;
while (currprefs.cpu_memory_cycle_exact) {
struct rgabuf *r = read_rga_out();
- if (r->alloc <= 0) {
+ if (r->alloc <= 0 || quit_program > 0) {
break;
}
blt_info.nasty_cnt++;
}
#endif
- if (quit_program < 0) {
-#ifdef SAVESTATE
- if (!savestate_state && quit_program == -UAE_QUIT && currprefs.quitstatefile[0]) {
- savestate_initsave(currprefs.quitstatefile, 1, 1, true);
- save_state(currprefs.quitstatefile, _T(""));
- }
-#endif
- quit_program = -quit_program;
- set_inhibit_frame(monid, IHF_QUIT_PROGRAM);
- set_special(SPCFLAG_BRK | SPCFLAG_MODE_CHANGE);
- return;
- }
-
if (ad->framecnt == 0) {
init_drawing_frame();
}