diff options
Diffstat (limited to 'src/devices/machine/mc6854.h')
-rw-r--r-- | src/devices/machine/mc6854.h | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/src/devices/machine/mc6854.h b/src/devices/machine/mc6854.h index 9e3e9d64f85..93caf9a5a0a 100644 --- a/src/devices/machine/mc6854.h +++ b/src/devices/machine/mc6854.h @@ -8,17 +8,12 @@ **********************************************************************/ -#ifndef MC6854_H -#define MC6854_H +#ifndef MAME_MACHINE_MC6854_H +#define MAME_MACHINE_MC6854_H +#pragma once -#define MAX_FRAME_LENGTH 65536 -/* arbitrary value, you may need to enlarge it if you get truncated frames */ -#define MC6854_FIFO_SIZE 3 -/* hardcoded size of the 6854 FIFO (this is a hardware limit) */ - -typedef device_delegate<void (uint8_t *data, int length)> mc6854_out_frame_delegate; #define MC6854_OUT_FRAME_CB(name) void name(uint8_t * data, int length) @@ -29,7 +24,7 @@ typedef device_delegate<void (uint8_t *data, int length)> mc6854_out_frame_deleg devcb = &mc6854_device::set_out_txd_callback(*device, DEVCB_##_devcb); #define MCFG_MC6854_OUT_FRAME_CB(_class, _method) \ - mc6854_device::set_out_frame_callback(*device, mc6854_out_frame_delegate(&_class::_method, #_class "::" #_method, downcast<_class *>(owner))); + mc6854_device::set_out_frame_callback(*device, mc6854_device::out_frame_delegate(&_class::_method, #_class "::" #_method, downcast<_class *>(owner))); #define MCFG_MC6854_OUT_RTS_CB(_devcb) \ devcb = &mc6854_device::set_out_rts_callback(*device, DEVCB_##_devcb); @@ -41,14 +36,17 @@ typedef device_delegate<void (uint8_t *data, int length)> mc6854_out_frame_deleg class mc6854_device : public device_t { public: + static constexpr unsigned MAX_FRAME_LENGTH = 65536; // arbitrary value, you may need to enlarge it if you get truncated frames + + typedef device_delegate<void (uint8_t *data, int length)> out_frame_delegate; + mc6854_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - ~mc6854_device() {} - template<class _Object> static devcb_base &set_out_irq_callback(device_t &device, _Object object) { return downcast<mc6854_device &>(device).m_out_irq_cb.set_callback(object); } - template<class _Object> static devcb_base &set_out_txd_callback(device_t &device, _Object object) { return downcast<mc6854_device &>(device).m_out_txd_cb.set_callback(object); } - static void set_out_frame_callback(device_t &device, mc6854_out_frame_delegate callback) { downcast<mc6854_device &>(device).m_out_frame_cb = callback; } - template<class _Object> static devcb_base &set_out_rts_callback(device_t &device, _Object object) { return downcast<mc6854_device &>(device).m_out_rts_cb.set_callback(object); } - template<class _Object> static devcb_base &set_out_dtr_callback(device_t &device, _Object object) { return downcast<mc6854_device &>(device).m_out_dtr_cb.set_callback(object); } + template <class Object> static devcb_base &set_out_irq_callback(device_t &device, Object &&cb) { return downcast<mc6854_device &>(device).m_out_irq_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_out_txd_callback(device_t &device, Object &&cb) { return downcast<mc6854_device &>(device).m_out_txd_cb.set_callback(std::forward<Object>(cb)); } + static void set_out_frame_callback(device_t &device, out_frame_delegate &&callback) { downcast<mc6854_device &>(device).m_out_frame_cb = std::move(callback); } + template <class Object> static devcb_base &set_out_rts_callback(device_t &device, Object &&cb) { return downcast<mc6854_device &>(device).m_out_rts_cb.set_callback(std::forward<Object>(cb)); } + template <class Object> static devcb_base &set_out_dtr_callback(device_t &device, Object &&cb) { return downcast<mc6854_device &>(device).m_out_dtr_cb.set_callback(std::forward<Object>(cb)); } /* interface to CPU via address/data bus*/ DECLARE_READ8_MEMBER( read ); @@ -74,6 +72,8 @@ protected: virtual void device_reset() override; 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 */ @@ -81,7 +81,7 @@ private: devcb_write_line m_out_txd_cb; /* transmit bit */ /* high-level, frame-based interface */ - mc6854_out_frame_delegate m_out_frame_cb; + out_frame_delegate m_out_frame_cb; /* control lines */ devcb_write_line m_out_rts_cb; /* 1 = transmitting, 0 = idle */ @@ -95,7 +95,7 @@ private: /* transmit state */ uint8_t m_tstate; - uint16_t m_tfifo[MC6854_FIFO_SIZE]; /* X x 8-bit FIFO + full & last marker bits */ + uint16_t m_tfifo[FIFO_SIZE]; /* X x 8-bit FIFO + full & last marker bits */ uint8_t m_tones; /* counter for zero-insertion */ emu_timer *m_ttimer; /* when to ask for more data */ @@ -104,7 +104,7 @@ private: uint32_t m_rreg; /* shift register */ uint8_t m_rones; /* count '1 bits */ uint8_t m_rsize; /* bits in the shift register */ - uint16_t m_rfifo[MC6854_FIFO_SIZE]; /* X x 8-bit FIFO + full & addr marker bits */ + uint16_t m_rfifo[FIFO_SIZE]; /* X x 8-bit FIFO + full & addr marker bits */ /* frame-based interface*/ uint8_t m_frame[MAX_FRAME_LENGTH]; @@ -135,7 +135,7 @@ private: void update_sr1( ); }; -extern const device_type MC6854; +DECLARE_DEVICE_TYPE(MC6854, mc6854_device) /* we provide two interfaces: @@ -158,4 +158,4 @@ extern const device_type MC6854; full frames are accepted. */ -#endif +#endif // MAME_MACHINE_MC6854_H |