Пример #1
0
void pc9801_kbd_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
	if(id == RX_TIMER)
	{
		int i;

		/* special handling for caps lock / kana lock */
		if((ioport("KEYE")->read() & (1 << 1)) != m_caps_lock_state)
		{
			m_caps_lock_state = ioport("KEYE")->read() & (1 << 1);
			m_keyb_tx = 0x71;
			m_irq_func(ASSERT_LINE);
			return;
		}

		if((ioport("KEYE")->read() & (1 << 2)) != m_kana_lock_state)
		{
			m_kana_lock_state = ioport("KEYE")->read() & (1 << 2);
			m_keyb_tx = 0x72;
			m_irq_func(ASSERT_LINE);
			return;
		}


		/* key up */
		for(i=0;i<0x80;i++)
		{
			if(i==0x71 || i==0x72)
				continue;

			if(m_rx_buf[i] == 2)
			{
				m_keyb_tx = i | 0x80;
				m_irq_func(ASSERT_LINE);
				m_rx_buf[i] = 0;
				return;
			}
		}

		/* key down */
		for(i=0;i<0x80;i++)
		{
			if(i==0x71 || i==0x72)
				continue;

			if(m_rx_buf[i] == 1)
			{
				m_keyb_tx = i;
				m_irq_func(ASSERT_LINE);
				m_rx_buf[i] = 0;
				return;
			}
		}
	}
}
Пример #2
0
inline void via6522_device::set_irq_line(int state)
{
	if (m_irq != state)
	{
		m_irq_func(state);
		m_irq = state;
	}
}
Пример #3
0
void riot6532_device::update_irqstate()
{
	int irq = (m_irqstate & m_irqenable) ? ASSERT_LINE : CLEAR_LINE;

	if (m_irq != irq)
	{
		m_irq_func(irq);
		m_irq = irq;
	}
}
Пример #4
0
void via6522_device::set_int(int data)
{
	m_ifr |= data;
	if (TRACE_VIA)
    {
		logerror("%s:6522VIA chip %s: IFR = %02X\n", machine().describe_context(), tag(), m_ifr);
    }

	if (m_ier & m_ifr)
    {
		m_ifr |= INT_ANY;
		m_irq_func(ASSERT_LINE);
    }
}
Пример #5
0
void ncr5390_device::device_reset()
{
	fifo_pos = 0;
	memset(fifo, 0, sizeof(fifo));

	clock_conv = 2;
	sync_period = 5;
	sync_offset = 0;
	seq = 0;
	config &= 7;
	status &= 0x90;
	istatus = 0;
	irq = false;
	if(!m_irq_func.isnull())
		m_irq_func(irq);
	reset_soft();
}
Пример #6
0
void via6522_device::clear_int(int data)
{
	m_ifr = (m_ifr & ~data) & 0x7f;

	if (TRACE_VIA)
    {
		logerror("%s:6522VIA chip %s: IFR = %02X\n", machine().describe_context(), tag(), m_ifr);
    }

	if (m_ifr & m_ier)
    {
		m_ifr |= INT_ANY;
    }
	else
	{
		m_irq_func(CLEAR_LINE);
	}
}