1 // license:BSD-3-Clause
2 // copyright-holders:Nicola Salmoria
3 /***************************************************************************
4
5 Sega Zaxxon hardware
6
7 Games supported:
8 * Zaxxon
9 * Super Zaxxon
10 * Future Spy
11 * Razmatazz
12 * Ixion
13 * Congo Bongo
14
15 DIP locations verified from manual for:
16 * Zaxxon
17 * Congo Bongo
18
19 Known bugs:
20 * discrete sound emulation
21
22 ****************************************************************************
23
24 Zaxxon memory map (preliminary)
25
26 0000-1fff ROM 3
27 2000-3fff ROM 2
28 4000-4fff ROM 1
29 6000-67ff RAM 1
30 6800-6fff RAM 2
31 8000-83ff Video RAM
32 a000-a0ff sprites
33
34 read:
35 c000 IN0
36 c001 IN1
37 c002 DSW0
38 c003 DSW1
39 c100 IN2
40 see the input_ports definition below for details on the input bits
41
42 write:
43 c000 coin A enable
44 c001 coin B enable
45 c002 coin aux enable
46 c003-c004 coin counters
47 c006 flip screen
48 ff3c-ff3f sound (see below)
49 fff0 interrupt enable
50 fff1 character color bank (not used during the game, but used in test mode)
51 fff8-fff9 background playfield position (11 bits)
52 fffa background color bank (0 = standard 1 = reddish)
53 fffb background enable
54
55 interrupts:
56 VBlank triggers IRQ, handled with interrupt mode 1
57 NMI enters the test mode.
58
59 Changes:
60 25 Jan 98 LBO
61 * Added crude support for samples based on Frank's info. As of yet, I don't have
62 a set that matches the names - I need a way to edit the .wav files I have.
63 Hopefully I'll be able to create a good set shortly. I also don't know which
64 sounds "loop".
65 26 Jan 98 LBO
66 * Fixed the sound support. I lack explosion samples and the base missile sample so
67 these are untested. I'm also unsure about the background noise. It seems to have
68 a variable volume so I've tried to reproduce that via just 1 sample.
69
70 12 Mar 98 ATJ
71 * For the moment replaced Brad's version of the samples with mine from the Mame/P
72 release. As yet, no variable volume, but I will be combining the features from
73 Brad's driver into mine ASAP.
74
75 ****************************************************************************
76
77 Ixion Board Info
78
79 Ixion
80 Sega(prototype) 7/1/1983
81
82
83 Board set is a modified Super Zaxxon, similar to Razzmatazz
84
85 [G80 Sound board]
86
87
88
89 U51
90 U50
91
92 [834-0214 ZAXXON-SOUNDII]
93
94 315-5013 U27 U28 U29
95
96
97 U68 U69 U72
98 U98
99
100 [ ZAXXON-VIDEOII]
101
102
103 U77 U78 U79 U90 U91 U92 U93
104 U111 U112 U113
105
106 ****************************************************************************
107
108 Congo Bongo memory map (preliminary)
109
110 0000-1fff ROM 1
111 2000-3fff ROM 2
112 4000-5fff ROM 3
113 6000-7fff ROM 4
114
115 8000-87ff RAM 1
116 8800-8fff RAM 2
117 a000-a3ff Video RAM
118 a400-a7ff Color RAM
119
120 8400-8fff sprites
121
122 read:
123 c000 IN0
124 c001 IN1
125 c002 DSW1
126 c003 DSW2
127 c008 IN2
128
129 write:
130 c000-c002 ?
131 c006 ?
132 c018 coinAen, used to enable input on coin slot A
133 c019 coinBen, used to enable input on coin slot B
134 c01a serven, used to enable input on service sw
135 c01b counterA,coin counter for slot A
136 c01c counterB,coin counter for slot B
137 c01d background enable
138 c01e flip screen
139 c01f interrupt enable
140
141 c028-c029 background playfield position
142 c031 sprite enable ?
143 c032 sprite start
144 c033 sprite count
145
146
147 interrupts:
148 VBlank triggers IRQ, handled with interrupt mode 1
149 NMI causes a ROM/RAM test.
150
151 ----------------------------------------------------------------------
152
153 There are two different Congo Bongo boardsets. One is a 3-stack (which I have)
154 and the other is a 2-stack.
155
156 The smaller third board is just a dedicated sound board, then later they started
157 making 2-stack boardset versions with merged sound circuits built into the control
158 board.
159
160 The schematic name for the control board on the two-stack set is "Control Board II"
161 my boardset uses control board 1.
162
163 The ROMs that are dumped for MAME are from the 3-stack boardset.
164 The ROMs on control board II are in different socket assignments than the ROMs
165 found on control board 1.
166
167 For example:
168 MAME congo1.bin = ROM 1 at location U35 on the 3-stack control board 1
169 MAME congo1.bin = ROM 1 at location U21 on the 2-stack control board II
170
171 So the locations are different between the two boardsets but they appear to use
172 the same ROM.
173
174 The Video boards are exactly the same between the two boardset versions (bottom
175 board) nothing changed with the video boards.
176
177 Both the 2-stack control board and 3-stack control board use a PROM that's contents
178 are identical between the two. Apparently the 3-Stack Control Board prom was
179 dumped as a TBP28L22, because that is how the 2-Stack Control board prom was dumped.
180
181 Board Location Label PROM Type
182 --------------------- -------- --------------- ---------
183 3-Stack Control Board U68 MR020 (PR-5308) TBP28S42?
184 2-Stack Control Board U87 MR019 (PR-5315) TBP28L22?
185
186 For the 3-stack control board PROM sheet 2 of 6 for the 834-5212 board lists the pinouts
187 and they match the physical board. The PROM also has the TI logo and a date code? of J810A.
188
189 ROM locations are different with ROMs 1-5 on control board II and a different
190 numbered ROM in U87.
191
192 ----ROM--NAMES-------------------------------------
193
194
195 THREE STACK BOARDSET
196 control board = 834-5166
197 video board = 834-5167
198 sound board = 834-5168
199
200
201 Current MAME Schematic Board
202 Names Names Location (3-stack)
203 ------------ --------- -------------------
204
205 congo.u68 = MR020 U68 control board
206 congo1.bin = ROM 1 U35 control board
207 congo2.bin = ROM 2 U34 control board
208 congo3.bin = ROM 3 U33 control board
209 congo4.bin = ROM 4 U32 control board
210 congo5.bin = ROM 5 U76 control board
211 congo6.bin = ROM 6 U57 video board
212 congo7.bin = ROM 7 U58 video board
213 congo8.bin = ROM 8 U93 video board
214 congo9.bin = ROM 9 U94 video board
215 congo10.bin = ROM 10 U95 video board
216 congo11.bin = ROM 11 U77 video board
217 congo12.bin = ROM 12 U78 video board
218 congo13.bin = ROM 13 U79 video board
219 congo14.bin = ROM 14 U104 video board
220 congo15.bin = ROM 15 U105 video board
221 congo16.bin = ROM 16 U106 video board
222 congo17.bin = ROM 17 U11 sound board
223
224
225
226 TWO STACK BOARDSET
227 control board II = 834-5212
228 video board = 834-5167
229
230
231 Current MAME Schematic Board
232 Names Names Location (2-stack)
233 ------------ --------- -------------------
234
235 congo.u68 = MR019 U87 control board
236 congo1.bin = ROM 1 U21 control board
237 congo2.bin = ROM 2 U22 control board
238 congo3.bin = ROM 3 U23 control board
239 congo4.bin = ROM 4 U24 control board
240 congo5.bin = ROM 5 U77 control board
241 congo6.bin = ROM 6 U57 video board
242 congo7.bin = ROM 7 U58 video board
243 congo8.bin = ROM 8 U93 video board
244 congo9.bin = ROM 9 U94 video board
245 congo10.bin = ROM 10 U95 video board
246 congo11.bin = ROM 11 U77 video board
247 congo12.bin = ROM 12 U78 video board
248 congo13.bin = ROM 13 U79 video board
249 congo14.bin = ROM 14 U104 video board
250 congo15.bin = ROM 15 U105 video board
251 congo16.bin = ROM 16 U106 video board
252 congo17.bin = ROM 17 U19 control board
253
254 ***************************************************************************/
255
256 #include "emu.h"
257 #include "includes/zaxxon.h"
258 #include "audio/segausb.h"
259
260 #include "cpu/z80/z80.h"
261 #include "machine/gen_latch.h"
262 #include "machine/i8255.h"
263 #include "machine/segacrpt_device.h"
264 #include "sound/samples.h"
265 #include "sound/sn76496.h"
266
267 #include "screen.h"
268 #include "speaker.h"
269
270
271 /*************************************
272 *
273 * Constants
274 *
275 *************************************/
276
277 static constexpr XTAL MASTER_CLOCK = 48.66_MHz_XTAL;
278 static constexpr XTAL SOUND_CLOCK = 4_MHz_XTAL;
279
280 static constexpr XTAL PIXEL_CLOCK = MASTER_CLOCK/8;
281
282 #define HTOTAL (384)
283 #define HBEND (0)
284 #define HBSTART (256)
285
286 #define VTOTAL (264)
287 #define VBEND (16)
288 #define VBSTART (240)
289
290
291
292 /*************************************
293 *
294 * Interrupt generation
295 *
296 *************************************/
297
INPUT_CHANGED_MEMBER(zaxxon_state::service_switch)298 INPUT_CHANGED_MEMBER(zaxxon_state::service_switch)
299 {
300 /* pressing the service switch sends an NMI */
301 if (newval)
302 m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
303 }
304
305
WRITE_LINE_MEMBER(zaxxon_state::vblank_int)306 WRITE_LINE_MEMBER(zaxxon_state::vblank_int)
307 {
308 if (state && m_int_enabled)
309 m_maincpu->set_input_line(0, ASSERT_LINE);
310 }
311
312
WRITE_LINE_MEMBER(zaxxon_state::int_enable_w)313 WRITE_LINE_MEMBER(zaxxon_state::int_enable_w)
314 {
315 m_int_enabled = state;
316 if (!m_int_enabled)
317 m_maincpu->set_input_line(0, CLEAR_LINE);
318 }
319
320
321
322 /*************************************
323 *
324 * Machine setup
325 *
326 *************************************/
327
machine_start()328 void zaxxon_state::machine_start()
329 {
330 /* register for save states */
331 save_item(NAME(m_int_enabled));
332 save_item(NAME(m_coin_status));
333 }
334
335
336
337 /*************************************
338 *
339 * Input handlers
340 *
341 *************************************/
342
razmataz_counter_r()343 uint8_t zaxxon_state::razmataz_counter_r()
344 {
345 /* this behavior is really unknown; however, the code is using this */
346 /* counter as a sort of timeout when talking to the sound board */
347 /* it needs to be increasing at a reasonable rate but not too fast */
348 /* or else the sound will mess up */
349 return m_razmataz_counter++ >> 8;
350 }
351
352
353 template <int Num>
CUSTOM_INPUT_MEMBER(zaxxon_state::razmataz_dial_r)354 CUSTOM_INPUT_MEMBER(zaxxon_state::razmataz_dial_r)
355 {
356 int res;
357
358 int delta = m_dials[Num]->read();
359
360 if (delta < 0x80)
361 {
362 // right
363 m_razmataz_dial_pos[Num] -= delta;
364 res = (m_razmataz_dial_pos[Num] << 1) | 1;
365 }
366 else
367 {
368 // left
369 m_razmataz_dial_pos[Num] += delta;
370 res = (m_razmataz_dial_pos[Num] << 1);
371 }
372
373 return res;
374 }
375
376
377
378 /*************************************
379 *
380 * Output handlers
381 *
382 *************************************/
383
zaxxon_control_w(offs_t offset,uint8_t data)384 void zaxxon_state::zaxxon_control_w(offs_t offset, uint8_t data)
385 {
386 // address decode for E0F8/E0F9 (74LS138 @ U57) has its G2B enable input in common with this latch
387 bool a3 = BIT(offset, 3);
388 m_mainlatch[1]->write_bit((a3 ? 4 : 0) | (offset & 3), BIT(data, 0));
389 if (a3 && !BIT(offset, 1))
390 bg_position_w(offset & 1, data);
391 }
392
393
WRITE_LINE_MEMBER(zaxxon_state::coin_counter_a_w)394 WRITE_LINE_MEMBER(zaxxon_state::coin_counter_a_w)
395 {
396 machine().bookkeeping().coin_counter_w(0, state);
397 }
398
399
WRITE_LINE_MEMBER(zaxxon_state::coin_counter_b_w)400 WRITE_LINE_MEMBER(zaxxon_state::coin_counter_b_w)
401 {
402 machine().bookkeeping().coin_counter_w(1, state);
403 }
404
405
406 // There is no external coin lockout circuitry; instead, the pcb simply latches
407 // each coin input, which then needs to be explicitly cleared by the game.
408 // Each coin input first passes through a debounce circuit consisting of a
409 // LS175 quad flip-flop and LS10 3-input NAND gate, which is not emulated.
WRITE_LINE_MEMBER(zaxxon_state::coin_enable_w)410 WRITE_LINE_MEMBER(zaxxon_state::coin_enable_w)
411 {
412 for (int n = 0; n < 3; n++)
413 if (!BIT(m_mainlatch[0]->output_state(), n))
414 m_coin_status[n] = 0;
415 }
416
417
INPUT_CHANGED_MEMBER(zaxxon_state::zaxxon_coin_inserted)418 INPUT_CHANGED_MEMBER(zaxxon_state::zaxxon_coin_inserted)
419 {
420 if (newval && BIT(m_mainlatch[0]->output_state(), param))
421 m_coin_status[param] = 1;
422 }
423
424
425 template <int Num>
READ_LINE_MEMBER(zaxxon_state::zaxxon_coin_r)426 READ_LINE_MEMBER(zaxxon_state::zaxxon_coin_r)
427 {
428 return m_coin_status[Num];
429 }
430
431
432
433 /*************************************
434 *
435 * Main CPU memory handlers
436 *
437 *************************************/
438
439 /* complete memory map derived from schematics */
zaxxon_map(address_map & map)440 void zaxxon_state::zaxxon_map(address_map &map)
441 {
442 map(0x0000, 0x5fff).rom();
443 map(0x6000, 0x6fff).ram();
444 map(0x8000, 0x83ff).mirror(0x1c00).ram().w(FUNC(zaxxon_state::zaxxon_videoram_w)).share("videoram");
445 map(0xa000, 0xa0ff).mirror(0x1f00).ram().share("spriteram");
446 map(0xc000, 0xc000).mirror(0x18fc).portr("SW00");
447 map(0xc001, 0xc001).mirror(0x18fc).portr("SW01");
448 map(0xc002, 0xc002).mirror(0x18fc).portr("DSW02");
449 map(0xc003, 0xc003).mirror(0x18fc).portr("DSW03");
450 map(0xc100, 0xc100).mirror(0x18ff).portr("SW100");
451 map(0xc000, 0xc007).mirror(0x18f8).w("mainlatch1", FUNC(ls259_device::write_d0));
452 map(0xe03c, 0xe03f).mirror(0x1f00).rw("ppi8255", FUNC(i8255_device::read), FUNC(i8255_device::write));
453 map(0xe0f0, 0xe0f3).mirror(0x1f00).select(0x0008).w(FUNC(zaxxon_state::zaxxon_control_w));
454 }
455
decrypted_opcodes_map(address_map & map)456 void zaxxon_state::decrypted_opcodes_map(address_map &map)
457 {
458 map(0x0000, 0x5fff).rom().share("decrypted_opcodes");
459 }
460
461 /* derived from Zaxxon, different sound hardware */
ixion_map(address_map & map)462 void zaxxon_state::ixion_map(address_map &map)
463 {
464 map(0x0000, 0x5fff).rom();
465 map(0x6000, 0x6fff).ram();
466 map(0x8000, 0x83ff).mirror(0x1c00).ram().w(FUNC(zaxxon_state::zaxxon_videoram_w)).share("videoram");
467 map(0xa000, 0xa0ff).mirror(0x1f00).ram().share("spriteram");
468 map(0xc000, 0xc000).mirror(0x18fc).portr("SW00");
469 map(0xc001, 0xc001).mirror(0x18fc).portr("SW01");
470 map(0xc002, 0xc002).mirror(0x18fc).portr("DSW02");
471 map(0xc003, 0xc003).mirror(0x18fc).portr("DSW03");
472 map(0xc100, 0xc100).mirror(0x18ff).portr("SW100");
473 map(0xc000, 0xc007).mirror(0x18f8).w("mainlatch1", FUNC(ls259_device::write_d0));
474 map(0xe03c, 0xe03c).mirror(0x1f00).rw("usbsnd", FUNC(usb_sound_device::status_r), FUNC(usb_sound_device::data_w));
475 map(0xe0f0, 0xe0f3).mirror(0x1f00).select(0x0008).w(FUNC(zaxxon_state::zaxxon_control_w));
476 }
477
478
479 /* complete memory map derived from schematics */
congo_map(address_map & map)480 void zaxxon_state::congo_map(address_map &map)
481 {
482 map(0x0000, 0x7fff).rom();
483 map(0x8000, 0x8fff).ram();
484 map(0xa000, 0xa3ff).mirror(0x1800).ram().w(FUNC(zaxxon_state::zaxxon_videoram_w)).share("videoram");
485 map(0xa400, 0xa7ff).mirror(0x1800).ram().w(FUNC(zaxxon_state::congo_colorram_w)).share("colorram");
486 map(0xc000, 0xc000).mirror(0x1fc4).portr("SW00");
487 map(0xc001, 0xc001).mirror(0x1fc4).portr("SW01");
488 map(0xc002, 0xc002).mirror(0x1fc4).portr("DSW02");
489 map(0xc003, 0xc003).mirror(0x1fc4).portr("DSW03");
490 map(0xc008, 0xc008).mirror(0x1fc7).portr("SW100");
491 map(0xc018, 0xc01f).mirror(0x1fc0).w("mainlatch1", FUNC(ls259_device::write_d0));
492 map(0xc020, 0xc027).mirror(0x1fc0).w("mainlatch2", FUNC(ls259_device::write_d0));
493 map(0xc028, 0xc029).mirror(0x1fc4).w(FUNC(zaxxon_state::bg_position_w));
494 map(0xc030, 0xc033).mirror(0x1fc4).w(FUNC(zaxxon_state::congo_sprite_custom_w));
495 map(0xc038, 0xc03f).mirror(0x1fc0).w("soundlatch", FUNC(generic_latch_8_device::write));
496 }
497
498
499 /* complete memory map derived from schematics */
congo_sound_map(address_map & map)500 void zaxxon_state::congo_sound_map(address_map &map)
501 {
502 map(0x0000, 0x1fff).rom();
503 map(0x4000, 0x47ff).mirror(0x1800).ram();
504 map(0x6000, 0x6000).mirror(0x1fff).w("sn1", FUNC(sn76489a_device::write));
505 map(0x8000, 0x8003).mirror(0x1ffc).rw("ppi8255", FUNC(i8255_device::read), FUNC(i8255_device::write));
506 map(0xa000, 0xa000).mirror(0x1fff).w("sn2", FUNC(sn76489a_device::write));
507 }
508
509
510
511 /*************************************
512 *
513 * Port definitions
514 *
515 *************************************/
516
517 static INPUT_PORTS_START( zaxxon )
518 PORT_START("SW00")
519 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY
520 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY
521 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY
522 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY
523 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
524 PORT_BIT( 0xe0, IP_ACTIVE_HIGH, IPT_UNUSED )
525
526 PORT_START("SW01")
527 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
528 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
529 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
530 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
531 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
532 PORT_BIT( 0xe0, IP_ACTIVE_HIGH, IPT_UNUSED )
533
534 PORT_START("SW100")
535 PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_UNUSED )
536 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
537 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 )
538 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
539 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(zaxxon_state, zaxxon_coin_r<0>)
540 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(zaxxon_state, zaxxon_coin_r<1>)
541 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(zaxxon_state, zaxxon_coin_r<2>)
542
543 PORT_START("COIN")
544 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, zaxxon_state,zaxxon_coin_inserted, 0)
545 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, zaxxon_state,zaxxon_coin_inserted, 1)
546 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, zaxxon_state,zaxxon_coin_inserted, 2)
547
548 PORT_START("SERVICESW")
549 PORT_SERVICE_NO_TOGGLE( 0x01, IP_ACTIVE_HIGH ) PORT_CHANGED_MEMBER(DEVICE_SELF, zaxxon_state,service_switch, 0)
550
551 PORT_START("DSW02")
552 PORT_DIPNAME( 0x03, 0x03, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:!1,!2")
553 PORT_DIPSETTING( 0x03, "10000" )
554 PORT_DIPSETTING( 0x01, "20000" )
555 PORT_DIPSETTING( 0x02, "30000" )
556 PORT_DIPSETTING( 0x00, "40000" )
557 PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW1:!3")
558 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
559 PORT_DIPSETTING( 0x04, DEF_STR( On ) )
560 PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW1:!4")
561 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
562 PORT_DIPSETTING( 0x08, DEF_STR( On ) )
563 PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:!5,!6")
564 PORT_DIPSETTING( 0x30, "3" )
565 PORT_DIPSETTING( 0x10, "4" )
566 PORT_DIPSETTING( 0x20, "5" )
567 PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) )
568 PORT_DIPNAME( 0x40, 0x40, "Sound" ) PORT_DIPLOCATION("SW1:!7")
569 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
570 PORT_DIPSETTING( 0x40, DEF_STR( On ) )
571 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:!8")
572 PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
573 PORT_DIPSETTING( 0x80, DEF_STR( Cocktail ) )
574
575 PORT_START("DSW03")
576 PORT_DIPNAME( 0x0f, 0x03, DEF_STR ( Coin_B ) ) PORT_DIPLOCATION("SW2:!1,!2,!3,!4")
577 PORT_DIPSETTING( 0x0f, DEF_STR ( 4C_1C ) )
578 PORT_DIPSETTING( 0x07, DEF_STR ( 3C_1C ) )
579 PORT_DIPSETTING( 0x0b, DEF_STR ( 2C_1C ) )
580 PORT_DIPSETTING( 0x06, "2C/1C 5C/3C 6C/4C" )
581 PORT_DIPSETTING( 0x0a, "2C/1C 3C/2C 4C/3C" )
582 PORT_DIPSETTING( 0x03, DEF_STR ( 1C_1C ) )
583 PORT_DIPSETTING( 0x02, "1C/1C 5C/6C" )
584 PORT_DIPSETTING( 0x0c, "1C/1C 4C/5C" )
585 PORT_DIPSETTING( 0x04, "1C/1C 2C/3C" )
586 PORT_DIPSETTING( 0x0d, DEF_STR ( 1C_2C ) )
587 PORT_DIPSETTING( 0x08, "1C/2C 5C/11C" )
588 PORT_DIPSETTING( 0x00, "1C/2C 4C/9C" )
589 PORT_DIPSETTING( 0x05, DEF_STR ( 1C_3C ) )
590 PORT_DIPSETTING( 0x09, DEF_STR ( 1C_4C ) )
591 PORT_DIPSETTING( 0x01, DEF_STR ( 1C_5C ) )
592 PORT_DIPSETTING( 0x0e, DEF_STR ( 1C_6C ) )
593 PORT_DIPNAME( 0xf0, 0x30, DEF_STR ( Coin_A ) ) PORT_DIPLOCATION("SW2:!5,!6,!7,!8")
594 PORT_DIPSETTING( 0xf0, DEF_STR ( 4C_1C ) )
595 PORT_DIPSETTING( 0x70, DEF_STR ( 3C_1C ) )
596 PORT_DIPSETTING( 0xb0, DEF_STR ( 2C_1C ) )
597 PORT_DIPSETTING( 0x60, "2C/1C 5C/3C 6C/4C" )
598 PORT_DIPSETTING( 0xa0, "2C/1C 3C/2C 4C/3C" )
599 PORT_DIPSETTING( 0x30, DEF_STR ( 1C_1C ) )
600 PORT_DIPSETTING( 0x20, "1C/1C 5C/6C" )
601 PORT_DIPSETTING( 0xc0, "1C/1C 4C/5C" )
602 PORT_DIPSETTING( 0x40, "1C/1C 2C/3C" )
603 PORT_DIPSETTING( 0xd0, DEF_STR ( 1C_2C ) )
604 PORT_DIPSETTING( 0x80, "1C/2C 5C/11C" )
605 PORT_DIPSETTING( 0x00, "1C/2C 4C/9C" )
606 PORT_DIPSETTING( 0x50, DEF_STR ( 1C_3C ) )
607 PORT_DIPSETTING( 0x90, DEF_STR ( 1C_4C ) )
608 PORT_DIPSETTING( 0x10, DEF_STR ( 1C_5C ) )
609 PORT_DIPSETTING( 0xe0, DEF_STR ( 1C_6C ) )
610 INPUT_PORTS_END
611
612
613 static INPUT_PORTS_START( szaxxon )
614 PORT_INCLUDE(zaxxon)
615
616 PORT_MODIFY("DSW02")
617 PORT_DIPNAME( 0x04, 0x04, DEF_STR( Difficulty ) )
618 PORT_DIPSETTING( 0x04, DEF_STR( Normal ) )
619 PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
620 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
621 INPUT_PORTS_END
622
623
624 static INPUT_PORTS_START( futspy )
625 PORT_INCLUDE(zaxxon)
626
627 PORT_MODIFY("SW00")
628 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY
629 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY
630 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 )
631 PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED )
632
633 PORT_MODIFY("SW01")
634 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL
635 PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED )
636
637 PORT_MODIFY("DSW02")
638 PORT_DIPNAME( 0x0f, 0x00, DEF_STR ( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2,3,4")
639 PORT_DIPSETTING( 0x08, DEF_STR ( 4C_1C ) )
640 PORT_DIPSETTING( 0x07, DEF_STR ( 3C_1C ) )
641 PORT_DIPSETTING( 0x06, DEF_STR ( 2C_1C ) )
642 PORT_DIPSETTING( 0x0a, "2C/1C 5C/3C 6C/4C" )
643 PORT_DIPSETTING( 0x0b, "2C/1C 4C/3C" )
644 PORT_DIPSETTING( 0x00, DEF_STR ( 1C_1C ) )
645 PORT_DIPSETTING( 0x0e, "1C/1C 2C/3C" )
646 PORT_DIPSETTING( 0x0d, "1C/1C 4C/5C" )
647 PORT_DIPSETTING( 0x0c, "1C/1C 5C/6C" )
648 PORT_DIPSETTING( 0x09, DEF_STR ( 2C_3C ) )
649 PORT_DIPSETTING( 0x01, DEF_STR ( 1C_2C ) )
650 PORT_DIPSETTING( 0x0f, "1C/2C 5C/11C" )
651 PORT_DIPSETTING( 0x02, DEF_STR ( 1C_3C ) )
652 PORT_DIPSETTING( 0x03, DEF_STR ( 1C_4C ) )
653 PORT_DIPSETTING( 0x04, DEF_STR ( 1C_5C ) )
654 PORT_DIPSETTING( 0x05, DEF_STR ( 1C_6C ) )
655 PORT_DIPNAME( 0xf0, 0x00, DEF_STR ( Coin_B ) ) PORT_DIPLOCATION("SW1:5,6,7,8")
656 PORT_DIPSETTING( 0x80, DEF_STR ( 4C_1C ) )
657 PORT_DIPSETTING( 0x70, DEF_STR ( 3C_1C ) )
658 PORT_DIPSETTING( 0x60, DEF_STR ( 2C_1C ) )
659 PORT_DIPSETTING( 0xa0, "2C/1C 5C/3C 6C/4C" )
660 PORT_DIPSETTING( 0xb0, "2C/1C 4C/3C" )
661 PORT_DIPSETTING( 0x00, DEF_STR ( 1C_1C ) )
662 PORT_DIPSETTING( 0xe0, "1C/1C 2C/3C" )
663 PORT_DIPSETTING( 0xd0, "1C/1C 4C/5C" )
664 PORT_DIPSETTING( 0xc0, "1C/1C 5C/6C" )
665 PORT_DIPSETTING( 0x90, DEF_STR ( 2C_3C ) )
666 PORT_DIPSETTING( 0x10, DEF_STR ( 1C_2C ) )
667 PORT_DIPSETTING( 0xf0, "1C/2C 5C/11C" )
668 PORT_DIPSETTING( 0x20, DEF_STR ( 1C_3C ) )
669 PORT_DIPSETTING( 0x30, DEF_STR ( 1C_4C ) )
670 PORT_DIPSETTING( 0x40, DEF_STR ( 1C_5C ) )
671 PORT_DIPSETTING( 0x50, DEF_STR ( 1C_6C ) )
672
673 PORT_MODIFY("DSW03")
674 PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:1")
675 PORT_DIPSETTING( 0x01, DEF_STR( Upright ) )
676 PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
677 PORT_DIPNAME( 0x02, 0x02, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:2")
678 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
679 PORT_DIPSETTING( 0x02, DEF_STR( On ) )
680 PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:3,4")
681 PORT_DIPSETTING( 0x00, "3" )
682 PORT_DIPSETTING( 0x04, "4" )
683 PORT_DIPSETTING( 0x08, "5" )
684 PORT_DIPSETTING( 0x0c, DEF_STR( Free_Play ) )
685 PORT_DIPNAME( 0x30, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:5,6")
686 PORT_DIPSETTING( 0x00, "20K 40K 60K" )
687 PORT_DIPSETTING( 0x10, "30K 60K 90K" )
688 PORT_DIPSETTING( 0x20, "40K 70K 100K" )
689 PORT_DIPSETTING( 0x30, "40K 80K 120K" )
690 PORT_DIPNAME( 0xc0, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:7,8")
691 PORT_DIPSETTING( 0x00, DEF_STR( Easy ) )
692 PORT_DIPSETTING( 0x40, DEF_STR( Medium ) )
693 PORT_DIPSETTING( 0x80, DEF_STR( Hard ) )
694 PORT_DIPSETTING( 0xc0, DEF_STR( Hardest ) )
695 INPUT_PORTS_END
696
697
698 static INPUT_PORTS_START( razmataz )
699 PORT_START("SW00")
700 PORT_BIT( 0xff, 0x00, IPT_CUSTOM) PORT_CUSTOM_MEMBER(zaxxon_state, razmataz_dial_r<0>)
701
702 PORT_START("DIAL.0")
703 PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(30) PORT_KEYDELTA(15) PORT_RESET PORT_PLAYER(1)
704
705 PORT_START("SW01")
706 PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
707
708 PORT_START("SW04")
709 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)
710 PORT_BIT( 0x1e, IP_ACTIVE_HIGH, IPT_UNUSED )
711 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START1 )
712 PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED )
713
714 PORT_START("SW08")
715 PORT_BIT( 0xff, 0x00, IPT_CUSTOM) PORT_CUSTOM_MEMBER(zaxxon_state, razmataz_dial_r<1>)
716
717 PORT_START("DIAL.1")
718 PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(30) PORT_KEYDELTA(15) PORT_RESET PORT_PLAYER(2)
719
720 PORT_START("SW0C")
721 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
722 PORT_BIT( 0x1e, IP_ACTIVE_HIGH, IPT_UNUSED )
723 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START2 )
724 PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED )
725
726 PORT_START("SW100")
727 PORT_BIT( 0x1f, IP_ACTIVE_HIGH, IPT_UNUSED )
728 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(zaxxon_state, zaxxon_coin_r<0>)
729 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(zaxxon_state, zaxxon_coin_r<1>)
730 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(zaxxon_state, zaxxon_coin_r<2>)
731
732 PORT_START("COIN")
733 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, zaxxon_state,zaxxon_coin_inserted, 0)
734 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, zaxxon_state,zaxxon_coin_inserted, 1)
735 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, zaxxon_state,zaxxon_coin_inserted, 2)
736
737 PORT_START("SERVICESW")
738 PORT_SERVICE_NO_TOGGLE( 0x01, IP_ACTIVE_HIGH ) PORT_CHANGED_MEMBER(DEVICE_SELF, zaxxon_state,service_switch, 0)
739
740 PORT_START("DSW02")
741 PORT_DIPNAME( 0x03, 0x00, DEF_STR( Bonus_Life ) )
742 PORT_DIPSETTING( 0x00, "50000" )
743 PORT_DIPSETTING( 0x01, "100000" )
744 PORT_DIPSETTING( 0x02, "150000" )
745 PORT_DIPSETTING( 0x03, "200000" )
746 PORT_DIPNAME( 0x0c, 0x04, DEF_STR( Difficulty ) )
747 PORT_DIPSETTING( 0x00, DEF_STR( Easy ) )
748 PORT_DIPSETTING( 0x04, DEF_STR( Normal ) )
749 PORT_DIPSETTING( 0x08, DEF_STR( Hard ) )
750 PORT_DIPSETTING( 0x0c, DEF_STR( Very_Hard ) )
751 PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) )
752 PORT_DIPSETTING( 0x00, "3" )
753 PORT_DIPSETTING( 0x10, "4" )
754 PORT_DIPSETTING( 0x20, "5" )
755 PORT_DIPSETTING( 0x30, "6" )
756 PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) )
757 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
758 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
759 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
760
761 PORT_START("DSW03")
762 PORT_DIPNAME( 0x07, 0x03, DEF_STR( Coin_B ) )
763 PORT_DIPSETTING( 0x00, DEF_STR ( 4C_1C ) )
764 PORT_DIPSETTING( 0x01, DEF_STR ( 3C_1C ) )
765 PORT_DIPSETTING( 0x02, DEF_STR ( 2C_1C ) )
766 PORT_DIPSETTING( 0x03, DEF_STR ( 1C_1C ) )
767 PORT_DIPSETTING( 0x04, DEF_STR ( 1C_2C ) )
768 PORT_DIPSETTING( 0x05, DEF_STR ( 1C_3C ) )
769 PORT_DIPSETTING( 0x06, DEF_STR ( 1C_4C ) )
770 PORT_DIPSETTING( 0x07, DEF_STR ( 1C_5C ) )
771 PORT_DIPNAME( 0x38, 0x18, DEF_STR( Coin_A ) )
772 PORT_DIPSETTING( 0x00, DEF_STR ( 4C_1C ) )
773 PORT_DIPSETTING( 0x08, DEF_STR ( 3C_1C ) )
774 PORT_DIPSETTING( 0x10, DEF_STR ( 2C_1C ) )
775 PORT_DIPSETTING( 0x18, DEF_STR ( 1C_1C ) )
776 PORT_DIPSETTING( 0x20, DEF_STR ( 1C_2C ) )
777 PORT_DIPSETTING( 0x28, DEF_STR ( 1C_3C ) )
778 PORT_DIPSETTING( 0x30, DEF_STR ( 1C_4C ) )
779 PORT_DIPSETTING( 0x38, DEF_STR ( 1C_5C ) )
780 PORT_DIPNAME( 0x40, 0x40, "Test Flip Screen" )
781 PORT_DIPSETTING( 0x00, DEF_STR( No ) )
782 PORT_DIPSETTING( 0x40, DEF_STR( Yes ) )
783 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Free_Play ) )
784 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
785 PORT_DIPSETTING( 0x80, DEF_STR( On ) )
786 INPUT_PORTS_END
787
788
789 static INPUT_PORTS_START( ixion )
790 PORT_INCLUDE(zaxxon)
791
792 PORT_MODIFY("SW00")
793 PORT_BIT( 0xff, 0x00, IPT_CUSTOM) PORT_CUSTOM_MEMBER(zaxxon_state, razmataz_dial_r<0>)
794
795 PORT_START("DIAL.0")
796 PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(30) PORT_KEYDELTA(15) PORT_CODE_DEC(KEYCODE_Z) PORT_CODE_INC(KEYCODE_X) PORT_RESET
797
798 PORT_MODIFY("SW01")
799 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY
800 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY
801 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY
802 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY
803 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
804 PORT_BIT( 0xe0, IP_ACTIVE_HIGH, IPT_UNUSED )
805
806 PORT_MODIFY("DSW02")
807 PORT_DIPNAME( 0x03, 0x00, DEF_STR( Bonus_Life ) )
808 PORT_DIPSETTING( 0x00, "40000" )
809 PORT_DIPSETTING( 0x01, "60000" )
810 PORT_DIPSETTING( 0x02, "80000" )
811 PORT_DIPSETTING( 0x03, "100000" )
812 PORT_DIPNAME( 0x0c, 0x04, DEF_STR( Lives ) )
813 PORT_DIPSETTING( 0x00, "2" )
814 PORT_DIPSETTING( 0x04, "3" )
815 PORT_DIPSETTING( 0x08, "4" )
816 PORT_DIPSETTING( 0x0c, "5" )
817 PORT_DIPNAME( 0x70, 0x30, DEF_STR( Difficulty ) )
818 PORT_DIPSETTING( 0x00, DEF_STR( Easiest ) )
819 PORT_DIPSETTING( 0x10, DEF_STR( Easier ) )
820 PORT_DIPSETTING( 0x20, DEF_STR( Easy ) )
821 PORT_DIPSETTING( 0x30, DEF_STR( Normal ) )
822 PORT_DIPSETTING( 0x40, DEF_STR( Medium ) )
823 PORT_DIPSETTING( 0x50, DEF_STR( Hard ) )
824 PORT_DIPSETTING( 0x60, DEF_STR( Harder ) )
825 PORT_DIPSETTING( 0x70, DEF_STR( Hardest ) )
826 PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) )
827 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
828 PORT_DIPSETTING( 0x80, DEF_STR( On ) )
829
830 PORT_MODIFY("DSW03")
831 PORT_DIPNAME( 0x07, 0x03, DEF_STR( Coin_B ) )
832 PORT_DIPSETTING( 0x00, DEF_STR ( 4C_1C ) )
833 PORT_DIPSETTING( 0x01, DEF_STR ( 3C_1C ) )
834 PORT_DIPSETTING( 0x02, DEF_STR ( 2C_1C ) )
835 PORT_DIPSETTING( 0x03, DEF_STR ( 1C_1C ) )
836 PORT_DIPSETTING( 0x04, DEF_STR ( 1C_2C ) )
837 PORT_DIPSETTING( 0x05, DEF_STR ( 1C_3C ) )
838 PORT_DIPSETTING( 0x06, DEF_STR ( 1C_4C ) )
839 PORT_DIPSETTING( 0x07, DEF_STR ( 1C_5C ) )
840 PORT_DIPNAME( 0x38, 0x18, DEF_STR( Coin_A ) )
841 PORT_DIPSETTING( 0x00, DEF_STR ( 4C_1C ) )
842 PORT_DIPSETTING( 0x08, DEF_STR ( 3C_1C ) )
843 PORT_DIPSETTING( 0x10, DEF_STR ( 2C_1C ) )
844 PORT_DIPSETTING( 0x18, DEF_STR ( 1C_1C ) )
845 PORT_DIPSETTING( 0x20, DEF_STR ( 1C_2C ) )
846 PORT_DIPSETTING( 0x28, DEF_STR ( 1C_3C ) )
847 PORT_DIPSETTING( 0x30, DEF_STR ( 1C_4C ) )
848 PORT_DIPSETTING( 0x38, DEF_STR ( 1C_5C ) )
849 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
850 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Free_Play ) )
851 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
852 PORT_DIPSETTING( 0x80, DEF_STR( On ) )
853 INPUT_PORTS_END
854
855
856 static INPUT_PORTS_START( congo )
857 PORT_INCLUDE(zaxxon)
858
859 PORT_MODIFY("SW00")
860 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY
861 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY
862 PORT_DIPNAME( 0x20, 0x00, "Test Back and Target" )
863 PORT_DIPSETTING( 0x20, DEF_STR( No ) )
864 PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
865 PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED )
866
867 PORT_MODIFY("SW01")
868 PORT_DIPNAME( 0x20, 0x00, "Test I/O and Dip SW" )
869 PORT_DIPSETTING( 0x20, DEF_STR( No ) )
870 PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
871 PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED )
872
873 PORT_MODIFY("DSW02")
874 PORT_DIPNAME( 0x0c, 0x04, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:!3,!4")
875 PORT_DIPSETTING( 0x0c, DEF_STR( Easy ) )
876 PORT_DIPSETTING( 0x04, DEF_STR( Medium ) )
877 PORT_DIPSETTING( 0x08, DEF_STR( Hard ) )
878 PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
879 INPUT_PORTS_END
880
881
882 /*************************************
883 *
884 * Graphics definitions
885 *
886 *************************************/
887
888 static const gfx_layout zaxxon_spritelayout =
889 {
890 32,32,
891 RGN_FRAC(1,3),
892 3,
893 { RGN_FRAC(2,3), RGN_FRAC(1,3), RGN_FRAC(0,3) },
894 { 0, 1, 2, 3, 4, 5, 6, 7,
895 8*8+0, 8*8+1, 8*8+2, 8*8+3, 8*8+4, 8*8+5, 8*8+6, 8*8+7,
896 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7,
897 24*8+0, 24*8+1, 24*8+2, 24*8+3, 24*8+4, 24*8+5, 24*8+6, 24*8+7 },
898 { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
899 32*8, 33*8, 34*8, 35*8, 36*8, 37*8, 38*8, 39*8,
900 64*8, 65*8, 66*8, 67*8, 68*8, 69*8, 70*8, 71*8,
901 96*8, 97*8, 98*8, 99*8, 100*8, 101*8, 102*8, 103*8 },
902 128*8
903 };
904
905
906 static GFXDECODE_START( gfx_zaxxon )
907 GFXDECODE_ENTRY( "gfx_tx", 0, gfx_8x8x2_planar, 0, 64*2 ) /* characters */
908 GFXDECODE_ENTRY( "gfx_bg", 0, gfx_8x8x3_planar, 0, 32*2 ) /* background tiles */
909 GFXDECODE_ENTRY( "gfx_spr", 0, zaxxon_spritelayout, 0, 32*2 ) /* sprites */
910 GFXDECODE_END
911
912
913 /*************************************
914 *
915 * Machine driver
916 *
917 *************************************/
918
root(machine_config & config)919 void zaxxon_state::root(machine_config &config)
920 {
921 /* basic machine hardware */
922 Z80(config, m_maincpu, MASTER_CLOCK/16);
923 m_maincpu->set_addrmap(AS_PROGRAM, &zaxxon_state::zaxxon_map);
924
925 I8255A(config, m_ppi);
926 m_ppi->out_pa_callback().set(FUNC(zaxxon_state::zaxxon_sound_a_w));
927 m_ppi->out_pb_callback().set(FUNC(zaxxon_state::zaxxon_sound_b_w));
928 m_ppi->out_pc_callback().set(FUNC(zaxxon_state::zaxxon_sound_c_w));
929
930 LS259(config, m_mainlatch[0]); // U55 on Zaxxon IC Board A
931 m_mainlatch[0]->q_out_cb<0>().set(FUNC(zaxxon_state::coin_enable_w)); // COIN EN A
932 m_mainlatch[0]->q_out_cb<1>().set(FUNC(zaxxon_state::coin_enable_w)); // COIN EN B
933 m_mainlatch[0]->q_out_cb<2>().set(FUNC(zaxxon_state::coin_enable_w)); // SERV EN
934 m_mainlatch[0]->q_out_cb<3>().set(FUNC(zaxxon_state::coin_counter_a_w)); // COUNT A
935 m_mainlatch[0]->q_out_cb<4>().set(FUNC(zaxxon_state::coin_counter_b_w)); // COUNT B
936 m_mainlatch[0]->q_out_cb<6>().set(FUNC(zaxxon_state::flipscreen_w)); // FLIP
937
938 LS259(config, m_mainlatch[1]); // U56 on Zaxxon IC Board A
939 m_mainlatch[1]->q_out_cb<0>().set(FUNC(zaxxon_state::int_enable_w)); // INTON
940 m_mainlatch[1]->q_out_cb<1>().set(FUNC(zaxxon_state::fg_color_w)); // CREF 1
941 m_mainlatch[1]->q_out_cb<6>().set(FUNC(zaxxon_state::bg_color_w)); // CREF 3
942 m_mainlatch[1]->q_out_cb<7>().set(FUNC(zaxxon_state::bg_enable_w)); // BEN
943
944 /* video hardware */
945 GFXDECODE(config, m_gfxdecode, m_palette, gfx_zaxxon);
946 PALETTE(config, m_palette, FUNC(zaxxon_state::zaxxon_palette), 256);
947
948 screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
949 screen.set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART);
950 screen.set_screen_update(FUNC(zaxxon_state::screen_update_zaxxon));
951 screen.set_palette(m_palette);
952 screen.screen_vblank().set(FUNC(zaxxon_state::vblank_int));
953 }
954
955
zaxxon(machine_config & config)956 void zaxxon_state::zaxxon(machine_config &config)
957 {
958 root(config);
959
960 /* sound hardware */
961 SPEAKER(config, "speaker").front_center();
962 zaxxon_samples(config);
963 }
964
965
szaxxon(machine_config & config)966 void zaxxon_state::szaxxon(machine_config &config)
967 {
968 zaxxon(config);
969 m_maincpu->set_addrmap(AS_OPCODES, &zaxxon_state::decrypted_opcodes_map);
970 }
971
972
szaxxone(machine_config & config)973 void zaxxon_state::szaxxone(machine_config &config)
974 {
975 zaxxon(config);
976 sega_315_5013_device &maincpu(SEGA_315_5013(config.replace(), m_maincpu, MASTER_CLOCK/16));
977 maincpu.set_addrmap(AS_PROGRAM, &zaxxon_state::zaxxon_map);
978 maincpu.set_addrmap(AS_OPCODES, &zaxxon_state::decrypted_opcodes_map);
979 maincpu.set_decrypted_tag(":decrypted_opcodes");
980 maincpu.set_size(0x6000);
981 }
982
983
futspye(machine_config & config)984 void zaxxon_state::futspye(machine_config &config)
985 {
986 root(config);
987 sega_315_5061_device &maincpu(SEGA_315_5061(config.replace(), m_maincpu, MASTER_CLOCK/16));
988 maincpu.set_addrmap(AS_PROGRAM, &zaxxon_state::zaxxon_map);
989 maincpu.set_addrmap(AS_OPCODES, &zaxxon_state::decrypted_opcodes_map);
990 maincpu.set_decrypted_tag(":decrypted_opcodes");
991 maincpu.set_size(0x6000);
992
993
994 /* video hardware */
995 subdevice<screen_device>("screen")->set_screen_update(FUNC(zaxxon_state::screen_update_futspy));
996
997 /* sound hardware */
998 SPEAKER(config, "speaker").front_center();
999 zaxxon_samples(config);
1000 }
1001
1002
razmataze(machine_config & config)1003 void zaxxon_state::razmataze(machine_config &config)
1004 {
1005 root(config);
1006 sega_315_5098_device &maincpu(SEGA_315_5098(config.replace(), m_maincpu, MASTER_CLOCK/16));
1007 maincpu.set_addrmap(AS_PROGRAM, &zaxxon_state::ixion_map);
1008 maincpu.set_addrmap(AS_OPCODES, &zaxxon_state::decrypted_opcodes_map);
1009 maincpu.set_decrypted_tag(":decrypted_opcodes");
1010 maincpu.set_size(0x6000);
1011
1012 config.device_remove("ppi8255");
1013
1014 /* video hardware */
1015 MCFG_VIDEO_START_OVERRIDE(zaxxon_state,razmataz)
1016 subdevice<screen_device>("screen")->set_screen_update(FUNC(zaxxon_state::screen_update_razmataz));
1017
1018 /* sound hardware */
1019 SPEAKER(config, "speaker").front_center();
1020 SEGAUSBROM(config, "usbsnd", 0, m_maincpu).add_route(ALL_OUTPUTS, "speaker", 1.0);
1021 }
1022
1023
ixion(machine_config & config)1024 void zaxxon_state::ixion(machine_config &config)
1025 {
1026 razmataze(config);
1027 sega_315_5013_device &maincpu(SEGA_315_5013(config.replace(), m_maincpu, MASTER_CLOCK/16));
1028 maincpu.set_addrmap(AS_PROGRAM, &zaxxon_state::ixion_map);
1029 maincpu.set_addrmap(AS_OPCODES, &zaxxon_state::decrypted_opcodes_map);
1030 maincpu.set_decrypted_tag(":decrypted_opcodes");
1031 maincpu.set_size(0x6000);
1032
1033 m_mainlatch[0]->q_out_cb<6>().set_nop(); // flip screen not used
1034 }
1035
1036
congo(machine_config & config)1037 void zaxxon_state::congo(machine_config &config)
1038 {
1039 root(config);
1040
1041 m_maincpu->set_addrmap(AS_PROGRAM, &zaxxon_state::congo_map);
1042
1043 m_ppi->in_pa_callback().set("soundlatch", FUNC(generic_latch_8_device::read));
1044 m_ppi->out_pa_callback().set_nop();
1045 m_ppi->out_pb_callback().set(FUNC(zaxxon_state::congo_sound_b_w));
1046 m_ppi->out_pc_callback().set(FUNC(zaxxon_state::congo_sound_c_w));
1047
1048 // U52 on Control Board
1049 m_mainlatch[0]->q_out_cb<5>().set(FUNC(zaxxon_state::bg_enable_w)); // BEN
1050 m_mainlatch[0]->q_out_cb<7>().set(FUNC(zaxxon_state::int_enable_w)); // INTON
1051
1052 // U53 on Control Board
1053 m_mainlatch[1]->q_out_cb<0>().set_nop(); // not used
1054 m_mainlatch[1]->q_out_cb<3>().set(FUNC(zaxxon_state::bg_color_w)); // CREF 3
1055 m_mainlatch[1]->q_out_cb<6>().set(FUNC(zaxxon_state::congo_fg_bank_w)); // BS
1056 m_mainlatch[1]->q_out_cb<7>().set(FUNC(zaxxon_state::congo_color_bank_w)); // CBS
1057
1058 z80_device &audiocpu(Z80(config, "audiocpu", SOUND_CLOCK));
1059 audiocpu.set_addrmap(AS_PROGRAM, &zaxxon_state::congo_sound_map);
1060 audiocpu.set_periodic_int(FUNC(zaxxon_state::irq0_line_hold), attotime::from_hz(SOUND_CLOCK/16/16/16/4));
1061
1062 /* video hardware */
1063 m_palette->set_entries(512).set_init(FUNC(zaxxon_state::zaxxon_palette));
1064
1065 MCFG_VIDEO_START_OVERRIDE(zaxxon_state,congo)
1066 subdevice<screen_device>("screen")->set_screen_update(FUNC(zaxxon_state::screen_update_congo));
1067
1068 /* sound hardware */
1069 SPEAKER(config, "speaker").front_center();
1070
1071 GENERIC_LATCH_8(config, "soundlatch");
1072
1073 SN76489A(config, "sn1", SOUND_CLOCK).add_route(ALL_OUTPUTS, "speaker", 1.0); // schematic shows sn76489A
1074
1075 SN76489A(config, "sn2", SOUND_CLOCK/4).add_route(ALL_OUTPUTS, "speaker", 1.0); // schematic shows sn76489A
1076
1077 congo_samples(config);
1078 }
1079
1080
1081 /*************************************
1082 *
1083 * ROM definitions
1084 *
1085 *************************************/
1086
1087 ROM_START( zaxxon )
1088 ROM_REGION( 0x6000, "maincpu", 0 )
1089 ROM_LOAD( "zaxxon_rom3d.u27", 0x0000, 0x2000, CRC(6e2b4a30) SHA1(80ac53c554c84226b119cbe3cf3470bcdbcd5762) ) /* These 3 roms had a red D stamped on them */
1090 ROM_LOAD( "zaxxon_rom2d.u28", 0x2000, 0x2000, CRC(1c9ea398) SHA1(0cd259be3fa80f3d53dfa76d5ca06773cdfe5945) )
1091 ROM_LOAD( "zaxxon_rom1d.u29", 0x4000, 0x1000, CRC(1c123ef9) SHA1(2588be06ea7baca6112d58c78a1eeb98aad8a02e) )
1092
1093 ROM_REGION( 0x1000, "gfx_tx", 0 )
1094 ROM_LOAD( "zaxxon_rom14.u68", 0x0000, 0x0800, CRC(07bf8c52) SHA1(425157a1625b1bd5169c3218b958010bf6af12bb) )
CRC(c215edcb)1095 ROM_LOAD( "zaxxon_rom15.u69", 0x0800, 0x0800, CRC(c215edcb) SHA1(f1ded2173eb139f48d2ca86c5ef00acbe6c11cd3) )
1096
1097 ROM_REGION( 0x6000, "gfx_bg", 0 )
1098 ROM_LOAD( "zaxxon_rom6.u113", 0x0000, 0x2000, CRC(6e07bb68) SHA1(a002f3441b0f0044615ce71ecbd14edadba16270) )
1099 ROM_LOAD( "zaxxon_rom5.u112", 0x2000, 0x2000, CRC(0a5bce6a) SHA1(a86543727389931244ba8a576b543d7ac05a2585) )
1100 ROM_LOAD( "zaxxon_rom4.u111", 0x4000, 0x2000, CRC(a5bf1465) SHA1(a8cd27dfb4a606bae8bfddcf936e69e980fb1977) )
1101
1102 ROM_REGION( 0x6000, "gfx_spr", 0 )
1103 ROM_LOAD( "zaxxon_rom11.u77", 0x0000, 0x2000, CRC(eaf0dd4b) SHA1(194e2ca0a806e0cb6bb7cc8341d1fc6f2ea911f6) )
1104 ROM_LOAD( "zaxxon_rom12.u78", 0x2000, 0x2000, CRC(1c5369c7) SHA1(af6a5984c3cedfa8c9efcd669f4f205b51a433b2) )
1105 ROM_LOAD( "zaxxon_rom13.u79", 0x4000, 0x2000, CRC(ab4e8a9a) SHA1(4ac79cccc30e4adfa878b36101e97e20ac010438) )
1106
1107 ROM_REGION( 0x8000, "tilemap_dat", 0 )
1108 ROM_LOAD( "zaxxon_rom8.u91", 0x0000, 0x2000, CRC(28d65063) SHA1(e1f90716236c61df61bdc6915a8e390cb4dcbf15) )
1109 ROM_LOAD( "zaxxon_rom7.u90", 0x2000, 0x2000, CRC(6284c200) SHA1(d26a9049541479b8b19f5aa0690cf4aaa787c9b5) )
1110 ROM_LOAD( "zaxxon_rom10.u93", 0x4000, 0x2000, CRC(a95e61fd) SHA1(a0f8c15ff75affa3532abf8f340811cf415421fd) )
1111 ROM_LOAD( "zaxxon_rom9.u92", 0x6000, 0x2000, CRC(7e42691f) SHA1(2124363be8f590b74e2b15dd3f90d77dd9ca9528) )
1112
1113 ROM_REGION( 0x0200, "proms", 0 )
1114 ROM_LOAD( "mro16.u76", 0x0000, 0x0100, CRC(6cc6695b) SHA1(01ae8450ccc302e1a5ae74230d44f6f531a962e2) ) /* BPROM from TI stamped as J214A2 MRO16 */
1115 ROM_LOAD( "zaxxon.u72", 0x0100, 0x0100, CRC(deaa21f7) SHA1(0cf08fb62f77d93ff7cb883c633e0db35906e11d) ) /* Same data as PR-5167 from Super Zaxxon */
1116 ROM_END
1117
1118 ROM_START( zaxxon2 )
1119 ROM_REGION( 0x6000, "maincpu", 0 )
1120 ROM_LOAD( "zaxxon_rom3a.u27", 0x0000, 0x2000, CRC(b18e428a) SHA1(d3ff077e37a3ed8a9cc32cba19e1694b79df6b30) ) /* Need to verify proper revision level via ROM label */
1121 ROM_LOAD( "zaxxon_rom2a.u28", 0x2000, 0x2000, CRC(1c9ea398) SHA1(0cd259be3fa80f3d53dfa76d5ca06773cdfe5945) ) /* Need to verify proper revision level via ROM label */
1122 ROM_LOAD( "zaxxon_rom1a.u29", 0x4000, 0x1000, CRC(1977d933) SHA1(b0100a51a85928b8df3b07b27c9e7e4f929d7893) ) /* Need to verify proper revision level via ROM label */
1123
1124 ROM_REGION( 0x1000, "gfx_tx", 0 )
1125 ROM_LOAD( "zaxxon_rom14.u68", 0x0000, 0x0800, CRC(07bf8c52) SHA1(425157a1625b1bd5169c3218b958010bf6af12bb) )
1126 ROM_LOAD( "zaxxon_rom15.u69", 0x0800, 0x0800, CRC(c215edcb) SHA1(f1ded2173eb139f48d2ca86c5ef00acbe6c11cd3) )
1127
1128 ROM_REGION( 0x6000, "gfx_bg", 0 )
1129 ROM_LOAD( "zaxxon_rom6.u113", 0x0000, 0x2000, CRC(6e07bb68) SHA1(a002f3441b0f0044615ce71ecbd14edadba16270) )
1130 ROM_LOAD( "zaxxon_rom5.u112", 0x2000, 0x2000, CRC(0a5bce6a) SHA1(a86543727389931244ba8a576b543d7ac05a2585) )
1131 ROM_LOAD( "zaxxon_rom4.u111", 0x4000, 0x2000, CRC(a5bf1465) SHA1(a8cd27dfb4a606bae8bfddcf936e69e980fb1977) )
1132
1133 ROM_REGION( 0x6000, "gfx_spr", 0 )
1134 ROM_LOAD( "zaxxon_rom11.u77", 0x0000, 0x2000, CRC(eaf0dd4b) SHA1(194e2ca0a806e0cb6bb7cc8341d1fc6f2ea911f6) )
1135 ROM_LOAD( "zaxxon_rom12.u78", 0x2000, 0x2000, CRC(1c5369c7) SHA1(af6a5984c3cedfa8c9efcd669f4f205b51a433b2) )
1136 ROM_LOAD( "zaxxon_rom13.u79", 0x4000, 0x2000, CRC(ab4e8a9a) SHA1(4ac79cccc30e4adfa878b36101e97e20ac010438) )
1137
1138 ROM_REGION( 0x8000, "tilemap_dat", 0 )
1139 ROM_LOAD( "zaxxon_rom8.u91", 0x0000, 0x2000, CRC(28d65063) SHA1(e1f90716236c61df61bdc6915a8e390cb4dcbf15) )
1140 ROM_LOAD( "zaxxon_rom7.u90", 0x2000, 0x2000, CRC(6284c200) SHA1(d26a9049541479b8b19f5aa0690cf4aaa787c9b5) )
1141 ROM_LOAD( "zaxxon_rom10.u93", 0x4000, 0x2000, CRC(a95e61fd) SHA1(a0f8c15ff75affa3532abf8f340811cf415421fd) )
1142 ROM_LOAD( "zaxxon_rom9.u92", 0x6000, 0x2000, CRC(7e42691f) SHA1(2124363be8f590b74e2b15dd3f90d77dd9ca9528) )
1143
1144 ROM_REGION( 0x0200, "proms", 0 )
1145 ROM_LOAD( "mro16.u76", 0x0000, 0x0100, CRC(6cc6695b) SHA1(01ae8450ccc302e1a5ae74230d44f6f531a962e2) ) /* BPROM from TI stamped as J214A2 MRO16 */
1146 ROM_LOAD( "mro17.u41", 0x0100, 0x0100, CRC(a9e1fb43) SHA1(57dbcfe2438fd090c08594818549aeea6339eab2) ) /* BPROM from TI stamped as J214A2 MRO17 */
1147 ROM_END
1148
1149 ROM_START( zaxxon3 )
1150 ROM_REGION( 0x6000, "maincpu", 0 )
1151 ROM_LOAD( "zaxxon3_alt.u27", 0x0000, 0x2000, CRC(2f2f2b7c) SHA1(009b6f8943b35bf933c56e9538377be3e1db6a6d) ) /* Need to verify proper revision level via ROM label */
1152 ROM_LOAD( "zaxxon2_alt.u28", 0x2000, 0x2000, CRC(ae7e1c38) SHA1(896f920e04c182eced3a3714b45a1d96e45b4473) ) /* Need to verify proper revision level via ROM label */
1153 ROM_LOAD( "zaxxon1_alt.u29", 0x4000, 0x1000, CRC(cc67c097) SHA1(d258b2900a173b0f3f8acd94b6b636ce3324616d) ) /* Need to verify proper revision level via ROM label */
1154
1155 ROM_REGION( 0x1000, "gfx_tx", 0 )
1156 ROM_LOAD( "zaxxon_rom14.u68", 0x0000, 0x0800, CRC(07bf8c52) SHA1(425157a1625b1bd5169c3218b958010bf6af12bb) )
1157 ROM_LOAD( "zaxxon_rom15.u69", 0x0800, 0x0800, CRC(c215edcb) SHA1(f1ded2173eb139f48d2ca86c5ef00acbe6c11cd3) )
1158
1159 ROM_REGION( 0x6000, "gfx_bg", 0 )
1160 ROM_LOAD( "zaxxon_rom6.u113", 0x0000, 0x2000, CRC(6e07bb68) SHA1(a002f3441b0f0044615ce71ecbd14edadba16270) )
1161 ROM_LOAD( "zaxxon_rom5.u112", 0x2000, 0x2000, CRC(0a5bce6a) SHA1(a86543727389931244ba8a576b543d7ac05a2585) )
1162 ROM_LOAD( "zaxxon_rom4.u111", 0x4000, 0x2000, CRC(a5bf1465) SHA1(a8cd27dfb4a606bae8bfddcf936e69e980fb1977) )
1163
1164 ROM_REGION( 0x6000, "gfx_spr", 0 )
1165 ROM_LOAD( "zaxxon_rom11.u77", 0x0000, 0x2000, CRC(eaf0dd4b) SHA1(194e2ca0a806e0cb6bb7cc8341d1fc6f2ea911f6) )
1166 ROM_LOAD( "zaxxon_rom12.u78", 0x2000, 0x2000, CRC(1c5369c7) SHA1(af6a5984c3cedfa8c9efcd669f4f205b51a433b2) )
1167 ROM_LOAD( "zaxxon_rom13.u79", 0x4000, 0x2000, CRC(ab4e8a9a) SHA1(4ac79cccc30e4adfa878b36101e97e20ac010438) )
1168
1169 ROM_REGION( 0x8000, "tilemap_dat", 0 )
1170 ROM_LOAD( "zaxxon_rom8.u91", 0x0000, 0x2000, CRC(28d65063) SHA1(e1f90716236c61df61bdc6915a8e390cb4dcbf15) )
1171 ROM_LOAD( "zaxxon_rom7.u90", 0x2000, 0x2000, CRC(6284c200) SHA1(d26a9049541479b8b19f5aa0690cf4aaa787c9b5) )
1172 ROM_LOAD( "zaxxon_rom10.u93", 0x4000, 0x2000, CRC(a95e61fd) SHA1(a0f8c15ff75affa3532abf8f340811cf415421fd) )
1173 ROM_LOAD( "zaxxon_rom9.u92", 0x6000, 0x2000, CRC(7e42691f) SHA1(2124363be8f590b74e2b15dd3f90d77dd9ca9528) )
1174
1175 ROM_REGION( 0x0200, "proms", 0 )
1176 ROM_LOAD( "mro16.u76", 0x0000, 0x0100, CRC(6cc6695b) SHA1(01ae8450ccc302e1a5ae74230d44f6f531a962e2) ) /* BPROM from TI stamped as J214A2 MRO16 */
1177 ROM_LOAD( "mro17.u41", 0x0100, 0x0100, CRC(a9e1fb43) SHA1(57dbcfe2438fd090c08594818549aeea6339eab2) ) /* BPROM from TI stamped as J214A2 MRO17 */
1178 ROM_END
1179
1180 ROM_START( zaxxonj )
1181 ROM_REGION( 0x6000, "maincpu", 0 )
1182 ROM_LOAD( "zaxxon_rom3.u13", 0x0000, 0x2000, CRC(925168c7) SHA1(0f14b5072b5be252955ffb3a30fa6c76b3e6a6c4) )
1183 ROM_LOAD( "zaxxon_rom2.u12", 0x2000, 0x2000, CRC(c088df92) SHA1(c0c6cd8dcf6db65129980331fa9ecc3800b63436) )
1184 ROM_LOAD( "zaxxon_rom1.u11", 0x4000, 0x1000, CRC(f832dd79) SHA1(1d626f22630eaa53603637991a06aeb7401e9769) )
1185
1186 ROM_REGION( 0x1000, "gfx_tx", 0 )
1187 ROM_LOAD( "zaxxon_rom14.u54", 0x0000, 0x0800, CRC(07bf8c52) SHA1(425157a1625b1bd5169c3218b958010bf6af12bb) )
1188 ROM_LOAD( "zaxxon_rom15.u55", 0x0800, 0x0800, CRC(c215edcb) SHA1(f1ded2173eb139f48d2ca86c5ef00acbe6c11cd3) )
1189
1190 ROM_REGION( 0x6000, "gfx_bg", 0 )
1191 ROM_LOAD( "zaxxon_rom6.u70", 0x0000, 0x2000, CRC(6e07bb68) SHA1(a002f3441b0f0044615ce71ecbd14edadba16270) )
1192 ROM_LOAD( "zaxxon_rom5.u69", 0x2000, 0x2000, CRC(0a5bce6a) SHA1(a86543727389931244ba8a576b543d7ac05a2585) )
1193 ROM_LOAD( "zaxxon_rom4.u68", 0x4000, 0x2000, CRC(a5bf1465) SHA1(a8cd27dfb4a606bae8bfddcf936e69e980fb1977) )
1194
1195 ROM_REGION( 0x6000, "gfx_spr", 0 )
1196 ROM_LOAD( "zaxxon_rom11.u59", 0x0000, 0x2000, CRC(eaf0dd4b) SHA1(194e2ca0a806e0cb6bb7cc8341d1fc6f2ea911f6) )
1197 ROM_LOAD( "zaxxon_rom12.u60", 0x2000, 0x2000, CRC(1c5369c7) SHA1(af6a5984c3cedfa8c9efcd669f4f205b51a433b2) )
1198 ROM_LOAD( "zaxxon_rom13.u61", 0x4000, 0x2000, CRC(ab4e8a9a) SHA1(4ac79cccc30e4adfa878b36101e97e20ac010438) )
1199
1200 ROM_REGION( 0x8000, "tilemap_dat", 0 )
1201 ROM_LOAD( "zaxxon_rom8.u58", 0x0000, 0x2000, CRC(28d65063) SHA1(e1f90716236c61df61bdc6915a8e390cb4dcbf15) )
1202 ROM_LOAD( "zaxxon_rom7.u57", 0x2000, 0x2000, CRC(6284c200) SHA1(d26a9049541479b8b19f5aa0690cf4aaa787c9b5) )
1203 ROM_LOAD( "zaxxon_rom10.u60", 0x4000, 0x2000, CRC(a95e61fd) SHA1(a0f8c15ff75affa3532abf8f340811cf415421fd) )
1204 ROM_LOAD( "zaxxon_rom9.u59", 0x6000, 0x2000, CRC(7e42691f) SHA1(2124363be8f590b74e2b15dd3f90d77dd9ca9528) )
1205
1206 ROM_REGION( 0x0200, "proms", 0 )
1207 ROM_LOAD( "mro16.u76", 0x0000, 0x0100, CRC(6cc6695b) SHA1(01ae8450ccc302e1a5ae74230d44f6f531a962e2) ) /* BPROM from TI stamped as J214A2 MRO16 */
1208 ROM_LOAD( "mro17.u41", 0x0100, 0x0100, CRC(a9e1fb43) SHA1(57dbcfe2438fd090c08594818549aeea6339eab2) ) /* BPROM from TI stamped as J214A2 MRO17 */
1209 ROM_END
1210
1211 ROM_START( zaxxonb )
1212 ROM_REGION( 0x6000, "maincpu", 0 )
1213 ROM_LOAD( "jackson_rom3.u27", 0x0000, 0x2000, CRC(125bca1c) SHA1(f4160966d42e5282736cde8a276204ba8910ca61) ) /* Need to verify ALL the labels in this set */
1214 ROM_LOAD( "jackson_rom2.u28", 0x2000, 0x2000, CRC(c088df92) SHA1(c0c6cd8dcf6db65129980331fa9ecc3800b63436) ) /* Same data as ROM2 from the Japanese set */
1215 ROM_LOAD( "jackson_rom1.u29", 0x4000, 0x1000, CRC(e7bdc417) SHA1(209f0d259f60b984c84229bb31af1ef939adc73e) )
1216
1217 ROM_REGION( 0x1000, "gfx_tx", 0 )
1218 ROM_LOAD( "zaxxon_rom14.u54", 0x0000, 0x0800, CRC(07bf8c52) SHA1(425157a1625b1bd5169c3218b958010bf6af12bb) )
1219 ROM_LOAD( "zaxxon_rom15.u55", 0x0800, 0x0800, CRC(c215edcb) SHA1(f1ded2173eb139f48d2ca86c5ef00acbe6c11cd3) )
1220
1221 ROM_REGION( 0x6000, "gfx_bg", 0 )
1222 ROM_LOAD( "zaxxon_rom6.u70", 0x0000, 0x2000, CRC(6e07bb68) SHA1(a002f3441b0f0044615ce71ecbd14edadba16270) )
1223 ROM_LOAD( "zaxxon_rom5.u69", 0x2000, 0x2000, CRC(0a5bce6a) SHA1(a86543727389931244ba8a576b543d7ac05a2585) )
1224 ROM_LOAD( "zaxxon_rom4.u68", 0x4000, 0x2000, CRC(a5bf1465) SHA1(a8cd27dfb4a606bae8bfddcf936e69e980fb1977) )
1225
1226 ROM_REGION( 0x6000, "gfx_spr", 0 )
1227 ROM_LOAD( "zaxxon_rom11.u59", 0x0000, 0x2000, CRC(eaf0dd4b) SHA1(194e2ca0a806e0cb6bb7cc8341d1fc6f2ea911f6) )
1228 ROM_LOAD( "zaxxon_rom12.u60", 0x2000, 0x2000, CRC(1c5369c7) SHA1(af6a5984c3cedfa8c9efcd669f4f205b51a433b2) )
1229 ROM_LOAD( "zaxxon_rom13.u61", 0x4000, 0x2000, CRC(ab4e8a9a) SHA1(4ac79cccc30e4adfa878b36101e97e20ac010438) )
1230
1231 ROM_REGION( 0x8000, "tilemap_dat", 0 )
1232 ROM_LOAD( "zaxxon_rom8.u58", 0x0000, 0x2000, CRC(28d65063) SHA1(e1f90716236c61df61bdc6915a8e390cb4dcbf15) )
1233 ROM_LOAD( "zaxxon_rom7.u57", 0x2000, 0x2000, CRC(6284c200) SHA1(d26a9049541479b8b19f5aa0690cf4aaa787c9b5) )
1234 ROM_LOAD( "zaxxon_rom10.u60", 0x4000, 0x2000, CRC(a95e61fd) SHA1(a0f8c15ff75affa3532abf8f340811cf415421fd) )
1235 ROM_LOAD( "zaxxon_rom9.u59", 0x6000, 0x2000, CRC(7e42691f) SHA1(2124363be8f590b74e2b15dd3f90d77dd9ca9528) )
1236
1237 ROM_REGION( 0x0200, "proms", 0 )
1238 ROM_LOAD( "mro16.u76", 0x0000, 0x0100, CRC(6cc6695b) SHA1(01ae8450ccc302e1a5ae74230d44f6f531a962e2) ) /* BPROM from TI stamped as J214A2 MRO16 */
1239 ROM_LOAD( "zaxxon.u72", 0x0100, 0x0100, CRC(deaa21f7) SHA1(0cf08fb62f77d93ff7cb883c633e0db35906e11d) )
1240 ROM_END
1241
1242
1243 ROM_START( szaxxon )
1244 ROM_REGION( 0x6000, "maincpu", 0 )
1245 ROM_LOAD( "1804e.u27", 0x0000, 0x2000, CRC(af7221da) SHA1(b5d3beb296d52ed69b4ceacf329c20a72e3a1dce) )
1246 ROM_LOAD( "1803e.u28", 0x2000, 0x2000, CRC(1b90fb2a) SHA1(afb2bd2ffee3f5e589064f59b6ac21ed915094df) )
1247 ROM_LOAD( "1802e.u29", 0x4000, 0x1000, CRC(07258b4a) SHA1(91e3a0c0df6c9cf66980d1ffcc3830ffdbef8c2f) )
1248
1249 ROM_REGION( 0x1000, "gfx_tx", 0 )
1250 ROM_LOAD( "1815b.u68", 0x0000, 0x0800, CRC(bccf560c) SHA1(9f92bd15466048a5665bfc2ebc8c6504af9353eb) )
1251 ROM_LOAD( "1816b.u69", 0x0800, 0x0800, CRC(d28c628b) SHA1(42ab7dc0e4e0d09213054597373383cdb6a55699) )
1252
1253 ROM_REGION( 0x6000, "gfx_bg", 0 )
1254 ROM_LOAD( "1807b.u113", 0x0000, 0x2000, CRC(f51af375) SHA1(8682217dc800f43b73cd5e8501dbf3b7cd136dc1) )
1255 ROM_LOAD( "1806b.u112", 0x2000, 0x2000, CRC(a7de021d) SHA1(a1bee07aa906366aa69866d1bdff38e2d90fafdd) )
1256 ROM_LOAD( "1805b.u111", 0x4000, 0x2000, CRC(5bfb3b04) SHA1(f898e42d6bc1fd3629c9caee3c2af27805969ac6) )
1257
1258 ROM_REGION( 0x6000, "gfx_spr", 0 )
1259 ROM_LOAD( "1812e.u77", 0x0000, 0x2000, CRC(1503ae41) SHA1(d4085f15fcbfb9547a7f9e2cb7ce9276c4d6c08d) )
1260 ROM_LOAD( "1813e.u78", 0x2000, 0x2000, CRC(3b53d83f) SHA1(118e9d2b4f5daf96f5a38ccd92d0b046a470b0b2) )
1261 ROM_LOAD( "1814e.u79", 0x4000, 0x2000, CRC(581e8793) SHA1(2b3305dd55dc09d7394ed8ae691773972dba28b9) )
1262
1263 ROM_REGION( 0x8000, "tilemap_dat", 0 )
1264 ROM_LOAD( "1809b.u91", 0x0000, 0x2000, CRC(dd1b52df) SHA1(8170dd9f81c41104694951a2c74405d0c6d8b9b6) )
1265 ROM_LOAD( "1808b.u90", 0x2000, 0x2000, CRC(b5bc07f0) SHA1(1e4d460ce8cca66b081ee8ec1a9adb6ef98274ec) )
1266 ROM_LOAD( "1811b.u93", 0x4000, 0x2000, CRC(68e84174) SHA1(b78c44d92078552835a20bcb7125fc9ca8af5048) )
1267 ROM_LOAD( "1810b.u92", 0x6000, 0x2000, CRC(a509994b) SHA1(51541ec78ab3f8241a5ddf7f99a46f5e44292992) )
1268
1269 ROM_REGION( 0x0200, "proms", 0 )
1270 ROM_LOAD( "pr-5168.u98", 0x0000, 0x0100, CRC(15727a9f) SHA1(42840e9ab303fb64102a1dbae03d66c9cf743a9f) ) /* TBP24S10N */
1271 ROM_LOAD( "pr-5167.u72", 0x0100, 0x0100, CRC(deaa21f7) SHA1(0cf08fb62f77d93ff7cb883c633e0db35906e11d) ) /* TBP28L22 */
1272 ROM_END
1273
1274
1275 ROM_START( futspy )
1276 ROM_REGION( 0x6000, "maincpu", 0 )
1277 ROM_LOAD( "fs_snd.u27", 0x0000, 0x2000, CRC(7578fe7f) SHA1(ab42bdf74b07c1ba5337c3d34647d3ee16f9db05) )
1278 ROM_LOAD( "fs_snd.u28", 0x2000, 0x2000, CRC(8ade203c) SHA1(f095f4019befff7af4203c886ef42357f79592a1) )
1279 ROM_LOAD( "fs_snd.u29", 0x4000, 0x1000, CRC(734299c3) SHA1(12acf71d9d00e0e0df29c4d8c397ad407266b364) )
1280
1281 ROM_REGION( 0x1000, "gfx_tx", 0 )
1282 ROM_LOAD( "fs_snd.u68", 0x0000, 0x0800, CRC(305fae2d) SHA1(fbe89feff0fb2d4515000d1b73b7c91aac4e0b67) )
1283 ROM_LOAD( "fs_snd.u69", 0x0800, 0x0800, CRC(3c5658c0) SHA1(70ac44b9334b086cdecd73f5f7820a0bf8ae2629) )
1284
1285 ROM_REGION( 0x6000, "gfx_bg", 0 )
1286 ROM_LOAD( "fs_vid.u113", 0x0000, 0x2000, CRC(36d2bdf6) SHA1(c27835055beedf61ba644070f8920b6008d99040) )
1287 ROM_LOAD( "fs_vid.u112", 0x2000, 0x2000, CRC(3740946a) SHA1(e7579dd91628a811a60a8d8a5b407728b74aa17e) )
1288 ROM_LOAD( "fs_vid.u111", 0x4000, 0x2000, CRC(4cd4df98) SHA1(3ae4b2d0a79069e0de81596805bcf1a9ae7912cf) )
1289
1290 ROM_REGION( 0xc000, "gfx_spr", 0 )
1291 ROM_LOAD( "fs_vid.u77", 0x0000, 0x4000, CRC(1b93c9ec) SHA1(4b1d3b7e35d65cc3b96eb4f2e98c59e779bcb1c1) )
1292 ROM_LOAD( "fs_vid.u78", 0x4000, 0x4000, CRC(50e55262) SHA1(363acbde7b37a2358b3e53cfc08c9bd5dee73d55) )
1293 ROM_LOAD( "fs_vid.u79", 0x8000, 0x4000, CRC(bfb02e3e) SHA1(f53bcec46b8c7d26e9ab01c821a8d1578b85f786) )
1294
1295 ROM_REGION( 0x8000, "tilemap_dat", 0 )
1296 ROM_LOAD( "fs_vid.u91", 0x0000, 0x2000, CRC(86da01f4) SHA1(954e4be1b0e24c8bc88c2b328e3a0e32005bb7b2) )
1297 ROM_LOAD( "fs_vid.u90", 0x2000, 0x2000, CRC(2bd41d2d) SHA1(efb74b4bce31c7868ab6438e07b02b0539d35120) )
1298 ROM_LOAD( "fs_vid.u93", 0x4000, 0x2000, CRC(b82b4997) SHA1(263f74aab47fc4e516b2111eaa94beea61c5fbe5) )
1299 ROM_LOAD( "fs_vid.u92", 0x6000, 0x2000, CRC(af4015af) SHA1(6ed01a42d395ada6f2442b68f901fe61b04c8e44) )
1300
1301 ROM_REGION( 0x0200, "proms", 0 )
1302 ROM_LOAD( "futrprom.u98", 0x0000, 0x0100, CRC(9ba2acaa) SHA1(20e0257ca531ddc398b3aab861c7b5c41b659d40) )
1303 ROM_LOAD( "futrprom.u72", 0x0100, 0x0100, CRC(f9e26790) SHA1(339f27e0126312d35211b5ce533f293b58851c1d) )
1304 ROM_END
1305
1306
1307 ROM_START( razmataz )
1308 ROM_REGION( 0x6000, "maincpu", 0 )
1309 ROM_LOAD( "u27", 0x0000, 0x2000, CRC(254f350f) SHA1(f8e84778b7ffc4da76e97992f01c742c212480cf) )
1310 ROM_LOAD( "u28", 0x2000, 0x2000, CRC(3a1eaa99) SHA1(d1f2a61a8548135c9754097aa468672616244710) )
1311 ROM_LOAD( "u29", 0x4000, 0x2000, CRC(0ee67e78) SHA1(c6c703000a4e0da8af65be53b2a6b2ef67860c30) )
1312
1313 ROM_REGION( 0x1000, "usbcpu", 0 )
1314 ROM_LOAD( "1924.u51", 0x0000, 0x0800, CRC(a75e0011) SHA1(7d67ce2e8a2de471221b3b565a937ae1a35e1560) )
1315 ROM_LOAD( "1923.u50", 0x0800, 0x0800, CRC(59994a51) SHA1(57ccee24a989efe39f8ffc08aab7d72a1cdef3d1) )
1316
1317 ROM_REGION( 0x1000, "gfx_tx", 0 )
1318 ROM_LOAD( "1921.u68", 0x0000, 0x0800, CRC(77f8ff5a) SHA1(d535109387559dd5b58dc6432a1eae6535442079) )
1319 ROM_LOAD( "1922.u69", 0x0800, 0x0800, CRC(cf63621e) SHA1(60452ad34f2b0e0afa0f09455d9aa84058c54fd5) )
1320
1321 ROM_REGION( 0x6000, "gfx_bg", 0 )
1322 ROM_LOAD( "1934.u113", 0x0000, 0x2000, CRC(39bb679c) SHA1(0a384286dbfc8b35e4779119f62769b6cfc93a52) )
1323 ROM_LOAD( "1933.u112", 0x2000, 0x2000, CRC(1022185e) SHA1(874d796baea8ade2c642f3640ec7875a9f509a68) )
1324 ROM_LOAD( "1932.u111", 0x4000, 0x2000, CRC(c7a715eb) SHA1(8b04558c87c5a5f94a5bab9fbe198a0b8a84ebf4) )
1325
1326 ROM_REGION( 0x6000, "gfx_spr", 0 )
1327 ROM_LOAD( "1925.u77", 0x0000, 0x2000, CRC(a7965437) SHA1(24ab3cc9b6d70e8cab4f0a20f84fb98682b321f5) )
1328 ROM_LOAD( "1926.u78", 0x2000, 0x2000, CRC(9a3af434) SHA1(0b5b1ac9cf8bee1c3830ef3baffcd7d3a05bf765) )
1329 ROM_LOAD( "1927.u79", 0x4000, 0x2000, CRC(0323de2b) SHA1(6f6ceafe6472d59bd0ffecb9dd2d401659157b50) )
1330
1331 ROM_REGION( 0x8000, "tilemap_dat", 0 )
1332 ROM_LOAD( "1929.u91", 0x0000, 0x2000, CRC(55c7c757) SHA1(ad8d548eb965f343e88bad4b4ad1b5b226f21d71) )
1333 ROM_LOAD( "1928.u90", 0x2000, 0x2000, CRC(e58b155b) SHA1(dd6abeae66de69734b7aa5e133dbfb8f8a35578e) )
1334 ROM_LOAD( "1931.u93", 0x4000, 0x2000, CRC(55fe0f82) SHA1(391434b41b6235199a4f19a8873a523cbb417f70) )
1335 ROM_LOAD( "1930.u92", 0x6000, 0x2000, CRC(f355f105) SHA1(93067b7390c05b71020e77abdd9577b39e486d9f) )
1336
1337 ROM_REGION( 0x0200, "proms", 0 )
1338 ROM_LOAD( "clr.u98", 0x0000, 0x0100, CRC(0fd671af) SHA1(7f26139398754dae7383c9375fca95b7970fcefb) )
1339 ROM_LOAD( "clr.u72", 0x0100, 0x0100, CRC(03233bc5) SHA1(30bd690da7eda4e13df90d7ee59dbf744b3541a4) )
1340 ROM_END
1341
1342
1343 ROM_START( ixion )
1344 ROM_REGION( 0x6000, "maincpu", 0 )
1345 ROM_LOAD( "1937d.u27", 0x0000, 0x2000, CRC(f447aac5) SHA1(f6ec02f20482649ba1765254e0e67a8593075092) )
1346 ROM_LOAD( "1938b.u28", 0x2000, 0x2000, CRC(17f48640) SHA1(d661e8ae0747c2c526360cb72e403deba7a98e71) )
1347 ROM_LOAD( "1955b.u29", 0x4000, 0x1000, CRC(78636ec6) SHA1(afca6418221e700749031cb3fa738907d77c1566) )
1348
1349 ROM_REGION( 0x1000, "usbcpu", 0 )
1350 ROM_LOAD( "1944a.u51", 0x0000, 0x0800, CRC(88215098) SHA1(54bd1c71e7f10f20623e47f4e791f54ce698bc08) )
1351 ROM_LOAD( "1943a.u50", 0x0800, 0x0800, CRC(77e5a1f0) SHA1(00152ffb59ebac718b300fdf24314b456748ffbe) )
1352
1353 ROM_REGION( 0x1000, "gfx_tx", 0 )
1354 ROM_LOAD( "1939a.u68", 0x0000, 0x0800, CRC(c717ddc7) SHA1(86fdef368f097a27aac6e05bf3208fcdaf7d9da7) )
1355 ROM_LOAD( "1940a.u69", 0x0800, 0x0800, CRC(ec4bb3ad) SHA1(8a38bc48cda59b5e76a5153d459bb2d01d6a56f3) )
1356
1357 ROM_REGION( 0x6000, "gfx_bg", 0 )
1358 ROM_LOAD( "1952a.u113", 0x0000, 0x2000, CRC(ffb9b03d) SHA1(b7a900166a880ca4a71fec6ad02f5c0ecfc92df8) )
1359 ROM_LOAD( "1951a.u112", 0x2000, 0x2000, CRC(db743f1b) SHA1(a5d13d597fe999757137d96fb4bf7c7efc7a3245) )
1360 ROM_LOAD( "1950a.u111", 0x4000, 0x2000, CRC(c2de178a) SHA1(0347a751accb02576b9cd8b123b79018cc05268c) )
1361
1362 ROM_REGION( 0x6000, "gfx_spr", 0 )
1363 ROM_LOAD( "1945a.u77", 0x0000, 0x2000, CRC(3a3fbfe7) SHA1(f3a503f476524f9de5b55de49009972124e58601) )
1364 ROM_LOAD( "1946a.u78", 0x2000, 0x2000, CRC(f2cb1b53) SHA1(8c2fb58ce7de7876c4d2f1a3d13c6a5efd06d354) )
1365 ROM_LOAD( "1947a.u79", 0x4000, 0x2000, CRC(d2421e92) SHA1(07000055ace2c6983c7add180904d6bc20e1bb3b) )
1366
1367 ROM_REGION( 0x8000, "tilemap_dat", 0 )
1368 ROM_LOAD( "1948a.u91", 0x0000, 0x2000, CRC(7a7fcbbe) SHA1(76dffffcadbe446091ee98958873aa76f7b17213) )
1369 ROM_LOAD( "1953a.u90", 0x2000, 0x2000, CRC(6b626ea7) SHA1(7e02da0b031a42b077c173d85f15f75242e61e98) )
1370 ROM_LOAD( "1949a.u93", 0x4000, 0x2000, CRC(e7722d09) SHA1(c9a0fb4fac798454facd3d5dd02d2c05cfe8e3a6) )
1371 ROM_LOAD( "1954a.u92", 0x6000, 0x2000, CRC(a970f5ff) SHA1(0f1f8f329ceefcbd0725f8eeff1b01348f5c9374) )
1372
1373 ROM_REGION( 0x0200, "proms", 0 )
1374 ROM_LOAD( "1942a.u98", 0x0000, 0x0100, CRC(3a8e6f74) SHA1(c2d480f8c8a111c1e23cbf819dea807f8128208d) )
1375 ROM_LOAD( "1941a.u72", 0x0100, 0x0100, CRC(a5d0d97e) SHA1(2677508b44f9b7a6c6ee56e49a7b88073e80debe) )
1376 ROM_END
1377
1378 /*
1379 Extra notes about Congo Bongo:
1380
1381 There is known to be a version of Congo Bongo with official Sega "EPR" numbers. Sega game ID number for this set is 834-5197
1382
1383 3 board stack with 834-5181 stickered as 834-5207 with standard 834-5167 video board & 834-5168 sound board.
1384 EPR-5309A.rom1 @ U35
1385 EPR-5310A.rom2 @ U34
1386 EPR-5311A.rom3 @ U33
1387 EPR-5312A.rom4 @ U32
1388
1389 Uses the MR018 BPROM @ U68
1390
1391 Oddly, it seems most Congo Bongo board sets (2 & 3 board stacks) have hand written labels for the program roms. At least
1392 all the PCB photos I found via Google as well as those included in a recent redump of both board set types. And YES it's
1393 actually "CONGO BONGO REV C ROM 2A" this is verified in several PCB photos.
1394
1395 */
1396
1397 ROM_START( congo ) /* 2 board stack, Sega game ID number for this set is 834-5180 */
1398 ROM_REGION( 0x8000, "maincpu", 0 ) /* Located on 834-5181 PCB, AKA Tip Top-CONTR II */
1399 ROM_LOAD( "congo_rev_c_rom1.u21", 0x0000, 0x2000, CRC(09355b5b) SHA1(0085ac7eb0035a88cb54cdd3dd6b2643141d39db) ) /* SUM16 written on label 044A */
1400 ROM_LOAD( "congo_rev_c_rom2a.u22", 0x2000, 0x2000, CRC(1c5e30ae) SHA1(7cc5420e0e7a2793a671b938c121ae4079f5b1b8) ) /* SUM16 written on label DD4D */
1401 ROM_LOAD( "congo_rev_c_rom3.u23", 0x4000, 0x2000, CRC(5ee1132c) SHA1(26294cd69ee43dfd29fc3642e8c04552dcdbaa49) ) /* SUM16 written on label C932 */
1402 ROM_LOAD( "congo_rev_c_rom4.u24", 0x6000, 0x2000, CRC(5332b9bf) SHA1(8440cc6f92918b3b467a5a0b86c9defeb0a7db0e) ) /* SUM16 written on label 5128 */
1403
1404 ROM_REGION( 0x2000, "audiocpu", 0 ) /* Located on 834-5181 PCB, AKA Tip Top-CONTR II */
1405 ROM_LOAD( "tip_top_rom_17.u19", 0x0000, 0x2000, CRC(5024e673) SHA1(6f846146a4e29bcdfd5bd1bc5f1211d344cd5afa) )
1406
1407 ROM_REGION( 0x1000, "gfx_tx", 0 ) /* Located on 834-5181 PCB, AKA Tip Top-CONTR II */
1408 ROM_LOAD( "tip_top_rom_5.u76", 0x00000, 0x1000, CRC(7bf6ba2b) SHA1(3a2bd21b0e0e55cbd737c7b075492b5e8f944150) )
1409
1410 ROM_REGION( 0x6000, "gfx_bg", 0 ) /* Located on 834-5167 PCB, AKA Tip Tip-VIDEO */
1411 ROM_LOAD( "tip_top_rom_8.u93", 0x00000, 0x2000, CRC(db99a619) SHA1(499029197d26f9aea3ac15d66b5738ce7dea1f6c) )
1412 ROM_LOAD( "tip_top_rom_9.u94", 0x02000, 0x2000, CRC(93e2309e) SHA1(bd8a74332cac0cf85f319c1f35d04a4781c9d655) )
1413 ROM_LOAD( "tip_top_rom_10.u95", 0x04000, 0x2000, CRC(f27a9407) SHA1(d41c90c89ae28c92bf0c57927357d9b68ed7e0ef) )
1414
1415 ROM_REGION( 0xc000, "gfx_spr", 0 ) /* Located on 834-5167 PCB, AKA Tip Tip-VIDEO */
1416 ROM_LOAD( "tip_top_rom_12.u78", 0x00000, 0x2000, CRC(15e3377a) SHA1(04a7fbfd58924359fae0ba76ed152f325f07beae) )
1417 ROM_LOAD( "tip_top_rom_13.u79", 0x02000, 0x2000, CRC(1d1321c8) SHA1(d12e156a24db105c5f941b7ef79f32181b616710) )
1418 ROM_LOAD( "tip_top_rom_11.u77", 0x04000, 0x2000, CRC(73e2709f) SHA1(14919facf08f6983c3a9baad031239a1b57c8202) )
1419 ROM_LOAD( "tip_top_rom_14.u104", 0x06000, 0x2000, CRC(bf9169fe) SHA1(303d68e38e9a47464f14dc5be6bff1be01b88bb6) )
1420 ROM_LOAD( "tip_top_rom_16.u106", 0x08000, 0x2000, CRC(cb6d5775) SHA1(b1f8ead6e6f8ad995baaeb7f8554d41ed2296fff) )
1421 ROM_LOAD( "tip_top_rom_15.u105", 0x0a000, 0x2000, CRC(7b15a7a4) SHA1(b1c05e60a1442e4dd56d197be8b768bcbf45e2d9) )
1422
1423 ROM_REGION( 0x4000, "tilemap_dat", 0 ) /* Located on 834-5167 PCB, AKA Tip Tip-VIDEO */
1424 ROM_LOAD( "tip_top_rom_6.u57", 0x0000, 0x2000, CRC(d637f02b) SHA1(29127149924c5bfdeb9456d7df2a5a5d14098794) )
1425 ROM_LOAD( "tip_top_rom_7.u58", 0x2000, 0x2000, CRC(80927943) SHA1(4683520c241d209c6cabeaead9b363f046c30f70) )
1426
1427 ROM_REGION( 0x0200, "proms", 0 ) /* Located on 834-5181 PCB, AKA Tip Top-CONTR II */
1428 ROM_LOAD( "mr019.u87", 0x0000, 0x100, CRC(b788d8ae) SHA1(9765180f3087140c75e5953409df841787558160) ) /* BPROM type is a TBP28L22 per the schematics */
1429 ROM_RELOAD( 0x0100, 0x100 )
1430 ROM_END
1431
1432 ROM_START( congoa ) /* 3 board stack, Sega game ID number for this set is 834-5156 */
1433 ROM_REGION( 0x8000, "maincpu", 0 ) /* Located on 834-5166 PCB AKA Tip Top-CONTR */
1434 ROM_LOAD( "congo_rev_c_rom1.u35", 0x0000, 0x2000, CRC(09355b5b) SHA1(0085ac7eb0035a88cb54cdd3dd6b2643141d39db) ) /* SUM16 written on label 044A */
1435 ROM_LOAD( "congo_rev_c_rom2a.u34", 0x2000, 0x2000, CRC(1c5e30ae) SHA1(7cc5420e0e7a2793a671b938c121ae4079f5b1b8) ) /* SUM16 written on label DD4D */
1436 ROM_LOAD( "congo_rev_c_rom3.u33", 0x4000, 0x2000, CRC(5ee1132c) SHA1(26294cd69ee43dfd29fc3642e8c04552dcdbaa49) ) /* SUM16 written on label C932 */
1437 ROM_LOAD( "congo_rev_c_rom4.u32", 0x6000, 0x2000, CRC(5332b9bf) SHA1(8440cc6f92918b3b467a5a0b86c9defeb0a7db0e) ) /* SUM16 written on label 5128 */
1438
1439 ROM_REGION( 0x2000, "audiocpu", 0 ) /* Located on 834-5168 PCB AKA Tip Top-SOUND */
1440 ROM_LOAD( "tip_top_rom_17.u11", 0x0000, 0x2000, CRC(5024e673) SHA1(6f846146a4e29bcdfd5bd1bc5f1211d344cd5afa) )
1441
1442 ROM_REGION( 0x1000, "gfx_tx", 0 ) /* Located on 834-5166 PCB AKA Tip Top-CONTR */
1443 ROM_LOAD( "tip_top_rom_5.u76", 0x00000, 0x1000, CRC(7bf6ba2b) SHA1(3a2bd21b0e0e55cbd737c7b075492b5e8f944150) )
1444
1445 ROM_REGION( 0x6000, "gfx_bg", 0 ) /* Located on 834-5167 PCB, AKA Tip Tip-VIDEO */
1446 ROM_LOAD( "tip_top_rom_8.u93", 0x00000, 0x2000, CRC(db99a619) SHA1(499029197d26f9aea3ac15d66b5738ce7dea1f6c) )
1447 ROM_LOAD( "tip_top_rom_9.u94", 0x02000, 0x2000, CRC(93e2309e) SHA1(bd8a74332cac0cf85f319c1f35d04a4781c9d655) )
1448 ROM_LOAD( "tip_top_rom_10.u95", 0x04000, 0x2000, CRC(f27a9407) SHA1(d41c90c89ae28c92bf0c57927357d9b68ed7e0ef) )
1449
1450 ROM_REGION( 0xc000, "gfx_spr", 0 ) /* Located on 834-5167 PCB, AKA Tip Tip-VIDEO */
1451 ROM_LOAD( "tip_top_rom_12.u78", 0x00000, 0x2000, CRC(15e3377a) SHA1(04a7fbfd58924359fae0ba76ed152f325f07beae) )
1452 ROM_LOAD( "tip_top_rom_13.u79", 0x02000, 0x2000, CRC(1d1321c8) SHA1(d12e156a24db105c5f941b7ef79f32181b616710) )
1453 ROM_LOAD( "tip_top_rom_11.u77", 0x04000, 0x2000, CRC(73e2709f) SHA1(14919facf08f6983c3a9baad031239a1b57c8202) )
1454 ROM_LOAD( "tip_top_rom_14.u104", 0x06000, 0x2000, CRC(bf9169fe) SHA1(303d68e38e9a47464f14dc5be6bff1be01b88bb6) )
1455 ROM_LOAD( "tip_top_rom_16.u106", 0x08000, 0x2000, CRC(cb6d5775) SHA1(b1f8ead6e6f8ad995baaeb7f8554d41ed2296fff) )
1456 ROM_LOAD( "tip_top_rom_15.u105", 0x0a000, 0x2000, CRC(7b15a7a4) SHA1(b1c05e60a1442e4dd56d197be8b768bcbf45e2d9) )
1457
1458 ROM_REGION( 0x4000, "tilemap_dat", 0 ) /* Located on 834-5167 PCB, Tip Tip-VIDEO */
1459 ROM_LOAD( "tip_top_rom_6.u57", 0x0000, 0x2000, CRC(d637f02b) SHA1(29127149924c5bfdeb9456d7df2a5a5d14098794) )
1460 ROM_LOAD( "tip_top_rom_7.u58", 0x2000, 0x2000, CRC(80927943) SHA1(4683520c241d209c6cabeaead9b363f046c30f70) )
1461
1462 ROM_REGION( 0x0200, "proms", 0 ) /* Located on 834-5166 PCB AKA Tip Top-CONTR */
1463 ROM_LOAD( "mr018.u68", 0x0000, 0x200, CRC(56b9f1ba) SHA1(32ae743087f7c2dfba6818df8e9d665d8d9a3ee7) ) /* dumped as TBP28S42, first 256 bytes match MR019 then 0xFF filled */
1464 ROM_END
1465
1466 ROM_START( tiptop ) /* 3 board stack */
1467 ROM_REGION( 0x8000, "maincpu", 0 ) /* Located on 834-5166 PCB AKA Tip Top-CONTR */
1468 ROM_LOAD( "tiptop1.u35", 0x0000, 0x2000, CRC(e19dc77b) SHA1(d3782dd55701e0f5cd426ad2771c1bd0264c366a) )
1469 ROM_LOAD( "tiptop2.u34", 0x2000, 0x2000, CRC(3fcd3b6e) SHA1(2898807ee36fca7fbc06616c9a070604beb782b9) )
1470 ROM_LOAD( "tiptop3.u33", 0x4000, 0x2000, CRC(1c94250b) SHA1(cb70a91d07b0a9c61a093f1b5d37f2e69d1345c1) )
1471 ROM_LOAD( "tiptop4.u32", 0x6000, 0x2000, CRC(577b501b) SHA1(5cad98a60a5241ba9467aa03fcd94c7490e6dbbb) )
1472
1473 ROM_REGION( 0x2000, "audiocpu", 0 ) /* Located on 834-5168 PCB AKA Tip Top-SOUND */
1474 ROM_LOAD( "tip_top_rom_17.u11", 0x0000, 0x2000, CRC(5024e673) SHA1(6f846146a4e29bcdfd5bd1bc5f1211d344cd5afa) )
1475
1476 ROM_REGION( 0x1000, "gfx_tx", 0 ) /* Located on 834-5166 PCB AKA Tip Top-CONTR */
1477 ROM_LOAD( "tip_top_rom_5.u76", 0x00000, 0x1000, CRC(7bf6ba2b) SHA1(3a2bd21b0e0e55cbd737c7b075492b5e8f944150) )
1478
1479 ROM_REGION( 0x6000, "gfx_bg", 0 ) /* Located on 834-5167 PCB, AKA Tip Tip-VIDEO */
1480 ROM_LOAD( "tip_top_rom_8.u93", 0x00000, 0x2000, CRC(db99a619) SHA1(499029197d26f9aea3ac15d66b5738ce7dea1f6c) )
1481 ROM_LOAD( "tip_top_rom_9.u94", 0x02000, 0x2000, CRC(93e2309e) SHA1(bd8a74332cac0cf85f319c1f35d04a4781c9d655) )
1482 ROM_LOAD( "tip_top_rom_10.u95", 0x04000, 0x2000, CRC(f27a9407) SHA1(d41c90c89ae28c92bf0c57927357d9b68ed7e0ef) )
1483
1484 ROM_REGION( 0xc000, "gfx_spr", 0 ) /* Located on 834-5167 PCB, AKA Tip Tip-VIDEO */
1485 ROM_LOAD( "tip_top_rom_12.u78", 0x00000, 0x2000, CRC(15e3377a) SHA1(04a7fbfd58924359fae0ba76ed152f325f07beae) )
1486 ROM_LOAD( "tip_top_rom_13.u79", 0x02000, 0x2000, CRC(1d1321c8) SHA1(d12e156a24db105c5f941b7ef79f32181b616710) )
1487 ROM_LOAD( "tip_top_rom_11.u77", 0x04000, 0x2000, CRC(73e2709f) SHA1(14919facf08f6983c3a9baad031239a1b57c8202) )
1488 ROM_LOAD( "tip_top_rom_14.u104", 0x06000, 0x2000, CRC(bf9169fe) SHA1(303d68e38e9a47464f14dc5be6bff1be01b88bb6) )
1489 ROM_LOAD( "tip_top_rom_16.u106", 0x08000, 0x2000, CRC(cb6d5775) SHA1(b1f8ead6e6f8ad995baaeb7f8554d41ed2296fff) )
1490 ROM_LOAD( "tip_top_rom_15.u105", 0x0a000, 0x2000, CRC(7b15a7a4) SHA1(b1c05e60a1442e4dd56d197be8b768bcbf45e2d9) )
1491
1492 ROM_REGION( 0x4000, "tilemap_dat", 0 ) /* Located on 834-5167 PCB, AKA Tip Tip-VIDEO */
1493 ROM_LOAD( "tip_top_rom_6.u57", 0x0000, 0x2000, CRC(d637f02b) SHA1(29127149924c5bfdeb9456d7df2a5a5d14098794) )
1494 ROM_LOAD( "tip_top_rom_7.u58", 0x2000, 0x2000, CRC(80927943) SHA1(4683520c241d209c6cabeaead9b363f046c30f70) )
1495
1496 ROM_REGION( 0x0200, "proms", 0 ) /* Located on 834-5166 PCB AKA Tip Top-CONTR */
1497 ROM_LOAD( "mr018.u68", 0x0000, 0x200, CRC(56b9f1ba) SHA1(32ae743087f7c2dfba6818df8e9d665d8d9a3ee7) ) /* dumped as TBP28S42, first 256 bytes match MR019 then 0xFF filled */
1498 ROM_END
1499
1500
1501 /*************************************
1502 *
1503 * Driver initialization
1504 *
1505 *************************************/
1506
1507 void zaxxon_state::init_zaxxonj()
1508 {
1509 /*
1510 the values vary, but the translation mask is always laid out like this:
1511
1512 0 1 2 3 4 5 6 7 8 9 a b c d e f
1513 0 A A B B A A B B C C D D C C D D
1514 1 A A B B A A B B C C D D C C D D
1515 2 E E F F E E F F G G H H G G H H
1516 3 E E F F E E F F G G H H G G H H
1517 4 A A B B A A B B C C D D C C D D
1518 5 A A B B A A B B C C D D C C D D
1519 6 E E F F E E F F G G H H G G H H
1520 7 E E F F E E F F G G H H G G H H
1521 8 H H G G H H G G F F E E F F E E
1522 9 H H G G H H G G F F E E F F E E
1523 a D D C C D D C C B B A A B B A A
1524 b D D C C D D C C B B A A B B A A
1525 c H H G G H H G G F F E E F F E E
1526 d H H G G H H G G F F E E F F E E
1527 e D D C C D D C C B B A A B B A A
1528 f D D C C D D C C B B A A B B A A
1529
1530 (e.g. 0xc0 is XORed with H)
1531 therefore in the following tables we only keep track of A, B, C, D, E, F, G and H.
1532 */
1533 static const uint8_t data_xortable[2][8] =
1534 {
1535 { 0x0a,0x0a,0x22,0x22,0xaa,0xaa,0x82,0x82 }, /* ...............0 */
1536 { 0xa0,0xaa,0x28,0x22,0xa0,0xaa,0x28,0x22 }, /* ...............1 */
1537 };
1538
1539 static const uint8_t opcode_xortable[8][8] =
1540 {
1541 { 0x8a,0x8a,0x02,0x02,0x8a,0x8a,0x02,0x02 }, /* .......0...0...0 */
1542 { 0x80,0x80,0x08,0x08,0xa8,0xa8,0x20,0x20 }, /* .......0...0...1 */
1543 { 0x8a,0x8a,0x02,0x02,0x8a,0x8a,0x02,0x02 }, /* .......0...1...0 */
1544 { 0x02,0x08,0x2a,0x20,0x20,0x2a,0x08,0x02 }, /* .......0...1...1 */
1545 { 0x88,0x0a,0x88,0x0a,0xaa,0x28,0xaa,0x28 }, /* .......1...0...0 */
1546 { 0x80,0x80,0x08,0x08,0xa8,0xa8,0x20,0x20 }, /* .......1...0...1 */
1547 { 0x88,0x0a,0x88,0x0a,0xaa,0x28,0xaa,0x28 }, /* .......1...1...0 */
1548 { 0x02,0x08,0x2a,0x20,0x20,0x2a,0x08,0x02 } /* .......1...1...1 */
1549 };
1550
1551 uint8_t *rom = memregion("maincpu")->base();
1552
1553 for (int A = 0x0000; A < 0x6000; A++)
1554 {
1555 uint8_t src = rom[A];
1556
1557 /* pick the translation table from bit 0 of the address */
1558 int i = A & 1;
1559
1560 /* pick the offset in the table from bits 1, 3 and 5 of the source data */
1561 int j = ((src >> 1) & 1) + (((src >> 3) & 1) << 1) + (((src >> 5) & 1) << 2);
1562 /* the bottom half of the translation table is the mirror image of the top */
1563 if (src & 0x80) j = 7 - j;
1564
1565 /* decode the ROM data */
1566 rom[A] = src ^ data_xortable[i][j];
1567
1568 /* now decode the opcodes */
1569 /* pick the translation table from bits 0, 4, and 8 of the address */
1570 i = ((A >> 0) & 1) + (((A >> 4) & 1) << 1) + (((A >> 8) & 1) << 2);
1571 m_decrypted_opcodes[A] = src ^ opcode_xortable[i][j];
1572 }
1573 }
1574
1575
1576
init_razmataz()1577 void zaxxon_state::init_razmataz()
1578 {
1579 address_space &pgmspace = m_maincpu->space(AS_PROGRAM);
1580
1581 /* additional input ports are wired */
1582 pgmspace.install_read_port(0xc004, 0xc004, 0x18f3, "SW04");
1583 pgmspace.install_read_port(0xc008, 0xc008, 0x18f3, "SW08");
1584 pgmspace.install_read_port(0xc00c, 0xc00c, 0x18f3, "SW0C");
1585
1586 /* unknown behavior expected here */
1587 pgmspace.install_read_handler(0xc80a, 0xc80a, read8smo_delegate(*this, FUNC(zaxxon_state::razmataz_counter_r)));
1588
1589 /* additional state saving */
1590 save_item(NAME(m_razmataz_dial_pos));
1591 save_item(NAME(m_razmataz_counter));
1592 }
1593
1594
1595
1596 /*************************************
1597 *
1598 * Game drivers
1599 *
1600 *************************************/
1601
1602 /* these games run on standard Zaxxon hardware */
1603 GAME( 1982, zaxxon, 0, zaxxon, zaxxon, zaxxon_state, empty_init, ROT90, "Sega", "Zaxxon (set 1, rev D)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1604 GAME( 1982, zaxxon2, zaxxon, zaxxon, zaxxon, zaxxon_state, empty_init, ROT90, "Sega", "Zaxxon (set 2, unknown rev)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1605 GAME( 1982, zaxxon3, zaxxon, zaxxon, zaxxon, zaxxon_state, empty_init, ROT90, "Sega", "Zaxxon (set 3, unknown rev)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1606 GAME( 1982, zaxxonj, zaxxon, szaxxon, zaxxon, zaxxon_state, init_zaxxonj, ROT90, "Sega", "Zaxxon (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1607 GAME( 1982, zaxxonb, zaxxon, szaxxon, zaxxon, zaxxon_state, init_zaxxonj, ROT90, "bootleg", "Jackson", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1608
1609 /* standard Zaxxon hardware but extra sound board plugged into 8255 PPI socket and encrypted cpu */
1610 GAME( 1982, szaxxon, 0, szaxxone, szaxxon, zaxxon_state, empty_init, ROT90, "Sega", "Super Zaxxon (315-5013)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1611
1612 /* standard Zaxxon hardware? but encrypted cpu */
1613 GAME( 1984, futspy, 0, futspye, futspy, zaxxon_state, empty_init, ROT90, "Sega", "Future Spy (315-5061)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1614
1615 /* these games run on modified Zaxxon hardware with no skewing, extra inputs, and a */
1616 /* G-80 Universal Sound Board */
1617 GAME( 1983, razmataz, 0, razmataze, razmataz, zaxxon_state, init_razmataz, ROT90, "Sega", "Razzmatazz", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1618 GAME( 1983, ixion, 0, ixion, ixion, zaxxon_state, empty_init, ROT270, "Sega", "Ixion (prototype)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE)
1619
1620 /* these games run on a slightly newer Zaxxon hardware with more ROM space and a */
1621 /* custom sprite DMA chip */
1622 GAME( 1983, congo, 0, congo, congo, zaxxon_state, empty_init, ROT90, "Sega", "Congo Bongo (Rev C, 2 board stack)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1623 GAME( 1983, congoa, congo, congo, congo, zaxxon_state, empty_init, ROT90, "Sega", "Congo Bongo (Rev C, 3 board stack)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1624 GAME( 1983, tiptop, congo, congo, congo, zaxxon_state, empty_init, ROT90, "Sega", "Tip Top (3 board stack)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1625