summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/screen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/screen.c')
-rw-r--r--src/emu/screen.c64
1 files changed, 62 insertions, 2 deletions
diff --git a/src/emu/screen.c b/src/emu/screen.c
index 37005cb91ca..8432c6856a4 100644
--- a/src/emu/screen.c
+++ b/src/emu/screen.c
@@ -83,7 +83,9 @@ screen_device_config::screen_device_config(const machine_config &mconfig, const
m_xoffset(0.0f),
m_yoffset(0.0f),
m_xscale(1.0f),
- m_yscale(1.0f)
+ m_yscale(1.0f),
+ m_screen_update(NULL),
+ m_screen_eof(NULL)
{
}
@@ -270,6 +272,34 @@ bool screen_device_config::device_validity_check(core_options &options, const ga
+
+//-------------------------------------------------
+// static_set_screen_update - set the legacy
+// screen update callback in the device
+// configuration
+//-------------------------------------------------
+
+void screen_device_config::static_set_screen_update(device_config *device, screen_update_func callback)
+{
+ assert(device != NULL);
+ downcast<screen_device_config *>(device)->m_screen_update = callback;
+}
+
+
+//-------------------------------------------------
+// static_set_screen_eof - set the legacy
+// screen eof callback in the device
+// configuration
+//-------------------------------------------------
+
+void screen_device_config::static_set_screen_eof(device_config *device, screen_eof_func callback)
+{
+ assert(device != NULL);
+ downcast<screen_device_config *>(device)->m_screen_eof = callback;
+}
+
+
+
//**************************************************************************
// SCREEN DEVICE
//**************************************************************************
@@ -619,7 +649,7 @@ bool screen_device::update_partial(int scanline)
g_profiler.start(PROFILER_VIDEO);
LOG_PARTIAL_UPDATES(("updating %d-%d\n", clip.min_y, clip.max_y));
- flags = machine->driver_data<driver_device>()->video_update(*this, *m_bitmap[m_curbitmap], clip);
+ flags = screen_update(*m_bitmap[m_curbitmap], clip);
m_partial_updates_this_frame++;
g_profiler.stop();
@@ -1071,3 +1101,33 @@ void screen_device::load_effect_overlay(const char *filename)
else
mame_printf_warning("Unable to load effect PNG file '%s'\n", fullname.cstr());
}
+
+//-------------------------------------------------
+// screen_update - default implementation which
+// calls to the legacy screen_update function
+//-------------------------------------------------
+
+bool screen_device::screen_update(bitmap_t &bitmap, const rectangle &cliprect)
+{
+ if (m_config.m_screen_update != NULL) {
+ return (*m_config.m_screen_update)(this, &bitmap, &cliprect);
+ } else {
+ m_machine.driver_data<driver_device>()->screen_update(*this, bitmap, cliprect);
+ }
+ return 0;
+}
+
+//-------------------------------------------------
+// screen_eof - default implementation which
+// calls to the legacy screen_update function
+//-------------------------------------------------
+
+void screen_device::screen_eof()
+{
+ if (m_config.m_screen_eof != NULL) {
+ return (*m_config.m_screen_eof)(this, machine);
+ } else {
+ m_machine.driver_data<driver_device>()->screen_eof();
+ }
+}
+