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.h40
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