diff --git a/src/emu/debug/debugcpu.c b/src/emu/debug/debugcpu.c index cdb903f8b99..46dac61306e 100644 --- a/src/emu/debug/debugcpu.c +++ b/src/emu/debug/debugcpu.c @@ -144,7 +144,7 @@ int mame_debug_is_active(void) on_vblank - called when a VBLANK hits -------------------------------------------------*/ -static void on_vblank(running_machine *machine, int vblank_state) +static void on_vblank(const device_config *device, int vblank_state) { /* if we're configured to stop on VBLANK, break */ if (vblank_state && break_on_vblank) @@ -296,7 +296,8 @@ void debug_cpu_init(running_machine *machine) } /* add callback for breaking on VBLANK */ - video_screen_register_global_vbl_cb(on_vblank); + if (machine->primary_screen != NULL) + video_screen_register_vbl_cb(machine->primary_screen, on_vblank); add_exit_callback(machine, debug_cpu_exit); } diff --git a/src/emu/mame.c b/src/emu/mame.c index 8887e583f0e..8d4523e207e 100644 --- a/src/emu/mame.c +++ b/src/emu/mame.c @@ -581,7 +581,7 @@ void mame_frame_update(running_machine *machine) { callback_item *cb; - /* call all registered reset callbacks */ + /* call all registered frame callbacks */ for (cb = machine->mame_data->frame_callback_list; cb; cb = cb->next) (*cb->func.frame)(machine); } diff --git a/src/emu/video.c b/src/emu/video.c index 5af7b4d2b1c..112adfc1b8c 100644 --- a/src/emu/video.c +++ b/src/emu/video.c @@ -124,9 +124,6 @@ struct _video_global /* snapshot stuff */ render_target * snap_target; /* screen shapshot target */ bitmap_t * snap_bitmap; /* screen snapshot bitmap */ - - /* global VBLANK callbacks */ - vblank_state_changed_global_func vbl_cbs[MAX_VBL_CB]; /* the array of callbacks */ }; @@ -1187,39 +1184,6 @@ void video_screen_register_vbl_cb(const device_config *screen, vblank_state_chan } -/*------------------------------------------------- - video_screen_register_global_vbl_cb - registers a - VBLANK callback for a specific screen --------------------------------------------------*/ - -void video_screen_register_global_vbl_cb(vblank_state_changed_global_func vbl_cb) -{ - int i, found; - - /* validate arguments */ - assert(vbl_cb != NULL); - - /* check if we already have this callback registered */ - found = FALSE; - for (i = 0; i < MAX_VBL_CB; i++) - { - if (global.vbl_cbs[i] == NULL) - break; - - if (global.vbl_cbs[i] == vbl_cb) - found = TRUE; - } - - /* check that there is room */ - assert(i != MAX_VBL_CB); - - /* if not found, register and increment count */ - if (!found) - global.vbl_cbs[i] = vbl_cb; -} - - - /*************************************************************************** VIDEO SCREEN DEVICE INTERFACE ***************************************************************************/ @@ -1303,17 +1267,9 @@ static TIMER_CALLBACK( vblank_begin_callback ) for (i = 0; internal_state->vbl_cbs[i] != NULL; i++) internal_state->vbl_cbs[i](screen, TRUE); - /* for the first screen */ - if (screen == machine->primary_screen) - { - /* call the global callbacks */ - for (i = 0; global.vbl_cbs[i] != NULL; i++) - global.vbl_cbs[i](machine, TRUE); - - /* do we update the screen now? */ - if (!(machine->config->video_attributes & VIDEO_UPDATE_AFTER_VBLANK)) - video_frame_update(machine, FALSE); - } + /* if this is the primary screen and we need to update now */ + if ((screen == machine->primary_screen) && !(machine->config->video_attributes & VIDEO_UPDATE_AFTER_VBLANK)) + video_frame_update(machine, FALSE); /* reset the timers */ timer_adjust_oneshot(internal_state->vblank_begin_timer, attotime_make(0, internal_state->frame_period), 0); @@ -1337,17 +1293,9 @@ static TIMER_CALLBACK( vblank_end_callback ) for (i = 0; internal_state->vbl_cbs[i] != NULL; i++) internal_state->vbl_cbs[i](screen, FALSE); - /* for the first screen */ - if (screen == machine->primary_screen) - { - /* call the global callbacks */ - for (i = 0; global.vbl_cbs[i] != NULL; i++) - global.vbl_cbs[i](machine, FALSE); - - /* update if we handn't already */ - if (machine->config->video_attributes & VIDEO_UPDATE_AFTER_VBLANK) - video_frame_update(machine, FALSE); - } + /* if this is the primary screen and we need to update now */ + if ((screen == machine->primary_screen) && (machine->config->video_attributes & VIDEO_UPDATE_AFTER_VBLANK)) + video_frame_update(machine, FALSE); /* increment the frame number counter */ internal_state->frame_number++; diff --git a/src/emu/video.h b/src/emu/video.h index 21ab170f2ab..e0473d50f82 100644 --- a/src/emu/video.h +++ b/src/emu/video.h @@ -96,14 +96,12 @@ struct _screen_config /*------------------------------------------------- - vblank_state_changed_func - vblank_state_changed_global_func - + vblank_state_changed_func - callback that is called to notify of a change in the VBLANK state -------------------------------------------------*/ typedef void (*vblank_state_changed_func)(const device_config *device, int vblank_state); -typedef void (*vblank_state_changed_global_func)(running_machine *machine, int vblank_state); @@ -172,9 +170,6 @@ UINT64 video_screen_get_frame_number(const device_config *screen); /* registers a VBLANK callback for the given screen */ void video_screen_register_vbl_cb(const device_config *screen, vblank_state_changed_func vbl_cb); -/* registers a VBLANK callback independent of a screen */ -void video_screen_register_global_vbl_cb(vblank_state_changed_global_func vbl_cb); - /* ----- video screen device interface ----- */ diff --git a/src/emu/watchdog.c b/src/emu/watchdog.c index 7cf41f5ade3..b68d7085098 100644 --- a/src/emu/watchdog.c +++ b/src/emu/watchdog.c @@ -83,18 +83,18 @@ static TIMER_CALLBACK( watchdog_callback ) timers -------------------------------------------------*/ -static void on_vblank(running_machine *machine, int vblank_state) +static void on_vblank(const device_config *screen, int vblank_state) { /* VBLANK starting */ if (vblank_state && watchdog_enabled) { /* check the watchdog */ - if (machine->config->watchdog_vblank_count != 0) + if (screen->machine->config->watchdog_vblank_count != 0) { watchdog_counter = watchdog_counter - 1; if (watchdog_counter == 0) - watchdog_callback(machine, NULL, 0); + watchdog_callback(screen->machine, NULL, 0); } } } @@ -115,8 +115,9 @@ void watchdog_reset(running_machine *machine) { watchdog_counter = machine->config->watchdog_vblank_count; - /* register a global VBLANK callback */ - video_screen_register_global_vbl_cb(on_vblank); + /* register a VBLANK callback for the primary screen */ + if (machine->primary_screen != NULL) + video_screen_register_vbl_cb(machine->primary_screen, on_vblank); } /* timer-based watchdog? */