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; } } } }
inline void via6522_device::set_irq_line(int state) { if (m_irq != state) { m_irq_func(state); m_irq = state; } }
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; } }
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); } }
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(); }
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); } }