1 // license:BSD-3-Clause 2 // copyright-holders:Curt Coder 3 /********************************************************************** 4 5 IBM Model F PC/AT 84-key / 3270PC 122-key keyboard emulation 6 7 *********************************************************************/ 8 9 #ifndef MAME_BUS_PC_KBD_PCAT84_H 10 #define MAME_BUS_PC_KBD_PCAT84_H 11 12 #pragma once 13 14 #include "cpu/mcs48/mcs48.h" 15 #include "pc_kbdc.h" 16 #include "machine/rescap.h" 17 18 19 20 //************************************************************************** 21 // TYPE DEFINITIONS 22 //************************************************************************** 23 24 // ======================> ibm_pc_at_84_keyboard_device 25 26 class ibm_pc_at_84_keyboard_device : public device_t, 27 public device_pc_kbd_interface 28 { 29 public: 30 // construction/destruction 31 ibm_pc_at_84_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 32 33 protected: 34 ibm_pc_at_84_keyboard_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); 35 36 // device-level overrides 37 virtual void device_start() override; 38 virtual void device_reset() override; 39 40 // optional information overrides 41 virtual const tiny_rom_entry *device_rom_region() const override; 42 virtual void device_add_mconfig(machine_config &config) override; 43 virtual ioport_constructor device_input_ports() const override; 44 45 // device_pc_kbd_interface overrides DECLARE_WRITE_LINE_MEMBER(clock_write)46 virtual DECLARE_WRITE_LINE_MEMBER( clock_write ) override { m_maincpu->set_input_line(MCS48_INPUT_IRQ, state); }; DECLARE_WRITE_LINE_MEMBER(data_write)47 virtual DECLARE_WRITE_LINE_MEMBER( data_write ) override { }; 48 49 private: 50 void bus_w(uint8_t data); 51 uint8_t p1_r(); 52 void p1_w(uint8_t data); 53 uint8_t p2_r(); 54 void p2_w(uint8_t data); 55 DECLARE_READ_LINE_MEMBER( t0_r ); 56 DECLARE_READ_LINE_MEMBER( t1_r ); 57 58 enum 59 { 60 LED_SCROLL = 0, 61 LED_NUM, 62 LED_CAPS 63 }; 64 65 int key_depressed(); 66 67 required_device<i8048_device> m_maincpu; 68 required_ioport_array<16> m_dr; 69 optional_ioport m_kbdida; 70 optional_ioport m_kbdidb; 71 output_finder<3> m_leds; 72 73 uint8_t m_db; 74 int m_cnt; 75 int m_sense; 76 int m_t1; 77 }; 78 79 80 // ======================> ibm_3270pc_122_keyboard_device 81 82 class ibm_3270pc_122_keyboard_device : public ibm_pc_at_84_keyboard_device 83 { 84 public: 85 // construction/destruction 86 ibm_3270pc_122_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 87 88 // optional information overrides 89 virtual const tiny_rom_entry *device_rom_region() const override; 90 virtual ioport_constructor device_input_ports() const override; 91 }; 92 93 94 // device type definition 95 DECLARE_DEVICE_TYPE(PC_KBD_IBM_PC_AT_84, ibm_pc_at_84_keyboard_device) 96 DECLARE_DEVICE_TYPE(PC_KBD_IBM_3270PC_122, ibm_3270pc_122_keyboard_device) 97 98 #endif // MAME_BUS_PC_KBD_PCAT84_H 99