@@ -2289,7 +2289,7 @@ static void record_sprite (int line, int num, int sprxp, uae_u16 *data, uae_u16
2289
2289
stb1[6 ] |= state;
2290
2290
stb1[7 ] |= state;
2291
2291
stb1 += 8 ;
2292
- }
2292
+ }
2293
2293
e->has_attached = 1 ;
2294
2294
}
2295
2295
}
@@ -2688,6 +2688,7 @@ static void compute_framesync (void)
2688
2688
else
2689
2689
v = cr->rate ;
2690
2690
changed_prefs.chipset_refreshrate = currprefs.chipset_refreshrate = v;
2691
+ vsync_switchmode ((int )v);
2691
2692
}
2692
2693
found = true ;
2693
2694
break ;
@@ -4972,6 +4973,7 @@ static bool framewait (void)
4972
4973
{
4973
4974
frame_time_t curr_time;
4974
4975
frame_time_t start;
4976
+ frame_time_t time_for_next_frame = vsynctimebase;
4975
4977
int vs = isvsync_chipset ();
4976
4978
int status = 0 ;
4977
4979
@@ -4984,21 +4986,29 @@ static bool framewait (void)
4984
4986
4985
4987
if (vs > 0 ) {
4986
4988
4987
- if (!frame_rendered && !picasso_on)
4988
- frame_rendered = render_screen (false );
4989
+ if (!nodraw ()) {
4990
+ if (!frame_rendered && !picasso_on)
4991
+ frame_rendered = render_screen (false );
4992
+
4993
+ if (!frame_shown) {
4994
+ show_screen (1 );
4995
+ }
4996
+ curr_time = target_lastsynctime ();
4997
+ }
4998
+ else {
4999
+ curr_time = target_lastsynctime () + vsynctimebase;
4989
5000
4990
- if (!frame_shown) {
4991
- show_screen ( 1 );
4992
- }
5001
+ if ( read_processor_time () > curr_time)
5002
+ time_for_next_frame = curr_time - read_processor_time ( );
5003
+ }
4993
5004
4994
- curr_time = target_lastsynctime ();
4995
5005
vsyncwaittime = vsyncmaxtime = curr_time + vsynctimebase;
4996
5006
vsyncmintime = curr_time;
4997
-
5007
+
4998
5008
if (currprefs.m68k_speed < 0 ) {
4999
- vsynctimeperline = (vsynctimebase ) / (maxvpos_display + 1 );
5009
+ vsynctimeperline = (time_for_next_frame ) / (maxvpos_display + 1 );
5000
5010
} else {
5001
- vsynctimeperline = (vsynctimebase ) / 3 ;
5011
+ vsynctimeperline = (time_for_next_frame ) / 3 ;
5002
5012
}
5003
5013
5004
5014
if (vsynctimeperline < 1 )
@@ -5083,7 +5093,7 @@ void fpscounter_reset (void)
5083
5093
idletime = 0 ;
5084
5094
}
5085
5095
5086
- static void fpscounter (bool frameok )
5096
+ static void fpscounter (void )
5087
5097
{
5088
5098
frame_time_t now, last;
5089
5099
@@ -5094,6 +5104,9 @@ static void fpscounter (bool frameok)
5094
5104
if ((int )last < 0 )
5095
5105
return ;
5096
5106
5107
+ if (currprefs.gfx_framerate )
5108
+ idletime >>= 1 ;
5109
+
5097
5110
mavg (&fps_mavg, last / 10 , FPSCOUNTER_MAVG_SIZE);
5098
5111
mavg (&idle_mavg, idletime / 10 , FPSCOUNTER_MAVG_SIZE);
5099
5112
idletime = 0 ;
@@ -5109,10 +5122,6 @@ static void fpscounter (bool frameok)
5109
5122
idle = 0 ;
5110
5123
if (idle > 100 * 10 )
5111
5124
idle = 100 * 10 ;
5112
- if (fake_vblank_hz * 10 > fps) {
5113
- float mult = (float )fake_vblank_hz * 10.0 / fps;
5114
- idle *= mult;
5115
- }
5116
5125
gui_data.fps = fps;
5117
5126
gui_data.idle = (int )idle;
5118
5127
}
@@ -5139,18 +5148,22 @@ static void vsync_handler_pre (void)
5139
5148
frameskiptime += end - start;
5140
5149
}
5141
5150
5142
- bool frameok = framewait ();
5151
+ framewait ();
5143
5152
5144
- if (!picasso_on) {
5153
+ if (!picasso_on && ! nodraw () ) {
5145
5154
if (!frame_rendered) {
5146
5155
frame_rendered = render_screen (false );
5147
5156
}
5148
5157
if (frame_rendered && !frame_shown) {
5149
5158
frame_shown = show_screen_maybe (true );
5150
5159
}
5151
5160
}
5152
-
5153
- fpscounter (frameok);
5161
+ #ifdef PICASSO96
5162
+ if (!nodraw () || (picasso_on && picasso_rendered))
5163
+ #else
5164
+ if (!nodraw () )
5165
+ #endif
5166
+ fpscounter ();
5154
5167
5155
5168
handle_events ();
5156
5169
0 commit comments