From: Toni Wilen Date: Wed, 16 Jul 2025 08:17:50 +0000 (+0300) Subject: Fix active blitter statesave X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=b6961b1e3b98ca54531e6322b84c9da63b1c6fd7;p=francis%2Fwinuae.git Fix active blitter statesave --- diff --git a/blitter.cpp b/blitter.cpp index aa1a2c91..f27b2bf6 100644 --- a/blitter.cpp +++ b/blitter.cpp @@ -2354,6 +2354,7 @@ void restore_blitter_finish(void) blitter_delayed_update = true; maybe_load_mods(); } + //activate_debugger(); } uae_u8 *restore_blitter(uae_u8 *src) @@ -2567,6 +2568,7 @@ uae_u8 *restore_blitter_new(uae_u8 *src) // if (blitter_pipe[i]) { // blt_info.blit_queued = BLITTER_MAX_PIPELINED_CYCLES; // } + restore_u16(); restore_u16(); restore_u8(); // cycle_line_pipe[i] = restore_u16(); diff --git a/custom.cpp b/custom.cpp index c26e41b6..f9a98039 100644 --- a/custom.cpp +++ b/custom.cpp @@ -6651,10 +6651,6 @@ void custom_reset(bool hardreset, bool keyboardreset) memory_map_dump(); #endif - rga_slot_first_offset = 0; - rga_slot_in_offset = 1; - rga_slot_out_offset = 2; - for(int i = 0; i < DENISE_RGA_SLOT_TOTAL; i++) { struct denise_rga *r = &rga_denise[i]; memset(r, 0, sizeof(struct denise_rga)); @@ -6749,6 +6745,9 @@ void custom_reset(bool hardreset, bool keyboardreset) } if (!savestate_state) { + rga_slot_first_offset = 0; + rga_slot_in_offset = 1; + rga_slot_out_offset = 2; cia_hsync = 0; extra_cycle = 0; currprefs.chipset_mask = changed_prefs.chipset_mask; @@ -7754,6 +7753,9 @@ void restore_custom_start(void) memset(&cop_state, 0, sizeof(cop_state)); cop_state.state = COP_stop; denise_reset(true); + rga_slot_first_offset = 0; + rga_slot_in_offset = 1; + rga_slot_out_offset = 2; } #define RB restore_u8() @@ -8423,6 +8425,9 @@ static uaecptr *getptfromreg(int reg) { switch (reg) { + case -1: + case 0xffff: + return NULL; case 0x000: return &blt_info.bltdpt; case 0x070: @@ -8520,6 +8525,8 @@ uae_u8 *save_custom_slots(size_t *len, uae_u8 *dstptr) save_u16(regidx); } + save_u8(rga_slot_first_offset); + *len = dst - dstbak; return dstbak; } @@ -8571,6 +8578,9 @@ uae_u8 *restore_custom_slots(uae_u8 *src) regidx = restore_u16(); r->conflict = getptfromreg(regidx); } + rga_slot_first_offset = restore_u8(); + rga_slot_in_offset = (rga_slot_first_offset + 1) & 3; + rga_slot_out_offset = (rga_slot_in_offset + 1) & 3; } return src;