summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/interpro/keyboard/keyboard.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/interpro/keyboard/keyboard.h')
-rw-r--r--src/devices/bus/interpro/keyboard/keyboard.h42
1 files changed, 20 insertions, 22 deletions
diff --git a/src/devices/bus/interpro/keyboard/keyboard.h b/src/devices/bus/interpro/keyboard/keyboard.h
index 9d40e5a9e96..83347f17114 100644
--- a/src/devices/bus/interpro/keyboard/keyboard.h
+++ b/src/devices/bus/interpro/keyboard/keyboard.h
@@ -5,13 +5,6 @@
#pragma once
-#define MCFG_INTERPRO_KEYBOARD_PORT_ADD(tag, slot_intf, def_slot) \
- MCFG_DEVICE_ADD(tag, INTERPRO_KEYBOARD_PORT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(slot_intf, def_slot, false)
-
-#define MCFG_INTERPRO_KEYBOARD_RXD_HANDLER(cb) \
- downcast<interpro_keyboard_port_device &>(*device).set_rxd_handler(DEVCB_##cb);
-
class device_interpro_keyboard_port_interface;
class interpro_keyboard_port_device : public device_t, public device_slot_interface
@@ -19,25 +12,31 @@ class interpro_keyboard_port_device : public device_t, public device_slot_interf
friend class device_interpro_keyboard_port_interface;
public:
- interpro_keyboard_port_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock);
- virtual ~interpro_keyboard_port_device();
-
- // static configuration helpers
- template <class Object> devcb_base &set_rxd_handler(Object &&cb) { return m_rxd_handler.set_callback(std::forward<Object>(cb)); }
-
+ template <typename T>
+ interpro_keyboard_port_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&slot_options, const char *default_option)
+ : interpro_keyboard_port_device(mconfig, tag, owner)
+ {
+ option_reset();
+ slot_options(*this);
+ set_default_option(default_option);
+ set_fixed(false);
+ }
+
+ interpro_keyboard_port_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock = 0);
+
+ // callback configuration
+ auto rxd_handler_cb() { return m_rxd_handler.bind(); }
+
+ // input lines
DECLARE_WRITE_LINE_MEMBER(write_txd);
protected:
- interpro_keyboard_port_device(machine_config const &mconfig, device_type type, char const *tag, device_t *owner, uint32_t clock);
-
virtual void device_start() override;
virtual void device_config_complete() override;
- int m_rxd;
-
+private:
devcb_write_line m_rxd_handler;
-private:
device_interpro_keyboard_port_interface *m_dev;
};
@@ -46,15 +45,14 @@ class device_interpro_keyboard_port_interface : public device_slot_card_interfac
friend class interpro_keyboard_port_device;
public:
- virtual ~device_interpro_keyboard_port_interface() override;
-
+ // input lines
virtual DECLARE_WRITE_LINE_MEMBER(input_txd) { }
-
- DECLARE_WRITE_LINE_MEMBER(output_rxd) { m_port->m_rxd = state; m_port->m_rxd_handler(state); }
+ DECLARE_WRITE_LINE_MEMBER(output_rxd) { m_port->m_rxd_handler(state); }
protected:
device_interpro_keyboard_port_interface(machine_config const &mconfig, device_t &device);
+private:
interpro_keyboard_port_device *m_port;
};