diff options
Diffstat (limited to 'src/devices/machine/mc6854.h')
-rw-r--r-- | src/devices/machine/mc6854.h | 17 |
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 |