diff options
Diffstat (limited to 'src/devices/bus/pc_kbd/pc_kbdc.cpp')
-rw-r--r-- | src/devices/bus/pc_kbd/pc_kbdc.cpp | 77 |
1 files changed, 37 insertions, 40 deletions
diff --git a/src/devices/bus/pc_kbd/pc_kbdc.cpp b/src/devices/bus/pc_kbd/pc_kbdc.cpp index 9bd50c1ea5f..6d28227bca2 100644 --- a/src/devices/bus/pc_kbd/pc_kbdc.cpp +++ b/src/devices/bus/pc_kbd/pc_kbdc.cpp @@ -47,9 +47,7 @@ void pc_kbdc_slot_device::device_start() device_pc_kbd_interface *pc_kbd = dynamic_cast<device_pc_kbd_interface *>(get_card_device()); if (pc_kbd) - { pc_kbd->set_pc_kbdc(m_kbdc_device); - } } @@ -71,11 +69,11 @@ pc_kbdc_device::pc_kbdc_device(const machine_config &mconfig, const char *tag, d m_data_state(-1), m_mb_clock_state(0), m_mb_data_state(0), m_kb_clock_state(1), m_kb_data_state(1), - m_keyboard( nullptr ) + m_keyboard(nullptr) { } -void pc_kbdc_device::set_keyboard( device_pc_kbd_interface *keyboard ) +void pc_kbdc_device::set_keyboard(device_pc_kbd_interface *keyboard) { m_keyboard = keyboard; } @@ -84,19 +82,22 @@ void pc_kbdc_device::set_keyboard( device_pc_kbd_interface *keyboard ) //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- -void pc_kbdc_device::device_start() +void pc_kbdc_device::device_resolve_objects() { - // resolve callbacks m_out_clock_cb.resolve_safe(); m_out_data_cb.resolve_safe(); } - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- -void pc_kbdc_device::device_reset() +void pc_kbdc_device::device_start() { + save_item(NAME(m_clock_state)); + save_item(NAME(m_data_state)); + + save_item(NAME(m_mb_clock_state)); + save_item(NAME(m_mb_data_state)); + save_item(NAME(m_kb_clock_state)); + save_item(NAME(m_kb_data_state)); + m_clock_state = -1; /* initial state of calculated clock line */ m_data_state = -1; /* initial state of calculated data line */ @@ -112,19 +113,14 @@ void pc_kbdc_device::update_clock_state() { int new_clock_state = m_mb_clock_state & m_kb_clock_state; - if ( new_clock_state != m_clock_state ) + if (new_clock_state != m_clock_state) { // We first set our state to prevent possible endless loops m_clock_state = new_clock_state; - // Send state to keyboard interface logic on mainboard - m_out_clock_cb( m_clock_state ); - // Send state to keyboard - if ( m_keyboard ) - { + if (m_keyboard) m_keyboard->clock_write( m_clock_state ); - } } } @@ -133,48 +129,51 @@ void pc_kbdc_device::update_data_state() { int new_data_state = m_mb_data_state & m_kb_data_state; - if ( new_data_state != m_data_state ) + if (new_data_state != m_data_state) { // We first set our state to prevent possible endless loops m_data_state = new_data_state; - // Send state to keyboard interface logic on mainboard - m_out_data_cb( m_data_state ); - // Send state to keyboard - if ( m_keyboard ) - { - m_keyboard->data_write( m_data_state ); - } + if (m_keyboard) + m_keyboard->data_write(m_data_state); } } -WRITE_LINE_MEMBER( pc_kbdc_device::clock_write_from_mb ) +WRITE_LINE_MEMBER(pc_kbdc_device::clock_write_from_mb) { m_mb_clock_state = state; update_clock_state(); } -WRITE_LINE_MEMBER( pc_kbdc_device::data_write_from_mb ) +WRITE_LINE_MEMBER(pc_kbdc_device::data_write_from_mb) { m_mb_data_state = state; update_data_state(); } -WRITE_LINE_MEMBER( pc_kbdc_device::clock_write_from_kb ) +WRITE_LINE_MEMBER(pc_kbdc_device::clock_write_from_kb) { - m_kb_clock_state = state; - update_clock_state(); + state = state ? 1 : 0; + if (state != m_kb_clock_state) + { + m_out_clock_cb(m_kb_clock_state = state); + update_clock_state(); + } } -WRITE_LINE_MEMBER( pc_kbdc_device::data_write_from_kb ) +WRITE_LINE_MEMBER(pc_kbdc_device::data_write_from_kb) { - m_kb_data_state = state; - update_data_state(); + state = state ? 1 : 0; + if (state != m_kb_data_state) + { + m_out_data_cb(m_kb_data_state = state); + update_data_state(); + } } @@ -203,20 +202,18 @@ device_pc_kbd_interface::~device_pc_kbd_interface() } -WRITE_LINE_MEMBER( device_pc_kbd_interface::clock_write ) +WRITE_LINE_MEMBER(device_pc_kbd_interface::clock_write) { } -WRITE_LINE_MEMBER( device_pc_kbd_interface::data_write ) +WRITE_LINE_MEMBER(device_pc_kbd_interface::data_write) { } void device_pc_kbd_interface::set_pc_kbdc_device() { - if ( m_pc_kbdc ) - { - m_pc_kbdc->set_keyboard( this ); - } + if (m_pc_kbdc) + m_pc_kbdc->set_keyboard(this); } |