diff options
| author | 2018-06-03 10:15:33 -0400 | |
|---|---|---|
| committer | 2018-06-03 13:36:12 -0400 | |
| commit | 7bca70d6fc1348be8d0c28a89fc00a84dc084534 (patch) | |
| tree | cf40a8174f3d20b0b8af3bf0f2dd5a94bec7261c /src/emu/diexec.cpp | |
| parent | 29c415709ecf35d38f6c2f0f6fbbada929431f55 (diff) | |
Back out diexec changes from commit 2cdb153103fa94d13a53dd747985ef56ec723e7a (nw)
Diffstat (limited to 'src/emu/diexec.cpp')
| -rw-r--r-- | src/emu/diexec.cpp | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/emu/diexec.cpp b/src/emu/diexec.cpp index c7f4752bd6d..f77f58fa83f 100644 --- a/src/emu/diexec.cpp +++ b/src/emu/diexec.cpp @@ -46,7 +46,7 @@ device_execute_interface::device_execute_interface(const machine_config &mconfig : device_interface(device, "execute") , m_scheduler(nullptr) , m_disabled(false) - , m_vblank_interrupt_screen(*this, finder_base::DUMMY_TAG) + , m_vblank_interrupt_screen(nullptr) , m_timed_interrupt_period(attotime::zero) , m_nextexec(nullptr) , m_timedint_timer(nullptr) @@ -345,12 +345,13 @@ void device_execute_interface::execute_set_input(int linenum, int state) void device_execute_interface::interface_validity_check(validity_checker &valid) const { // validate the interrupts - if (!m_vblank_interrupt_screen) + if (!m_vblank_interrupt.isnull()) { - if (m_vblank_interrupt_screen.finder_tag() != finder_base::DUMMY_TAG) - osd_printf_error("VBLANK interrupt references non-existent screen tag %s\n", m_vblank_interrupt_screen.finder_tag()); - else if (!m_vblank_interrupt.isnull()) - osd_printf_error("VBLANK interrupt specified, but no screen configured\n"); + screen_device_iterator iter(device().mconfig().root_device()); + if (iter.first() == nullptr) + osd_printf_error("VBLANK interrupt specified, but the driver is screenless\n"); + else if (m_vblank_interrupt_screen != nullptr && device().siblingdevice(m_vblank_interrupt_screen) == nullptr) + osd_printf_error("VBLANK interrupt references a non-existant screen tag '%s'\n", m_vblank_interrupt_screen); } if (!m_timed_interrupt.isnull() && m_timed_interrupt_period == attotime::zero) @@ -442,8 +443,14 @@ void device_execute_interface::interface_post_reset() elem.reset(); // reconfingure VBLANK interrupts - if (m_vblank_interrupt_screen) - m_vblank_interrupt_screen->register_vblank_callback(vblank_state_delegate(&device_execute_interface::on_vblank, this)); + if (m_vblank_interrupt_screen != nullptr) + { + // get the screen that will trigger the VBLANK + screen_device *screen = device().siblingdevice<screen_device>(m_vblank_interrupt_screen); + + assert(screen != nullptr); + screen->register_vblank_callback(vblank_state_delegate(&device_execute_interface::on_vblank, this)); + } // reconfigure periodic interrupts if (m_timed_interrupt_period != attotime::zero) |
