1 // license:BSD-3-Clause
2 // copyright-holders:Miodrag Milanovic
3 /***************************************************************************
4 
5 Orion driver by Miodrag Milanovic
6 
7 2008-04-02 Preliminary driver.
8 2008-04-22 Orion Pro added
9 
10 Orionide and orionidm produce ERROR at start, not sure why. The others
11 appear to function well, as long as you use the romdisk software item.
12 You can load tapes with the CH4 program which is found on the romdisk.
13 
14 Orionpro has its own menu. If you choose Orion Pro, you need to have the
15 cpm370 disk in the drive. If you choose Orion 128, you need the romdisk.
16 
17 It's unknown how to create a tape.
18 
19 ****************************************************************************/
20 
21 
22 #include "emu.h"
23 #include "includes/orion.h"
24 
25 #include "screen.h"
26 #include "speaker.h"
27 
28 #include "formats/smx_dsk.h"
29 #include "formats/rk_cas.h"
30 
31 
32 /* Address maps */
33 
34 /* Orion 128 */
mem_map(address_map & map)35 void orion_state::mem_map(address_map &map)
36 {
37 	map(0x0000, 0xefff).bankrw("bank1");
38 	map(0xf000, 0xf3ff).bankrw("bank2");
39 	map(0xf400, 0xf4ff).rw(FUNC(orion_state::orion128_system_r), FUNC(orion_state::orion128_system_w));  // Keyboard and cassette
40 	map(0xf500, 0xf5ff).rw(FUNC(orion_state::orion128_romdisk_r), FUNC(orion_state::orion128_romdisk_w));
41 	map(0xf700, 0xf7ff).rw(FUNC(orion_state::orion128_floppy_r), FUNC(orion_state::orion128_floppy_w));
42 	map(0xf800, 0xffff).rom();
43 	map(0xf800, 0xf8ff).w(FUNC(orion_state::orion128_video_mode_w));
44 	map(0xf900, 0xf9ff).w(FUNC(orion_state::orion128_memory_page_w));
45 	map(0xfa00, 0xfaff).w(FUNC(orion_state::orion128_video_page_w));
46 }
47 
48 /* Orion Z80 Card II */
io_map(address_map & map)49 void orion_state::io_map(address_map &map)
50 {
51 	map.global_mask(0xff);
52 	map.unmap_value_high();
53 	map(0xf8, 0xf8).w(FUNC(orion_state::orion128_video_mode_w));
54 	map(0xf9, 0xf9).w(FUNC(orion_state::orion128_memory_page_w));
55 	map(0xfa, 0xfa).w(FUNC(orion_state::orion128_video_page_w));
56 }
57 
mem_map(address_map & map)58 void orion_z80_state::mem_map(address_map &map)
59 {
60 	map.unmap_value_high();
61 	map(0x0000, 0x3fff).bankrw("bank1");
62 	map(0x4000, 0xefff).bankrw("bank2");
63 	map(0xf000, 0xf3ff).bankrw("bank3");
64 	map(0xf400, 0xf7ff).bankrw("bank4");
65 	map(0xf800, 0xffff).bankrw("bank5");
66 }
67 
68 /* Orion Pro */
io_map(address_map & map)69 void orion_z80_state::io_map(address_map &map)
70 {
71 	map(0x0000, 0xffff).rw(FUNC(orion_z80_state::orionz80_io_r), FUNC(orion_z80_state::orionz80_io_w));
72 }
73 
mem_map(address_map & map)74 void orion_pro_state::mem_map(address_map &map)
75 {
76 	map.unmap_value_high();
77 	map(0x0000, 0x1fff).bankrw("bank1");
78 	map(0x2000, 0x3fff).bankrw("bank2");
79 	map(0x4000, 0x7fff).bankrw("bank3");
80 	map(0x8000, 0xbfff).bankrw("bank4");
81 	map(0xc000, 0xefff).bankrw("bank5");
82 	map(0xf000, 0xf3ff).bankrw("bank6");
83 	map(0xf400, 0xf7ff).bankrw("bank7");
84 	map(0xf800, 0xffff).bankrw("bank8");
85 }
86 
io_map(address_map & map)87 void orion_pro_state::io_map(address_map &map)
88 {
89 	map(0x0000, 0xffff).rw(FUNC(orion_pro_state::orionpro_io_r), FUNC(orion_pro_state::orionpro_io_w));
90 }
91 
FLOPPY_FORMATS_MEMBER(orion_state::orion_floppy_formats)92 FLOPPY_FORMATS_MEMBER( orion_state::orion_floppy_formats )
93 	FLOPPY_SMX_FORMAT
94 FLOPPY_FORMATS_END
95 
96 /* Machine driver */
97 void orion_state::orion128(machine_config &config)
98 {
99 	I8080(config, m_maincpu, 2000000);
100 	m_maincpu->set_addrmap(AS_PROGRAM, &orion_state::mem_map);
101 	m_maincpu->set_addrmap(AS_IO, &orion_state::io_map);
102 
103 	I8255A(config, m_ppi1);
104 	m_ppi1->in_pa_callback().set(FUNC(orion_state::orion_romdisk_porta_r));
105 	m_ppi1->out_pb_callback().set(FUNC(orion_state::orion_romdisk_portb_w));
106 	m_ppi1->out_pc_callback().set(FUNC(orion_state::orion_romdisk_portc_w));
107 
108 	I8255A(config, m_ppi2);
109 	m_ppi2->out_pa_callback().set(FUNC(orion_state::radio86_8255_porta_w2));
110 	m_ppi2->in_pb_callback().set(FUNC(orion_state::radio86_8255_portb_r2));
111 	m_ppi2->in_pc_callback().set(FUNC(orion_state::radio86_8255_portc_r2));
112 	m_ppi2->out_pc_callback().set(FUNC(orion_state::radio86_8255_portc_w2));
113 
114 	/* video hardware */
115 	SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
116 	m_screen->set_refresh_hz(50);
117 	m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
118 	m_screen->set_size(384, 256);
119 	m_screen->set_visarea(0, 384-1, 0, 256-1);
120 	m_screen->set_screen_update(FUNC(orion_state::screen_update_orion128));
121 	m_screen->set_palette(m_palette);
122 
123 	PALETTE(config, m_palette, FUNC(orion_state::orion128_palette), 18);
124 
125 	SPEAKER(config, "mono").front_center();
126 
127 	CASSETTE(config, m_cassette);
128 	m_cassette->set_formats(rko_cassette_formats);
129 	m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED);
130 	m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05);
131 	m_cassette->set_interface("orion_cass");
132 
133 	SOFTWARE_LIST(config, "cass_list").set_original("orion_cass");
134 
135 	FD1793(config, m_fdc, 8_MHz_XTAL / 8);
136 
137 	FLOPPY_CONNECTOR(config, "fd0", "525qd", FLOPPY_525_QD, true, orion_floppy_formats);
138 	FLOPPY_CONNECTOR(config, "fd1", "525qd", FLOPPY_525_QD, true, orion_floppy_formats);
139 	FLOPPY_CONNECTOR(config, "fd2", "525qd", FLOPPY_525_QD, true, orion_floppy_formats);
140 	FLOPPY_CONNECTOR(config, "fd3", "525qd", FLOPPY_525_QD, true, orion_floppy_formats);
141 	SOFTWARE_LIST(config, "flop_list").set_original("orion_flop");
142 
143 	auto &cart(GENERIC_CARTSLOT(config, "cartslot"));
144 	generic_plain_slot(cart);
145 	cart.set_interface("orion_cart");
146 
147 	SOFTWARE_LIST(config, "cart_list").set_original("orion_cart");
148 
149 	/* internal ram */
150 	RAM(config, m_ram);
151 	m_ram->set_default_size("256K");
152 	m_ram->set_default_value(0x00);
153 }
154 
orion128ms(machine_config & config)155 void orion_state::orion128ms(machine_config &config)
156 {
157 	orion128(config);
158 	I8255A(config.replace(), m_ppi2);
159 	m_ppi2->out_pa_callback().set(FUNC(orion_state::radio86_8255_porta_w2));
160 	m_ppi2->in_pb_callback().set(FUNC(orion_state::radio86_8255_portb_r2));
161 	m_ppi2->in_pc_callback().set(FUNC(orion_state::rk7007_8255_portc_r));
162 	m_ppi2->out_pc_callback().set(FUNC(orion_state::radio86_8255_portc_w2));
163 }
164 
165 
orionz80(machine_config & config)166 void orion_z80_state::orionz80(machine_config &config)
167 {
168 	Z80(config, m_maincpu, 2500000);
169 	m_maincpu->set_addrmap(AS_PROGRAM, &orion_z80_state::mem_map);
170 	m_maincpu->set_addrmap(AS_IO, &orion_z80_state::io_map);
171 	m_maincpu->set_vblank_int("screen", FUNC(orion_z80_state::orionz80_interrupt));
172 
173 	I8255A(config, m_ppi1);
174 	m_ppi1->in_pa_callback().set(FUNC(orion_z80_state::orion_romdisk_porta_r));
175 	m_ppi1->out_pb_callback().set(FUNC(orion_z80_state::orion_romdisk_portb_w));
176 	m_ppi1->out_pc_callback().set(FUNC(orion_z80_state::orion_romdisk_portc_w));
177 
178 	I8255A(config, m_ppi2);
179 	m_ppi2->out_pa_callback().set(FUNC(orion_z80_state::radio86_8255_porta_w2));
180 	m_ppi2->in_pb_callback().set(FUNC(orion_z80_state::radio86_8255_portb_r2));
181 	m_ppi2->in_pc_callback().set(FUNC(orion_z80_state::radio86_8255_portc_r2));
182 	m_ppi2->out_pc_callback().set(FUNC(orion_z80_state::radio86_8255_portc_w2));
183 
184 	/* video hardware */
185 	SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
186 	m_screen->set_refresh_hz(50);
187 	m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
188 	m_screen->set_size(384, 256);
189 	m_screen->set_visarea(0, 384-1, 0, 256-1);
190 	m_screen->set_screen_update(FUNC(orion_z80_state::screen_update_orion128));
191 	m_screen->set_palette(m_palette);
192 
193 	PALETTE(config, m_palette, FUNC(orion_z80_state::orion128_palette), 18);
194 
195 	MC146818(config, "rtc", 4.194304_MHz_XTAL);
196 
197 	SPEAKER(config, "mono").front_center();
198 	SPEAKER_SOUND(config, "speaker").add_route(ALL_OUTPUTS, "mono", 1.0);
199 
200 	auto &ay8912(AY8912(config, "ay8912", 1773400));
201 	ay8912.add_route(ALL_OUTPUTS, "mono", 1.00);
202 
203 	CASSETTE(config, m_cassette);
204 	m_cassette->set_formats(rko_cassette_formats);
205 	m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED);
206 	m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05);
207 	m_cassette->set_interface("orion_cass");
208 
209 	SOFTWARE_LIST(config, "cass_list").set_original("orion_cass");
210 
211 	FD1793(config, m_fdc, 8_MHz_XTAL / 8);
212 
213 	FLOPPY_CONNECTOR(config, "fd0", "525qd", FLOPPY_525_QD, true, orion_floppy_formats);
214 	FLOPPY_CONNECTOR(config, "fd1", "525qd", FLOPPY_525_QD, true, orion_floppy_formats);
215 	FLOPPY_CONNECTOR(config, "fd2", "525qd", FLOPPY_525_QD, true, orion_floppy_formats);
216 	FLOPPY_CONNECTOR(config, "fd3", "525qd", FLOPPY_525_QD, true, orion_floppy_formats);
217 	SOFTWARE_LIST(config, "flop_list").set_original("orion_flop");
218 
219 	auto &cart(GENERIC_CARTSLOT(config, "cartslot"));
220 	generic_plain_slot(cart);
221 	cart.set_interface("orion_cart");
222 
223 	SOFTWARE_LIST(config, "cart_list").set_original("orion_cart");
224 
225 	/* internal ram */
226 	RAM(config, m_ram);
227 	m_ram->set_default_size("512K");
228 	m_ram->set_default_value(0x00);
229 }
230 
orionz80ms(machine_config & config)231 void orion_z80_state::orionz80ms(machine_config &config)
232 {
233 	orionz80(config);
234 
235 	I8255A(config.replace(), m_ppi2);
236 	m_ppi2->out_pa_callback().set(FUNC(orion_z80_state::radio86_8255_porta_w2));
237 	m_ppi2->in_pb_callback().set(FUNC(orion_z80_state::radio86_8255_portb_r2));
238 	m_ppi2->in_pc_callback().set(FUNC(orion_z80_state::rk7007_8255_portc_r));
239 	m_ppi2->out_pc_callback().set(FUNC(orion_z80_state::radio86_8255_portc_w2));
240 }
241 
orionpro(machine_config & config)242 void orion_pro_state::orionpro(machine_config &config)
243 {
244 	Z80(config, m_maincpu, 5000000);
245 	m_maincpu->set_addrmap(AS_PROGRAM, &orion_pro_state::mem_map);
246 	m_maincpu->set_addrmap(AS_IO, &orion_pro_state::io_map);
247 
248 	I8255A(config, m_ppi1);
249 	m_ppi1->in_pa_callback().set(FUNC(orion_pro_state::orion_romdisk_porta_r));
250 	m_ppi1->out_pb_callback().set(FUNC(orion_pro_state::orion_romdisk_portb_w));
251 	m_ppi1->out_pc_callback().set(FUNC(orion_pro_state::orion_romdisk_portc_w));
252 
253 	I8255A(config, m_ppi2);
254 	m_ppi2->out_pa_callback().set(FUNC(orion_pro_state::radio86_8255_porta_w2));
255 	m_ppi2->in_pb_callback().set(FUNC(orion_pro_state::radio86_8255_portb_r2));
256 	m_ppi2->in_pc_callback().set(FUNC(orion_pro_state::radio86_8255_portc_r2));
257 	m_ppi2->out_pc_callback().set(FUNC(orion_pro_state::radio86_8255_portc_w2));
258 
259 	/* video hardware */
260 	SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
261 	m_screen->set_refresh_hz(50);
262 	m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
263 	m_screen->set_size(384, 256);
264 	m_screen->set_visarea(0, 384-1, 0, 256-1);
265 	m_screen->set_screen_update(FUNC(orion_pro_state::screen_update_orion128));
266 	m_screen->set_palette(m_palette);
267 
268 	PALETTE(config, m_palette, FUNC(orion_pro_state::orion128_palette), 18);
269 
270 	SPEAKER(config, "mono").front_center();
271 	SPEAKER_SOUND(config, "speaker").add_route(ALL_OUTPUTS, "mono", 1.0);
272 	auto &ay8912(AY8912(config, "ay8912", 1773400));
273 	ay8912.add_route(ALL_OUTPUTS, "mono", 1.00);
274 
275 	CASSETTE(config, m_cassette);
276 	m_cassette->set_formats(rko_cassette_formats);
277 	m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED);
278 	m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05);
279 	m_cassette->set_interface("orion_cass");
280 
281 	SOFTWARE_LIST(config, "cass_list").set_original("orion_cass");
282 
283 	FD1793(config, m_fdc, 8_MHz_XTAL / 8);
284 
285 	FLOPPY_CONNECTOR(config, "fd0", "525qd", FLOPPY_525_QD, true, orion_floppy_formats);
286 	FLOPPY_CONNECTOR(config, "fd1", "525qd", FLOPPY_525_QD, true, orion_floppy_formats);
287 	FLOPPY_CONNECTOR(config, "fd2", "525qd", FLOPPY_525_QD, true, orion_floppy_formats);
288 	FLOPPY_CONNECTOR(config, "fd3", "525qd", FLOPPY_525_QD, true, orion_floppy_formats);
289 	SOFTWARE_LIST(config, "flop_list").set_original("orionpro_flop");
290 	SOFTWARE_LIST(config, "flop128_list").set_compatible("orion_flop");
291 
292 	auto &cart(GENERIC_CARTSLOT(config, "cartslot"));
293 	generic_plain_slot(cart);
294 	cart.set_interface("orion_cart");
295 
296 	SOFTWARE_LIST(config, "cart_list").set_original("orion_cart");
297 
298 	/* internal ram */
299 	RAM(config, m_ram);
300 	m_ram->set_default_size("512K");
301 	m_ram->set_default_value(0x00);
302 }
303 
304 /* ROM definition */
305 
306 ROM_START( orion128 )
307 	ROM_REGION( 0x30000, "maincpu", ROMREGION_ERASEFF )
308 	ROM_SYSTEM_BIOS( 0, "m2rk", "Version 3.2 rk" )
309 	ROMX_LOAD( "m2rk.bin",    0x0f800, 0x0800, CRC(2025c234) SHA1(caf86918629be951fe698cddcdf4589f07e2fb96), ROM_BIOS(0) )
310 	ROM_SYSTEM_BIOS( 1, "m2_2rk", "Version 3.2.2 rk" )
311 	ROMX_LOAD( "m2_2rk.bin",  0x0f800, 0x0800, CRC(fc662351) SHA1(7c6de67127fae5869281449de1c503597c0c058e), ROM_BIOS(1) )
312 ROM_END
313 
314 ROM_START( orionms )
315 	ROM_REGION( 0x30000, "maincpu", ROMREGION_ERASEFF )
316 	ROM_LOAD( "ms7007.bin",   0x0f800, 0x0800, CRC(c6174ba3) SHA1(8f9a42c3e09684718fe4121a8408e7860129d26f) )
317 ROM_END
318 
319 ROM_START( orionz80 )
320 	ROM_REGION( 0x30000, "maincpu", ROMREGION_ERASEFF )
321 	ROM_SYSTEM_BIOS( 0, "m31", "Version 3.1" )
322 	ROMX_LOAD( "m31.bin",     0x0f800, 0x0800, CRC(007c6dc6) SHA1(338ff95497c820338f7f79c75f65bc540a5541c4), ROM_BIOS(0) )
323 	ROM_SYSTEM_BIOS( 1, "m32zrk", "Version 3.2 zrk" )
324 	ROMX_LOAD( "m32zrk.bin",  0x0f800, 0x0800, CRC(4ec3f012) SHA1(6b0b2bfc515a80e7caf72c3c33cf2dcf192d4711), ROM_BIOS(1) )
325 	ROM_SYSTEM_BIOS( 2, "m33zrkd", "Version 3.3 zrkd" )
326 	ROMX_LOAD( "m33zrkd.bin", 0x0f800, 0x0800, CRC(f404032d) SHA1(088cd9ed05f0dda4fa0a005c609208d9f57ad3d9), ROM_BIOS(2) )
327 	ROM_SYSTEM_BIOS( 3, "m34zrk", "Version 3.4 zrk" )
328 	ROMX_LOAD( "m34zrk.bin",  0x0f800, 0x0800, CRC(787c3903) SHA1(476c1c0b88e5efb582292eebec15e24d054c8851), ROM_BIOS(3) )
329 	ROM_SYSTEM_BIOS( 4, "m35zrkd", "Version 3.5 zrkd" )
330 	ROMX_LOAD( "m35zrkd.bin", 0x0f800, 0x0800, CRC(9368b38f) SHA1(64a77f22119d40c9b18b64d78ad12acc6fff9efb), ROM_BIOS(4) )
331 	ROM_SYSTEM_BIOS( 5, "peter", "Peterburg '91" )
332 	ROMX_LOAD( "peter.bin",   0x0f800, 0x0800, CRC(df9b1d8c) SHA1(c7f1e074e58ad1c1799cf522161b4f4cffa5aefa), ROM_BIOS(5) )
333 ROM_END
334 
335 ROM_START( orionide )
336 	ROM_REGION( 0x30000, "maincpu", ROMREGION_ERASEFF )
337 	ROM_LOAD( "m35zrkh.bin", 0x0f800, 0x0800, CRC(b7745f28) SHA1(c3bd3e662db7ec56ecbab54bf6b3a4c26200d0bb) )
338 ROM_END
339 
340 ROM_START( orionzms )
341 	ROM_REGION( 0x30000, "maincpu", ROMREGION_ERASEFF )
342 	ROM_SYSTEM_BIOS( 0, "m32zms", "Version 3.2 zms" )
343 	ROMX_LOAD( "m32zms.bin",  0x0f800, 0x0800, CRC(44cfd2ae) SHA1(84d53fbc249938c56be76ee4e6ab297f0461835b), ROM_BIOS(0) )
344 	ROM_SYSTEM_BIOS( 1, "m34zms", "Version 3.4 zms" )
345 	ROMX_LOAD( "m34zms.bin",  0x0f800, 0x0800, CRC(0f87a80b) SHA1(ab1121092e61268d8162ed8a7d4fd081016a409a), ROM_BIOS(1) )
346 	ROM_SYSTEM_BIOS( 2, "m35zmsd", "Version 3.5 zmsd" )
347 	ROMX_LOAD( "m35zmsd.bin", 0x0f800, 0x0800, CRC(f714ff37) SHA1(fbe9514adb3384aff146cbedd4fede37ce9591e1), ROM_BIOS(2) )
348 ROM_END
349 
350 ROM_START( orionidm )
351 	ROM_REGION( 0x30000, "maincpu", ROMREGION_ERASEFF )
352 	ROM_LOAD( "m35zmsh.bin", 0x0f800, 0x0800, CRC(01e66df4) SHA1(8c785a3c32fe3eacda73ec79157b41a6e4b63ba8) )
353 ROM_END
354 
355 ROM_START( orionpro )
356 	ROM_REGION( 0x32000, "maincpu", ROMREGION_ERASEFF )
357 	ROM_SYSTEM_BIOS( 0, "ver21", "Version 2.1" )
358 	ROMX_LOAD( "rom1-210.bin", 0x20000, 0x2000,  CRC(8e1a0c78) SHA1(61c8a5ed596ce7e3fd32da920dcc80dc5375b421), ROM_BIOS(0) )
359 	ROMX_LOAD( "rom2-210.bin", 0x22000, 0x10000, CRC(7cb7a49b) SHA1(601f3dd61db323407c4874fd7f23c10dccac0209), ROM_BIOS(0) )
360 	ROM_SYSTEM_BIOS( 1, "ver20", "Version 2.0" )
361 	ROMX_LOAD( "rom1-200.bin", 0x20000, 0x2000,  CRC(4fbe83cc) SHA1(9884d43770b4c0fbeb519b96618b01957c0b8511), ROM_BIOS(1) )
362 	ROMX_LOAD( "rom2-200.bin", 0x22000, 0x10000, CRC(618aaeb7) SHA1(3e7e5d3ff9d2c683708928558e69aa62db877811), ROM_BIOS(1) )
363 	ROM_SYSTEM_BIOS( 2, "ver10", "Version 1.0" )
364 	ROMX_LOAD( "rom1-100.bin", 0x20000, 0x2000, CRC(4fd6c408) SHA1(b0c2e4fb5be5a74a7efa9bba14b746865122af1d), ROM_BIOS(2) )
365 	ROMX_LOAD( "rom2-100.bin", 0x22000, 0x8000, CRC(370ffdca) SHA1(169e2acac2d0b382e2d0a144da0af18bfa38db5c), ROM_BIOS(2) )
366 ROM_END
367 
368 /* Driver */
369 
370 //    YEAR  NAME      PARENT    COMPAT  MACHINE     INPUT    CLASS            INIT        COMPANY      FULLNAME                                  FLAGS
371 COMP( 1990, orion128, 0,        0,      orion128,   radio86, orion_state,     empty_init, "<unknown>", "Orion 128",                              MACHINE_SUPPORTS_SAVE )
372 COMP( 1990, orionms,  orion128, 0,      orion128ms, ms7007,  orion_state,     empty_init, "<unknown>", "Orion 128 (MS7007)",                     MACHINE_SUPPORTS_SAVE )
373 COMP( 1990, orionz80, orion128, 0,      orionz80,   radio86, orion_z80_state, empty_init, "<unknown>", "Orion 128 + Z80 Card II",                MACHINE_SUPPORTS_SAVE )
374 COMP( 1990, orionide, orion128, 0,      orionz80,   radio86, orion_z80_state, empty_init, "<unknown>", "Orion 128 + Z80 Card II + IDE",          MACHINE_SUPPORTS_SAVE )
375 COMP( 1990, orionzms, orion128, 0,      orionz80ms, ms7007,  orion_z80_state, empty_init, "<unknown>", "Orion 128 + Z80 Card II (MS7007)",       MACHINE_SUPPORTS_SAVE )
376 COMP( 1990, orionidm, orion128, 0,      orionz80ms, ms7007,  orion_z80_state, empty_init, "<unknown>", "Orion 128 + Z80 Card II + IDE (MS7007)", MACHINE_SUPPORTS_SAVE )
377 COMP( 1994, orionpro, orion128, 0,      orionpro,   radio86, orion_pro_state, empty_init, "<unknown>", "Orion Pro",                              MACHINE_SUPPORTS_SAVE )
378