summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/ieee488/ieee488.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/ieee488/ieee488.cpp')
-rw-r--r--src/devices/bus/ieee488/ieee488.cpp21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/devices/bus/ieee488/ieee488.cpp b/src/devices/bus/ieee488/ieee488.cpp
index e224419c408..97f82f199ac 100644
--- a/src/devices/bus/ieee488/ieee488.cpp
+++ b/src/devices/bus/ieee488/ieee488.cpp
@@ -112,6 +112,7 @@ ieee488_device::ieee488_device(const machine_config &mconfig, const char *tag, d
m_write_srq(*this),
m_write_atn(*this),
m_write_ren(*this),
+ m_write_dio(*this),
m_dio(0xff)
{
for (auto & elem : m_line)
@@ -136,6 +137,7 @@ void ieee488_device::device_start()
m_write_srq.resolve_safe();
m_write_atn.resolve_safe();
m_write_ren.resolve_safe();
+ m_write_dio.resolve_safe();
}
@@ -320,11 +322,16 @@ int ieee488_device::get_signal(int signal)
void ieee488_device::set_data(device_t *device, uint8_t data)
{
+ bool changed = false;
+ uint8_t old_state = get_data();
+
if (device == this)
{
if (LOG) logerror("%s IEEE488: '%s' DIO %02x\n", machine().describe_context(), tag(), data);
-
- m_dio = data;
+ if (m_dio != data) {
+ m_dio = data;
+ changed = true;
+ }
}
else
{
@@ -338,12 +345,22 @@ void ieee488_device::set_data(device_t *device, uint8_t data)
{
if (LOG) logerror("%s IEEE488: '%s' DIO %02x\n", machine().describe_context(), device->tag(), data);
entry->m_dio = data;
+ changed = true;
}
}
entry = entry->next();
}
}
+
+ if (!changed) {
+ return;
+ }
+
+ uint8_t new_state = get_data();
+ if (old_state != new_state) {
+ m_write_dio(new_state);
+ }
}