diff options
author | 2019-11-16 23:40:43 +0100 | |
---|---|---|
committer | 2019-11-16 23:40:43 +0100 | |
commit | acf9d42070a53b8de70b71224a467f1f47c9c52a (patch) | |
tree | 5659b423ea3cd08889c3d174237da7f345a96bf4 | |
parent | 653fd83da58db754a9f0af8a0997d3b8fa4aad92 (diff) |
ins8250.cpp: fixed regression caused by local BRG used for baudout pin support
-rw-r--r-- | src/devices/machine/ins8250.cpp | 11 |
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() |