summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/pc_kbd/pc_kbdc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/pc_kbd/pc_kbdc.cpp')
-rw-r--r--src/devices/bus/pc_kbd/pc_kbdc.cpp77
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);
}