1 // license:BSD-3-Clause
2 // copyright-holders:Zsolt Vasvari
3 /***************************************************************************
4
5 Driver by Zsolt Vasvari
6
7 Notes
8 -----
9
10 Route 16:
11 - Route 16 doesn't have the SN76477 chip. There is space on the PCB
12 but it is not populated.
13
14 - Has the added ability to turn off each bitplane individually.
15 This looks like an afterthought, as one of the same bits that control
16 the palette selection is doubly utilized as the bitmap enable bit.
17
18 - New code to better emulate the protection in Route 16 was added in 0.194,
19 but it turned out to harbour a bug (see MT 07310). Therefore the previous
20 patches have been restored, and the protection routine has been nullified
21 but is still there in case someone wants to revisit it.
22
23 Stratovox:
24 - Has almost *electrically* identical hardware to Route 16 with the exception
25 that it is physically different (2 PCB-set connected with flat cables) and
26 Stratovox has the SN76477 chip and uses a DAC for voice. There are 3 volume
27 pots on the PCB. One for music, one for speech and a master volume.
28
29 Space Echo:
30 - When all astronauts are taken the game over tune ends with 5 bad notes,
31 this appears to be a bug in the ROM from a changed instruction at 2EB3.
32
33 - Service mode shows a garbled screen as most of the code for it has been
34 replaced by other routines, however the sound tests still work. it's
35 possible that the service switch isn't connected on the real hardware.
36
37 - The game hangs if it doesn't pass the startup test, a best guess is implemented
38 rather than patching out the test. code for the same test is in stratvox but
39 isn't called, speakres has a very similar test but doesn't care about the result.
40
41 - Interrupts per frame for cpu1 is a best guess based on how stratvox uses the DAC,
42 writing up to 195 times per frame with each byte from the ROM written 4 times.
43 spacecho writes one byte per interrupt so 195/4 or 48 is used. a lower number
44 increases the chance of a sound interrupting itself, which for most sounds
45 is buggy and causes the game to freeze until the first sound completes.
46
47 vscompmj:
48 - Stuck notes (constant tone) in-game after the mahjong tiles are laid down.
49
50
51 Route 16/Stratovox memory map (preliminary)
52
53 CPU1
54
55 0000-2fff ROM
56 4000-43ff Shared RAM
57 8000-bfff Video RAM
58
59 I/O Read
60
61 48xx IN0 - DIP Switches
62 50xx IN1 - Input Port 1
63 58xx IN2 - Input Port 2
64 60xx IN3 - Unknown (Speak & Rescue/Space Echo only)
65
66 I/O Write
67
68 48xx OUT0 - D0-D4 color select for VRAM 0
69 D5 coin counter
70 50xx OUT1 - D0-D4 color select for VRAM 1
71 D5 VIDEO I/II (Flip Screen)
72 58xx OUT2 - Unknown (Speak & Rescue/Space Echo only)
73
74 I/O Port Write
75
76 6800 AY-8910 Write Port
77 6900 AY-8910 Control Port
78
79
80 CPU2
81
82 0000-1fff ROM
83 4000-43ff Shared RAM
84 8000-bfff Video RAM
85
86 I/O Write
87
88 2800 DAC output (Stratovox only)
89
90 ***************************************************************************
91
92 Route 16 PCB Hardware Info by Guru
93
94 TVX-2 (TVX-3 also seen)
95 SUN ELECTRONICS CORPORATION
96 |------------------------------------|-----------|
97 | Z80 54 55 56 57 58 |59 SKT |
98 | | X |
99 | | MB8841 X | <--- Sub board on top containing 4 logic
100 | | X | chips and an MB8841 microcontroller
101 | 10MHz | X | PCB Number: TVX-S1
102 | | X |
103 | ^SN76477 MB7052.61 |---------X-|
104 |#VRS AY-3-8910 X |
105 |VOL X |
106 | MB3713 MB7052.59 |
107 |1 |
108 |8 X |
109 |W MB8114 X |
110 |A DSW X |
111 |Y MB8114 X |
112 | %555 %555 X |
113 |#VR2 %555 %555 X |
114 |#VR1 X |
115 |#VR0 Z80 60 61 62 63 X |
116 |------------------------------------------------|
117 Notes:
118 X - Texas Instruments TMS4116 16k x1-bit DRAM (total 16 chips)
119 MB8114 - Fujitsu MB8114 1k x4-bit SRAM, compatible with 2114
120 MB7052 - Fujitsu MB7052 256b x4-bit BiPolar PROM (compatible with 82S129)
121 AY-3-8910 - General Instrument AY-3-8910 Programmable Sound Generator (PSG). Clock 1.25MHz [10/8]
122 Z80 - Clock 2.5MHz [10/4] (both)
123 ^ - SN76477 not populated on Route 16 PCB
124 % - These 4x 555 Timer ICs are not populated on Route 16 PCB
125 # - These 4x Volume pots are not populated on Route 16 PCB
126 MB3713 - Fujitsu MB3713 5.7W Mono Power AMP
127 DSW - 8-position DIP Switch
128 54...63 - 2716 EPROM
129 SKT - 24-pin Socket for daughterboard connection
130 MB8841 - Fujitsu MB8841 4-bit microcontroller containing 2k x8-bit mask ROM and 128b x4-bit static RAM
131
132 18-WAY PCB Edge Connector Pinout
133 ----------------+----------------
134 PARTS SIDE | SOLDER SIDE
135 ----------------+----------------
136 +5V | 1A | 1B | -5V
137 +5V | 2A | 2B | -5V
138 PL2 Right | 3A | 3B | PL1 Right
139 PL2 Left | 4A | 4B | PL1 Left
140 PL2 Up | 5A | 5B | PL1 Up
141 PL2 Down | 6A | 6B | PL1 Down
142 PL2 Button | 7A | 7B | PL1 Button
143 | 8A | 8B |
144 PL2 Start | 9A | 9B | Test
145 PL1 Start |10A | 10B| Coin
146 |11A | 11B|
147 Green |12A | 12B| Coin Counter
148 Red |13A | 13B|
149 Blue |14A | 14B|
150 Sync |15A | 15B| Speaker +
151 GND |16A | 16B| Speaker -
152 GND |17A | 17B| +12V
153 GND |18A | 18B| +12V
154
155 ***************************************************************************/
156
157 #include "emu.h"
158 #include "includes/route16.h"
159
160 #include "cpu/z80/z80.h"
161 #include "sound/ay8910.h"
162 #include "sound/dac.h"
163
164 #include "speaker.h"
165
166
167 /*************************************
168 *
169 * Drivers specific initialization
170 *
171 *************************************/
172
MACHINE_START_MEMBER(route16_state,speakres)173 MACHINE_START_MEMBER(route16_state, speakres)
174 {
175 save_item(NAME(m_speakres_vrx));
176 }
177
MACHINE_START_MEMBER(route16_state,jongpute)178 MACHINE_START_MEMBER(route16_state, jongpute)
179 {
180 save_item(NAME(m_jongpute_port_select));
181 }
182
init_route16a()183 void route16_state::init_route16a()
184 {
185 // hack out the protection
186 u8 *rom = memregion("cpu1")->base();
187 rom[0x105] = 0; // remove jp nz,4109
188 rom[0x106] = 0;
189 rom[0x107] = 0;
190
191 rom[0x72a] = 0; // remove jp nz,4238
192 rom[0x72b] = 0;
193 rom[0x72c] = 0;
194 init_route16c();
195 }
196
init_route16()197 void route16_state::init_route16()
198 {
199 save_item(NAME(m_protection_data));
200 // hack out the protection
201 u8 *rom = memregion("cpu1")->base();
202 rom[0x105] = 0; // remove jp nz,4109
203 rom[0x106] = 0;
204 rom[0x107] = 0;
205
206 rom[0x731] = 0; // remove jp nz,4238
207 rom[0x732] = 0;
208 rom[0x733] = 0;
209
210 rom[0x0e9] = 0x3a; // remove call 2CCD
211
212 rom[0x747] = 0xc3; // skip protection checking
213 rom[0x748] = 0x56;
214 rom[0x749] = 0x07;
215 }
216
init_route16c()217 void route16_state::init_route16c()
218 {
219 save_item(NAME(m_protection_data));
220 // hack out the protection
221 u8 *rom = memregion("cpu1")->base();
222 rom[0x0e9] = 0x3a; // remove call 2CD8
223
224 rom[0x754] = 0xc3; // skip protection checking
225 rom[0x755] = 0x63;
226 rom[0x756] = 0x07;
227 }
228
init_vscompmj()229 void route16_state::init_vscompmj() // only opcodes encrypted
230 {
231 uint8_t *rom = memregion("cpu1")->base();
232
233 uint8_t unk0 = 0x00;
234 uint8_t unk1 = 0x00;
235
236 static const uint8_t xor_table_00[0x08][0x08] =
237 {
238 { 0x04, 0x01, 0x14, 0x14, 0x05, 0x10, 0x54, 0x05 }, // 0x0x and 0x2x
239 { 0x15, 0x51, 0x01, 0x44, 0x50, 0x44, 0x11, 0x50 }, // 0x1x and 0x3x
240 { 0x14, 0x50, 0x41, 0x15, 0x50, 0x15, 0x15, 0x41 }, // 0x4x and 0x6x
241 { 0x11, 0x04, 0x40, 0x11, 0x11, 0x45, 0x10, 0x14 }, // 0x5x and 0x7x
242 { 0x40, unk0, 0x15, unk0, 0x01, 0x44, 0x14, 0x54 }, // 0x8x and 0xax
243 { 0x11, 0x40, unk0, unk0, 0x14, 0x01, 0x54, 0x51 }, // 0x9x and 0xbx
244 { 0x05, 0x45, 0x10, 0x55, 0x51, 0x15, 0x55, 0x11 }, // 0xcx and 0xex
245 { unk0, 0x41, 0x51, 0x10, 0x01, 0x44, 0x50, 0x50 }, // 0xdx and 0xfx
246 };
247
248 static const uint8_t xor_table_01[0x08][0x08] =
249 {
250 { 0x41, 0x41, 0x45, 0x54, 0x44, 0x40, 0x55, 0x41 }, // 0x0x and 0x2x
251 { 0x14, 0x14, 0x04, 0x45, 0x44, 0x01, 0x05, 0x05 }, // 0x1x and 0x3x
252 { 0x40, 0x14, 0x01, 0x11, 0x45, 0x14, 0x04, 0x50 }, // 0x4x and 0x6x
253 { 0x04, 0x40, 0x55, 0x55, 0x44, 0x40, 0x55, 0x55 }, // 0x5x and 0x7x
254 { 0x01, 0x05, 0x14, 0x10, 0x01, unk1, 0x04, 0x04 }, // 0x8x and 0xax
255 { 0x10, 0x04, 0x51, 0x01, 0x04, 0x04, 0x45, 0x51 }, // 0x9x and 0xbx
256 { 0x11, 0x01, 0x44, 0x44, 0x05, 0x15, 0x10, 0x05 }, // 0xcx and 0xex
257 { unk1, 0x14, 0x05, unk1, 0x01, 0x41, 0x04, 0x40 }, // 0xdx and 0xfx
258 };
259
260 for (int i = 0; i < 0x8000; i++)
261 {
262 uint8_t x = rom[i];
263
264 uint8_t row = (BIT(x, 4) + (BIT(x, 6) << 1) + (BIT(x, 7) << 2));
265
266 uint8_t xor_v = x & 0x07;
267
268 switch(i & 0x01)
269 {
270 case 0x00: x ^= xor_table_00[row][xor_v]; break;
271 case 0x01: x ^= xor_table_01[row][xor_v]; break;
272 }
273
274 m_decrypted_opcodes[i] = x;
275 }
276 }
277
278 /*************************************
279 *
280 * Shared RAM handling
281 *
282 *************************************/
283
route16_sharedram_w(offs_t offset,uint8_t data)284 template<bool cpu1> void route16_state::route16_sharedram_w(offs_t offset, uint8_t data)
285 {
286 m_sharedram[offset] = data;
287
288 // 4313-4319 are used in Route 16 as triggers to wake the other CPU
289 if (offset >= 0x0313 && offset <= 0x0319 && data == 0xff)
290 {
291 // Let the other CPU run
292 (cpu1 ? m_cpu1 : m_cpu2)->yield();
293 }
294 }
295
296
297
298 /*************************************
299 *
300 * Protection handling
301 *
302 *************************************/
303
routex_prot_read()304 uint8_t route16_state::routex_prot_read()
305 {
306 if (m_cpu1->pc() == 0x2f) return 0xfb;
307
308 logerror ("cpu '%s' (PC=%08X): unmapped prot read\n", m_cpu1->tag(), m_cpu1->pc());
309 return 0x00;
310 }
311
312 // never called, see notes.
route16_prot_read()313 uint8_t route16_state::route16_prot_read()
314 {
315 m_protection_data++;
316 return (1 << ((m_protection_data >> 1) & 7));
317 }
318
319
320
321 /*************************************
322 *
323 * Stratovox's extra sound effects
324 *
325 *************************************/
326
stratvox_sn76477_w(uint8_t data)327 void route16_state::stratvox_sn76477_w(uint8_t data)
328 {
329 /***************************************************************
330 * AY8910 output bits are connected to...
331 * 7 - direct: 5V * 30k/(100+30k) = 1.15V - via DAC??
332 * 6 - SN76477 mixer C
333 * 5 - SN76477 mixer B
334 * 4 - SN76477 mixer A
335 * 3 - SN76477 envelope 2
336 * 2 - SN76477 envelope 1
337 * 1 - SN76477 vco
338 * 0 - SN76477 enable
339 ***************************************************************/
340 m_sn->enable_w((data >> 0) & 1);
341 m_sn->vco_w((data >> 1) & 1);
342 m_sn->envelope_1_w((data >> 2) & 1);
343 m_sn->envelope_2_w((data >> 3) & 1);
344 m_sn->mixer_a_w((data >> 4) & 1);
345 m_sn->mixer_b_w((data >> 5) & 1);
346 m_sn->mixer_c_w((data >> 6) & 1);
347 }
348
349
350
351 /***************************************************
352 *
353 * Jongputer and T.T Mahjong's multiplexed ports
354 *
355 ***************************************************/
356
jongpute_input_port_matrix_w(uint8_t data)357 void route16_state::jongpute_input_port_matrix_w(uint8_t data)
358 {
359 m_jongpute_port_select = data;
360 }
361
362
jongpute_p1_matrix_r()363 uint8_t route16_state::jongpute_p1_matrix_r()
364 {
365 uint8_t ret = 0;
366
367 switch (m_jongpute_port_select)
368 {
369 case 1: ret = m_key[0]->read(); break;
370 case 2: ret = m_key[1]->read(); break;
371 case 4: ret = m_key[2]->read(); break;
372 case 8: ret = m_key[3]->read(); break;
373 default: break;
374 }
375
376 return ret;
377 }
378
jongpute_p2_matrix_r()379 uint8_t route16_state::jongpute_p2_matrix_r()
380 {
381 uint8_t ret = 0;
382
383 switch (m_jongpute_port_select)
384 {
385 case 1: ret = m_key[4]->read(); break;
386 case 2: ret = m_key[5]->read(); break;
387 case 4: ret = m_key[6]->read(); break;
388 case 8: ret = m_key[7]->read(); break;
389 default: break;
390 }
391
392 return ret;
393 }
394
395
396 /***************************************************************************
397 guessing that the unconnected IN3 and OUT2 on the stratvox schematic
398 are hooked up for speakres and spacecho to somehow read the variable
399 resistors (eg a voltage ramp), using a write to OUT2 as a trigger
400 and then bits 0-2 of IN3 going low when each pot "matches". the VRx
401 values can be seen when IN0=0x55 and p1b1 is held during power on.
402 this would then be checking that the sounds are mixed correctly.
403 ***************************************************************************/
404
speakres_in3_r()405 uint8_t route16_state::speakres_in3_r()
406 {
407 int bit2=4, bit1=2, bit0=1;
408
409 /* just using a counter, the constants are the number of reads
410 before going low, each read is 40 cycles apart. the constants
411 were chosen based on the startup tests and for vr0=vr2 */
412 m_speakres_vrx++;
413 if(m_speakres_vrx>0x300) bit0=0; /* VR0 100k ohm - speech */
414 if(m_speakres_vrx>0x200) bit1=0; /* VR1 50k ohm - main volume */
415 if(m_speakres_vrx>0x300) bit2=0; /* VR2 100k ohm - explosion */
416
417 return 0xf8|bit2|bit1|bit0;
418 }
419
speakres_out2_w(uint8_t data)420 void route16_state::speakres_out2_w(uint8_t data)
421 {
422 m_speakres_vrx=0;
423 }
424
425
426
427 /*************************************
428 *
429 * CPU memory maps
430 *
431 *************************************/
432
route16_cpu1_map(address_map & map)433 void route16_state::route16_cpu1_map(address_map &map)
434 {
435 map(0x0000, 0x2fff).rom();
436 map(0x3000, 0x3001).r(FUNC(route16_state::route16_prot_read));
437 map(0x4000, 0x43ff).ram().w(FUNC(route16_state::route16_sharedram_w<true>)).share("sharedram");
438 map(0x4800, 0x4800).portr("DSW").w(FUNC(route16_state::out0_w));
439 map(0x5000, 0x5000).portr("P1").w(FUNC(route16_state::out1_w));
440 map(0x5800, 0x5800).portr("P2");
441 map(0x8000, 0xbfff).ram().share("videoram1");
442 }
443
444
routex_cpu1_map(address_map & map)445 void route16_state::routex_cpu1_map(address_map &map)
446 {
447 map(0x0000, 0x3fff).rom();
448 map(0x4000, 0x43ff).ram().w(FUNC(route16_state::route16_sharedram_w<true>)).share("sharedram");
449 map(0x4800, 0x4800).portr("DSW").w(FUNC(route16_state::out0_w));
450 map(0x5000, 0x5000).portr("P1").w(FUNC(route16_state::out1_w));
451 map(0x5800, 0x5800).portr("P2");
452 map(0x6400, 0x6400).r(FUNC(route16_state::routex_prot_read));
453 map(0x8000, 0xbfff).ram().share("videoram1");
454 }
455
456
stratvox_cpu1_map(address_map & map)457 void route16_state::stratvox_cpu1_map(address_map &map)
458 {
459 map(0x0000, 0x3fff).rom();
460 map(0x4000, 0x43ff).ram().share("sharedram");
461 map(0x4800, 0x4800).portr("DSW").w(FUNC(route16_state::out0_w));
462 map(0x5000, 0x5000).portr("P1").w(FUNC(route16_state::out1_w));
463 map(0x5800, 0x5800).portr("P2");
464 map(0x8000, 0xbfff).ram().share("videoram1");
465 }
466
467
speakres_cpu1_map(address_map & map)468 void route16_state::speakres_cpu1_map(address_map &map)
469 {
470 map(0x0000, 0x3fff).rom();
471 map(0x4000, 0x43ff).ram().share("sharedram");
472 map(0x4800, 0x4800).portr("DSW").w(FUNC(route16_state::out0_w));
473 map(0x5000, 0x5000).portr("P1").w(FUNC(route16_state::out1_w));
474 map(0x5800, 0x5800).portr("P2").w(FUNC(route16_state::speakres_out2_w));
475 map(0x6000, 0x6000).r(FUNC(route16_state::speakres_in3_r));
476 map(0x8000, 0xbfff).ram().share("videoram1");
477 }
478
479
jongpute_cpu1_map(address_map & map)480 void route16_state::jongpute_cpu1_map(address_map &map)
481 {
482 map(0x0000, 0x3fff).rom();
483 map(0x4000, 0x43ff).ram().share("sharedram");
484 map(0x4800, 0x4800).portr("DSW").w(FUNC(route16_state::out0_w));
485 map(0x5000, 0x5000).r(FUNC(route16_state::jongpute_p2_matrix_r)).w(FUNC(route16_state::out1_w));
486 map(0x5800, 0x5800).rw(FUNC(route16_state::jongpute_p1_matrix_r), FUNC(route16_state::jongpute_input_port_matrix_w));
487 map(0x6800, 0x6800).w("ay8910", FUNC(ay8910_device::data_w));
488 map(0x6900, 0x6900).w("ay8910", FUNC(ay8910_device::address_w));
489 map(0x8000, 0xbfff).ram().share("videoram1");
490 }
491
vscompmj_cpu1_map(address_map & map)492 void route16_state::vscompmj_cpu1_map(address_map &map)
493 {
494 jongpute_cpu1_map(map);
495
496 map(0x6900, 0x6900).r("ay8910", FUNC(ay8910_device::data_r)); // TODO: check this, stuck notes
497 map(0x7000, 0x7fff).rom();
498 }
499
vscompmj_decrypted_opcodes(address_map & map)500 void route16_state::vscompmj_decrypted_opcodes(address_map &map)
501 {
502 map(0x0000, 0x7fff).rom().share("decrypted_opcodes");
503 }
504
505
route16_cpu2_map(address_map & map)506 void route16_state::route16_cpu2_map(address_map &map)
507 {
508 map(0x0000, 0x1fff).rom();
509 map(0x4000, 0x43ff).ram().w(FUNC(route16_state::route16_sharedram_w<false>)).share("sharedram");
510 map(0x8000, 0xbfff).ram().share("videoram2");
511 }
512
513
stratvox_cpu2_map(address_map & map)514 void route16_state::stratvox_cpu2_map(address_map &map)
515 {
516 map(0x0000, 0x1fff).rom();
517 map(0x2800, 0x2800).w("dac", FUNC(dac_byte_interface::data_w));
518 map(0x4000, 0x43ff).ram().share("sharedram");
519 map(0x8000, 0xbfff).ram().share("videoram2");
520 }
521
522
cpu1_io_map(address_map & map)523 void route16_state::cpu1_io_map(address_map &map)
524 {
525 map.global_mask(0x1ff);
526 map(0x0000, 0x0000).mirror(0x00ff).w("ay8910", FUNC(ay8910_device::data_w));
527 map(0x0100, 0x0100).mirror(0x00ff).w("ay8910", FUNC(ay8910_device::address_w));
528 }
529
530
531
532 /*************************************
533 *
534 * Input ports
535 *
536 *************************************/
537
538 static INPUT_PORTS_START( route16 )
539 PORT_START("DSW") /* DSW 1 */
DEF_STR(Lives)540 PORT_DIPNAME( 0x01, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("DSW:!1")
541 PORT_DIPSETTING( 0x00, "3" )
542 PORT_DIPSETTING( 0x01, "5" )
543 PORT_DIPUNUSED_DIPLOC( 0x02, IP_ACTIVE_HIGH, "DSW:!2" ) // Manual says unused
544 PORT_DIPUNUSED_DIPLOC( 0x04, IP_ACTIVE_HIGH, "DSW:!3" ) // Manual says unused
545 PORT_DIPNAME( 0x18, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSW:!4,!5")
546 PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) )
547 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
548 PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) )
549 PORT_DIPSETTING( 0x18, DEF_STR( 2C_1C ) ) // Same as 0x08
550 PORT_DIPNAME( 0x20, 0x20, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("DSW:!6")
551 PORT_DIPSETTING( 0x20, DEF_STR( Upright ) )
552 PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
553 PORT_DIPNAME( 0x40, 0x00, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSW:!7")
554 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
555 PORT_DIPSETTING( 0x40, DEF_STR( On ) )
556 PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSW:!8")
557 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
558 PORT_DIPSETTING( 0x80, DEF_STR( On ) )
559
560 PORT_START("P1") /* Input Port 1 */
561 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_4WAY
562 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY
563 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_4WAY
564 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_4WAY
565 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
566 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
567 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SERVICE1 )
568 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 )
569
570 PORT_START("P2") /* Input Port 2 */
571 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL
572 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL
573 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL
574 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL
575 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
576 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
577 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
578 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START1 )
579 INPUT_PORTS_END
580
581
582 static INPUT_PORTS_START( route16a )
583 PORT_INCLUDE( route16 )
584
585 PORT_MODIFY("DSW")
586 PORT_DIPNAME( 0x18, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSW:!4,!5")
587 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
588 PORT_DIPSETTING( 0x08, DEF_STR( 1C_1C ) ) // same as 0x00
589 PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) )
590 PORT_DIPSETTING( 0x18, DEF_STR( 1C_2C ) ) // same as 0x10
591 INPUT_PORTS_END
592
593
594 static INPUT_PORTS_START( stratvox )
595 PORT_START("DSW") /* IN0 */
596 PORT_DIPNAME( 0x01, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("DSW:!1")
597 PORT_DIPSETTING( 0x00, "3" )
598 PORT_DIPSETTING( 0x01, "5" )
599 PORT_DIPNAME( 0x02, 0x00, "Replenish Astronauts" ) PORT_DIPLOCATION("DSW:!2")
600 PORT_DIPSETTING( 0x00, DEF_STR( No ) )
601 PORT_DIPSETTING( 0x02, DEF_STR( Yes ) )
602 PORT_DIPNAME( 0x0c, 0x00, "2 Attackers At Wave" ) PORT_DIPLOCATION("DSW:!3,!4")
603 PORT_DIPSETTING( 0x00, "2" )
604 PORT_DIPSETTING( 0x04, "3" )
605 PORT_DIPSETTING( 0x08, "4" )
606 PORT_DIPSETTING( 0x0c, "5" )
607 PORT_DIPNAME( 0x10, 0x00, "Astronauts Kidnapped" ) PORT_DIPLOCATION("DSW:!5")
608 PORT_DIPSETTING( 0x00, "Less Often" )
609 PORT_DIPSETTING( 0x10, "More Often" )
610 PORT_DIPNAME( 0x20, 0x20, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("DSW:!6")
611 PORT_DIPSETTING( 0x20, DEF_STR( Upright ) )
612 PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
613 PORT_DIPNAME( 0x40, 0x00, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSW:!7")
614 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
615 PORT_DIPSETTING( 0x40, DEF_STR( On ) )
616 PORT_DIPNAME( 0x80, 0x00, "Demo Voices" ) PORT_DIPLOCATION("DSW:!8")
617 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
618 PORT_DIPSETTING( 0x80, DEF_STR( On ) )
619
620 PORT_START("P1") /* IN1 */
621 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY
622 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY
623 PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
624 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
625 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
626 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SERVICE1 )
627 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 )
628
629 PORT_START("P2") /* IN2 */
630 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2)
631 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2)
632 PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
633 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
634 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
635 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
636 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START1 )
637 INPUT_PORTS_END
638
639
640 static INPUT_PORTS_START( speakres )
641 PORT_START("DSW") /* IN0 */
642 PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("DSW:!1,!2")
643 PORT_DIPSETTING( 0x00, "3" )
644 PORT_DIPSETTING( 0x01, "4" )
645 PORT_DIPSETTING( 0x02, "5" )
646 PORT_DIPSETTING( 0x03, "6" )
647 PORT_DIPNAME( 0x0c, 0x00, "2 Attackers At Wave" ) PORT_DIPLOCATION("DSW:!3,!4")
648 PORT_DIPSETTING( 0x00, "2" )
649 PORT_DIPSETTING( 0x04, "3" )
650 PORT_DIPSETTING( 0x08, "4" )
651 PORT_DIPSETTING( 0x0c, "5" )
652 PORT_DIPNAME( 0x10, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("DSW:!5")
653 PORT_DIPSETTING( 0x00, "5000" )
654 PORT_DIPSETTING( 0x10, "8000" )
655 PORT_DIPNAME( 0x20, 0x20, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("DSW:!6")
656 PORT_DIPSETTING( 0x20, DEF_STR( Upright ) )
657 PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
658 PORT_DIPNAME( 0x40, 0x00, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSW:!7")
659 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
660 PORT_DIPSETTING( 0x40, DEF_STR( On ) )
661 PORT_DIPNAME( 0x80, 0x00, "Demo Voices" ) PORT_DIPLOCATION("DSW:!8")
662 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
663 PORT_DIPSETTING( 0x80, DEF_STR( On ) )
664
665 PORT_START("P1") /* IN1 */
666 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY
667 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY
668 PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
669 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
670 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
671 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SERVICE1 )
672 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 )
673
674 PORT_START("P2") /* IN2 */
675 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2)
676 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2)
677 PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
678 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
679 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
680 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
681 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START1 )
682 INPUT_PORTS_END
683
684
685 static INPUT_PORTS_START( spacecho )
686 PORT_START("DSW") /* IN0 */
687 PORT_DIPNAME( 0x01, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("DSW:!1")
688 PORT_DIPSETTING( 0x00, "3" )
689 PORT_DIPSETTING( 0x01, "5" )
690 PORT_DIPNAME( 0x02, 0x00, "Replenish Astronauts" ) PORT_DIPLOCATION("DSW:!2")
691 PORT_DIPSETTING( 0x02, DEF_STR( No ) )
692 PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
693 PORT_DIPNAME( 0x0c, 0x00, "2 Attackers At Wave" ) PORT_DIPLOCATION("DSW:!3,!4")
694 PORT_DIPSETTING( 0x00, "2" )
695 PORT_DIPSETTING( 0x04, "3" )
696 PORT_DIPSETTING( 0x08, "4" )
697 PORT_DIPSETTING( 0x0c, "5" )
698 PORT_DIPNAME( 0x10, 0x00, "Astronauts Kidnapped" ) PORT_DIPLOCATION("DSW:!5")
699 PORT_DIPSETTING( 0x00, "Less Often" )
700 PORT_DIPSETTING( 0x10, "More Often" )
701 PORT_DIPNAME( 0x20, 0x20, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("DSW:!6")
702 PORT_DIPSETTING( 0x20, DEF_STR( Upright ) )
703 PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
704 PORT_DIPNAME( 0x40, 0x00, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSW:!7")
705 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
706 PORT_DIPSETTING( 0x40, DEF_STR( On ) )
707 PORT_DIPNAME( 0x80, 0x00, "Demo Voices" ) PORT_DIPLOCATION("DSW:!8")
708 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
709 PORT_DIPSETTING( 0x80, DEF_STR( On ) )
710
711 PORT_START("P1") /* IN1 */
712 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY
713 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY
714 PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
715 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
716 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
717 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SERVICE1 )
718 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 )
719
720 PORT_START("P2") /* IN2 */
721 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2)
722 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2)
723 PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
724 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
725 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
726 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
727 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START1 )
728 INPUT_PORTS_END
729
730
731 static INPUT_PORTS_START( jongpute )
732 PORT_START("DSW") /* IN0 */
733 PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW:!1")
734 PORT_DIPSETTING( 0x00, DEF_STR( Off) )
735 PORT_DIPSETTING( 0x01, DEF_STR( On ) )
736 PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW:!2")
737 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
738 PORT_DIPSETTING( 0x02, DEF_STR( On ) )
739 PORT_DIPNAME( 0x0c, 0x08, "Timer Decrement Speed" ) PORT_DIPLOCATION("DSW:!3,!4")
740 PORT_DIPSETTING( 0x00, "Very Fast" )
741 PORT_DIPSETTING( 0x04, "Fast" )
742 PORT_DIPSETTING( 0x08, "Normal" )
743 PORT_DIPSETTING( 0x0c, "Slow" )
744 PORT_DIPNAME( 0x10, 0x0, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW:!5")
745 PORT_DIPSETTING( 0x0, DEF_STR( Off ) )
746 PORT_DIPSETTING( 0x10, DEF_STR( On ) )
747 PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW:!6")
748 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
749 PORT_DIPSETTING( 0x20, DEF_STR( On ) )
750 PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW:!7")
751 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
752 PORT_DIPSETTING( 0x40, DEF_STR( On ) )
753 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW:!8")
754 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
755 PORT_DIPSETTING( 0x80, DEF_STR( On ) )
756
757 PORT_START("KEY0")
758 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_MAHJONG_A )
759 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_E )
760 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_I )
761 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_M )
762 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_KAN )
763 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START1 )
764 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
765 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
766
767 PORT_START("KEY1")
768 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_MAHJONG_B )
769 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_F )
770 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_J )
771 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_N )
772 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_REACH )
773 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START2 )
774 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
775 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
776
777 PORT_START("KEY2")
778 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_MAHJONG_C )
779 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_G )
780 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_K )
781 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_CHI )
782 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_RON )
783 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
784 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
785 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
786
787 PORT_START("KEY3")
788 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_MAHJONG_D )
789 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_H )
790 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_L )
791 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_PON )
792 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
793 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
794 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
795 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
796
797 PORT_START("KEY4")
798 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_MAHJONG_A ) PORT_COCKTAIL
799 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_E ) PORT_COCKTAIL
800 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_I ) PORT_COCKTAIL
801 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_M ) PORT_COCKTAIL
802 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_KAN ) PORT_COCKTAIL
803 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
804 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
805 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
806
807 PORT_START("KEY5")
808 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_MAHJONG_B ) PORT_COCKTAIL
809 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_F ) PORT_COCKTAIL
810 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_J ) PORT_COCKTAIL
811 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_N ) PORT_COCKTAIL
812 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_REACH ) PORT_COCKTAIL
813 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
814 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
815 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
816
817 PORT_START("KEY6")
818 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_MAHJONG_C ) PORT_COCKTAIL
819 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_G ) PORT_COCKTAIL
820 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_K ) PORT_COCKTAIL
821 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_CHI ) PORT_COCKTAIL
822 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_RON ) PORT_COCKTAIL
823 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
824 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
825 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
826
827 PORT_START("KEY7")
828 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_MAHJONG_D ) PORT_COCKTAIL
829 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_H ) PORT_COCKTAIL
830 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_L ) PORT_COCKTAIL
831 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_PON ) PORT_COCKTAIL
832 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
833 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
834 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
835 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 )
836 INPUT_PORTS_END
837
838
839
840 /*************************************
841 *
842 * Machine configs
843 *
844 *************************************/
845
846 void route16_state::route16(machine_config &config)
847 {
848 /* basic machine hardware */
849 Z80(config, m_cpu1, 10_MHz_XTAL / 4); // verified on PCB
850 m_cpu1->set_addrmap(AS_PROGRAM, &route16_state::route16_cpu1_map);
851 m_cpu1->set_addrmap(AS_IO, &route16_state::cpu1_io_map);
852 m_cpu1->set_vblank_int("screen", FUNC(route16_state::irq0_line_hold));
853
854 Z80(config, m_cpu2, 10_MHz_XTAL / 4); // verified on PCB
855 m_cpu2->set_addrmap(AS_PROGRAM, &route16_state::route16_cpu2_map);
856
857 /* video hardware */
858 SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
859 m_screen->set_size(256, 256);
860 m_screen->set_visarea(0, 256-1, 0, 256-1);
861 m_screen->set_refresh_hz(57);
862 m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
863 m_screen->set_screen_update(FUNC(route16_state::screen_update_route16));
864
865 PALETTE(config, m_palette, palette_device::RGB_3BIT);
866
867 /* sound hardware */
868 SPEAKER(config, "speaker").front_center();
869 AY8910(config, "ay8910", 10_MHz_XTAL / 8).add_route(ALL_OUTPUTS, "speaker", 0.5); // verified on PCB
870 }
871
872
routex(machine_config & config)873 void route16_state::routex(machine_config &config)
874 {
875 route16(config);
876
877 /* basic machine hardware */
878 m_cpu1->set_addrmap(AS_PROGRAM, &route16_state::routex_cpu1_map);
879 }
880
881
stratvox(machine_config & config)882 void route16_state::stratvox(machine_config &config)
883 {
884 route16(config);
885
886 /* basic machine hardware */
887 m_cpu1->set_addrmap(AS_PROGRAM, &route16_state::stratvox_cpu1_map);
888 m_cpu2->set_addrmap(AS_PROGRAM, &route16_state::stratvox_cpu2_map);
889
890 /* video hardware */
891 m_screen->set_screen_update(FUNC(route16_state::screen_update_jongpute));
892
893 /* sound hardware */
894 subdevice<ay8910_device>("ay8910")->port_a_write_callback().set(FUNC(route16_state::stratvox_sn76477_w)); // SN76477 commands (SN76477 not populated on Route 16 PCB)
895
896 SN76477(config, m_sn);
897 m_sn->set_noise_params(RES_K(47), RES_K(150), CAP_U(0.001));
898 m_sn->set_decay_res(RES_M(3.3));
899 m_sn->set_attack_params(CAP_U(1), RES_K(4.7));
900 m_sn->set_amp_res(RES_K(200));
901 m_sn->set_feedback_res(RES_K(55));
902 m_sn->set_vco_params(5.0 * 2/ (2 + 10), CAP_U(0.022), RES_K(100));
903 m_sn->set_pitch_voltage(5.0);
904 m_sn->set_slf_params(CAP_U(1.0), RES_K(75));
905 m_sn->set_oneshot_params(CAP_U(2.2), RES_K(4.7));
906 m_sn->set_vco_mode(0);
907 m_sn->set_mixer_params(0, 0, 0);
908 m_sn->set_envelope_params(0, 0);
909 m_sn->set_enable(1);
910 m_sn->add_route(ALL_OUTPUTS, "speaker", 0.5);
911
912 DAC_8BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.25); // unknown DAC
913 }
914
speakres(machine_config & config)915 void route16_state::speakres(machine_config &config)
916 {
917 stratvox(config);
918
919 /* basic machine hardware */
920 m_cpu1->set_addrmap(AS_PROGRAM, &route16_state::speakres_cpu1_map);
921
922 MCFG_MACHINE_START_OVERRIDE(route16_state, speakres)
923 }
924
spacecho(machine_config & config)925 void route16_state::spacecho(machine_config &config)
926 {
927 speakres(config);
928
929 /* basic machine hardware */
930 m_cpu2->set_periodic_int(FUNC(route16_state::irq0_line_hold), attotime::from_hz(48*60));
931 }
932
jongpute(machine_config & config)933 void route16_state::jongpute(machine_config &config)
934 {
935 route16(config);
936 m_cpu1->set_addrmap(AS_PROGRAM, &route16_state::jongpute_cpu1_map);
937 m_cpu1->set_addrmap(AS_IO, address_map_constructor());
938
939 MCFG_MACHINE_START_OVERRIDE(route16_state, jongpute)
940
941 /* video hardware */
942 m_screen->set_screen_update(FUNC(route16_state::screen_update_jongpute));
943
944 PALETTE(config.replace(), m_palette, palette_device::BGR_3BIT);
945 }
946
vscompmj(machine_config & config)947 void route16_state::vscompmj(machine_config &config)
948 {
949 jongpute(config);
950
951 m_cpu1->set_addrmap(AS_PROGRAM, &route16_state::vscompmj_cpu1_map);
952 m_cpu1->set_addrmap(AS_OPCODES, &route16_state::vscompmj_decrypted_opcodes);
953 }
954
955 /*************************************
956 *
957 * ROM definitions
958 *
959 *************************************/
960
961 ROM_START( route16 )
962 ROM_REGION( 0x10000, "cpu1", 0 )
963 ROM_LOAD( "stvg54.a0", 0x0000, 0x0800, CRC(b8471cdc) SHA1(2a890782e15fa74a6c706b06f91216f427435700) )
964 ROM_LOAD( "stvg55.a1", 0x0800, 0x0800, CRC(3ec52fe5) SHA1(451969b5caedd665231ef78cf262679d6d4c8507) )
965 ROM_LOAD( "stvg56.a2", 0x1000, 0x0800, CRC(a8e92871) SHA1(68a709c14309d2b617997b76ae9d7b80fd326f39) )
966 ROM_LOAD( "stvg57.a3", 0x1800, 0x0800, CRC(a0fc9fc5) SHA1(7013750c1b3d403b12eac10282a930538ed9c73e) )
967 ROM_LOAD( "stvg58.a4", 0x2000, 0x0800, CRC(cc95c02c) SHA1(c0b85070883463a98098d72282c52e14822c204e) )
968 ROM_LOAD( "stvg59.a5", 0x2800, 0x0800, CRC(a39ef648) SHA1(866095d9880b60b01f7ca66b332f5f6c4b41a5ac) )
969
970 ROM_REGION( 0x10000, "cpu2", 0 )
971 ROM_LOAD( "stvg60.b0", 0x0000, 0x0800, CRC(fef605f3) SHA1(bfbffa0ded3e285c034f0ad832864021ef3f2256) )
972 ROM_LOAD( "stvg61.b1", 0x0800, 0x0800, CRC(d0d6c189) SHA1(75cec891e20cf05aae354c8950857aea83c6dadc) )
973 ROM_LOAD( "stvg62.b2", 0x1000, 0x0800, CRC(defc5797) SHA1(aec8179e647de70016e0e63b720f932752adacc1) )
974 ROM_LOAD( "stvg63.b3", 0x1800, 0x0800, CRC(88d94a66) SHA1(163e952ada7c05110d1f1c681bd57d3b9ea8866e) )
975
976 ROM_REGION( 0x800, "mcu", 0 ) // on a small daughterboard inserted at a6
977 ROM_LOAD( "mb8841", 0x000, 0x800, NO_DUMP )
978
979 ROM_REGION( 0x0200, "proms", 0 )
980 // The upper 128 bytes are 0's, used by the hardware to blank the display
981 ROM_LOAD( "mb7052.59", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) // top bitmap
982 ROM_LOAD( "mb7052.61", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) // bottom bitmap
983 ROM_END
984
985 ROM_START( route16a )
986 ROM_REGION( 0x10000, "cpu1", 0 )
987 ROM_LOAD( "tvg54.a0", 0x0000, 0x0800, CRC(aef9ffc1) SHA1(178d23e4963336ded93c13cb17940a4ae98270c5) )
988 ROM_LOAD( "tvg55.a1", 0x0800, 0x0800, CRC(389bc077) SHA1(b0606f6e647e81ceae7148bda96bd4673a51e823) )
989 ROM_LOAD( "tvg56.a2", 0x1000, 0x0800, CRC(1065a468) SHA1(4a707a42fb5a718043c173cb98ff3523eb274ccc) )
990 ROM_LOAD( "tvg57.a3", 0x1800, 0x0800, CRC(0b1987f3) SHA1(9b8abd6ec1ae15ca0d5e4de6b8a7ebf6c929d767) )
991 ROM_LOAD( "tvg58.a4", 0x2000, 0x0800, CRC(f67d853a) SHA1(7479e84082e78f8670cc50858ce6a006d3063413) )
992 ROM_LOAD( "tvg59.a5", 0x2800, 0x0800, CRC(d85cf758) SHA1(5af21250ee44ab1a43b844ede5a777a3d33b78b5) )
993
994 ROM_REGION( 0x10000, "cpu2", 0 )
995 ROM_LOAD( "tvg60.b0", 0x0000, 0x0800, CRC(0f9588a7) SHA1(dfaffec4dbabd98cdc21a416bd2966d9d3ae6ad1) )
996 ROM_LOAD( "tvg61.b1", 0x0800, 0x0800, CRC(2b326cf9) SHA1(c6602a9440a982c39f5836c6ab72283b6f9241be) )
997 ROM_LOAD( "tvg62.b2", 0x1000, 0x0800, CRC(529cad13) SHA1(b533d20df1f2580e237c3d60bfe3483486ad9a48) )
998 ROM_LOAD( "tvg63.b3", 0x1800, 0x0800, CRC(3bd8b899) SHA1(bc0c7909dbf5ea85eba5a1bb815fdd98c3aa794e) )
999
1000 ROM_REGION( 0x800, "mcu", 0 ) // on a small daughterboard inserted at a6
1001 ROM_LOAD( "mb8841", 0x000, 0x800, NO_DUMP )
1002
1003 ROM_REGION( 0x0200, "proms", 0 )
1004 /* The upper 128 bytes are 0's, used by the hardware to blank the display */
1005 ROM_LOAD( "mb7052.59", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
1006 ROM_LOAD( "mb7052.61", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
1007 ROM_END
1008
1009 ROM_START( route16c )
1010 ROM_REGION( 0x10000, "cpu1", 0 )
1011 ROM_LOAD( "route16.a0", 0x0000, 0x0800, CRC(8f9101bd) SHA1(b2c0156d41e295282387fb85fc272b031a6d1b64) )
1012 ROM_LOAD( "route16.a1", 0x0800, 0x0800, CRC(389bc077) SHA1(b0606f6e647e81ceae7148bda96bd4673a51e823) )
1013 ROM_LOAD( "route16.a2", 0x1000, 0x0800, CRC(1065a468) SHA1(4a707a42fb5a718043c173cb98ff3523eb274ccc) )
1014 ROM_LOAD( "route16.a3", 0x1800, 0x0800, CRC(0b1987f3) SHA1(9b8abd6ec1ae15ca0d5e4de6b8a7ebf6c929d767) )
1015 ROM_LOAD( "route16.a4", 0x2000, 0x0800, CRC(f67d853a) SHA1(7479e84082e78f8670cc50858ce6a006d3063413) )
1016 ROM_LOAD( "route16.a5", 0x2800, 0x0800, CRC(d85cf758) SHA1(5af21250ee44ab1a43b844ede5a777a3d33b78b5) )
1017
1018 ROM_REGION( 0x10000, "cpu2", 0 )
1019 ROM_LOAD( "route16.b0", 0x0000, 0x0800, CRC(0f9588a7) SHA1(dfaffec4dbabd98cdc21a416bd2966d9d3ae6ad1) )
1020 ROM_LOAD( "route16.b1", 0x0800, 0x0800, CRC(2b326cf9) SHA1(c6602a9440a982c39f5836c6ab72283b6f9241be) )
1021 ROM_LOAD( "route16.b2", 0x1000, 0x0800, CRC(529cad13) SHA1(b533d20df1f2580e237c3d60bfe3483486ad9a48) )
1022 ROM_LOAD( "route16.b3", 0x1800, 0x0800, CRC(3bd8b899) SHA1(bc0c7909dbf5ea85eba5a1bb815fdd98c3aa794e) )
1023
1024 ROM_REGION( 0x800, "mcu", 0 ) // on a small daughterboard inserted at a6
1025 ROM_LOAD( "mb8841", 0x000, 0x800, NO_DUMP )
1026
1027 ROM_REGION( 0x0200, "proms", 0 ) /* Intersil IM5623CPE proms compatible with 82s129 */
1028 /* The upper 128 bytes are 0's, used by the hardware to blank the display */
1029 ROM_LOAD( "im5623.f10", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
1030 ROM_LOAD( "im5623.f12", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
1031 ROM_END
1032
1033 ROM_START( route16b )
1034 ROM_REGION( 0x10000, "cpu1", 0 )
1035 ROM_LOAD( "vg-54", 0x0000, 0x0800, CRC(0c966319) SHA1(2f57e9a30dab864bbee2ccb0107c1b4212c5abaf) )
1036 ROM_LOAD( "vg-55", 0x0800, 0x0800, CRC(a6a8c212) SHA1(a4a695d401b1e495c863c6938296a99592df0e7d) )
1037 ROM_LOAD( "vg-56", 0x1000, 0x0800, CRC(5c74406a) SHA1(f106c27da6cac597afbabdef3ec7fa7d203905b0) )
1038 ROM_LOAD( "vg-57", 0x1800, 0x0800, CRC(313e68ab) SHA1(01fa83898123eb92a14bffc6fe774e00b083e86c) )
1039 ROM_LOAD( "vg-58", 0x2000, 0x0800, CRC(40824e3c) SHA1(bc157e6babf00d2119b389fdb9d5822e1c764f51) )
1040 ROM_LOAD( "vg-59", 0x2800, 0x0800, CRC(9313d2c2) SHA1(e08112f44ca454820752800d8b3b6408b73a4284) )
1041
1042 ROM_REGION( 0x10000, "cpu2", 0 )
1043 ROM_LOAD( "route16.b0", 0x0000, 0x0800, CRC(0f9588a7) SHA1(dfaffec4dbabd98cdc21a416bd2966d9d3ae6ad1) )
1044 ROM_LOAD( "vg-61", 0x0800, 0x0800, CRC(b216c88c) SHA1(d011ef9f3727f87ae3482e271a0c2496f76036b4) )
1045 ROM_LOAD( "route16.b2", 0x1000, 0x0800, CRC(529cad13) SHA1(b533d20df1f2580e237c3d60bfe3483486ad9a48) )
1046 ROM_LOAD( "route16.b3", 0x1800, 0x0800, CRC(3bd8b899) SHA1(bc0c7909dbf5ea85eba5a1bb815fdd98c3aa794e) )
1047
1048 ROM_REGION( 0x800, "mcu", 0 ) // on a small daughterboard inserted at a6
1049 ROM_LOAD( "mb8841", 0x000, 0x800, NO_DUMP )
1050
1051 ROM_REGION( 0x0200, "proms", 0 ) /* Intersil IM5623CPE proms compatible with 82s129 */
1052 /* The upper 128 bytes are 0's, used by the hardware to blank the display */
1053 ROM_LOAD( "im5623.f10", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
1054 ROM_LOAD( "im5623.f12", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
1055 ROM_END
1056
1057 ROM_START( route16bl )
1058 ROM_REGION( 0x10000, "cpu1", 0 )
1059 ROM_LOAD( "rt16.0", 0x0000, 0x0800, CRC(b1f0f636) SHA1(f21915ed40ebdf64970fb7e3cd8071ebfc4aa0b5) )
1060 ROM_LOAD( "rt16.1", 0x0800, 0x0800, CRC(3ec52fe5) SHA1(451969b5caedd665231ef78cf262679d6d4c8507) )
1061 ROM_LOAD( "rt16.2", 0x1000, 0x0800, CRC(a8e92871) SHA1(68a709c14309d2b617997b76ae9d7b80fd326f39) )
1062 ROM_LOAD( "rt16.3", 0x1800, 0x0800, CRC(a0fc9fc5) SHA1(7013750c1b3d403b12eac10282a930538ed9c73e) )
1063 ROM_LOAD( "rt16.4", 0x2000, 0x0800, CRC(6dcaf8c4) SHA1(27d84cc29f2b75280678e9c77f270ee39af50228) )
1064 ROM_LOAD( "rt16.5", 0x2800, 0x0800, CRC(63d7b05b) SHA1(d1e3473be283c92063674b9e69575081115bc456) )
1065
1066 ROM_REGION( 0x10000, "cpu2", 0 )
1067 ROM_LOAD( "rt16.6", 0x0000, 0x0800, CRC(fef605f3) SHA1(bfbffa0ded3e285c034f0ad832864021ef3f2256) )
1068 ROM_LOAD( "rt16.7", 0x0800, 0x0800, CRC(d0d6c189) SHA1(75cec891e20cf05aae354c8950857aea83c6dadc) )
1069 ROM_LOAD( "rt16.8", 0x1000, 0x0800, CRC(defc5797) SHA1(aec8179e647de70016e0e63b720f932752adacc1) )
1070 ROM_LOAD( "rt16.9", 0x1800, 0x0800, CRC(88d94a66) SHA1(163e952ada7c05110d1f1c681bd57d3b9ea8866e) )
1071
1072 ROM_REGION( 0x0200, "proms", 0 ) /* Intersil IM5623CPE proms compatible with 82s129 */
1073 /* The upper 128 bytes are 0's, used by the hardware to blank the display */
1074 ROM_LOAD( "im5623.f10", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
1075 ROM_LOAD( "im5623.f12", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
1076 ROM_END
1077
1078 ROM_START( routex )
1079 ROM_REGION( 0x10000, "cpu1", 0 )
1080 ROM_LOAD( "routex01.a0", 0x0000, 0x0800, CRC(99b500e7) SHA1(2561c04a1425d7ac3309faf29fcfde63a0cda4da) )
1081 ROM_LOAD( "rt16.1", 0x0800, 0x0800, CRC(3ec52fe5) SHA1(451969b5caedd665231ef78cf262679d6d4c8507) )
1082 ROM_LOAD( "rt16.2", 0x1000, 0x0800, CRC(a8e92871) SHA1(68a709c14309d2b617997b76ae9d7b80fd326f39) )
1083 ROM_LOAD( "rt16.3", 0x1800, 0x0800, CRC(a0fc9fc5) SHA1(7013750c1b3d403b12eac10282a930538ed9c73e) )
1084 ROM_LOAD( "routex05.a4", 0x2000, 0x0800, CRC(2fef7653) SHA1(ba3477da249ca402d096704e57ea638fde6abe9c) )
1085 ROM_LOAD( "routex06.a5", 0x2800, 0x0800, CRC(a39ef648) SHA1(866095d9880b60b01f7ca66b332f5f6c4b41a5ac) )
1086 ROM_LOAD( "routex07.a6", 0x3000, 0x0800, CRC(89f80c1c) SHA1(dff37e0f2446a99890135891c59dc501866a25cc) )
1087
1088 ROM_REGION( 0x10000, "cpu2", 0 )
1089 ROM_LOAD( "routex11.b0", 0x0000, 0x0800, CRC(b51edd1d) SHA1(1ca10afd6851875c98b1d29aee457234c20ce0bf) )
1090 ROM_LOAD( "rt16.7", 0x0800, 0x0800, CRC(d0d6c189) SHA1(75cec891e20cf05aae354c8950857aea83c6dadc) )
1091 ROM_LOAD( "rt16.8", 0x1000, 0x0800, CRC(defc5797) SHA1(aec8179e647de70016e0e63b720f932752adacc1) )
1092 ROM_LOAD( "rt16.9", 0x1800, 0x0800, CRC(88d94a66) SHA1(163e952ada7c05110d1f1c681bd57d3b9ea8866e) )
1093
1094 ROM_REGION( 0x0200, "proms", 0 ) /* Intersil IM5623CPE proms compatible with 82s129 */
1095 /* The upper 128 bytes are 0's, used by the hardware to blank the display */
1096 ROM_LOAD( "im5623.f10", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
1097 ROM_LOAD( "im5623.f12", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
1098 ROM_END
1099
1100 ROM_START( routexa )
1101 ROM_REGION( 0x10000, "cpu1", 0 )
1102 ROM_LOAD( "r1.bin", 0x0000, 0x0800, CRC(78c819c8) SHA1(41951aef3ad8be53aadb17892b5b3e13be61b50f) ) // unique
1103 ROM_LOAD( "r2.bin", 0x0800, 0x0800, CRC(3ec52fe5) SHA1(451969b5caedd665231ef78cf262679d6d4c8507) )
1104 ROM_LOAD( "r3.bin", 0x1000, 0x0800, CRC(a8e92871) SHA1(68a709c14309d2b617997b76ae9d7b80fd326f39) )
1105 ROM_LOAD( "r4.bin", 0x1800, 0x0800, CRC(a0fc9fc5) SHA1(7013750c1b3d403b12eac10282a930538ed9c73e) )
1106 ROM_LOAD( "r5.bin", 0x2000, 0x0800, CRC(2fef7653) SHA1(ba3477da249ca402d096704e57ea638fde6abe9c) )
1107 ROM_LOAD( "r6.bin", 0x2800, 0x0800, CRC(a39ef648) SHA1(866095d9880b60b01f7ca66b332f5f6c4b41a5ac) )
1108 ROM_LOAD( "r7.bin", 0x3000, 0x0800, CRC(2aeb3102) SHA1(7398dd43b1717aef8dc18210758db9fa828bd92e) ) // unique, FIXED BITS (010x011011111111) and 1ST AND 2ND HALF IDENTICAL, but confirmed on two different PCBs
1109
1110 ROM_REGION( 0x10000, "cpu2", 0 )
1111 ROM_LOAD( "r8.bin", 0x0000, 0x0800, CRC(fef605f3) SHA1(bfbffa0ded3e285c034f0ad832864021ef3f2256) ) // unique
1112 ROM_LOAD( "r9.bin", 0x0800, 0x0800, CRC(d0d6c189) SHA1(75cec891e20cf05aae354c8950857aea83c6dadc) )
1113 ROM_LOAD( "r10.bin", 0x1000, 0x0800, CRC(defc5797) SHA1(aec8179e647de70016e0e63b720f932752adacc1) )
1114 ROM_LOAD( "r11.bin", 0x1800, 0x0800, CRC(88d94a66) SHA1(163e952ada7c05110d1f1c681bd57d3b9ea8866e) )
1115
1116 ROM_REGION( 0x0200, "proms", 0 ) // Intersil IM5623CPE proms compatible with 82s129
1117 // The upper 128 bytes are 0's, used by the hardware to blank the display
1118 ROM_LOAD( "im5623.f10", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) // top bitmap
1119 ROM_LOAD( "im5623.f12", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) // bottom bitmap
1120 ROM_END
1121
1122 ROM_START( speakres )
1123 ROM_REGION( 0x10000, "cpu1", 0 )
1124 ROM_LOAD( "speakres.1", 0x0000, 0x0800, CRC(6026e4ea) SHA1(77975620b489f10e5b5de834e812c2802315e889) )
1125 ROM_LOAD( "speakres.2", 0x0800, 0x0800, CRC(93f0d4da) SHA1(bf3d2931d12a436bb4f0d0556806008ca722f070) )
1126 ROM_LOAD( "speakres.3", 0x1000, 0x0800, CRC(a3874304) SHA1(ca243364d077fa70d6c46b950ba6666617a56cc2) )
1127 ROM_LOAD( "speakres.4", 0x1800, 0x0800, CRC(f484be3a) SHA1(5befa61c5f3a3cde3d7d6cae2130021288ed8454) )
1128 ROM_LOAD( "speakres.5", 0x2000, 0x0800, CRC(61b12a67) SHA1(a1a636ecde16ffdc9f0bb460bd12f945ec66d36f) )
1129 ROM_LOAD( "speakres.6", 0x2800, 0x0800, CRC(220e0ab2) SHA1(9fb4abf50ff28995cb1f7ba807e15eb87127f520) )
1130
1131 ROM_REGION( 0x10000, "cpu2", 0 )
1132 ROM_LOAD( "speakres.7", 0x0000, 0x0800, CRC(d417be13) SHA1(6f1f76a911579b49bb0e1992296e7c3acf2bd517) )
1133 ROM_LOAD( "speakres.8", 0x0800, 0x0800, CRC(52485d60) SHA1(28b708a71d16428d1cd58f3b7aa326ccda85533c) )
1134
1135 ROM_REGION( 0x0200, "proms", 0 ) /* Intersil IM5623CPE proms compatible with 82s129 */
1136 /* The upper 128 bytes are 0's, used by the hardware to blank the display */
1137 ROM_LOAD( "im5623.f10", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
1138 ROM_LOAD( "im5623.f12", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
1139 ROM_END
1140
1141 ROM_START( speakresb )
1142 ROM_REGION( 0x10000, "cpu1", 0 )
1143 ROM_LOAD( "hmi1.27", 0x0000, 0x0800, CRC(6026e4ea) SHA1(77975620b489f10e5b5de834e812c2802315e889) )
1144 ROM_LOAD( "hmi2.28", 0x0800, 0x0800, CRC(93f0d4da) SHA1(bf3d2931d12a436bb4f0d0556806008ca722f070) )
1145 ROM_LOAD( "hmi3.29", 0x1000, 0x0800, CRC(a3874304) SHA1(ca243364d077fa70d6c46b950ba6666617a56cc2) )
1146 ROM_LOAD( "hmi4.30", 0x1800, 0x0800, CRC(f484be3a) SHA1(5befa61c5f3a3cde3d7d6cae2130021288ed8454) )
1147 ROM_LOAD( "hmi5.31", 0x2000, 0x0800, CRC(aa2aaabe) SHA1(eae34bc16ffa1c8dba966c367fae793c52e0cb61) )
1148 ROM_LOAD( "hmi6.32", 0x2800, 0x0800, CRC(220e0ab2) SHA1(9fb4abf50ff28995cb1f7ba807e15eb87127f520) )
1149
1150 ROM_REGION( 0x10000, "cpu2", 0 )
1151 ROM_LOAD( "hmi.33", 0x0000, 0x0800, CRC(beafe7c5) SHA1(058d08b4ded46f71053af6bec5e476e21f240608) )
1152 ROM_LOAD( "hmi.34", 0x0800, 0x0800, CRC(12ecd87b) SHA1(a279711f2a12574126aa626ae2c1acd45660231c) )
1153
1154 ROM_REGION( 0x0200, "proms", 0 ) /* 6301 proms compatible with 82s129 */
1155 /* The upper 128 bytes are 0's, used by the hardware to blank the display */
1156 ROM_LOAD( "hmi.62", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
1157 ROM_LOAD( "hmi.64", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
1158 ROM_END
1159
1160 ROM_START( stratvox )
1161 ROM_REGION( 0x10000, "cpu1", 0 )
1162 ROM_LOAD( "ls01.bin", 0x0000, 0x0800, CRC(bf4d582e) SHA1(456f37e16d037a30dc4c1c460ebf9a248bf1a57c) )
1163 ROM_LOAD( "ls02.bin", 0x0800, 0x0800, CRC(16739dd4) SHA1(cd1f7d1b52ca1ab458d11b969f4f1f5af3ec7353) )
1164 ROM_LOAD( "ls03.bin", 0x1000, 0x0800, CRC(083c28de) SHA1(82e159f218f60e9c06ff78f2e52572f8f5a6c530) )
1165 ROM_LOAD( "ls04.bin", 0x1800, 0x0800, CRC(b0927e3b) SHA1(cc5f030dcbc93d5265dbf17a2425acdb921ab18b) )
1166 ROM_LOAD( "ls05.bin", 0x2000, 0x0800, CRC(ccd25c4e) SHA1(d6d5722d746dd22cecacfea407e798f4531eea99) )
1167 ROM_LOAD( "ls06.bin", 0x2800, 0x0800, CRC(07a907a7) SHA1(0c41eac01ac9fd67ef19752c47414c4bd90324b4) )
1168
1169 ROM_REGION( 0x10000, "cpu2", 0 )
1170 ROM_LOAD( "ls07.bin", 0x0000, 0x0800, CRC(4d333985) SHA1(371405b92b2ee8040e48ec7ad715d1a960746aac) )
1171 ROM_LOAD( "ls08.bin", 0x0800, 0x0800, CRC(35b753fc) SHA1(179e21f531e8be507f1754159590c111be1b44ff) )
1172
1173 ROM_REGION( 0x0200, "proms", 0 ) /* Intersil IM5623CPE proms compatible with 82s129 */
1174 /* The upper 128 bytes are 0's, used by the hardware to blank the display */
1175 ROM_LOAD( "im5623.f10", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
1176 ROM_LOAD( "im5623.f12", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
1177 ROM_END
1178
1179 ROM_START( stratvoxa )
1180 ROM_REGION( 0x10000, "cpu1", 0 )
1181 ROM_LOAD( "sv-1", 0x0000, 0x0800, CRC(bf4d582e) SHA1(456f37e16d037a30dc4c1c460ebf9a248bf1a57c) )
1182 ROM_LOAD( "sv-2", 0x0800, 0x0800, CRC(16739dd4) SHA1(cd1f7d1b52ca1ab458d11b969f4f1f5af3ec7353) )
1183 ROM_LOAD( "sv-3", 0x1000, 0x0800, CRC(083c28de) SHA1(82e159f218f60e9c06ff78f2e52572f8f5a6c530) )
1184 ROM_LOAD( "sv-4", 0x1800, 0x0800, CRC(b0927e3b) SHA1(cc5f030dcbc93d5265dbf17a2425acdb921ab18b) )
1185 ROM_LOAD( "sv-5", 0x2000, 0x0800, CRC(ccd25c4e) SHA1(d6d5722d746dd22cecacfea407e798f4531eea99) )
1186 ROM_LOAD( "sv-6", 0x2800, 0x0800, CRC(07a907a7) SHA1(0c41eac01ac9fd67ef19752c47414c4bd90324b4) )
1187
1188 ROM_REGION( 0x10000, "cpu2", 0 )
1189 ROM_LOAD( "sv-7", 0x0000, 0x0800, CRC(4d333985) SHA1(371405b92b2ee8040e48ec7ad715d1a960746aac) )
1190 ROM_LOAD( "sv-8", 0x0800, 0x0800, CRC(9b2377e0) SHA1(caff09f280701204dbd0dcd093622ed42ceb57c4) ) // Female Voice
1191
1192 ROM_REGION( 0x0200, "proms", 0 ) /* Intersil IM5623CPE proms compatible with 82s129 */
1193 /* The upper 128 bytes are 0's, used by the hardware to blank the display */
1194 ROM_LOAD( "im5623.f10", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
1195 ROM_LOAD( "im5623.f12", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
1196 ROM_END
1197
1198 ROM_START( stratvoxb )
1199 ROM_REGION( 0x10000, "cpu1", 0 )
1200 ROM_LOAD( "j0-1", 0x0000, 0x0800, CRC(93c78274) SHA1(d7c8b5a064eaf96bcfd261b9857f06249477f6b8) )
1201 ROM_LOAD( "j0-2", 0x0800, 0x0800, CRC(93b2b02d) SHA1(f08772d581f9825976199f39cb6d85fb3aa83db0) )
1202 ROM_LOAD( "j0-3", 0x1000, 0x0800, CRC(655facb5) SHA1(1ffb1ed65c358846b3de4ead74e86f94ed6ff9df) )
1203 ROM_LOAD( "j0-4", 0x1800, 0x0800, CRC(b0927e3b) SHA1(cc5f030dcbc93d5265dbf17a2425acdb921ab18b) ) /* Same as ls04.bin of stratvox */
1204 ROM_LOAD( "j0-5", 0x2000, 0x0800, CRC(9d2178d9) SHA1(7b27dbb2add2c9dda4526c6f1bf52307fe2c6335) )
1205 ROM_LOAD( "j0-6", 0x2800, 0x0800, CRC(79118ffc) SHA1(d4659f1773e9d55d81185d6c59881c08528e2ab6) )
1206
1207 ROM_REGION( 0x10000, "cpu2", 0 )
1208 ROM_LOAD( "b0-a", 0x0000, 0x0800, CRC(4d333985) SHA1(371405b92b2ee8040e48ec7ad715d1a960746aac) ) /* Same as ls07.bin of stratvox */
1209 ROM_LOAD( "j0-a", 0x0800, 0x0800, CRC(3416a830) SHA1(9cbe773968e20455be3e107b29cb8d4dc38632a9) )
1210
1211 ROM_REGION( 0x0200, "proms", 0 ) /* Intersil IM5623CPE proms compatible with 82s129 */
1212 /* The upper 128 bytes are 0's, used by the hardware to blank the display */
1213 ROM_LOAD( "im5623.f10", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
1214 ROM_LOAD( "im5623.f12", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
1215 ROM_END
1216
1217 ROM_START( spacecho )
1218 ROM_REGION( 0x10000, "cpu1", 0 )
1219 ROM_LOAD( "rom.a0", 0x0000, 0x0800, CRC(40d74dce) SHA1(891d7fde1d4b0b66c38fa7f8933480e201c68113) )
1220 ROM_LOAD( "rom.a1", 0x0800, 0x0800, CRC(a5f0a34f) SHA1(359e7a9954dedb464f7456cd071db77b2219ab2c) )
1221 ROM_LOAD( "rom.a2", 0x1000, 0x0800, CRC(cbbb3acb) SHA1(3dc71683f31da39a544382b463ece39cca8124b3) )
1222 ROM_LOAD( "rom.a3", 0x1800, 0x0800, CRC(311050ca) SHA1(ed4a5cb7ec0306654178dae8f30b39b9c8db0ce3) )
1223 ROM_LOAD( "rom.a4", 0x2000, 0x0800, CRC(28943803) SHA1(4904e6d092494bfca064d25d094ab9e9049fa9ca) )
1224 ROM_LOAD( "rom.a5", 0x2800, 0x0800, CRC(851c9f28) SHA1(c7bb4e25b74eb71e8b394214f9cbd95f59a1fa58) )
1225
1226 ROM_REGION( 0x10000, "cpu2", 0 )
1227 ROM_LOAD( "rom.b0", 0x0000, 0x0800, CRC(db45689d) SHA1(057a8dc2629f57fdeebb6262de2bdd78b4e66dca) )
1228 ROM_LOAD( "rom.b2", 0x1000, 0x0800, CRC(1e074157) SHA1(cb2073415aff7804ac85e2137bef2005bf6cf239) )
1229 ROM_LOAD( "rom.b3", 0x1800, 0x0800, CRC(d50a8b20) SHA1(d733fa327d2e7dfe08c84015c6c326ed8ab39e3d) )
1230
1231 ROM_REGION( 0x0200, "proms", 0 ) /* Intersil IM5623CPE proms compatible with 82s129 */
1232 /* The upper 128 bytes are 0's, used by the hardware to blank the display */
1233 ROM_LOAD( "im5623.f10", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
1234 ROM_LOAD( "im5623.f12", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
1235 ROM_END
1236
1237 /*
1238 rom.b0 cb7.5b IDENTICAL
1239 rom.a5 cb6.2.3t IDENTICAL
1240 rom.a2 c3.4.5t IDENTICAL
1241 rom.a1 c2.5t IDENTICAL
1242 rom.a4 cb5.3t IDENTICAL
1243 rom.b3 cb10.3b IDENTICAL
1244 rom.b2 cb9.4b IDENTICAL
1245 rom.a3 c4.4t IDENTICAL
1246 rom.a0 c11.5.6t 99.853516%
1247 mb7052.6k NO MATCH
1248 mb7052.6m NO MATCH
1249
1250 Only 3 bytes different between rom.a0 (spacecho) and c11.5.6t (spacecho2), at offset 0x8b.
1251
1252 Spacecho: 0x008b: call $2929 cd 29 29
1253
1254 Spacech2: 0x008b: im 1 ed 56
1255 0x008d: nop 00
1256
1257 So... spacecho2 is avoiding to enter the sub at $2929.
1258
1259 */
1260 ROM_START( spacecho2 )
1261 ROM_REGION( 0x10000, "cpu1", 0 )
1262 ROM_LOAD( "c11.5.6t", 0x0000, 0x0800, CRC(90637f25) SHA1(820d2f326a5d8d0a04a0fca46b035624dfd7222c) ) // 3 bytes different at 0x8e
1263 ROM_LOAD( "c2.5t", 0x0800, 0x0800, CRC(a5f0a34f) SHA1(359e7a9954dedb464f7456cd071db77b2219ab2c) )
1264 ROM_LOAD( "c3.4.5t", 0x1000, 0x0800, CRC(cbbb3acb) SHA1(3dc71683f31da39a544382b463ece39cca8124b3) )
1265 ROM_LOAD( "c4.4t", 0x1800, 0x0800, CRC(311050ca) SHA1(ed4a5cb7ec0306654178dae8f30b39b9c8db0ce3) )
1266 ROM_LOAD( "cb5.3t", 0x2000, 0x0800, CRC(28943803) SHA1(4904e6d092494bfca064d25d094ab9e9049fa9ca) )
1267 ROM_LOAD( "cb6.2.3t", 0x2800, 0x0800, CRC(851c9f28) SHA1(c7bb4e25b74eb71e8b394214f9cbd95f59a1fa58) )
1268
1269 ROM_REGION( 0x10000, "cpu2", 0 )
1270 ROM_LOAD( "cb7.5b", 0x0000, 0x0800, CRC(db45689d) SHA1(057a8dc2629f57fdeebb6262de2bdd78b4e66dca) )
1271 ROM_LOAD( "cb9.4b", 0x1000, 0x0800, CRC(1e074157) SHA1(cb2073415aff7804ac85e2137bef2005bf6cf239) )
1272 ROM_LOAD( "cb10.3b", 0x1800, 0x0800, CRC(d50a8b20) SHA1(d733fa327d2e7dfe08c84015c6c326ed8ab39e3d) )
1273
1274 ROM_REGION( 0x0200, "proms", 0 ) /* mb7052 proms compatible with 82s129 */
1275 /* The upper 128 bytes are 0's, used by the hardware to blank the display */
1276 ROM_LOAD( "mb7052.6k", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
1277 ROM_LOAD( "mb7052.6m", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
1278 ROM_END
1279
1280 /*
1281 Speak & Help
1282
1283 Single layer re-engineered pcb, very tidy and working.
1284
1285 All dumps are in label.location format, see the two
1286 included photos for one of the pcb with and without the
1287 speech? daughterboard plugged in for verification.
1288
1289 Roms are all mitsubishi 2716, proms are fujitsu MB7052.
1290
1291 https://youtu.be/YuWZ8hZ-MtY
1292 Unique speech, as detailed in video, seems will require additional work to emulate correctly.
1293 */
1294
1295 ROM_START( speakhlp )
1296 ROM_REGION( 0x10000, "cpu1", 0 )
1297 ROM_LOAD( "b1.56t", 0x0000, 0x0800, CRC(ce009d85) SHA1(d8683d358ff04ffa0eef574e42a8f3885f538ecc) )
1298 ROM_LOAD( "b2.5t", 0x0800, 0x0800, CRC(935219f1) SHA1(83d41eb8af6dc5d44d578c01c123872e75fa927e) )
1299 ROM_LOAD( "b3.45t", 0x1000, 0x0800, CRC(083c28de) SHA1(82e159f218f60e9c06ff78f2e52572f8f5a6c530) )
1300 ROM_LOAD( "b4.4t", 0x1800, 0x0800, CRC(b0927e3b) SHA1(cc5f030dcbc93d5265dbf17a2425acdb921ab18b) )
1301 ROM_LOAD( "b5.3t", 0x2000, 0x0800, CRC(ccd25c4e) SHA1(d6d5722d746dd22cecacfea407e798f4531eea99) )
1302 ROM_LOAD( "b6.23t", 0x2800, 0x0800, CRC(a657dd4b) SHA1(4f6b85ccf5449d08f5c7f5dc6f59d0df276d9994) )
1303
1304 ROM_REGION( 0x10000, "cpu2", 0 )
1305 ROM_LOAD( "b07.5b", 0x0000, 0x0800, CRC(c9317d91) SHA1(b509ce371d89ad39acaefea732eb955a11df1ed9) )
1306 ROM_LOAD( "b09.4b", 0x1000, 0x0800, CRC(29310c32) SHA1(d5d5953111d81661ab98c950d94e5912fc907445) )
1307 ROM_LOAD( "b010.3b", 0x1800, 0x0800, CRC(4d567bc9) SHA1(6bc05213042d9069a054b2ae044f04938a9bfe06) )
1308
1309 ROM_REGION( 0x0200, "proms", 0 ) /* Intersil IM5623CPE proms compatible with 82s129 */
1310 /* The upper 128 bytes are 0's, used by the hardware to blank the display */
1311 ROM_LOAD( "prom.6k", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* top bitmap */
1312 ROM_LOAD( "prom.6m", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) ) /* bottom bitmap */
1313 ROM_END
1314
1315 ROM_START( ttmahjng )
1316 ROM_REGION( 0x10000, "cpu1", 0 )
1317 ROM_LOAD( "ju04", 0x0000, 0x1000, CRC(fe7c693a) SHA1(be0630557e0bcd9ec2e9542cc4a4d947889ec57a) )
1318 ROM_LOAD( "ju05", 0x1000, 0x1000, CRC(985723d3) SHA1(9d7499c48cfc242875a95d01459b8f3252ea41bc) )
1319 ROM_LOAD( "ju06", 0x2000, 0x1000, CRC(2cd69bc8) SHA1(a0a55c972291d043da9f76faf551dba790d5d103) )
1320 ROM_LOAD( "ju07", 0x3000, 0x1000, CRC(30e8ec63) SHA1(9c6a2b5e436b5e469c15f04c557839b6f07eb22e) )
1321
1322 ROM_REGION( 0x10000, "cpu2", 0 )
1323 ROM_LOAD( "ju01", 0x0000, 0x0800, CRC(0f05ca3c) SHA1(6af547b2ec4f69069b4ad62d96d109ec0105dd8b) )
1324 ROM_LOAD( "ju02", 0x0800, 0x0800, CRC(c1ffeceb) SHA1(18cf337ef2c9b51f1e9e4f08743225755c4ff420) )
1325 ROM_LOAD( "ju08", 0x1000, 0x0800, CRC(2dcc76b5) SHA1(1732bcf5492dda34425681e7f28775ad7a5e04af) )
1326
1327 ROM_REGION( 0x0200, "proms", 0 )
1328 /* The upper 128 bytes are 0's, used by the hardware to blank the display */
1329 ROM_LOAD( "ju03", 0x0000, 0x0100, CRC(27d47624) SHA1(ee04ce8043216be8b91413b546479419fca2b917) )
1330 ROM_LOAD( "ju09", 0x0100, 0x0100, CRC(27d47624) SHA1(ee04ce8043216be8b91413b546479419fca2b917) )
1331 ROM_END
1332
1333 ROM_START( jongpute )
1334 ROM_REGION( 0x10000, "cpu1", 0 )
1335 ROM_LOAD( "j2", 0x0000, 0x1000, CRC(6690b6a4) SHA1(ab79faa1ed84d766eee652f3cbdc0296ddb80fe2) )
1336 ROM_LOAD( "j3", 0x1000, 0x1000, CRC(985723d3) SHA1(9d7499c48cfc242875a95d01459b8f3252ea41bc) )
1337 ROM_LOAD( "j4", 0x2000, 0x1000, CRC(f35ab1e6) SHA1(5b76d05ab9d8b2a88b408cf9e9297ec31a8de33a) )
1338 ROM_LOAD( "j5", 0x3000, 0x1000, CRC(77074618) SHA1(73329e945ea578bce1d04c80e09929bfb0e9875b) )
1339
1340 ROM_REGION( 0x10000, "cpu2", 0 )
1341 ROM_LOAD( "j6", 0x0000, 0x1000, CRC(54b349b0) SHA1(e5620b85a24a35d995860c7121f1ddf16f7ea168) )
1342
1343 /* maybe used for pseudo sampling voice, "reach", that is not emulated yet */
1344 ROM_REGION( 0x1000, "unknown", 0 )
1345 ROM_LOAD( "j1", 0x0000, 0x1000, CRC(6d6ba272) SHA1(a4efd8daddbbf595ee46484578f544d7ed84e090) )
1346
1347 ROM_REGION( 0x0200, "proms", 0 )
1348 /* not dumped, but ttmahjng roms seem to be compatible completely */
1349 ROM_LOAD( "ju03", 0x0000, 0x0100, BAD_DUMP CRC(27d47624) SHA1(ee04ce8043216be8b91413b546479419fca2b917) )
1350 ROM_LOAD( "ju09", 0x0100, 0x0100, BAD_DUMP CRC(27d47624) SHA1(ee04ce8043216be8b91413b546479419fca2b917) )
1351 ROM_END
1352
1353 ROM_START( vscompmj )
1354 ROM_REGION( 0x8000, "cpu1", 0 ) // all 2732
1355 ROM_LOAD( "j2_1.0r", 0x0000, 0x1000, CRC(e112ac58) SHA1(a274080dfd89c547335f93cb8f99e80ec7b972df) )
1356 ROM_LOAD( "j2_2.0n", 0x1000, 0x1000, CRC(c751c041) SHA1(69063549e616fdd9d175b47275331986f1d3e0bd) )
1357 ROM_LOAD( "j2_3.0l", 0x2000, 0x1000, CRC(e85bf26b) SHA1(8bb6625433c9f86808a41bde7dd587bdc430b934) )
1358 ROM_LOAD( "j2_4.0k", 0x3000, 0x1000, CRC(ead1b054) SHA1(fa0940391968541cdfd3d306c7bfd6781617b580) )
1359 ROM_LOAD( "j2_5.0j", 0x7000, 0x1000, CRC(cbf49c08) SHA1(064054fd9e36c8a359926ade4fc10855d3058f01) )
1360
1361 ROM_REGION( 0x2000, "cpu2", 0 )
1362 ROM_LOAD( "j2_6.0e", 0x0000, 0x1000, CRC(3a559328) SHA1(dd6333ddcc8aa6097d83b21cfde740b2cb7c908b) ) // 2732
1363
1364 ROM_REGION( 0x0200, "proms", 0 )
1365 // The upper 128 bytes are 0's, used by the hardware to blank the display
1366 ROM_LOAD( "82s129.6k", 0x0000, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) )
1367 ROM_LOAD( "82s129.6h", 0x0100, 0x0100, CRC(08793ef7) SHA1(bfc27aaf25d642cd57c0fbe73ab575853bd5f3ca) )
1368
1369 ROM_REGION( 0x0100, "proms2", 0 ) // currently unused by the emulation
1370 ROM_LOAD( "82s129.9r", 0x0000, 0x0100, CRC(20ac25d8) SHA1(6f06472ac7fcb22c9060092a2d456be5d3ca6d5f) )
1371 ROM_END
1372
1373
1374 /*************************************
1375 *
1376 * Game drivers
1377 *
1378 *************************************/
1379
1380 GAME( 1981, route16, 0, route16, route16, route16_state, init_route16, ROT270, "Sun Electronics", "Route 16 (Sun Electronics)", MACHINE_SUPPORTS_SAVE )
1381 GAME( 1981, route16a, route16, route16, route16a, route16_state, init_route16a, ROT270, "Tehkan / Sun Electronics (Centuri license)", "Route 16 (Centuri license, set 1)", MACHINE_SUPPORTS_SAVE )
1382 GAME( 1981, route16b, route16, route16, route16, route16_state, init_route16, ROT270, "Tehkan / Sun Electronics (Centuri license)", "Route 16 (Centuri license, set 2)", MACHINE_SUPPORTS_SAVE )
1383 GAME( 1981, route16c, route16, route16, route16, route16_state, init_route16c, ROT270, "Tehkan / Sun Electronics (Centuri license)", "Route 16 (Centuri license, set 3, bootleg?)", MACHINE_SUPPORTS_SAVE ) // similar to set 1 but with some protection removed?
1384 GAME( 1981, route16bl,route16, route16, route16, route16_state, empty_init, ROT270, "bootleg (Leisure and Allied)", "Route 16 (bootleg)", MACHINE_SUPPORTS_SAVE )
1385 GAME( 1981, routex, route16, routex, route16, route16_state, empty_init, ROT270, "bootleg", "Route X (bootleg, set 1)", MACHINE_SUPPORTS_SAVE )
1386 GAME( 1981, routexa, route16, routex, route16, route16_state, empty_init, ROT270, "bootleg", "Route X (bootleg, set 2)", MACHINE_SUPPORTS_SAVE )
1387
1388 GAME( 1980, speakres, 0, speakres, speakres, route16_state, empty_init, ROT270, "Sun Electronics", "Speak & Rescue", MACHINE_SUPPORTS_SAVE )
1389 GAME( 1980, speakresb,speakres, speakres, speakres, route16_state, empty_init, ROT270, "bootleg", "Speak & Rescue (bootleg)", MACHINE_SUPPORTS_SAVE )
1390 GAME( 1980, stratvox, speakres, stratvox, stratvox, route16_state, empty_init, ROT270, "Sun Electronics (Taito license)", "Stratovox (set 1)", MACHINE_SUPPORTS_SAVE )
1391 GAME( 1980, stratvoxa,speakres, stratvox, stratvox, route16_state, empty_init, ROT270, "Sun Electronics (Taito license)", "Stratovox (set 2)", MACHINE_SUPPORTS_SAVE )
1392 GAME( 1980, stratvoxb,speakres, stratvox, stratvox, route16_state, empty_init, ROT270, "bootleg", "Stratovox (bootleg)", MACHINE_SUPPORTS_SAVE )
1393 GAME( 1980, spacecho, speakres, spacecho, spacecho, route16_state, empty_init, ROT270, "bootleg (Gayton Games)", "Space Echo (set 1)", MACHINE_SUPPORTS_SAVE )
1394 GAME( 1980, spacecho2,speakres, spacecho, spacecho, route16_state, empty_init, ROT270, "bootleg (Gayton Games)", "Space Echo (set 2)", MACHINE_SUPPORTS_SAVE )
1395 GAME( 1980, speakhlp, speakres, spacecho, spacecho, route16_state, empty_init, ROT270, "bootleg", "Speak & Help", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
1396
1397 GAME( 1981, jongpute, 0, jongpute, jongpute, route16_state, empty_init, ROT0, "Alpha Denshi Co.", "Jongputer", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_COLORS | MACHINE_NOT_WORKING ) // sampling voice is not emulated, bug with colors makes tile recognition difficult
1398 GAME( 1981, ttmahjng, jongpute, jongpute, jongpute, route16_state, empty_init, ROT0, "Alpha Denshi Co. (Taito license)", "T.T Mahjong", MACHINE_SUPPORTS_SAVE )
1399 GAME( 1981, vscompmj, jongpute, vscompmj, jongpute, route16_state, init_vscompmj, ROT0, "Nichibutsu", "VS Computer Mahjong", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_COLORS | MACHINE_NOT_WORKING ) // decryption might be incomplete (attract resets), inputs seem read differently
1400