]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Always clear pending events and set cycle counter when emulation restarts or statefil...
authorToni Wilen <twilen@winuae.net>
Thu, 23 Apr 2026 16:14:42 +0000 (19:14 +0300)
committerToni Wilen <twilen@winuae.net>
Thu, 23 Apr 2026 16:14:42 +0000 (19:14 +0300)
custom.cpp
newcpu.cpp
savestate.cpp

index b21529e92a876f96d220db4914557a0630f594a4..783c49283c5bfb3eb7c6ef950d22a68b7bde8b3a 100644 (file)
@@ -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();
index 440f7ea4a7e855fc2fe74e0f1069d002678c6b90..476217a45202540451d2ba2ec03cb90734c683b5 100644 (file)
@@ -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
index 538de5b944d7d0e11ff9b33f8cc0e9c505231a70..8869d0ea99b5bd609cd96e114840a3d77f85665d 100644 (file)
@@ -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 (;;) {