From 85aa483c376e3fe7ceaf1d64cdb6c170d222d7a7 Mon Sep 17 00:00:00 2001 From: fulivi Date: Tue, 22 Nov 2016 09:52:24 +0100 Subject: [PATCH] ieee488: a few optimizations to "state-changed" callbacks --- src/devices/bus/ieee488/ieee488.cpp | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/devices/bus/ieee488/ieee488.cpp b/src/devices/bus/ieee488/ieee488.cpp index 1b2f71c3f6a..385f3a8cd28 100644 --- a/src/devices/bus/ieee488/ieee488.cpp +++ b/src/devices/bus/ieee488/ieee488.cpp @@ -188,6 +188,7 @@ ieee488_device::daisy_entry::daisy_entry(device_t *device) void ieee488_device::set_signal(device_t *device, int signal, int state) { bool changed = false; + int old_state = get_signal(signal); if (device == this) { @@ -218,8 +219,13 @@ void ieee488_device::set_signal(device_t *device, int signal, int state) } } - if (changed) - { + if (!changed) { + return; + } + + state = get_signal(signal); + + if (old_state != state) { switch (signal) { case EOI: m_write_eoi(state); break; @@ -289,21 +295,18 @@ int ieee488_device::get_signal(int signal) { int state = m_line[signal]; - if (state) - { - daisy_entry *entry = m_device_list.first(); + daisy_entry *entry = m_device_list.first(); - while (entry) + while (state && entry) { if (!entry->m_line[signal]) - { - state = 0; - break; - } + { + state = 0; + break; + } entry = entry->next(); } - } return state; } @@ -352,7 +355,7 @@ uint8_t ieee488_device::get_data() daisy_entry *entry = m_device_list.first(); - while (entry) + while (data && entry) { data &= entry->m_dio;