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)
{
aga_unalign1 += 2;
}
}
+ denise_vsync_bpl_detect = false;
break;
}
center_y_erase = false;
resetfulllinestate();
}
+ denise_vsync_bpl_detect = true;
}
static void denise_draw_update(void)
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) {
*debug_dma_dhpos_odd = denise_hcounter;
#endif
denise_hcounter_cmp++;
+ denise_hcounter &= 511;
denise_hcounter++;
denise_hcounter &= 511;
denise_hcounter_next++;