1 // license:BSD-3-Clause 2 // copyright-holders:Curt Coder 3 /********************************************************************** 4 5 Luxor ABC-55/77 keyboard emulation 6 7 *********************************************************************/ 8 9 #ifndef MAME_BUS_ABCKB_ABC77_H 10 #define MAME_BUS_ABCKB_ABC77_H 11 12 #pragma once 13 14 #include "abckb.h" 15 16 #include "cpu/mcs48/mcs48.h" 17 #include "machine/watchdog.h" 18 #include "sound/discrete.h" 19 #include "sound/spkrdev.h" 20 21 22 23 //************************************************************************** 24 // TYPE DEFINITIONS 25 //************************************************************************** 26 27 // ======================> abc77_device 28 29 class abc77_device : public device_t, public abc_keyboard_interface 30 { 31 public: 32 // construction/destruction 33 abc77_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 34 35 DECLARE_INPUT_CHANGED_MEMBER( keyboard_reset ); 36 37 protected: 38 abc77_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); 39 40 // device-level overrides 41 virtual void device_start() override; 42 virtual void device_reset() override; 43 virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; 44 45 // optional information overrides 46 virtual const tiny_rom_entry *device_rom_region() const override; 47 virtual void device_add_mconfig(machine_config &config) override; 48 virtual ioport_constructor device_input_ports() const override; 49 50 // abc_keyboard_interface overrides 51 virtual void txd_w(int state) override; 52 53 private: 54 enum 55 { 56 TIMER_SERIAL, 57 TIMER_RESET 58 }; 59 60 inline void serial_output(int state); 61 inline void serial_clock(); 62 inline void key_down(int state); 63 64 required_device<i8035_device> m_maincpu; 65 required_device<watchdog_timer_device> m_watchdog; 66 required_device<discrete_sound_device> m_discrete; 67 required_ioport_array<12> m_x; 68 required_ioport m_dsw; 69 70 int m_txd; // transmit data 71 int m_keylatch; // keyboard row latch 72 int m_keydown; // key down 73 int m_clock; // transmit clock 74 int m_hys; // hysteresis 75 int m_stb; // strobe 76 uint8_t m_j3; 77 78 // timers 79 emu_timer *m_serial_timer; 80 emu_timer *m_reset_timer; 81 82 uint8_t p1_r(); 83 void p2_w(uint8_t data); 84 DECLARE_READ_LINE_MEMBER( t1_r ); 85 DECLARE_WRITE_LINE_MEMBER( prog_w ); 86 void j3_w(uint8_t data); 87 88 void abc77_io(address_map &map); 89 void abc77_map(address_map &map); 90 }; 91 92 93 class abc55_device : public abc77_device 94 { 95 public: 96 // construction/destruction 97 abc55_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 98 99 // optional information overrides 100 virtual ioport_constructor device_input_ports() const override; 101 }; 102 103 104 // device type definition 105 DECLARE_DEVICE_TYPE(ABC77, abc77_device) 106 DECLARE_DEVICE_TYPE(ABC55, abc55_device) 107 108 109 #endif // MAME_BUS_ABCKB_ABC77_H 110