From: Toni Wilen Date: Thu, 23 Apr 2026 16:14:42 +0000 (+0300) Subject: Always clear pending events and set cycle counter when emulation restarts or statefil... X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=066f6bc0d9b801323749fc7d8a5e67de62b509bc;p=francis%2Fwinuae.git Always clear pending events and set cycle counter when emulation restarts or statefile is loaded. --- diff --git a/custom.cpp b/custom.cpp index b21529e9..783c4928 100644 --- a/custom.cpp +++ b/custom.cpp @@ -1111,8 +1111,12 @@ static void setup_fmodes(uae_u16 con0) if (fmode_inuse != fmode) { fetchmode_size = 16 << fetchmode; fetchmode_mask = fetchmode_size - 1; - // Fetch mode/modulo change is delayed by 2 CCK - event2_newevent_xx(-1, 2 * CYCLE_UNIT, fmode, setup_fmodes_delayed); + if (!savestate_state) { + // Fetch mode/modulo change is delayed by 2 CCK + event2_newevent_xx(-1, 2 * CYCLE_UNIT, fmode, setup_fmodes_delayed); + } else { + setup_fmodes_delayed(fmode); + } } fmode_inuse = fmode; } @@ -1195,7 +1199,7 @@ static void set_chipset_mode(bool imm) if (imm || fmode != fmode_saved) { denise_update_reg_queue(0x1fc, fmode, rga_denise_cycle_line); setup_fmodes(bplcon0); - setup_fmodes_delayed(bplcon0); + setup_fmodes_delayed(fmode); } } @@ -6781,7 +6785,7 @@ void custom_reset(bool hardreset, bool keyboardreset) CLXCON(0); CLXCON2(0); setup_fmodes(bplcon0); - setup_fmodes_delayed(bplcon0); + setup_fmodes_delayed(fmode); beamcon0 = new_beamcon0 = beamcon0_saved = currprefs.ntscmode ? 0x00 : BEAMCON0_PAL; blt_info.blit_main = 0; blt_info.blit_pending = 0; @@ -6867,7 +6871,7 @@ void custom_reset(bool hardreset, bool keyboardreset) BPLCON0(v); FMODE(fmode); setup_fmodes(bplcon0); - setup_fmodes_delayed(bplcon0); + setup_fmodes_delayed(fmode); if (!aga_mode) { for(int i = 0 ; i < 32 ; i++) { vv = denise_colors.color_regs_ecs[i]; @@ -6921,7 +6925,7 @@ void custom_reset(bool hardreset, bool keyboardreset) sprite_width = GET_SPRITEWIDTH(fmode); setup_fmodes(bplcon0); - setup_fmodes_delayed(bplcon0); + setup_fmodes_delayed(fmode); setmaxhpos(); resetfulllinestate(); updateprghpostable(); diff --git a/newcpu.cpp b/newcpu.cpp index 440f7ea4..476217a4 100644 --- a/newcpu.cpp +++ b/newcpu.cpp @@ -6636,6 +6636,10 @@ void m68k_go (int may_quit) hsync_counter = 0; vsync_counter = 0; + if (quit_program) { + set_cycles(start_cycles); + clear_events(); + } quit_program = 0; #ifdef SAVESTATE diff --git a/savestate.cpp b/savestate.cpp index 538de5b9..8869d0ea 100644 --- a/savestate.cpp +++ b/savestate.cpp @@ -646,6 +646,7 @@ void restore_state (const TCHAR *filename) restore_header (chunk); xfree (chunk); devices_restore_start(); + set_cycles(0); clear_events(); z2num = z3num = 0; for (;;) {