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