From b3a04c53663e7a6994a7f98f9394eeac56547ce0 Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Wed, 5 Aug 2020 22:15:11 +0200 Subject: [PATCH] Updated compute_framesync Now matches WinUAE's version --- src/custom.cpp | 49 +++++++++++++++++++++++++++++++++---------------- src/drawing.cpp | 16 ++++++++++++---- 2 files changed, 45 insertions(+), 20 deletions(-) diff --git a/src/custom.cpp b/src/custom.cpp index b1e98d49..daecbc97 100644 --- a/src/custom.cpp +++ b/src/custom.cpp @@ -52,7 +52,7 @@ int debug_sprite_mask = 0xff; STATIC_INLINE bool nocustom (void) { struct amigadisplay *ad = &adisplays; - if (ad->picasso_on) + if (ad->picasso_on && currprefs.picasso96_nocustom) return true; return false; } @@ -4340,20 +4340,34 @@ void compute_framesync(void) double v = -1; if (!ad->picasso_on && !ad->picasso_requested_on) { if (isvsync_chipset ()) { - if (cr->index == CHIPSET_REFRESH_PAL || cr->index == CHIPSET_REFRESH_NTSC) { - if ((fabs(vblank_hz - 50) < 1 || fabs(vblank_hz - 60) < 1 || fabs(vblank_hz - 100) < 1 || fabs(vblank_hz - 120) < 1)) { - vsync_switchmode(int(vblank_hz)); + if (!currprefs.gfx_variable_sync) { + if (cr->index == CHIPSET_REFRESH_PAL || cr->index == CHIPSET_REFRESH_NTSC) { + if ((fabs(vblank_hz - 50) < 1 || fabs(vblank_hz - 60) < 1 || fabs(vblank_hz - 100) < 1 || fabs(vblank_hz - 120) < 1) && currprefs.gfx_apmode[0].gfx_vsync == 2 && currprefs.gfx_apmode[0].gfx_fullscreen > 0) { + vsync_switchmode((int)vblank_hz); + } + } + if (isvsync_chipset() < 0) { + + double v2; + v2 = target_getcurrentvblankrate(); + if (!cr->locked) + v = v2; + } else if (isvsync_chipset() > 0) { + if (currprefs.gfx_apmode[0].gfx_refreshrate) + v = abs(currprefs.gfx_apmode[0].gfx_refreshrate); } } - else if (isvsync_chipset() > 0) { - if (currprefs.gfx_apmode[0].gfx_refreshrate) - v = abs(currprefs.gfx_apmode[0].gfx_refreshrate); + } else { + if (cr->locked == false) { + changed_prefs.chipset_refreshrate = currprefs.chipset_refreshrate = vblank_hz; + cfgfile_parse_lines (&changed_prefs, cr->commands, -1); + if (cr->commands[0]) + write_log (_T("CMD1: '%s'\n"), cr->commands); + break; + } else { + v = cr->rate; } } - else { - changed_prefs.chipset_refreshrate = currprefs.chipset_refreshrate = vblank_hz; - break; - } if (v < 0) v = cr->rate; if (v > 0) { @@ -4362,17 +4376,20 @@ void compute_framesync(void) if (cr->commands[0]) write_log (_T("CMD2: '%s'\n"), cr->commands); } - } - else { - v = vblank_hz; + } else { + if (cr->locked == false) + v = vblank_hz; + else + v = cr->rate; changed_prefs.chipset_refreshrate = currprefs.chipset_refreshrate = v; - vsync_switchmode(int(v)); + cfgfile_parse_lines (&changed_prefs, cr->commands, -1); + if (cr->commands[0]) + write_log (_T("CMD3: '%s'\n"), cr->commands); } found = true; break; } if (!found) { - vsync_switchmode(int(vblank_hz)); changed_prefs.chipset_refreshrate = currprefs.chipset_refreshrate = vblank_hz; } stored_chipset_refresh = cr; diff --git a/src/drawing.cpp b/src/drawing.cpp index 9f637bd9..f9767e83 100644 --- a/src/drawing.cpp +++ b/src/drawing.cpp @@ -4346,17 +4346,25 @@ void drawing_init(void) int isvsync_chipset(void) { struct amigadisplay *ad = &adisplays; - if (ad->picasso_on) + if (ad->picasso_on || currprefs.gfx_apmode[0].gfx_vsync <= 0) return 0; - return 1; + if (currprefs.gfx_apmode[0].gfx_vsyncmode == 0) + return 1; + if (currprefs.m68k_speed >= 0) + return -1; + return currprefs.cachesize ? -3 : -2; } int isvsync_rtg(void) { struct amigadisplay *ad = &adisplays; - if (!ad->picasso_on) + if (!ad->picasso_on || currprefs.gfx_apmode[1].gfx_vsync <= 0) return 0; - return 1; + if (currprefs.gfx_apmode[1].gfx_vsyncmode == 0) + return 1; + if (currprefs.m68k_speed >= 0) + return -1; + return currprefs.cachesize ? -3 : -2; } int isvsync(void)