From c81ac13d5561c242dc747dd242fbe67b106febe3 Mon Sep 17 00:00:00 2001 From: Joakim Larsson Edstrom Date: Thu, 17 Oct 2019 15:11:25 +0200 Subject: [PATCH] eis_twib: Added RxC and TxC bitclocks --- src/devices/bus/isa/eis_twib.cpp | 19 +++++++++++++++++++ src/devices/bus/isa/eis_twib.h | 6 ++++++ 2 files changed, 25 insertions(+) diff --git a/src/devices/bus/isa/eis_twib.cpp b/src/devices/bus/isa/eis_twib.cpp index b82c77aa7ed..578e7d65be8 100644 --- a/src/devices/bus/isa/eis_twib.cpp +++ b/src/devices/bus/isa/eis_twib.cpp @@ -91,6 +91,13 @@ WRITE8_MEMBER( isa8_eistwib_device::twib_w ) m_uart8274->cd_ba_w(offset, data); } +TIMER_DEVICE_CALLBACK_MEMBER(isa8_eistwib_device::tick_bitclock) +{ + m_uart8274->txca_w(m_bitclock); + m_uart8274->rxca_w(m_bitclock); + m_bitclock = !m_bitclock; +} + //---------------------------------------------------------- // UI I/O @@ -192,6 +199,8 @@ ioport_constructor isa8_eistwib_device::device_input_ports() const void isa8_eistwib_device::device_add_mconfig(machine_config &config) { I8274_NEW(config, m_uart8274, (XTAL(14'318'181)/ 3) / 2); // Half the 4,77 MHz ISA bus CLK signal + //m_uart8274->out_rtsa_callback().set([this] (int state) { m_rts = state; }); + //m_uart8274->out_txda_callback().set([this] (int state) { printf("%d ", state); }); m_uart8274->out_int_callback().set([this] (int state) { // Jumper field W1 decides what IRQs to pull if (m_isairq->read() & 0x01) { LOGIRQ("TWIB IRQ2: %d\n", state); m_isa->irq2_w(state); } @@ -200,12 +209,16 @@ void isa8_eistwib_device::device_add_mconfig(machine_config &config) if (m_isairq->read() & 0x08) { LOGIRQ("TWIB IRQ5: %d\n", state); m_isa->irq5_w(state); } if (m_isairq->read() & 0x10) { LOGIRQ("TWIB IRQ6: %d\n", state); m_isa->irq6_w(state); } }); + + TIMER(config, "bitclock").configure_periodic(FUNC(isa8_eistwib_device::tick_bitclock), attotime::from_hz(300000)); } isa8_eistwib_device::isa8_eistwib_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, ISA8_EIS_TWIB, tag, owner, clock) , device_isa8_card_interface(mconfig, *this) , m_uart8274(*this, "terminal") + , m_bitclock(false) + , m_rts(false) , m_sw1(*this, "SW1") , m_isairq(*this, "W1") , m_installed(false) @@ -219,6 +232,9 @@ void isa8_eistwib_device::device_start() { set_isa_device(); m_installed = false; + m_bitclock = false; + save_item(NAME(m_installed)); + save_item(NAME(m_bitclock)); } void isa8_eistwib_device::device_reset() @@ -233,4 +249,7 @@ void isa8_eistwib_device::device_reset() write8_delegate(FUNC( isa8_eistwib_device::twib_w ), this)); m_installed = true; } + // CD and CTS input are tied to ground + m_uart8274->ctsa_w(0); + m_uart8274->dcda_w(0); } diff --git a/src/devices/bus/isa/eis_twib.h b/src/devices/bus/isa/eis_twib.h index 72d209eaf61..c633a128e25 100644 --- a/src/devices/bus/isa/eis_twib.h +++ b/src/devices/bus/isa/eis_twib.h @@ -7,6 +7,7 @@ #include "isa.h" #include "machine/z80sio.h" +#include "machine/timer.h" class isa8_eistwib_device : public device_t, @@ -31,6 +32,11 @@ protected: virtual void device_add_mconfig(machine_config &config) override; virtual ioport_constructor device_input_ports() const override; + // Timers + TIMER_DEVICE_CALLBACK_MEMBER(tick_bitclock); + bool m_bitclock; + bool m_rts; + // helpers required_ioport m_sw1; required_ioport m_isairq;