diff options
author | Vas Crabb <vas@vastheman.com> | 2019-01-22 00:44:00 +1100 |
---|---|---|
committer | Vas Crabb <vas@vastheman.com> | 2019-01-22 00:44:00 +1100 |
commit | a27b5ee8b453c8fea11620e6542e00f965b6f2bb (patch) | |
tree | 9c8954a9ad6a4597f59c0572de475f7bf8bb77be | |
parent | a16fb19be9eec4ff3fbf0cec9560dfb59d2b0d0a (diff) |
vsmile_ctrl: hack to survive F3 reset (nw)
-rw-r--r-- | src/devices/bus/vsmile/pad.cpp | 12 | ||||
-rw-r--r-- | src/devices/bus/vsmile/pad.h | 1 | ||||
-rw-r--r-- | src/devices/bus/vsmile/vsmile_ctrl.cpp | 4 |
3 files changed, 16 insertions, 1 deletions
diff --git a/src/devices/bus/vsmile/pad.cpp b/src/devices/bus/vsmile/pad.cpp index c1a0ff74eeb..b973b16df57 100644 --- a/src/devices/bus/vsmile/pad.cpp +++ b/src/devices/bus/vsmile/pad.cpp @@ -65,6 +65,17 @@ void vsmile_pad_device::device_start() save_item(NAME(m_ctrl_probe_history)); } +void vsmile_pad_device::device_reset() +{ + vsmile_ctrl_device_base::device_reset(); + + // HACK: the controller detects an RTS timeout or something, it doesn't have a reset line + m_stale = STALE_ALL; + m_active = false; + std::fill(std::begin(m_ctrl_probe_history), std::end(m_ctrl_probe_history), 0U); + m_idle_timer->adjust(attotime::from_seconds(1)); +} + void vsmile_pad_device::tx_complete() { // update joystick @@ -129,6 +140,7 @@ void vsmile_pad_device::tx_timeout() m_idle_timer->adjust(attotime::from_seconds(1)); m_active = false; m_stale = STALE_ALL; + std::fill(std::begin(m_ctrl_probe_history), std::end(m_ctrl_probe_history), 0U); LOG("left active state\n"); } } diff --git a/src/devices/bus/vsmile/pad.h b/src/devices/bus/vsmile/pad.h index 5e2515c2b58..8bfc92403fa 100644 --- a/src/devices/bus/vsmile/pad.h +++ b/src/devices/bus/vsmile/pad.h @@ -45,6 +45,7 @@ protected: // device_t implementation virtual ioport_constructor device_input_ports() const override; virtual void device_start() override; + virtual void device_reset() override; // vsmile_ctrl_device_base implementation virtual void tx_complete() override; diff --git a/src/devices/bus/vsmile/vsmile_ctrl.cpp b/src/devices/bus/vsmile/vsmile_ctrl.cpp index 3a109484be1..601171be07e 100644 --- a/src/devices/bus/vsmile/vsmile_ctrl.cpp +++ b/src/devices/bus/vsmile/vsmile_ctrl.cpp @@ -193,7 +193,7 @@ bool vsmile_ctrl_device_base::queue_tx(uint8_t data) else { LOG("asserting RTS to transmit byte %02X\n", data); - m_rts_timer->adjust(attotime::from_msec(500)); + m_rts_timer->adjust(attotime::from_msec(100)); } } else @@ -290,6 +290,8 @@ TIMER_CALLBACK_MEMBER(vsmile_ctrl_device_base::rts_timer_expired) m_tx_fifo_head = m_tx_fifo_tail = 0U; m_tx_fifo_empty = true; tx_timeout(); + if (m_tx_fifo_empty) + rts_out(0); } } |