1 // license:BSD-3-Clause 2 // copyright-holders:MetalliC 3 /********************************************************************* 4 5 Common printer interfaces 6 7 *********************************************************************/ 8 #ifndef MAME_BUS_SPECTRUM_LPRINT_H 9 #define MAME_BUS_SPECTRUM_LPRINT_H 10 11 #include "exp.h" 12 #include "bus/centronics/ctronics.h" 13 #include "bus/rs232/rs232.h" 14 15 //************************************************************************** 16 // TYPE DEFINITIONS 17 //************************************************************************** 18 19 class spectrum_lprint_device : 20 public device_t, 21 public device_spectrum_expansion_interface 22 23 { 24 public: 25 // construction/destruction 26 spectrum_lprint_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 27 28 protected: 29 // device-level overrides 30 virtual void device_start() override; 31 virtual void device_reset() override; 32 33 // optional information overrides 34 virtual void device_add_mconfig(machine_config &config) override; 35 virtual const tiny_rom_entry *device_rom_region() const override; 36 37 virtual void pre_opcode_fetch(offs_t offset) override; 38 virtual void pre_data_fetch(offs_t offset) override; 39 virtual uint8_t mreq_r(offs_t offset) override; 40 virtual uint8_t iorq_r(offs_t offset) override; 41 virtual void iorq_w(offs_t offset, uint8_t data) override; 42 virtual DECLARE_READ_LINE_MEMBER(romcs) override; 43 DECLARE_WRITE_LINE_MEMBER(busy_w)44 DECLARE_WRITE_LINE_MEMBER(busy_w) { m_busy = state; }; 45 46 required_memory_region m_rom; 47 required_device<centronics_device> m_centronics; 48 49 int m_romcs; 50 int m_busy; 51 }; 52 53 class spectrum_lprint3_device : 54 public device_t, 55 public device_spectrum_expansion_interface 56 57 { 58 public: 59 // construction/destruction 60 spectrum_lprint3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 61 62 protected: 63 // device-level overrides 64 virtual void device_start() override; 65 virtual void device_reset() override; 66 67 // optional information overrides 68 virtual void device_add_mconfig(machine_config &config) override; 69 virtual const tiny_rom_entry *device_rom_region() const override; 70 71 virtual uint8_t mreq_r(offs_t offset) override; 72 virtual uint8_t iorq_r(offs_t offset) override; 73 virtual void iorq_w(offs_t offset, uint8_t data) override; 74 virtual DECLARE_READ_LINE_MEMBER(romcs) override; 75 76 // passthru pre_opcode_fetch(offs_t offset)77 virtual void pre_opcode_fetch(offs_t offset) override { m_exp->pre_opcode_fetch(offset); }; post_opcode_fetch(offs_t offset)78 virtual void post_opcode_fetch(offs_t offset) override { m_exp->post_opcode_fetch(offset); }; pre_data_fetch(offs_t offset)79 virtual void pre_data_fetch(offs_t offset) override { m_exp->pre_data_fetch(offset); }; post_data_fetch(offs_t offset)80 virtual void post_data_fetch(offs_t offset) override { m_exp->post_data_fetch(offset); }; mreq_w(offs_t offset,uint8_t data)81 virtual void mreq_w(offs_t offset, uint8_t data) override { if (m_exp->romcs()) m_exp->mreq_w(offset, data); } 82 DECLARE_WRITE_LINE_MEMBER(busy_w)83 DECLARE_WRITE_LINE_MEMBER(busy_w) { m_busy = state; }; 84 85 required_memory_region m_rom; 86 required_device<centronics_device> m_centronics; 87 required_device<rs232_port_device> m_rs232; 88 required_device<spectrum_expansion_slot_device> m_exp; 89 90 int m_romcs; 91 int m_busy; 92 }; 93 94 class spectrum_kempcentrs_device : 95 public device_t, 96 public device_spectrum_expansion_interface 97 98 { 99 public: 100 // construction/destruction 101 spectrum_kempcentrs_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 102 103 protected: 104 // device-level overrides 105 virtual void device_start() override; 106 virtual void device_reset() override; 107 108 // optional information overrides 109 virtual void device_add_mconfig(machine_config &config) override; 110 111 virtual uint8_t iorq_r(offs_t offset) override; 112 virtual void iorq_w(offs_t offset, uint8_t data) override; 113 DECLARE_WRITE_LINE_MEMBER(busy_w)114 DECLARE_WRITE_LINE_MEMBER(busy_w) { m_busy = state; }; 115 116 required_device<centronics_device> m_centronics; 117 118 int m_busy; 119 }; 120 121 class spectrum_kempcentre_device : 122 public device_t, 123 public device_spectrum_expansion_interface 124 125 { 126 public: 127 // construction/destruction 128 spectrum_kempcentre_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 129 130 protected: 131 spectrum_kempcentre_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); 132 133 // device-level overrides 134 virtual void device_start() override; 135 virtual void device_reset() override; 136 137 // optional information overrides 138 virtual void device_add_mconfig(machine_config &config) override; 139 virtual const tiny_rom_entry *device_rom_region() const override; 140 141 virtual void pre_opcode_fetch(offs_t offset) override; 142 virtual void pre_data_fetch(offs_t offset) override; 143 virtual uint8_t mreq_r(offs_t offset) override; 144 virtual uint8_t iorq_r(offs_t offset) override; 145 virtual void iorq_w(offs_t offset, uint8_t data) override; 146 virtual DECLARE_READ_LINE_MEMBER(romcs) override; 147 DECLARE_WRITE_LINE_MEMBER(busy_w)148 DECLARE_WRITE_LINE_MEMBER(busy_w) { m_busy = state; }; 149 150 required_memory_region m_rom; 151 required_device<centronics_device> m_centronics; 152 153 int m_active; 154 int m_romcs; 155 int m_busy; 156 }; 157 158 class spectrum_kempcentreu_device : 159 public spectrum_kempcentre_device 160 { 161 public: 162 // construction/destruction 163 spectrum_kempcentreu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 164 165 protected: 166 // device-level overrides 167 virtual void device_start() override; 168 169 // optional information overrides 170 virtual const tiny_rom_entry *device_rom_region() const override; 171 172 virtual void pre_opcode_fetch(offs_t offset) override; 173 virtual uint8_t iorq_r(offs_t offset) override; 174 }; 175 176 177 // device type definition 178 DECLARE_DEVICE_TYPE(SPECTRUM_LPRINT, spectrum_lprint_device) 179 DECLARE_DEVICE_TYPE(SPECTRUM_LPRINT3, spectrum_lprint3_device) 180 DECLARE_DEVICE_TYPE(SPECTRUM_KEMPCENTRS, spectrum_kempcentrs_device) 181 DECLARE_DEVICE_TYPE(SPECTRUM_KEMPCENTREF, spectrum_kempcentre_device) 182 DECLARE_DEVICE_TYPE(SPECTRUM_KEMPCENTREU, spectrum_kempcentreu_device) 183 184 185 #endif // MAME_BUS_SPECTRUM_LPRINT_H 186