From f69e66613f12b5833e659841be8efd55bf2c5e78 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Wed, 3 Apr 2024 18:54:25 +0300 Subject: [PATCH] Check if programmed vblank is earlier than hardwired vblank in vblank only programmed mode. --- custom.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/custom.cpp b/custom.cpp index b03afb43..4c4732f3 100644 --- a/custom.cpp +++ b/custom.cpp @@ -7096,6 +7096,7 @@ static void init_beamcon0(bool fakehz) } float clk = (float)(currprefs.ntscmode ? CHIPSET_CLOCK_NTSC : CHIPSET_CLOCK_PAL); + int hardwired_vsstrt = 0; if (!isntsc) { maxvpos = MAXVPOS_PAL; maxhpos = MAXHPOS_PAL; @@ -7158,6 +7159,7 @@ static void init_beamcon0(bool fakehz) // A1000 Agnus VBSTRT=first line, OCS and later: VBSTRT=last line if (agnusa1000) { maxvpos_display_vsync++; + hardwired_vsstrt++; } vblank_firstline_hw = minfirstline; @@ -7344,16 +7346,26 @@ static void init_beamcon0(bool fakehz) if (vsstrt > 0 && vsstrt < maxvpos / 2) { maxvpos_display_vsync += vsstrt - 1; } + // if (weird mode where) vblank starts after vsync start+3: minfirstline = vsstrt+3 + if (currprefs.gfx_overscanmode >= OVERSCANMODE_EXTREME && firstblankedline >= vsstrt + 3 && minfirstline > vsstrt + 3 && firstblankedline < minfirstline) { + minfirstline = vsstrt + 3; + if (minfirstline_hw > minfirstline) { + minfirstline_hw = minfirstline; + } + } } else if (beamcon0 & bemcon0_vsync_mask) { firstblankedline = maxvpos + 1; } else if (beamcon0 & BEAMCON0_VARVBEN) { - firstblankedline = vbstrt; - if (vsstrt > 0 && vsstrt < maxvpos / 2) { - maxvpos_display_vsync += vsstrt - 1; + if (minfirstline > vbstop) { + minfirstline = vbstop; + if (minfirstline < 3) { + minfirstline = 3; + } } + firstblankedline = vbstrt; // if (weird mode where) vblank starts after vsync start+3: minfirstline = vsstrt+3 - if (currprefs.gfx_overscanmode >= OVERSCANMODE_EXTREME && firstblankedline >= vsstrt + 3 && minfirstline > vsstrt + 3 && firstblankedline < minfirstline) { - minfirstline = vsstrt + 3; + if (currprefs.gfx_overscanmode >= OVERSCANMODE_EXTREME && firstblankedline >= hardwired_vsstrt + 3 && minfirstline > hardwired_vsstrt + 3 && firstblankedline < minfirstline) { + minfirstline = hardwired_vsstrt + 3; if (minfirstline_hw > minfirstline) { minfirstline_hw = minfirstline; } -- 2.47.3