diff options
Diffstat (limited to 'src/devices/machine/mc6854.h')
-rw-r--r-- | src/devices/machine/mc6854.h | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/src/devices/machine/mc6854.h b/src/devices/machine/mc6854.h index 0f90544336b..c8cd42bf63c 100644 --- a/src/devices/machine/mc6854.h +++ b/src/devices/machine/mc6854.h @@ -23,55 +23,52 @@ 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(); } - - template <typename Object> void set_out_frame_callback(Object &&cb) { m_out_frame_cb = std::forward<Object>(cb); } - void set_out_frame_callback(out_frame_delegate callback) { m_out_frame_cb = callback; } - template <class FunctionClass> void set_out_frame_callback(const char *devname, void (FunctionClass::*callback)(uint8_t *, int), const char *name) - { - set_out_frame_callback(out_frame_delegate(callback, name, devname, static_cast<FunctionClass *>(nullptr))); - } - template <class FunctionClass> void set_out_frame_callback(void (FunctionClass::*callback)(uint8_t *, int), const char *name) - { - set_out_frame_callback(out_frame_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr))); - } + 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 ); + void set_rx(int state); /* high-level, frame-based interface */ int send_frame( uint8_t* data, int length ); /* ret -1 if busy */ /* control lines */ - DECLARE_WRITE_LINE_MEMBER( set_cts ); /* 1 = clear-to-send, 0 = busy */ - DECLARE_WRITE_LINE_MEMBER( set_dcd ); /* 1 = carrier, 0 = no carrier */ + void set_cts(int state); /* 1 = clear-to-send, 0 = busy */ + void set_dcd(int state); /* 1 = carrier, 0 = no carrier */ /* clock */ - DECLARE_WRITE_LINE_MEMBER( rxc_w ); - DECLARE_WRITE_LINE_MEMBER( txc_w ); + void rxc_w(int state); + void txc_w(int state); protected: // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; + 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 */ - /* high-level, frame-based interface */ + /* high-level, frame-based interface */ out_frame_delegate m_out_frame_cb; /* control lines */ @@ -96,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]; @@ -141,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 |