summaryrefslogtreecommitdiffstats
path: root/src/mame/machine/kc_keyb.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/machine/kc_keyb.cpp')
-rw-r--r--src/mame/machine/kc_keyb.cpp78
1 files changed, 36 insertions, 42 deletions
diff --git a/src/mame/machine/kc_keyb.cpp b/src/mame/machine/kc_keyb.cpp
index e2de504f367..2c8190e7d4e 100644
--- a/src/mame/machine/kc_keyb.cpp
+++ b/src/mame/machine/kc_keyb.cpp
@@ -458,8 +458,7 @@ void kc_keyboard_device::device_start()
// resolve callbacks
m_write_out.resolve_safe();
- m_timer_transmit_pulse = timer_alloc(TIMER_TRANSMIT_PULSE);
-
+ m_timer_transmit_pulse = timer_alloc(FUNC(kc_keyboard_device::transmit_pulse), this);
m_timer_transmit_pulse->adjust(attotime::from_usec(1024), 0, attotime::from_usec(1024));
}
@@ -488,61 +487,56 @@ ioport_constructor kc_keyboard_device::device_input_ports() const
}
//-------------------------------------------------
-// device_timer - handler timer events
+// transmit_pulse - update transmit state
//-------------------------------------------------
-void kc_keyboard_device::device_timer(emu_timer &timer, device_timer_id id, int param)
+TIMER_CALLBACK_MEMBER(kc_keyboard_device::transmit_pulse)
{
- switch(id)
+ if (m_transmit_buffer.pulse_sent < m_transmit_buffer.pulse_count)
{
- case TIMER_TRANSMIT_PULSE:
- if (m_transmit_buffer.pulse_sent < m_transmit_buffer.pulse_count)
- {
- // byte containing pulse state
- int pulse_byte_count = m_transmit_buffer.pulse_sent>>3;
- // bit within byte containing pulse state
- int pulse_bit_count = 7 - (m_transmit_buffer.pulse_sent & 0x07);
+ // byte containing pulse state
+ int pulse_byte_count = m_transmit_buffer.pulse_sent>>3;
+ // bit within byte containing pulse state
+ int pulse_bit_count = 7 - (m_transmit_buffer.pulse_sent & 0x07);
- // get current pulse state
- int pulse_state = (m_transmit_buffer.data[pulse_byte_count]>>pulse_bit_count) & 0x01;
+ // get current pulse state
+ int pulse_state = (m_transmit_buffer.data[pulse_byte_count]>>pulse_bit_count) & 0x01;
- LOG("KC keyboard sending pulse: %02x\n", pulse_state);
+ LOG("KC keyboard sending pulse: %02x\n", pulse_state);
- // send pulse
- m_write_out(pulse_state ? ASSERT_LINE : CLEAR_LINE);
+ // send pulse
+ m_write_out(pulse_state ? ASSERT_LINE : CLEAR_LINE);
- // update counts
- m_transmit_buffer.pulse_sent++;
- }
- else
- {
- // if there is nothing to send, rescan the keyboard
- static const char *const keynames[] = { "KEY0", "KEY1", "KEY2", "KEY3", "KEY4", "KEY5", "KEY6", "KEY7" };
+ // update counts
+ m_transmit_buffer.pulse_sent++;
+ }
+ else
+ {
+ // if there is nothing to send, rescan the keyboard
+ static const char *const keynames[] = { "KEY0", "KEY1", "KEY2", "KEY3", "KEY4", "KEY5", "KEY6", "KEY7" };
- m_transmit_buffer.pulse_sent = 0;
- m_transmit_buffer.pulse_count = 0;
+ m_transmit_buffer.pulse_sent = 0;
+ m_transmit_buffer.pulse_count = 0;
- // scan all lines (excluding shift)
- for (int i=0; i<8; i++)
- {
- uint8_t keyboard_line_data = ioport(keynames[i])->read();
+ // scan all lines (excluding shift)
+ for (int i=0; i<8; i++)
+ {
+ uint8_t keyboard_line_data = ioport(keynames[i])->read();
- // scan through each bit
- for (int b=0; b<8; b++)
+ // scan through each bit
+ for (int b=0; b<8; b++)
+ {
+ // is pressed?
+ if ((keyboard_line_data & (1<<b)) != 0)
{
- // is pressed?
- if ((keyboard_line_data & (1<<b)) != 0)
- {
- // generate fake code
- uint8_t code = (i<<3) | b;
- LOG("Code: %02x\n",code);
-
- transmit_scancode(code);
- }
+ // generate fake code
+ uint8_t code = (i<<3) | b;
+ LOG("Code: %02x\n",code);
+
+ transmit_scancode(code);
}
}
}
- break;
}
}