diff options
author | Vas Crabb <vas@vastheman.com> | 2018-08-23 22:49:27 +1000 |
---|---|---|
committer | Vas Crabb <vas@vastheman.com> | 2018-08-23 22:49:27 +1000 |
commit | 526df12a0de088e5acddbb490055c0f1e4dc5801 (patch) | |
tree | bdc11cf3e3aa069f2cc2ba8368b1d30558a1e8e5 /src/devices | |
parent | 5fdb04640766a623f8da1c996f281bd9722dabda (diff) |
a2000: add keyboard reset circuit
Diffstat (limited to 'src/devices')
-rw-r--r-- | src/devices/bus/amiga/keyboard/keyboard.h | 35 | ||||
-rw-r--r-- | src/devices/bus/amiga/keyboard/mitsumi.cpp | 7 |
2 files changed, 20 insertions, 22 deletions
diff --git a/src/devices/bus/amiga/keyboard/keyboard.h b/src/devices/bus/amiga/keyboard/keyboard.h index 496917d9d15..3458ab56912 100644 --- a/src/devices/bus/amiga/keyboard/keyboard.h +++ b/src/devices/bus/amiga/keyboard/keyboard.h @@ -20,24 +20,6 @@ //************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_AMIGA_KEYBOARD_INTERFACE_ADD(_tag, _opts, _def_slot) \ - MCFG_DEVICE_ADD(_tag, AMIGA_KEYBOARD_INTERFACE, 0) \ - MCFG_DEVICE_SLOT_INTERFACE(_opts, _def_slot, false) - -#define MCFG_AMIGA_KEYBOARD_KCLK_HANDLER(_devcb) \ - downcast<amiga_keyboard_bus_device &>(*device).set_kclk_handler(DEVCB_##_devcb); - -#define MCFG_AMIGA_KEYBOARD_KDAT_HANDLER(_devcb) \ - downcast<amiga_keyboard_bus_device &>(*device).set_kdat_handler(DEVCB_##_devcb); - -#define MCFG_AMIGA_KEYBOARD_KRST_HANDLER(_devcb) \ - downcast<amiga_keyboard_bus_device &>(*device).set_krst_handler(DEVCB_##_devcb); - - -//************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -49,13 +31,22 @@ class amiga_keyboard_bus_device : public device_t, public device_slot_interface { public: // construction/destruction - amiga_keyboard_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + template <typename T> + amiga_keyboard_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts, const char *dflt) + : amiga_keyboard_bus_device(mconfig, tag, owner, 0) + { + option_reset(); + opts(*this); + set_default_option(dflt); + set_fixed(false); + } + amiga_keyboard_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0U); virtual ~amiga_keyboard_bus_device(); // callbacks - template <class Object> devcb_base &set_kclk_handler(Object &&cb) { return m_kclk_handler.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_kdat_handler(Object &&cb) { return m_kdat_handler.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_krst_handler(Object &&cb) { return m_krst_handler.set_callback(std::forward<Object>(cb)); } + auto kclk_handler() { return m_kclk_handler.bind(); } + auto kdat_handler() { return m_kdat_handler.bind(); } + auto krst_handler() { return m_krst_handler.bind(); } // called from keyboard DECLARE_WRITE_LINE_MEMBER(kclk_w) { m_kclk_handler(state); } diff --git a/src/devices/bus/amiga/keyboard/mitsumi.cpp b/src/devices/bus/amiga/keyboard/mitsumi.cpp index e2424361cb3..d8338caa465 100644 --- a/src/devices/bus/amiga/keyboard/mitsumi.cpp +++ b/src/devices/bus/amiga/keyboard/mitsumi.cpp @@ -345,6 +345,13 @@ protected: save_item(NAME(m_reset_active)); } + virtual void device_reset() override + { + mitsumi_keyboard_base::device_reset(); + + m_mcu->cntr_w(1); + } + virtual void ctrl_a_a_changed(bool state) override { m_reset_merger->in_w<1>(state ? 0 : 1); |