From 1964867d164b9c99e2702bd1dca7103a8ed1d78d Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Wed, 27 Mar 2024 20:15:32 +0200 Subject: [PATCH] Correct calculation of vertical period if NTSC + LOLDIS. --- custom.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/custom.cpp b/custom.cpp index e86fbc10..6942e252 100644 --- a/custom.cpp +++ b/custom.cpp @@ -7112,9 +7112,10 @@ static void init_beamcon0(bool fakehz) hardwired_vbstrt = maxvpos; equ_vblank_endline = EQU_ENDLINE_NTSC; equ_vblank_toggle = false; - vblank_hz_shf = clk / ((maxvpos + 0.0f) * (maxhpos + 0.5f)); - vblank_hz_lof = clk / ((maxvpos + 1.0f) * (maxhpos + 0.5f)); - vblank_hz_lace = clk / ((maxvpos + 0.5f) * (maxhpos + 0.5f)); + float half = (beamcon0 & BEAMCON0_LOLDIS) ? 0 : 0.5f; + vblank_hz_shf = clk / ((maxvpos + 0.0f) * (maxhpos + half)); + vblank_hz_lof = clk / ((maxvpos + 1.0f) * (maxhpos + half)); + vblank_hz_lace = clk / ((maxvpos + 0.5f) * (maxhpos + half)); } dmal_htotal_mask = 0xffff; @@ -7393,10 +7394,11 @@ static void init_beamcon0(bool fakehz) } if (beamcon0 & BEAMCON0_VARBEAMEN) { - vblank_hz_nom = vblank_hz = clk / (maxvpos * maxhpos); + float half = (beamcon0 & BEAMCON0_PAL) ? 0: ((beamcon0 & BEAMCON0_LOLDIS) ? 0 : 0.5f); + vblank_hz_nom = vblank_hz = clk / (maxvpos * (maxhpos + half)); vblank_hz_shf = vblank_hz; - vblank_hz_lof = clk / ((maxvpos + 1.0f) * maxhpos); - vblank_hz_lace = clk / ((maxvpos + 0.5f) * maxhpos); + vblank_hz_lof = clk / ((maxvpos + 1.0f) * (maxhpos + half)); + vblank_hz_lace = clk / ((maxvpos + 0.5f) * (maxhpos + half)); maxvpos_nom = maxvpos; maxvpos_display = maxvpos; -- 2.47.3