mirror of
https://github.com/holub/mame
synced 2025-07-03 17:08:39 +03:00
Added return value to video_screen_update_partial() indicating whether
or not the VIDEO_UPDATE was called as a result. Modified amiga.c to use this information so that we guarantee a call to amiga_render_scanline() regardless of the video state. Fixes 01521: ar_sdwr: Game hangs on title screen
This commit is contained in:
parent
c44017b4fd
commit
d75b3d1dff
@ -754,10 +754,11 @@ void video_screen_set_visarea(const device_config *screen, int min_x, int max_x,
|
||||
including the specified scanline
|
||||
-------------------------------------------------*/
|
||||
|
||||
void video_screen_update_partial(const device_config *screen, int scanline)
|
||||
int video_screen_update_partial(const device_config *screen, int scanline)
|
||||
{
|
||||
screen_state *state = get_safe_token(screen);
|
||||
rectangle clip = state->visarea;
|
||||
int result = FALSE;
|
||||
|
||||
/* validate arguments */
|
||||
assert(scanline >= 0);
|
||||
@ -771,14 +772,14 @@ void video_screen_update_partial(const device_config *screen, int scanline)
|
||||
if (global.skipping_this_frame)
|
||||
{
|
||||
LOG_PARTIAL_UPDATES(("skipped due to frameskipping\n"));
|
||||
return;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* skip if this screen is not visible anywhere */
|
||||
if (!render_is_live_screen(screen))
|
||||
{
|
||||
LOG_PARTIAL_UPDATES(("skipped because screen not live\n"));
|
||||
return;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
@ -786,7 +787,7 @@ void video_screen_update_partial(const device_config *screen, int scanline)
|
||||
if (scanline < state->last_partial_scan)
|
||||
{
|
||||
LOG_PARTIAL_UPDATES(("skipped because less than previous\n"));
|
||||
return;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* set the start/end scanlines */
|
||||
@ -810,10 +811,12 @@ void video_screen_update_partial(const device_config *screen, int scanline)
|
||||
|
||||
/* if we modified the bitmap, we have to commit */
|
||||
state->changed |= ~flags & UPDATE_HAS_NOT_CHANGED;
|
||||
result = TRUE;
|
||||
}
|
||||
|
||||
/* remember where we left off */
|
||||
state->last_partial_scan = scanline + 1;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
@ -164,7 +164,7 @@ void video_screen_configure(const device_config *screen, int width, int height,
|
||||
void video_screen_set_visarea(const device_config *screen, int min_x, int max_x, int min_y, int max_y);
|
||||
|
||||
/* force a partial update of the screen up to and including the requested scanline */
|
||||
void video_screen_update_partial(const device_config *screen, int scanline);
|
||||
int video_screen_update_partial(const device_config *screen, int scanline);
|
||||
|
||||
/* force an update from the last beam position up to the current beam position */
|
||||
void video_screen_update_now(const device_config *screen);
|
||||
|
@ -386,10 +386,8 @@ static TIMER_CALLBACK( scanline_callback )
|
||||
cia_clock_tod(1);
|
||||
|
||||
/* render up to this scanline */
|
||||
if (scanline < video_screen_get_visible_area(machine->primary_screen)->min_y)
|
||||
if (!video_screen_update_partial(machine->primary_screen, scanline))
|
||||
amiga_render_scanline(machine, NULL, scanline);
|
||||
else
|
||||
video_screen_update_partial(machine->primary_screen, scanline);
|
||||
|
||||
/* force a sound update */
|
||||
amiga_audio_update();
|
||||
|
Loading…
Reference in New Issue
Block a user