summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine
diff options
context:
space:
mode:
author Joakim Larsson Edstrom <Joakim.Edstrom@edstromious.se>2019-11-16 23:40:43 +0100
committer Joakim Larsson Edstrom <Joakim.Edstrom@edstromious.se>2019-11-16 23:40:43 +0100
commitacf9d42070a53b8de70b71224a467f1f47c9c52a (patch)
tree5659b423ea3cd08889c3d174237da7f345a96bf4 /src/devices/machine
parent653fd83da58db754a9f0af8a0997d3b8fa4aad92 (diff)
ins8250.cpp: fixed regression caused by local BRG used for baudout pin support
Diffstat (limited to 'src/devices/machine')
-rw-r--r--src/devices/machine/ins8250.cpp11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/devices/machine/ins8250.cpp b/src/devices/machine/ins8250.cpp
index 25c80d0147d..e2eabfa3f01 100644
--- a/src/devices/machine/ins8250.cpp
+++ b/src/devices/machine/ins8250.cpp
@@ -252,9 +252,11 @@ READ_LINE_MEMBER(ins8250_uart_device::intrpt_r)
TIMER_CALLBACK_MEMBER(ins8250_uart_device::brg_clock)
{
+ bool state = m_brg_clock;
if (!is_transmit_register_empty())
{
- tx_clock_w(m_brg_clock);
+ device_serial_interface::tx_clock_w(m_brg_clock);
+ m_brg_clock = !state;
}
if (is_receive_register_synchronized())
{
@@ -266,8 +268,8 @@ TIMER_CALLBACK_MEMBER(ins8250_uart_device::brg_clock)
{
m_out_baudout_cb(m_brg_clock);
}
+ m_brg_clock = !state;
}
- m_brg_clock = !m_brg_clock;
m_brg->adjust(((clock() && (m_regs.dl) ? (attotime::from_hz(clock()) * m_regs.dl * 16) : attotime::never) / 2));
}
@@ -275,7 +277,6 @@ TIMER_CALLBACK_MEMBER(ins8250_uart_device::brg_clock)
void ins8250_uart_device::update_baud_rate()
{
LOG("%.1f baud selected (divisor = %d)\n", double(clock()) / (m_regs.dl * 16), m_regs.dl);
-
m_brg->adjust(((clock() && (m_regs.dl) ? (attotime::from_hz(clock()) * m_regs.dl * 16) : attotime::never) / 2));
}
@@ -671,7 +672,7 @@ void ins8250_uart_device::device_start()
m_out_int_cb.resolve_safe();
m_out_out1_cb.resolve_safe();
m_out_out2_cb.resolve_safe();
- m_out_baudout_cb.resolve_safe();
+ m_out_baudout_cb.resolve();
set_tra_rate(0);
set_rcv_rate(0);
m_brg = device().machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ins8250_uart_device::brg_clock), this));
@@ -716,7 +717,7 @@ void ins8250_uart_device::device_reset()
m_out_dtr_cb(1);
m_out_out1_cb(1);
m_out_out2_cb(1);
- m_out_baudout_cb(1);
+ if (!m_out_baudout_cb.isnull()) m_out_baudout_cb(1);
}
void ns16550_device::device_start()