Ejemplo n.º 1
0
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());
	}
}
Ejemplo n.º 2
0
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));
    }
}