summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
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
commita27b5ee8b453c8fea11620e6542e00f965b6f2bb (patch)
tree9c8954a9ad6a4597f59c0572de475f7bf8bb77be
parenta16fb19be9eec4ff3fbf0cec9560dfb59d2b0d0a (diff)
vsmile_ctrl: hack to survive F3 reset (nw)
-rw-r--r--src/devices/bus/vsmile/pad.cpp12
-rw-r--r--src/devices/bus/vsmile/pad.h1
-rw-r--r--src/devices/bus/vsmile/vsmile_ctrl.cpp4
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);
}
}