From: Toni Wilen Date: Sun, 26 Oct 2025 14:30:38 +0000 (+0200) Subject: Switch to normal emulation if BPLDAT1 is written to even if line is blanked. X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=0a371dd6db9aa28096e2f9ea70dfe8331de82e5a;p=francis%2Fwinuae.git Switch to normal emulation if BPLDAT1 is written to even if line is blanked. --- diff --git a/drawing.cpp b/drawing.cpp index 9a365eed..533c16d3 100644 --- a/drawing.cpp +++ b/drawing.cpp @@ -517,6 +517,7 @@ static int internal_pixel_cnt, internal_pixel_start_cnt; static bool no_denise_lol, denise_strlong_seen; #define STRLONG_SEEN_DELAY 2 static int denise_strlong_seen_delay; +static bool denise_vsync_bpl_detect; void set_inhibit_frame(int monid, int bit) { @@ -3738,6 +3739,7 @@ static void expand_drga_early(struct denise_rga *rd) aga_unalign1 += 2; } } + denise_vsync_bpl_detect = false; break; } @@ -5507,6 +5509,7 @@ static void draw_denise_vsync(int erase) center_y_erase = false; resetfulllinestate(); } + denise_vsync_bpl_detect = true; } static void denise_draw_update(void) @@ -5712,15 +5715,23 @@ static void draw_denise_line(int gfx_ypos, enum nln_how how, uae_u32 linecnt, in bool blankedline = (this_line->linear_vpos >= denise_vblank_extra_bottom || this_line->linear_vpos < denise_vblank_extra_top) && currprefs.gfx_overscanmode < OVERSCANMODE_EXTREME && !programmedmode; bool line_is_blanked = false; - if (denise_pixtotal_max == -0x7fffffff || blankedline || blanked) { + if ((denise_pixtotal_max == -0x7fffffff && denise_vsync_bpl_detect) || blankedline || blanked) { // don't draw vertical blanking if not ultra extreme overscan internal_pixel_cnt = -1; line_is_blanked = true; while (denise_cck < denise_endcycle) { + // start drawing normally if BPLDAT1 gets written to, even if line is blanked + if (!denise_vsync_bpl_detect) { + while (denise_cck < denise_endcycle) { + lts(); + lts_changed = false; + } + break; + } while (denise_cck < denise_endcycle) { do_denise_cck(denise_linecnt, denise_startpos, denise_cck); - if (lts_changed) { + if (lts_changed || !denise_vsync_bpl_detect) { break; } if (aga_mode) { @@ -5753,6 +5764,7 @@ static void draw_denise_line(int gfx_ypos, enum nln_how how, uae_u32 linecnt, in *debug_dma_dhpos_odd = denise_hcounter; #endif denise_hcounter_cmp++; + denise_hcounter &= 511; denise_hcounter++; denise_hcounter &= 511; denise_hcounter_next++;