void ieee488_device::set_signal(device_t *device, int signal, int state) { bool changed = false; if (device == this) { if (m_line[signal] != state) { if (LOG) logerror("%s IEEE488: '%s' %s %u\n", machine().describe_context(), tag(), SIGNAL_NAME[signal], state); m_line[signal] = state; changed = true; } } else { daisy_entry *entry = m_device_list.first(); while (entry) { if (!strcmp(entry->m_device->tag(), device->tag())) { if (entry->m_line[signal] != state) { if (LOG) logerror("%s IEEE488: '%s' %s %u\n", machine().describe_context(), device->tag(), SIGNAL_NAME[signal], state); entry->m_line[signal] = state; changed = true; } } entry = entry->next(); } } if (changed) { switch (signal) { case EOI: m_write_eoi(state); break; case DAV: m_write_dav(state); break; case NRFD: m_write_nrfd(state); break; case NDAC: m_write_ndac(state); break; case IFC: m_write_ifc(state); break; case SRQ: m_write_srq(state); break; case ATN: m_write_atn(state); break; case REN: m_write_ren(state); break; } daisy_entry *entry = m_device_list.first(); while (entry) { switch (signal) { case EOI: entry->m_interface->ieee488_eoi(state); break; case DAV: entry->m_interface->ieee488_dav(state); break; case NRFD: entry->m_interface->ieee488_nrfd(state); break; case NDAC: entry->m_interface->ieee488_ndac(state); break; case IFC: entry->m_interface->ieee488_ifc(state); break; case SRQ: entry->m_interface->ieee488_srq(state); break; case ATN: entry->m_interface->ieee488_atn(state); break; case REN: entry->m_interface->ieee488_ren(state); break; } entry = entry->next(); } if (LOG) logerror("IEEE488: EOI %u DAV %u NRFD %u NDAC %u IFC %u SRQ %u ATN %u REN %u DIO %02x\n", get_signal(EOI), get_signal(DAV), get_signal(NRFD), get_signal(NDAC), get_signal(IFC), get_signal(SRQ), get_signal(ATN), get_signal(REN), get_data()); } }
void cbm_iec_device::set_signal(device_t *device, int signal, int state) { bool changed = false; if (device == this) { if (m_line[signal] != state) { if (LOG) logerror("CBM IEC: '%s' %s %u\n", tag(), SIGNAL_NAME[signal], state); m_line[signal] = state; changed = true; } } else { daisy_entry *entry = m_device_list.first(); while (entry) { if (!strcmp(entry->m_device->tag(), device->tag())) { if (entry->m_line[signal] != state) { if (LOG) logerror("CBM IEC: '%s' %s %u\n", device->tag(), SIGNAL_NAME[signal], state); entry->m_line[signal] = state; changed = true; } } entry = entry->next(); } } if (changed) { switch (signal) { case SRQ: m_write_srq(state); break; case ATN: m_write_atn(state); break; case CLK: m_write_clk(state); break; case DATA: m_write_data(state); break; case RESET: m_write_reset(state); break; } daisy_entry *entry = m_device_list.first(); while (entry) { switch (signal) { case SRQ: entry->m_interface->cbm_iec_srq(state); break; case ATN: entry->m_interface->cbm_iec_atn(state); break; case CLK: entry->m_interface->cbm_iec_clk(state); break; case DATA: entry->m_interface->cbm_iec_data(state); break; case RESET: entry->m_interface->cbm_iec_reset(state); break; } entry = entry->next(); } if (LOG) logerror("CBM IEC: SRQ %u ATN %u CLK %u DATA %u RESET %u\n", get_signal(SRQ), get_signal(ATN), get_signal(CLK), get_signal(DATA), get_signal(RESET)); } }