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