void cdp1871_device::detect_keypress() { UINT8 data = 0; data = m_in_d_func[m_drive](0); if (data == (1 << m_sense)) { if (!m_inhibit) { m_shift = m_in_shift_func(); m_control = m_in_control_func(); m_inhibit = true; m_next_da = ASSERT_LINE; } else { m_next_rpt = ASSERT_LINE; } } else { m_inhibit = false; m_next_rpt = CLEAR_LINE; } }
void ay3600_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { int ako = 0; for (int x = 0; x < 9; x++) { UINT16 data = m_in_x_func[x](0,0xffff); for (int y = 0; y < 10; y++) { if (BIT(data, y)) { int b = (x * 10) + y; ako = 1; if (b > 63) { b -= 64; b = 0x100 | b; } b |= (m_in_shift_func() << 6); b |= (m_in_control_func() << 7); if (m_b != b) { m_b = b; m_out_data_ready_func(1); return; } } } } if (!ako) { m_b = -1; } if (ako != m_ako) { m_out_ako_func(ako); m_ako = ako; } }