summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Zsolt Vasvari <zsoltvas@mamedev.org>2008-03-12 11:06:29 +0000
committer Zsolt Vasvari <zsoltvas@mamedev.org>2008-03-12 11:06:29 +0000
commit4eecf5199dcabde18d407b884eae0f3211ed76fb (patch)
tree7f28e7b8e5fb6b7cfef8085483f662855c743e3f
parent19b68f421f4e155d2c4a4e02433ca0adac9b6e91 (diff)
Removes "global" VBLANK callback hack
-rw-r--r--src/emu/debug/debugcpu.c5
-rw-r--r--src/emu/mame.c2
-rw-r--r--src/emu/video.c64
-rw-r--r--src/emu/video.h7
-rw-r--r--src/emu/watchdog.c11
5 files changed, 17 insertions, 72 deletions
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? */