Beispiel #1
0
inline void econet_device::set_signal(device_t *device, int signal, int state)
{
	bool changed = false;

	if (device == this)
	{
		if (m_line[signal] != state)
		{
			if (LOG) logerror("Econet: '%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("Econet: '%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 CLK:   m_write_clk(state);  break;
		case DATA:  m_write_data(state); break;
		}

		daisy_entry *entry = m_device_list.first();

		while (entry)
		{
			switch (signal)
			{
			case CLK:
				entry->m_interface->econet_clk(state);
				break;

			case DATA:
				entry->m_interface->econet_data(state);
				break;
			}

			entry = entry->next();
		}

		if (LOG) logerror("Econet: CLK %u DATA %u\n", get_signal(CLK), get_signal(DATA));
	}
}
Beispiel #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));
    }
}