summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/mc6854.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/mc6854.h')
-rw-r--r--src/devices/machine/mc6854.h17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/devices/machine/mc6854.h b/src/devices/machine/mc6854.h
index defd3aa76c1..2e2fe6fa663 100644
--- a/src/devices/machine/mc6854.h
+++ b/src/devices/machine/mc6854.h
@@ -23,16 +23,19 @@ public:
mc6854_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
- auto out_irq_cb() { return m_out_irq_cb.bind(); }
- auto out_txd_cb() { return m_out_txd_cb.bind(); }
- auto out_rts_cb() { return m_out_rts_cb.bind(); }
- auto out_dtr_cb() { return m_out_dtr_cb.bind(); }
+ auto out_irq_cb() { return m_out_irq_cb.bind(); }
+ auto out_rdsr_cb() { return m_out_rdsr_cb.bind(); }
+ auto out_tdsr_cb() { return m_out_tdsr_cb.bind(); }
+ auto out_txd_cb() { return m_out_txd_cb.bind(); }
+ auto out_rts_cb() { return m_out_rts_cb.bind(); }
+ auto out_dtr_cb() { return m_out_dtr_cb.bind(); }
template <typename... T> void set_out_frame_callback(T &&... args) { m_out_frame_cb.set(std::forward<T>(args)...); }
/* interface to CPU via address/data bus*/
uint8_t read(offs_t offset);
void write(offs_t offset, uint8_t data);
+ uint8_t dma_r(){ return read(2); }
/* low-level, bit-based interface */
DECLARE_WRITE_LINE_MEMBER( set_rx );
@@ -52,12 +55,15 @@ protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ bool receive_allowed() const;
private:
static constexpr unsigned FIFO_SIZE = 3; // hardcoded size of the 6854 FIFO (this is a hardware limit)
// internal state
devcb_write_line m_out_irq_cb; /* interrupt request */
+ devcb_write_line m_out_rdsr_cb; /* Rx fifo DMA request */
+ devcb_write_line m_out_tdsr_cb; /* Tx fifo DMA request */
/* low-level, bit-based interface */
devcb_write_line m_out_txd_cb; /* transmit bit */
@@ -87,6 +93,8 @@ private:
uint8_t m_rones; /* count '1 bits */
uint8_t m_rsize; /* bits in the shift register */
uint16_t m_rfifo[FIFO_SIZE]; /* X x 8-bit FIFO + full & addr marker bits */
+ bool m_rxd;
+ bool m_rxc;
/* frame-based interface*/
uint8_t m_frame[MAX_FRAME_LENGTH];
@@ -132,6 +140,7 @@ DECLARE_DEVICE_TYPE(MC6854, mc6854_device)
The frame-based interface is higher-level and faster.
It passes bytes directly from one end to the other without bothering with
the actual bit-encoding, synchronization, and CRC.
+
Once completed, a frame is sent through out_frame. Aborted frames are not
transmitted at all. No start flag, stop flag, or crc bits are transmitted.
send_frame makes a frame available to the CPU through the 6854 (it may