1 /*
2 
3 	SEGA Zaxxon Hardware
4 
5 	TODO:
6 
7 	- service coin lockout (needs to be added to MAME core)
8 	- razmataz/ixion unknown reads
9 	- razmataz/ixion sound
10 	- verify congo sound cpu speeds
11 	- rename roms properly
12 	- discrete sound emulation
13 
14 */
15 
16 /***************************************************************************
17 
18 Notes:
19 
20 - the duck season in razmataz is controlled by ff3c, maybe a timer. When it's
21   0, it ends. We are currently returning 0xff so it never ends unitl you shoot
22   stop.
23 
24 
25 Zaxxon memory map (preliminary)
26 
27 0000-1fff ROM 3
28 2000-3fff ROM 2
29 4000-4fff ROM 1
30 6000-67ff RAM 1
31 6800-6fff RAM 2
32 8000-83ff Video RAM
33 a000-a0ff sprites
34 
35 read:
36 c000	  IN0
37 c001	  IN1
38 c002	  DSW0
39 c003	  DSW1
40 c100	  IN2
41 see the input_ports definition below for details on the input bits
42 
43 write:
44 c000	  coin A enable
45 c001	  coin B enable
46 c002	  coin aux enable
47 c003-c004 coin counters
48 c006	  flip screen
49 ff3c-ff3f sound (see below)
50 fff0	  interrupt enable
51 fff1	  character color bank (not used during the game, but used in test mode)
52 fff8-fff9 background playfield position (11 bits)
53 fffa	  background color bank (0 = standard  1 = reddish)
54 fffb	  background enable
55 
56 interrupts:
57 VBlank triggers IRQ, handled with interrupt mode 1
58 NMI enters the test mode.
59 
60 Changes:
61 25 Jan 98 LBO
62 	* Added crude support for samples based on Frank's info. As of yet, I don't have
63 	  a set that matches the names - I need a way to edit the .wav files I have.
64 	  Hopefully I'll be able to create a good set shortly. I also don't know which
65 	  sounds "loop".
66 26 Jan 98 LBO
67 	* Fixed the sound support. I lack explosion samples and the base missile sample so
68 	  these are untested. I'm also unsure about the background noise. It seems to have
69 	  a variable volume so I've tried to reproduce that via just 1 sample.
70 
71 12 Mar 98 ATJ
72 		* For the moment replaced Brad's version of the samples with mine from the Mame/P
73 		  release. As yet, no variable volume, but I will be combining the features from
74 		  Brad's driver into mine ASAP.
75 
76 ****************************************************************************
77 
78 Ixion Board Info
79 
80 Ixion
81 Sega(prototype)  7/1/1983
82 
83 
84 Board set is a modified Super Zaxxon, similar to Razzmatazz
85 
86 [G80 Sound board]
87 
88 
89 
90                         U51
91                         U50
92 
93 [834-0214 ZAXXON-SOUNDII]
94 
95                                    315-5013  U27 U28 U29
96 
97 
98          U68 U69      U72
99                                         U98
100 
101 [         ZAXXON-VIDEOII]
102 
103 
104 U77 U78 U79                                U90 U91 U92 U93
105                           U111 U112 U113
106 
107 ****************************************************************************/
108 
109 /***************************************************************************
110 
111 Congo Bongo memory map (preliminary)
112 
113 0000-1fff ROM 1
114 2000-3fff ROM 2
115 4000-5fff ROM 3
116 6000-7fff ROM 4
117 
118 8000-87ff RAM 1
119 8800-8fff RAM 2
120 a000-a3ff Video RAM
121 a400-a7ff Color RAM
122 
123 8400-8fff sprites
124 
125 read:
126 c000	  IN0
127 c001	  IN1
128 c002	  DSW1
129 c003	  DSW2
130 c008	  IN2
131 
132 write:
133 c000-c002 ?
134 c006	  ?
135 c018	  coinAen, used to enable input on coin slot A
136 c019	  coinBen, used to enable input on coin slot B
137 c01a	  serven,  used to enable input on service sw
138 c01b	  counterA,coin counter for slot A
139 c01c	  counterB,coin counter for slot B
140 c01d	  background enable
141 c01e	  flip screen
142 c01f	  interrupt enable
143 
144 c028-c029 background playfield position
145 c031	  sprite enable ?
146 c032	  sprite start
147 c033	  sprite count
148 
149 
150 interrupts:
151 VBlank triggers IRQ, handled with interrupt mode 1
152 NMI causes a ROM/RAM test.
153 
154 ***************************************************************************/
155 
156 
157 #include "driver.h"
158 #include "vidhrdw/generic.h"
159 #include "machine/segacrpt.h"
160 
161 extern int zaxxon_vid_type;
162 extern UINT8 *zaxxon_char_color_bank;
163 extern UINT8 *zaxxon_background_position;
164 extern UINT8 *zaxxon_background_color_bank;
165 extern UINT8 *zaxxon_background_enable;
166 
167 extern WRITE_HANDLER( zaxxon_videoram_w );
168 extern WRITE_HANDLER( congo_colorram_w );
169 
170 extern PALETTE_INIT( zaxxon );
171 
172 extern VIDEO_START( zaxxon );
173 extern VIDEO_START( razmataz );
174 extern VIDEO_START( congo );
175 
176 extern VIDEO_UPDATE( zaxxon );
177 extern VIDEO_UPDATE( razmataz );
178 extern VIDEO_UPDATE( congo );
179 extern VIDEO_UPDATE( futspy );
180 
181 extern READ_HANDLER( zaxxon_IN2_r );
182 extern WRITE_HANDLER( zaxxon_sound_w );
183 
184 /* Read/Write Handlers */
185 
WRITE_HANDLER(zaxxon_coin_counter_w)186 static WRITE_HANDLER( zaxxon_coin_counter_w )
187 {
188 	coin_counter_w(offset, data & 0x01);
189 }
190 
WRITE_HANDLER(zaxxon_coin_lockout_w)191 static WRITE_HANDLER( zaxxon_coin_lockout_w )
192 {
193 	coin_lockout_w(offset, ~data & 0x01);
194 }
195 
WRITE_HANDLER(zaxxon_flipscreen_w)196 static WRITE_HANDLER( zaxxon_flipscreen_w )
197 {
198 	flip_screen_set(~data & 0x01);
199 }
200 
WRITE_HANDLER(razmataz_flipscreen_w)201 static WRITE_HANDLER( razmataz_flipscreen_w )
202 {
203 	flip_screen_set(data & 0x01);
204 }
205 
READ_HANDLER(razmataz_unknown1_r)206 static READ_HANDLER( razmataz_unknown1_r )
207 {
208 	return rand() & 0xff;
209 }
210 
READ_HANDLER(razmataz_unknown2_r)211 static READ_HANDLER( razmataz_unknown2_r )
212 {
213 	return 0xff;
214 }
215 
razmataz_dial_r(int num)216 static int razmataz_dial_r(int num)
217 {
218 	static UINT8 pos[2];
219 	int delta,res;
220 
221 	delta = readinputport(num);
222 
223 	if (delta < 0x80)
224 	{
225 		/* right*/
226 		pos[num] -= delta;
227 		res = (pos[num] << 1) | 1;
228 	}
229 	else
230 	{
231 		/* left*/
232 		pos[num] += delta;
233 		res = (pos[num] << 1);
234 	}
235 
236 	return res;
237 }
238 
READ_HANDLER(razmataz_dial_0_r)239 static READ_HANDLER( razmataz_dial_0_r )
240 {
241 	return razmataz_dial_r(0);
242 }
243 
READ_HANDLER(razmataz_dial_1_r)244 static READ_HANDLER( razmataz_dial_1_r )
245 {
246 	return razmataz_dial_r(1);
247 }
248 
WRITE_HANDLER(congo_daio_w)249 static WRITE_HANDLER( congo_daio_w )
250 {
251 	if (offset == 1)
252 	{
253 		if (data & 0x02) sample_start(0, 0, 0);
254 	}
255 	else if (offset == 2)
256 	{
257 		data ^= 0xff;
258 
259 		if (data & 0x80)
260 		{
261 			if (data & 0x08) sample_start(1, 1, 0);
262 			if (data & 0x04) sample_start(2, 2, 0);
263 			if (data & 0x02) sample_start(3, 3, 0);
264 			if (data & 0x01) sample_start(4, 4, 0);
265 		}
266 	}
267 }
268 
269 /* Memory Maps */
270 
MEMORY_READ_START(readmem)271 static MEMORY_READ_START( readmem )
272 	{ 0x0000, 0x4fff, MRA_ROM },
273 	{ 0x6000, 0x6fff, MRA_RAM },
274 	{ 0x8000, 0x83ff, MRA_RAM },
275 	{ 0xa000, 0xa0ff, MRA_RAM },
276 	{ 0xc000, 0xc000, input_port_0_r },
277 	{ 0xc001, 0xc001, input_port_1_r },
278 	{ 0xc002, 0xc002, input_port_3_r },
279 	{ 0xc003, 0xc003, input_port_4_r },
280 	{ 0xc100, 0xc100, input_port_2_r },
281 MEMORY_END
282 
283 static MEMORY_WRITE_START( writemem )
284 	{ 0x0000, 0x4fff, MWA_ROM },
285 	{ 0x6000, 0x6fff, MWA_RAM },
286 	{ 0x8000, 0x83ff, zaxxon_videoram_w, &videoram },
287 	{ 0xa000, 0xa0ff, MWA_RAM, &spriteram, &spriteram_size },
288 	{ 0xc000, 0xc001, zaxxon_coin_lockout_w },
289 	{ 0xc002, 0xc002, MWA_NOP },	/* service coin lockout*/
290 	{ 0xc003, 0xc004, zaxxon_coin_counter_w },
291 	{ 0xc006, 0xc006, zaxxon_flipscreen_w },
292 	{ 0xff3c, 0xff3f, zaxxon_sound_w },
293 	{ 0xfff0, 0xfff0, interrupt_enable_w },
294 	{ 0xfff1, 0xfff1, MWA_RAM, &zaxxon_char_color_bank },
295 	{ 0xfff2, 0xfff7, MWA_NOP },
296 	{ 0xfff8, 0xfff9, MWA_RAM, &zaxxon_background_position },
297 	{ 0xfffa, 0xfffa, MWA_RAM, &zaxxon_background_color_bank },
298 	{ 0xfffb, 0xfffb, MWA_RAM, &zaxxon_background_enable },
299 	{ 0xfffc, 0xffff, MWA_NOP },
300 MEMORY_END
301 
302 static MEMORY_READ_START( razmataz_readmem )
303 	{ 0x0000, 0x5fff, MRA_ROM },
304 	{ 0x6000, 0x6fff, MRA_RAM },
305 	{ 0x8000, 0x83ff, MRA_RAM },
306 	{ 0xa000, 0xa0ff, MRA_RAM },
307 	{ 0xc000, 0xc000, razmataz_dial_0_r },
308 	{ 0xc002, 0xc002, input_port_3_r },
309 	{ 0xc003, 0xc003, input_port_4_r },
310 	{ 0xc004, 0xc004, input_port_6_r },
311 	{ 0xc008, 0xc008, razmataz_dial_1_r },
312 	{ 0xc00c, 0xc00c, input_port_7_r },
313 	{ 0xc100, 0xc100, input_port_2_r },
314 	{ 0xc80a, 0xc80a, razmataz_unknown1_r },	/* needed, otherwise the game hangs*/
315 	{ 0xff3c, 0xff3c, razmataz_unknown2_r },	/* timer? if 0, "duck season" ends*/
316 MEMORY_END
317 
318 static MEMORY_WRITE_START( razmataz_writemem )
319 	{ 0x0000, 0x5fff, MWA_ROM },
320 	{ 0x6000, 0x6fff, MWA_RAM },
321 	{ 0x8000, 0x83ff, zaxxon_videoram_w, &videoram },
322 	{ 0xa000, 0xa0ff, MWA_RAM, &spriteram, &spriteram_size },
323 	{ 0xc000, 0xc001, zaxxon_coin_lockout_w },
324 	{ 0xc002, 0xc002, MWA_NOP },	/* service coin lockout*/
325 	{ 0xc003, 0xc004, zaxxon_coin_counter_w },
326 	{ 0xc006, 0xc006, razmataz_flipscreen_w },
327 	{ 0xe0f0, 0xe0f0, interrupt_enable_w },
328 	{ 0xe0f1, 0xe0f1, MWA_RAM, &zaxxon_char_color_bank },
329 	{ 0xe0f2, 0xe0f7, MWA_NOP },
330 	{ 0xe0f8, 0xe0f9, MWA_RAM, &zaxxon_background_position },
331 	{ 0xe0fa, 0xe0fa, MWA_RAM, &zaxxon_background_color_bank },
332 	{ 0xe0fb, 0xe0fb, MWA_RAM, &zaxxon_background_enable },
333 	{ 0xe0fc, 0xe0ff, MWA_NOP },
334 	{ 0xff3c, 0xff3c, MWA_NOP },	/* sound*/
335 MEMORY_END
336 
337 static MEMORY_READ_START( ixion_readmem )
338 	{ 0x0000, 0x4fff, MRA_ROM },
339 	{ 0x6000, 0x6fff, MRA_RAM },
340 	{ 0x8000, 0x83ff, MRA_RAM },
341 	{ 0xa000, 0xa0ff, MRA_RAM },
342 	{ 0xc000, 0xc000, razmataz_dial_0_r },
343 	{ 0xc001, 0xc001, input_port_1_r },
344 	{ 0xc002, 0xc002, input_port_3_r },
345 	{ 0xc003, 0xc003, input_port_4_r },
346 	{ 0xc100, 0xc100, input_port_2_r },
347 	{ 0xff3c, 0xff3c, razmataz_unknown2_r },	/* no idea .. timer? in razmataz*/
348 MEMORY_END
349 
350 static MEMORY_READ_START( congo_readmem )
351 	{ 0x0000, 0x7fff, MRA_ROM },
352 	{ 0x8000, 0x8fff, MRA_RAM },
353 	{ 0xa000, 0xa7ff, MRA_RAM },
354 	{ 0xc000, 0xc000, input_port_0_r },
355 	{ 0xc001, 0xc001, input_port_1_r },
356 	{ 0xc002, 0xc002, input_port_3_r },
357 	{ 0xc003, 0xc003, input_port_4_r },
358 	{ 0xc008, 0xc008, input_port_2_r },
359 MEMORY_END
360 
361 static MEMORY_WRITE_START( congo_writemem )
362 	{ 0x0000, 0x7fff, MWA_ROM },
363 	{ 0x8000, 0x83ff, MWA_RAM },
364 	{ 0x8400, 0x8fff, MWA_RAM, &spriteram },
365 	{ 0xa000, 0xa3ff, zaxxon_videoram_w, &videoram },
366 	{ 0xa400, 0xa7ff, congo_colorram_w, &colorram },
367 	{ 0xc018, 0xc019, zaxxon_coin_lockout_w },
368 	{ 0xc01a, 0xc01a, MWA_NOP },	/* service coin lockout*/
369 	{ 0xc01b, 0xc01c, zaxxon_coin_counter_w },
370 	{ 0xc01d, 0xc01d, MWA_RAM, &zaxxon_background_enable },
371 	{ 0xc01e, 0xc01e, zaxxon_flipscreen_w },
372 	{ 0xc01f, 0xc01f, interrupt_enable_w },
373 	{ 0xc021, 0xc021, MWA_NOP },
374 	{ 0xc023, 0xc023, MWA_NOP },
375 	{ 0xc026, 0xc026, MWA_NOP },
376 	{ 0xc027, 0xc027, MWA_NOP },
377 	{ 0xc028, 0xc029, MWA_RAM, &zaxxon_background_position },
378 	{ 0xc030, 0xc033, MWA_NOP },
379 	{ 0xc038, 0xc038, soundlatch_w },
380 MEMORY_END
381 
382 static MEMORY_READ_START( congo_snd_readmem )
383 	{ 0x0000, 0x1fff, MRA_ROM },
384 	{ 0x4000, 0x47ff, MRA_RAM },
385 	{ 0x8000, 0x8003, soundlatch_r },
386 MEMORY_END
387 
388 static MEMORY_WRITE_START( congo_snd_writemem )
389 	{ 0x0000, 0x2000, MWA_ROM },
390 	{ 0x4000, 0x47ff, MWA_RAM },
391 	{ 0x6000, 0x6003, SN76496_0_w },
392 	{ 0x8000, 0x8003, congo_daio_w },
393 	{ 0xa000, 0xa003, SN76496_1_w },
394 MEMORY_END
395 
396 static MEMORY_WRITE_START( futspy_writemem )
397 	{ 0x0000, 0x4fff, MWA_ROM },
398 	{ 0x6000, 0x6fff, MWA_RAM },
399 	{ 0x8000, 0x83ff, zaxxon_videoram_w, &videoram },
400 	{ 0x8400, 0x8fff, MWA_RAM },
401 	{ 0xa000, 0xa0ff, MWA_RAM, &spriteram, &spriteram_size },
402 	{ 0xc000, 0xc001, zaxxon_coin_lockout_w },
403 	{ 0xc002, 0xc002, MWA_NOP },	/* service coin lockout*/
404 	{ 0xc003, 0xc003, zaxxon_coin_counter_w },
405 	{ 0xc006, 0xc006, razmataz_flipscreen_w },
406 	{ 0xe03c, 0xe03f, zaxxon_sound_w },
407 	{ 0xe0f0, 0xe0f0, interrupt_enable_w },
408 	{ 0xe0f1, 0xe0f1, MWA_RAM, &zaxxon_char_color_bank },
409 	{ 0xe0f8, 0xe0f9, MWA_RAM, &zaxxon_background_position },
410 	{ 0xe0fa, 0xe0fa, MWA_RAM, &zaxxon_background_color_bank },
411 	{ 0xe0fb, 0xe0fb, MWA_RAM, &zaxxon_background_enable },
412 MEMORY_END
413 
414 /* Input Ports */
415 
416 INPUT_PORTS_START( zaxxon )
417 	PORT_START	/* IN0 */
418 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY )
419 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT  | IPF_8WAY )
420 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN  | IPF_8WAY )
421 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP    | IPF_8WAY )
422 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
423 	PORT_BIT( 0xe0, IP_ACTIVE_HIGH, IPT_UNUSED )
424 
425 	PORT_START	/* IN1 */
426 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
427 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_COCKTAIL )
428 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_COCKTAIL )
429 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_COCKTAIL )
430 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_COCKTAIL )
431 	PORT_BIT( 0xe0, IP_ACTIVE_HIGH, IPT_UNUSED )
432 
433 	PORT_START	/* IN2 */
434 	PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_UNUSED )
435 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
436 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 )
437 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
438 	PORT_BIT_IMPULSE( 0x20, IP_ACTIVE_HIGH, IPT_COIN1, 1 )
439 	PORT_BIT_IMPULSE( 0x40, IP_ACTIVE_HIGH, IPT_COIN2, 1 )
440 	PORT_BIT_IMPULSE( 0x80, IP_ACTIVE_HIGH, IPT_SERVICE1, 1 )
441 
442 	PORT_START	/* DSW0 */
443 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Bonus_Life ) )
444 	PORT_DIPSETTING(    0x03, "10000" )
445 	PORT_DIPSETTING(    0x01, "20000" )
446 	PORT_DIPSETTING(    0x02, "30000" )
447 	PORT_DIPSETTING(    0x00, "40000" )
448 	PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
449 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) )
450 	PORT_DIPSETTING(    0x30, "3" )
451 	PORT_DIPSETTING(    0x10, "4" )
452 	PORT_DIPSETTING(    0x20, "5" )
453 	PORT_DIPSETTING(    0x00, DEF_STR( Free_Play ) )
454 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Demo_Sounds ) )
455 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
456 	PORT_DIPSETTING(    0x40, DEF_STR( On ) )
457 	PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) )
458 	PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
459 	PORT_DIPSETTING(    0x80, DEF_STR( Cocktail ) )
460 
461 	PORT_START	/* DSW1 */
462 	PORT_DIPNAME( 0x0f, 0x03, DEF_STR ( Coin_B ) )
463 	PORT_DIPSETTING(    0x0f, DEF_STR ( 4C_1C ) )
464 	PORT_DIPSETTING(    0x07, DEF_STR ( 3C_1C ) )
465 	PORT_DIPSETTING(    0x0b, DEF_STR ( 2C_1C ) )
466 	PORT_DIPSETTING(    0x06, "2C/1C 5C/3C 6C/4C" )
467 	PORT_DIPSETTING(    0x0a, "2C/1C 3C/2C 4C/3C" )
468 	PORT_DIPSETTING(    0x03, DEF_STR ( 1C_1C ) )
469 	PORT_DIPSETTING(    0x02, "1C/1C 5C/6C" )
470 	PORT_DIPSETTING(    0x0c, "1C/1C 4C/5C" )
471 	PORT_DIPSETTING(    0x04, "1C/1C 2C/3C" )
472 	PORT_DIPSETTING(    0x0d, DEF_STR ( 1C_2C ) )
473 	PORT_DIPSETTING(    0x08, "1C/2C 5C/11C" )
474 	PORT_DIPSETTING(    0x00, "1C/2C 4C/9C" )
475 	PORT_DIPSETTING(    0x05, DEF_STR ( 1C_3C ) )
476 	PORT_DIPSETTING(    0x09, DEF_STR ( 1C_4C ) )
477 	PORT_DIPSETTING(    0x01, DEF_STR ( 1C_5C ) )
478 	PORT_DIPSETTING(    0x0e, DEF_STR ( 1C_6C ) )
479 	PORT_DIPNAME( 0xf0, 0x30, DEF_STR ( Coin_A ) )
480 	PORT_DIPSETTING(    0xf0, DEF_STR ( 4C_1C ) )
481 	PORT_DIPSETTING(    0x70, DEF_STR ( 3C_1C ) )
482 	PORT_DIPSETTING(    0xb0, DEF_STR ( 2C_1C ) )
483 	PORT_DIPSETTING(    0x60, "2C/1C 5C/3C 6C/4C" )
484 	PORT_DIPSETTING(    0xa0, "2C/1C 3C/2C 4C/3C" )
485 	PORT_DIPSETTING(    0x30, DEF_STR ( 1C_1C ) )
486 	PORT_DIPSETTING(    0x20, "1C/1C 5C/6C" )
487 	PORT_DIPSETTING(    0xc0, "1C/1C 4C/5C" )
488 	PORT_DIPSETTING(    0x40, "1C/1C 2C/3C" )
489 	PORT_DIPSETTING(    0xd0, DEF_STR ( 1C_2C ) )
490 	PORT_DIPSETTING(    0x80, "1C/2C 5C/11C" )
491 	PORT_DIPSETTING(    0x00, "1C/2C 4C/9C" )
492 	PORT_DIPSETTING(    0x50, DEF_STR ( 1C_3C ) )
493 	PORT_DIPSETTING(    0x90, DEF_STR ( 1C_4C ) )
494 	PORT_DIPSETTING(    0x10, DEF_STR ( 1C_5C ) )
495 	PORT_DIPSETTING(    0xe0, DEF_STR ( 1C_6C ) )
496 
497 	PORT_START	/* FAKE */
498 	PORT_BITX(0x01, IP_ACTIVE_HIGH, IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, JOYCODE_NONE )
499 INPUT_PORTS_END
500 
501 INPUT_PORTS_START( szaxxon )
502 	PORT_START	/* IN0 */
503 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY )
504 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT  | IPF_8WAY )
505 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN  | IPF_8WAY )
506 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP    | IPF_8WAY )
507 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
508 	PORT_BIT( 0xe0, IP_ACTIVE_HIGH, IPT_UNUSED )
509 
510 	PORT_START	/* IN1 */
511 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
512 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_COCKTAIL )
513 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_COCKTAIL )
514 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_COCKTAIL )
515 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_COCKTAIL )
516 	PORT_BIT( 0xe0, IP_ACTIVE_HIGH, IPT_UNUSED )
517 
518 	PORT_START	/* IN2 */
519 	PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_UNUSED )
520 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
521 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 )
522 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
523 	PORT_BIT_IMPULSE( 0x20, IP_ACTIVE_HIGH, IPT_COIN1, 1 )
524 	PORT_BIT_IMPULSE( 0x40, IP_ACTIVE_HIGH, IPT_COIN2, 1 )
525 	PORT_BIT_IMPULSE( 0x80, IP_ACTIVE_HIGH, IPT_SERVICE1, 1 )
526 
527 	PORT_START	/* DSW0 */
528 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Bonus_Life ) )
529 	PORT_DIPSETTING(    0x03, "10000" )
530 	PORT_DIPSETTING(    0x01, "20000" )
531 	PORT_DIPSETTING(    0x02, "30000" )
532 	PORT_DIPSETTING(    0x00, "40000" )
533 	PORT_DIPNAME( 0x04, 0x04, DEF_STR( Difficulty ) )
534 	PORT_DIPSETTING(    0x04, "Normal" )
535 	PORT_DIPSETTING(    0x00, "Hard" )
536 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
537 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) )
538 	PORT_DIPSETTING(    0x30, "3" )
539 	PORT_DIPSETTING(    0x10, "4" )
540 	PORT_DIPSETTING(    0x20, "5" )
541 	PORT_DIPSETTING(    0x00, DEF_STR( Free_Play ) )
542 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Demo_Sounds ) )
543 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
544 	PORT_DIPSETTING(    0x40, DEF_STR( On ) )
545 	PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) )
546 	PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
547 	PORT_DIPSETTING(    0x80, DEF_STR( Cocktail ) )
548 
549 	PORT_START	/* DSW1 */
550 	PORT_DIPNAME( 0x0f, 0x03, DEF_STR ( Coin_B ) )
551 	PORT_DIPSETTING(    0x0f, DEF_STR ( 4C_1C ) )
552 	PORT_DIPSETTING(    0x07, DEF_STR ( 3C_1C ) )
553 	PORT_DIPSETTING(    0x0b, DEF_STR ( 2C_1C ) )
554 	PORT_DIPSETTING(    0x06, "2Cs/1C 5C/3C 6C/4C" )
555 	PORT_DIPSETTING(    0x0a, "2Cs/1C 3C/2C 4C/3C" )
556 	PORT_DIPSETTING(    0x03, DEF_STR ( 1C_1C ) )
557 	PORT_DIPSETTING(    0x02, "1C/1C 5C/6C" )
558 	PORT_DIPSETTING(    0x0c, "1C/1C 4C/5C" )
559 	PORT_DIPSETTING(    0x04, "1C/1C 2C/3C" )
560 	PORT_DIPSETTING(    0x0d, DEF_STR ( 1C_2C ) )
561 	PORT_DIPSETTING(    0x08, "1C/2C 5C/11C" )
562 	PORT_DIPSETTING(    0x00, "1C/2C 4C/9C" )
563 	PORT_DIPSETTING(    0x05, DEF_STR ( 1C_3C ) )
564 	PORT_DIPSETTING(    0x09, DEF_STR ( 1C_4C ) )
565 	PORT_DIPSETTING(    0x01, DEF_STR ( 1C_5C ) )
566 	PORT_DIPSETTING(    0x0e, DEF_STR ( 1C_6C ) )
567 	PORT_DIPNAME( 0xf0, 0x30, DEF_STR ( Coin_A ) )
568 	PORT_DIPSETTING(    0xf0, DEF_STR ( 4C_1C ) )
569 	PORT_DIPSETTING(    0x70, DEF_STR ( 3C_1C ) )
570 	PORT_DIPSETTING(    0xb0, DEF_STR ( 2C_1C ) )
571 	PORT_DIPSETTING(    0x60, "2Cs/1C 5C/3C 6C/4C" )
572 	PORT_DIPSETTING(    0xa0, "2Cs/1C 3C/2C 4C/3C" )
573 	PORT_DIPSETTING(    0x30, DEF_STR ( 1C_1C ) )
574 	PORT_DIPSETTING(    0x20, "1C/1C 5C/6C" )
575 	PORT_DIPSETTING(    0xc0, "1C/1C 4C/5C" )
576 	PORT_DIPSETTING(    0x40, "1C/1C 2C/3C" )
577 	PORT_DIPSETTING(    0xd0, DEF_STR ( 1C_2C ) )
578 	PORT_DIPSETTING(    0x80, "1C/2C 5C/11C" )
579 	PORT_DIPSETTING(    0x00, "1C/2C 4C/9C" )
580 	PORT_DIPSETTING(    0x50, DEF_STR ( 1C_3C ) )
581 	PORT_DIPSETTING(    0x90, DEF_STR ( 1C_4C ) )
582 	PORT_DIPSETTING(    0x10, DEF_STR ( 1C_5C ) )
583 	PORT_DIPSETTING(    0xe0, DEF_STR ( 1C_6C ) )
584 
585 	PORT_START	/* FAKE */
586 	PORT_BITX(0x01, IP_ACTIVE_HIGH, IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, IP_JOY_NONE )
587 INPUT_PORTS_END
588 
589 INPUT_PORTS_START( razmataz )
590 	PORT_START	/* IN0 */
591 	PORT_ANALOG( 0xff, 0x00, IPT_DIAL | IPF_CENTER | IPF_PLAYER1, 30, 15, 0, 0 )
592 
593 	PORT_START	/* IN1 */
594 	PORT_ANALOG( 0xff, 0x00, IPT_DIAL | IPF_CENTER | IPF_PLAYER2 | IPF_REVERSE, 30, 15, 0, 0 )
595 
596 	PORT_START	/* IN2 */
597 	PORT_BIT( 0x1f, IP_ACTIVE_HIGH, IPT_UNUSED )
598 	PORT_BIT_IMPULSE( 0x20, IP_ACTIVE_HIGH, IPT_COIN1, 1 )
599 	PORT_BIT_IMPULSE( 0x40, IP_ACTIVE_HIGH, IPT_COIN2, 1 )
600 	PORT_BIT_IMPULSE( 0x80, IP_ACTIVE_HIGH, IPT_SERVICE1, 1 )
601 
602 	PORT_START	/* DSW0 */
603 	PORT_DIPNAME( 0x03, 0x00, DEF_STR( Bonus_Life ) )
604 	PORT_DIPSETTING(    0x00, "50000" )
605 	PORT_DIPSETTING(    0x01, "100000" )
606 	PORT_DIPSETTING(    0x02, "150000" )
607 	PORT_DIPSETTING(    0x03, "200000" )
608 	PORT_DIPNAME( 0x0c, 0x04, DEF_STR( Difficulty ) )
609 	PORT_DIPSETTING(    0x00, "Easy" )
610 	PORT_DIPSETTING(    0x04, "Normal" )
611 	PORT_DIPSETTING(    0x08, "Hard" )
612 	PORT_DIPSETTING(    0x0c, "Very Hard" )
613 	PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) )
614 	PORT_DIPSETTING(    0x00, "3" )
615 	PORT_DIPSETTING(    0x10, "4" )
616 	PORT_DIPSETTING(    0x20, "5" )
617 	PORT_DIPSETTING(    0x30, "6" )
618 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) )
619 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
620 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
621 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
622 
623 	PORT_START	/* DSW1 */
624 	PORT_DIPNAME( 0x07, 0x03, DEF_STR( Coin_B ) )
625 	PORT_DIPSETTING(    0x00, DEF_STR ( 4C_1C ) )
626 	PORT_DIPSETTING(    0x01, DEF_STR ( 3C_1C ) )
627 	PORT_DIPSETTING(    0x02, DEF_STR ( 2C_1C ) )
628 	PORT_DIPSETTING(    0x03, DEF_STR ( 1C_1C ) )
629 	PORT_DIPSETTING(    0x04, DEF_STR ( 1C_2C ) )
630 	PORT_DIPSETTING(    0x05, DEF_STR ( 1C_3C ) )
631 	PORT_DIPSETTING(    0x06, DEF_STR ( 1C_4C ) )
632 	PORT_DIPSETTING(    0x07, DEF_STR ( 1C_5C ) )
633 	PORT_DIPNAME( 0x38, 0x18, DEF_STR( Coin_A ) )
634 	PORT_DIPSETTING(    0x00, DEF_STR ( 4C_1C ) )
635 	PORT_DIPSETTING(    0x08, DEF_STR ( 3C_1C ) )
636 	PORT_DIPSETTING(    0x10, DEF_STR ( 2C_1C ) )
637 	PORT_DIPSETTING(    0x18, DEF_STR ( 1C_1C ) )
638 	PORT_DIPSETTING(    0x20, DEF_STR ( 1C_2C ) )
639 	PORT_DIPSETTING(    0x28, DEF_STR ( 1C_3C ) )
640 	PORT_DIPSETTING(    0x30, DEF_STR ( 1C_4C ) )
641 	PORT_DIPSETTING(    0x38, DEF_STR ( 1C_5C ) )
642 	PORT_DIPNAME( 0x40, 0x40, "Test Flip Screen" )
643 	PORT_DIPSETTING(    0x00, DEF_STR( No ) )
644 	PORT_DIPSETTING(    0x40, DEF_STR( Yes ) )
645 	PORT_DIPNAME( 0x80, 0x00, DEF_STR( Free_Play ) )
646 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
647 	PORT_DIPSETTING(    0x80, DEF_STR( On ) )
648 
649 	PORT_START	/* FAKE */
650 	PORT_BITX(0x01, IP_ACTIVE_HIGH, IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, IP_JOY_NONE )
651 
652 	PORT_START	/* IN3 */
653 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_PLAYER1 )
654 	PORT_BIT( 0x1e, IP_ACTIVE_HIGH, IPT_UNUSED )
655 	PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START1 )
656 	PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED )
657 
658 	PORT_START	/* IN4 */
659 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_PLAYER2 )
660 	PORT_BIT( 0x1e, IP_ACTIVE_HIGH, IPT_UNUSED )
661 	PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START2 )
662 	PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED )
663 INPUT_PORTS_END
664 
665 INPUT_PORTS_START( ixion )
666 	PORT_START	/* IN0 */
667 	PORT_ANALOGX( 0xff, 0x00, IPT_DIAL | IPF_CENTER, 30, 15, 0, 0, KEYCODE_Z, KEYCODE_X, 0, 0 )
668 
669 	PORT_START	/* IN1 */
670 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY )
671 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT  | IPF_8WAY )
672 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP    | IPF_8WAY )
673 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN  | IPF_8WAY )
674 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
675 	PORT_BIT( 0xe0, IP_ACTIVE_HIGH, IPT_UNUSED )
676 
677 	PORT_START	/* IN2 */
678 	PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_UNUSED )
679 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
680 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 )
681 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
682 	PORT_BIT_IMPULSE( 0x20, IP_ACTIVE_HIGH, IPT_COIN1, 1 )
683 	PORT_BIT_IMPULSE( 0x40, IP_ACTIVE_HIGH, IPT_COIN2, 1 )
684 	PORT_BIT_IMPULSE( 0x80, IP_ACTIVE_HIGH, IPT_SERVICE1, 1 )
685 
686 	PORT_START	/* DSW0 */
687 	PORT_DIPNAME( 0x03, 0x00, DEF_STR( Bonus_Life ) )
688 	PORT_DIPSETTING(    0x00, "40000" )
689 	PORT_DIPSETTING(    0x01, "60000" )
690 	PORT_DIPSETTING(    0x02, "80000" )
691 	PORT_DIPSETTING(    0x03, "100000" )
692 	PORT_DIPNAME( 0x0c, 0x04, DEF_STR( Lives ) )
693 	PORT_DIPSETTING(    0x00, "2" )
694 	PORT_DIPSETTING(    0x04, "3" )
695 	PORT_DIPSETTING(    0x08, "4" )
696 	PORT_DIPSETTING(    0x0c, "5" )
697 	PORT_DIPNAME( 0x70, 0x30, DEF_STR( Difficulty ) )
698 	PORT_DIPSETTING(    0x00, "Easiest" )
699 	PORT_DIPSETTING(    0x10, "Easier" )
700 	PORT_DIPSETTING(    0x20, "Easy" )
701 	PORT_DIPSETTING(    0x30, "Normal" )
702 	PORT_DIPSETTING(    0x40, "Medium" )
703 	PORT_DIPSETTING(    0x50, "Hard" )
704 	PORT_DIPSETTING(    0x60, "Harder" )
705 	PORT_DIPSETTING(    0x70, "Hardest" )
706 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) )
707 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
708 	PORT_DIPSETTING(    0x80, DEF_STR( On ) )
709 
710 	PORT_START	/* DSW1 */
711 	PORT_DIPNAME( 0x07, 0x03, DEF_STR( Coin_B ) )
712 	PORT_DIPSETTING(    0x00, DEF_STR ( 4C_1C ) )
713 	PORT_DIPSETTING(    0x01, DEF_STR ( 3C_1C ) )
714 	PORT_DIPSETTING(    0x02, DEF_STR ( 2C_1C ) )
715 	PORT_DIPSETTING(    0x03, DEF_STR ( 1C_1C ) )
716 	PORT_DIPSETTING(    0x04, DEF_STR ( 1C_2C ) )
717 	PORT_DIPSETTING(    0x05, DEF_STR ( 1C_3C ) )
718 	PORT_DIPSETTING(    0x06, DEF_STR ( 1C_4C ) )
719 	PORT_DIPSETTING(    0x07, DEF_STR ( 1C_5C ) )
720 	PORT_DIPNAME( 0x38, 0x18, DEF_STR( Coin_A ) )
721 	PORT_DIPSETTING(    0x00, DEF_STR ( 4C_1C ) )
722 	PORT_DIPSETTING(    0x08, DEF_STR ( 3C_1C ) )
723 	PORT_DIPSETTING(    0x10, DEF_STR ( 2C_1C ) )
724 	PORT_DIPSETTING(    0x18, DEF_STR ( 1C_1C ) )
725 	PORT_DIPSETTING(    0x20, DEF_STR ( 1C_2C ) )
726 	PORT_DIPSETTING(    0x28, DEF_STR ( 1C_3C ) )
727 	PORT_DIPSETTING(    0x30, DEF_STR ( 1C_4C ) )
728 	PORT_DIPSETTING(    0x38, DEF_STR ( 1C_5C ) )
729 	PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
730 	PORT_DIPNAME( 0x80, 0x00, DEF_STR( Free_Play ) )
731 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
732 	PORT_DIPSETTING(    0x80, DEF_STR( On ) )
733 
734 	PORT_START	/* FAKE */
735 	PORT_BITX(0x01, IP_ACTIVE_HIGH, IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, IP_JOY_NONE )
736 INPUT_PORTS_END
737 
738 INPUT_PORTS_START( congo )
739 	PORT_START	/* IN0 */
740 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_4WAY )
741 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT  | IPF_4WAY )
742 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP    | IPF_4WAY )
743 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN  | IPF_4WAY )
744 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
745 	PORT_DIPNAME( 0x20, 0x00, "Test Back and Target" )
746 	PORT_DIPSETTING(    0x20, DEF_STR( No ) )
747 	PORT_DIPSETTING(    0x00, DEF_STR( Yes ) )
748 	PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED )
749 
750 	PORT_START	/* IN1 */
751 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_COCKTAIL )
752 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT  | IPF_4WAY | IPF_COCKTAIL )
753 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP    | IPF_4WAY | IPF_COCKTAIL )
754 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN  | IPF_4WAY | IPF_COCKTAIL )
755 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_COCKTAIL )
756 	PORT_DIPNAME( 0x20, 0x00, "Test I/O and Dip SW" )
757 	PORT_DIPSETTING(    0x20, DEF_STR( No ) )
758 	PORT_DIPSETTING(    0x00, DEF_STR( Yes ) )
759 	PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED )
760 
761 	PORT_START	/* IN2 */
762 	PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_UNUSED )
763 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
764 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 )
765 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
766 	PORT_BIT_IMPULSE( 0x20, IP_ACTIVE_HIGH, IPT_COIN1, 1 )
767 	PORT_BIT_IMPULSE( 0x40, IP_ACTIVE_HIGH, IPT_COIN2, 1 )
768 	PORT_BIT_IMPULSE( 0x80, IP_ACTIVE_HIGH, IPT_SERVICE1, 1 )
769 
770 	PORT_START	/* DSW0 */
771 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Bonus_Life ) )
772 	PORT_DIPSETTING(    0x03, "10000" )
773 	PORT_DIPSETTING(    0x01, "20000" )
774 	PORT_DIPSETTING(    0x02, "30000" )
775 	PORT_DIPSETTING(    0x00, "40000" )
776 	PORT_DIPNAME( 0x0c, 0x04, DEF_STR( Difficulty ) )
777 	PORT_DIPSETTING(    0x0c, "Easy" )
778 	PORT_DIPSETTING(    0x04, "Medium" )
779 	PORT_DIPSETTING(    0x08, "Hard" )
780 	PORT_DIPSETTING(    0x00, "Hardest" )
781 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) )
782 	PORT_DIPSETTING(    0x30, "3" )
783 	PORT_DIPSETTING(    0x10, "4" )
784 	PORT_DIPSETTING(    0x20, "5" )
785 	PORT_DIPSETTING(    0x00, DEF_STR( Free_Play ) )
786 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Demo_Sounds ) )
787 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
788 	PORT_DIPSETTING(    0x40, DEF_STR( On ) )
789 	PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) )
790 	PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
791 	PORT_DIPSETTING(    0x80, DEF_STR( Cocktail ) )
792 
793 	PORT_START	/* DSW1 */
794 	PORT_DIPNAME( 0x0f, 0x03, DEF_STR( Coin_B ) )
795 	PORT_DIPSETTING(    0x0f, DEF_STR( 4C_1C ) )
796 	PORT_DIPSETTING(    0x07, DEF_STR( 3C_1C ) )
797 	PORT_DIPSETTING(    0x0b, DEF_STR( 2C_1C ) )
798 	PORT_DIPSETTING(    0x06, "2C/1C 5C/3C 6C/4C" )
799 	PORT_DIPSETTING(    0x0a, "2C/1C 3C/2C 4C/3C" )
800 	PORT_DIPSETTING(    0x03, DEF_STR( 1C_1C ) )
801 	PORT_DIPSETTING(    0x02, "1C/1C 5C/6C" )
802 	PORT_DIPSETTING(    0x0c, "1C/1C 4C/5C" )
803 	PORT_DIPSETTING(    0x04, "1C/1C 2C/3C" )
804 	PORT_DIPSETTING(    0x0d, DEF_STR( 1C_2C ) )
805 	PORT_DIPSETTING(    0x08, "1C/2C 5C/11C" )
806 	PORT_DIPSETTING(    0x00, "1C/2C 4C/9C" )
807 	PORT_DIPSETTING(    0x05, DEF_STR( 1C_3C ) )
808 	PORT_DIPSETTING(    0x09, DEF_STR( 1C_4C ) )
809 	PORT_DIPSETTING(    0x01, DEF_STR( 1C_5C ) )
810 	PORT_DIPSETTING(    0x0e, DEF_STR( 1C_6C ) )
811 	PORT_DIPNAME( 0xf0, 0x30, DEF_STR( Coin_A ) )
812 	PORT_DIPSETTING(    0xf0, DEF_STR( 4C_1C ) )
813 	PORT_DIPSETTING(    0x70, DEF_STR( 3C_1C ) )
814 	PORT_DIPSETTING(    0xb0, DEF_STR( 2C_1C ) )
815 	PORT_DIPSETTING(    0x60, "2C/1C 5C/3C 6C/4C" )
816 	PORT_DIPSETTING(    0xa0, "2C/1C 3C/2C 4C/3C" )
817 	PORT_DIPSETTING(    0x30, DEF_STR( 1C_1C ) )
818 	PORT_DIPSETTING(    0x20, "1C/1C 5C/6C" )
819 	PORT_DIPSETTING(    0xc0, "1C/1C 4C/5C" )
820 	PORT_DIPSETTING(    0x40, "1C/1C 2C/3C" )
821 	PORT_DIPSETTING(    0xd0, DEF_STR( 1C_2C ) )
822 	PORT_DIPSETTING(    0x80, "1C/2C 5C/11C" )
823 	PORT_DIPSETTING(    0x00, "1C/2C 4C/9C" )
824 	PORT_DIPSETTING(    0x50, DEF_STR( 1C_3C ) )
825 	PORT_DIPSETTING(    0x90, DEF_STR( 1C_4C ) )
826 	PORT_DIPSETTING(    0x10, DEF_STR( 1C_5C ) )
827 	PORT_DIPSETTING(    0xe0, DEF_STR( 1C_6C ) )
828 
829 	PORT_START	/* FAKE */
830 	PORT_BITX(0x01, IP_ACTIVE_HIGH, IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, IP_JOY_NONE )
831 INPUT_PORTS_END
832 
833 INPUT_PORTS_START( tiptop )
834 	PORT_START	/* IN0 */
835 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_4WAY )
836 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT  | IPF_4WAY )
837 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP    | IPF_4WAY )
838 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN  | IPF_4WAY )
839 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
840 	PORT_DIPNAME( 0x20, 0x00, "Test Back and Target" )
841 	PORT_DIPSETTING(    0x20, DEF_STR( No ) )
842 	PORT_DIPSETTING(    0x00, DEF_STR( Yes ) )
843 	PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED )
844 
845 	PORT_START	/* IN1 */
846 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_COCKTAIL )
847 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT  | IPF_4WAY | IPF_COCKTAIL )
848 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP    | IPF_4WAY | IPF_COCKTAIL )
849 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN  | IPF_4WAY | IPF_COCKTAIL )
850 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_COCKTAIL )
851 	PORT_DIPNAME( 0x20, 0x00, "Test I/O and Dip SW" )
852 	PORT_DIPSETTING(    0x20, DEF_STR( No ) )
853 	PORT_DIPSETTING(    0x00, DEF_STR( Yes ) )
854 	PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED )
855 
856 	PORT_START	/* IN2 */
857 	PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_UNUSED )
858 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
859 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 )
860 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
861 	PORT_BIT_IMPULSE( 0x20, IP_ACTIVE_HIGH, IPT_COIN1, 1 )
862 	PORT_BIT_IMPULSE( 0x40, IP_ACTIVE_HIGH, IPT_COIN2, 1 )
863 	PORT_BIT_IMPULSE( 0x80, IP_ACTIVE_HIGH, IPT_SERVICE1, 1 )
864 
865 	PORT_START	/* DSW0 */
866 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Bonus_Life ) )
867 	PORT_DIPSETTING(    0x03, "10000" )
868 	PORT_DIPSETTING(    0x01, "20000" )
869 	PORT_DIPSETTING(    0x02, "30000" )
870 	PORT_DIPSETTING(    0x00, "40000" )
871 	PORT_DIPNAME( 0x0c, 0x04, DEF_STR( Difficulty ) )
872 	PORT_DIPSETTING(    0x0c, "Easy" )
873 	PORT_DIPSETTING(    0x04, "Normal" )
874 	PORT_DIPSETTING(    0x08, "Hard" )
875 	PORT_DIPSETTING(    0x00, "Very Hard" )
876 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) )
877 	PORT_DIPSETTING(    0x30, "3" )
878 	PORT_DIPSETTING(    0x10, "4" )
879 	PORT_DIPSETTING(    0x20, "5" )
880 	PORT_DIPSETTING(    0x00, DEF_STR( Free_Play ) )
881 	PORT_DIPNAME( 0x40, 0x40, "Sound" )
882 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
883 	PORT_DIPSETTING(    0x40, DEF_STR( On ) )
884 	PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) )
885 	PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
886 	PORT_DIPSETTING(    0x80, DEF_STR( Cocktail ) )
887 
888 	PORT_START	/* DSW1 */
889 	PORT_DIPNAME( 0x0f, 0x03, DEF_STR( Coin_B ) )
890 	PORT_DIPSETTING(    0x0f, DEF_STR( 4C_1C ) )
891 	PORT_DIPSETTING(    0x07, DEF_STR( 3C_1C ) )
892 	PORT_DIPSETTING(    0x0b, DEF_STR( 2C_1C ) )
893 	PORT_DIPSETTING(    0x06, "2C/1C 5C/3C 6C/4C" )
894 	PORT_DIPSETTING(    0x0a, "2C/1C 3C/2C 4C/3C" )
895 	PORT_DIPSETTING(    0x03, DEF_STR( 1C_1C ) )
896 	PORT_DIPSETTING(    0x02, "1C/1C 5C/6C" )
897 	PORT_DIPSETTING(    0x0c, "1C/1C 4C/5C" )
898 	PORT_DIPSETTING(    0x04, "1C/1C 2C/3C" )
899 	PORT_DIPSETTING(    0x0d, DEF_STR( 1C_2C ) )
900 	PORT_DIPSETTING(    0x08, "1C/2C 5C/11C" )
901 	PORT_DIPSETTING(    0x00, "1C/2C 4C/9C" )
902 	PORT_DIPSETTING(    0x05, DEF_STR( 1C_3C ) )
903 	PORT_DIPSETTING(    0x09, DEF_STR( 1C_4C ) )
904 	PORT_DIPSETTING(    0x01, DEF_STR( 1C_5C ) )
905 	PORT_DIPSETTING(    0x0e, DEF_STR( 1C_6C ) )
906 	PORT_DIPNAME( 0xf0, 0x30, DEF_STR( Coin_A ) )
907 	PORT_DIPSETTING(    0xf0, DEF_STR( 4C_1C ) )
908 	PORT_DIPSETTING(    0x70, DEF_STR( 3C_1C ) )
909 	PORT_DIPSETTING(    0xb0, DEF_STR( 2C_1C ) )
910 	PORT_DIPSETTING(    0x60, "2C/1C 5C/3C 6C/4C" )
911 	PORT_DIPSETTING(    0xa0, "2C/1C 3C/2C 4C/3C" )
912 	PORT_DIPSETTING(    0x30, DEF_STR( 1C_1C ) )
913 	PORT_DIPSETTING(    0x20, "1C/1C 5C/6C" )
914 	PORT_DIPSETTING(    0xc0, "1C/1C 4C/5C" )
915 	PORT_DIPSETTING(    0x40, "1C/1C 2C/3C" )
916 	PORT_DIPSETTING(    0xd0, DEF_STR( 1C_2C ) )
917 	PORT_DIPSETTING(    0x80, "1C/2C 5C/11C" )
918 	PORT_DIPSETTING(    0x00, "1C/2C 4C/9C" )
919 	PORT_DIPSETTING(    0x50, DEF_STR( 1C_3C ) )
920 	PORT_DIPSETTING(    0x90, DEF_STR( 1C_4C ) )
921 	PORT_DIPSETTING(    0x10, DEF_STR( 1C_5C ) )
922 	PORT_DIPSETTING(    0xe0, DEF_STR( 1C_6C ) )
923 
924 	PORT_START	/* FAKE */
925 	PORT_BITX(0x01, IP_ACTIVE_HIGH, IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, IP_JOY_NONE )
926 INPUT_PORTS_END
927 
928 INPUT_PORTS_START( futspy )
929 	PORT_START	/* IN0 */
930 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY )
931 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT  | IPF_8WAY )
932 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP    | IPF_8WAY )
933 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN  | IPF_8WAY )
934 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
935 	PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 )
936 	PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED )
937 
938 	PORT_START	/* IN1 */
939 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
940 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_COCKTAIL )
941 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_COCKTAIL )
942 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_COCKTAIL )
943 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_COCKTAIL )
944 	PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 | IPF_COCKTAIL )
945 	PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED )
946 
947 	PORT_START	/* IN2 */
948 	PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_UNUSED )
949 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
950 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 )
951 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
952 	PORT_BIT_IMPULSE( 0x20, IP_ACTIVE_HIGH, IPT_COIN1, 1 )
953 	PORT_BIT_IMPULSE( 0x40, IP_ACTIVE_HIGH, IPT_COIN2, 1 )
954 	PORT_BIT_IMPULSE( 0x80, IP_ACTIVE_HIGH, IPT_SERVICE1, 1 )
955 
956 	PORT_START	/* DSW1 */
957 	PORT_DIPNAME( 0x0f, 0x00, DEF_STR ( Coin_A ) )
958 	PORT_DIPSETTING(    0x08, DEF_STR ( 4C_1C ) )
959 	PORT_DIPSETTING(    0x07, DEF_STR ( 3C_1C ) )
960 	PORT_DIPSETTING(    0x06, DEF_STR ( 2C_1C ) )
961 	PORT_DIPSETTING(    0x0a, "2C/1C 5C/3C 6C/4C" )
962 	PORT_DIPSETTING(    0x0b, "2C/1C 4C/3C" )
963 	PORT_DIPSETTING(    0x00, DEF_STR ( 1C_1C ) )
964 	PORT_DIPSETTING(    0x0e, "1C/1C 2C/3C" )
965 	PORT_DIPSETTING(    0x0d, "1C/1C 4C/5C" )
966 	PORT_DIPSETTING(    0x0c, "1C/1C 5C/6C" )
967 	PORT_DIPSETTING(    0x09, DEF_STR ( 2C_3C ) )
968 	PORT_DIPSETTING(    0x01, DEF_STR ( 1C_2C ) )
969 	PORT_DIPSETTING(    0x0f, "1C/2C 5C/11C" )
970 	PORT_DIPSETTING(    0x02, DEF_STR ( 1C_3C ) )
971 	PORT_DIPSETTING(    0x03, DEF_STR ( 1C_4C ) )
972 	PORT_DIPSETTING(    0x04, DEF_STR ( 1C_5C ) )
973 	PORT_DIPSETTING(    0x05, DEF_STR ( 1C_6C ) )
974 	PORT_DIPNAME( 0xf0, 0x00, DEF_STR ( Coin_B ) )
975 	PORT_DIPSETTING(    0x80, DEF_STR ( 4C_1C ) )
976 	PORT_DIPSETTING(    0x70, DEF_STR ( 3C_1C ) )
977 	PORT_DIPSETTING(    0x60, DEF_STR ( 2C_1C ) )
978 	PORT_DIPSETTING(    0xa0, "2C/1C 5C/3C 6C/4C" )
979 	PORT_DIPSETTING(    0xb0, "2C/1C 4C/3C" )
980 	PORT_DIPSETTING(    0x00, DEF_STR ( 1C_1C ) )
981 	PORT_DIPSETTING(    0xe0, "1C/1C 2C/3C" )
982 	PORT_DIPSETTING(    0xd0, "1C/1C 4C/5C" )
983 	PORT_DIPSETTING(    0xc0, "1C/1C 5C/6C" )
984 	PORT_DIPSETTING(    0x90, DEF_STR ( 2C_3C ) )
985 	PORT_DIPSETTING(    0x10, DEF_STR ( 1C_2C ) )
986 	PORT_DIPSETTING(    0xf0, "1C/2C 5C/11C" )
987 	PORT_DIPSETTING(    0x20, DEF_STR ( 1C_3C ) )
988 	PORT_DIPSETTING(    0x30, DEF_STR ( 1C_4C ) )
989 	PORT_DIPSETTING(    0x40, DEF_STR ( 1C_5C ) )
990 	PORT_DIPSETTING(    0x50, DEF_STR ( 1C_6C ) )
991 
992 	PORT_START	/* DSW0 */
993 	PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) )
994 	PORT_DIPSETTING(    0x01, DEF_STR( Upright ) )
995 	PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) )
996 	PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) )
997 	PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
998 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
999 	PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Lives ) )
1000 	PORT_DIPSETTING(    0x00, "3" )
1001 	PORT_DIPSETTING(    0x04, "4" )
1002 	PORT_DIPSETTING(    0x08, "5" )
1003 	PORT_DIPSETTING(    0x0c, DEF_STR( Free_Play ) )
1004 	PORT_DIPNAME( 0x30, 0x00, DEF_STR( Bonus_Life ) )
1005 	PORT_DIPSETTING(    0x00, "20K 40K 60K" )
1006 	PORT_DIPSETTING(    0x10, "30K 60K 90K" )
1007 	PORT_DIPSETTING(    0x20, "40K 70K 100K" )
1008 	PORT_DIPSETTING(    0x30, "40K 80K 120K" )
1009 	PORT_DIPNAME( 0xc0, 0x40, DEF_STR( Difficulty ) )
1010 	PORT_DIPSETTING(    0x00, "Easy" )
1011 	PORT_DIPSETTING(    0x40, "Medium" )
1012 	PORT_DIPSETTING(    0x80, "Hard" )
1013 	PORT_DIPSETTING(    0xc0, "Hardest" )
1014 
1015 	PORT_START	/* FAKE */
1016 	PORT_BITX(0x01, IP_ACTIVE_HIGH, IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, IP_JOY_NONE )
1017 INPUT_PORTS_END
1018 
1019 /* Graphics Layouts */
1020 
1021 struct GfxLayout zaxxon_charlayout1 =
1022 {
1023 	8,8,	/* 8*8 characters */
1024 	256,	/* 256 characters */
1025 	3,	/* 3 bits per pixel (actually 2, the third plane is 0) */
1026 	{ 2*256*8*8, 256*8*8, 0 },	/* the bitplanes are separated */
1027 	{ 0, 1, 2, 3, 4, 5, 6, 7 },
1028 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
1029 	8*8 /* every char takes 8 consecutive bytes */
1030 };
1031 
1032 struct GfxLayout zaxxon_charlayout2 =
1033 {
1034 	8,8,	/* 8*8 characters */
1035 	1024,	/* 1024 characters */
1036 	3,	/* 3 bits per pixel */
1037 	{ 2*1024*8*8, 1024*8*8, 0 },	/* the bitplanes are separated */
1038 	{ 0, 1, 2, 3, 4, 5, 6, 7 },
1039 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
1040 	8*8 /* every char takes 8 consecutive bytes */
1041 };
1042 
1043 static struct GfxLayout zaxxon_spritelayout =
1044 {
1045 	32,32,	/* 32*32 sprites */
1046 	64, /* 64 sprites */
1047 	3,	/* 3 bits per pixel */
1048 	{ 2*64*128*8, 64*128*8, 0 },	/* the bitplanes are separated */
1049 	{ 0, 1, 2, 3, 4, 5, 6, 7,
1050 			8*8+0, 8*8+1, 8*8+2, 8*8+3, 8*8+4, 8*8+5, 8*8+6, 8*8+7,
1051 			16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7,
1052 			24*8+0, 24*8+1, 24*8+2, 24*8+3, 24*8+4, 24*8+5, 24*8+6, 24*8+7 },
1053 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
1054 			32*8, 33*8, 34*8, 35*8, 36*8, 37*8, 38*8, 39*8,
1055 			64*8, 65*8, 66*8, 67*8, 68*8, 69*8, 70*8, 71*8,
1056 			96*8, 97*8, 98*8, 99*8, 100*8, 101*8, 102*8, 103*8 },
1057 	128*8	/* every sprite takes 128 consecutive bytes */
1058 };
1059 
1060 static struct GfxLayout congo_spritelayout =
1061 {
1062 	32,32,	/* 32*32 sprites */
1063 	128,	/* 128 sprites */
1064 	3,	/* 3 bits per pixel */
1065 	{ 2*128*128*8, 128*128*8, 0 },	/* the bitplanes are separated */
1066 	{ 0, 1, 2, 3, 4, 5, 6, 7,
1067 			8*8+0, 8*8+1, 8*8+2, 8*8+3, 8*8+4, 8*8+5, 8*8+6, 8*8+7,
1068 			16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7,
1069 			24*8+0, 24*8+1, 24*8+2, 24*8+3, 24*8+4, 24*8+5, 24*8+6, 24*8+7 },
1070 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
1071 			32*8, 33*8, 34*8, 35*8, 36*8, 37*8, 38*8, 39*8,
1072 			64*8, 65*8, 66*8, 67*8, 68*8, 69*8, 70*8, 71*8,
1073 			96*8, 97*8, 98*8, 99*8, 100*8, 101*8, 102*8, 103*8 },
1074 	128*8	/* every sprite takes 128 consecutive bytes */
1075 };
1076 
1077 /* Graphics Decode Info */
1078 
1079 static struct GfxDecodeInfo gfxdecodeinfo[] =
1080 {
1081 	{ REGION_GFX1, 0, &zaxxon_charlayout1,	 0, 32 },	/* characters */
1082 	{ REGION_GFX2, 0, &zaxxon_charlayout2,	 0, 32 },	/* background tiles */
1083 	{ REGION_GFX3, 0, &zaxxon_spritelayout,  0, 32 },	/* sprites */
1084 	{ -1 } /* end of array */
1085 };
1086 
1087 static struct GfxDecodeInfo congo_gfxdecodeinfo[] =
1088 {
1089 	{ REGION_GFX1, 0, &zaxxon_charlayout1,	 0, 32 },	/* characters */
1090 	{ REGION_GFX2, 0, &zaxxon_charlayout2,	 0, 32 },	/* background tiles */
1091 	{ REGION_GFX3, 0, &congo_spritelayout,  0, 32 },	/* sprites */
1092 	{ -1 } /* end of array */
1093 };
1094 
1095 /* Sound Samples */
1096 
1097 static const char *zaxxon_sample_names[] =
1098 {
1099 	"*zaxxon",
1100 	"03.wav",   /* Homing Missile */
1101 	"02.wav",   /* Base Missile */
1102 	"01.wav",   /* Laser (force field) */
1103 	"00.wav",   /* Battleship (end of level boss) */
1104 	"11.wav",   /* S-Exp (enemy explosion) */
1105 	"10.wav",   /* M-Exp (ship explosion) */
1106 	"08.wav",   /* Cannon (ship fire) */
1107 	"23.wav",   /* Shot (enemy fire) */
1108 	"21.wav",   /* Alarm 2 (target lock) */
1109 	"20.wav",   /* Alarm 3 (low fuel) */
1110 	"05.wav",   /* initial background noise */
1111 	"04.wav",   /* looped asteroid noise */
1112 	0
1113 };
1114 
1115 static struct Samplesinterface zaxxon_samples_interface =
1116 {
1117 	12, /* 12 channels */
1118 	25, /* volume */
1119 	zaxxon_sample_names
1120 };
1121 
1122 static const char *congo_sample_names[] =
1123 {
1124 	"*congo",
1125 	"gorilla.wav",
1126 	"bass.wav",
1127 	"congaa.wav",
1128 	"congab.wav",
1129 	"rim.wav",
1130 	0
1131 };
1132 
1133 static struct Samplesinterface congo_samples_interface =
1134 {
1135 	5,	/* 5 channels */
1136 	25, /* volume */
1137 	congo_sample_names
1138 };
1139 
1140 /* Sound Interfaces */
1141 
1142 static struct SN76496interface congo_sn76496_interface =
1143 {
1144 	2,	/* 2 chips */
1145 	{ 4000000, 4000000 },	/* 4 MHz??? */
1146 	{ 100, 100 }
1147 };
1148 
1149 /* Interrupt Generators */
1150 
INTERRUPT_GEN(zaxxon_interrupt)1151 static INTERRUPT_GEN( zaxxon_interrupt )
1152 {
1153 	/* Get F2 key press status*/
1154 	if (readinputport(5) & 0x01)
1155 		nmi_line_pulse();		/* trigger self test*/
1156 	else
1157 		irq0_line_hold();
1158 }
1159 
1160 /* Machine Initialization */
1161 
MACHINE_INIT(zaxxon)1162 MACHINE_INIT( zaxxon )
1163 {
1164 	zaxxon_vid_type = 0;
1165 }
1166 
MACHINE_INIT(congo)1167 MACHINE_INIT( congo )
1168 {
1169 	zaxxon_vid_type = 1;
1170 }
1171 
MACHINE_INIT(futspy)1172 MACHINE_INIT( futspy )
1173 {
1174 	zaxxon_vid_type = 2;
1175 }
1176 
1177 /* Machine Drivers */
1178 
1179 static MACHINE_DRIVER_START( root )
1180 	/* basic machine hardware*/
1181 	MDRV_CPU_ADD_TAG("main", Z80, 48660000/16)	/* 3.04125 MHz*/
MDRV_CPU_MEMORY(readmem,writemem)1182 	MDRV_CPU_MEMORY(readmem, writemem)
1183 	MDRV_CPU_VBLANK_INT(zaxxon_interrupt, 1)
1184 
1185 	MDRV_FRAMES_PER_SECOND(60)
1186 	MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
1187 
1188 	MDRV_MACHINE_INIT(zaxxon)
1189 
1190 	/* video hardware*/
1191 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
1192 	MDRV_SCREEN_SIZE(32*8, 32*8)
1193 	MDRV_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
1194 	MDRV_GFXDECODE(gfxdecodeinfo)
1195 	MDRV_PALETTE_LENGTH(256)
1196 	MDRV_COLORTABLE_LENGTH(32*8)
1197 
1198 	MDRV_PALETTE_INIT(zaxxon)
1199 	MDRV_VIDEO_START(zaxxon)
1200 	MDRV_VIDEO_UPDATE(zaxxon)
1201 MACHINE_DRIVER_END
1202 
1203 static MACHINE_DRIVER_START( zaxxon )
1204 	MDRV_IMPORT_FROM(root)
1205 
1206 	MDRV_SOUND_ADD(SAMPLES, zaxxon_samples_interface)
1207 MACHINE_DRIVER_END
1208 
1209 static MACHINE_DRIVER_START( razmataz )
1210 	MDRV_IMPORT_FROM(root)
1211 
1212 	MDRV_CPU_MODIFY("main")
1213 	MDRV_CPU_MEMORY(razmataz_readmem, razmataz_writemem)
1214 
1215 	MDRV_VIDEO_START(razmataz)
1216 	MDRV_VIDEO_UPDATE(razmataz)
1217 MACHINE_DRIVER_END
1218 
1219 static MACHINE_DRIVER_START( ixion )
1220 	MDRV_IMPORT_FROM(root)
1221 
1222 	MDRV_CPU_MODIFY("main")
1223 	MDRV_CPU_MEMORY(ixion_readmem, razmataz_writemem)
1224 
1225 	MDRV_VIDEO_START(razmataz)
1226 	MDRV_VIDEO_UPDATE(razmataz)
1227 MACHINE_DRIVER_END
1228 
1229 static MACHINE_DRIVER_START( congo )
1230 	MDRV_IMPORT_FROM(root)
1231 
1232 	MDRV_CPU_MODIFY("main")
1233 	MDRV_CPU_MEMORY(congo_readmem, congo_writemem)
1234 
1235 	MDRV_CPU_ADD(Z80, 2000000)
1236 	MDRV_CPU_FLAGS(CPU_AUDIO_CPU)
1237 	MDRV_CPU_MEMORY(congo_snd_readmem, congo_snd_writemem)
1238 	MDRV_CPU_VBLANK_INT(irq0_line_hold, 4)
1239 
1240 	MDRV_MACHINE_INIT(congo)
1241 
1242 	MDRV_GFXDECODE(congo_gfxdecodeinfo)
1243 
1244 	MDRV_VIDEO_START(congo)
1245 	MDRV_VIDEO_UPDATE(congo)
1246 
1247 	MDRV_SOUND_ADD(SN76496, congo_sn76496_interface)
1248 	MDRV_SOUND_ADD(SAMPLES, congo_samples_interface)
1249 MACHINE_DRIVER_END
1250 
1251 static MACHINE_DRIVER_START( futspy )
1252 	MDRV_IMPORT_FROM(root)
1253 
1254 	MDRV_CPU_MODIFY("main")
1255 	MDRV_CPU_MEMORY(readmem, futspy_writemem)
1256 
1257 	MDRV_MACHINE_INIT(futspy)
1258 
1259 	MDRV_GFXDECODE(congo_gfxdecodeinfo)
1260 
1261 	MDRV_VIDEO_UPDATE(futspy)
1262 
1263 	MDRV_SOUND_ADD(SAMPLES, zaxxon_samples_interface)
1264 MACHINE_DRIVER_END
1265 
1266 /* ROMs */
1267 
1268 ROM_START( zaxxon )
1269 	ROM_REGION( 0x10000, REGION_CPU1, 0 )	/* 64k for code */
1270 	ROM_LOAD( "zaxxon.3",     0x0000, 0x2000, CRC(6e2b4a30) SHA1(80ac53c554c84226b119cbe3cf3470bcdbcd5762) )
1271 	ROM_LOAD( "zaxxon.2",     0x2000, 0x2000, CRC(1c9ea398) SHA1(0cd259be3fa80f3d53dfa76d5ca06773cdfe5945) )
1272 	ROM_LOAD( "zaxxon.1",     0x4000, 0x1000, CRC(1c123ef9) SHA1(2588be06ea7baca6112d58c78a1eeb98aad8a02e) )
1273 
1274 	ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
1275 	ROM_LOAD( "zaxxon.14",    0x0000, 0x0800, CRC(07bf8c52) SHA1(425157a1625b1bd5169c3218b958010bf6af12bb) )  /* characters */
1276 	ROM_LOAD( "zaxxon.15",    0x0800, 0x0800, CRC(c215edcb) SHA1(f1ded2173eb139f48d2ca86c5ef00acbe6c11cd3) )
1277 	/* 1000-17ff empty space to convert the characters as 3bpp instead of 2 */
1278 
1279 	ROM_REGION( 0x6000, REGION_GFX2, ROMREGION_DISPOSE )
1280 	ROM_LOAD( "zaxxon.6",     0x0000, 0x2000, CRC(6e07bb68) SHA1(a002f3441b0f0044615ce71ecbd14edadba16270) )  /* background tiles */
1281 	ROM_LOAD( "zaxxon.5",     0x2000, 0x2000, CRC(0a5bce6a) SHA1(a86543727389931244ba8a576b543d7ac05a2585) )
1282 	ROM_LOAD( "zaxxon.4",     0x4000, 0x2000, CRC(a5bf1465) SHA1(a8cd27dfb4a606bae8bfddcf936e69e980fb1977) )
1283 
1284 	ROM_REGION( 0x6000, REGION_GFX3, ROMREGION_DISPOSE )
1285 	ROM_LOAD( "zaxxon.11",    0x0000, 0x2000, CRC(eaf0dd4b) SHA1(194e2ca0a806e0cb6bb7cc8341d1fc6f2ea911f6) )  /* sprites */
1286 	ROM_LOAD( "zaxxon.12",    0x2000, 0x2000, CRC(1c5369c7) SHA1(af6a5984c3cedfa8c9efcd669f4f205b51a433b2) )
1287 	ROM_LOAD( "zaxxon.13",    0x4000, 0x2000, CRC(ab4e8a9a) SHA1(4ac79cccc30e4adfa878b36101e97e20ac010438) )
1288 
1289 	ROM_REGION( 0x8000, REGION_GFX4, ROMREGION_DISPOSE )	/* background tilemaps converted in vh_start */
1290 	ROM_LOAD( "zaxxon.8",     0x0000, 0x2000, CRC(28d65063) SHA1(e1f90716236c61df61bdc6915a8e390cb4dcbf15) )
1291 	ROM_LOAD( "zaxxon.7",     0x2000, 0x2000, CRC(6284c200) SHA1(d26a9049541479b8b19f5aa0690cf4aaa787c9b5) )
1292 	ROM_LOAD( "zaxxon.10",    0x4000, 0x2000, CRC(a95e61fd) SHA1(a0f8c15ff75affa3532abf8f340811cf415421fd) )
1293 	ROM_LOAD( "zaxxon.9",     0x6000, 0x2000, CRC(7e42691f) SHA1(2124363be8f590b74e2b15dd3f90d77dd9ca9528) )
1294 
1295 	ROM_REGION( 0x0200, REGION_PROMS, 0 )
1296 	ROM_LOAD( "zaxxon.u98",   0x0000, 0x0100, CRC(6cc6695b) SHA1(01ae8450ccc302e1a5ae74230d44f6f531a962e2) ) /* palette */
1297 	ROM_LOAD( "zaxxon.u72",   0x0100, 0x0100, CRC(deaa21f7) SHA1(0cf08fb62f77d93ff7cb883c633e0db35906e11d) ) /* char lookup table */
1298 ROM_END
1299 
1300 ROM_START( zaxxon2 )
1301 	ROM_REGION( 0x10000, REGION_CPU1, 0 )	/* 64k for code */
1302 	ROM_LOAD( "3a",           0x0000, 0x2000, CRC(b18e428a) SHA1(d3ff077e37a3ed8a9cc32cba19e1694b79df6b30) )
1303 	ROM_LOAD( "zaxxon.2",     0x2000, 0x2000, CRC(1c9ea398) SHA1(0cd259be3fa80f3d53dfa76d5ca06773cdfe5945) )
1304 	ROM_LOAD( "1a",           0x4000, 0x1000, CRC(1977d933) SHA1(b0100a51a85928b8df3b07b27c9e7e4f929d7893) )
1305 
1306 	ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
1307 	ROM_LOAD( "zaxxon.14",    0x0000, 0x0800, CRC(07bf8c52) SHA1(425157a1625b1bd5169c3218b958010bf6af12bb) )  /* characters */
1308 	ROM_LOAD( "zaxxon.15",    0x0800, 0x0800, CRC(c215edcb) SHA1(f1ded2173eb139f48d2ca86c5ef00acbe6c11cd3) )
1309 	/* 1000-17ff empty space to convert the characters as 3bpp instead of 2 */
1310 
1311 	ROM_REGION( 0x6000, REGION_GFX2, ROMREGION_DISPOSE )
1312 	ROM_LOAD( "zaxxon.6",     0x0000, 0x2000, CRC(6e07bb68) SHA1(a002f3441b0f0044615ce71ecbd14edadba16270) )  /* background tiles */
1313 	ROM_LOAD( "zaxxon.5",     0x2000, 0x2000, CRC(0a5bce6a) SHA1(a86543727389931244ba8a576b543d7ac05a2585) )
1314 	ROM_LOAD( "zaxxon.4",     0x4000, 0x2000, CRC(a5bf1465) SHA1(a8cd27dfb4a606bae8bfddcf936e69e980fb1977) )
1315 
1316 	ROM_REGION( 0x6000, REGION_GFX3, ROMREGION_DISPOSE )
1317 	ROM_LOAD( "zaxxon.11",    0x0000, 0x2000, CRC(eaf0dd4b) SHA1(194e2ca0a806e0cb6bb7cc8341d1fc6f2ea911f6) )  /* sprites */
1318 	ROM_LOAD( "zaxxon.12",    0x2000, 0x2000, CRC(1c5369c7) SHA1(af6a5984c3cedfa8c9efcd669f4f205b51a433b2) )
1319 	ROM_LOAD( "zaxxon.13",    0x4000, 0x2000, CRC(ab4e8a9a) SHA1(4ac79cccc30e4adfa878b36101e97e20ac010438) )
1320 
1321 	ROM_REGION( 0x8000, REGION_GFX4, ROMREGION_DISPOSE )	/* background tilemaps converted in vh_start */
1322 	ROM_LOAD( "zaxxon.8",     0x0000, 0x2000, CRC(28d65063) SHA1(e1f90716236c61df61bdc6915a8e390cb4dcbf15) )
1323 	ROM_LOAD( "zaxxon.7",     0x2000, 0x2000, CRC(6284c200) SHA1(d26a9049541479b8b19f5aa0690cf4aaa787c9b5) )
1324 	ROM_LOAD( "zaxxon.10",    0x4000, 0x2000, CRC(a95e61fd) SHA1(a0f8c15ff75affa3532abf8f340811cf415421fd) )
1325 	ROM_LOAD( "zaxxon.9",     0x6000, 0x2000, CRC(7e42691f) SHA1(2124363be8f590b74e2b15dd3f90d77dd9ca9528) )
1326 
1327 	ROM_REGION( 0x0200, REGION_PROMS, 0 )
1328 	ROM_LOAD( "zaxxon.u98",   0x0000, 0x0100, CRC(6cc6695b) SHA1(01ae8450ccc302e1a5ae74230d44f6f531a962e2) ) /* palette */
1329 	ROM_LOAD( "j214a2.72",    0x0100, 0x0100, CRC(a9e1fb43) SHA1(57dbcfe2438fd090c08594818549aeea6339eab2) ) /* char lookup table */
1330 ROM_END
1331 
1332 ROM_START( zaxxonb )
1333 	ROM_REGION( 2*0x10000, REGION_CPU1, 0 )	/* 64k for code + 64k for decrypted opcodes */
1334 	ROM_LOAD( "zaxxonb.3",    0x0000, 0x2000, CRC(125bca1c) SHA1(f4160966d42e5282736cde8a276204ba8910ca61) )
1335 	ROM_LOAD( "zaxxonb.2",    0x2000, 0x2000, CRC(c088df92) SHA1(c0c6cd8dcf6db65129980331fa9ecc3800b63436) )
1336 	ROM_LOAD( "zaxxonb.1",    0x4000, 0x1000, CRC(e7bdc417) SHA1(209f0d259f60b984c84229bb31af1ef939adc73e) )
1337 
1338 	ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
1339 	ROM_LOAD( "zaxxon.14",    0x0000, 0x0800, CRC(07bf8c52) SHA1(425157a1625b1bd5169c3218b958010bf6af12bb) )  /* characters */
1340 	ROM_LOAD( "zaxxon.15",    0x0800, 0x0800, CRC(c215edcb) SHA1(f1ded2173eb139f48d2ca86c5ef00acbe6c11cd3) )
1341 	/* 1000-17ff empty space to convert the characters as 3bpp instead of 2 */
1342 
1343 	ROM_REGION( 0x6000, REGION_GFX2, ROMREGION_DISPOSE )
1344 	ROM_LOAD( "zaxxon.6",     0x0000, 0x2000, CRC(6e07bb68) SHA1(a002f3441b0f0044615ce71ecbd14edadba16270) )  /* background tiles */
1345 	ROM_LOAD( "zaxxon.5",     0x2000, 0x2000, CRC(0a5bce6a) SHA1(a86543727389931244ba8a576b543d7ac05a2585) )
1346 	ROM_LOAD( "zaxxon.4",     0x4000, 0x2000, CRC(a5bf1465) SHA1(a8cd27dfb4a606bae8bfddcf936e69e980fb1977) )
1347 
1348 	ROM_REGION( 0x6000, REGION_GFX3, ROMREGION_DISPOSE )
1349 	ROM_LOAD( "zaxxon.11",    0x0000, 0x2000, CRC(eaf0dd4b) SHA1(194e2ca0a806e0cb6bb7cc8341d1fc6f2ea911f6) )  /* sprites */
1350 	ROM_LOAD( "zaxxon.12",    0x2000, 0x2000, CRC(1c5369c7) SHA1(af6a5984c3cedfa8c9efcd669f4f205b51a433b2) )
1351 	ROM_LOAD( "zaxxon.13",    0x4000, 0x2000, CRC(ab4e8a9a) SHA1(4ac79cccc30e4adfa878b36101e97e20ac010438) )
1352 
1353 	ROM_REGION( 0x8000, REGION_GFX4, ROMREGION_DISPOSE )	/* background tilemaps converted in vh_start */
1354 	ROM_LOAD( "zaxxon.8",     0x0000, 0x2000, CRC(28d65063) SHA1(e1f90716236c61df61bdc6915a8e390cb4dcbf15) )
1355 	ROM_LOAD( "zaxxon.7",     0x2000, 0x2000, CRC(6284c200) SHA1(d26a9049541479b8b19f5aa0690cf4aaa787c9b5) )
1356 	ROM_LOAD( "zaxxon.10",    0x4000, 0x2000, CRC(a95e61fd) SHA1(a0f8c15ff75affa3532abf8f340811cf415421fd) )
1357 	ROM_LOAD( "zaxxon.9",     0x6000, 0x2000, CRC(7e42691f) SHA1(2124363be8f590b74e2b15dd3f90d77dd9ca9528) )
1358 
1359 	ROM_REGION( 0x0200, REGION_PROMS, 0 )
1360 	ROM_LOAD( "zaxxon.u98",   0x0000, 0x0100, CRC(6cc6695b) SHA1(01ae8450ccc302e1a5ae74230d44f6f531a962e2) ) /* palette */
1361 	ROM_LOAD( "zaxxon.u72",   0x0100, 0x0100, CRC(deaa21f7) SHA1(0cf08fb62f77d93ff7cb883c633e0db35906e11d) ) /* char lookup table */
1362 ROM_END
1363 
1364 ROM_START( szaxxon )
1365 	ROM_REGION( 2*0x10000, REGION_CPU1, 0 )	/* 64k for code + 64k for decrypted opcodes */
1366 	ROM_LOAD( "suzaxxon.3",   0x0000, 0x2000, CRC(af7221da) SHA1(b5d3beb296d52ed69b4ceacf329c20a72e3a1dce) )
1367 	ROM_LOAD( "suzaxxon.2",   0x2000, 0x2000, CRC(1b90fb2a) SHA1(afb2bd2ffee3f5e589064f59b6ac21ed915094df) )
1368 	ROM_LOAD( "suzaxxon.1",   0x4000, 0x1000, CRC(07258b4a) SHA1(91e3a0c0df6c9cf66980d1ffcc3830ffdbef8c2f) )
1369 
1370 	ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
1371 	ROM_LOAD( "suzaxxon.14",  0x0000, 0x0800, CRC(bccf560c) SHA1(9f92bd15466048a5665bfc2ebc8c6504af9353eb) )  /* characters */
1372 	ROM_LOAD( "suzaxxon.15",  0x0800, 0x0800, CRC(d28c628b) SHA1(42ab7dc0e4e0d09213054597373383cdb6a55699) )
1373 	/* 1000-17ff empty space to convert the characters as 3bpp instead of 2 */
1374 
1375 	ROM_REGION( 0x6000, REGION_GFX2, ROMREGION_DISPOSE )
1376 	ROM_LOAD( "suzaxxon.6",   0x0000, 0x2000, CRC(f51af375) SHA1(8682217dc800f43b73cd5e8501dbf3b7cd136dc1) )  /* background tiles */
1377 	ROM_LOAD( "suzaxxon.5",   0x2000, 0x2000, CRC(a7de021d) SHA1(a1bee07aa906366aa69866d1bdff38e2d90fafdd) )
1378 	ROM_LOAD( "suzaxxon.4",   0x4000, 0x2000, CRC(5bfb3b04) SHA1(f898e42d6bc1fd3629c9caee3c2af27805969ac6) )
1379 
1380 	ROM_REGION( 0x6000, REGION_GFX3, ROMREGION_DISPOSE )
1381 	ROM_LOAD( "suzaxxon.11",  0x0000, 0x2000, CRC(1503ae41) SHA1(d4085f15fcbfb9547a7f9e2cb7ce9276c4d6c08d) )  /* sprites */
1382 	ROM_LOAD( "suzaxxon.12",  0x2000, 0x2000, CRC(3b53d83f) SHA1(118e9d2b4f5daf96f5a38ccd92d0b046a470b0b2) )
1383 	ROM_LOAD( "suzaxxon.13",  0x4000, 0x2000, CRC(581e8793) SHA1(2b3305dd55dc09d7394ed8ae691773972dba28b9) )
1384 
1385 	ROM_REGION( 0x8000, REGION_GFX4, ROMREGION_DISPOSE )	/* background tilemaps converted in vh_start */
1386 	ROM_LOAD( "suzaxxon.8",   0x0000, 0x2000, CRC(dd1b52df) SHA1(8170dd9f81c41104694951a2c74405d0c6d8b9b6) )
1387 	ROM_LOAD( "suzaxxon.7",   0x2000, 0x2000, CRC(b5bc07f0) SHA1(1e4d460ce8cca66b081ee8ec1a9adb6ef98274ec) )
1388 	ROM_LOAD( "suzaxxon.10",  0x4000, 0x2000, CRC(68e84174) SHA1(b78c44d92078552835a20bcb7125fc9ca8af5048) )
1389 	ROM_LOAD( "suzaxxon.9",   0x6000, 0x2000, CRC(a509994b) SHA1(51541ec78ab3f8241a5ddf7f99a46f5e44292992) )
1390 
1391 	ROM_REGION( 0x0200, REGION_PROMS, 0 )
1392 	ROM_LOAD( "suzaxxon.u98", 0x0000, 0x0100, CRC(15727a9f) SHA1(42840e9ab303fb64102a1dbae03d66c9cf743a9f) ) /* palette */
1393 	ROM_LOAD( "suzaxxon.u72", 0x0100, 0x0100, CRC(deaa21f7) SHA1(0cf08fb62f77d93ff7cb883c633e0db35906e11d) ) /* char lookup table */
1394 ROM_END
1395 
1396 ROM_START( razmataz )
1397 	ROM_REGION( 2*0x10000, REGION_CPU1, 0 )	/* 64k for code + 64k for decrypted opcodes */
1398 	ROM_LOAD( "u27",           0x0000, 0x2000, CRC(254f350f) SHA1(f8e84778b7ffc4da76e97992f01c742c212480cf) )
1399 	ROM_LOAD( "u28",           0x2000, 0x2000, CRC(3a1eaa99) SHA1(d1f2a61a8548135c9754097aa468672616244710) )
1400 	ROM_LOAD( "u29",           0x4000, 0x2000, CRC(0ee67e78) SHA1(c6c703000a4e0da8af65be53b2a6b2ef67860c30) )
1401 
1402 	ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
1403 	ROM_LOAD( "1921.u68",      0x0000, 0x0800, CRC(77f8ff5a) SHA1(d535109387559dd5b58dc6432a1eae6535442079) )  /* characters */
1404 	ROM_LOAD( "1922.u69",      0x0800, 0x0800, CRC(cf63621e) SHA1(60452ad34f2b0e0afa0f09455d9aa84058c54fd5) )
1405 	/* 1000-17ff empty space to convert the characters as 3bpp instead of 2 */
1406 
1407 	ROM_REGION( 0x6000, REGION_GFX2, ROMREGION_DISPOSE )
1408 	ROM_LOAD( "1934.113",      0x0000, 0x2000, CRC(39bb679c) SHA1(0a384286dbfc8b35e4779119f62769b6cfc93a52) )  /* background tiles */
1409 	ROM_LOAD( "1933.112",      0x2000, 0x2000, CRC(1022185e) SHA1(874d796baea8ade2c642f3640ec7875a9f509a68) )
1410 	ROM_LOAD( "1932.111",      0x4000, 0x2000, CRC(c7a715eb) SHA1(8b04558c87c5a5f94a5bab9fbe198a0b8a84ebf4) )
1411 
1412 	ROM_REGION( 0x6000, REGION_GFX3, ROMREGION_DISPOSE )
1413 	ROM_LOAD( "1925.u77",      0x0000, 0x2000, CRC(a7965437) SHA1(24ab3cc9b6d70e8cab4f0a20f84fb98682b321f5) )  /* sprites */
1414 	ROM_LOAD( "1926.u78",      0x2000, 0x2000, CRC(9a3af434) SHA1(0b5b1ac9cf8bee1c3830ef3baffcd7d3a05bf765) )
1415 	ROM_LOAD( "1927.u79",      0x4000, 0x2000, CRC(0323de2b) SHA1(6f6ceafe6472d59bd0ffecb9dd2d401659157b50) )
1416 
1417 	ROM_REGION( 0x8000, REGION_GFX4, ROMREGION_DISPOSE )	/* background tilemaps converted in vh_start */
1418 	ROM_LOAD( "1929.u91",      0x0000, 0x2000, CRC(55c7c757) SHA1(ad8d548eb965f343e88bad4b4ad1b5b226f21d71) )
1419 	ROM_LOAD( "1928.u90",      0x2000, 0x2000, CRC(e58b155b) SHA1(dd6abeae66de69734b7aa5e133dbfb8f8a35578e) )
1420 	ROM_LOAD( "1931.u93",      0x4000, 0x2000, CRC(55fe0f82) SHA1(391434b41b6235199a4f19a8873a523cbb417f70) )
1421 	ROM_LOAD( "1930.u92",      0x6000, 0x2000, CRC(f355f105) SHA1(93067b7390c05b71020e77abdd9577b39e486d9f) )
1422 
1423 	ROM_REGION( 0x0200, REGION_PROMS, 0 )
1424 	ROM_LOAD( "clr.u98",       0x0000, 0x0100, CRC(0fd671af) SHA1(7f26139398754dae7383c9375fca95b7970fcefb) ) /* palette */
1425 	ROM_LOAD( "clr.u72",       0x0100, 0x0100, CRC(03233bc5) SHA1(30bd690da7eda4e13df90d7ee59dbf744b3541a4) ) /* char lookup table */
1426 
1427 	ROM_REGION( 0x1000, REGION_SOUND1, 0 ) /* sound? */
1428 	ROM_LOAD( "1923.u50",      0x0000, 0x0800, CRC(59994a51) SHA1(57ccee24a989efe39f8ffc08aab7d72a1cdef3d1) )
1429 	ROM_LOAD( "1924.u51",      0x0800, 0x0800, CRC(a75e0011) SHA1(7d67ce2e8a2de471221b3b565a937ae1a35e1560) )
1430 ROM_END
1431 
1432 ROM_START( ixion )
1433 	ROM_REGION( 2*0x10000, REGION_CPU1, 0 )	/* 64k for code + 64k for decrypted opcodes */
1434 	ROM_LOAD( "1937d.u27",           0x0000, 0x2000, CRC(f447aac5) SHA1(f6ec02f20482649ba1765254e0e67a8593075092) )
1435 	ROM_LOAD( "1938b.u28",           0x2000, 0x2000, CRC(17f48640) SHA1(d661e8ae0747c2c526360cb72e403deba7a98e71) )
1436 	ROM_LOAD( "1955b.u29",           0x4000, 0x1000, CRC(78636ec6) SHA1(afca6418221e700749031cb3fa738907d77c1566) )
1437 
1438 	ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
1439 	ROM_LOAD( "1939a.u68",      0x0000, 0x0800, CRC(c717ddc7) SHA1(86fdef368f097a27aac6e05bf3208fcdaf7d9da7) )  /* characters */
1440 	ROM_LOAD( "1940a.u69",      0x0800, 0x0800, CRC(ec4bb3ad) SHA1(8a38bc48cda59b5e76a5153d459bb2d01d6a56f3) )
1441 	/* 1000-17ff empty space to convert the characters as 3bpp instead of 2 */
1442 
1443 	ROM_REGION( 0x6000, REGION_GFX2, ROMREGION_DISPOSE )
1444 	ROM_LOAD( "1952a.113",      0x0000, 0x2000, CRC(ffb9b03d) SHA1(b7a900166a880ca4a71fec6ad02f5c0ecfc92df8) )  /* background tiles */
1445 	ROM_LOAD( "1951a.112",      0x2000, 0x2000, CRC(db743f1b) SHA1(a5d13d597fe999757137d96fb4bf7c7efc7a3245) )
1446 	ROM_LOAD( "1950a.111",      0x4000, 0x2000, CRC(c2de178a) SHA1(0347a751accb02576b9cd8b123b79018cc05268c) )
1447 
1448 	ROM_REGION( 0x6000, REGION_GFX3, ROMREGION_DISPOSE )
1449 	ROM_LOAD( "1945a.u77",      0x0000, 0x2000, CRC(3a3fbfe7) SHA1(f3a503f476524f9de5b55de49009972124e58601) )  /* sprites */
1450 	ROM_LOAD( "1946a.u78",      0x2000, 0x2000, CRC(f2cb1b53) SHA1(8c2fb58ce7de7876c4d2f1a3d13c6a5efd06d354) )
1451 	ROM_LOAD( "1947a.u79",      0x4000, 0x2000, CRC(d2421e92) SHA1(07000055ace2c6983c7add180904d6bc20e1bb3b) )
1452 
1453 	ROM_REGION( 0x8000, REGION_GFX4, ROMREGION_DISPOSE )	/* background tilemaps converted in vh_start */
1454 	ROM_LOAD( "1948a.u91",      0x0000, 0x2000, CRC(7a7fcbbe) SHA1(76dffffcadbe446091ee98958873aa76f7b17213) )
1455 	ROM_LOAD( "1953a.u90",      0x2000, 0x2000, CRC(6b626ea7) SHA1(7e02da0b031a42b077c173d85f15f75242e61e98) )
1456 	ROM_LOAD( "1949a.u93",      0x4000, 0x2000, CRC(e7722d09) SHA1(c9a0fb4fac798454facd3d5dd02d2c05cfe8e3a6) )
1457 	ROM_LOAD( "1954a.u92",      0x6000, 0x2000, CRC(a970f5ff) SHA1(0f1f8f329ceefcbd0725f8eeff1b01348f5c9374) )
1458 
1459 	ROM_REGION( 0x0200, REGION_PROMS, 0 )
1460 	ROM_LOAD( "1942a.u98",       0x0000, 0x0100, CRC(3a8e6f74) SHA1(c2d480f8c8a111c1e23cbf819dea807f8128208d) ) /* palette */
1461 	ROM_LOAD( "1941a.u72",       0x0100, 0x0100, CRC(a5d0d97e) SHA1(2677508b44f9b7a6c6ee56e49a7b88073e80debe) ) /* char lookup */
1462 
1463 	ROM_REGION( 0x1000, REGION_SOUND1, 0 ) /* sound? */
1464 	ROM_LOAD( "1943a.u50",      0x0000, 0x0800, CRC(77e5a1f0) SHA1(00152ffb59ebac718b300fdf24314b456748ffbe) )
1465 	ROM_LOAD( "1944a.u51",      0x0800, 0x0800, CRC(88215098) SHA1(54bd1c71e7f10f20623e47f4e791f54ce698bc08) )
1466 ROM_END
1467 
1468 ROM_START( congo )
1469 	ROM_REGION( 0x10000, REGION_CPU1, 0 )	/* 64k for code */
1470 	ROM_LOAD( "congo1.bin",   0x0000, 0x2000, CRC(09355b5b) SHA1(0085ac7eb0035a88cb54cdd3dd6b2643141d39db) )
1471 	ROM_LOAD( "congo2.bin",   0x2000, 0x2000, CRC(1c5e30ae) SHA1(7cc5420e0e7a2793a671b938c121ae4079f5b1b8) )
1472 	ROM_LOAD( "congo3.bin",   0x4000, 0x2000, CRC(5ee1132c) SHA1(26294cd69ee43dfd29fc3642e8c04552dcdbaa49) )
1473 	ROM_LOAD( "congo4.bin",   0x6000, 0x2000, CRC(5332b9bf) SHA1(8440cc6f92918b3b467a5a0b86c9defeb0a7db0e) )
1474 
1475 	ROM_REGION( 0x10000, REGION_CPU2, 0 ) /*64K for the sound cpu*/
1476 	ROM_LOAD( "congo17.bin",  0x0000, 0x2000, CRC(5024e673) SHA1(6f846146a4e29bcdfd5bd1bc5f1211d344cd5afa) )
1477 
1478 	ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
1479 	ROM_LOAD( "congo5.bin",   0x00000, 0x1000, CRC(7bf6ba2b) SHA1(3a2bd21b0e0e55cbd737c7b075492b5e8f944150) ) /* characters */
1480 	/* 1000-1800 empty space to convert the characters as 3bpp instead of 2 */
1481 
1482 	ROM_REGION( 0x6000, REGION_GFX2, ROMREGION_DISPOSE )
1483 	ROM_LOAD( "congo8.bin",   0x00000, 0x2000, CRC(db99a619) SHA1(499029197d26f9aea3ac15d66b5738ce7dea1f6c) ) /* background tiles */
1484 	ROM_LOAD( "congo9.bin",   0x02000, 0x2000, CRC(93e2309e) SHA1(bd8a74332cac0cf85f319c1f35d04a4781c9d655) )
1485 	ROM_LOAD( "congo10.bin",  0x04000, 0x2000, CRC(f27a9407) SHA1(d41c90c89ae28c92bf0c57927357d9b68ed7e0ef) )
1486 
1487 	ROM_REGION( 0xc000, REGION_GFX3, ROMREGION_DISPOSE )
1488 	ROM_LOAD( "congo12.bin",  0x00000, 0x2000, CRC(15e3377a) SHA1(04a7fbfd58924359fae0ba76ed152f325f07beae) ) /* sprites */
1489 	ROM_LOAD( "congo13.bin",  0x02000, 0x2000, CRC(1d1321c8) SHA1(d12e156a24db105c5f941b7ef79f32181b616710) )
1490 	ROM_LOAD( "congo11.bin",  0x04000, 0x2000, CRC(73e2709f) SHA1(14919facf08f6983c3a9baad031239a1b57c8202) )
1491 	ROM_LOAD( "congo14.bin",  0x06000, 0x2000, CRC(bf9169fe) SHA1(303d68e38e9a47464f14dc5be6bff1be01b88bb6) )
1492 	ROM_LOAD( "congo16.bin",  0x08000, 0x2000, CRC(cb6d5775) SHA1(b1f8ead6e6f8ad995baaeb7f8554d41ed2296fff) )
1493 	ROM_LOAD( "congo15.bin",  0x0a000, 0x2000, CRC(7b15a7a4) SHA1(b1c05e60a1442e4dd56d197be8b768bcbf45e2d9) )
1494 
1495 	ROM_REGION( 0x8000, REGION_GFX4, ROMREGION_DISPOSE )	/* background tilemaps converted in vh_start */
1496 	ROM_LOAD( "congo6.bin",   0x0000, 0x2000, CRC(d637f02b) SHA1(29127149924c5bfdeb9456d7df2a5a5d14098794) )
1497 	/* 2000-3fff empty space to match Zaxxon */
1498 	ROM_LOAD( "congo7.bin",   0x4000, 0x2000, CRC(80927943) SHA1(4683520c241d209c6cabeaead9b363f046c30f70) )
1499 	/* 6000-7fff empty space to match Zaxxon */
1500 
1501 	ROM_REGION( 0x0100, REGION_PROMS, 0 )
1502 	ROM_LOAD( "congo.u68",    0x0000, 0x100, CRC(b788d8ae) SHA1(9765180f3087140c75e5953409df841787558160) ) /* palette */
1503 ROM_END
1504 
1505 ROM_START( tiptop )
1506 	ROM_REGION( 0x10000, REGION_CPU1, 0 )	/* 64k for code */
1507 	ROM_LOAD( "tiptop1.bin",  0x0000, 0x2000, CRC(e19dc77b) SHA1(d3782dd55701e0f5cd426ad2771c1bd0264c366a) )
1508 	ROM_LOAD( "tiptop2.bin",  0x2000, 0x2000, CRC(3fcd3b6e) SHA1(2898807ee36fca7fbc06616c9a070604beb782b9) )
1509 	ROM_LOAD( "tiptop3.bin",  0x4000, 0x2000, CRC(1c94250b) SHA1(cb70a91d07b0a9c61a093f1b5d37f2e69d1345c1) )
1510 	ROM_LOAD( "tiptop4.bin",  0x6000, 0x2000, CRC(577b501b) SHA1(5cad98a60a5241ba9467aa03fcd94c7490e6dbbb) )
1511 
1512 	ROM_REGION( 0x10000, REGION_CPU2, 0 ) /*64K for the sound cpu*/
1513 	ROM_LOAD( "congo17.bin",  0x0000, 0x2000, CRC(5024e673) SHA1(6f846146a4e29bcdfd5bd1bc5f1211d344cd5afa) )
1514 
1515 	ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
1516 	ROM_LOAD( "congo5.bin",   0x00000, 0x1000, CRC(7bf6ba2b) SHA1(3a2bd21b0e0e55cbd737c7b075492b5e8f944150) ) /* characters */
1517 	/* 1000-1800 empty space to convert the characters as 3bpp instead of 2 */
1518 
1519 	ROM_REGION( 0x6000, REGION_GFX2, ROMREGION_DISPOSE )
1520 	ROM_LOAD( "congo8.bin",   0x00000, 0x2000, CRC(db99a619) SHA1(499029197d26f9aea3ac15d66b5738ce7dea1f6c) ) /* background tiles */
1521 	ROM_LOAD( "congo9.bin",   0x02000, 0x2000, CRC(93e2309e) SHA1(bd8a74332cac0cf85f319c1f35d04a4781c9d655) )
1522 	ROM_LOAD( "congo10.bin",  0x04000, 0x2000, CRC(f27a9407) SHA1(d41c90c89ae28c92bf0c57927357d9b68ed7e0ef) )
1523 
1524 	ROM_REGION( 0xc000, REGION_GFX3, ROMREGION_DISPOSE )
1525 	ROM_LOAD( "congo12.bin",  0x00000, 0x2000, CRC(15e3377a) SHA1(04a7fbfd58924359fae0ba76ed152f325f07beae) ) /* sprites */
1526 	ROM_LOAD( "congo13.bin",  0x02000, 0x2000, CRC(1d1321c8) SHA1(d12e156a24db105c5f941b7ef79f32181b616710) )
1527 	ROM_LOAD( "congo11.bin",  0x04000, 0x2000, CRC(73e2709f) SHA1(14919facf08f6983c3a9baad031239a1b57c8202) )
1528 	ROM_LOAD( "congo14.bin",  0x06000, 0x2000, CRC(bf9169fe) SHA1(303d68e38e9a47464f14dc5be6bff1be01b88bb6) )
1529 	ROM_LOAD( "congo16.bin",  0x08000, 0x2000, CRC(cb6d5775) SHA1(b1f8ead6e6f8ad995baaeb7f8554d41ed2296fff) )
1530 	ROM_LOAD( "congo15.bin",  0x0a000, 0x2000, CRC(7b15a7a4) SHA1(b1c05e60a1442e4dd56d197be8b768bcbf45e2d9) )
1531 
1532 	ROM_REGION( 0x8000, REGION_GFX4, ROMREGION_DISPOSE )	/* background tilemaps converted in vh_start */
1533 	ROM_LOAD( "congo6.bin",   0x0000, 0x2000, CRC(d637f02b) SHA1(29127149924c5bfdeb9456d7df2a5a5d14098794) )
1534 	/* 2000-3fff empty space to match Zaxxon */
1535 	ROM_LOAD( "congo7.bin",   0x4000, 0x2000, CRC(80927943) SHA1(4683520c241d209c6cabeaead9b363f046c30f70) )
1536 	/* 6000-7fff empty space to match Zaxxon */
1537 
1538 	ROM_REGION( 0x0100, REGION_PROMS, 0 )
1539 	ROM_LOAD( "congo.u68",    0x0000, 0x100, CRC(b788d8ae) SHA1(9765180f3087140c75e5953409df841787558160) ) /* palette */
1540 ROM_END
1541 
1542 ROM_START( futspy )
1543 	ROM_REGION( 2*0x10000, REGION_CPU1, 0 )	/* 64k for code + 64k for decrypted opcodes */
1544 	ROM_LOAD( "fs_snd.u27",   0x0000, 0x2000, CRC(7578fe7f) SHA1(ab42bdf74b07c1ba5337c3d34647d3ee16f9db05) )
1545 	ROM_LOAD( "fs_snd.u28",   0x2000, 0x2000, CRC(8ade203c) SHA1(f095f4019befff7af4203c886ef42357f79592a1) )
1546 	ROM_LOAD( "fs_snd.u29",   0x4000, 0x1000, CRC(734299c3) SHA1(12acf71d9d00e0e0df29c4d8c397ad407266b364) )
1547 
1548 	ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
1549 	ROM_LOAD( "fs_snd.u68",   0x0000, 0x0800, CRC(305fae2d) SHA1(fbe89feff0fb2d4515000d1b73b7c91aac4e0b67) )  /* characters */
1550 	ROM_LOAD( "fs_snd.u69",   0x0800, 0x0800, CRC(3c5658c0) SHA1(70ac44b9334b086cdecd73f5f7820a0bf8ae2629) )
1551 	/* 1000-17ff empty space to convert the characters as 3bpp instead of 2 */
1552 
1553 	ROM_REGION( 0x6000, REGION_GFX2, ROMREGION_DISPOSE )
1554 	ROM_LOAD( "fs_vid.113",   0x0000, 0x2000, CRC(36d2bdf6) SHA1(c27835055beedf61ba644070f8920b6008d99040) )  /* background tiles */
1555 	ROM_LOAD( "fs_vid.112",   0x2000, 0x2000, CRC(3740946a) SHA1(e7579dd91628a811a60a8d8a5b407728b74aa17e) )
1556 	ROM_LOAD( "fs_vid.111",   0x4000, 0x2000, CRC(4cd4df98) SHA1(3ae4b2d0a79069e0de81596805bcf1a9ae7912cf) )
1557 
1558 	ROM_REGION( 0xc000, REGION_GFX3, ROMREGION_DISPOSE )
1559 	ROM_LOAD( "fs_vid.u77",   0x0000, 0x4000, CRC(1b93c9ec) SHA1(4b1d3b7e35d65cc3b96eb4f2e98c59e779bcb1c1) )  /* sprites */
1560 	ROM_LOAD( "fs_vid.u78",   0x4000, 0x4000, CRC(50e55262) SHA1(363acbde7b37a2358b3e53cfc08c9bd5dee73d55) )
1561 	ROM_LOAD( "fs_vid.u79",   0x8000, 0x4000, CRC(bfb02e3e) SHA1(f53bcec46b8c7d26e9ab01c821a8d1578b85f786) )
1562 
1563 	ROM_REGION( 0x8000, REGION_GFX4, ROMREGION_DISPOSE )	/* background tilemaps converted in vh_start */
1564 	ROM_LOAD( "fs_vid.u91",   0x0000, 0x2000, CRC(86da01f4) SHA1(954e4be1b0e24c8bc88c2b328e3a0e32005bb7b2) )
1565 	ROM_LOAD( "fs_vid.u90",   0x2000, 0x2000, CRC(2bd41d2d) SHA1(efb74b4bce31c7868ab6438e07b02b0539d35120) )
1566 	ROM_LOAD( "fs_vid.u93",   0x4000, 0x2000, CRC(b82b4997) SHA1(263f74aab47fc4e516b2111eaa94beea61c5fbe5) )
1567 	ROM_LOAD( "fs_vid.u92",   0x6000, 0x2000, CRC(af4015af) SHA1(6ed01a42d395ada6f2442b68f901fe61b04c8e44) )
1568 
1569 	ROM_REGION( 0x0200, REGION_PROMS, 0 )
1570 	ROM_LOAD( "futrprom.u98", 0x0000, 0x0100, CRC(9ba2acaa) SHA1(20e0257ca531ddc398b3aab861c7b5c41b659d40) ) /* palette */
1571 	ROM_LOAD( "futrprom.u72", 0x0100, 0x0100, CRC(f9e26790) SHA1(339f27e0126312d35211b5ce533f293b58851c1d) ) /* char lookup table */
1572 ROM_END
1573 
1574 /* Driver Initialization */
1575 
1576 static DRIVER_INIT( zaxxonb )
1577 {
1578 /*
1579 	the values vary, but the translation mask is always laid out like this:
1580 
1581 	  0 1 2 3 4 5 6 7 8 9 a b c d e f
1582 	0 A A B B A A B B C C D D C C D D
1583 	1 A A B B A A B B C C D D C C D D
1584 	2 E E F F E E F F G G H H G G H H
1585 	3 E E F F E E F F G G H H G G H H
1586 	4 A A B B A A B B C C D D C C D D
1587 	5 A A B B A A B B C C D D C C D D
1588 	6 E E F F E E F F G G H H G G H H
1589 	7 E E F F E E F F G G H H G G H H
1590 	8 H H G G H H G G F F E E F F E E
1591 	9 H H G G H H G G F F E E F F E E
1592 	a D D C C D D C C B B A A B B A A
1593 	b D D C C D D C C B B A A B B A A
1594 	c H H G G H H G G F F E E F F E E
1595 	d H H G G H H G G F F E E F F E E
1596 	e D D C C D D C C B B A A B B A A
1597 	f D D C C D D C C B B A A B B A A
1598 
1599 	(e.g. 0xc0 is XORed with H)
1600 	therefore in the following tables we only keep track of A, B, C, D, E, F, G and H.
1601 */
1602 	static const UINT8 data_xortable[2][8] =
1603 	{
1604 		{ 0x0a,0x0a,0x22,0x22,0xaa,0xaa,0x82,0x82 },	/* ...............0 */
1605 		{ 0xa0,0xaa,0x28,0x22,0xa0,0xaa,0x28,0x22 },	/* ...............1 */
1606 	};
1607 
1608 	static const UINT8 opcode_xortable[8][8] =
1609 	{
1610 		{ 0x8a,0x8a,0x02,0x02,0x8a,0x8a,0x02,0x02 },	/* .......0...0...0 */
1611 		{ 0x80,0x80,0x08,0x08,0xa8,0xa8,0x20,0x20 },	/* .......0...0...1 */
1612 		{ 0x8a,0x8a,0x02,0x02,0x8a,0x8a,0x02,0x02 },	/* .......0...1...0 */
1613 		{ 0x02,0x08,0x2a,0x20,0x20,0x2a,0x08,0x02 },	/* .......0...1...1 */
1614 		{ 0x88,0x0a,0x88,0x0a,0xaa,0x28,0xaa,0x28 },	/* .......1...0...0 */
1615 		{ 0x80,0x80,0x08,0x08,0xa8,0xa8,0x20,0x20 },	/* .......1...0...1 */
1616 		{ 0x88,0x0a,0x88,0x0a,0xaa,0x28,0xaa,0x28 },	/* .......1...1...0 */
1617 		{ 0x02,0x08,0x2a,0x20,0x20,0x2a,0x08,0x02 } 	/* .......1...1...1 */
1618 	};
1619 
1620 	int A;
1621 	UINT8 *rom = memory_region(REGION_CPU1);
1622 	int diff = memory_region_length(REGION_CPU1) / 2;
1623 
1624 	memory_set_opcode_base(0, rom + diff);
1625 
1626 	for (A = 0x0000; A < 0x8000; A++)
1627 	{
1628 		int i,j;
1629 		UINT8 src;
1630 
1631 		src = rom[A];
1632 
1633 		/* pick the translation table from bit 0 of the address */
1634 		i = A & 1;
1635 
1636 		/* pick the offset in the table from bits 1, 3 and 5 of the source data */
1637 		j = ((src >> 1) & 1) + (((src >> 3) & 1) << 1) + (((src >> 5) & 1) << 2);
1638 		/* the bottom half of the translation table is the mirror image of the top */
1639 		if (src & 0x80) j = 7 - j;
1640 
1641 		/* decode the ROM data */
1642 		rom[A] = src ^ data_xortable[i][j];
1643 
1644 		/* now decode the opcodes */
1645 		/* pick the translation table from bits 0, 4, and 8 of the address */
1646 		i = ((A >> 0) & 1) + (((A >> 4) & 1) << 1) + (((A >> 8) & 1) << 2);
1647 		rom[A + diff] = src ^ opcode_xortable[i][j];
1648 	}
1649 }
1650 
DRIVER_INIT(szaxxon)1651 static DRIVER_INIT( szaxxon )
1652 {
1653 	szaxxon_decode();
1654 }
1655 
DRIVER_INIT(futspy)1656 static DRIVER_INIT( futspy )
1657 {
1658 	futspy_decode();
1659 }
1660 
DRIVER_INIT(razmataz)1661 static DRIVER_INIT( razmataz )
1662 {
1663 	nprinces_decode();
1664 }
1665 
DRIVER_INIT(ixion)1666 static DRIVER_INIT( ixion )
1667 {
1668 	szaxxon_decode();
1669 }
1670 
1671 /* Game Drivers */
1672 
1673 GAME( 1982, zaxxon,   0,      zaxxon,   zaxxon,   0,        ROT90,  "Sega",    "Zaxxon (set 1)" )
1674 GAME( 1982, zaxxon2,  zaxxon, zaxxon,   zaxxon,   0,        ROT90,  "Sega",    "Zaxxon (set 2)" )
1675 GAME( 1982, zaxxonb,  zaxxon, zaxxon,   zaxxon,   zaxxonb,  ROT90,  "bootleg", "Jackson" )
1676 GAME( 1982, szaxxon,  0,      zaxxon,   szaxxon,  szaxxon,  ROT90,  "Sega",    "Super Zaxxon" )
1677 GAMEX(1983, razmataz, 0,      razmataz, razmataz, razmataz, ROT270, "Sega",    "Razzmatazz",                          GAME_NO_SOUND )
1678 GAMEX(1983, ixion,    0,      ixion,    ixion,    ixion,    ROT270, "Sega",    "Ixion (prototype)",                   GAME_NO_SOUND )
1679 GAMEC(1983, congo,    0,      congo,    congo,    0,        ROT90,  "Sega",    "Congo Bongo (Rev C, 2 board stack)",  &congo_ctrl,  NULL )
1680 GAMEC(1983, tiptop,   congo,  congo,    tiptop,   0,        ROT90,  "Sega",    "Tip Top (3 board stack)",             &congo_ctrl,  NULL )
1681 GAME( 1984, futspy,   0,      futspy,   futspy,   futspy,   ROT270, "Sega",    "Future Spy" )
1682