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