1 // license:BSD-3-Clause
2 // copyright-holders:Zsolt Vasvari
3 /***************************************************************************
4
5 Seibu Stinger/Wiz hardware
6
7 Driver by Zsolt Vasvari
8
9
10 XTAL: 18.432MHz??
11 2xZ80, 3xAY8910 (stinger/scion have 2xAY8910 + discrete sound)
12
13 These boards are similar to a Galaxian board in the way it handles scrolling
14 and sprites, but the similarities pretty much end there. The most notable
15 difference is that there are 2 independently scrollable playfields.
16
17
18 Wiz/Stinger/Scion/Kung-Fu Taikun memory map (preliminary)
19
20 Main CPU:
21
22 0000-BFFF ROM
23 C000-C7FF RAM
24 D000-D3FF Video RAM (Foreground)
25 D400-D7FF Color RAM (Foreground) (Wiz)
26 D800-D83F Attributes RAM (Foreground)
27 D840-D85F Sprite RAM 1
28 E000-E3FF Video RAM (Background)
29 E400-E7FF Color RAM (Background) (Wiz)
30 E800-E83F Attributes RAM (Background)
31 E840-E85F Sprite RAM 2
32
33 I/O read:
34 d400 Protection (Wiz)
35 f000 DIP SW#1
36 f008 DIP SW#2
37 f010 Input Port 1
38 f018 Input Port 2
39 f800 Watchdog
40
41 I/O write:
42 c800 Coin Counter A
43 c801 Coin Counter B
44 f000 Sprite bank select (Wiz)
45 f001 NMI enable
46 f002 \ Palette select
47 f003 /
48 f004 \ Character bank select
49 f005 /
50 f006 \ Flip screen
51 f007 /
52 f800 Sound Command write
53 f818 (?) Sound or Background color
54
55
56 Sound CPU:
57
58 0000-1FFF ROM
59 2000-23FF RAM
60
61 I/O read:
62 3000 Sound Command Read (Stinger/Scion)
63 7000 Sound Command Read (Wiz)
64
65 I/O write:
66 3000 NMI enable (Stinger/Scion)
67 4000 AY8910 Control Port #1 (Wiz)
68 4001 AY8910 Write Port #1 (Wiz)
69 5000 AY8910 Control Port #2
70 5001 AY8910 Write Port #2
71 6000 AY8910 Control Port #3
72 6001 AY8910 Write Port #3
73 7000 NMI enable (Wiz)
74
75
76 ****************************************************************************
77
78 TODO:
79
80 - Verify sprite colors in stinger/scion
81 - Global palette is wrong in stinger/scion compared to pcb, or could it be
82 due to gamma/hue?
83 - cpu/video/interrupt frequency measurements
84 - sprite-sprite priorities are not correct yet, eg:
85 * stinger popcorn enemies at beginning of the game should have higher priority
86 than that 'vacuum cleaner' enemy sphere,
87 * the cloud in kungfut should have higher prio than player char
88 - Improve stinger/scion discrete sound, shot sound should include noise
89 - stinger/scion audiocpu jumps to lalaland after receiving a soundlatch of 0x90,
90 basically resetting itself. I assume this is a game bug
91 - scion insert-coin sound sometimes repeats or is silent due to soundlatch timing,
92 this could be a game bug as well
93 - Background noise in scion (but not scionc). Note that the sound program is
94 almost identical, except for three patches affecting noise period, noise
95 channel C enable and channel C volume. So it looks just like a bug in the
96 original (weird), or some strange form of protection.
97 - Is wiz protection emulation complete?
98 - Wiz: the supplier of the screenshot says there still may be some wrong
99 colors. Just before the break on Level 2 there is a crescent moon,
100 the background should probably be black.
101
102
103 ****************************************************************************
104
105 2002-Nov-30 Kung-Fu Taikun added
106 2xZ80 , 3x AY8910
107 (DSW 1 , bit 2 )
108 "THE MICROPHONE IS OUT OF CONTROL, SO THIS GAME DEPENDS ON THE BUTTONS"
109 There's no additional hw or connectors on the pcb
110 (except for small (bit 0 - ON, bit 1 - ON) DSW near AY chips )
111 Tomasz Slanina
112
113 Notes:
114 The microphone is for summoning clouds. The game falls back to use
115 buttons if it's not functioning.
116
117
118 ****************************************************************************
119
120 Stephh's notes (based on the games Z80 code and some tests) :
121
122 1a) 'stinger'
123
124 - Here are some infos about the "Debug Mode" Dip Switch :
125
126 * when it is set to OFF, the value which was previously written
127 to 0xc500 is NOT erased, but the only value written to it is 0x00.
128 * when it is set to ON, 0x00 is ALWAYS written to 0xc500.
129 (check code at 0x0ef6)
130
131 As you can see, there is no VISIBLE difference ...
132
133 This is because it's in fact a leftover from 'stinger2' (the code for the
134 "TEST PLAY" still exists !)
135
136
137 1b) 'stinger2'
138
139 - Here are some infos about the "Debug Mode" Dip Switch :
140
141 * when it it set to OFF, the value which was previously written
142 to 0xc500 is NOT erased, but the only value written to it is 0x00.
143 * when it is set to ON, 0x01 is ALWAYS written to 0xc500.
144 (check code at 0x0ef6)
145
146 - When 0xc500 = 0x01, you enter what the game calls "TEST PLAY".
147
148 - "TEST PLAY" features :
149
150 * automatically sets credits to 1
151 * impossible to insert a coin
152 * only one player game is available
153 * player 1 has infinite lives (always set to 5)
154
155 - "Coin B" settings also affect the "difficulty" and the "bongo time" :
156 compare the code from 0x0e69 to 0x0e9c in the 2 sets, and you'll notice
157 that it is the SAME ! That's why I've set the default coinage to be
158 the same as the "difficulty" and "bongo time" settings in 'stinger'.
159
160
161 2) 'scion*'
162
163 - Dip Switches 1-6 to 1-8 must remain OFF because of code at 0x28bf :
164 there is NO "and $03" instruction, so it goes over the "coin B" table,
165 which means that you have really weird coinage if you set them ON !
166
167
168 3) 'kungfut'
169
170 - When "Microphone" Dip Switch is OFF, press BUTTON3 (bit 4 of IN1 -
171 shared by the 2 players) to make a little cloud appear so players
172 can climb it to go up.
173 - "20000 60000" setting for the "Bonus Life" Dip Switch is NEVER used
174 due to the "bit 0,a" instruction at 0x94fd !
175
176
177 ***************************************************************************/
178
179 #include "emu.h"
180 #include "includes/wiz.h"
181
182 #include "cpu/z80/z80.h"
183 #include "machine/gen_latch.h"
184 #include "machine/watchdog.h"
185 #include "sound/ay8910.h"
186 #include "screen.h"
187 #include "speaker.h"
188
189
190 /***************************************************************************
191
192 Stinger/Scion discrete sound
193
194 ***************************************************************************/
195
196 #define STINGER_SHOT_EN1 NODE_01
197 #define STINGER_SHOT_EN2 NODE_02
198 #define STINGER_BOOM_EN1 NODE_03
199 #define STINGER_BOOM_EN2 NODE_04
200
201 // cut-and-pasted from Asteroid
202 static const discrete_lfsr_desc stinger_lfsr =
203 {
204 DISC_CLK_IS_FREQ,
205 16, /* Bit Length */
206 0, /* Reset Value */
207 6, /* Use Bit 6 as XOR input 0 */
208 14, /* Use Bit 14 as XOR input 1 */
209 DISC_LFSR_XNOR, /* Feedback stage1 is XNOR */
210 DISC_LFSR_OR, /* Feedback stage2 is just stage 1 output OR with external feed */
211 DISC_LFSR_REPLACE, /* Feedback stage3 replaces the shifted register contents */
212 0x000001, /* Everything is shifted into the first bit only */
213 0, /* Output is already inverted by XNOR */
214 16 /* Output bit is feedback bit */
215 };
216
217 static DISCRETE_SOUND_START(stinger_discrete)
218
219 #define STINGER_SHOT_OUT NODE_90
220 #define STINGER_BOOM_OUT NODE_91
221 #define STINGER_FINAL_MIX NODE_99
222
223 // triggers are interleaved to give each circuit sufficient time to reset
DISCRETE_INPUT_LOGIC(STINGER_SHOT_EN1)224 DISCRETE_INPUT_LOGIC (STINGER_SHOT_EN1) // even-inteval shots
225 DISCRETE_INPUT_LOGIC (STINGER_SHOT_EN2) // odd-inteval shots
226 DISCRETE_INPUT_LOGIC (STINGER_BOOM_EN1) // even-inteval explosions
227 DISCRETE_INPUT_LOGIC (STINGER_BOOM_EN2) // odd-inteval explosions
228
229 //---------------------------------------
230 // Sample Shot Sound Circuit
231
232 #define SHOT_IN1 NODE_11
233 #define SHOT_IN2 NODE_12
234 #define SHOT_MOD NODE_13
235 #define SHOT_FRQ NODE_14
236 #define SHOT_AMP NODE_15
237
238 DISCRETE_RCDISC (SHOT_IN1, STINGER_SHOT_EN1, 1.0, 0.2, 1.0)
239 DISCRETE_RCDISC (SHOT_IN2, STINGER_SHOT_EN2, 1.0, 0.2, 1.0)
240 DISCRETE_SWITCH (SHOT_MOD, 1, STINGER_SHOT_EN1, SHOT_IN2, SHOT_IN1)
241 DISCRETE_MULTIPLY (SHOT_FRQ, SHOT_MOD, 2000)
242 DISCRETE_MULTIPLY (SHOT_AMP, SHOT_MOD, 800)
243 DISCRETE_SQUAREWAVE (STINGER_SHOT_OUT, 1, SHOT_FRQ, SHOT_AMP, 50, 0, 0)
244
245 //---------------------------------------
246 // Sample Explosion Sound Circuit
247
248 #define BOOM_IN1 NODE_21
249 #define BOOM_IN2 NODE_22
250 #define BOOM_MOD NODE_23
251 #define BOOM_AMP NODE_24
252
253 DISCRETE_RCDISC (BOOM_IN1, STINGER_BOOM_EN1, 1.0, 0.25, 1.0)
254 DISCRETE_RCDISC (BOOM_IN2, STINGER_BOOM_EN2, 1.0, 0.25, 1.0)
255 DISCRETE_SWITCH (BOOM_MOD, 1, STINGER_BOOM_EN1, BOOM_IN2, BOOM_IN1)
256 DISCRETE_MULTIPLY (BOOM_AMP, BOOM_MOD, 1500)
257 DISCRETE_LFSR_NOISE (STINGER_BOOM_OUT, 1, 1, 1800, BOOM_AMP, 0, 0, &stinger_lfsr)
258
259 //---------------------------------------
260
261 DISCRETE_ADDER2 (STINGER_FINAL_MIX, 1, STINGER_SHOT_OUT, STINGER_BOOM_OUT)
262
263 DISCRETE_OUTPUT (STINGER_FINAL_MIX, 5)
264
265 DISCRETE_SOUND_END
266
267 void wiz_state::stinger_explosion_w(uint8_t data)
268 {
269 // explosion sound trigger(analog?)
270 m_discrete->write(STINGER_BOOM_EN1, m_dsc1);
271 m_discrete->write(STINGER_BOOM_EN2, m_dsc1^=1);
272 }
273
stinger_shot_w(uint8_t data)274 void wiz_state::stinger_shot_w(uint8_t data)
275 {
276 // player shot sound trigger(analog?)
277 m_discrete->write(STINGER_SHOT_EN1, m_dsc0);
278 m_discrete->write(STINGER_SHOT_EN2, m_dsc0^=1);
279 }
280
281
282
283 /***************************************************************************
284
285 I/O, Memory maps
286
287 ***************************************************************************/
288
wiz_protection_r()289 uint8_t wiz_state::wiz_protection_r()
290 {
291 switch (m_colorram2[0])
292 {
293 case 0x35: return 0x25; /* FIX: sudden player death + free play afterwards */
294 case 0x8f: return 0x1f; /* FIX: early boss appearance with corrupt graphics */
295 case 0xa0: return 0x00; /* FIX: executing junk code after defeating the boss */
296 }
297
298 return m_colorram2[0];
299 }
300
wiz_coin_counter_w(offs_t offset,uint8_t data)301 void wiz_state::wiz_coin_counter_w(offs_t offset, uint8_t data)
302 {
303 machine().bookkeeping().coin_counter_w(offset, data & 1);
304 }
305
wiz_main_nmi_mask_w(uint8_t data)306 void wiz_state::wiz_main_nmi_mask_w(uint8_t data)
307 {
308 m_main_nmi_mask = data & 1;
309 }
310
311
kungfut_main_map(address_map & map)312 void wiz_state::kungfut_main_map(address_map &map)
313 {
314 map(0x0000, 0xbfff).rom();
315 map(0xc000, 0xc7ff).ram();
316 map(0xd000, 0xd3ff).ram().share("videoram2");
317 map(0xd400, 0xd7ff).ram().share("colorram2");
318 map(0xd800, 0xd83f).ram().share("attrram2");
319 map(0xd840, 0xd85f).ram().share("spriteram2");
320 map(0xe000, 0xe3ff).ram().share("videoram");
321 map(0xe400, 0xe7ff).ram().share("colorram");
322 map(0xe800, 0xe83f).ram().share("attrram");
323 map(0xe840, 0xe85f).ram().share("spriteram");
324 map(0xf000, 0xf000).portr("DSW0");
325 map(0xf001, 0xf001).w(FUNC(wiz_state::wiz_main_nmi_mask_w));
326 map(0xf002, 0xf003).w(FUNC(wiz_state::wiz_palette_bank_w));
327 map(0xf004, 0xf005).w(FUNC(wiz_state::wiz_char_bank_w));
328 map(0xf006, 0xf006).w(FUNC(wiz_state::wiz_flipx_w));
329 map(0xf007, 0xf007).w(FUNC(wiz_state::wiz_flipy_w));
330 map(0xf008, 0xf008).portr("DSW1");
331 map(0xf010, 0xf010).portr("IN0");
332 map(0xf018, 0xf018).portr("IN1");
333 map(0xf800, 0xf800).w("soundlatch", FUNC(generic_latch_8_device::write));
334 map(0xf818, 0xf818).w(FUNC(wiz_state::wiz_bgcolor_w));
335 }
336
decrypted_opcodes_map(address_map & map)337 void wiz_state::decrypted_opcodes_map(address_map &map)
338 {
339 map(0x0000, 0xbfff).rom().share("decrypted_opcodes");
340 }
341
wiz_main_map(address_map & map)342 void wiz_state::wiz_main_map(address_map &map)
343 {
344 kungfut_main_map(map);
345 map(0xc800, 0xc801).w(FUNC(wiz_state::wiz_coin_counter_w));
346 map(0xd400, 0xd400).r(FUNC(wiz_state::wiz_protection_r));
347 map(0xf000, 0xf000).w(FUNC(wiz_state::wiz_sprite_bank_w));
348 }
349
stinger_main_map(address_map & map)350 void wiz_state::stinger_main_map(address_map &map)
351 {
352 kungfut_main_map(map);
353 // map(0xf008, 0xf00f).nopw(); // ?
354 map(0xf800, 0xf800).r("watchdog", FUNC(watchdog_timer_device::reset_r));
355 map(0xf808, 0xf808).w(FUNC(wiz_state::stinger_explosion_w));
356 map(0xf80a, 0xf80a).w(FUNC(wiz_state::stinger_shot_w));
357 }
358
359
360 /**************************************************************************/
361
wiz_sound_nmi_mask_w(uint8_t data)362 void wiz_state::wiz_sound_nmi_mask_w(uint8_t data)
363 {
364 m_sound_nmi_mask = data & 1;
365 }
366
367
kungfut_sound_map(address_map & map)368 void wiz_state::kungfut_sound_map(address_map &map)
369 {
370 map.global_mask(0x7fff);
371 map(0x0000, 0x1fff).rom();
372 map(0x2000, 0x23ff).ram();
373 map(0x4000, 0x4001).w("8910.3", FUNC(ay8910_device::address_data_w));
374 map(0x5000, 0x5001).w("8910.1", FUNC(ay8910_device::address_data_w));
375 map(0x6000, 0x6001).w("8910.2", FUNC(ay8910_device::address_data_w));
376 map(0x7000, 0x7000).r("soundlatch", FUNC(generic_latch_8_device::read)).w(FUNC(wiz_state::wiz_sound_nmi_mask_w));
377 }
378
stinger_sound_map(address_map & map)379 void wiz_state::stinger_sound_map(address_map &map)
380 {
381 map.global_mask(0x7fff);
382 map(0x0000, 0x1fff).rom();
383 map(0x2000, 0x23ff).ram();
384 map(0x3000, 0x3000).r("soundlatch", FUNC(generic_latch_8_device::read)).w(FUNC(wiz_state::wiz_sound_nmi_mask_w));
385 map(0x4000, 0x4000).nopw(); // ?
386 map(0x5000, 0x5001).w("8910.1", FUNC(ay8910_device::address_data_w));
387 map(0x6000, 0x6001).w("8910.2", FUNC(ay8910_device::address_data_w));
388 map(0x5000, 0x7fff).nopr(); // prevent error.log spam, cpu jumps here by accident
389 }
390
391
392
393 /***************************************************************************
394
395 Inputs
396
397 ***************************************************************************/
398
399 static INPUT_PORTS_START( stinger )
400 PORT_START("IN0")
401 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
402 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL
403 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 )
404 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 )
405 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START1 )
406 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN2 )
407 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON1 )
408 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
409
410 PORT_START("IN1")
411 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
412 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
413 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL
414 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL
415 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
416 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
417 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL
418 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL
419
420 PORT_START("DSW0")
421 PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_A ) )
422 PORT_DIPSETTING( 0x01, DEF_STR( 4C_1C ) )
423 PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) )
424 PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) )
425 PORT_DIPSETTING( 0x00, DEF_STR( 3C_2C ) )
426 PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) )
427 PORT_DIPSETTING( 0x03, DEF_STR( 2C_3C ) )
428 PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) )
429 PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) )
430 PORT_DIPNAME( 0x18, 0x08, DEF_STR( Lives ) )
431 PORT_DIPSETTING( 0x00, "2" )
432 PORT_DIPSETTING( 0x08, "3" )
433 PORT_DIPSETTING( 0x10, "4" )
434 PORT_DIPSETTING( 0x18, "5" )
435 PORT_DIPNAME( 0xe0, 0xe0, DEF_STR( Bonus_Life ) )
436 PORT_DIPSETTING( 0xe0, "20000 50000" )
437 PORT_DIPSETTING( 0xc0, "20000 60000" )
438 PORT_DIPSETTING( 0xa0, "20000 70000" )
439 PORT_DIPSETTING( 0x80, "20000 80000" )
440 PORT_DIPSETTING( 0x60, "20000 90000" )
441 PORT_DIPSETTING( 0x40, "30000 80000" )
442 PORT_DIPSETTING( 0x20, "30000 90000" )
443 PORT_DIPSETTING( 0x00, DEF_STR( None ) )
444
445 PORT_START("DSW1")
446 PORT_DIPNAME( 0x01, 0x00, "Debug Mode" ) /* See notes */
447 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
448 PORT_DIPSETTING( 0x01, DEF_STR( On ) )
449 PORT_DIPNAME( 0x0e, 0x0e, DEF_STR( Coin_B ) )
450 PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) )
451 PORT_DIPSETTING( 0x08, DEF_STR( 4C_1C ) )
452 PORT_DIPSETTING( 0x0c, DEF_STR( 3C_1C ) )
453 PORT_DIPSETTING( 0x0a, DEF_STR( 2C_1C ) )
454 PORT_DIPSETTING( 0x04, DEF_STR( 3C_2C ) )
455 PORT_DIPSETTING( 0x0e, DEF_STR( 1C_1C ) )
456 PORT_DIPSETTING( 0x02, DEF_STR( 2C_3C ) )
457 PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) )
458 PORT_DIPNAME( 0x30, 0x20, "Bongo Time" )
459 PORT_DIPSETTING( 0x30, "Long" )
460 PORT_DIPSETTING( 0x20, DEF_STR( Medium ) )
461 PORT_DIPSETTING( 0x10, "Short" )
462 PORT_DIPSETTING( 0x00, "Shortest" )
463 PORT_DIPNAME( 0x40, 0x00, DEF_STR( Difficulty ) )
464 PORT_DIPSETTING( 0x00, DEF_STR( Normal ) )
465 PORT_DIPSETTING( 0x40, DEF_STR( Hard ) )
466 PORT_DIPNAME( 0x80, 0x80, DEF_STR( Cabinet ) )
467 PORT_DIPSETTING( 0x80, DEF_STR( Upright ) )
468 PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
469 INPUT_PORTS_END
470
471 static INPUT_PORTS_START( stinger2 )
472 PORT_INCLUDE( stinger )
473
474 PORT_MODIFY("DSW1")
475 PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unused ) )
476 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
477 PORT_DIPSETTING( 0x02, DEF_STR( On ) )
478 PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unused ) )
479 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
480 PORT_DIPSETTING( 0x04, DEF_STR( On ) )
481 PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unused ) )
482 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
483 PORT_DIPSETTING( 0x08, DEF_STR( On ) )
484 PORT_DIPNAME( 0x70, 0x20, DEF_STR( Coin_B ) ) /* See notes */
485 PORT_DIPSETTING( 0x70, DEF_STR( 1C_1C ) )
486 PORT_DIPSETTING( 0x60, DEF_STR( 1C_2C ) )
487 PORT_DIPSETTING( 0x50, DEF_STR( 1C_3C ) )
488 PORT_DIPSETTING( 0x40, DEF_STR( 1C_4C ) )
489 PORT_DIPSETTING( 0x30, DEF_STR( 1C_5C ) )
490 PORT_DIPSETTING( 0x20, DEF_STR( 1C_6C ) )
491 PORT_DIPSETTING( 0x10, DEF_STR( 1C_7C ) )
492 PORT_DIPSETTING( 0x00, DEF_STR( 1C_8C ) )
493 INPUT_PORTS_END
494
495 static INPUT_PORTS_START( scion )
496 PORT_INCLUDE( stinger )
497
498 PORT_MODIFY("IN1")
499 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL
500 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL
501 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL
502 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL
503
504 PORT_MODIFY("DSW0")
505 PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) )
506 PORT_DIPSETTING( 0x01, DEF_STR( Upright ) )
507 PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
508 PORT_DIPNAME( 0x02, 0x00, DEF_STR( Difficulty ) )
509 PORT_DIPSETTING( 0x00, DEF_STR( Easy ) )
510 PORT_DIPSETTING( 0x02, DEF_STR( Hard ) )
511 PORT_DIPNAME( 0x0c, 0x04, DEF_STR( Lives ) )
512 PORT_DIPSETTING( 0x00, "2" )
513 PORT_DIPSETTING( 0x04, "3" )
514 PORT_DIPSETTING( 0x08, "4" )
515 PORT_DIPSETTING( 0x0c, "5" )
516 PORT_DIPNAME( 0x30, 0x00, DEF_STR( Bonus_Life ) )
517 PORT_DIPSETTING( 0x00, "20000 40000" )
518 PORT_DIPSETTING( 0x20, "20000 60000" )
519 PORT_DIPSETTING( 0x10, "20000 80000" )
520 PORT_DIPSETTING( 0x30, "30000 90000" )
521 PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unused ) )
522 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
523 PORT_DIPSETTING( 0x40, DEF_STR( On ) )
524 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unused ) )
525 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
526 PORT_DIPSETTING( 0x80, DEF_STR( On ) )
527
528 PORT_MODIFY("DSW1")
529 PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coin_A ) )
530 PORT_DIPSETTING( 0x07, DEF_STR( 5C_1C ) )
531 PORT_DIPSETTING( 0x03, DEF_STR( 4C_1C ) )
532 PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) )
533 PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) )
534 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
535 PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ) )
536 PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) )
537 PORT_DIPSETTING( 0x06, DEF_STR( 1C_5C ) )
538 PORT_DIPNAME( 0x18, 0x00, DEF_STR( Coin_B ) )
539 PORT_DIPSETTING( 0x18, DEF_STR( 3C_1C ) )
540 PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) )
541 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
542 PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) )
543 PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unused ) )
544 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
545 // PORT_DIPSETTING( 0x20, DEF_STR( On ) ) /* See notes */
546 PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unused ) )
547 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
548 // PORT_DIPSETTING( 0x40, DEF_STR( On ) ) /* See notes */
549 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unused ) )
550 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
551 // PORT_DIPSETTING( 0x80, DEF_STR( On ) ) /* See notes */
552 INPUT_PORTS_END
553
554 static INPUT_PORTS_START( kungfut )
555 PORT_START("IN0")
556 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
557 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
558 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 )
559 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 )
560 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START1 )
561 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN2 )
562 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON1 )
563 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
564
565 PORT_START("IN1")
566 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY
567 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY
568 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2)
569 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
570 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME ("Microphone Input") // call up cloud
571 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
572 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2)
573 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
574
575 PORT_START("DSW0")
576 PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coin_A ) )
577 PORT_DIPSETTING( 0x07, DEF_STR( 5C_1C ) )
578 PORT_DIPSETTING( 0x03, DEF_STR( 4C_1C ) )
579 PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) )
580 PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) )
581 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
582 PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ) )
583 PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) )
584 PORT_DIPSETTING( 0x06, DEF_STR( 1C_5C ) )
585 PORT_DIPNAME( 0x18, 0x00, DEF_STR( Coin_B ) )
586 PORT_DIPSETTING( 0x18, DEF_STR( 3C_1C ) )
587 PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) )
588 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
589 PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) )
590 PORT_DIPNAME( 0x20, 0x20, "2 Players Game" )
591 PORT_DIPSETTING( 0x00, "1 Credit" )
592 PORT_DIPSETTING( 0x20, "2 Credits" )
593 PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unused ) )
594 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
595 PORT_DIPSETTING( 0x40, DEF_STR( On ) )
596 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unused ) )
597 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
598 PORT_DIPSETTING( 0x80, DEF_STR( On ) )
599
600 PORT_START("DSW1")
601 PORT_DIPNAME( 0x01, 0x00, DEF_STR( Difficulty ) )
602 PORT_DIPSETTING( 0x00, DEF_STR( Easy ) )
603 PORT_DIPSETTING( 0x01, DEF_STR( Hard ) )
604 PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unused ) )
605 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
606 PORT_DIPSETTING( 0x02, DEF_STR( On ) )
607 PORT_DIPNAME( 0x04, 0x04, "Microphone" ) /* See notes */
608 PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
609 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
610 PORT_DIPNAME( 0x18, 0x08, DEF_STR( Lives ) )
611 PORT_DIPSETTING( 0x00, "2" )
612 PORT_DIPSETTING( 0x08, "3" )
613 PORT_DIPSETTING( 0x10, "4" )
614 PORT_DIPSETTING( 0x18, "5" )
615 PORT_DIPNAME( 0x60, 0x00, DEF_STR( Bonus_Life ) )
616 PORT_DIPSETTING( 0x00, "20000 40000" )
617 // PORT_DIPSETTING( 0x20, "20000 40000" ) // duplicated setting
618 PORT_DIPSETTING( 0x10, "20000 80000" )
619 PORT_DIPSETTING( 0x30, "30000 90000" )
620 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unused ) )
621 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
622 PORT_DIPSETTING( 0x80, DEF_STR( On ) )
623 INPUT_PORTS_END
624
625 static INPUT_PORTS_START( wiz )
626 PORT_START("IN0")
627 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
628 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL // Shoot
629 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) // Shoot
630 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 )
631 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START1 )
632 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN2 )
633 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) // Magic
634 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL // Magic
635
636 PORT_START("IN1")
637 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
638 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
639 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
640 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
641 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL
642 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL
643 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL
644 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL
645
646 PORT_START("DSW0")
647 PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coin_A ) )
648 PORT_DIPSETTING( 0x07, DEF_STR( 5C_1C ) )
649 PORT_DIPSETTING( 0x03, DEF_STR( 4C_1C ) )
650 PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) )
651 PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) )
652 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
653 PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ) )
654 PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) )
655 PORT_DIPSETTING( 0x06, DEF_STR( 1C_5C ) )
656 PORT_DIPNAME( 0x18, 0x00, DEF_STR( Coin_B ) )
657 PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) )
658 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
659 PORT_DIPSETTING( 0x18, DEF_STR( 2C_3C ) )
660 PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) )
661 PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unused ) )
662 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
663 PORT_DIPSETTING( 0x20, DEF_STR( On ) )
664 PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unused ) )
665 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
666 PORT_DIPSETTING( 0x40, DEF_STR( On ) )
667 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Free_Play ) )
668 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
669 PORT_DIPSETTING( 0x80, DEF_STR( On ) )
670
671 PORT_START("DSW1")
672 PORT_DIPNAME( 0x01, 0x00, DEF_STR( Cabinet ) )
673 PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
674 PORT_DIPSETTING( 0x01, DEF_STR( Cocktail ) )
675 PORT_DIPNAME( 0x06, 0x00, DEF_STR( Difficulty ) )
676 PORT_DIPSETTING( 0x00, DEF_STR( Easy ) )
677 PORT_DIPSETTING( 0x02, DEF_STR( Normal ) )
678 PORT_DIPSETTING( 0x04, DEF_STR( Hard ) )
679 PORT_DIPSETTING( 0x06, DEF_STR( Hardest ) )
680 PORT_DIPNAME( 0x18, 0x10, DEF_STR( Lives ) )
681 PORT_DIPSETTING( 0x08, "1" )
682 PORT_DIPSETTING( 0x10, "3" )
683 PORT_DIPSETTING( 0x18, "5" )
684 PORT_DIPSETTING( 0x00, "255 (Cheat)")
685 PORT_DIPNAME( 0x60, 0x00, DEF_STR( Bonus_Life ) )
686 PORT_DIPSETTING( 0x00, "10000 30000" )
687 PORT_DIPSETTING( 0x20, "20000 40000" )
688 PORT_DIPSETTING( 0x40, "30000 60000" )
689 PORT_DIPSETTING( 0x60, "40000 80000" )
690 PORT_SERVICE( 0x80, IP_ACTIVE_HIGH )
691 INPUT_PORTS_END
692
693
694
695 /***************************************************************************
696
697 Machine configs, misc. interface
698
699 ***************************************************************************/
700
701 static const gfx_layout charlayout =
702 {
703 8,8, /* 8*8 characters */
704 256, /* 256 characters */
705 3, /* 3 bits per pixel */
706 { 0x4000*8, 0x2000*8, 0 }, /* the three bitplanes are separated */
707 { 0, 1, 2, 3, 4, 5, 6, 7 },
708 { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
709 8*8 /* every char takes 8 consecutive bytes */
710 };
711
712 static const gfx_layout spritelayout =
713 {
714 16,16, /* 16*16 sprites */
715 256, /* 256 sprites */
716 3, /* 3 bits per pixel */
717 { 0x4000*8, 0x2000*8, 0 }, /* the three bitplanes are separated */
718 { 0, 1, 2, 3, 4, 5, 6, 7,
719 8*8+0, 8*8+1, 8*8+2, 8*8+3, 8*8+4, 8*8+5, 8*8+6, 8*8+7 },
720 { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
721 16*8, 17*8, 18*8, 19*8, 20*8, 21*8, 22*8, 23*8 },
722 32*8 /* every sprite takes 32 consecutive bytes */
723 };
724
725
726 static GFXDECODE_START( gfx_wiz )
727 GFXDECODE_ENTRY( "gfx1", 0x0000, charlayout, 0, 32 )
728 GFXDECODE_ENTRY( "gfx1", 0x0800, charlayout, 0, 32 )
729 GFXDECODE_ENTRY( "gfx2", 0x6000, charlayout, 0, 32 )
730 GFXDECODE_ENTRY( "gfx2", 0x0000, charlayout, 0, 32 )
731 GFXDECODE_ENTRY( "gfx2", 0x0800, charlayout, 0, 32 )
732 GFXDECODE_ENTRY( "gfx2", 0x6800, charlayout, 0, 32 )
733 GFXDECODE_ENTRY( "gfx1", 0x0000, spritelayout, 0, 32 )
734 GFXDECODE_ENTRY( "gfx2", 0x0000, spritelayout, 0, 32 )
735 GFXDECODE_ENTRY( "gfx2", 0x6000, spritelayout, 0, 32 )
736 GFXDECODE_END
737
GFXDECODE_START(gfx_stinger)738 static GFXDECODE_START( gfx_stinger )
739 GFXDECODE_ENTRY( "gfx1", 0x0000, charlayout, 0, 32 )
740 GFXDECODE_ENTRY( "gfx1", 0x0800, charlayout, 0, 32 )
741 GFXDECODE_ENTRY( "gfx2", 0x0000, charlayout, 0, 32 )
742 GFXDECODE_ENTRY( "gfx2", 0x0800, charlayout, 0, 32 )
743 GFXDECODE_ENTRY( "gfx1", 0x0000, spritelayout, 0, 32 )
744 GFXDECODE_ENTRY( "gfx2", 0x0000, spritelayout, 0, 32 )
745 GFXDECODE_END
746
747 /**************************************************************************/
748
749 void wiz_state::machine_reset()
750 {
751 m_main_nmi_mask = 0;
752 m_sound_nmi_mask = 0;
753 m_dsc0 = m_dsc1 = 1;
754
755 m_sprite_bank = 0;
756 m_charbank[0] = m_charbank[1] = 0;
757 m_palbank[0] = m_palbank[1] = 0;
758 m_flipx = 0;
759 m_flipy = 0;
760 m_bgcolor = 0;
761 }
762
machine_start()763 void wiz_state::machine_start()
764 {
765 // register for savestates
766 save_item(NAME(m_main_nmi_mask));
767 save_item(NAME(m_sound_nmi_mask));
768 save_item(NAME(m_dsc0));
769 save_item(NAME(m_dsc1));
770
771 save_item(NAME(m_sprite_bank));
772 save_item(NAME(m_charbank));
773 save_item(NAME(m_palbank));
774 save_item(NAME(m_flipx));
775 save_item(NAME(m_flipy));
776 save_item(NAME(m_bgcolor));
777 }
778
779 /**************************************************************************/
780
INTERRUPT_GEN_MEMBER(wiz_state::wiz_vblank_interrupt)781 INTERRUPT_GEN_MEMBER(wiz_state::wiz_vblank_interrupt)
782 {
783 if (m_main_nmi_mask & 1)
784 device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero);
785 }
786
INTERRUPT_GEN_MEMBER(wiz_state::wiz_sound_interrupt)787 INTERRUPT_GEN_MEMBER(wiz_state::wiz_sound_interrupt)
788 {
789 if (m_sound_nmi_mask & 1)
790 device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero);
791 }
792
kungfut(machine_config & config)793 void wiz_state::kungfut(machine_config &config)
794 {
795 /* basic machine hardware */
796 Z80(config, m_maincpu, 18432000/6); /* 3.072 MHz ??? */
797 m_maincpu->set_addrmap(AS_PROGRAM, &wiz_state::kungfut_main_map);
798 m_maincpu->set_vblank_int("screen", FUNC(wiz_state::wiz_vblank_interrupt));
799
800 Z80(config, m_audiocpu, 18432000/6); /* 3.072 MHz ??? */
801 m_audiocpu->set_addrmap(AS_PROGRAM, &wiz_state::kungfut_sound_map);
802 m_audiocpu->set_periodic_int(FUNC(wiz_state::wiz_sound_interrupt), attotime::from_hz(4*60)); /* ??? */
803
804 /* video hardware */
805 screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
806 screen.set_refresh_hz(60);
807 screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */ );
808 screen.set_size(32*8, 32*8);
809 screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
810 screen.set_screen_update(FUNC(wiz_state::screen_update_kungfut));
811 screen.set_palette(m_palette);
812
813 GFXDECODE(config, m_gfxdecode, m_palette, gfx_stinger);
814 PALETTE(config, m_palette, FUNC(wiz_state::wiz_palette), 256);
815
816 /* sound hardware */
817 SPEAKER(config, "mono").front_center();
818
819 GENERIC_LATCH_8(config, "soundlatch");
820
821 AY8910(config, "8910.1", 18432000/12).add_route(ALL_OUTPUTS, "mono", 0.10);
822
823 AY8910(config, "8910.2", 18432000/12).add_route(ALL_OUTPUTS, "mono", 0.10);
824
825 AY8910(config, "8910.3", 18432000/12).add_route(ALL_OUTPUTS, "mono", 0.10);
826 }
827
wiz(machine_config & config)828 void wiz_state::wiz(machine_config &config)
829 {
830 kungfut(config);
831
832 /* basic machine hardware */
833 m_maincpu->set_addrmap(AS_PROGRAM, &wiz_state::wiz_main_map);
834
835 /* video hardware */
836 m_gfxdecode->set_info(gfx_wiz);
837 subdevice<screen_device>("screen")->set_screen_update(FUNC(wiz_state::screen_update_wiz));
838 }
839
840
stinger(machine_config & config)841 void wiz_state::stinger(machine_config &config)
842 {
843 kungfut(config);
844
845 /* basic machine hardware */
846 m_maincpu->set_addrmap(AS_PROGRAM, &wiz_state::stinger_main_map);
847 m_maincpu->set_addrmap(AS_OPCODES, &wiz_state::decrypted_opcodes_map);
848
849 /* basic machine hardware */
850 m_audiocpu->set_addrmap(AS_PROGRAM, &wiz_state::stinger_sound_map);
851
852 WATCHDOG_TIMER(config, "watchdog");
853
854 /* video hardware */
855 subdevice<screen_device>("screen")->set_screen_update(FUNC(wiz_state::screen_update_stinger));
856
857 /* sound hardware */
858 config.device_remove("8910.3");
859
860 DISCRETE(config, m_discrete, stinger_discrete).add_route(ALL_OUTPUTS, "mono", 0.5);
861 }
862
scion(machine_config & config)863 void wiz_state::scion(machine_config &config)
864 {
865 stinger(config);
866
867 Z80(config.replace(), m_maincpu, 18432000/6); /* 3.072 MHz ??? */
868 m_maincpu->set_addrmap(AS_PROGRAM, &wiz_state::stinger_main_map);
869 m_maincpu->set_vblank_int("screen", FUNC(wiz_state::wiz_vblank_interrupt));
870
871 /* video hardware */
872 subdevice<screen_device>("screen")->set_visarea(2*8, 32*8-1, 2*8, 30*8-1);
873 }
874
875
876
877 /***************************************************************************
878
879 Game driver(s)
880
881 ***************************************************************************/
882
883 ROM_START( kungfut )
884 ROM_REGION( 0xc000, "maincpu", 0 )
CRC(b1e56960)885 ROM_LOAD( "p1.bin", 0x0000, 0x4000, CRC(b1e56960) SHA1(993388bbb663412110d1012be9ffc00b06fce4d0) )
886 ROM_LOAD( "p3.bin", 0x4000, 0x4000, CRC(6fc346f8) SHA1(bd1663fa780e41eafd668bf502b40c9750270e55) )
887 ROM_LOAD( "p2.bin", 0x8000, 0x4000, CRC(042cc9c5) SHA1(09f87e240c2aaa19fe7b8cb548ded828ab67b18b) )
888
889 ROM_REGION( 0x2000, "audiocpu", 0 )
890 ROM_LOAD( "1.bin", 0x0000, 0x2000, CRC(68028a5d) SHA1(2fabf5e55e09a34cd090d123737d31970e4086e8) )
891
892 ROM_REGION( 0x6000, "gfx1", 0 )
893 ROM_LOAD( "2.bin", 0x0000, 0x2000, CRC(5c3ef697) SHA1(5218d361e6020aefb1925a8034a5ed6eb7bb1001) )
894 ROM_LOAD( "3.bin", 0x2000, 0x2000, CRC(905e81fa) SHA1(8d3328b2dc7e99ab1e43420a517f04ec4d463b05) )
895 ROM_LOAD( "4.bin", 0x4000, 0x2000, CRC(965bb5d1) SHA1(ea837118d98378303cf9173005cfd50823b1596a) )
896
897 ROM_REGION( 0x6000, "gfx2", 0 )
898 ROM_LOAD( "5.bin", 0x0000, 0x2000, CRC(763bb61a) SHA1(9bea4a929db5d2e8c925a847591b9e5b2ad5aaaa) )
899 ROM_LOAD( "6.bin", 0x2000, 0x2000, CRC(c9649fce) SHA1(f65e75355d2f7b0899ea3769146a55b187da37d3) )
900 ROM_LOAD( "7.bin", 0x4000, 0x2000, CRC(32f02c13) SHA1(85781f03cca622ce8ee66924a1e72758ce42bdfe) )
901
902 ROM_REGION( 0x0300, "proms", 0 )
903 ROM_LOAD( "82s129.0", 0x0000, 0x0100, CRC(eb823177) SHA1(a28233dbf87744a9896fe675b76603557e7f596b) )
904 ROM_LOAD( "82s129.1", 0x0100, 0x0100, CRC(6eec5dd9) SHA1(e846209c167b2a7d790faacea082a7edc1338e47) )
905 ROM_LOAD( "82s129.2", 0x0200, 0x0100, CRC(c31eb3e6) SHA1(94fb8c6d83432c5f456510d628971147d373faf5) )
906 ROM_END
907
908 ROM_START( kungfuta )
909 ROM_REGION( 0xc000, "maincpu", 0 )
910 ROM_LOAD( "kungfu.01", 0x0000, 0x4000, CRC(48dada70) SHA1(a90901d2aef73d4fa9d9c80769b82a3fead0a0f9) )
911 ROM_LOAD( "kungfu.02", 0x4000, 0x4000, CRC(c08c5152) SHA1(c5db3ee1ee165708d93d296b51a5bb43265ac75f) )
912 ROM_LOAD( "kungfu.03", 0x8000, 0x4000, CRC(09b8670c) SHA1(170e7cbf87727d940e959fa7a0328b4cc1aba195) )
913
914 ROM_REGION( 0x2000, "audiocpu", 0 )
915 ROM_LOAD( "kungfu.04", 0x0000, 0x2000, CRC(352bff48) SHA1(87d2408d31e1326ec810debcb2c724d1f003ae7b) )
916
917 ROM_REGION( 0x6000, "gfx1", 0 )
918 ROM_LOAD( "kungfu.08", 0x0000, 0x2000, CRC(60b91d2f) SHA1(4a3337bb8f475a40b9b7f31d4b42e73179177763) )
919 ROM_LOAD( "kungfu.09", 0x2000, 0x2000, CRC(121ba029) SHA1(4e4375cb9e93af45dd16e2a295fa88753201e6e8) )
920 ROM_LOAD( "kungfu.10", 0x4000, 0x2000, CRC(146df9de) SHA1(8dcc33bc281f1e5b069b52645123de62037261e6) )
921
922 ROM_REGION( 0x6000, "gfx2", 0 )
923 ROM_LOAD( "kungfu.07", 0x0000, 0x2000, CRC(1df48de5) SHA1(e620ea55a1ed2dc934878d077d5cd6437e833a6d) )
924 ROM_LOAD( "kungfu.06", 0x2000, 0x2000, CRC(1921d49b) SHA1(fcc5500c8c1605e571b203828d6a7de36ad76fab) )
925 ROM_LOAD( "kungfu.05", 0x4000, 0x2000, CRC(ff9aced4) SHA1(b13f8ea4131b54bdd2888841f52f1482b02b6624) )
926
927 ROM_REGION( 0x0300, "proms", 0 )
928 ROM_LOAD( "82s129.0", 0x0000, 0x0100, CRC(eb823177) SHA1(a28233dbf87744a9896fe675b76603557e7f596b) ) // ic.23
929 ROM_LOAD( "82s129.1", 0x0100, 0x0100, CRC(6eec5dd9) SHA1(e846209c167b2a7d790faacea082a7edc1338e47) ) // ic.24
930 ROM_LOAD( "82s129.2", 0x0200, 0x0100, CRC(c31eb3e6) SHA1(94fb8c6d83432c5f456510d628971147d373faf5) ) // ic.25
931 ROM_END
932
933 ROM_START( wiz )
934 ROM_REGION( 0xc000, "maincpu", 0 )
935 ROM_LOAD( "ic07_01.bin", 0x0000, 0x4000, CRC(c05f2c78) SHA1(98b93234684a3a228552ef41a08512fef1befedd) )
936 ROM_LOAD( "ic05_03.bin", 0x4000, 0x4000, CRC(7978d879) SHA1(866efdff3c111793d5a3cc2fa0b03a2b4e371c49) )
937 ROM_LOAD( "ic06_02.bin", 0x8000, 0x4000, CRC(9c406ad2) SHA1(cd82c3dc622886b6ebb30ba565f3c34d5a4e229b) )
938
939 ROM_REGION( 0x2000, "audiocpu", 0 )
940 ROM_LOAD( "ic57_10.bin", 0x0000, 0x2000, CRC(8a7575bd) SHA1(5470c4c3a40139f45db7a9e260f40b5244f10123) )
941
942 ROM_REGION( 0x6000, "gfx1", 0 ) /* sprites/chars */
943 ROM_LOAD( "ic12_04.bin", 0x0000, 0x2000, CRC(8969acdd) SHA1(f37c4697232b4fb4171d6290c9407f740e7d1448) )
944 ROM_LOAD( "ic13_05.bin", 0x2000, 0x2000, CRC(2868e6a5) SHA1(1b8ac71a6b901df845bab945bfcf11df47932990) )
945 ROM_LOAD( "ic14_06.bin", 0x4000, 0x2000, CRC(b398e142) SHA1(1cafaf5cbfa96b410ae236a298473ff51122d9fc) )
946
947 ROM_REGION( 0xc000, "gfx2", 0 ) /* sprites/chars */
948 ROM_LOAD( "ic03_07.bin", 0x0000, 0x2000, CRC(297c02fc) SHA1(8eee765a660e3ff1b6cdcdac0d068177098cc339) )
949 ROM_CONTINUE( 0x6000, 0x2000 )
950 ROM_LOAD( "ic02_08.bin", 0x2000, 0x2000, CRC(ede77d37) SHA1(01fe35fc3373b7513ea90e8262d66200629b89fe) )
951 ROM_CONTINUE( 0x8000, 0x2000 )
952 ROM_LOAD( "ic01_09.bin", 0x4000, 0x2000, CRC(4d86b041) SHA1(fe7f8c89ef16020f45a97ed875ddd7396a32665d) )
953 ROM_CONTINUE( 0xa000, 0x2000 )
954
955 ROM_REGION( 0x0300, "proms", 0 )
956 ROM_LOAD( "ic23_3-1.bin", 0x0000, 0x0100, CRC(2dd52fb2) SHA1(61722aba7a370f4a97cafbd5df88ec7c6263c4ad) ) /* palette red component */
957 ROM_LOAD( "ic23_3-2.bin", 0x0100, 0x0100, CRC(8c2880c9) SHA1(9b4c17f7fa5d6dc01d79c40cec9725ab97f514cb) ) /* palette green component */
958 ROM_LOAD( "ic23_3-3.bin", 0x0200, 0x0100, CRC(a488d761) SHA1(6dade1dd16905b4751778d49f374936795c3fb6e) ) /* palette blue component */
959 ROM_END
960
961 ROM_START( wizt )
962 ROM_REGION( 0xc000, "maincpu", 0 )
963 ROM_LOAD( "wiz1.bin", 0x0000, 0x4000, CRC(5a6d3c60) SHA1(faeb7e7ddeee9638ec046655e87f866d81fdbee0) )
964 ROM_LOAD( "ic05_03.bin", 0x4000, 0x4000, CRC(7978d879) SHA1(866efdff3c111793d5a3cc2fa0b03a2b4e371c49) )
965 ROM_LOAD( "ic06_02.bin", 0x8000, 0x4000, CRC(9c406ad2) SHA1(cd82c3dc622886b6ebb30ba565f3c34d5a4e229b) )
966
967 ROM_REGION( 0x2000, "audiocpu", 0 )
968 ROM_LOAD( "ic57_10.bin", 0x0000, 0x2000, CRC(8a7575bd) SHA1(5470c4c3a40139f45db7a9e260f40b5244f10123) )
969
970 ROM_REGION( 0x6000, "gfx1", 0 ) /* sprites/chars */
971 ROM_LOAD( "wiz4.bin", 0x0000, 0x2000, CRC(e6c636b3) SHA1(0d5b98d404d2d87f375cde5d5a90c7d6318ea197) )
972 ROM_LOAD( "wiz5.bin", 0x2000, 0x2000, CRC(77986058) SHA1(8002affdd9ac246a0b9c887654d0db8d3a6913b2) )
973 ROM_LOAD( "wiz6.bin", 0x4000, 0x2000, CRC(f6970b23) SHA1(82d1fe0fee6bf9c6c2f472ed3479c02da85d5f69) )
974
975 ROM_REGION( 0xc000, "gfx2", 0 ) /* sprites/chars */
976 ROM_LOAD( "wiz7.bin", 0x0000, 0x2000, CRC(601f2f3f) SHA1(6c0cc7de5fd94628eaecca409c4faa155f684bdc) )
977 ROM_CONTINUE( 0x6000, 0x2000 )
978 ROM_LOAD( "wiz8.bin", 0x2000, 0x2000, CRC(f5ab982d) SHA1(5e0e72ec702dd5f48814a15f1a92bcdd29c944d8) )
979 ROM_CONTINUE( 0x8000, 0x2000 )
980 ROM_LOAD( "wiz9.bin", 0x4000, 0x2000, CRC(f6c662e2) SHA1(54e904d731ea30f532dfea60d47edf2da99f32eb) )
981 ROM_CONTINUE( 0xa000, 0x2000 )
982
983 ROM_REGION( 0x0300, "proms", 0 )
984 ROM_LOAD( "ic23_3-1.bin", 0x0000, 0x0100, CRC(2dd52fb2) SHA1(61722aba7a370f4a97cafbd5df88ec7c6263c4ad) ) /* palette red component */
985 ROM_LOAD( "ic23_3-2.bin", 0x0100, 0x0100, CRC(8c2880c9) SHA1(9b4c17f7fa5d6dc01d79c40cec9725ab97f514cb) ) /* palette green component */
986 ROM_LOAD( "ic23_3-3.bin", 0x0200, 0x0100, CRC(a488d761) SHA1(6dade1dd16905b4751778d49f374936795c3fb6e) ) /* palette blue component */
987 ROM_END
988
989 /* was marked as Wiz Alt Sound */
990 ROM_START( wizta )
991 ROM_REGION( 0xc000, "maincpu", 0 )
992 ROM_LOAD( "ic7", 0x0000, 0x4000, CRC(b2ec49ad) SHA1(f1624995e9d426dd69d6567a91713aa023e716ad) )
993 ROM_LOAD( "ic5", 0x4000, 0x4000, CRC(f7e8f792) SHA1(2c1f82e6f6b2573d8bf0a27fb344fe86f475ddef) )
994 ROM_LOAD( "ic6", 0x8000, 0x4000, CRC(9c406ad2) SHA1(cd82c3dc622886b6ebb30ba565f3c34d5a4e229b) )
995
996 ROM_REGION( 0x2000, "audiocpu", 0 )
997 ROM_LOAD( "ic57", 0x0000, 0x2000, CRC(8a7575bd) SHA1(5470c4c3a40139f45db7a9e260f40b5244f10123) )
998
999 ROM_REGION( 0x6000, "gfx1", 0 ) /* sprites/chars */
1000 ROM_LOAD( "ic12", 0x0000, 0x2000, CRC(e6c636b3) SHA1(0d5b98d404d2d87f375cde5d5a90c7d6318ea197) )
1001 ROM_LOAD( "ic13", 0x2000, 0x2000, CRC(77986058) SHA1(8002affdd9ac246a0b9c887654d0db8d3a6913b2) )
1002 ROM_LOAD( "ic14", 0x4000, 0x2000, CRC(f6970b23) SHA1(82d1fe0fee6bf9c6c2f472ed3479c02da85d5f69) )
1003
1004 ROM_REGION( 0xc000, "gfx2", 0 ) /* sprites/chars */
1005 ROM_LOAD( "ic3", 0x0000, 0x2000, CRC(601f2f3f) SHA1(6c0cc7de5fd94628eaecca409c4faa155f684bdc) )
1006 ROM_CONTINUE( 0x6000, 0x2000 )
1007 ROM_LOAD( "ic2", 0x2000, 0x2000, CRC(f5ab982d) SHA1(5e0e72ec702dd5f48814a15f1a92bcdd29c944d8) )
1008 ROM_CONTINUE( 0x8000, 0x2000 )
1009 ROM_LOAD( "ic1", 0x4000, 0x2000, CRC(f6c662e2) SHA1(54e904d731ea30f532dfea60d47edf2da99f32eb) )
1010 ROM_CONTINUE( 0xa000, 0x2000 )
1011
1012 ROM_REGION( 0x0300, "proms", 0 )
1013 ROM_LOAD( "ic23_3-1.bin", 0x0000, 0x0100, CRC(2dd52fb2) SHA1(61722aba7a370f4a97cafbd5df88ec7c6263c4ad) ) /* palette red component */
1014 ROM_LOAD( "ic23_3-2.bin", 0x0100, 0x0100, CRC(8c2880c9) SHA1(9b4c17f7fa5d6dc01d79c40cec9725ab97f514cb) ) /* palette green component */
1015 ROM_LOAD( "ic23_3-3.bin", 0x0200, 0x0100, CRC(a488d761) SHA1(6dade1dd16905b4751778d49f374936795c3fb6e) ) /* palette blue component */
1016 ROM_END
1017
1018 ROM_START( stinger )
1019 ROM_REGION( 0xc000, "maincpu", 0 )
1020 ROM_LOAD( "1-5j.bin", 0x0000, 0x2000, CRC(1a2ca600) SHA1(473e89f2c49f6e6f38df5d6fc2267ffecf84c6c8) ) /* encrypted */
1021 ROM_LOAD( "2-6j.bin", 0x2000, 0x2000, CRC(957cd39c) SHA1(38bb589b3bfd962415b31d1151adf4bdb661122f) ) /* encrypted */
1022 ROM_LOAD( "3-8j.bin", 0x4000, 0x2000, CRC(404c932e) SHA1(c23eac49e06ff38564062c0e8c8cdadf877f1d6a) ) /* encrypted */
1023 ROM_LOAD( "4-9j.bin", 0x6000, 0x2000, CRC(2d570f91) SHA1(31d54d9fd5254c33f07c605bd6112c7eb53c42a1) ) /* encrypted */
1024 ROM_LOAD( "5-10j.bin", 0x8000, 0x2000, CRC(c841795c) SHA1(e03860813c03ca1c737935accc2b5fe87c6b624a) ) /* encrypted */
1025
1026 ROM_REGION( 0x2000, "audiocpu", 0 )
1027 ROM_LOAD( "6-9f.bin", 0x0000, 0x2000, CRC(79757f0c) SHA1(71be938c32c6a84618763761786ecc5d7d47581a) )
1028
1029 ROM_REGION( 0x6000, "gfx1", 0 ) /* sprites/chars */
1030 ROM_LOAD( "7-9e.bin", 0x0000, 0x2000, CRC(775489be) SHA1(5fccede323895626cf2eabd606ed21282aa36356) )
1031 ROM_LOAD( "8-11e.bin", 0x2000, 0x2000, CRC(43c61b3f) SHA1(5cdb6a5096b42406c2f2784d37e4e39207c35d40) )
1032 ROM_LOAD( "9-14e.bin", 0x4000, 0x2000, CRC(c9ed8fc7) SHA1(259d7681b663adb1c5fe057e2ef08469ddcbd3c3) )
1033
1034 ROM_REGION( 0x6000, "gfx2", 0 ) /* sprites/chars */
1035 ROM_LOAD( "10-9h.bin", 0x0000, 0x2000, CRC(6fc3a22d) SHA1(6875b86d60a06aa329d8ff18d0eb48d158074c5d) )
1036 ROM_LOAD( "11-11h.bin", 0x2000, 0x2000, CRC(3df1f57e) SHA1(e365ee4cc8c055cc39abb4598ad80597d3ae19c7) )
1037 ROM_LOAD( "12-14h.bin", 0x4000, 0x2000, CRC(2fbe1391) SHA1(669edc154164944d82dfccda328774ea4a2318ba) )
1038
1039 ROM_REGION( 0x0300, "proms", 0 )
1040 ROM_LOAD( "stinger.a7", 0x0000, 0x0100, CRC(52c06fc2) SHA1(b416077fcfabe0dbb1ca30752de6a219ea896f75) ) /* red component */
1041 ROM_LOAD( "stinger.b7", 0x0100, 0x0100, CRC(9985e575) SHA1(b0d609968917121325760f8d4777066abdb7ccfc) ) /* green component */
1042 ROM_LOAD( "stinger.a8", 0x0200, 0x0100, CRC(76b57629) SHA1(836763948753b7fed97c9e5d90a16dc4ba68f42a) ) /* blue component */
1043 ROM_END
1044
1045 ROM_START( stinger2 )
1046 ROM_REGION( 0xc000, "maincpu", 0 )
1047 ROM_LOAD( "n1.bin", 0x0000, 0x2000, CRC(f2d2790c) SHA1(0e5e92ef45b5bc27b0818f83c89b3bda0e701403) ) /* encrypted */
1048 ROM_LOAD( "n2.bin", 0x2000, 0x2000, CRC(8fd2d8d8) SHA1(d3318a81fddeb3fa50d01569c1e1145e26ce7277) ) /* encrypted */
1049 ROM_LOAD( "n3.bin", 0x4000, 0x2000, CRC(f1794d36) SHA1(7954500f489c0bc58cda8e7ffc2e4474759fdc33) ) /* encrypted */
1050 ROM_LOAD( "n4.bin", 0x6000, 0x2000, CRC(230ba682) SHA1(c419ffebd021d41b3f5021948007fb6bcdb1cdf7) ) /* encrypted */
1051 ROM_LOAD( "n5.bin", 0x8000, 0x2000, CRC(a03a01da) SHA1(28fecac7a821ac4718242919840266a907160df0) ) /* encrypted */
1052
1053 ROM_REGION( 0x2000, "audiocpu", 0 )
1054 ROM_LOAD( "6-9f.bin", 0x0000, 0x2000, CRC(79757f0c) SHA1(71be938c32c6a84618763761786ecc5d7d47581a) )
1055
1056 ROM_REGION( 0x6000, "gfx1", 0 ) /* sprites/chars */
1057 ROM_LOAD( "7-9e.bin", 0x0000, 0x2000, CRC(775489be) SHA1(5fccede323895626cf2eabd606ed21282aa36356) )
1058 ROM_LOAD( "8-11e.bin", 0x2000, 0x2000, CRC(43c61b3f) SHA1(5cdb6a5096b42406c2f2784d37e4e39207c35d40) )
1059 ROM_LOAD( "9-14e.bin", 0x4000, 0x2000, CRC(c9ed8fc7) SHA1(259d7681b663adb1c5fe057e2ef08469ddcbd3c3) )
1060
1061 ROM_REGION( 0x6000, "gfx2", 0 ) /* sprites/chars */
1062 ROM_LOAD( "10.bin", 0x0000, 0x2000, CRC(f6721930) SHA1(fb903f1deb5f093ff5fe129e213966af58a68339) )
1063 ROM_LOAD( "11.bin", 0x2000, 0x2000, CRC(a4404e63) SHA1(50ae99748547af20e04f6c6c8c7eba85f967b9dc) )
1064 ROM_LOAD( "12.bin", 0x4000, 0x2000, CRC(b60fa88c) SHA1(2d3bca35076625251933989f5e566d5d3290542b) )
1065
1066 ROM_REGION( 0x0300, "proms", 0 )
1067 ROM_LOAD( "stinger.a7", 0x0000, 0x0100, CRC(52c06fc2) SHA1(b416077fcfabe0dbb1ca30752de6a219ea896f75) ) /* red component */
1068 ROM_LOAD( "stinger.b7", 0x0100, 0x0100, CRC(9985e575) SHA1(b0d609968917121325760f8d4777066abdb7ccfc) ) /* green component */
1069 ROM_LOAD( "stinger.a8", 0x0200, 0x0100, CRC(76b57629) SHA1(836763948753b7fed97c9e5d90a16dc4ba68f42a) ) /* blue component */
1070 ROM_END
1071
1072 ROM_START( scion )
1073 ROM_REGION( 0xc000, "maincpu", 0 )
1074 ROM_LOAD( "sc1", 0x0000, 0x2000, CRC(8dcad575) SHA1(3f194ece25e730b1cbbf3f332bbdebc3a6a72b0f) )
1075 ROM_LOAD( "sc2", 0x2000, 0x2000, CRC(f608e0ba) SHA1(e55b0ad4dc117339d45a999e13760f4ab3ca4ce0) )
1076 ROM_LOAD( "sc3", 0x4000, 0x2000, CRC(915289b9) SHA1(b32b40f93de4501619486a8c5a8367d3b2e357a6) )
1077 ROM_LOAD( "4.9j", 0x6000, 0x2000, CRC(0f40d002) SHA1(13b04f3902ebdda02670fcb667e181cf70594c37) )
1078 ROM_LOAD( "5.10j", 0x8000, 0x2000, CRC(dc4923b7) SHA1(ec5c22ef1f9ba0fe4da3de62a63a44aa3ff850f4) )
1079
1080 ROM_REGION( 0x2000, "audiocpu", 0 )
1081 ROM_LOAD( "sc6", 0x0000, 0x2000, CRC(09f5f9c1) SHA1(83e489f32597880fb1a13f0bafedd275facb21f7) )
1082
1083 ROM_REGION( 0x6000, "gfx1", 0 ) /* sprites/chars */
1084 ROM_LOAD( "7.10e", 0x0000, 0x2000, CRC(223e0d2a) SHA1(073638172ce0762d103cc07705fc493432e5aa63) )
1085 ROM_LOAD( "8.12e", 0x2000, 0x2000, CRC(d3e39b48) SHA1(c686ef35bf866d044637df295bb70c9c005fc98c) )
1086 ROM_LOAD( "9.15e", 0x4000, 0x2000, CRC(630861b5) SHA1(a6ccfa10e43e92407c452f9744aa1735b257c28e) )
1087
1088 ROM_REGION( 0x6000, "gfx2", 0 ) /* sprites/chars */
1089 ROM_LOAD( "10.10h", 0x0000, 0x2000, CRC(0d2a0d1e) SHA1(518689f91019e64138ed3560e161d3ef93d0671d) )
1090 ROM_LOAD( "11.12h", 0x2000, 0x2000, CRC(dc6ef8ab) SHA1(ba93392a494a66336197d28e45832b9f8f3e4376) )
1091 ROM_LOAD( "12.15h", 0x4000, 0x2000, CRC(c82c28bf) SHA1(8952b515f01027a94bee0186221a1989ea2cd919) )
1092
1093 ROM_REGION( 0x0300, "proms", 0 )
1094 ROM_LOAD( "82s129.7a", 0x0000, 0x0100, CRC(2f89d9ea) SHA1(37adbddb9b3253b995a02a74e0de27ad594dc544) ) /* red component */
1095 ROM_LOAD( "82s129.7b", 0x0100, 0x0100, CRC(ba151e6a) SHA1(3d3139936de9e1913dee94317420a171bd3d2062) ) /* green component */
1096 ROM_LOAD( "82s129.8a", 0x0200, 0x0100, CRC(f681ce59) SHA1(4ac74c1d04e6b3f14a0f4530a41ba188f5a8f6be) ) /* blue component */
1097 ROM_END
1098
1099 ROM_START( scionc )
1100 ROM_REGION( 0xc000, "maincpu", 0 )
1101 ROM_LOAD( "1.5j", 0x0000, 0x2000, CRC(5aaf571e) SHA1(53becfad13e95012dce6597625c64dcba9ac4433) )
1102 ROM_LOAD( "2.6j", 0x2000, 0x2000, CRC(d5a66ac9) SHA1(3192da12b2d6a07e203999ed97cdba16d4917a98) )
1103 ROM_LOAD( "3.8j", 0x4000, 0x2000, CRC(6e616f28) SHA1(ea32add6173251152ca84426c098c92ace123878) )
1104 ROM_LOAD( "4.9j", 0x6000, 0x2000, CRC(0f40d002) SHA1(13b04f3902ebdda02670fcb667e181cf70594c37) )
1105 ROM_LOAD( "5.10j", 0x8000, 0x2000, CRC(dc4923b7) SHA1(ec5c22ef1f9ba0fe4da3de62a63a44aa3ff850f4) )
1106
1107 ROM_REGION( 0x2000, "audiocpu", 0 )
1108 ROM_LOAD( "6.9f", 0x0000, 0x2000, CRC(a66a0ce6) SHA1(b2d6a8ded007c362c58496ead33d1561a982440a) )
1109
1110 ROM_REGION( 0x6000, "gfx1", 0 ) /* sprites/chars */
1111 ROM_LOAD( "7.10e", 0x0000, 0x2000, CRC(223e0d2a) SHA1(073638172ce0762d103cc07705fc493432e5aa63) )
1112 ROM_LOAD( "8.12e", 0x2000, 0x2000, CRC(d3e39b48) SHA1(c686ef35bf866d044637df295bb70c9c005fc98c) )
1113 ROM_LOAD( "9.15e", 0x4000, 0x2000, CRC(630861b5) SHA1(a6ccfa10e43e92407c452f9744aa1735b257c28e) )
1114
1115 ROM_REGION( 0x6000, "gfx2", 0 ) /* sprites/chars */
1116 ROM_LOAD( "10.10h", 0x0000, 0x2000, CRC(0d2a0d1e) SHA1(518689f91019e64138ed3560e161d3ef93d0671d) )
1117 ROM_LOAD( "11.12h", 0x2000, 0x2000, CRC(dc6ef8ab) SHA1(ba93392a494a66336197d28e45832b9f8f3e4376) )
1118 ROM_LOAD( "12.15h", 0x4000, 0x2000, CRC(c82c28bf) SHA1(8952b515f01027a94bee0186221a1989ea2cd919) )
1119
1120 ROM_REGION( 0x0300, "proms", 0 )
1121 ROM_LOAD( "82s129.7a", 0x0000, 0x0100, CRC(2f89d9ea) SHA1(37adbddb9b3253b995a02a74e0de27ad594dc544) ) /* red component */
1122 ROM_LOAD( "82s129.7b", 0x0100, 0x0100, CRC(ba151e6a) SHA1(3d3139936de9e1913dee94317420a171bd3d2062) ) /* green component */
1123 ROM_LOAD( "82s129.8a", 0x0200, 0x0100, CRC(f681ce59) SHA1(4ac74c1d04e6b3f14a0f4530a41ba188f5a8f6be) ) /* blue component */
1124 ROM_END
1125
1126
1127 void wiz_state::init_stinger()
1128 {
1129 static const uint8_t swap_xor_table[4][4] =
1130 {
1131 { 7,3,5, 0xa0 },
1132 { 3,7,5, 0x88 },
1133 { 5,3,7, 0x80 },
1134 { 5,7,3, 0x28 }
1135 };
1136
1137 uint8_t *rom = memregion("maincpu")->base();
1138 const uint8_t *tbl;
1139
1140 for (int a = 0x0000; a < 0xc000; a++)
1141 {
1142 if (a & 0x2040)
1143 {
1144 /* not encrypted */
1145 m_decrypted_opcodes[a] = rom[a];
1146 }
1147 else
1148 {
1149 const uint8_t src = rom[a];
1150
1151 /* pick the translation table from bits 3 and 5 of the address */
1152 int row = ((a >> 3) & 1) + (((a >> 5) & 1) << 1);
1153
1154 /* decode the opcodes */
1155 tbl = swap_xor_table[row];
1156 m_decrypted_opcodes[a] = bitswap<8>(src, tbl[0], 6, tbl[1], 4, tbl[2], 2, 1, 0) ^ tbl[3];
1157 }
1158 }
1159 }
1160
1161
1162 GAME( 1983, stinger, 0, stinger, stinger, wiz_state, init_stinger, ROT90, "Seibu Denshi", "Stinger", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE )
1163 GAME( 1983, stinger2, stinger, stinger, stinger2, wiz_state, init_stinger, ROT90, "Seibu Denshi", "Stinger (prototype?)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE )
1164 GAME( 1984, scion, 0, scion, scion, wiz_state, empty_init, ROT0, "Seibu Denshi", "Scion", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE )
1165 GAME( 1984, scionc, scion, scion, scion, wiz_state, empty_init, ROT0, "Seibu Denshi (Cinematronics license)", "Scion (Cinematronics)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE )
1166 GAME( 1984, kungfut, 0, kungfut, kungfut, wiz_state, empty_init, ROT0, "Seibu Kaihatsu", "Kung-Fu Taikun (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_MICROPHONE )
1167 GAME( 1984, kungfuta, kungfut, kungfut, kungfut, wiz_state, empty_init, ROT0, "Seibu Kaihatsu", "Kung-Fu Taikun (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_MICROPHONE ) /* board was a bootleg but set might still be original */
1168 GAME( 1985, wiz, 0, wiz, wiz, wiz_state, empty_init, ROT270, "Seibu Kaihatsu", "Wiz", MACHINE_SUPPORTS_SAVE )
1169 GAME( 1985, wizt, wiz, wiz, wiz, wiz_state, empty_init, ROT270, "Seibu Kaihatsu (Taito license)", "Wiz (Taito, set 1)", MACHINE_SUPPORTS_SAVE )
1170 GAME( 1985, wizta, wiz, wiz, wiz, wiz_state, empty_init, ROT270, "Seibu Kaihatsu (Taito license)", "Wiz (Taito, set 2)", MACHINE_SUPPORTS_SAVE )
1171