1 // license:BSD-3-Clause
2 // copyright-holders:Nicola Salmoria, Tormod Tjaberg, Mirko Buffoni, Lee Taylor, Valerio Verrando, Zsolt Vasvari, Aaron Giles, Jonathan Gevaryahu, hap, Robbbert
3 // thanks-to:Michael Strutts, Marco Cassili
4 /*****************************************************************************
5
6 8080bw.cpp
7
8 Michael Strutts, Nicola Salmoria, Tormod Tjaberg, Mirko Buffoni
9 Lee Taylor, Valerio Verrando, Marco Cassili, Zsolt Vasvari, and others
10
11 Much information about Space Invaders PCBs and other Taito and Midway
12 sets and hardware contributed by Andrew Welburn
13
14
15 Notes:
16 -----
17
18 - Midway Deluxe Space Invaders still displays 'Space Invaders Part II',
19 because of the terms of the licensing agreement.
20 - DIP settings/locations verified from manual for:
21 sitv, sicv, invadpt2, lrescue, invasion, invrvnge
22
23 - The Taito Space Invaders hardware comes on at least five board types;
24 The Taito manufactured ones are:
25 * The "L-shaped" PCB set, B&W and Upright mode only
26 * Three PCBs in a stack, often called the '3 layer PCB set' (most common)
27 * Two PCBs in a stack, with the function of the CPU/ROM boards combined.
28 * In general, discounting revision specific differences, the PCBs are
29 arranged in a stack, connected end-to-end by ribbon cables and folded
30 such that the middle PCB (of 3 PCB stack) or the bottom PCB (of 2 PCB
31 stack) is upside down.
32 * Keep in mind specific differences on the PCBs (especially the TVN PCBs
33 vs the others) sometimes prevent exchanging 'equivalent' PCBs between stacks.
34 * L-shaped PCB set details:
35 * One large, square board with ROM, RAM, CPU, Video circuitry on it.
36 * One smaller PCB with audio/io/shifter circuitry on it, plugged into
37 the main PCB at a right angle (hence the entire PCB set is 'L-shaped')
38 * Does not have the any hardware of any sort for electronic color screen
39 overlay or screen flipping for cocktail use.
40 * 3 layer PCB set details:
41 * This PCB set came in 3 versions: TVN, CVN, PVN; see below for differences.
42 * Top PCB: Audio/IO/Shifter PCB
43 - discrete analogue audio and sn76477, and volume pots
44 - data shifter, using either ~11 74xx chips, AM25S10s, Fujitsu MB14221
45 or Fujitsu MB14241 chips, which all do the same thing.
46 - has the dipswitches
47 - has the main "G" edge connector for the wiring harness
48 - has the gating circuitry for the color overlay
49 (these are not present and/or populated on some TVN PCBs)
50 - despite there being at least six versions of this PCB, the discrete
51 audio section is identical in all of them.
52 * Middle PCB: CPU/RAM/Color overlay PCB
53 - has DRAMS on it
54 - has the 8080 CPU on it
55 - has the two PROMS for color overlay on it (one for each player flip)
56 (these are not populated on TVN PCBs and the related circuitry is not
57 present and/or populated on the earliest TVN PCBs)
58 * Bottom PCB: Power/Video/ROM PCB
59 - has the game ROMs on it
60 - has the main B&W video generation logic on it
61 - has connection to the PSU, and B&W composite output "T" connector
62 * 2 layer PCB set details:
63 * This PCB set came in one version for PVN use, sharing the same top PCB
64 as 3 found in regular layer PCB sets
65 * Bottom PCB combines the function of the Middle and Bottom PCBs
66 of the 3 layer set.
67
68 * The different PCB set versions are noted by a different version code on
69 a paper sticker on the PCB; The code will be of the format mVNnnnnn where
70 m is a letter and nnnnn is a number.
71 Codes:
72 * TVNxxxxx (3 layer PCBset) - B&W only, used on "T.T Space Invaders"
73 cocktail with 'blended' single-sheet gel color overlay.
74 ***TODO: this overlay is not supported yet!
75 Several revisions (at least 5 ROM, 3 cpu, 3 audio) of each PCB exist
76 for this set.
77 Does support flipscreen.
78 Does not have the color overlay circuitry nor places for it on the PCBs.
79 (Later TVNxxxxx are actually rebadged CVNxxxxx, see below)
80 Came from factory with one of the SV or TV romsets.
81 Capable of running TV, SV or CV romsets.
82 This PCB set is probably the oldest one and was designed at Taito.
83 * SVNxxxxx? (L-shaped PCBset) - B&W only, used on "Space Invaders" Upright
84 with 3-separate-sheets-of-gel 'strips' color overlay.
85 ***TODO: this overlay might not be supported properly yet!
86 Does not support flipscreen, was intended for upright cabinets only.
87 Audio PCB daughterboard has part number SVN00001 or SVN00003.
88 Came from factory with one of the 6x 0x400 or 4x 0x800 romsets
89 Capable of running TV, SV or CV romsets.
90 This is the second-oldest PCB set and does not share physical compatibility
91 with Midway (interboard connector is of a differing pitch)
92 * CVNxxxxx (3 layer PCBset) - Color, used on "T.T Space Invaders Color"
93 cocktail with electronic color overlay.
94 Does support flipscreen.
95 Note that later TVNxxxxx PCBsets are actually 'rebadged' CVNxxxxx
96 PCBsets with the color overlay circuitry unpopulated, and can be
97 'upgraded' to CVNxxxxx by adding a few components and proms.
98 Came from factory with one of the CV romsets.
99 Capable of running TV, SV or CV romsets.
100 * PVNxxxxx (2&3 layer PCBsets) - Color, used on "T.T Space Invaders Part
101 II" cocktail with electronic color overlay.
102 Several revisions (at least 3 rom, 1 cpu, 2 audio) of each PCB exist
103 for this set.
104 Came from factory with UV (2708) or PV (2716) romsets.
105 Capable of running all romsets.
106
107 * The following Romsets are known, ROUGHLY from oldest to newest:
108 SV01, SV02, SV03, SV04, SV05, SV06 - undumped (rev 1), If this exists at all this would be the very first Japanese release of space invaders (Andy W may call this 'SV0'?)
109 SV01, SV02, SV10, SV04, SV09, SV06 - sisv2 (rev 2) (Andy W calls this 'SV1', and the midway 'invaders' set is based on this romset)
110 SV0H, SV02, SV10, SV04, SV09, SV06 - sisv3 (rev 3) (Andy W calls this 'SV2')
111 SV0H, SV11, SV12, SV04, SV13, SV14 - sisv (rev 4, 5-digit scoring) (Andy W calls this 'SV3') (this set is likely newer than the TV0x sets)
112 TV01, TV02, TV03, TV04 - sitv1 (rev 1)
113 TV0H, TV02, TV03, TV04 - sitv (rev 2 with bug fixes)
114 CV03, CV04, CV05, CV06 w/proms - undumped (but may be the same as one of the sisv sets with the roms combined to 2716 size)
115 CV17, CV18, CV19, CV20 w/proms - sicv
116 UV1, UV2, UV3, UV4, UV5, UV6, UV7, UV8, UV9, UV10 w/proms - invadpt2a - (same as PVxx set just split differently)
117 PV01, PV02, PV03, PV04, PV05 w/proms - invadpt2
118 Note: SV0H and TV0H are called in Taito documentation "SV01-1" and "TV01-1" most likely due to someone along the line mistaking the '1-1' for an H or vice versa when writing the documentation or creating the labels.
119
120 - Midway PCB sets: (cursory description)
121 * All Midway Space Invaders games ([Space Invader Upright], [Space Invader Cocktail],
122 [Deluxe Space Invaders Upright], [Deluxe Space Invaders Cocktail], and [Space Invaders II])
123 use the same m8080bw mainboard, with no emulation-relevant differences between revisions.
124 * [Space Invaders II] from Midway (only produced as a cocktail) uses
125 an extra sound board for the simultaneous 2 player head-to-head sounds.
126
127 - Taito-USA-made 'trimline' PCBS do not match the Taito Japan-made PCBs either.
128
129
130 To Do:
131 -----
132
133 - Midway PCB sets
134 * The discrete components, particularly for the shot sound, differ
135 between Taito and Midway audio daughterboards.
136 + Figure out the difference between the Taito and Midway discrete
137 boards and emulate them both properly.
138 + Figure out what the current discrete setup is trying to emulate.
139 * Remove Space Invaders 'invaders' set from mw8080bw.c, it does not belong
140 there at all
141
142 - Space Chaser (schaser)
143 1. Schematic has SX2 & 4 swapped by mistake.
144
145 2. Dipswitch 4 we have listed as "Easy/Hard", however the manual says
146 it should not be used. The Hard position displays many bugs.
147
148 3. Confirmation of these on a real machine (schaserb set) have been
149 received from the owner of the PCB.
150 "Hi Rob,
151 I seem to get the same bugs as you with Dip4 set to off. Score starts at 9000,
152 2 missiles on first level etc.. It makes no mention of dip4 adjusting the hardness
153 in the manual, are you guys sure that's what it was intended for "in the factory"?
154 However you were correct in thinking the schematics were wrong. My multimeter found
155 the following:
156 15k resistor - pin 7
157 39k - pin 10
158 82k - pin 12
159 It looks like they have Sx2 and Sx4 the wrong way round on a latter page of the schematics."
160 Thanks to Andy Raven for getting this information.
161
162 4. The "Hard" mode bug can be fixed with a single byte patch: ROM_FILL( 0x47e5, 1, 0xc3)
163
164 5. I have seen real machines with Hard mode set, that worked properly, thus there
165 must be yet another romset still waiting to be found.
166
167 6. Strange bug; sometimes the missile sound continues into and past the
168 music/explosion. This didn't happen on the real machines I played.
169
170 - Space Chaser (schasercv)
171 These cheats exist in this game:
172 1. Hold down 2P DOWN (the F key) while it says INSERT COIN. Then
173 insert a coin and play. You will have 2 extra ships.
174 2. In the Hard difficulty setting, you normally start at level 4.
175 Hold down the 1P START (the 1 key) while it says INSERT COIN.
176 Then insert a coin and play. You will start at level 5.
177
178 - Space War (Sanritsu)
179 * I seem to recall that the flashing ufo had its own sample
180 sound, a sort of rattling noise. Unable to find evidence
181 of this (so far).
182
183 - Steel Worker, Space Combat
184 Holding down the coin button causes the credits to rapidly increase.
185
186
187 *****************************************************************************/
188
189 #include "emu.h"
190 #include "includes/8080bw.h"
191
192 #include "cpu/m6800/m6800.h"
193 #include "cpu/i8085/i8085.h"
194 #include "machine/watchdog.h"
195 #include "sound/ay8910.h"
196
197 #include "speaker.h"
198
199 #include "attackfc.lh"
200 #include "cosmicm.lh"
201 #include "escmars.lh"
202 #include "galactic.lh"
203 #include "gunchamp.lh"
204 #include "shuttlei.lh"
205 #include "spacecom.lh"
206 #include "yosakdon.lh"
207
208
209 /*******************************************************/
210 /* */
211 /* Games with additional sound / video hardware */
212 /* */
213 /*******************************************************/
214
MACHINE_START_MEMBER(_8080bw_state,extra_8080bw)215 MACHINE_START_MEMBER(_8080bw_state,extra_8080bw)
216 {
217 mw8080bw_state::machine_start();
218
219 MACHINE_START_CALL_MEMBER(extra_8080bw_sh);
220 MACHINE_START_CALL_MEMBER(extra_8080bw_vh);
221 }
222
223 /*******************************************************/
224 /* */
225 /* Space Invaders CV Version (Taito) */
226 /* */
227 /*******************************************************/
228
229 static INPUT_PORTS_START( sicv )
230 PORT_START("IN0")
231 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN )
232 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN )
233 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
234 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
235 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
236 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
237 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
238 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
239
240 PORT_START("IN1")
241 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
242 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
243 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
244 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_CUSTOM_MEMBER(mw8080bw_state,invaders_in1_control_r)245 PORT_BIT( 0x70, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, invaders_in1_control_r)
246 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
247
248 PORT_START("IN2")
249 PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1,2")
250 PORT_DIPSETTING( 0x00, "3" )
251 PORT_DIPSETTING( 0x01, "4" )
252 PORT_DIPSETTING( 0x02, "5" )
253 PORT_DIPSETTING( 0x03, "6" )
254 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_TILT ) PORT_DIPLOCATION("SW1:3")
255 PORT_DIPNAME( 0x08, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:4")
256 PORT_DIPSETTING( 0x08, "1000" )
257 PORT_DIPSETTING( 0x00, "1500" )
258 /* SW1:5,6,7: In OFF, PL2 can have no control of joystick, going auto left/right and other problems like no laser gun.
259 Be sure these are always ON */
260 PORT_BIT( 0x70, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, invaders_in2_control_r) PORT_DIPLOCATION("SW1:5,6,7") // Labeled as "FACTORY"
261 PORT_DIPNAME( 0x80, 0x00, "Coin Info" ) PORT_DIPLOCATION("SW1:8")
262 PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
263 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
264
265 /* Dummy controls port, P1 */
266 INVADERS_CONTROL_PORT_P1
267
268 /* Dummy controls port, P2 */
269 INVADERS_CONTROL_PORT_P2
270
271 /* Dummy port for cocktail mode */
272 INVADERS_CAB_TYPE_PORT
273 INPUT_PORTS_END
274
275
276
277 /*******************************************************/
278 /* */
279 /* Space Invaders TV Version (Taito) */
280 /* */
281 /*******************************************************/
282
283 /* same as the CV version with a test mode switch */
284 static INPUT_PORTS_START( sitv )
285 PORT_INCLUDE( sicv )
286
287 PORT_MODIFY("IN0")
288 PORT_SERVICE( 0x01, IP_ACTIVE_LOW )
289
290 PORT_MODIFY("IN1")
291 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
292 INPUT_PORTS_END
293
294
295
296 /*******************************************************/
297 /* */
298 /* Alien Invasion */
299 /* */
300 /*******************************************************/
301
302 static INPUT_PORTS_START( alieninv )
303 PORT_START("IN0")
304 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN )
305 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN )
306 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
307 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
308 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
309 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
310 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
311 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
312
313 PORT_START("IN1")
314 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
315 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
316 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
317 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
318 PORT_BIT( 0x70, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, invaders_in1_control_r)
319 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
320
321 PORT_START("IN2")
322 PORT_DIPNAME( 0x01, 0x01, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1")
323 PORT_DIPSETTING( 0x00, "2" )
324 PORT_DIPSETTING( 0x01, "3" )
325 PORT_DIPNAME( 0x02, 0x02, "Pence Coinage" ) PORT_DIPLOCATION("SW1:2")
326 PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
327 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
328 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_DIPLOCATION("SW1:3") /* Pence Coin */
329 PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW1:4" ) /* Not bonus */
330 PORT_BIT( 0x70, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, invaders_in2_control_r) PORT_DIPLOCATION("SW1:5,6,7")
331 PORT_DIPNAME( 0x80, 0x80, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:8")
332 PORT_DIPSETTING( 0x00, "2C/1C 50p/3C (+ Bonus Life)" )
333 PORT_DIPSETTING( 0x80, "1C/1C 50p/5C" )
334
335 /* Dummy controls port, P1 */
336 INVADERS_CONTROL_PORT_P1
337
338 /* Dummy controls port, P2 */
339 INVADERS_CONTROL_PORT_P2
340
341 /* Dummy port for cocktail mode */
342 INVADERS_CAB_TYPE_PORT
343 INPUT_PORTS_END
344
345
346
347 /*******************************************************/
348 /* */
349 /* Space Invaders Model Racing */
350 /* */
351 /*******************************************************/
352
353 static INPUT_PORTS_START( invadrmr )
354 PORT_INCLUDE( sicv )
355
356 PORT_MODIFY("IN2")
357 PORT_DIPNAME( 0x08, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:4")
358 PORT_DIPSETTING( 0x00, "1500" )
359 PORT_DIPSETTING( 0x08, "3000" ) /* This is different to invaders */
360 INPUT_PORTS_END
361
362
363
364 /*******************************************************/
365 /* */
366 /* Midway "Space Invaders Part II" */
367 /* */
368 /*******************************************************/
369
370 void _8080bw_state::invadpt2_io_map(address_map &map)
371 {
372 map(0x00, 0x00).portr("IN0");
373 map(0x01, 0x01).portr("IN1");
374 map(0x02, 0x02).portr("IN2").w(m_mb14241, FUNC(mb14241_device::shift_count_w));
375 map(0x03, 0x03).r(m_mb14241, FUNC(mb14241_device::shift_result_r)).w(FUNC(_8080bw_state::invadpt2_sh_port_1_w));
376 map(0x04, 0x04).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
377 map(0x05, 0x05).w(FUNC(_8080bw_state::invadpt2_sh_port_2_w));
378 map(0x06, 0x06).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
379 }
380
381
382 static INPUT_PORTS_START( invadpt2 )
PORT_INCLUDE(sicv)383 PORT_INCLUDE( sicv )
384
385 PORT_MODIFY("IN0")
386 // Name Reset - if name of high scorer was rude, owner can press this button
387 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Name Reset") PORT_CODE(KEYCODE_F1)
388
389 PORT_MODIFY("IN1")
390 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
391
392 PORT_MODIFY("IN2")
393 PORT_DIPNAME( 0x01, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1")
394 PORT_DIPSETTING( 0x00, "3" )
395 PORT_DIPSETTING( 0x01, "4" )
396 // SW1:2 doesn't seem to work?
397 PORT_DIPNAME( 0x02, 0x00, "Rotate Images" ) PORT_DIPLOCATION("SW1:2") // "When ON, the images on screen will be rotated. Default is ON."
398 PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
399 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
400 PORT_DIPNAME( 0x08, 0x00, "Preset Mode" ) PORT_DIPLOCATION("SW1:4") // Preset Mode: "Switch for checking, when OFF checking can be done."
401 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
402 PORT_DIPSETTING( 0x08, DEF_STR( On ) )
403 INPUT_PORTS_END
404
405
406 /* same as regular invaders, but with a color board added */
407 void _8080bw_state::invadpt2(machine_config &config)
408 {
409 mw8080bw_root(config);
410
411 /* basic machine hardware */
412 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::invadpt2_io_map);
413 MCFG_MACHINE_START_OVERRIDE(_8080bw_state,extra_8080bw)
414
415 /* 60 Hz signal clocks two LS161. Ripple carry will */
416 /* reset circuit, if LS161 not cleared before. */
417 WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 255);
418
419 /* add shifter */
420 MB14241(config, m_mb14241);
421
422 /* video hardware */
423 m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_invadpt2));
424
425 PALETTE(config, m_palette, palette_device::RBG_3BIT);
426
427 /* sound hardware */
428 invaders_samples_audio(config);
429 }
430
431
432
433 /*******************************************************/
434 /* */
435 /* Space Ranger */
436 /* */
437 /*******************************************************/
438
spacerng_io_map(address_map & map)439 void _8080bw_state::spacerng_io_map(address_map &map)
440 {
441 map(0x00, 0x00).portr("IN0");
442 map(0x01, 0x01).portr("IN1");
443 map(0x02, 0x02).portr("IN2").w(m_mb14241, FUNC(mb14241_device::shift_count_w));
444 map(0x03, 0x03).r(m_mb14241, FUNC(mb14241_device::shift_result_r)).w(FUNC(_8080bw_state::invadpt2_sh_port_1_w));
445 map(0x04, 0x04).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
446 map(0x05, 0x05).w(FUNC(_8080bw_state::spacerng_sh_port_2_w));
447 map(0x06, 0x06).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
448 }
449
spacerng(machine_config & config)450 void _8080bw_state::spacerng(machine_config &config)
451 {
452 invadpt2(config);
453
454 /* basic machine hardware */
455 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::spacerng_io_map);
456 }
457
458
459
460 /*******************************************************/
461 /* */
462 /* Space Wars (Sanritsu) */
463 /* */
464 /*******************************************************/
465
spcewars_io_map(address_map & map)466 void _8080bw_state::spcewars_io_map(address_map &map)
467 {
468 map(0x00, 0x00).portr("IN0");
469 map(0x01, 0x01).portr("IN1");
470 map(0x02, 0x02).portr("IN2").w(m_mb14241, FUNC(mb14241_device::shift_count_w));
471 map(0x03, 0x03).r(m_mb14241, FUNC(mb14241_device::shift_result_r)).w(FUNC(_8080bw_state::spcewars_sh_port_w));
472 map(0x04, 0x04).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
473 map(0x05, 0x05).w(FUNC(_8080bw_state::invadpt2_sh_port_2_w));
474 }
475
476
477 static INPUT_PORTS_START( spcewars )
PORT_INCLUDE(sicv)478 PORT_INCLUDE( sicv )
479
480 PORT_MODIFY("IN1")
481 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
482
483 PORT_MODIFY("IN2")
484 PORT_DIPNAME( 0x01, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1")
485 PORT_DIPSETTING( 0x00, "3" )
486 PORT_DIPSETTING( 0x01, "4" )
487 PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x00, "SW1:2" )
488 PORT_DIPNAME( 0x08, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:4")
489 PORT_DIPSETTING( 0x00, "1500" )
490 PORT_DIPSETTING( 0x08, "2000" )
491 INPUT_PORTS_END
492
493 void _8080bw_state::spcewars(machine_config &config)
494 {
495 mw8080bw_root(config);
496
497 /* basic machine hardware */
498 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::spcewars_io_map);
499 MCFG_MACHINE_START_OVERRIDE(_8080bw_state,extra_8080bw)
500
501 /* add shifter */
502 MB14241(config, m_mb14241);
503
504 /* sound hardware */
505 invaders_samples_audio(config);
506
507 /* extra audio channel */
508 SPEAKER_SOUND(config, m_speaker);
509 m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
510
511 /* video hardware */
512 m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_invaders));
513 }
514
515
516 /*******************************************************/
517 /* */
518 /* Space War (Leisure and Allied) */
519 /* */
520 /*******************************************************/
521
522 // has a slightly rearranged io map and has PROMs and watchdog
523
spcewarla_io_map(address_map & map)524 void _8080bw_state::spcewarla_io_map(address_map &map)
525 {
526 map(0x00, 0x00).portr("IN0");
527 map(0x01, 0x01).portr("IN1");
528 map(0x02, 0x02).portr("IN2");
529 map(0x04, 0x04).w(FUNC(_8080bw_state::spcewars_sh_port_w));
530 map(0x05, 0x05).w(FUNC(_8080bw_state::invadpt2_sh_port_2_w));
531 map(0x06, 0x06).r(m_mb14241, FUNC(mb14241_device::shift_result_r)).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
532 map(0x08, 0x08).w(m_mb14241, FUNC(mb14241_device::shift_count_w));
533 map(0x0c, 0x0c).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
534 }
535
spcewarla(machine_config & config)536 void _8080bw_state::spcewarla(machine_config &config)
537 {
538 spcewars(config);
539 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::spcewarla_io_map);
540
541 WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 255);
542
543 PALETTE(config, m_palette, palette_device::RBG_3BIT);
544
545 m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_invadpt2));
546 }
547
548
549 /*******************************************************/
550 /* */
551 /* Astro Sidam? */
552 /* */
553 /*******************************************************/
554
astropal_io_map(address_map & map)555 void _8080bw_state::astropal_io_map(address_map &map)
556 {
557 map.global_mask(0x7);
558 map(0x00, 0x00).mirror(0x04).portr("IN0");
559 map(0x01, 0x01).mirror(0x04).portr("IN1");
560 map(0x03, 0x03).mirror(0x04).portr("IN3");
561
562 map(0x03, 0x03).w("soundboard", FUNC(invaders_audio_device::p1_w));
563 map(0x05, 0x05).w("soundboard", FUNC(invaders_audio_device::p2_w));
564 map(0x06, 0x06).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
565 }
566
567 static INPUT_PORTS_START( astropal )
568 PORT_START("IN0")
DEF_STR(Lives)569 PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) )
570 PORT_DIPSETTING( 0x00, "2" )
571 PORT_DIPSETTING( 0x01, "3" )
572 PORT_DIPSETTING( 0x02, "4" )
573 PORT_DIPSETTING( 0x03, "5" )
574 PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED ) /* never read */
575
576 PORT_START("IN1")
577 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
578 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
579 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
580 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON2 )
581 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
582 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY
583 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY
584 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
585
586 /* PORT_START("IN2") - never read */
587
588 PORT_START("IN3")
589 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
590 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
591 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
592 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
593 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
594 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
595 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
596 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 )
597
598 /* Dummy port for cocktail mode (not used) */
599 PORT_START(INVADERS_CAB_TYPE_PORT_TAG)
600 PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNKNOWN )
601 INPUT_PORTS_END
602
603 void _8080bw_state::astropal(machine_config &config)
604 {
605 invaders(config);
606
607 /* basic machine hardware */
608 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::astropal_io_map);
609 }
610
611
612
613 /*******************************************************/
614 /* */
615 /* Cosmo */
616 /* */
617 /*******************************************************/
618
cosmo_map(address_map & map)619 void _8080bw_state::cosmo_map(address_map &map)
620 {
621 map(0x0000, 0x1fff).rom();
622 map(0x2000, 0x3fff).ram().share("main_ram");
623 map(0x4000, 0x57ff).rom();
624 map(0x5c00, 0x5fff).ram().share("colorram");
625 }
626
627 /* at least one of these MWA8_NOPs must be sound related */
cosmo_io_map(address_map & map)628 void _8080bw_state::cosmo_io_map(address_map &map)
629 {
630 map(0x00, 0x00).portr("IN0").nopw();
631 map(0x01, 0x01).portr("IN1").nopw();
632 map(0x02, 0x02).portr("IN2").nopw();
633 map(0x03, 0x03).w(FUNC(_8080bw_state::invadpt2_sh_port_1_w));
634 map(0x05, 0x05).w(FUNC(_8080bw_state::cosmo_sh_port_2_w));
635 map(0x06, 0x06).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
636 map(0x07, 0x07).nopw();
637 }
638
639
640 static INPUT_PORTS_START( cosmo )
PORT_INCLUDE(sicv)641 PORT_INCLUDE( sicv )
642
643 PORT_MODIFY("IN1")
644 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
645
646 PORT_MODIFY("IN2")
647 PORT_DIPNAME( 0x01, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1")
648 PORT_DIPSETTING( 0x00, "3" )
649 PORT_DIPSETTING( 0x01, "5" )
650 PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x00, "SW1:2" )
651 PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x00, "SW1:3" )
652 PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x00, "SW1:4" )
653 PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW1:8" ) /* must be HIGH normally or the joystick won't work */
654 INPUT_PORTS_END
655
656 void _8080bw_state::cosmo(machine_config &config)
657 {
658 mw8080bw_root(config);
659
660 /* basic machine hardware */
661 m_maincpu->set_addrmap(AS_PROGRAM, &_8080bw_state::cosmo_map);
662 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::cosmo_io_map);
663
664 WATCHDOG_TIMER(config, m_watchdog);
665 MCFG_MACHINE_START_OVERRIDE(_8080bw_state,extra_8080bw)
666
667 /* video hardware */
668 m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_cosmo));
669
670 PALETTE(config, m_palette, palette_device::RGB_3BIT);
671
672 /* sound hardware */
673 invaders_samples_audio(config);
674 }
675
676
677
678 /*******************************************************/
679 /* */
680 /* bootleg "Super Earth Invasion" */
681 /* */
682 /*******************************************************/
683
684 static INPUT_PORTS_START( searthin )
PORT_INCLUDE(sicv)685 PORT_INCLUDE( sicv )
686
687 PORT_MODIFY("IN1")
688 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
689
690 PORT_MODIFY("IN2")
691 PORT_DIPNAME( 0x01, 0x01, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1")
692 PORT_DIPSETTING( 0x00, "2" )
693 PORT_DIPSETTING( 0x01, "3" )
694 PORT_DIPNAME( 0x02, 0x02, "Pence Coinage" ) PORT_DIPLOCATION("SW1:2")
695 PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
696 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
697 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_DIPLOCATION("SW1:3") /* Pence Coin */
698 PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW1:4" ) /* Not bonus */
699 PORT_DIPNAME( 0x80, 0x80, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:8")
700 PORT_DIPSETTING( 0x00, "2C/1C 50p/3C (+ Bonus Life)" )
701 PORT_DIPSETTING( 0x80, "1C/1C 50p/5C" )
702 INPUT_PORTS_END
703
704
705
706 /*******************************************************/
707 /* */
708 /* bootleg "Super Invaders (Zenitone-Microsec)" */
709 /* */
710 /*******************************************************/
711
712 static INPUT_PORTS_START( sinvzen )
713 PORT_INCLUDE( sicv )
714
715 PORT_MODIFY("IN2")
716 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:8")
717 PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) )
718 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
719 INPUT_PORTS_END
720
721 /*******************************************************/
722 /* */
723 /* bootleg "Space Attack II" */
724 /* */
725 /*******************************************************/
726
727 static INPUT_PORTS_START( spaceat2 )
728 PORT_INCLUDE( sicv )
729
730 PORT_MODIFY("IN2")
731 PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x00, "SW1:5" )
732 PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x00, "SW1:6" )
733 PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x00, "SW1:7" )
734 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:8")
735 PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) )
736 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
737
738 /* Dummy port for cocktail mode (not used) */
739 PORT_MODIFY(INVADERS_CAB_TYPE_PORT_TAG)
740 PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNKNOWN )
741 INPUT_PORTS_END
742
743
744
745 /*******************************************************/
746 /* */
747 /* bootleg "Space Combat", 1979 */
748 /* 8080A + 18MHz XTAL, SN76477, 10MHz XTAL */
749 /* 8*8116 2KB RAM(!), 8*1KB ROM, maybe some PROMs */
750 /* */
751 /* Preliminary emulation. PCB was working fine, but */
752 /* it's not certain that this is a good dump */
753 /* */
754 /* TODO: */
755 /* - dip settings/locs need confirming */
756 /* - it doesn't have a mb14241 video shifter? */
757 /* - using space invaders audio as placeholder until */
758 /* more is known about the sound hw */
759 /* - always in cocktail mode but flipscreen not found */
760 /* */
761 /*******************************************************/
762
763 static INPUT_PORTS_START( spacecom )
764 PORT_START("IN0") // 5-pos dipsw at ic79 (row F)
765 PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
766 PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
767 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
768 PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
769 PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
770 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
771 PORT_DIPNAME( 0x04, 0x00, DEF_STR( Lives ) )
772 PORT_DIPSETTING( 0x00, "3" )
773 PORT_DIPSETTING( 0x04, "5" )
774 PORT_DIPNAME( 0x08, 0x08, DEF_STR( Bonus_Life ) )
775 PORT_DIPSETTING( 0x00, "2500" ) // not confirmed
776 PORT_DIPSETTING( 0x08, "1500" )
777 PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
778 PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
779 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
780 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
781 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2)
782 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2)
783
784 PORT_START("IN1")
785 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
786 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
787 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
788 PORT_SERVICE( 0x08, IP_ACTIVE_HIGH )
789 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
790 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 )
791 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY
792 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY
793
794 PORT_START("IN2")
795 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
796 PORT_BIT( 0xfe, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // unused?
797
798 PORT_START(CABINET_PORT_TAG) /* Dummy port for cocktail mode */
799 PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
800 INPUT_PORTS_END
801
802
803 void _8080bw_state::spacecom_map(address_map &map)
804 {
805 map(0x0000, 0x1fff).rom();
806 map(0x2000, 0x3fff).ram().share("main_ram"); // other RAM not hooked up?
807 }
808
spacecom_io_map(address_map & map)809 void _8080bw_state::spacecom_io_map(address_map &map)
810 {
811 map(0x41, 0x41).portr("IN0");
812 map(0x42, 0x42).portr("IN1").w("soundboard", FUNC(invaders_audio_device::p1_w));
813 map(0x44, 0x44).portr("IN2").w("soundboard", FUNC(invaders_audio_device::p2_w));
814 }
815
spacecom(machine_config & config)816 void _8080bw_state::spacecom(machine_config &config)
817 {
818 /* basic machine hardware */
819 I8080A(config, m_maincpu, XTAL(18'000'000) / 9); // divider guessed
820 // TODO: move irq handling away from mw8080.c, this game runs on custom hardware
821 m_maincpu->set_addrmap(AS_PROGRAM, &_8080bw_state::spacecom_map);
822 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::spacecom_io_map);
823 m_maincpu->set_irq_acknowledge_callback(FUNC(_8080bw_state::interrupt_vector));
824
825 MCFG_MACHINE_RESET_OVERRIDE(mw8080bw_state, mw8080bw)
826
827 /* video hardware */
828 SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
829 m_screen->set_raw(XTAL(18'000'000) / 3, 384, 0, 256, 260, 0, 224); // parameters guessed
830 m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_spacecom));
831
832 PALETTE(config, m_palette, palette_device::MONOCHROME);
833
834 /* sound hardware */
835 INVADERS_AUDIO(config, "soundboard"). // the flip screen line is only connected on the cocktail PCB
836 flip_screen_out().set([this] (int state) { if (invaders_is_cabinet_cocktail()) m_flip_screen = state ? 1 : 0; });
837 }
838
init_spacecom()839 void _8080bw_state::init_spacecom()
840 {
841 uint8_t *ROM = memregion("maincpu")->base();
842
843 // bad byte: should be push a at RST 10h
844 ROM[0x10] = 0xf5;
845 }
846
847
848
849 /*******************************************************/
850 /* */
851 /* Zenitone Microsec "Invaders Revenge" */
852 /* */
853 /*******************************************************/
854
invrvnge_02_r()855 uint8_t _8080bw_state::invrvnge_02_r()
856 {
857 uint8_t data = ioport("IN2")->read();
858 if (m_flip_screen) return data;
859 return (data & 0x8f) | (ioport("IN1")->read() & 0x70);
860 }
861
invrvnge_io_map(address_map & map)862 void _8080bw_state::invrvnge_io_map(address_map &map)
863 {
864 map(0x00, 0x00).portr("IN0");
865 map(0x01, 0x01).portr("IN1");
866 map(0x02, 0x02).r(FUNC(_8080bw_state::invrvnge_02_r)).w(m_mb14241, FUNC(mb14241_device::shift_count_w));
867 map(0x03, 0x03).r(m_mb14241, FUNC(mb14241_device::shift_result_r)).w(FUNC(_8080bw_state::invrvnge_port03_w));
868 map(0x04, 0x04).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
869 map(0x05, 0x05).w(FUNC(_8080bw_state::invrvnge_port05_w));
870 map(0x06, 0x06).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
871 }
872
invrvnge_sound_map(address_map & map)873 void _8080bw_state::invrvnge_sound_map(address_map &map)
874 {
875 map(0xa001, 0xa001).r("psg",FUNC(ay8910_device::data_r));
876 map(0xa002, 0xa003).w("psg",FUNC(ay8910_device::data_address_w));
877 map(0xc000, 0xc7ff).mirror(0x1800).rom();
878 map(0xe000, 0xe7ff).mirror(0x1800).rom();
879 }
880
881
882 static INPUT_PORTS_START( invrvnge )
883 PORT_START("IN0")
884 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
DEF_STR(Difficulty)885 PORT_DIPNAME( 0x06, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:5,6") // [code: 0x3b1-3b5]
886 PORT_DIPSETTING( 0x00, DEF_STR( Easy ) )
887 PORT_DIPSETTING( 0x02, DEF_STR( Hard ) )
888 PORT_DIPSETTING( 0x04, DEF_STR( Harder ) )
889 PORT_DIPSETTING( 0x06, DEF_STR( Hardest ) )
890 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // must be low or game won't boot [code: 0x1a9-1af]
891 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
892 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
893 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
894 PORT_DIPNAME( 0x80, 0x80, "Fuel Destroyed by Comet" ) PORT_DIPLOCATION("SW1:7") // [code: 0x1cb0-1cb6]
895 PORT_DIPSETTING( 0x00, "3" )
896 PORT_DIPSETTING( 0x80, "6" )
897
898 PORT_START("IN1")
899 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
900 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
901 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
902 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
903 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
904 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY
905 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY
906 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
907
908 PORT_START("IN2")
909 PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1,2")
910 PORT_DIPSETTING( 0x00, "3" )
911 PORT_DIPSETTING( 0x01, "4" )
912 PORT_DIPSETTING( 0x02, "5" )
913 PORT_DIPSETTING( 0x03, "6" )
914 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_TILT )
915 PORT_DIPNAME( 0x08, 0x08, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:4")
916 PORT_DIPSETTING( 0x00, "1500" )
917 PORT_DIPSETTING( 0x08, "2000" )
918 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
919 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2)
920 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2)
921 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:8")
922 PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) ) // 1 play 10p, 2 play 20p, 6 play 50p
923 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) // 1 play 20p, 2 play 40p, 3 play 50p
924
925 /* Dummy port for cocktail mode */
926 INVADERS_CAB_TYPE_PORT
927 INPUT_PORTS_END
928
929
930 void _8080bw_state::invrvnge(machine_config &config)
931 {
932 mw8080bw_root(config);
933
934 /* basic machine hardware */
935 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::invrvnge_io_map);
936
937 WATCHDOG_TIMER(config, m_watchdog);
938
939 // 4 MHz crystal connected directly to the CPU
940 M6802(config, m_audiocpu, XTAL(4'000'000));
941 m_audiocpu->set_addrmap(AS_PROGRAM, &_8080bw_state::invrvnge_sound_map);
942
943 /* add shifter */
944 MB14241(config, m_mb14241);
945
946 MCFG_MACHINE_START_OVERRIDE(_8080bw_state,extra_8080bw)
947
948 /* video hardware */
949 m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_invadpt2));
950
951 PALETTE(config, m_palette, palette_device::RBG_3BIT);
952
953 /* sound hardware */
954 SPEAKER(config, "mono").front_center();
955
956 // CPU E-pin connects to AY clock pin
957 ay8910_device &psg(AY8910(config, "psg", XTAL(4'000'000)/2));
958 psg.port_a_read_callback().set([this] () { return m_sound_data >> 1; });
959 psg.port_b_read_callback().set_constant(0xff);
960 psg.add_route(ALL_OUTPUTS, "mono", 0.75);
961
962 // CPU E-pin also connects to a 4040 divider. The Q8 output goes to the CPU's NMI pin.
963 TIMER(config, "nmi").configure_periodic(FUNC(_8080bw_state::nmi_timer), attotime::from_hz((XTAL(4'000'000)/2)/512));
964 }
965
init_invrvnge()966 void _8080bw_state::init_invrvnge()
967 {
968 uint8_t *rom = memregion("audiocpu")->base();
969 for (offs_t i = 0xc000; i < 0xc800; i++)
970 rom[i] = bitswap<8>(rom[i], 7, 6, 5, 3, 4, 2, 1, 0);
971 for (offs_t i = 0xe000; i < 0xe800; i++)
972 rom[i] = bitswap<8>(rom[i], 7, 6, 5, 3, 4, 2, 1, 0);
973 }
974
975
976
977 /*******************************************************/
978 /* */
979 /* Taito "Space Laser" */
980 /* */
981 /*******************************************************/
982
983 static INPUT_PORTS_START( spclaser )
984 PORT_START("IN0")
985 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN )
986 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN )
987 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
988 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
989 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
990 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
991 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
992 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
993
994 PORT_START("IN1")
995 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
996 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 ) /* This is not 2 Player ??? */
997 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
998 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
999 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
1000 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY
1001 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY
1002 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1003
1004 // TODO: figure out where dipswitch is read, it's not IN0 or IN2 in the current implementation.
1005 // ROM disassembly doesn't show any dipswitch reads on portmapped I/O, maybe the manual is for a different ROM set? (that we don't have the dump for)
1006 #if 0
1007 // these are the settings according to Gameplan Intruder manual
1008 PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1,2")
1009 PORT_DIPSETTING( 0x00, "3" )
1010 PORT_DIPSETTING( 0x01, "4" )
1011 PORT_DIPSETTING( 0x02, "5" )
1012 PORT_DIPSETTING( 0x03, "6" )
1013 PORT_SERVICE_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW1:3" )
1014 PORT_DIPNAME( 0x08, 0x08, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:4")
1015 PORT_DIPSETTING( 0x08, "1000" )
1016 PORT_DIPSETTING( 0x00, "1500" )
1017 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1018 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1019 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1020 PORT_DIPNAME( 0x80, 0x80, "Display Coinage" ) PORT_DIPLOCATION("SW:8")
1021 PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
1022 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
1023 #endif
1024
1025 PORT_START("IN2")
1026 PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x00, "SW1:1" )
1027 PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x00, "SW1:2" )
1028 PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x00, "SW1:3" )
1029 PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x00, "SW1:4" )
1030 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
1031 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2)
1032 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2)
DEF_STR(Coinage)1033 PORT_DIPNAME( 0x80, 0x00, DEF_STR(Coinage) ) PORT_DIPLOCATION("SW1:8")
1034 PORT_DIPSETTING( 0x00, "1 Coin/1 Or 2 Players" )
1035 PORT_DIPSETTING( 0x80, "1 Coin/1 Player 2 Coins/2 Players" ) /* Irrelevant, causes bugs */
1036
1037 /* Dummy port for cocktail mode (not used) */
1038 PORT_START(CABINET_PORT_TAG)
1039 PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1040 INPUT_PORTS_END
1041
1042
1043
1044 /*******************************************************/
1045 /* */
1046 /* Taito "Galaxy Wars" */
1047 /* */
1048 /*******************************************************/
1049
1050 static INPUT_PORTS_START( galxwars )
1051 PORT_INCLUDE( sicv )
1052
1053 PORT_MODIFY("IN0")
1054 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* must be IP_ACTIVE_LOW for Universal Sets */
1055
1056 PORT_MODIFY("IN1")
1057 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1058
1059 PORT_MODIFY("IN2")
1060 PORT_DIPNAME( 0x03, 0x01, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1,2")
1061 PORT_DIPSETTING( 0x00, "2" )
1062 PORT_DIPSETTING( 0x01, "3" )
1063 PORT_DIPSETTING( 0x02, "4" )
1064 PORT_DIPSETTING( 0x03, "5" )
1065 PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x00, "SW1:3" )
1066 PORT_DIPNAME( 0x08, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:4")
1067 PORT_DIPSETTING( 0x00, "3000" )
1068 PORT_DIPSETTING( 0x08, "5000" )
1069 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:8")
1070 PORT_DIPSETTING( 0x80, DEF_STR( 1C_2C ) )
1071 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
1072 INPUT_PORTS_END
1073
1074 void _8080bw_state::starw1_io_map(address_map &map)
1075 {
1076 map(0x01, 0x01).portr("IN1");
1077 map(0x02, 0x02).portr("IN2");
1078 map(0x03, 0x03).nopw(); /* writes 9B at boot */
1079 map(0x04, 0x04).w(FUNC(_8080bw_state::invadpt2_sh_port_1_w));
1080 map(0x05, 0x05).w(FUNC(_8080bw_state::invadpt2_sh_port_2_w));
1081 map(0x06, 0x06).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
1082 map(0x07, 0x07).nopw(); /* writes 89 at boot */
1083 }
1084
starw1(machine_config & config)1085 void _8080bw_state::starw1(machine_config &config)
1086 {
1087 invadpt2(config);
1088 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::starw1_io_map);
1089 }
1090
1091 /*******************************************************/
1092 /* */
1093 /* Taito "Lunar Rescue" */
1094 /* */
1095 /*******************************************************/
1096
escmars_map(address_map & map)1097 void _8080bw_state::escmars_map(address_map &map)
1098 {
1099 map(0x0000, 0x1fff).rom();
1100 map(0x2000, 0x3fff).ram().share("main_ram");
1101 map(0x4000, 0x4fff).rom();
1102 }
1103
lrescue_io_map(address_map & map)1104 void _8080bw_state::lrescue_io_map(address_map &map)
1105 {
1106 map(0x00, 0x00).portr("IN0");
1107 map(0x01, 0x01).portr("IN1");
1108 map(0x02, 0x02).portr("IN2").w(m_mb14241, FUNC(mb14241_device::shift_count_w));
1109 map(0x03, 0x03).r(m_mb14241, FUNC(mb14241_device::shift_result_r)).w(FUNC(_8080bw_state::lrescue_sh_port_1_w));
1110 map(0x04, 0x04).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
1111 map(0x05, 0x05).w(FUNC(_8080bw_state::lrescue_sh_port_2_w));
1112 }
1113
1114
1115 static INPUT_PORTS_START( lrescue )
PORT_INCLUDE(sicv)1116 PORT_INCLUDE( sicv )
1117
1118 PORT_MODIFY("IN1")
1119 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1120
1121 PORT_MODIFY("IN2")
1122 /* SW1:3-8 Unused according to manual: "Factory Adjustments". Default is ON. */
1123 PORT_DIPUNUSED_DIPLOC( 0x08, 0x00, "SW1:4" )
1124 PORT_DIPUNUSED_DIPLOC( 0x80, 0x00, "SW1:8" )
1125 INPUT_PORTS_END
1126
1127 void _8080bw_state::lrescue(machine_config &config)
1128 {
1129 mw8080bw_root(config);
1130
1131 /* basic machine hardware */
1132 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::lrescue_io_map);
1133 MCFG_MACHINE_START_OVERRIDE(_8080bw_state,extra_8080bw)
1134
1135 /* add shifter */
1136 MB14241(config, m_mb14241);
1137
1138 /* video hardware */
1139 m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_invadpt2));
1140
1141 PALETTE(config, m_palette, palette_device::RBG_3BIT);
1142
1143 /* sound hardware */
1144 SPEAKER(config, "mono").front_center();
1145
1146 SAMPLES(config, m_samples);
1147 m_samples->set_channels(4);
1148 m_samples->set_samples_names(lrescue_sample_names);
1149 m_samples->add_route(ALL_OUTPUTS, "mono", 0.75);
1150
1151 /* extra audio channel */
1152 SPEAKER_SOUND(config, m_speaker);
1153 m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
1154 }
1155
escmars(machine_config & config)1156 void _8080bw_state::escmars(machine_config &config)
1157 {
1158 /* basic machine hardware */
1159 I8080(config, m_maincpu, XTAL(18'000'000) / 10); // divider guessed
1160 m_maincpu->set_addrmap(AS_PROGRAM, &_8080bw_state::escmars_map);
1161 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::lrescue_io_map);
1162 m_maincpu->set_irq_acknowledge_callback(FUNC(_8080bw_state::interrupt_vector));
1163
1164 MCFG_MACHINE_START_OVERRIDE(_8080bw_state, extra_8080bw)
1165 MCFG_MACHINE_RESET_OVERRIDE(_8080bw_state, mw8080bw)
1166
1167 /* add shifter */
1168 MB14241(config, m_mb14241);
1169
1170 /* video hardware */
1171 SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
1172 m_screen->set_raw(MW8080BW_PIXEL_CLOCK, MW8080BW_HTOTAL, MW8080BW_HBEND, MW8080BW_HPIXCOUNT, MW8080BW_VTOTAL, MW8080BW_VBEND, MW8080BW_VBSTART);
1173 m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_mw8080bw));
1174
1175 PALETTE(config, m_palette, palette_device::MONOCHROME);
1176
1177 /* sound hardware */
1178 SPEAKER(config, "mono").front_center();
1179
1180 SAMPLES(config, m_samples);
1181 m_samples->set_channels(4);
1182 m_samples->set_samples_names(lrescue_sample_names);
1183 m_samples->add_route(ALL_OUTPUTS, "mono", 0.75);
1184
1185 /* extra audio channel */
1186 SPEAKER_SOUND(config, m_speaker);
1187 m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
1188 }
1189
1190
1191
1192 /*******************************************************/
1193 /* */
1194 /* Universal "Cosmic Monsters" */
1195 /* The dipswitches are as stated in the manual, but */
1196 /* some of them are incorrect. */
1197 /* - You need at the very least 3000 points to get */
1198 /* a bonus life. */
1199 /* - The cabinet switch does nothing in the cpu, it */
1200 /* is all done by wires. */
1201 /* */
1202 /* These issues may be due to manual/romset conflicts */
1203 /* */
1204 /*******************************************************/
1205
1206 static INPUT_PORTS_START( cosmicmo )
PORT_INCLUDE(sicv)1207 PORT_INCLUDE( sicv )
1208
1209 PORT_MODIFY("IN1")
1210 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1211
1212 PORT_MODIFY("IN2")
1213 PORT_DIPNAME( 0x03, 0x01, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1,2")
1214 PORT_DIPSETTING( 0x00, "2" )
1215 PORT_DIPSETTING( 0x01, "3" )
1216 PORT_DIPSETTING( 0x02, "4" )
1217 PORT_DIPSETTING( 0x03, "5" )
1218 PORT_DIPNAME( 0x04, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:3")
1219 PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
1220 PORT_DIPSETTING( 0x04, DEF_STR( Cocktail ) )
1221 PORT_DIPNAME( 0x08, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:4")
1222 PORT_DIPSETTING( 0x00, "1500" )
1223 PORT_DIPSETTING( 0x08, "2500" )
1224 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
1225 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2)
1226 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2)
1227 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:8")
1228 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
1229 PORT_DIPSETTING( 0x80, DEF_STR( 1C_2C ) )
1230
1231 PORT_MODIFY(CABINET_PORT_TAG)
1232 PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1233 INPUT_PORTS_END
1234
1235 void _8080bw_state::cosmicmo_io_map(address_map &map)
1236 {
1237 map.global_mask(0x7);
1238 map(0x00, 0x00).mirror(0x04).portr("IN0");
1239 map(0x01, 0x01).mirror(0x04).portr("IN1");
1240 map(0x02, 0x02).mirror(0x04).r(FUNC(_8080bw_state::invrvnge_02_r));
1241 map(0x03, 0x03).mirror(0x04).r(m_mb14241, FUNC(mb14241_device::shift_result_r));
1242
1243 map(0x02, 0x02).w(m_mb14241, FUNC(mb14241_device::shift_count_w));
1244 map(0x03, 0x03).w("soundboard", FUNC(invaders_audio_device::p1_w));
1245 map(0x04, 0x04).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
1246 map(0x05, 0x05).w("soundboard", FUNC(invaders_audio_device::p2_w));
1247 map(0x06, 0x06).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
1248 }
1249
cosmicmo(machine_config & config)1250 void _8080bw_state::cosmicmo(machine_config &config)
1251 {
1252 mw8080bw_root(config);
1253
1254 // basic machine hardware
1255 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::cosmicmo_io_map);
1256
1257 MCFG_MACHINE_START_OVERRIDE(_8080bw_state,extra_8080bw)
1258
1259 WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 255);
1260
1261 // add shifter
1262 MB14241(config, m_mb14241);
1263
1264 // sound hardware
1265 INVADERS_AUDIO(config, "soundboard").
1266 flip_screen_out().set([this] (int state) { m_flip_screen = (state && BIT(ioport("IN2")->read(), 2)) ? 1 : 0; });
1267
1268 /* video hardware */
1269 m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_invaders));
1270 }
1271
1272
1273 /*******************************************************/
1274 /* */
1275 /* Sidam "Invasion" */
1276 /* */
1277 /*******************************************************/
1278
1279 static INPUT_PORTS_START( invasion )
PORT_INCLUDE(sicv)1280 PORT_INCLUDE( sicv )
1281
1282 PORT_MODIFY("IN1")
1283 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
1284 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN2 )
1285
1286 PORT_MODIFY("IN2")
1287 /* SW1:5-8 Unused according to manual. */
1288 PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:4,3") /* Default is OFF, OFF (6) */
1289 PORT_DIPSETTING( 0x00, "3" )
1290 PORT_DIPSETTING( 0x01, "4" )
1291 PORT_DIPSETTING( 0x02, "5" )
1292 PORT_DIPSETTING( 0x03, "6" )
1293 PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW1:8" ) /* Default OFF */
1294 PORT_DIPNAME( 0x08, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:2") /* Default is ON (2500) */
1295 PORT_DIPSETTING( 0x08, "1500" )
1296 PORT_DIPSETTING( 0x00, "2500" )
1297 /* SW1:5,6,7 Default ON */
1298 PORT_DIPNAME( 0x80, 0x80, "Laser Bonus Info" ) PORT_DIPLOCATION("SW1:1") /* Default is OFF (Info on) */
1299 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
1300 PORT_DIPSETTING( 0x80, DEF_STR( On ) )
1301 INPUT_PORTS_END
1302
1303
1304
1305 /*******************************************************/
1306 /* */
1307 /* bootleg "Super Invaders" */
1308 /* */
1309 /*******************************************************/
1310
1311 static INPUT_PORTS_START( superinv )
1312 PORT_INCLUDE( sicv )
1313
1314 PORT_MODIFY("IN1")
1315 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
1316 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN2 )
1317
1318 PORT_MODIFY("IN2")
1319 PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x00, "SW1:3" )
1320 PORT_DIPNAME( 0x08, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:4")
1321 PORT_DIPSETTING( 0x08, "1500" )
1322 PORT_DIPSETTING( 0x00, "2500" )
1323 PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x00, "SW1:8" )
1324 INPUT_PORTS_END
1325
1326
1327
1328 /*******************************************************/
1329 /* */
1330 /* Nichibutsu "Rolling Crash" */
1331 /* Press left-arrow to play "Moon Base" */
1332 /* */
1333 /*******************************************************/
1334
1335 uint8_t _8080bw_state::rollingc_scattered_colorram_r(offs_t offset)
1336 {
1337 return m_scattered_colorram[(offset & 0x1f) | ((offset & 0x1f00) >> 3)];
1338 }
1339
rollingc_scattered_colorram_w(offs_t offset,uint8_t data)1340 void _8080bw_state::rollingc_scattered_colorram_w(offs_t offset, uint8_t data)
1341 {
1342 m_scattered_colorram[(offset & 0x1f) | ((offset & 0x1f00) >> 3)] = data;
1343 }
1344
rollingc_scattered_colorram2_r(offs_t offset)1345 uint8_t _8080bw_state::rollingc_scattered_colorram2_r(offs_t offset)
1346 {
1347 return m_scattered_colorram2[(offset & 0x1f) | ((offset & 0x1f00) >> 3)];
1348 }
1349
rollingc_scattered_colorram2_w(offs_t offset,uint8_t data)1350 void _8080bw_state::rollingc_scattered_colorram2_w(offs_t offset, uint8_t data)
1351 {
1352 m_scattered_colorram2[(offset & 0x1f) | ((offset & 0x1f00) >> 3)] = data;
1353 }
1354
rollingc_map(address_map & map)1355 void _8080bw_state::rollingc_map(address_map &map)
1356 {
1357 map(0x0000, 0x1fff).rom();
1358 map(0x2000, 0x3fff).ram().share("main_ram");
1359 map(0x4000, 0x5fff).rom();
1360 map(0xa000, 0xbfff).rw(FUNC(_8080bw_state::rollingc_scattered_colorram_r), FUNC(_8080bw_state::rollingc_scattered_colorram_w));
1361 map(0xe000, 0xffff).rw(FUNC(_8080bw_state::rollingc_scattered_colorram2_r), FUNC(_8080bw_state::rollingc_scattered_colorram2_w));
1362 }
1363
1364
rollingc_io_map(address_map & map)1365 void _8080bw_state::rollingc_io_map(address_map &map)
1366 {
1367 map(0x00, 0x00).portr("IN0").w(FUNC(_8080bw_state::rollingc_sh_port_w));
1368 map(0x01, 0x01).portr("IN1");
1369 map(0x02, 0x02).portr("IN2").w(m_mb14241, FUNC(mb14241_device::shift_count_w));
1370 map(0x03, 0x03).r(m_mb14241, FUNC(mb14241_device::shift_result_r)).w(FUNC(_8080bw_state::invadpt2_sh_port_1_w));
1371 map(0x04, 0x04).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
1372 map(0x05, 0x05).w(FUNC(_8080bw_state::invadpt2_sh_port_2_w));
1373 }
1374
1375
1376 static INPUT_PORTS_START( rollingc )
PORT_INCLUDE(sicv)1377 PORT_INCLUDE( sicv )
1378
1379 PORT_MODIFY("IN0")
1380 /* Duplicate control required (both must be mapped to same key for input to work for game select and in-game) */
1381 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) /* Game Select */
1382 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) /* Game Select */
1383
1384 PORT_MODIFY("IN1")
1385 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
1386
1387 PORT_MODIFY("IN2")
1388 PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x00, "SW1:4" )
1389 INPUT_PORTS_END
1390
1391 MACHINE_START_MEMBER(_8080bw_state,rollingc)
1392 {
1393 mw8080bw_state::machine_start();
1394
1395 m_scattered_colorram = std::make_unique<uint8_t []>(0x400);
1396 m_scattered_colorram2 = std::make_unique<uint8_t []>(0x400);
1397 save_pointer(&m_scattered_colorram[0], "m_scattered_colorram", 0x400);
1398 save_pointer(&m_scattered_colorram2[0], "m_scattered_colorram2", 0x400);
1399 }
1400
rollingc(machine_config & config)1401 void _8080bw_state::rollingc(machine_config &config)
1402 {
1403 mw8080bw_root(config);
1404
1405 /* basic machine hardware */
1406 m_maincpu->set_addrmap(AS_PROGRAM, &_8080bw_state::rollingc_map);
1407 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::rollingc_io_map);
1408
1409 /* add shifter */
1410 MB14241(config, m_mb14241);
1411
1412 /* video hardware */
1413 m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_rollingc));
1414
1415 PALETTE(config, m_palette, FUNC(_8080bw_state::rollingc_palette), 16);
1416
1417 /* sound hardware */
1418 invaders_samples_audio(config);
1419
1420 MCFG_MACHINE_START_OVERRIDE(_8080bw_state,rollingc)
1421 }
1422
1423
1424
1425 /*******************************************************/
1426 /* */
1427 /* Taito "Space Chaser" */
1428 /* */
1429 /*******************************************************/
1430
1431
schaser_scattered_colorram_r(offs_t offset)1432 uint8_t _8080bw_state::schaser_scattered_colorram_r(offs_t offset)
1433 {
1434 return m_scattered_colorram[(offset & 0x1f) | ((offset & 0x1f80) >> 2)];
1435 }
1436
schaser_scattered_colorram_w(offs_t offset,uint8_t data)1437 void _8080bw_state::schaser_scattered_colorram_w(offs_t offset, uint8_t data)
1438 {
1439 m_scattered_colorram[(offset & 0x1f) | ((offset & 0x1f80) >> 2)] = data;
1440 }
1441
schaser_map(address_map & map)1442 void _8080bw_state::schaser_map(address_map &map)
1443 {
1444 map(0x0000, 0x1fff).rom();
1445 map(0x2000, 0x3fff).ram().share("main_ram");
1446 map(0x4000, 0x5fff).rom();
1447 map(0xc000, 0xdfff).rw(FUNC(_8080bw_state::schaser_scattered_colorram_r), FUNC(_8080bw_state::schaser_scattered_colorram_w));
1448 }
1449
1450
schaser_io_map(address_map & map)1451 void _8080bw_state::schaser_io_map(address_map &map)
1452 {
1453 map(0x00, 0x00).portr("IN0");
1454 map(0x01, 0x01).portr("IN1");
1455 map(0x02, 0x02).portr("IN2").w(m_mb14241, FUNC(mb14241_device::shift_count_w));
1456 map(0x03, 0x03).r(m_mb14241, FUNC(mb14241_device::shift_result_r)).w(FUNC(_8080bw_state::schaser_sh_port_1_w));
1457 map(0x04, 0x04).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
1458 map(0x05, 0x05).w(FUNC(_8080bw_state::schaser_sh_port_2_w));
1459 map(0x06, 0x06).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
1460 }
1461
1462
1463 static INPUT_PORTS_START( schaser )
1464 PORT_START("IN0")
1465 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(2)
1466 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(2)
1467 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(2)
1468 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(2)
1469 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
1470 PORT_DIPNAME( 0x60, 0x00, "Hard Starting Level" ) PORT_DIPLOCATION("SW1:5,7")
1471 PORT_DIPSETTING( 0x00, "3" )
1472 PORT_DIPSETTING( 0x20, "4" )
1473 PORT_DIPSETTING( 0x40, "5" )
1474 PORT_DIPSETTING( 0x60, "6" )
1475 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
1476
1477 PORT_START("IN1")
1478 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_4WAY
1479 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY
1480 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_4WAY
1481 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_4WAY
1482 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
1483 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START2 )
1484 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START1 )
1485 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 )
1486
1487 PORT_START("IN2") // port 2
DEF_STR(Lives)1488 PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1,2")
1489 PORT_DIPSETTING( 0x00, "3" )
1490 PORT_DIPSETTING( 0x01, "4" )
1491 PORT_DIPSETTING( 0x02, "5" )
1492 PORT_DIPSETTING( 0x03, "6" )
1493 PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x00, "SW1:3" )
1494 PORT_DIPNAME( 0x08, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:4")
1495 PORT_DIPSETTING( 0x00, DEF_STR( Easy ) )
1496 PORT_DIPSETTING( 0x08, DEF_STR( Hard ) )
1497 // Name Reset - if name of high scorer was rude, owner can press this button
1498 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Name Reset") PORT_CODE(KEYCODE_F1)
1499 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_TILT )
1500 PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:6")
1501 PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
1502 PORT_DIPSETTING( 0x40, DEF_STR( Cocktail ) )
1503 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
1504
1505 PORT_START("VR1")
1506 PORT_ADJUSTER( 70, "VR1 - Music Volume" )
1507
1508 PORT_START("VR2")
1509 PORT_ADJUSTER( 90, "VR2 - Explosion/Effect Volume" )
1510
1511 PORT_START("VR3")
1512 PORT_ADJUSTER( 70, "VR3 - Dot Volume" )
1513 INPUT_PORTS_END
1514
1515
1516 static INPUT_PORTS_START( schaserm )
1517 PORT_INCLUDE( schaser )
1518
1519 PORT_MODIFY("IN2")
1520 PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1,2")
1521 PORT_DIPSETTING( 0x00, "1" )
1522 PORT_DIPSETTING( 0x01, "2" )
1523 PORT_DIPSETTING( 0x02, "3" )
1524 PORT_DIPSETTING( 0x03, "4" )
1525 INPUT_PORTS_END
1526
1527 MACHINE_START_MEMBER(_8080bw_state,schaser)
1528 {
1529 mw8080bw_state::machine_start();
1530
1531 m_scattered_colorram = std::make_unique<uint8_t []>(0x800);
1532 save_pointer(&m_scattered_colorram[0], "m_scattered_colorram", 0x800);
1533 MACHINE_START_CALL_MEMBER(schaser_sh);
1534 MACHINE_START_CALL_MEMBER(extra_8080bw_vh);
1535 }
1536
MACHINE_RESET_MEMBER(_8080bw_state,schaser)1537 MACHINE_RESET_MEMBER(_8080bw_state,schaser)
1538 {
1539 MACHINE_RESET_CALL_MEMBER(schaser_sh);
1540 MACHINE_RESET_CALL_MEMBER(mw8080bw);
1541 }
1542
schaser(machine_config & config)1543 void _8080bw_state::schaser(machine_config &config)
1544 {
1545 mw8080bw_root(config);
1546
1547 /* basic machine hardware */
1548 I8080(config.replace(), m_maincpu, 1996800); /* 19.968MHz / 10 */
1549 m_maincpu->set_addrmap(AS_PROGRAM, &_8080bw_state::schaser_map);
1550 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::schaser_io_map);
1551 m_maincpu->set_irq_acknowledge_callback(FUNC(_8080bw_state::interrupt_vector));
1552
1553 WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 255);
1554 MCFG_MACHINE_START_OVERRIDE(_8080bw_state,schaser)
1555 MCFG_MACHINE_RESET_OVERRIDE(_8080bw_state,schaser)
1556
1557 TIMER(config, "schaser_sh_555").configure_generic(FUNC(_8080bw_state::schaser_effect_555_cb));
1558
1559 /* add shifter */
1560 MB14241(config, m_mb14241);
1561
1562 /* video hardware */
1563 m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_schaser));
1564
1565 PALETTE(config, m_palette, palette_device::RBG_3BIT);
1566
1567 /* sound hardware */
1568 SPEAKER(config, "mono").front_center();
1569
1570 sn76477_device &snsnd(SN76477(config, "snsnd"));
1571 snsnd.set_noise_params(RES_K(47), RES_K(330), CAP_P(470));
1572 snsnd.set_decay_res(RES_M(2.2));
1573 snsnd.set_attack_params(CAP_U(1.0), RES_K(4.7));
1574 snsnd.set_amp_res(0);
1575 snsnd.set_feedback_res(RES_K(33));
1576 snsnd.set_vco_params(0, CAP_U(0.1), RES_K(39));
1577 snsnd.set_pitch_voltage(5.0);
1578 snsnd.set_slf_params(CAP_U(1.0), RES_K(120));
1579 snsnd.set_oneshot_params(CAP_U(0.1), RES_K(220));
1580 snsnd.set_vco_mode(1);
1581 snsnd.set_mixer_params(0, 0, 0);
1582 snsnd.set_envelope_params(1, 0);
1583 snsnd.set_enable(1);
1584 snsnd.add_route(0, "discrete", 1.0, 0);
1585
1586 DISCRETE(config, m_discrete, schaser_discrete);
1587 m_discrete->add_route(ALL_OUTPUTS, "mono", 1.0);
1588 }
1589
1590
1591
1592 /*******************************************************/
1593 /* */
1594 /* Taito "Space Chaser" (CV version) */
1595 /* */
1596 /*******************************************************/
1597
1598
schasercv_02_r()1599 uint8_t _8080bw_state::schasercv_02_r()
1600 {
1601 uint8_t data = ioport("IN2")->read();
1602 if (m_flip_screen) return data;
1603 uint8_t in1 = ioport("IN1")->read();
1604 return (data & 0x89) | (in1 & 0x70) | (BIT(in1, 3) << 1) | (BIT(in1, 7) << 2);
1605 }
1606
schasercv_io_map(address_map & map)1607 void _8080bw_state::schasercv_io_map(address_map &map)
1608 {
1609 map(0x00, 0x00).portr("IN0");
1610 map(0x01, 0x01).portr("IN1");
1611 map(0x02, 0x02).r(FUNC(_8080bw_state::schasercv_02_r)).w(m_mb14241, FUNC(mb14241_device::shift_count_w));
1612 map(0x03, 0x03).r(m_mb14241, FUNC(mb14241_device::shift_result_r)).w(FUNC(_8080bw_state::schasercv_sh_port_1_w));
1613 map(0x04, 0x04).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
1614 map(0x05, 0x05).w(FUNC(_8080bw_state::schasercv_sh_port_2_w));
1615 //map(0x06, 0x06).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
1616 }
1617
crashrd_io_map(address_map & map)1618 void _8080bw_state::crashrd_io_map(address_map &map)
1619 {
1620 map(0x01, 0x01).portr("IN1");
1621 map(0x02, 0x02).portr("IN2").w(m_mb14241, FUNC(mb14241_device::shift_count_w));
1622 map(0x03, 0x03).r(m_mb14241, FUNC(mb14241_device::shift_result_r)).w(FUNC(_8080bw_state::crashrd_port03_w));
1623 map(0x04, 0x04).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
1624 map(0x05, 0x05).w(FUNC(_8080bw_state::crashrd_port05_w));
1625 map(0x06, 0x06).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
1626 }
1627
1628
1629
1630 static INPUT_PORTS_START( schasercv )
1631 PORT_START("IN0")
1632 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1633 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1634 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1635 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1636 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1637 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1638 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1639 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1640
1641 PORT_START("IN1")
1642 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
1643 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
1644 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
1645 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_4WAY
1646 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
1647 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY
1648 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_4WAY
1649 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_4WAY
1650
1651 PORT_START("IN2")
DEF_STR(Lives)1652 PORT_DIPNAME( 0x01, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1")
1653 PORT_DIPSETTING( 0x00, "3" )
1654 PORT_DIPSETTING( 0x01, "4" )
1655 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(2) PORT_DIPLOCATION("SW1:2")
1656 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(2) PORT_DIPLOCATION("SW1:3")
1657 PORT_DIPNAME( 0x08, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:4")
1658 PORT_DIPSETTING( 0x00, DEF_STR( Easy ) )
1659 PORT_DIPSETTING( 0x08, DEF_STR( Hard ) )
1660 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_DIPLOCATION("SW1:5")
1661 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(2) PORT_DIPLOCATION("SW1:6")
1662 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(2) PORT_DIPLOCATION("SW1:7")
1663 PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x00, "SW1:8" )
1664
1665 /* Dummy port for cocktail mode */
1666 INVADERS_CAB_TYPE_PORT
1667 INPUT_PORTS_END
1668
1669 MACHINE_START_MEMBER(_8080bw_state,schasercv)
1670 {
1671 mw8080bw_state::machine_start();
1672
1673 m_scattered_colorram = std::make_unique<uint8_t []>(0x800);
1674 save_pointer(&m_scattered_colorram[0], "m_scattered_colorram", 0x800);
1675
1676 MACHINE_START_CALL_MEMBER(extra_8080bw_sh);
1677 MACHINE_START_CALL_MEMBER(extra_8080bw_vh);
1678 }
1679
schasercv(machine_config & config)1680 void _8080bw_state::schasercv(machine_config &config)
1681 {
1682 mw8080bw_root(config);
1683
1684 /* basic machine hardware */
1685 m_maincpu->set_addrmap(AS_PROGRAM, &_8080bw_state::schaser_map);
1686 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::schasercv_io_map);
1687 MCFG_MACHINE_START_OVERRIDE(_8080bw_state, schasercv)
1688
1689 /* add shifter */
1690 MB14241(config, m_mb14241);
1691
1692 /* video hardware */
1693 m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_schasercv));
1694
1695 PALETTE(config, m_palette, palette_device::RBG_3BIT);
1696
1697 /* sound hardware */
1698 invaders_samples_audio(config);
1699
1700 SPEAKER_SOUND(config, m_speaker);
1701 m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
1702 }
1703
crashrd(machine_config & config)1704 void _8080bw_state::crashrd(machine_config &config)
1705 {
1706 schaser(config);
1707 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::crashrd_io_map);
1708 }
1709
1710
1711
1712 /*******************************************************/
1713 /* */
1714 /* Taito "Straight Flush" */
1715 /* */
1716 /*******************************************************/
1717
READ_LINE_MEMBER(_8080bw_state::sflush_80_r)1718 READ_LINE_MEMBER(_8080bw_state::sflush_80_r)
1719 {
1720 return (m_screen->vpos() & 0x80) ? 1 : 0;
1721 }
1722
sflush_in0_r()1723 uint8_t _8080bw_state::sflush_in0_r()
1724 {
1725 // guess at interrupt acknowledgement
1726 if (!machine().side_effects_disabled())
1727 m_maincpu->set_input_line(0, CLEAR_LINE);
1728 return ioport("IN0")->read();
1729 }
1730
sflush_map(address_map & map)1731 void _8080bw_state::sflush_map(address_map &map)
1732 {
1733 map(0x0000, 0x1fff).ram();
1734 map(0x4000, 0x5fff).ram().share("main_ram");
1735 map(0x8008, 0x8008).portr("PADDLE");
1736 map(0x8009, 0x8009).r(m_mb14241, FUNC(mb14241_device::shift_result_r));
1737 map(0x800a, 0x800a).portr("IN2");
1738 map(0x800b, 0x800b).r(FUNC(_8080bw_state::sflush_in0_r));
1739 map(0x8018, 0x8018).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
1740 map(0x8019, 0x8019).w(m_mb14241, FUNC(mb14241_device::shift_count_w));
1741 map(0x801a, 0x801a).nopw();
1742 map(0x801c, 0x801c).nopw();
1743 map(0x801d, 0x801d).nopw();
1744 map(0xa000, 0xbfff).rw(FUNC(_8080bw_state::schaser_scattered_colorram_r), FUNC(_8080bw_state::schaser_scattered_colorram_w));
1745 map(0xd800, 0xffff).rom();
1746 }
1747
1748
1749 static INPUT_PORTS_START( sflush )
1750 PORT_START("IN0")
1751 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
1752 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START1 )
1753 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START2 )
1754 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_TILT )
DEF_STR(Cabinet)1755 PORT_DIPNAME( 0x80, 0x80, DEF_STR( Cabinet ) )
1756 PORT_DIPSETTING( 0x80, DEF_STR( Upright ) )
1757 PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
1758
1759 PORT_START("IN2")
1760 PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) )
1761 PORT_DIPSETTING( 0x00, "3" )
1762 PORT_DIPSETTING( 0x01, "4" )
1763 PORT_DIPSETTING( 0x02, "5" )
1764 PORT_DIPSETTING( 0x03, "6" )
1765 PORT_DIPNAME( 0x08, 0x00, "Hiscore" )
1766 PORT_DIPSETTING( 0x00, "0" )
1767 PORT_DIPSETTING( 0x08, "30 000" )
1768 PORT_DIPNAME( 0x40, 0x00, "Coinage Display" )
1769 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
1770 PORT_DIPSETTING( 0x40, DEF_STR( On ) )
1771 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(_8080bw_state, sflush_80_r) // 128V?
1772
1773 PORT_START("PADDLE")
1774 PORT_BIT( 0xff, 0x6a, IPT_PADDLE ) PORT_MINMAX(0x16,0xbf) PORT_SENSITIVITY(30) PORT_KEYDELTA(30) PORT_CENTERDELTA(0)
1775 INPUT_PORTS_END
1776
1777
1778 MACHINE_START_MEMBER(_8080bw_state,sflush)
1779 {
1780 mw8080bw_state::machine_start();
1781
1782 m_scattered_colorram = std::make_unique<uint8_t []>(0x800);
1783 save_pointer(&m_scattered_colorram[0], "m_scattered_colorram", 0x800);
1784 }
1785
sflush(machine_config & config)1786 void _8080bw_state::sflush(machine_config &config)
1787 {
1788 mw8080bw_root(config);
1789
1790 /* basic machine hardware */
1791 M6800(config.replace(), m_maincpu, 1500000); // ?
1792 m_maincpu->set_addrmap(AS_PROGRAM, &_8080bw_state::sflush_map);
1793
1794 MCFG_MACHINE_START_OVERRIDE(_8080bw_state,sflush)
1795
1796 /* add shifter */
1797 MB14241(config, m_mb14241);
1798
1799 /* video hardware */
1800 m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_sflush));
1801
1802 PALETTE(config, m_palette, FUNC(_8080bw_state::sflush_palette), 8);
1803 }
1804
1805
1806
1807 /*******************************************************************************************/
1808 /* */
1809 /* Taito "Lupin III" */
1810 /* */
1811 /* The rom at 5000 is optional. It contains code for colour ram, and all tunes except */
1812 /* when the moneybag has been stolen. If you remove this rom, bits 0 and 1 of port 0 */
1813 /* must be set High. The colour will then be determined by the 2 proms instead. Bit 6 */
1814 /* of port 5 will select which prom to use. */
1815 /* */
1816 /* Differences between the 2 sets: */
1817 /* - Set 2 has a language selection switch. In the Japanese position, it looks */
1818 /* the same as set 1. Set 1 is always in Japanese. */
1819 /* - Set 1, bit 6 of port 3 activates when the wife is kicking the man. */
1820 /* - The dogs and policemen are yellow in set 1, and different colours in set 2. */
1821 /* */
1822 /*******************************************************************************************/
1823
lupin3_io_map(address_map & map)1824 void _8080bw_state::lupin3_io_map(address_map &map)
1825 {
1826 map(0x00, 0x00).portr("IN0").w(FUNC(_8080bw_state::lupin3_00_w));
1827 map(0x01, 0x01).portr("IN1");
1828 map(0x02, 0x02).portr("IN2").w(m_mb14241, FUNC(mb14241_device::shift_count_w));
1829 map(0x03, 0x03).r(m_mb14241, FUNC(mb14241_device::shift_result_r)).w(FUNC(_8080bw_state::lupin3_sh_port_1_w));
1830 map(0x04, 0x04).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
1831 map(0x05, 0x05).w(FUNC(_8080bw_state::lupin3_sh_port_2_w));
1832 map(0x06, 0x06).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
1833 }
1834
1835
1836 static INPUT_PORTS_START( lupin3 )
1837 PORT_START("IN0")
1838 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
1839 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
1840 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_TILT )
1841 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_COCKTAIL
1842 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL
1843 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL
1844 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL
1845 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL
1846
1847 PORT_START("IN1")
1848 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
1849 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
1850 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
1851 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 )
1852 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_4WAY
1853 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_4WAY
1854 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY
1855 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_4WAY
1856
1857 PORT_START("IN2")
DEF_STR(Lives)1858 PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1,2")
1859 PORT_DIPSETTING( 0x00, "3" )
1860 PORT_DIPSETTING( 0x01, "4" )
1861 PORT_DIPSETTING( 0x02, "5" )
1862 PORT_DIPSETTING( 0x03, "6" )
1863 PORT_DIPNAME( 0x04, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:3")
1864 PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
1865 PORT_DIPSETTING( 0x04, DEF_STR( Cocktail ) )
1866 PORT_DIPNAME( 0x08, 0x00, "Bags To Collect" ) PORT_DIPLOCATION("SW1:4")
1867 PORT_DIPSETTING( 0x08, "2" )
1868 PORT_DIPSETTING( 0x00, "8" )
1869 PORT_DIPUNUSED_DIPLOC( 0x10, 0x00, "SW1:5" )
1870 PORT_DIPUNUSED_DIPLOC( 0x20, 0x00, "SW1:6" )
1871 PORT_DIPUNUSED_DIPLOC( 0x40, 0x00, "SW1:7" )
1872 PORT_DIPNAME(0x80, 0x00, "Invulnerability (Cheat)") PORT_DIPLOCATION("SW1:8")
1873 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
1874 PORT_DIPSETTING( 0x80, DEF_STR( On ) )
1875 INPUT_PORTS_END
1876
1877 static INPUT_PORTS_START( lupin3a )
1878 PORT_INCLUDE( lupin3 )
1879
1880 PORT_MODIFY("IN0")
1881 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* selects color mode (dynamic vs. static) */
1882 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* something has to do with sound */
1883
1884 PORT_MODIFY("IN2")
1885 PORT_DIPNAME( 0x10, 0x00, DEF_STR( Language ) ) PORT_DIPLOCATION("SW1:5")
1886 PORT_DIPSETTING( 0x00, DEF_STR( English ) )
1887 PORT_DIPSETTING( 0x10, DEF_STR( Japanese ) )
1888 INPUT_PORTS_END
1889
1890 void _8080bw_state::lupin3(machine_config &config)
1891 {
1892 mw8080bw_root(config);
1893
1894 /* basic machine hardware */
1895 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::lupin3_io_map);
1896
1897 WATCHDOG_TIMER(config, m_watchdog);
1898 MCFG_MACHINE_START_OVERRIDE(_8080bw_state,extra_8080bw)
1899
1900 /* add shifter */
1901 MB14241(config, m_mb14241);
1902
1903 /* video hardware */
1904 m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_indianbt));
1905
1906 PALETTE(config, m_palette, palette_device::RGB_3BIT);
1907
1908 /* sound hardware */
1909 SPEAKER(config, "mono").front_center();
1910
1911 sn76477_device &snsnd(SN76477(config, "snsnd"));
1912 snsnd.set_noise_params(0, 0, 0);
1913 snsnd.set_decay_res(0);
1914 snsnd.set_attack_params(0, RES_K(100));
1915 snsnd.set_amp_res(RES_K(56));
1916 snsnd.set_feedback_res(RES_K(10));
1917 snsnd.set_vco_params(0, CAP_U(0.1), RES_K(8.2));
1918 snsnd.set_pitch_voltage(5.0);
1919 snsnd.set_slf_params(CAP_U(1.0), RES_K(120));
1920 snsnd.set_oneshot_params(0, 0);
1921 snsnd.set_vco_mode(1);
1922 snsnd.set_mixer_params(0, 0, 0);
1923 snsnd.set_envelope_params(1, 0);
1924 snsnd.set_enable(1);
1925 snsnd.add_route(ALL_OUTPUTS, "mono", 0.5);
1926
1927 SAMPLES(config, m_samples);
1928 m_samples->set_channels(4);
1929 m_samples->set_samples_names(lupin3_sample_names);
1930 m_samples->add_route(ALL_OUTPUTS, "mono", 1.0);
1931
1932 DISCRETE(config, m_discrete, indianbt_discrete);
1933 m_discrete->add_route(ALL_OUTPUTS, "mono", 1.0);
1934 }
1935
lupin3a(machine_config & config)1936 void _8080bw_state::lupin3a(machine_config &config)
1937 {
1938 lupin3(config);
1939 m_maincpu->set_addrmap(AS_PROGRAM, &_8080bw_state::schaser_map);
1940
1941 MCFG_MACHINE_START_OVERRIDE(_8080bw_state,sflush)
1942
1943 /* video hardware */
1944 m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_lupin3));
1945
1946 PALETTE(config.replace(), m_palette, palette_device::RBG_3BIT);
1947 }
1948
1949
1950
1951 /*******************************************************/
1952 /* */
1953 /* Taito "Polaris" */
1954 /* */
1955 /*******************************************************/
1956
WRITE_LINE_MEMBER(_8080bw_state::polaris_60hz_w)1957 WRITE_LINE_MEMBER(_8080bw_state::polaris_60hz_w)
1958 {
1959 if (state)
1960 {
1961 m_polaris_cloud_speed++;
1962
1963 if (m_polaris_cloud_speed >= 4) /* every 4 frames - this was verified against real machine */
1964 {
1965 m_polaris_cloud_speed = 0;
1966 m_polaris_cloud_pos++;
1967 }
1968 }
1969 }
1970
MACHINE_START_MEMBER(_8080bw_state,polaris)1971 MACHINE_START_MEMBER(_8080bw_state,polaris)
1972 {
1973 mw8080bw_state::machine_start();
1974
1975 m_scattered_colorram = std::make_unique<uint8_t []>(0x800);
1976 save_pointer(&m_scattered_colorram[0], "m_scattered_colorram", 0x800);
1977 save_item(NAME(m_polaris_cloud_speed));
1978 save_item(NAME(m_polaris_cloud_pos));
1979 }
1980
polaris_port00_r()1981 uint8_t _8080bw_state::polaris_port00_r()
1982 {
1983 uint8_t data = ioport("IN0")->read();
1984 if (m_flip_screen) return data;
1985 return (data & 7) | (ioport("IN1")->read() & 0xf8);
1986 }
1987
1988 // Port 5 is used to reset the watchdog timer.
1989 // This port is also written to when the boss plane is going up and down.
1990 // If you write this value to a note ciruit similar to the music,
1991 // you will get a nice sound that accurately follows the plane.
1992 // It sounds better then the actual circuit used.
1993 // Probably an unfinished feature.
polaris_io_map(address_map & map)1994 void _8080bw_state::polaris_io_map(address_map &map)
1995 {
1996 map(0x00, 0x00).r(FUNC(_8080bw_state::polaris_port00_r)).w(m_mb14241, FUNC(mb14241_device::shift_count_w));
1997 map(0x01, 0x01).portr("IN1");
1998 map(0x02, 0x02).portr("IN2").w(FUNC(_8080bw_state::polaris_sh_port_1_w));
1999 map(0x03, 0x03).rw(m_mb14241, FUNC(mb14241_device::shift_result_r), FUNC(mb14241_device::shift_data_w));
2000 map(0x04, 0x04).w(FUNC(_8080bw_state::polaris_sh_port_2_w));
2001 map(0x05, 0x05).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
2002 map(0x06, 0x06).w(FUNC(_8080bw_state::polaris_sh_port_3_w));
2003 }
2004
2005
2006 static INPUT_PORTS_START( polaris )
2007 PORT_START("IN0")
2008 PORT_DIPUNUSED_DIPLOC( 0x01, 0x00, "SW?:1" )
2009 PORT_DIPUNUSED_DIPLOC( 0x02, 0x00, "SW?:2" )
2010 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_TILT )
2011 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
2012 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
2013 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
2014 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
2015 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
2016
2017 PORT_START("IN1")
2018 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
2019 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
2020 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
2021 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)
2022 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
2023 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
2024 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
2025 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
2026
2027 PORT_START("IN2")
DEF_STR(Lives)2028 PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1,2")
2029 PORT_DIPSETTING( 0x00, "3" )
2030 PORT_DIPSETTING( 0x01, "4" )
2031 PORT_DIPSETTING( 0x02, "5" )
2032 PORT_DIPSETTING( 0x03, "6" )
2033 PORT_DIPNAME( 0x04, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:3")
2034 PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
2035 PORT_DIPSETTING( 0x04, DEF_STR( Cocktail ) )
2036 PORT_DIPNAME( 0x08, 0x00, "Invincible Test" ) PORT_DIPLOCATION("SW1:4")
2037 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
2038 PORT_DIPSETTING( 0x08, DEF_STR( On ) )
2039 /* The Demo Sounds dip switch does function.
2040 It allows the sonar sounds to play in demo mode. */
2041 PORT_DIPNAME( 0x10, 0x10, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:5")
2042 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
2043 PORT_DIPSETTING( 0x10, DEF_STR( On ) )
2044 PORT_DIPUNUSED_DIPLOC( 0x20, 0x00, "SW1:6" )
2045 PORT_DIPUNUSED_DIPLOC( 0x40, 0x00, "SW1:7" )
2046 PORT_DIPNAME( 0x80, 0x00, "High Score Preset Mode" ) PORT_DIPLOCATION("SW1:8")
2047 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
2048 PORT_DIPSETTING( 0x80, DEF_STR( On ) )
2049
2050 PORT_START("VR1")
2051 PORT_ADJUSTER( 80, "Sub Volume VR1" )
2052
2053 PORT_START("VR2")
2054 PORT_ADJUSTER( 70, "Sub Volume VR2" )
2055
2056 PORT_START("VR3")
2057 PORT_ADJUSTER( 90, "Sub Volume VR3" )
2058 INPUT_PORTS_END
2059
2060 void _8080bw_state::polaris(machine_config &config)
2061 {
2062 mw8080bw_root(config);
2063
2064 /* basic machine hardware */
2065 m_maincpu->set_addrmap(AS_PROGRAM, &_8080bw_state::schaser_map);
2066 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::polaris_io_map);
2067
2068 WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 255);
2069
2070 MCFG_MACHINE_START_OVERRIDE(_8080bw_state,polaris)
2071
2072 /* add shifter */
2073 MB14241(config, m_mb14241);
2074
2075 /* video hardware */
2076 m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_polaris));
2077 m_screen->screen_vblank().set(FUNC(_8080bw_state::polaris_60hz_w));
2078
2079 PALETTE(config, m_palette, palette_device::RBG_3BIT);
2080
2081 /* sound hardware */
2082 SPEAKER(config, "mono").front_center();
2083
2084 DISCRETE(config, m_discrete, polaris_discrete);
2085 m_discrete->add_route(ALL_OUTPUTS, "mono", 1.0);
2086 }
2087
2088
2089
2090 /*******************************************************/
2091 /* */
2092 /* Taito "Ozma Wars" */
2093 /* */
2094 /*******************************************************/
2095
2096 static INPUT_PORTS_START( ozmawars )
PORT_INCLUDE(sicv)2097 PORT_INCLUDE( sicv )
2098
2099 PORT_MODIFY("IN1")
2100 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
2101
2102 PORT_MODIFY("IN2")
2103 PORT_DIPNAME( 0x03, 0x00, "Energy" ) PORT_DIPLOCATION("SW1:1,2")
2104 PORT_DIPSETTING( 0x00, "15000" )
2105 PORT_DIPSETTING( 0x01, "20000" )
2106 PORT_DIPSETTING( 0x02, "25000" )
2107 PORT_DIPSETTING( 0x03, "35000" )
2108 PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x00, "SW1:3" )
2109 PORT_DIPNAME( 0x08, 0x00, "Bonus Energy" ) PORT_DIPLOCATION("SW1:4")
2110 PORT_DIPSETTING( 0x00, "15000" )
2111 PORT_DIPSETTING( 0x08, "10000" )
2112 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:8")
2113 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
2114 PORT_DIPSETTING( 0x80, DEF_STR( 1C_2C ) )
2115 INPUT_PORTS_END
2116
2117
2118 static INPUT_PORTS_START( spaceph )
2119 PORT_INCLUDE( ozmawars )
2120
2121 PORT_MODIFY("IN1")
2122 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
2123 INPUT_PORTS_END
2124
2125
2126
2127 /*******************************************************/
2128 /* */
2129 /* Emag "Super Invaders" */
2130 /* */
2131 /*******************************************************/
2132
2133 static INPUT_PORTS_START( sinvemag )
2134 PORT_INCLUDE( sicv )
2135
2136 PORT_MODIFY("IN1")
2137 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
2138
2139 PORT_MODIFY("IN2")
2140 PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x00, "SW1:3" )
2141 PORT_DIPNAME( 0x08, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:4")
2142 PORT_DIPSETTING( 0x08, "2000" )
2143 PORT_DIPSETTING( 0x00, "3000" )
2144 INPUT_PORTS_END
2145
2146
2147
2148 /*******************************************************/
2149 /* */
2150 /* Jatre Specter (Taito?) */
2151 /* */
2152 /*******************************************************/
2153
2154 static INPUT_PORTS_START( jspecter )
2155 PORT_INCLUDE( sicv )
2156
2157 PORT_MODIFY("IN1")
2158 // Hold right when starting game to play game B
2159 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(1)
2160 PORT_MODIFY("IN2")
2161 PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x00, "SW1:3" )
2162 INPUT_PORTS_END
2163
2164
2165
2166 /*******************************************************/
2167 /* */
2168 /* Taito "Balloon Bomber" */
2169 /* */
2170 /*******************************************************/
2171
2172 void _8080bw_state::ballbomb_io_map(address_map &map)
2173 {
2174 map(0x00, 0x00).portr("IN0");
2175 map(0x01, 0x01).portr("IN1").w(FUNC(_8080bw_state::ballbomb_01_w));
2176 map(0x02, 0x02).portr("IN2").w(m_mb14241, FUNC(mb14241_device::shift_count_w));
2177 map(0x03, 0x03).r(m_mb14241, FUNC(mb14241_device::shift_result_r)).w(FUNC(_8080bw_state::ballbomb_sh_port_1_w));
2178 map(0x04, 0x04).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
2179 map(0x05, 0x05).w(FUNC(_8080bw_state::ballbomb_sh_port_2_w));
2180 }
2181
2182
2183 static INPUT_PORTS_START( ballbomb )
PORT_INCLUDE(sicv)2184 PORT_INCLUDE( sicv )
2185
2186 PORT_MODIFY("IN1")
2187 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
2188
2189 PORT_MODIFY("IN2")
2190 PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x00, "SW1:4" )
2191 PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x00, "SW1:8" )
2192 INPUT_PORTS_END
2193
2194 void _8080bw_state::ballbomb(machine_config &config)
2195 {
2196 mw8080bw_root(config);
2197
2198 /* basic machine hardware */
2199 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::ballbomb_io_map);
2200 MCFG_MACHINE_START_OVERRIDE(_8080bw_state,extra_8080bw)
2201
2202 /* add shifter */
2203 MB14241(config, m_mb14241);
2204
2205 /* video hardware */
2206 m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_ballbomb));
2207
2208 PALETTE(config, m_palette, palette_device::RBG_3BIT);
2209
2210 /* sound hardware */
2211 invaders_samples_audio(config);
2212
2213 DISCRETE(config, m_discrete, ballbomb_discrete);
2214 m_discrete->add_route(ALL_OUTPUTS, "mono", 1.0);
2215 }
2216
2217
2218
2219 /*******************************************************/
2220 /* */
2221 /* Wing "Yosaku To Donbei" */
2222 /* */
2223 /*******************************************************/
2224
yosakdon_map(address_map & map)2225 void _8080bw_state::yosakdon_map(address_map &map)
2226 {
2227 map(0x0000, 0x1fff).rom();
2228 map(0x2000, 0x3fff).ram().share("main_ram");
2229 map(0x4000, 0x43ff).writeonly(); /* what's this? */
2230 }
2231
yosakdon_io_map(address_map & map)2232 void _8080bw_state::yosakdon_io_map(address_map &map)
2233 {
2234 map(0x01, 0x01).portr("IN0");
2235 map(0x02, 0x02).portr("IN1");
2236 map(0x03, 0x03).w(FUNC(_8080bw_state::yosakdon_sh_port_1_w));
2237 map(0x05, 0x05).w(FUNC(_8080bw_state::yosakdon_sh_port_2_w));
2238 map(0x06, 0x06).nopw(); /* character numbers */
2239 }
2240
2241
2242 static INPUT_PORTS_START( yosakdon )
2243 PORT_START("IN0")
2244 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
2245 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
2246 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
2247 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_CUSTOM_MEMBER(mw8080bw_state,invaders_in1_control_r)2248 PORT_BIT( 0x70, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, invaders_in1_control_r)
2249 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
2250
2251 PORT_START("IN1")
2252 PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) )
2253 PORT_DIPSETTING( 0x00, "3" )
2254 PORT_DIPSETTING( 0x01, "4" )
2255 PORT_DIPSETTING( 0x02, "5" )
2256 PORT_DIPSETTING( 0x03, "6" )
2257 PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
2258 PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
2259 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
2260 PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
2261 PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
2262 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
2263 PORT_BIT( 0x70, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, invaders_in2_control_r)
2264 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
2265
2266 /* Dummy controls port, P1 */
2267 INVADERS_CONTROL_PORT_P1
2268 INVADERS_CONTROL_PORT_P2
2269
2270 /* Dummy port for cocktail mode (not used) */
2271 INVADERS_CAB_TYPE_PORT
2272 INPUT_PORTS_END
2273
2274
2275 void _8080bw_state::yosakdon(machine_config &config)
2276 {
2277 mw8080bw_root(config);
2278
2279 /* basic machine hardware */
2280 m_maincpu->set_addrmap(AS_PROGRAM, &_8080bw_state::yosakdon_map);
2281 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::yosakdon_io_map);
2282 MCFG_MACHINE_START_OVERRIDE(_8080bw_state,extra_8080bw)
2283
2284 /* sound hardware */
2285 invaders_samples_audio(config);
2286
2287 /* video hardware */
2288 m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_invaders));
2289 }
2290
2291
2292
2293 /*******************************************************/
2294 /* */
2295 /* Taito "Indian battle" */
2296 /* In "indianbtbr", the "number of animals" dipswitch */
2297 /* is ineffective because they compare for 8 kills at */
2298 /* 0x811, which is not possible. This byte should be */
2299 /* 0x03. */
2300 /* */
2301 /*******************************************************/
2302
2303 static INPUT_PORTS_START( indianbt )
2304 PORT_START("IN1")
2305 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
2306 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
2307 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
2308 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
2309 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
2310 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY
2311 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY
2312 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
2313
2314 PORT_START("IN2")
DEF_STR(Lives)2315 PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) )
2316 PORT_DIPSETTING( 0x00, "3" )
2317 PORT_DIPSETTING( 0x01, "4" )
2318 PORT_DIPSETTING( 0x02, "5" )
2319 PORT_DIPSETTING( 0x03, "6" )
2320 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_TILT )
2321 PORT_DIPNAME( 0x08, 0x00, "Number of Catch Animals" )
2322 PORT_DIPSETTING( 0x00, "6" )
2323 PORT_DIPSETTING( 0x08, "3" )
2324 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
2325 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2)
2326 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2)
2327 PORT_DIPNAME(0x80, 0x00, "Invulnerability (Cheat)")
2328 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
2329 PORT_DIPSETTING( 0x80, DEF_STR( On ) )
2330
2331 /* Dummy port for cocktail mode */
2332 INVADERS_CAB_TYPE_PORT
2333 INPUT_PORTS_END
2334
2335 static INPUT_PORTS_START( indianbtbr )
2336 PORT_START("IN0")
2337 PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) )
2338 PORT_DIPSETTING( 0x00, "3" )
2339 PORT_DIPSETTING( 0x01, "4" )
2340 PORT_DIPSETTING( 0x02, "5" )
2341 PORT_DIPSETTING( 0x03, "6" )
2342 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
2343 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
2344 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
2345 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) //Enable color map to be in C400-DFFF
2346 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
2347 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) //Length of manufacturer's logo (0x11 or 0x16)
2348
2349 PORT_START("IN1")
2350 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
2351 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
2352 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
2353 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
2354 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
2355 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY
2356 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY
2357 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
2358
2359 PORT_START("IN2")
2360 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
2361 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
2362 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
2363 PORT_DIPNAME(0x08, 0x00, "Invulnerability (Cheat)")
2364 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
2365 PORT_DIPSETTING( 0x08, DEF_STR( On ) )
2366 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
2367 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2)
2368 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2)
2369 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
2370
2371 /* Dummy port for cocktail mode */
2372 INVADERS_CAB_TYPE_PORT
2373 INPUT_PORTS_END
2374
2375
2376 /*
2377 Protection / sound hw checks ?
2378
2379 ld a ,$b
2380 out ($03),a
2381 out ($01),a
2382 in a,($00)
2383 and $f0
2384 cp $10
2385 jp nz,$3000
2386 ld a,$03
2387 out ($03),a
2388 out ($01),a
2389 in a,($00)
2390 jp $5de7
2391 and $f0
2392 jp z,$052b
2393 jp $3000
2394
2395 */
2396
2397 uint8_t _8080bw_state::indianbt_r()
2398 {
2399 switch(m_maincpu->pc())
2400 {
2401 case 0x5fed: return 0x10;
2402 case 0x5ffc: return 0;
2403 }
2404 logerror("unknown port 0 read @ %x\n",m_maincpu->pc());
2405 return machine().rand();
2406 }
2407
indianbtbr_01_r()2408 uint8_t _8080bw_state::indianbtbr_01_r()
2409 {
2410 uint8_t data = ioport("IN1")->read();
2411 if (!m_flip_screen) return data;
2412 return (data & 0x8f) | (ioport("IN2")->read() & 0x70);
2413 }
2414
indianbt_io_map(address_map & map)2415 void _8080bw_state::indianbt_io_map(address_map &map)
2416 {
2417 map(0x00, 0x00).r(FUNC(_8080bw_state::indianbt_r));
2418 map(0x01, 0x01).portr("IN1");
2419 map(0x02, 0x02).r(FUNC(_8080bw_state::invrvnge_02_r)).w(m_mb14241, FUNC(mb14241_device::shift_count_w));
2420 map(0x03, 0x03).r(m_mb14241, FUNC(mb14241_device::shift_result_r)).w(FUNC(_8080bw_state::indianbt_sh_port_1_w));
2421 map(0x04, 0x04).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
2422 map(0x05, 0x05).w(FUNC(_8080bw_state::indianbt_sh_port_2_w));
2423 map(0x06, 0x06).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
2424 map(0x07, 0x07).w(FUNC(_8080bw_state::indianbt_sh_port_3_w));
2425 }
2426
indianbtbr_io_map(address_map & map)2427 void _8080bw_state::indianbtbr_io_map(address_map &map)
2428 {
2429 map(0x00, 0x00).portr("IN0");
2430 map(0x01, 0x01).r(FUNC(_8080bw_state::indianbtbr_01_r));
2431 map(0x02, 0x02).portr("IN2").w(m_mb14241, FUNC(mb14241_device::shift_count_w));
2432 map(0x03, 0x03).r(m_mb14241, FUNC(mb14241_device::shift_result_r)).w(FUNC(_8080bw_state::indianbtbr_sh_port_1_w));
2433 map(0x04, 0x04).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
2434 map(0x05, 0x05).w(FUNC(_8080bw_state::indianbtbr_sh_port_2_w));
2435 map(0x06, 0x06).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
2436 map(0x07, 0x07).nopw();
2437 }
2438
2439
indianbt(machine_config & config)2440 void _8080bw_state::indianbt(machine_config &config)
2441 {
2442 mw8080bw_root(config);
2443
2444 /* basic machine hardware */
2445 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::indianbt_io_map);
2446
2447 WATCHDOG_TIMER(config, m_watchdog);
2448 MCFG_MACHINE_START_OVERRIDE(_8080bw_state,extra_8080bw)
2449
2450 /* add shifter */
2451 MB14241(config, m_mb14241);
2452
2453 /* video hardware */
2454 m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_indianbt));
2455
2456 PALETTE(config, m_palette, palette_device::RGB_3BIT);
2457
2458 /* sound hardware */
2459 invaders_samples_audio(config);
2460
2461 DISCRETE(config, m_discrete, indianbt_discrete);
2462 m_discrete->add_route(ALL_OUTPUTS, "mono", 0.25);
2463 }
2464
indianbtbr(machine_config & config)2465 void _8080bw_state::indianbtbr(machine_config &config)
2466 {
2467 mw8080bw_root(config);
2468
2469 /* basic machine hardware */
2470 m_maincpu->set_addrmap(AS_PROGRAM, &_8080bw_state::schaser_map);
2471 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::indianbtbr_io_map);
2472
2473 WATCHDOG_TIMER(config, m_watchdog);
2474 MCFG_MACHINE_START_OVERRIDE(_8080bw_state,extra_8080bw)
2475
2476 /* add shifter */
2477 MB14241(config, m_mb14241);
2478
2479 /* video hardware */
2480 m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_indianbt));
2481
2482 PALETTE(config, m_palette, palette_device::RGB_3BIT);
2483
2484 /* sound hardware */
2485 invaders_samples_audio(config);
2486 }
2487
2488
2489
2490 /*******************************************************/
2491 /* */
2492 /* Taito "Steel Worker" */
2493 /* */
2494 /*******************************************************/
2495
steelwkr_sh_port_3_w(uint8_t data)2496 void _8080bw_state::steelwkr_sh_port_3_w(uint8_t data)
2497 {
2498 machine().bookkeeping().coin_lockout_global_w(!(~data & 0x03)); /* possibly */
2499 }
2500
steelwkr_io_map(address_map & map)2501 void _8080bw_state::steelwkr_io_map(address_map &map)
2502 {
2503 map(0x01, 0x01).portr("IN1");
2504 map(0x02, 0x02).r(FUNC(_8080bw_state::invrvnge_02_r)).w(m_mb14241, FUNC(mb14241_device::shift_count_w));
2505 map(0x03, 0x03).r(m_mb14241, FUNC(mb14241_device::shift_result_r)).w(FUNC(_8080bw_state::invadpt2_sh_port_1_w));
2506 map(0x04, 0x04).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
2507 map(0x05, 0x05).w(FUNC(_8080bw_state::invadpt2_sh_port_2_w));
2508 map(0x06, 0x06).w(FUNC(_8080bw_state::steelwkr_sh_port_3_w));
2509 }
2510
2511 static INPUT_PORTS_START( steelwkr )
2512 /* PORT_START("IN0") - never read */
2513
2514 PORT_START("IN1")
2515 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
2516 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
2517 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
2518 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
2519 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
2520 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY
2521 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY
2522 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 )
2523
2524 PORT_START("IN2")
DEF_STR(Lives)2525 PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1,2")
2526 PORT_DIPSETTING( 0x00, "1" )
2527 PORT_DIPSETTING( 0x01, "2" )
2528 PORT_DIPSETTING( 0x02, "3" )
2529 PORT_DIPSETTING( 0x03, "4" )
2530 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_TILT ) PORT_DIPLOCATION("SW1:3")
2531 PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x00, "SW1:4" )
2532 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
2533 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2)
2534 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2)
2535 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
2536
2537 /* Dummy port for cocktail mode */
2538 INVADERS_CAB_TYPE_PORT
2539 INPUT_PORTS_END
2540
2541
2542 void _8080bw_state::steelwkr(machine_config &config)
2543 {
2544 mw8080bw_root(config);
2545
2546 /* basic machine hardware */
2547 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::steelwkr_io_map);
2548
2549 MCFG_MACHINE_START_OVERRIDE(_8080bw_state,extra_8080bw)
2550
2551 /* add shifter */
2552 MB14241(config, m_mb14241);
2553
2554 /* video hardware */
2555 m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_invadpt2));
2556
2557 PALETTE(config, m_palette, palette_device::RBG_3BIT);
2558
2559 /* sound hardware */
2560 invaders_samples_audio(config);
2561 }
2562
2563
2564
2565 /*****************************************************
2566
2567 Guru Readme for Shuttle Invader (Omori 1979)
2568
2569 PCB Layout
2570 ----------
2571
2572 OEC-3C
2573 |----------------------------------------------------------|
2574 | LM556 DIP16 |
2575 |VR1 |
2576 | LM458 SN76477 |
2577 |VR2 5.545MHz |
2578 | LM380 |
2579 | 4045 4045 |
2580 | 2.11C 1.13C |
2581 | 18MHz 4027 4027 4027 4027 |
2582 | 4.11D 3.13D |
2583 | AM8224 4027 4027 4027 4027 |
2584 | i8080 DIP24 5.13E |
2585 | DSW 4027 4027 4027 4027 |
2586 | |
2587 |SN75452 SN75452 8.11F 4027 4027 4027 4027 |
2588 | CN2 8216 8216 CN1 |
2589 |----------------------------------------------------------|
2590 Notes:
2591 i8080 - Intel 8080 CPU. Clock input 2.000MHz [18/9]. Note the /9 comes from the AM8224
2592 SN76477 - Texas Instruments SN76477 Complex Sound Generator
2593 SN75452 - Texas Instruments SN75452 Dual High Speed High Current Peripheral Driver
2594 8216 - NEC uPB8216 4 Bit Parallel Bi-Directional Bus Driver
2595 4045 - Texas Instruments TMS4045 1k x 4-bit Static RAM (Work RAM)
2596 4027 - Motorola MCM4027 4k x 1-bit Dynamic RAM (Video RAM)
2597 AM8224 - AMD AM8224 Clock Generator and Driver for 8080-Compatible Microprocessors
2598 DIP16 - DIP16 socket for connection of 16-wire flat cable joining to OEC-4A PCB
2599 LM556 - Texas Instruments LM556 Dual Timer
2600 LM458 - Texas Instruments LM458 Low Power Dual Operational Amplifier
2601 LM380 - Texas Instruments LM380 2.5W Audio Power Amplifier
2602 CN1 - 11-pin Power Input Connector. Pinout (left to right) is GND,GND,GND,+5V,+5V,+5V,+12V,+12V,+12V,[SPACE],-5V
2603 CN2 - 25-pin Connector for Control Inputs/Audio Output etc.
2604 VR1 - Potentiometer (Master Volume)
2605 VR2 - Potentiometer (volume of other sounds? maybe background sounds?)
2606 DSW - 8-position DIP Switch
2607
2608 Additional PCB (more sounds?)
2609 --------------
2610
2611 OEC-4A
2612 |-------------------|
2613 | VR1 74121 |
2614 | 7400 7404 74S287 |
2615 |75452 CN2 CN1 LM723|
2616 |75452 |
2617 | |
2618 |--| 22-WAY |--|
2619 |-------------|
2620 Notes: (All IC's shown)
2621 LM723 - Texas Instruments LM723 Voltage Regulator
2622 74S287 - Texas Instruments SN74S287 256-bit x 4-bit Bi-Polar PROM at location 2B
2623 75452 - Texas Instruments SN75452 Dual High Speed High Current Peripheral Driver
2624 VR1 - Potentiometer connected to LM723 pin 5
2625 CN1 - DIP16 socket for connection of 16-wire flat cable joining to Main PCB
2626 CN2 - Empty DIP16 socket
2627 22-WAY - Single-Sided 22-WAY Card Edge Connector. Has many tracks coming from it, as well as power.
2628 It's purpose and what it plugs into is unknown.
2629
2630 ******************************************************/
2631
2632 static INPUT_PORTS_START( shuttlei )
2633 PORT_START("DSW")
DEF_STR(Coinage)2634 PORT_DIPNAME( 0x01, 0x00, DEF_STR( Coinage ) )
2635 PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) )
2636 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
2637 PORT_DIPNAME( 0x06, 0x00, DEF_STR( Lives ) )
2638 PORT_DIPSETTING( 0x00, "3" )
2639 PORT_DIPSETTING( 0x02, "4" )
2640 PORT_DIPSETTING( 0x04, "5" )
2641 PORT_DIPSETTING( 0x06, "6" )
2642 PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
2643 PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
2644 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
2645 PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
2646 PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
2647 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
2648 PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
2649 PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
2650 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
2651 PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
2652 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
2653 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
2654 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
2655 PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
2656 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
2657
2658 PORT_START("INPUTS")
2659 PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) )
2660 PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
2661 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
2662 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
2663 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 )
2664 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN1 )
2665 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START1 )
2666 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START2 )
2667 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(1)
2668 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(1)
2669
2670 PORT_START("P2")
2671 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
2672 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2)
2673 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2)
2674
2675 /* Dummy port for cocktail mode */
2676 INVADERS_CAB_TYPE_PORT
2677 INPUT_PORTS_END
2678
2679 // 'no 1' which is displayed before each player plays actually refers to the wave number, not the player number!
2680 static INPUT_PORTS_START( skylove )
2681 PORT_START("DSW")
2682 PORT_DIPNAME( 0x01, 0x00, DEF_STR( Coinage ) )
2683 PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) )
2684 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
2685 PORT_DIPNAME( 0x06, 0x00, DEF_STR( Lives ) )
2686 PORT_DIPSETTING( 0x00, "3" )
2687 PORT_DIPSETTING( 0x02, "4" )
2688 PORT_DIPSETTING( 0x04, "5" )
2689 PORT_DIPSETTING( 0x06, "6" )
2690 PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
2691 PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
2692 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
2693 PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
2694 PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
2695 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
2696 PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
2697 PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
2698 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
2699 PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
2700 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
2701 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
2702 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
2703 PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
2704 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
2705
2706 PORT_START("INPUTS")
2707 PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
2708 PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) // must be off to boot
2709 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
2710 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
2711 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 )
2712 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN1 )
2713 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START1 )
2714 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START2 )
2715 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(1)
2716 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(1)
2717
2718 PORT_START("P2")
2719 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
2720 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2)
2721 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2)
2722
2723 /* Dummy port for cocktail mode */
2724 INVADERS_CAB_TYPE_PORT
2725 INPUT_PORTS_END
2726
2727 uint8_t _8080bw_state::shuttlei_ff_r()
2728 {
2729 uint8_t data = ioport("INPUTS")->read();
2730 if (!m_flip_screen) return data;
2731 return (data & 0x3b) | ioport("P2")->read();
2732 }
2733
shuttlei_ff_w(uint8_t data)2734 void _8080bw_state::shuttlei_ff_w(uint8_t data)
2735 {
2736 /* bit 0 goes high when first coin inserted
2737 bit 1 also goes high when subsequent coins are inserted
2738 These may be for indicator lamps under the start buttons.
2739 bit 2 goes high while player 2 is playing
2740 */
2741 m_flip_screen = BIT(data, 2) & BIT(ioport(CABINET_PORT_TAG)->read(), 0);
2742 }
2743
shuttlei_map(address_map & map)2744 void _8080bw_state::shuttlei_map(address_map &map)
2745 {
2746 map(0x0000, 0x1fff).rom();
2747 map(0x2000, 0x37ff).ram().share("main_ram");
2748 map(0x3800, 0x3fff).ram();
2749 map(0x4000, 0x43ff).ram().share("share1"); // shuttlei
2750 map(0x6000, 0x63ff).ram().share("share1"); // skylove (is it mirrored, or different PCB hookup?)
2751 }
2752
shuttlei_io_map(address_map & map)2753 void _8080bw_state::shuttlei_io_map(address_map &map)
2754 {
2755 map(0xfc, 0xfc).nopw(); /* game writes 0xAA every so often (perhaps when base hit?) */
2756 map(0xfd, 0xfd).w(FUNC(_8080bw_state::shuttlei_sh_port_1_w));
2757 map(0xfe, 0xfe).portr("DSW").w(FUNC(_8080bw_state::shuttlei_sh_port_2_w));
2758 map(0xff, 0xff).rw(FUNC(_8080bw_state::shuttlei_ff_r), FUNC(_8080bw_state::shuttlei_ff_w));
2759 }
2760
2761
shuttlei(machine_config & config)2762 void _8080bw_state::shuttlei(machine_config &config)
2763 {
2764 /* basic machine hardware */
2765 I8080(config, m_maincpu, XTAL(18'000'000) / 9);
2766 // TODO: move irq handling away from mw8080.cpp, this game runs on custom hardware
2767 m_maincpu->set_addrmap(AS_PROGRAM, &_8080bw_state::shuttlei_map);
2768 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::shuttlei_io_map);
2769 m_maincpu->set_irq_acknowledge_callback(FUNC(_8080bw_state::interrupt_vector));
2770
2771 MCFG_MACHINE_START_OVERRIDE(_8080bw_state, extra_8080bw)
2772 MCFG_MACHINE_RESET_OVERRIDE(_8080bw_state, mw8080bw)
2773
2774 /* video hardware */
2775 SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
2776 m_screen->set_refresh_hz(60);
2777 m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500));
2778 m_screen->set_size(32*8, 32*8);
2779 m_screen->set_visarea(0*8, 32*8-1, 0*8, 24*8-1);
2780 m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_shuttlei));
2781
2782 PALETTE(config, m_palette, palette_device::MONOCHROME);
2783
2784 /* sound hardware */
2785 invaders_samples_audio(config);
2786 }
2787
2788
2789
2790 /*
2791
2792 ------------------------------------
2793 Darth Vader - Space Invaders bootleg
2794 ------------------------------------
2795
2796 Location Device File ID Checksum
2797 --------------------------------------------
2798 0 2708 ROM0 6F9A
2799 1 2708 ROM1 7D2A
2800 2 2708 ROM2 67AA
2801 3 2708 ROM3 7D8D
2802 4 2708 ROM4 493D
2803 5 2708 ROM5 12CE
2804
2805
2806 Notes: PCB No. DV-SI-7811M2a
2807 CPU - 8080
2808
2809 Another (same checksums) dump came from board labeled SI-7811M-2
2810
2811 */
2812
MACHINE_START_MEMBER(_8080bw_state,darthvdr)2813 MACHINE_START_MEMBER(_8080bw_state,darthvdr)
2814 {
2815 /* do nothing for now - different interrupt system */
2816 m_fleet_step = 3;
2817 }
2818
2819
MACHINE_RESET_MEMBER(_8080bw_state,darthvdr)2820 MACHINE_RESET_MEMBER(_8080bw_state,darthvdr)
2821 {
2822 /* do nothing for now - different interrupt system */
2823 }
2824
IRQ_CALLBACK_MEMBER(_8080bw_state::darthvdr_interrupt_vector)2825 IRQ_CALLBACK_MEMBER(_8080bw_state::darthvdr_interrupt_vector)
2826 {
2827 m_maincpu->set_input_line(0, CLEAR_LINE);
2828 return 0xff;
2829 }
2830
darthvdr_01_r()2831 uint8_t _8080bw_state::darthvdr_01_r()
2832 {
2833 uint8_t data = ioport("P2")->read();
2834 if (m_flip_screen) return data;
2835 return (data & 0xe1) | (ioport("P1")->read() & 0x0e);
2836 }
2837
darthvdr_map(address_map & map)2838 void _8080bw_state::darthvdr_map(address_map &map)
2839 {
2840 map(0x0000, 0x17ff).rom();
2841 map(0x1800, 0x1fff).ram();
2842 map(0x4000, 0x5fff).ram().share("main_ram");
2843 }
2844
darthvdr_io_map(address_map & map)2845 void _8080bw_state::darthvdr_io_map(address_map &map)
2846 {
2847 map(0x00, 0x00).portr("P1");
2848 map(0x01, 0x01).r(FUNC(_8080bw_state::darthvdr_01_r));
2849
2850 map(0x00, 0x00).w(FUNC(_8080bw_state::darthvdr_00_w)); // flipscreen
2851 map(0x04, 0x04).nopw();
2852 map(0x08, 0x08).w(FUNC(_8080bw_state::darthvdr_08_w)); // sound
2853 }
2854
2855
2856 static INPUT_PORTS_START( darthvdr )
2857 PORT_START("P1")
2858 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
2859 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 )
2860 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY
2861 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY
2862 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 )
DEF_STR(Bonus_Life)2863 PORT_DIPNAME( 0x20, 0x20, DEF_STR( Bonus_Life ) )
2864 PORT_DIPSETTING( 0x00, "1000" )
2865 PORT_DIPSETTING( 0x20, "3000" )
2866 PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
2867 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
2868 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
2869 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Lives ) )
2870 PORT_DIPSETTING( 0x00, "4" )
2871 PORT_DIPSETTING( 0x80, "6" )
2872
2873 PORT_START("P2")
2874 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START2 )
2875 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
2876 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2)
2877 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2)
2878 PORT_DIPNAME( 0x10, 0x10, "One less life" )
2879 PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
2880 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
2881 PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
2882 PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
2883 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
2884 PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
2885 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
2886 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
2887 PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
2888 PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
2889 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
2890
2891 /* Dummy port for cocktail mode */
2892 INVADERS_CAB_TYPE_PORT
2893 INPUT_PORTS_END
2894
2895 void _8080bw_state::darthvdr(machine_config &config)
2896 {
2897 mw8080bw_root(config);
2898
2899 /* basic machine hardware */
2900 m_maincpu->set_addrmap(AS_PROGRAM, &_8080bw_state::darthvdr_map);
2901 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::darthvdr_io_map);
2902 m_maincpu->set_irq_acknowledge_callback(FUNC(_8080bw_state::darthvdr_interrupt_vector));
2903
2904 MCFG_MACHINE_START_OVERRIDE(_8080bw_state,darthvdr)
2905 MCFG_MACHINE_RESET_OVERRIDE(_8080bw_state,darthvdr)
2906
2907 /* sound hardware */
2908 invaders_samples_audio(config);
2909
2910 /* video hardware */
2911 m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_invaders));
2912 m_screen->screen_vblank().set_inputline(m_maincpu, 0, ASSERT_LINE);
2913 }
2914
2915
2916
2917 /*************************************
2918 *
2919 * Vortex (by Zilec AKA Zenitone-Microsec)
2920 * Runs on Space Invaders CV (color)/PV (part 2) board with
2921 * some color mods, and an epoxy brick for rom encryption
2922 * see below for decryption function (A0, A3, A9 invert)
2923 * It uses its own I/O function since A9 is inverted (and A9 mirrors A1 for I/O)
2924 *
2925 * Hold down fire button to activate thrust.
2926 *
2927 *************************************/
2928
vortex_io_map(address_map & map)2929 void _8080bw_state::vortex_io_map(address_map &map)
2930 {
2931 // I/O map is same as invaders but with A9 (used as A1 for I/O) inverted
2932 map.global_mask(0xFF);
2933 map(0x02, 0x02).mirror(0x04).portr("IN0");
2934 map(0x03, 0x03).mirror(0x04).portr("IN1");
2935 map(0x00, 0x00).mirror(0x04).portr("IN2");
2936 map(0x01, 0x01).mirror(0x04).r(m_mb14241, FUNC(mb14241_device::shift_result_r));
2937
2938 map(0x00, 0x00).w(m_mb14241, FUNC(mb14241_device::shift_count_w));
2939 map(0x01, 0x01).w("soundboard", FUNC(invaders_audio_device::p1_w));
2940 map(0x06, 0x06).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
2941 map(0x07, 0x07).w("soundboard", FUNC(invaders_audio_device::p2_w));
2942 map(0x04, 0x04).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
2943 }
2944
2945
2946 static INPUT_PORTS_START( vortex )
PORT_INCLUDE(sicv)2947 PORT_INCLUDE( sicv )
2948
2949 PORT_MODIFY("IN1")
2950 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
2951
2952 PORT_MODIFY("IN2")
2953 PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:1")
2954 PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
2955 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
2956 PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:2")
2957 PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
2958 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
2959 PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:3")
2960 PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
2961 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
2962 PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
2963 PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
2964 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
2965 PORT_DIPNAME( 0x80, 0x80, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:8")
2966 PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
2967 PORT_DIPSETTING( 0x80, DEF_STR( 1C_1C ) )
2968 INPUT_PORTS_END
2969
2970 void _8080bw_state::vortex(machine_config &config)
2971 {
2972 mw8080bw_root(config);
2973
2974 /* basic machine hardware */
2975 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::vortex_io_map);
2976
2977 MCFG_MACHINE_START_OVERRIDE(_8080bw_state,extra_8080bw)
2978
2979 WATCHDOG_TIMER(config, m_watchdog).set_time(attotime::from_usec(255000000 / (MW8080BW_PIXEL_CLOCK / MW8080BW_HTOTAL / MW8080BW_VTOTAL)));
2980
2981 /* video hardware */
2982 // TODO: replace with modified invaders color renderer code allowing midscanline color writes
2983 m_screen->set_screen_update(FUNC(_8080bw_state::screen_update_invaders));
2984
2985 /* add shifter */
2986 MB14241(config, m_mb14241);
2987
2988 /* audio hardware */
2989 INVADERS_AUDIO(config, "soundboard"). // the flip screen line is only connected on the cocktail PCB
2990 flip_screen_out().set([this] (int state) { if (invaders_is_cabinet_cocktail()) m_flip_screen = state ? 1 : 0; });
2991 }
2992
2993 /* decrypt function for vortex */
init_vortex()2994 void _8080bw_state::init_vortex()
2995 {
2996 uint8_t *rom = memregion("maincpu")->base();
2997 int length = memregion("maincpu")->bytes();
2998 std::vector<uint8_t> buf1(length);
2999 for (uint32_t x = 0; x < length; x++)
3000 {
3001 uint32_t addr = x;
3002 /*
3003 A15 A14 A13 A0 A3 A9
3004 0 0 0 I I I
3005 0 0 1 I I I
3006 0 1 0 N N N
3007 0 1 1 N I I
3008 1 0 0 N I I
3009 1 0 1 N I I
3010 1 1 0 N I I
3011 1 1 1 N I I
3012 */
3013 switch (x&0xE000) // inputs are A13 A14 A15
3014 {
3015 case 0x0000: case 0x2000: // A0 A3 A9
3016 addr ^= 0x0209;
3017 break;
3018 case 0x4000: // none, but doesn't decode right with none
3019 addr ^= 0x0209; // hack: this doesn't match schematic but gets code running. Why does this work? Is there something I'm not undertstanding about how the memory_region maps? or was the zilec/zinitone-microsec epoxy brick simply a bad design which is always stuck on the 0x0000 encryption no matter what?
3020 break;
3021 case 0x6000: case 0x8000: case 0xa000: case 0xc000: case 0xe000: // A3 and A9
3022 addr ^= 0x0208;
3023 break;
3024 /*
3025 case 0x0000: case 0x2000: // A0 A3 A9
3026 addr ^= 0x0001;
3027 break;
3028 case 0x4000:
3029 addr ^= 0x0208;
3030 break;
3031 case 0x6000: case 0x8000: case 0xa000: case 0xc000: case 0xe000:
3032 break;*/
3033 }
3034 buf1[addr] = rom[x];
3035 }
3036
3037 memcpy(rom, &buf1[0], length);
3038 }
3039
3040
3041
3042 /* unlabeled gun game by Model Racing, verified to be Gun Champ
3043
3044 BOARD 1:
3045 _________________________________________________________________________________________________________________________________
3046 | 12 13 14 15 16 17 18 19 |
3047 | _________ _______ ___ ___ ___ ___ ___ ___ ___ ___ |
3048 |___ 11 |74LS241N | |74LS159| |AM9| |AM9| |AM9| |AM9| |AM9| |AM9| |AM9| |AM9| |
3049 | _| |_________| |_______| |060| |060| |060| |060| |060| |060| |060| |060| |
3050 | _| _____________ |CPC| |CPC| |CPC| |CPC| |CPC| |CPC| |CPC| |CPC| |
3051 | _| |258 | | | | | | | | | | | | | | | | | |
3052 | _| | | _________ _______ | | | | | | | | | | | | | | | | |
3053 | _| 10 | 2708| |74LS241N | |74LS153| | | | | | | | | | | | | | | | | |
3054 | _| |_____________| |_________| |_______| | | | | | | | | | | | | | | | | |
3055 | _| |___| |___| |___| |___| |___| |___| |___| |___| |
3056 | _| _____________ |
3057 | _| |257 | _______ _______ |
3058 | _| 9 | | |74LS174| |74LS153| __|
3059 | _| | 2708| |_______| |_______| ___ ___ ___ ___ ___ ___ ___ ___ |
3060 | _| |_____________| |AM9| |AM9| |AM9| |AM9| |AM9| |AM9| |AM9| |AM9| |__
3061 | _| |060| |060| |060| |060| |060| |060| |060| |060| =|
3062 | _| _____________ _______ _______ |CPC| |CPC| |CPC| |CPC| |CPC| |CPC| |CPC| |CPC| =|
3063 | _| 8 |256 | |74LS174| |74LS153| | | | | | | | | | | | | | | | | =|
3064 | _| | | |_______| |_______| | | | | | | | | | | | | | | | | =|
3065 | _| | 2708| | | | | | | | | | | | | | | | | =|
3066 | _| |_____________| | | | | | | | | | | | | | | | | =|
3067 | _| _______ _______ |___| |___| |___| |___| |___| |___| |___| |___| =|
3068 |___| 7 _____________ |74LS166| |74LS174| =|
3069 | |255 | |_______| |_______| =|
3070 | | | =|
3071 | | 2708| _______ _______ =|
3072 | 6 |_____________| |74LS86 | | 74LS04| =|
3073 | |_______| |_______| =|
3074 |___ _____________ =|
3075 | _| |254 | _______ _______ _______ _______ _______ _______ _______ =|
3076 | _| | | |74LS00N| |SN7404N| |74LS74 | |74LS157| |74LS157| |74LS157| |74LS157| 5 =|
3077 | _| | 2708| |_______| |_______| |_______| |_______| |_______| |_______| |_______| =|
3078 | _| |_____________| =|
3079 | _| _________ _________ _______ _______ _______ _______ =|
3080 | _| _____________ |74LS244N | |74LS244N | |74161N | |74161N | |74161N | |74161N | 4 __|
3081 | _| |253 | |_________| |_________| |_______| |_______| |_______| |_______| |
3082 | _| | | |__
3083 | _| | 2708| |
3084 | _| |_____________| _______ _______ _______ _______ |
3085 | _| |74LS04N| |SN7474N| |74LS04N| |74160N | 3 |
3086 | _| _____________ _____________________ |_______| |_______| |_______| |_______| |
3087 | _| |252 | | 341 | .XTAL. |
3088 | _| | | _______ | INS8080AD | _______ _______ _______ _______ |
3089 | _| | 2708| |74LS42 | | C8080A | |74LS00 | |74LS55 | |74LS00 | |74LS42 | 2 |
3090 | _| |_____________| |_______| |_____________________| |_______| |_______| |_______| |_______| |
3091 | _| |
3092 | _| _____________ _______ _______ _______ _______ |
3093 | _| |251 | |74LS02N| |74LS20N| |75365N | |SN7474N| 1 |
3094 | _| | | |_______| |_______| |_______| |_______| |
3095 |___| | 2708| |
3096 | |_____________| Model Racing |
3097 | CS 235A |
3098 | A B C D E F G H |
3099 |_________________________________________________________________________________________________________________________________|
3100
3101
3102 XTAL=19,66080MHz
3103
3104
3105 BOARD 2:
3106 _________________________________________________________________________________________________________________________________
3107 | |
3108 | _______ _______ _______ _______ _________ |
3109 |___ 11 |74LS175| |74LS151| |74LS151| |74LS153| |74LS244N | Model |
3110 | _| |_______| |_______| |_______| |_______| |_________| Racing |
3111 | _| |
3112 | _| CS 238A |
3113 | _| _______ _______ _______ _______ |
3114 | _| 10 |74LS174| |74LS151| |74LS151| |74LS153| |
3115 | _| |_______| |_______| |_______| |_______| |
3116 | _| |
3117 | _| |
3118 | _| _______ _______ _______ _______ ____________ |
3119 | _| |74LS174| |74LS151| |74LS151| |74LS153| 9 | | __|
3120 | _| |_______| |_______| |_______| |_______| | | |
3121 | _| | | |__
3122 | _| | | =|
3123 | _| _______ _______ _______ _______ | | =|
3124 | _| |74LS174| |74LS151| |74LS151| |74LS153| 8 | | =|
3125 | _| |_______| |_______| |_______| |_______| | | =|
3126 | _| | | =|
3127 | _| | | =|
3128 | _| _______ _______ _______ _______ | UNKNOWN | =|
3129 |___| |74LS273| |74LS175| |74LS14N| |74LS42N| 7 | | =|
3130 | |_______| |_______| |_______| |_______| | | =|
3131 | | | =|
3132 | | | =|
3133 | | | =|
3134 | | | _______ =|
3135 |___ _______ _______ _______ _________ | | |CA8100 | 6 =|
3136 | _| |74LS161| |74LS74A| |74LS161| |74LS374N | 5 | | |_______| =|
3137 | _| |_______| |_______| |_______| |_________| | | =|
3138 | _| | | =|
3139 | _| |____________| =|
3140 | _| _______ _______ _______ _________ =|
3141 | _| |74LS161| |74LS00 | |74LS161| |74LS374N | 4 =|
3142 | _| |_______| |_______| |_______| |_________| =|
3143 | _| =|
3144 | _| =|
3145 | _| _______ _______ ______________ _______ ____ __|
3146 | _| 3 |74LS14N| |74LS74A| | SN76477N | |74LS107| |DIP1| |
3147 | _| |_______| |_______| | 7923XY | |_______| |____| |__
3148 | _| | SINGAPORE | |
3149 | _| |______________| |
3150 | _| _______ _______ _______ _______ _______ |
3151 | _| 2 |74LS26 | |74LS00N| |CD4016B| |74LS221| |74LS00N| |
3152 | _| |_______| |_______| |_______| |_______| |_______| |
3153 | _| |
3154 | _| NE555P |
3155 | _| _______ _______ _______ ___ _______ _______ |
3156 |___| 1 |74LS74A| |74LS74A| |74LS74A| | | |74LS90N| |74LS14N| |
3157 | |_______| |_______| |_______| |___| |_______| |_______| |
3158 | |
3159 | P R S T U V W X |
3160 |_________________________________________________________________________________________________________________________________|
3161
3162
3163 Claybuster is on the same hardware, PCB labels CS 235A and CS 238A as well
3164
3165 */
3166
TIMER_DEVICE_CALLBACK_MEMBER(_8080bw_state::claybust_gun_callback)3167 TIMER_DEVICE_CALLBACK_MEMBER(_8080bw_state::claybust_gun_callback)
3168 {
3169 // reset gun latch
3170 m_claybust_gun_pos = 0;
3171 }
3172
READ_LINE_MEMBER(_8080bw_state::claybust_gun_on_r)3173 READ_LINE_MEMBER(_8080bw_state::claybust_gun_on_r)
3174 {
3175 return (m_claybust_gun_pos != 0) ? 1 : 0;
3176 }
3177
INPUT_CHANGED_MEMBER(_8080bw_state::claybust_gun_trigger)3178 INPUT_CHANGED_MEMBER(_8080bw_state::claybust_gun_trigger)
3179 {
3180 if (newval)
3181 {
3182 /*
3183 The game registers a valid shot after the gun trigger is pressed, and IN1 d0 is high.
3184 It latches the gun position and then compares it with VRAM contents: 1 byte/8 pixels, 0 means miss.
3185 IN1 d0 probably indicates if the latch is ready or not (glitches happen otherwise)
3186
3187 in $06
3188 cpi $04
3189 rc
3190 mov h,a
3191 in $02
3192 mov l,a
3193 lxi d,$1ffe <-- this is where the +2 comes from
3194 dad d
3195 out $00
3196 mov a,m
3197 ana a
3198 rz
3199 */
3200 uint8_t const gunx = m_gunx.read_safe(0x00);
3201 uint8_t const guny = m_guny.read_safe(0x20);
3202 m_claybust_gun_pos = ((gunx >> 3) | (guny << 5)) + 2;
3203 m_claybust_gun_on->adjust(attotime::from_msec(250)); // timing is a guess
3204 }
3205 }
3206
claybust_gun_lo_r()3207 uint8_t _8080bw_state::claybust_gun_lo_r()
3208 {
3209 return m_claybust_gun_pos & 0xff;
3210 }
3211
claybust_gun_hi_r()3212 uint8_t _8080bw_state::claybust_gun_hi_r()
3213 {
3214 return m_claybust_gun_pos >> 8;
3215 }
3216
claybust_io_map(address_map & map)3217 void _8080bw_state::claybust_io_map(address_map &map)
3218 {
3219 //map(0x00, 0x00).nopw(); // ?
3220 map(0x01, 0x01).portr("IN1").w(m_mb14241, FUNC(mb14241_device::shift_count_w));
3221 map(0x02, 0x02).r(FUNC(_8080bw_state::claybust_gun_lo_r)).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
3222 map(0x03, 0x03).r(m_mb14241, FUNC(mb14241_device::shift_result_r)); //.nopw(); // port3 write looks sound-related
3223 map(0x04, 0x04).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
3224 //map(0x05, 0x05).nopw(); // ?
3225 map(0x06, 0x06).r(FUNC(_8080bw_state::claybust_gun_hi_r));
3226 }
3227
3228
3229 static INPUT_PORTS_START( claybust )
3230 PORT_START("IN1")
PORT_READ_LINE_MEMBER(_8080bw_state,claybust_gun_on_r)3231 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(_8080bw_state, claybust_gun_on_r)
3232 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_IMPULSE(2) PORT_CHANGED_MEMBER(DEVICE_SELF, _8080bw_state, claybust_gun_trigger, 0)
3233 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 )
3234 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )
3235
3236 // switch is 6-pos, but DNS06:5 and DNS06:6 are not connected
3237 PORT_DIPNAME( 0x10, 0x10, "Shots" ) PORT_DIPLOCATION("DNS06:1")
3238 PORT_DIPSETTING( 0x10, "4" )
3239 PORT_DIPSETTING( 0x00, "2" )
3240 PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "DNS06:2" )
3241 PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "DNS06:3" )
3242 PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "DNS06:4" )
3243
3244 PORT_START( "GUNX" )
3245 PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_MINMAX(0x00, 0xff) PORT_CROSSHAIR(X, 1.0 - (MW8080BW_HPIXCOUNT-256)/256.0, (MW8080BW_HPIXCOUNT-256)/256.0, 0) PORT_SENSITIVITY(56) PORT_KEYDELTA(5)
3246 PORT_START( "GUNY" )
3247 PORT_BIT( 0xff, 0xa0, IPT_LIGHTGUN_Y ) PORT_MINMAX(0x20, 0xff) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(64) PORT_KEYDELTA(5)
3248 INPUT_PORTS_END
3249
3250 static INPUT_PORTS_START( gunchamp )
3251 PORT_INCLUDE( claybust )
3252
3253 PORT_MODIFY("IN1")
3254
3255 // switch is 6-pos, but DNS06:5 and DNS06:6 are not connected
3256 PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DNS06:1")
3257 PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
3258 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
3259 PORT_DIPNAME( 0xe0, 0x40, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DNS06:2,3,4")
3260 PORT_DIPSETTING( 0xa0, DEF_STR( 4C_1C ) )
3261 PORT_DIPSETTING( 0xc0, DEF_STR( 3C_1C ) )
3262 PORT_DIPSETTING( 0xe0, DEF_STR( 2C_1C ) )
3263 PORT_DIPSETTING( 0x40, DEF_STR( 1C_1C ) )
3264 PORT_DIPSETTING( 0x20, DEF_STR( 1C_2C ) )
3265 PORT_DIPSETTING( 0x00, DEF_STR( 2C_3C ) )
3266 PORT_DIPSETTING( 0x60, DEF_STR( 1C_3C ) )
3267 PORT_DIPSETTING( 0x80, DEF_STR( 1C_4C ) )
3268 INPUT_PORTS_END
3269
3270
3271 MACHINE_START_MEMBER(_8080bw_state, claybust)
3272 {
3273 mw8080bw_state::machine_start();
3274
3275 m_claybust_gun_pos = 0;
3276 save_item(NAME(m_claybust_gun_pos));
3277 }
3278
claybust(machine_config & config)3279 void _8080bw_state::claybust(machine_config &config)
3280 {
3281 invaders(config);
3282
3283 /* basic machine hardware */
3284 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::claybust_io_map);
3285
3286 TIMER(config, "claybust_gun").configure_generic(FUNC(_8080bw_state::claybust_gun_callback));
3287
3288 MCFG_MACHINE_START_OVERRIDE(_8080bw_state, claybust)
3289
3290 /* sound hardware */
3291 // TODO: discrete sound
3292 }
3293
3294
3295
3296 /**************************************************************************************
3297
3298 Taito Galactica / Space Missile
3299
3300 This game was officially only distributed in Brazil.
3301 Regarding release data, not much information is available online.
3302
3303 ROM dump came from a collection of old 5 1/4 disks (Apple II) that used to be in the
3304 possession of an arcade operator in the early 80s.
3305
3306 TODO:
3307 - correct sound (currently same as invaders)
3308 * sound mutes when a few aliens are left?
3309 * port 7 write is used too, looks like it's for music similar to indianbt
3310 Note that bass background hum and sound effects are already basically correct.
3311
3312 ***************************************************************************************/
3313
3314 static INPUT_PORTS_START( galactic )
3315 PORT_START("IN0")
3316 PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // gets read into memory (0x2012) then never used
3317
3318 PORT_START("IN1")
3319 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
3320 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
3321 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
3322 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_CUSTOM_MEMBER(mw8080bw_state,invaders_in1_control_r)3323 PORT_BIT( 0x70, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, invaders_in1_control_r)
3324 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
3325
3326 PORT_START("IN2")
3327 PORT_DIPNAME( 0x03, 0x02, DEF_STR( Bonus_Life ) )
3328 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
3329 PORT_DIPSETTING( 0x01, "4000" )
3330 PORT_DIPSETTING( 0x02, "5000" )
3331 PORT_DIPSETTING( 0x03, "7000" )
3332 PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
3333 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
3334 PORT_DIPSETTING( 0x04, DEF_STR( On ) )
3335 PORT_DIPNAME( 0x08, 0x00, DEF_STR( Lives ) )
3336 PORT_DIPSETTING( 0x00, "3" )
3337 PORT_DIPSETTING( 0x08, "6" )
3338 PORT_BIT( 0x70, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, invaders_in2_control_r)
3339 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
3340
3341 /* Dummy controls port, P1 */
3342 INVADERS_CONTROL_PORT_P1
3343
3344 /* Dummy controls port, P2 */
3345 INVADERS_CONTROL_PORT_P2
3346
3347 /* Dummy port for cocktail mode */
3348 INVADERS_CAB_TYPE_PORT
3349 INPUT_PORTS_END
3350
3351
3352
3353 /*****************************************************
3354
3355 Attack Force, by E.G.S., Italy
3356 Not much information is available for this game.
3357
3358 20MHz XTAL, 2MHz CPU
3359 video: 15625Hz
3360
3361 TODO: sound
3362 PORT 02 : 10 while your missile is on-screen
3363 PORT 04 : 01 while game is playing. Sound enable.
3364 PORT 05 : Watchdog?
3365 PORT 06 : 01=Helicopter; 02=Tank; 03=Motorcycle
3366 08=Explosion; 10=Walking
3367
3368
3369 *****************************************************/
3370
3371 void _8080bw_state::attackfc_io_map(address_map &map)
3372 {
3373 map(0x00, 0x00).portr("IN0");
3374 map(0x02, 0x02).nopw(); // lamp?
3375 map(0x03, 0x03).rw(m_mb14241, FUNC(mb14241_device::shift_result_r), FUNC(mb14241_device::shift_data_w));
3376 map(0x04, 0x04).nopw(); // sound enable?
3377 map(0x05, 0x05).nopw(); // watchdog?
3378 map(0x06, 0x06).nopw(); // sound?
3379 map(0x07, 0x07).w(m_mb14241, FUNC(mb14241_device::shift_count_w));
3380 }
3381
3382
3383 static INPUT_PORTS_START( attackfc )
3384 PORT_START("IN0")
3385 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY
3386 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY
3387 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 )
3388 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
3389 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
3390 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
3391 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
3392 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
3393 INPUT_PORTS_END
3394
3395
attackfc(machine_config & config)3396 void _8080bw_state::attackfc(machine_config &config)
3397 {
3398 mw8080bw_root(config);
3399
3400 /* basic machine hardware */
3401 m_maincpu->set_addrmap(AS_IO, &_8080bw_state::attackfc_io_map);
3402
3403 /* add shifter */
3404 MB14241(config, m_mb14241);
3405
3406 /* sound hardware */
3407 // TODO: custom discrete
3408 }
3409
3410
init_attackfc()3411 void _8080bw_state::init_attackfc()
3412 {
3413 uint8_t *rom = memregion("maincpu")->base();
3414 uint32_t len = memregion("maincpu")->bytes();
3415 std::vector<uint8_t> buffer(len);
3416
3417 // swap a8/a9
3418 for (int i = 0; i < len; i++)
3419 buffer[bitswap<16>(i, 15,14,13,12,11,10,8,9, 7,6,5,4,3,2,1,0)] = rom[i];
3420
3421 memcpy(rom, &buffer[0], len);
3422 }
3423
3424
3425
3426 /*****************************************************
3427
3428 Space Invaders Multigame kit, Braze Technologies,
3429 produced from 2002(version 1A) to 2006(version 3D).
3430 This is an 8-in-1 hack on a daughterboard, containing:
3431
3432 - 8080 CPU taken from main PCB
3433 - SST 29EE010 or AM27C010 (or other similar) 128KB EEPROM
3434 (EEPROM functionality not used)
3435 - 93C46P E2PROM for saving highscore/settings
3436 - PALCE22V10H-25PC/4
3437
3438 The kit is compatible with the original Midway boardset
3439
3440 ******************************************************/
3441
3442 static INPUT_PORTS_START( invmulti )
3443 /* same as Midway Space Invaders, except that SW is unused */
3444 PORT_START("IN0")
3445 PORT_DIPUNUSED_DIPLOC( 0x01, 0x00, "SW:8" )
PORT_CUSTOM_MEMBER(mw8080bw_state,invaders_sw6_sw7_r)3446 PORT_BIT( 0x06, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, invaders_sw6_sw7_r)
3447 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
3448 PORT_BIT( 0x70, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, invaders_in0_control_r)
3449 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, invaders_sw5_r)
3450
3451 PORT_START("IN1")
3452 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, mw8080bw_state, direct_coin_count, 0)
3453 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
3454 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
3455 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
3456 PORT_BIT( 0x70, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, invaders_in1_control_r)
3457 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
3458
3459 PORT_START("IN2")
3460 PORT_DIPUNUSED_DIPLOC( 0x01, 0x00, "SW:3" )
3461 PORT_DIPUNUSED_DIPLOC( 0x02, 0x00, "SW:4" )
3462 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
3463 PORT_DIPUNUSED_DIPLOC( 0x08, 0x00, "SW:2" )
3464 PORT_BIT( 0x70, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(mw8080bw_state, invaders_in2_control_r)
3465 PORT_DIPUNUSED_DIPLOC( 0x80, 0x00, "SW:1" )
3466
3467 /* fake port for cabinet type */
3468 PORT_START(INVADERS_CAB_TYPE_PORT_TAG)
3469 PORT_CONFNAME( 0x01, 0x00, DEF_STR( Cabinet ) )
3470 PORT_CONFSETTING( 0x00, DEF_STR( Upright ) )
3471 PORT_CONFSETTING( 0x01, DEF_STR( Cocktail ) )
3472 PORT_BIT( 0xfe, IP_ACTIVE_HIGH, IPT_UNUSED )
3473
3474 /* fake ports for handling the various input ports based on cabinet type */
3475 PORT_START(INVADERS_SW6_SW7_PORT_TAG)
3476 PORT_DIPUNUSED_DIPLOC( 0x01, 0x00, "SW:7" )
3477 PORT_DIPUNUSED_DIPLOC( 0x02, 0x00, "SW:6" )
3478 PORT_BIT( 0xfc, IP_ACTIVE_HIGH, IPT_UNUSED )
3479
3480 PORT_START(INVADERS_SW5_PORT_TAG)
3481 PORT_DIPUNUSED_DIPLOC( 0x01, 0x00, "SW:5" )
3482 PORT_BIT( 0xfe, IP_ACTIVE_HIGH, IPT_UNUSED )
3483
3484 PORT_START(INVADERS_P1_CONTROL_PORT_TAG)
3485 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)
3486 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(1)
3487 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(1)
3488 PORT_BIT( 0xf8, IP_ACTIVE_HIGH, IPT_UNUSED )
3489
3490 PORT_START(INVADERS_P2_CONTROL_PORT_TAG)
3491 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
3492 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2)
3493 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2)
3494 PORT_BIT( 0xf8, IP_ACTIVE_HIGH, IPT_UNUSED )
3495 INPUT_PORTS_END
3496
3497 void _8080bw_state::invmulti_map(address_map &map)
3498 {
3499 map(0x0000, 0x1fff).mirror(0x8000).bankr("bank1");
3500 map(0x2000, 0x3fff).mirror(0x8000).ram().share("main_ram");
3501 map(0x4000, 0x5fff).mirror(0x8000).bankr("bank2");
3502 map(0x6000, 0x6000).mirror(0x1fff).rw(FUNC(_8080bw_state::invmulti_eeprom_r), FUNC(_8080bw_state::invmulti_eeprom_w));
3503 map(0xe000, 0xe000).mirror(0x1fff).w(FUNC(_8080bw_state::invmulti_bank_w));
3504 }
3505
invmulti_eeprom_r()3506 uint8_t _8080bw_state::invmulti_eeprom_r()
3507 {
3508 return m_eeprom->do_read();
3509 }
3510
invmulti_eeprom_w(uint8_t data)3511 void _8080bw_state::invmulti_eeprom_w(uint8_t data)
3512 {
3513 // d0: latch bit
3514 m_eeprom->di_write(data & 1);
3515
3516 // d6: reset
3517 m_eeprom->cs_write((data & 0x40) ? ASSERT_LINE : CLEAR_LINE);
3518
3519 // d4: write latch or select next bit to read
3520 m_eeprom->clk_write((data & 0x10) ? ASSERT_LINE : CLEAR_LINE);
3521 }
3522
invmulti_bank_w(uint8_t data)3523 void _8080bw_state::invmulti_bank_w(uint8_t data)
3524 {
3525 // d0, d4, d6: bank
3526 int bank = (data & 1) | (data >> 3 & 2) | (data >> 4 & 4);
3527 membank("bank1")->set_entry(bank);
3528 membank("bank2")->set_entry(bank);
3529 }
3530
invmulti(machine_config & config)3531 void _8080bw_state::invmulti(machine_config &config)
3532 {
3533 invaders(config);
3534
3535 /* basic machine hardware */
3536 m_maincpu->set_addrmap(AS_PROGRAM, &_8080bw_state::invmulti_map);
3537
3538 EEPROM_93C46_8BIT(config, m_eeprom);
3539
3540 MCFG_MACHINE_RESET_OVERRIDE(_8080bw_state, mw8080bw)
3541 }
3542
init_invmulti()3543 void _8080bw_state::init_invmulti()
3544 {
3545 uint8_t *src = memregion("user1")->base();
3546 int len = memregion("user1")->bytes();
3547 uint8_t *dest = memregion("maincpu")->base();
3548
3549 // decrypt rom
3550 for (int i = 0; i < len; i++)
3551 dest[i] = bitswap<8>(src[(i & 0x100ff) | (bitswap<8>(i >> 8 & 0xff, 7,3,4,5,0,6,1,2) << 8)],0,6,5,7,4,3,1,2);
3552
3553 membank("bank1")->configure_entries(0, 8, memregion("maincpu")->base(), 0x4000);
3554 membank("bank1")->set_entry(0);
3555 membank("bank2")->configure_entries(0, 8, memregion("maincpu")->base() + 0x2000, 0x4000);
3556 membank("bank2")->set_entry(0);
3557 }
3558
3559
3560
3561 /*******************************************************/
3562 /* */
3563 /* Cane (Model Racing) */
3564 /* */
3565 /*******************************************************/
3566 /***********************************************************************************************************************************
3567 This game was never released by Model Racing to the public.
3568
3569 The assembler source files for this game were extracted from the original floppy disks used by the former Model Racing developer
3570 Adolfo Melilli (adolfo@melilli.com).
3571 Those disks were retrieved by Alessandro Bolgia (xadhoom76@gmail.com) and Lorenzo Fongaro (lorenzo.fongaro@virgilio.it) and
3572 dumped by Piero Andreini (pieroandreini@gmail.com) using KryoFlux hardware and software.
3573 Subsequently Jean Paul Piccato (j2pguard-spam@yahoo.com) mounted the images and compiled the source files, managed to set up a
3574 romset and wrote a MAME driver that aims to reproduce in the most faithful way the work of Melilli at Model Racing in late '70s.
3575
3576 The game driver is not based on hardware inspection and is solely derived from assumptions I've made looking at the assembler
3577 code and comments written into the source files of the game. Several of those hypotheses came following the directions of
3578 previous yet contemporary Model Racing works (Eg: Claybuster) and were confirmed by Melilli himself.
3579
3580 Being unreleased this game lacks an official name, thus the name used in the source files was used instead.
3581
3582 ***********************************************************************************************************************************/
cane_map(address_map & map)3583 void cane_state::cane_map(address_map &map)
3584 {
3585 map(0x0000, 0x1fff).rom().nopw();
3586 map(0x2000, 0x3fff).ram().share("main_ram");
3587 }
3588
cane_io_map(address_map & map)3589 void cane_state::cane_io_map(address_map &map)
3590 {
3591 /*********************************************************************************************************************************
3592 -----------
3593 I/O mapping
3594 -----------
3595 out:
3596 $00 - Unknown - Not yet emulated
3597 $01 - Hardware shift register - Shift count
3598 $02 - Hardware shift register - Shift data
3599 $03 - Audio sub-system - D0->sx0, D1->sx1, D2->sx2, D3->sx3, D4->sx4, D5-D7 unused
3600 sx0 mute/unmute all
3601 sx1,sx2,sx3 routed to 76477 mixer select
3602 sx4 routed to 555 one-shot trigger
3603 $04 - Reset watchdog timer
3604 $05 - Audio TOS
3605
3606 in:
3607 $01 - CPO / coin input port
3608 $03 - Hardware shift register - Shift result
3609
3610 =================================================================================================================
3611 ------------
3612 -- OUT 0 --
3613 Source file: CANE1.ED - Referenced only once in code, in the "rifle routine" (ROUTINE FUCILE)
3614
3615 > ;ROUTINE FUCILE
3616 > CALL SPARO
3617 > OUT 0
3618
3619 ------------
3620 -- OUT 1 --
3621 Source files: CANE2.ED, MIRINO.ED
3622
3623 Defined in CANE2.ED
3624
3625 > PRMTR EQU 1
3626
3627 and referenced multiple times in CANE2.ED and MIRINO.ED. Eg:
3628
3629 > ;PER RISPETTARE POS ORIZZONT. UCCELLO
3630 > LXI D,TPADEL
3631 > XRA A
3632 > OUT PRMTR
3633
3634 ------------
3635 -- OUT 2 --
3636 Source files: CANE1.ED, CANE2.ED, MIRINO.ED
3637
3638 Defined in CANE2.ED
3639
3640 > DATO EQU 2
3641
3642 and referenced multiple times in CANE1.ED and MIRINO.ED. Eg:
3643
3644 > ZANZ: XRA A
3645 > OUT DATO
3646
3647 ------------
3648 -- OUT 3 --
3649 Source file: CANE2.ED
3650
3651 The access to port 3 is mediated by the routines SETP3 and RESP3 defined in CANE2.ED
3652 SETP3 -- Port 3 = Port 3 | A
3653
3654 > SETP3:
3655 > ;SETTA I BITS CONTEN IN REG A NELLA PORTA 3
3656
3657 RESP3 -- Port 3 = Port 3 & A
3658
3659 > RESP3:
3660 > ;IL CONTRARIO DI SETP3
3661
3662 and referenced multiple times in CANE2.ED. Eg:
3663
3664 > ;SPENGO IL VOLO UCCELLI
3665 > MVI A,0FEH
3666 > CALL SETP3
3667
3668 ------------
3669 -- OUT 4 --
3670 Source file: CANE1.ED, CANE2.ED
3671
3672 Called directly in CANE1.ED
3673
3674 > INT8:
3675 > OUT 4
3676 > ;PER LAUTORESET
3677
3678 Also defined in CANE2.ED
3679
3680 > RESET EQU 4
3681
3682 and called multiple times in CANE1.ED and CANE2.ED. Eg:
3683
3684 > DELAY3: OUT RESET
3685
3686 ------------
3687 -- OUT 5 --
3688 Source file: CANE2.ED, TOS.ED
3689
3690 TOS sound
3691 D0-D7 is pushed into a LS273 (Octal D-type Flip-Flop) and its value is used to preload the starting value of
3692 two, cascaded, LS161 (Synchronous 4-Bit Counters).
3693 The counters drive a J-K Flip-Flop generating a square wave signal driven in frequency by the preloaded value.
3694
3695 > CANONE:
3696 > ;AZZITTO IL TOS:
3697 > MVI A,255 ; A = 255 ; TIMER spento
3698 > OUT 5 ; OUT 5
3699
3700 The musical notes are defined in a library source file TOS.ED and referenced later by the source files, eg. in CANE2.ED:
3701 > CARICA: DB RE,FA,FA,FA,FA,PAU
3702 > DB RE,FA,FA,FA,FA,PAU
3703 > DB RE,FA,PAU,RE,FA,PAU
3704 > DB RE,FA,FA,FA,FA,PAU
3705 > DB FINALE
3706 > TABSTR: NOP
3707 > LULUP: DB DO,RE,MI,FA,SOL,LA,SI,DO2
3708 > DB FINALE
3709
3710 > CIPCIP: DB 220,215,210,205,200,FINALE
3711
3712 The notes are defined in TOS.ED:
3713 > ; SI PARTE DA UNA FREQUENZA DI CLOCK DI 1 MHZ CIRCA,QUESTA FREQUENZA DIVISA)
3714 > ; PER UNA SERIE DI PARAMETRI ATTRAVERSO DEI DIVISORI PROGRAMMABILI FORNISCE
3715 > ; ALL'USCITA DI QUESTI I DODICI SEMITONI DELLA SCALA CROMATICA
3716
3717 Name - Counter - Aprox. frequency
3718 DO 16 - 1000/(255-16) = 4.18 KHz
3719 DOD 30 - 1000/(255-30) = 4.44 KHz
3720 RE 43 - 1000/(255-43) = 4.72 KHz
3721 RED 55 - 1000/(255-55) = 5 KHz
3722 MI 66 - 1000/(255-66) = 5.29 KHz
3723 FA 77 - 1000/(255-77) = 5.62 KHz
3724 FAD 87 - 1000/(255-87) = 5.95 KHz
3725 SOL 96 - 1000/(255-96) = 6.29 KHz
3726 SOLD 105 - 1000/(255-105) = 6.67 KHz
3727 LA 114 - 1000/(255-114) = 7.09 KHz
3728 LAD 122 - 1000/(255-122) = 7.52 KHz
3729 SI 129 - 1000/(255-129) = 7.94 KHz
3730
3731 DO2 136 - 1000/(255-136) = 8.4 KHz
3732 DOD2 143 - 1000/(255-143) = 8.93 KHz
3733 RE2 149.5 - 1000/(255-150) = 9.52 KHz
3734 RED2 155.5 - 1000/(255-156) = 10.1 KHz
3735 MI2 161 - 1000/(255-161) = 10.64 KHz
3736 FA2 166.5 - 1000/(255-167) = 11.36 KHz
3737 FAD2 171.5 - 1000/(255-172) = 12.05 KHz
3738 SOL2 176 - 1000/(255-176) = 12.66 KHz
3739 SOLD2 180.5 - 1000/(255-181) = 13.51 KHz
3740 LA2 185 - 1000/(255-185) = 14.29 KHz
3741 LAD2 189 - 1000/(255-189) = 15.15 KHz
3742 SI2 192.5 - 1000/(255-193) = 16.13 KHz
3743
3744 Pause code:
3745 PAU EQU 255
3746
3747 End of note sequence:
3748 FINALE EQU 254
3749
3750 ------------
3751 -- IN 1 --
3752 Source file: CANE2.ED
3753
3754 Defined in CANE2.ED
3755 > PORTAM EQU 1 ;E' LA PORTA DI INPUT DI TUTTI I PULSANTI
3756
3757 ------------
3758 -- IN 3 --
3759 Source file: CANE1.ED, CANE2.ED
3760 Defined in CANE2.ED
3761
3762 > PRONTO EQU 3
3763
3764 and referenced in CANE1.ED
3765
3766 > OUT LOW DATO
3767 > IN LOW PRONTO
3768
3769 **********************************************************************************************************************************/
3770 map(0x00, 0x00).w(FUNC(cane_state::cane_unknown_port0_w));
3771
3772 map(0x01, 0x01).portr("IN1").w(m_mb14241, FUNC(mb14241_device::shift_count_w));
3773 map(0x02, 0x02).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
3774 map(0x03, 0x03).r(m_mb14241, FUNC(mb14241_device::shift_result_r)).w("soundboard", FUNC(cane_audio_device::sh_port_1_w));
3775
3776 map(0x04, 0x04).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
3777
3778 map(0x05, 0x05).w("soundboard", FUNC(cane_audio_device::music_w));
3779 }
3780
3781 static INPUT_PORTS_START( cane )
3782 /* Source file: CANE2.ED, MIRINO.ED
3783 Port definition:
3784 > PORTAM EQU 1 ;E' LA PORTA DI INPUT DI TUTTI I PULSANTI
3785
3786 Bit values:
3787 CANE2.ED
3788 > DITO EQU 80H ;BIT DEL PULSANTE DI SPARO DEL FUCILE
3789
3790 MIRINO.ED
3791 > UPPMIR EQU 20H ;BIT PER MIRINO IN ALTO
3792 > LOWMIR EQU 40H ;BASSO
3793 > RIGMIR EQU 8H ;DESTRA
3794 > LEFMIR EQU 10H ;SINISTRA
3795
3796 Joystick reading routine:
3797 MIRINO.ED
3798 > ;ORA LEGGO LA PORTA DELLA CLOCHE
3799 > IN LOW PORTAM
3800 > MOV B,A
3801 > ;A QUESTO PUNTO AGGIORNO LE COORDINATE X E Y A SECONDA DELLO STATO DEI BIT
3802 > ;DELLA CLOCHE (ATTIVI BASSI)
3803 > ANI LOWMIR
3804 > CZ MIRLOW
3805 > MOV A,B
3806 > ANI UPPMIR
3807 > CZ MIRUPP
3808 > MOV A,B
3809 > ANI LEFMIR
3810 > CZ MIRLEF
3811 > MOV A,B
3812 > ANI RIGMIR
3813 > CZ MIRRIG
3814
3815 Shot reading routine:
3816 CANE2.ED
3817 > ;QUI CI VADO SE NESSUNO PREME IL PULSANTE E STO ASPETTANDO UNO SPARO
3818 > ;TEST GRILLETTO
3819 > IN PORTAM
3820 > ANI DITO
3821
3822 Coin reading routine;
3823 CANE1.ED
3824 > ;ACCREDITA
3825 > SAR9A: IN 1
3826 > ANI 4
3827
3828 Start game: (Verified by debugging $3C2)
3829 CANE1.ED
3830 > IN 1
3831 > ANI 8
3832 > JNZ FONTI
3833
3834 */
3835
3836 PORT_START("IN1")
3837 // PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_NOTUSED )
3838 // PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_NOTUSED )
3839 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 )
3840 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY
3841 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY
3842 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY
3843 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY
3844 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_IMPULSE(2)
3845 INPUT_PORTS_END
3846
cane(machine_config & config)3847 void cane_state::cane(machine_config &config)
3848 {
3849 mw8080bw_root(config);
3850
3851 // Basic machine hardware
3852 I8080(config.replace(), m_maincpu, 1996800); /* 19.968MHz / 10 */
3853 m_maincpu->set_addrmap(AS_PROGRAM, &cane_state::cane_map);
3854 m_maincpu->set_addrmap(AS_IO, &cane_state::cane_io_map);
3855 m_maincpu->set_irq_acknowledge_callback(FUNC(cane_state::interrupt_vector));
3856
3857 WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 255);
3858
3859 // add shifter
3860 MB14241(config, m_mb14241);
3861
3862 // audio hardware
3863 CANE_AUDIO(config, "soundboard");
3864 }
3865
cane_unknown_port0_w(u8 data)3866 void cane_state::cane_unknown_port0_w(u8 data)
3867 {
3868 logerror("Unmapped io memory write to 00 = 00 %u\n", data);
3869 }
3870
3871 /*******************************************************/
3872 /* */
3873 /* Model Racing "Orbite" */
3874 /* */
3875 /*******************************************************/
3876 /***********************************************************************************************************************************
3877 This game was never completed and released by Model Racing to the public.
3878 It's in a nearly incomplete form (eg: doesn't have any sound or score routine in the code) and it's barely playable.
3879
3880 The assembler source files for this game were extracted from the original floppy disks used by the former Model Racing developer
3881 Adolfo Melilli (adolfo@melilli.com).
3882 Those disks were retrieved by Alessandro Bolgia (xadhoom76@gmail.com) and Lorenzo Fongaro (lorenzo.fongaro@virgilio.it) and
3883 dumped by Piero Andreini (pieroandreini@gmail.com) using KryoFlux hardware and software.
3884 Subsequently Jean Paul Piccato (j2pguard-spam@yahoo.com) mounted the images and compiled the source files, managed to set up a
3885 ROMset and wrote a MAME driver that aims to reproduce in the most faithful way the work of Melilli at Model Racing in late '70s.
3886
3887 The game driver is not based on hardware inspection and is solely derived from assumptions I've made looking at the assembler
3888 code and comments written into the source files of the game. Several of those hypotheses came following the directions of
3889 previous yet contemporary Model Racing works (Eg: Claybuster) and were confirmed by Melilli himself.
3890
3891 Being unreleased this game lacks an official name, thus the name used in the source files was used instead.
3892
3893 ***********************************************************************************************************************************/
3894
orbite_scattered_colorram_r(ATTR_UNUSED address_space & space,ATTR_UNUSED offs_t offset,ATTR_UNUSED u8 mem_mask)3895 u8 orbite_state::orbite_scattered_colorram_r(ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED u8 mem_mask)
3896 {
3897 return m_scattered_colorram[(offset & 0x1f) | ((offset & 0x1f80) >> 2)];
3898 }
3899
3900
orbite_scattered_colorram_w(ATTR_UNUSED address_space & space,ATTR_UNUSED offs_t offset,ATTR_UNUSED u8 data,ATTR_UNUSED u8 mem_mask)3901 void orbite_state::orbite_scattered_colorram_w(ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED u8 data, ATTR_UNUSED u8 mem_mask)
3902 {
3903 m_scattered_colorram[(offset & 0x1f) | ((offset & 0x1f80) >> 2)] = data;
3904 }
3905
3906
orbite_map(address_map & map)3907 void orbite_state::orbite_map(address_map &map)
3908 {
3909 // map(0x0000, 0x1fff).rom();
3910 map(0x0000, 0x07ff).rom();
3911 map(0x0800, 0x1fff).rom();
3912 map(0x2000, 0x3fff).ram().share("main_ram");
3913 map(0xc000, 0xdfff).rw(FUNC(orbite_state::orbite_scattered_colorram_r), FUNC(orbite_state::orbite_scattered_colorram_w));
3914 }
3915
3916
orbite_io_map(address_map & map)3917 void orbite_state::orbite_io_map(address_map &map)
3918 {
3919 map(0x06, 0x06).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
3920
3921 // Ports verified from source code
3922 map(0x08, 0x08).r(m_mb14241, FUNC(mb14241_device::shift_result_r));
3923 map(0x20, 0x20).w(m_mb14241, FUNC(mb14241_device::shift_count_w));
3924 map(0x40, 0x40).w(m_mb14241, FUNC(mb14241_device::shift_data_w));
3925
3926 map(0x66, 0x66).portr("IN0");
3927 map(0x76, 0x76).portr("IN1");
3928 map(0x7A, 0x7A).portr("IN2");
3929 }
3930
3931
3932 static INPUT_PORTS_START( orbite )
3933 PORT_START("IN0")
3934 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY
3935 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
3936
3937 PORT_START("IN1")
3938 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY
3939
3940 PORT_START("IN2") // port 2
3941 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 )
3942 INPUT_PORTS_END
3943
3944
machine_start()3945 void orbite_state::machine_start()
3946 {
3947 _8080bw_state::machine_start();
3948
3949 m_scattered_colorram = std::make_unique<uint8_t []>(0x800);
3950 save_pointer(&m_scattered_colorram[0], "m_scattered_colorram", 0x800);
3951 }
3952
orbite(machine_config & config)3953 void orbite_state::orbite(machine_config &config)
3954 {
3955 mw8080bw_root(config);
3956
3957 // basic machine hardware
3958 I8080(config.replace(), m_maincpu, 1996800); /* 19.968MHz / 10 */
3959 m_maincpu->set_addrmap(AS_PROGRAM, &orbite_state::orbite_map);
3960 m_maincpu->set_addrmap(AS_IO, &orbite_state::orbite_io_map);
3961 m_maincpu->set_irq_acknowledge_callback(FUNC(orbite_state::interrupt_vector));
3962
3963 WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 255);
3964
3965 // add shifter
3966 MB14241(config, m_mb14241);
3967
3968 // video hardware
3969 m_screen->set_screen_update(FUNC(orbite_state::screen_update_orbite));
3970
3971 PALETTE(config, m_palette, palette_device::RGB_3BIT);
3972 }
3973
3974 /**************************************************************************************************************/
3975
3976 ROM_START( searthin )
3977 ROM_REGION( 0x10000, "maincpu", 0 )
3978 ROM_LOAD( "earthinv.h", 0x0000, 0x0800, CRC(58a750c8) SHA1(90bfa4ea06f38e67fe4286d37d151632439249d2) )
3979 ROM_LOAD( "earthinv.g", 0x0800, 0x0800, CRC(b91742f1) SHA1(8d9ca92405fbaf1d5a7138d400986616378d061e) )
3980 ROM_LOAD( "earthinv.f", 0x1000, 0x0800, CRC(4acbbc60) SHA1(b8c1efb4251a1e690ff6936ec956d6f66136a085) )
3981 ROM_LOAD( "earthinv.e", 0x1800, 0x0800, CRC(df397b12) SHA1(e7e8c080cb6baf342ec637532e05d38129ae73cf) )
3982 ROM_END
3983
3984 ROM_START( searthina )
3985 ROM_REGION( 0x10000, "maincpu", 0 )
3986 ROM_LOAD( "unkh.h1", 0x0000, 0x0400, CRC(272b9bf3) SHA1(dd57d6a88d42024a39640931114107b547b4c520) )
3987 ROM_LOAD( "unkg.g1", 0x0400, 0x0400, CRC(61bb6101) SHA1(8fc8bbd8ac93d239e0cf0e4881f709860ec2c973) )
3988 ROM_LOAD( "unkf.f1", 0x0800, 0x0400, CRC(2a8d9cd5) SHA1(7948d79b326e729bcb629607c8797156ff9fb0e8) )
3989 ROM_LOAD( "unke.e1", 0x0c00, 0x0400, CRC(1938d349) SHA1(3bd2a0deb126cf2e22bc3cb53e9a59c3875be260) )
3990 ROM_LOAD( "unkd.d1", 0x1000, 0x0400, CRC(9bc2ab88) SHA1(1e9f3b780135827d16ba25978382b097a8110828) )
3991 ROM_LOAD( "unkc.c1", 0x1400, 0x0400, CRC(d4e2dada) SHA1(e98271212fc89e240fdf97d292edd17dc8dd4191) )
3992 ROM_LOAD( "unkb.b1", 0x1800, 0x0400, CRC(ab645a9c) SHA1(9c286f8a031a8babfb8e9b594e05e133c338b342) )
3993 ROM_LOAD( "unka.a1", 0x1c00, 0x0400, CRC(4b65bd7c) SHA1(3931f9f5b0e3339ab484eee14473d3a474935fd9) )
3994 ROM_END
3995
3996 ROM_START( supinvsion )
3997 ROM_REGION( 0x10000, "maincpu", 0 )
3998 ROM_LOAD( "h-am4708.bin", 0x0000, 0x0400, CRC(281570f0) SHA1(9499d9abbe50df67865fe7a258abe58b4dc1f185) )
3999 ROM_LOAD( "g-am4708.bin", 0x0400, 0x0400, CRC(c0b6cd79) SHA1(c2383b5d40a47ea518ce7f76ea035dbe4bfe0161) )
4000 ROM_LOAD( "f-am4708.bin", 0x0800, 0x0400, CRC(2a8d9cd5) SHA1(7948d79b326e729bcb629607c8797156ff9fb0e8) )
4001 ROM_LOAD( "e-am4708.bin", 0x0c00, 0x0400, CRC(03e9ef33) SHA1(8141c089fb300ebbd857bab8dee0875014fe8409) )
4002 ROM_LOAD( "d-am4708.bin", 0x1000, 0x0400, CRC(b2527c77) SHA1(3a855118d4296ea3afbf553191630f32dfbe8220) )
4003 ROM_LOAD( "c-am4708.bin", 0x1400, 0x0400, CRC(a883ff01) SHA1(fdc3d1fb4e4d732810ab6746f0df640dc1642e3c) )
4004 ROM_LOAD( "b-am4708.bin", 0x1800, 0x0400, CRC(46e02fcf) SHA1(5509f1a04bf44fbfebffb5dd5c78f503960b100d) )
4005 ROM_LOAD( "a-am4708.bin", 0x1c00, 0x0400, CRC(bf4d3267) SHA1(45d789e57543e8efad16cb82bf898ba6b6e1ec3e) )
4006 ROM_END
4007
4008 ROM_START( searthie )
4009 ROM_REGION( 0x10000, "maincpu", 0 )
4010 ROM_LOAD( "searthie.h", 0x0000, 0x0800, CRC(92b08b91) SHA1(4cebb70735e5231717619c7b8e5d3080694338b7) )
4011 ROM_LOAD( "searthie.g", 0x0800, 0x0800, CRC(23e24bcc) SHA1(a62e8422554f7db34796d4fb1c01e8ddebc7e978) )
4012 ROM_LOAD( "searthie.f", 0x1000, 0x0800, CRC(8700286a) SHA1(e0a3c099bc60e70bc9a6c0325944454d9d26428f) )
4013 ROM_LOAD( "searthie.e", 0x1800, 0x0800, CRC(baf949b0) SHA1(bfda97a3ef59fcdf87814afc6918507190c3e315) )
4014 ROM_END
4015
4016 ROM_START( invadrmr )
4017 ROM_REGION( 0x10000, "maincpu", 0 )
4018 ROM_LOAD( "11.1t", 0x0000, 0x0400, CRC(389d44b6) SHA1(5d2581b8bc0da918ce57cf319e06b5b31989c681) )
4019 ROM_LOAD( "sv02.1p", 0x0400, 0x0400, CRC(0e159534) SHA1(94b2015a9d38ca738705b8d024a79fd2f9855b98) )
4020 ROM_LOAD( "20.1n", 0x0800, 0x0400, CRC(805b04f0) SHA1(209f42dfde1593699ccf3755e9267d425416d910) )
4021 ROM_LOAD( "sv04.1j", 0x1400, 0x0400, CRC(1293b826) SHA1(165cd5d08a19eadbe954145b12807f10df9e691a) )
4022 ROM_LOAD( "13.1h", 0x1800, 0x0400, CRC(76b4a6ea) SHA1(076f8d12ba7ebe66b83a40d9a848075627776554) )
4023 ROM_LOAD( "sv06.1g", 0x1c00, 0x0400, CRC(2c68e0b4) SHA1(a5e5357120102ad32792bf3ef6362f45b7ba7070) )
4024 ROM_END
4025
4026 ROM_START( claybust )
4027 ROM_REGION( 0x10000, "maincpu", 0 )
4028 ROM_LOAD( "0.a1", 0x0000, 0x0400, CRC(90810582) SHA1(a5c3655bae6f92a3cd0eae3a5a3c25e414d4fdf0) )
4029 ROM_LOAD( "1.a2", 0x0400, 0x0400, CRC(5ce6fb0e) SHA1(19fa3fbc0dd7e0fa4fffc005ded5a814c3b48f2d) )
4030 ROM_LOAD( "2.a4", 0x0800, 0x0400, CRC(d4c1d523) SHA1(1a4785095caa8200d7e1d8d53a93c8e298f52c65) )
4031 ROM_LOAD( "3.a5", 0x0c00, 0x0400, CRC(1ca00825) SHA1(74633a4903a51f1eebdd09679597dbe86db2e001) )
4032 ROM_LOAD( "4.a6", 0x1000, 0x0400, CRC(09a21120) SHA1(e976d2c173c649e51b032bc5dad54f006864155c) )
4033 ROM_LOAD( "5.a8", 0x1400, 0x0400, CRC(92cd4da8) SHA1(217e00012a52c479bf0b0cf37ce556387755740d) )
4034 ROM_END
4035
4036 ROM_START( gunchamp )
4037 ROM_REGION( 0x10000, "maincpu", 0 )
4038 ROM_LOAD( "251.a1", 0x0000, 0x0400, CRC(f27a8c1e) SHA1(510debd1ac2c0986f99c217e3078208a39d7837c) )
4039 ROM_LOAD( "252.a2", 0x0400, 0x0400, CRC(d53b8f91) SHA1(56919f4c88fb3b5c23b5365f0866698bfceb2762) )
4040 ROM_LOAD( "253.a4", 0x0800, 0x0400, CRC(9ef35c6c) SHA1(95bda3e2cdd50f7ac989c581481bad5f1ef2992f) )
4041 ROM_LOAD( "254.a5", 0x0c00, 0x0400, CRC(ba5b562d) SHA1(47819d7e5ef3700e700a5f2faa9537bc2199561c) )
4042 ROM_LOAD( "255.a6", 0x1000, 0x0400, CRC(00ea8293) SHA1(9c921fa4bafc36fc16a3f5f8588887342936d433) )
4043 ROM_LOAD( "256.a8", 0x1400, 0x0400, CRC(e271150c) SHA1(36d0c0c1335036b4a994e8a38904adcf74161c59) )
4044 ROM_LOAD( "257.a9", 0x1800, 0x0400, CRC(0da5d9ad) SHA1(c87c6ab248bfd2b75f070343a8f7fcbaed13f4e3) )
4045 ROM_LOAD( "258.a10", 0x1c00, 0x0400, CRC(471d4052) SHA1(c8ccda2eba44c2ab49f5fc2874fe70c2bdae35d3) )
4046 ROM_END
4047
4048 ROM_START( spaceatt )
4049 ROM_REGION( 0x10000, "maincpu", 0 )
4050 ROM_LOAD( "h", 0x0000, 0x0400, CRC(d0c32d72) SHA1(b3bd950b1ba940fbeb5d95e55113ed8f4c311434) ) // == SV01
4051 ROM_LOAD( "sv02.bin", 0x0400, 0x0400, CRC(0e159534) SHA1(94b2015a9d38ca738705b8d024a79fd2f9855b98) ) // == SV02
4052 ROM_LOAD( "f", 0x0800, 0x0400, CRC(483e651e) SHA1(ae795ee3bc53ac3936f6cf2c72cca7a890783513) ) // == SV10
4053 ROM_LOAD( "c", 0x1400, 0x0400, CRC(1293b826) SHA1(165cd5d08a19eadbe954145b12807f10df9e691a) ) // == SV04
4054 ROM_LOAD( "b", 0x1800, 0x0400, CRC(6fc782aa) SHA1(0275adbeec455e146f4443b0b836b1171436b79b) )
4055 ROM_LOAD( "a", 0x1c00, 0x0400, CRC(211ac4a3) SHA1(e08e90a4e77cfa30400626a484c9f37c87ea13f9) )
4056 ROM_END
4057
4058 /* SPACE ATTACK set is from Video Game GmbH - 1010 A / Top board shows Video-Games - 6302 LICH - 1034
4059 Roms are set up as 1k bproms (82S137) and data is 1 rom top 4 bits, another bottom 4. This data once assembled matches original spaceatt set */
4060 ROM_START( spaceattbp )
4061 ROM_REGION( 0x10000, "maincpu", 0 )
4062 ROMX_LOAD( "06e.bin", 0x0000, 0x0400, CRC(68301d05) SHA1(b0c33a982b42378da828281e74356d58fbea1d86), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI )
4063 ROMX_LOAD( "12l.bin", 0x0000, 0x0400, CRC(c5a5228f) SHA1(7861b5567d44e972d728551d47aab9b92d71ffc7), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO )
4064 ROMX_LOAD( "05de.bin", 0x0400, 0x0400, CRC(42032c14) SHA1(753948e7f52b88655c894b48d419b76de07c14f2), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI )
4065 ROMX_LOAD( "11hl.bin", 0x0400, 0x0400, CRC(d5d3811a) SHA1(7d2d983fa88b0349a90a6331ca3e18583125d21e), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO )
4066 ROMX_LOAD( "04d.bin", 0x0800, 0x0400, CRC(5f5e540c) SHA1(9092794a878494dbe34c2f05a212ff7b9d00fc55), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI )
4067 ROMX_LOAD( "10h.bin", 0x0800, 0x0400, CRC(9d5ef6f1) SHA1(ef584678373375a7f13307d7c4597639a5f6010e), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO )
4068 ROMX_LOAD( "03b.bin", 0x1400, 0x0400, CRC(89e13008) SHA1(1ad82ae0607af27925b42758f8c86a0e89079620), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI )
4069 ROMX_LOAD( "09g.bin", 0x1400, 0x0400, CRC(c16f5503) SHA1(cf36beac472c5c405342193b7ef434d32b37a4a8), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO )
4070 ROMX_LOAD( "02ab.bin", 0x1800, 0x0400, CRC(ffa166c2) SHA1(10496fcbb272130cc200dfb1886808559be8d6ea), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI )
4071 ROMX_LOAD( "08f.bin", 0x1800, 0x0400, CRC(b5fa1a2b) SHA1(7eab1cb9a9f95520a37ee4fb2b246ef072dedcbd), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO )
4072 ROMX_LOAD( "01a.bin", 0x1c00, 0x0400, CRC(44f8e99c) SHA1(9adecdadb16edaebde02892e30f9f87fb98f4ae1), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI )
4073 ROMX_LOAD( "07ef.bin", 0x1c00, 0x0400, CRC(9560880d) SHA1(866d6c3714b939814ce48707be53a69ef8355b34), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO )
4074 ROM_END
4075
4076 /* SPACE ATTACK set is from Video Games GmbH - Board Typ 1010 C / Top board shows Video-Games - 6302 LICH - 1034B
4077 Contains same data as spaceatt but with added 00 fill to make larger roms (b+a=E1, 00fill+c=F1, f+00fill=G1, h+sv02=H1) */
4078 ROM_START( spaceatt2k )
4079 ROM_REGION( 0x10000, "maincpu", 0 )
4080 ROM_LOAD( "h1.bin", 0x0000, 0x0800, CRC(734f5ad8) SHA1(ff6200af4c9110d8181249cbcef1a8a40fa40b7f) )
4081 ROM_LOAD( "g1.bin", 0x0800, 0x0800, CRC(6bfaca4a) SHA1(16f48649b531bdef8c2d1446c429b5f414524350) )
4082 ROM_LOAD( "f1.bin", 0x1000, 0x0800, CRC(0ccead96) SHA1(537aef03468f63c5b9e11dd61e253f7ae17d9743) )
4083 ROM_LOAD( "e1.bin", 0x1800, 0x0800, CRC(19971ca7) SHA1(373900e6796aa681f35158e2c4c7665574990906) )
4084 ROM_END
4085
4086 ROM_START( spaceat2 )
4087 ROM_REGION( 0x10000, "maincpu", 0 )
4088 ROM_LOAD( "spaceatt.h", 0x0000, 0x0800, CRC(a31d0756) SHA1(2b76929654ed0b180091348546dac29fc6e5438e) )
4089 ROM_LOAD( "spaceatt.g", 0x0800, 0x0800, CRC(f41241f7) SHA1(d93cead75922510075433849c4f7099279eafc18) )
4090 ROM_LOAD( "spaceatt.f", 0x1000, 0x0800, CRC(4c060223) SHA1(957e75a978aa600627399061cae0a6525e92ad11) )
4091 ROM_LOAD( "spaceatt.e", 0x1800, 0x0800, CRC(7cf6f604) SHA1(469557de15178c4b2d686e5724e1006f7c20d7a4) )
4092 ROM_END
4093
4094 ROM_START( cosmicin )
4095 ROM_REGION( 0x10000, "maincpu", 0 )
4096 ROM_LOAD( "cn7472n-7921.bin", 0x0000, 0x0800, CRC(734f5ad8) SHA1(ff6200af4c9110d8181249cbcef1a8a40fa40b7f) )
4097 ROM_LOAD( "cn7471n-7918.bin", 0x0800, 0x0800, CRC(6bfaca4a) SHA1(16f48649b531bdef8c2d1446c429b5f414524350) )
4098 ROM_LOAD( "cn7470n-7918.bin", 0x1000, 0x0800, CRC(0ccead96) SHA1(537aef03468f63c5b9e11dd61e253f7ae17d9743) )
4099 ROM_LOAD( "cn7469n-7921.bin", 0x1800, 0x0800, CRC(5733048c) SHA1(e9197925396b723f5dda4653238e6e1ea287fdae) )
4100 ROM_END
4101
4102 ROM_START( galmonst )
4103 ROM_REGION( 0x10000, "maincpu", 0 )
4104 ROM_LOAD( "h.5m", 0x0000, 0x0400, CRC(8a0395e9) SHA1(f456aaa0301a1d0f3f9f45cbe39c5ff14909ecd3) )
4105 ROM_LOAD( "g.5n", 0x0400, 0x0400, CRC(6183ed16) SHA1(8e0bc13cafa237daa5fdeda9a5d6df8f491eabc2) )
4106 ROM_LOAD( "f.5p", 0x0800, 0x0400, CRC(b6047fdd) SHA1(bc324a9bf7829a2c2bb2bbf965d64272b0d07223) )
4107 ROM_LOAD( "c.5t", 0x1400, 0x0400, CRC(e88e8c96) SHA1(43108ddb328914c68977c7c49b4c1f71073ca36b) )
4108 ROM_LOAD( "b.5u", 0x1800, 0x0400, CRC(34678b80) SHA1(17f01facb3272c963a8bca290c4ca36411b8de31) )
4109 ROM_LOAD( "a.5v", 0x1c00, 0x0400, CRC(05a6806b) SHA1(ea884110d0ea6463801cbc2f87ce9c4921b49e33) )
4110 ROM_END
4111
4112 ROM_START( spacecom )
4113 ROM_REGION( 0x10000, "maincpu", 0 )
4114 ROM_LOAD( "1f.ic67", 0x0000, 0x0400, BAD_DUMP CRC(703f2cbe) SHA1(b183f9fbedd8658399555c0ba21ecab6370e86cb) )
4115 ROM_LOAD( "2g.ic82", 0x0400, 0x0400, CRC(7269b719) SHA1(6fd5879a6f2a5b1d38c7f00996037418df9491d3) )
4116 ROM_LOAD( "3f.ic68", 0x0800, 0x0400, CRC(6badac4f) SHA1(7b998d8fb21d143f26d605fe2a7dbbe1cf65210f) )
4117 ROM_LOAD( "4g.ic83", 0x0c00, 0x0400, CRC(75b59ea7) SHA1(e00eb4a9cf662c84e18fc9efc29cedebf0c5af67) )
4118 ROM_LOAD( "5f.ic69", 0x1000, 0x0400, CRC(84b61117) SHA1(3e41ff74ad02a7da4bbc22f3b84917eec067bbca) )
4119 ROM_LOAD( "6g.ic84", 0x1400, 0x0400, CRC(de383625) SHA1(7ec0d7171e771c4b43e026f3f50a88d8ab2236bb) )
4120 ROM_LOAD( "7f.ic70", 0x1800, 0x0400, CRC(5a23dbc8) SHA1(4d193bb7b38fb7ccd57d2c72463a3fe123dbca58) )
4121 ROM_LOAD( "8g.ic85", 0x1c00, 0x0400, CRC(a5a467e3) SHA1(ef591059e55d21f14baa8af1f1324a9bc2ada8c4) )
4122 ROM_END
4123
4124 ROM_START( sinvzen )
4125 ROM_REGION( 0x10000, "maincpu", 0 )
4126 ROM_LOAD( "1.bin", 0x0000, 0x0400, CRC(9b0da779) SHA1(a52ccdb252eb69c497aa5eafb35d7f25a311b44e) )
4127 ROM_LOAD( "2.bin", 0x0400, 0x0400, CRC(9858ccab) SHA1(5ad8e5ef0d95779f0e513634b97bc330c9269ce4) )
4128 ROM_LOAD( "3.bin", 0x0800, 0x0400, CRC(a1cc38b5) SHA1(45fc9466b548d511b8174f6f3a4783164dd59489) )
4129 ROM_LOAD( "4.bin", 0x0c00, 0x0400, CRC(1f2db7a8) SHA1(354ad155743f724f2bebcab422f1ef96cb57c683) )
4130 ROM_LOAD( "5.bin", 0x1000, 0x0400, CRC(9b505fcd) SHA1(7461b7087d31dbe09f7b3078584ccaa2c9122c95) )
4131 ROM_LOAD( "6.bin", 0x1400, 0x0400, CRC(de0ca0ae) SHA1(a15d1218361839a2a2bf8da3f78d81621251fe1c) )
4132 ROM_LOAD( "7.bin", 0x1800, 0x0400, CRC(25a296f6) SHA1(37df98384c1513f0e33a350dfcaa99655f91c9ba) )
4133 ROM_LOAD( "8.bin", 0x1c00, 0x0400, CRC(f4bc4a98) SHA1(bff3806750a3695a136f398c7dbb69a0b7daa88a) )
4134 ROM_END
4135
4136 ROM_START( sinvemag )
4137 ROM_REGION( 0x10000, "maincpu", 0 )
4138 ROM_LOAD( "sv01.36", 0x0000, 0x0400, CRC(86bb8cb6) SHA1(a75648e7f2446c756d86624b15d387d25ce47b66) ) // sldh - == SV0H
4139 ROM_LOAD( "emag_si.b", 0x0400, 0x0400, CRC(febe6d1a) SHA1(e1c3a24b4fa5862107ada1f9d7249466e8c3f06a) )
4140 ROM_LOAD( "emag_si.c", 0x0800, 0x0400, CRC(aafb24f7) SHA1(6718cdfae09f77d735be5145b9d202a73d8ed9db) )
4141 ROM_LOAD( "emag_si.d", 0x1400, 0x0400, CRC(68c4b9da) SHA1(8953dc0427b09b71bd763e65caa7deaca09a15da) )
4142 ROM_LOAD( "emag_si.e", 0x1800, 0x0400, CRC(c4e80586) SHA1(3d427d5a2eea3c911ec7bd055e06e6747ce5e84d) )
4143 ROM_LOAD( "emag_si.f", 0x1c00, 0x0400, CRC(077f5ef2) SHA1(625de6839073ac4c904f949efc1b2e0afea5d676) )
4144 ROM_END
4145
4146 ROM_START( tst_invd )
4147 ROM_REGION( 0x10000, "maincpu", 0 )
4148 ROM_LOAD( "test.h", 0x0000, 0x0800, CRC(f86a2eea) SHA1(4a72ff01f3e6d16bbe9bf7f123cd98895bfbed9a) ) /* The Test ROM */
4149 ROM_LOAD( "invaders.g", 0x0800, 0x0800, CRC(6bfaca4a) SHA1(16f48649b531bdef8c2d1446c429b5f414524350) )
4150 ROM_LOAD( "invaders.f", 0x1000, 0x0800, CRC(0ccead96) SHA1(537aef03468f63c5b9e11dd61e253f7ae17d9743) )
4151 ROM_LOAD( "invaders.e", 0x1800, 0x0800, CRC(14e538b0) SHA1(1d6ca0c99f9df71e2990b610deb9d7da0125e2d8) )
4152 ROM_END
4153
4154 ROM_START( alieninv )
4155 ROM_REGION( 0x10000, "maincpu", 0 )
4156 ROM_LOAD( "alieninv.h", 0x0000, 0x0800, CRC(6ad601c3) SHA1(9fc88698f98ce43992a5044d28d3e19751f82772) )
4157 ROM_LOAD( "alieninv.g", 0x0800, 0x0800, CRC(c6bb6fb3) SHA1(01a12163309f967dcffce19890b1e0d079021fc2) )
4158 ROM_LOAD( "alieninv.f", 0x1000, 0x0800, CRC(1d2ff324) SHA1(209766a981fdd3a68e36da3d8122a244c883cae7) )
4159 ROM_LOAD( "alieninv.e", 0x1800, 0x0800, CRC(2f2e6791) SHA1(08a1f17bcfec598182386f1c43e4fc7b476212de) )
4160 ROM_END
4161
4162 ROM_START( alieninvp2 )
4163 ROM_REGION( 0x10000, "maincpu", 0 )
4164 ROM_LOAD( "1h.bin", 0x0000, 0x0800, CRC(c46df7f4) SHA1(eec34b3d5585bae03c7b80585daaa05ddfcc2164) )
4165 ROM_LOAD( "1g.bin", 0x0800, 0x0800, CRC(4b1112d6) SHA1(b693667656e5d8f44eeb2ea730f4d4db436da579) )
4166 ROM_LOAD( "1f.bin", 0x1000, 0x0800, CRC(adca18a5) SHA1(7e02651692113db31fd469868ae5ffdb0f941ecf) )
4167 ROM_LOAD( "1e.bin", 0x1800, 0x0800, CRC(0449cb52) SHA1(8adcb7cd4492fa6649d9ee81172d8dff56621d64) )
4168 ROM_END
4169
4170 ROM_START( sitv1 ) // rev 1
4171 ROM_REGION( 0x10000, "maincpu", 0 )
4172 ROM_LOAD( "tv01.s1", 0x0000, 0x0800, CRC(9f37b146) SHA1(0b7ef79dbc3de3beeae3bf222d086b60249d429f) )
4173 ROM_LOAD( "tv02.rp1", 0x0800, 0x0800, CRC(3c759a90) SHA1(d847d592dee592b1d3a575c21d89eaf3f7f6ae1b) )
4174 ROM_LOAD( "tv03.n1", 0x1000, 0x0800, CRC(0ad3657f) SHA1(a501f316535c50f7d7a20ef8e6dede1526a3f2a8) )
4175 ROM_LOAD( "tv04.m1", 0x1800, 0x0800, CRC(cd2c67f6) SHA1(60f9d8fe2d36ff589277b607f07c1edc917c755c) )
4176 ROM_END
4177
4178 ROM_START( sitv ) // rev 2, minor bug fixes of sitv1; delay when writing to sound latch 0x05, and another unknown change
4179 ROM_REGION( 0x10000, "maincpu", 0 )
4180 ROM_LOAD( "tv0h.s1", 0x0000, 0x0800, CRC(fef18aad) SHA1(043edeefe6a6d4934bd384eafea19326de1dbeec) )
4181 ROM_LOAD( "tv02.rp1", 0x0800, 0x0800, CRC(3c759a90) SHA1(d847d592dee592b1d3a575c21d89eaf3f7f6ae1b) )
4182 ROM_LOAD( "tv03.n1", 0x1000, 0x0800, CRC(0ad3657f) SHA1(a501f316535c50f7d7a20ef8e6dede1526a3f2a8) )
4183 ROM_LOAD( "tv04.m1", 0x1800, 0x0800, CRC(cd2c67f6) SHA1(60f9d8fe2d36ff589277b607f07c1edc917c755c) )
4184 ROM_END
4185
4186 ROM_START( sicv ) // likely not the first sicv version...
4187 ROM_REGION( 0x10000, "maincpu", 0 )
4188 ROM_LOAD( "cv17.36", 0x0000, 0x0800, CRC(3dfbe9e6) SHA1(26487df7fa0bbd0b9b7f74347c4b9318b0a73b89) )
4189 ROM_LOAD( "cv18.35", 0x0800, 0x0800, CRC(bc3c82bf) SHA1(33e39fc97bd46699be1f9b9741a86f433efdc911) )
4190 ROM_LOAD( "cv19.34", 0x1000, 0x0800, CRC(d202b41c) SHA1(868fe938ef768655c894ec95b7d9a81bf21f69ca) )
4191 ROM_LOAD( "cv20.33", 0x1800, 0x0800, CRC(c74ee7b6) SHA1(4f52db274a2d4433ab67c099ee805e8eb8516c0f) )
4192
4193 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 */
4194 ROM_LOAD( "cv01.1", 0x0000, 0x0400, CRC(037e16ac) SHA1(d585030aaff428330c91ae94d7cd5c96ebdd67dd) )
4195 ROM_LOAD( "cv02.2", 0x0400, 0x0400, CRC(8263da38) SHA1(2e7c769d129e6f8a1a31eba1e02777bb94ac32b2) )
4196 ROM_END
4197
4198 ROM_START( sicv1 ) // Original Taito board AA017742B - data match for sicv, just smaller program roms (2708s vs. 2716s)
4199 ROM_REGION( 0x10000, "maincpu", 0 )
4200 ROM_LOAD( "cv11.s1", 0x0000, 0x0400, CRC(309d4582) SHA1(e60a1a696111502c115ee00d84cd418c85aba9af) )
4201 ROM_LOAD( "cv12.r1", 0x0400, 0x0400, CRC(70153e09) SHA1(b75068b7738aa232f75272c539fca04b3d0c2c4a) )
4202 ROM_LOAD( "cv13.np1", 0x0800, 0x0400, CRC(2ca24fee) SHA1(4b516ebd5a777b001443159233d89fc0a331f756) )
4203 ROM_FILL( 0x0c00, 0x0400, 0xff ) /* rom socket at M1 is unpopulated */
4204 ROM_FILL( 0x1000, 0x0400, 0xff ) /* rom socket at L1 is unpopulated */
4205 ROM_LOAD( "cv14.jk1", 0x1400, 0x0400, CRC(556d9a97) SHA1(fb792e981658d79d1c801b01f06345c237e9e803) )
4206 ROM_LOAD( "cv15.i1", 0x1800, 0x0400, CRC(ac520cf5) SHA1(47281256083d64a2754b2045c252e74fe5b71153) )
4207 ROM_LOAD( "cv16.g1", 0x1c00, 0x0400, CRC(285cfb59) SHA1(53eab8ed07dc9ca107e2e91b4556b9424a073530) )
4208
4209 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 */
4210 ROM_LOAD( "cv01.1", 0x0000, 0x0400, CRC(037e16ac) SHA1(d585030aaff428330c91ae94d7cd5c96ebdd67dd) )
4211 ROM_LOAD( "cv02.2", 0x0400, 0x0400, CRC(8263da38) SHA1(2e7c769d129e6f8a1a31eba1e02777bb94ac32b2) )
4212 ROM_END
4213
4214 ROM_START( sisv1 ) // rev 1, this version may or may not really exist (may have been test/prototype only?)
4215 ROM_REGION( 0x10000, "maincpu", 0 )
4216 ROM_LOAD( "sv01.36", 0x0000, 0x0400, CRC(d0c32d72) SHA1(b3bd950b1ba940fbeb5d95e55113ed8f4c311434) )
4217 ROM_LOAD( "sv02.35", 0x0400, 0x0400, CRC(0e159534) SHA1(94b2015a9d38ca738705b8d024a79fd2f9855b98) )
4218 ROM_LOAD( "sv03.34", 0x0800, 0x0400, NO_DUMP )
4219 ROM_LOAD( "sv04.31", 0x1400, 0x0400, CRC(1293b826) SHA1(165cd5d08a19eadbe954145b12807f10df9e691a) )
4220 ROM_LOAD( "sv05.42", 0x1800, 0x0400, NO_DUMP )
4221 ROM_LOAD( "sv06.41", 0x1c00, 0x0400, CRC(2c68e0b4) SHA1(a5e5357120102ad32792bf3ef6362f45b7ba7070) )
4222 ROM_END
4223
4224 ROM_START( sisv2 ) // rev 2
4225 ROM_REGION( 0x10000, "maincpu", 0 )
4226 ROM_LOAD( "sv01.36", 0x0000, 0x0400, CRC(d0c32d72) SHA1(b3bd950b1ba940fbeb5d95e55113ed8f4c311434) )
4227 ROM_LOAD( "sv02.35", 0x0400, 0x0400, CRC(0e159534) SHA1(94b2015a9d38ca738705b8d024a79fd2f9855b98) )
4228 ROM_LOAD( "sv10.34", 0x0800, 0x0400, CRC(483e651e) SHA1(ae795ee3bc53ac3936f6cf2c72cca7a890783513) )
4229 ROM_LOAD( "sv04.31", 0x1400, 0x0400, CRC(1293b826) SHA1(165cd5d08a19eadbe954145b12807f10df9e691a) )
4230 ROM_LOAD( "sv09.42", 0x1800, 0x0400, CRC(cd80b13f) SHA1(0f4b9537b99fe3cdeebe525efb1869a1be0bc704) )
4231 ROM_LOAD( "sv06.41", 0x1c00, 0x0400, CRC(2c68e0b4) SHA1(a5e5357120102ad32792bf3ef6362f45b7ba7070) )
4232 ROM_END
4233
4234 ROM_START( sisv3 ) // rev 3
4235 ROM_REGION( 0x10000, "maincpu", 0 )
4236 ROM_LOAD( "sv0h.36", 0x0000, 0x0400, CRC(86bb8cb6) SHA1(a75648e7f2446c756d86624b15d387d25ce47b66) )
4237 ROM_LOAD( "sv02.35", 0x0400, 0x0400, CRC(0e159534) SHA1(94b2015a9d38ca738705b8d024a79fd2f9855b98) )
4238 ROM_LOAD( "sv10.34", 0x0800, 0x0400, CRC(483e651e) SHA1(ae795ee3bc53ac3936f6cf2c72cca7a890783513) )
4239 ROM_LOAD( "sv04.31", 0x1400, 0x0400, CRC(1293b826) SHA1(165cd5d08a19eadbe954145b12807f10df9e691a) )
4240 ROM_LOAD( "sv09.42", 0x1800, 0x0400, CRC(cd80b13f) SHA1(0f4b9537b99fe3cdeebe525efb1869a1be0bc704) )
4241 ROM_LOAD( "sv06.41", 0x1c00, 0x0400, CRC(2c68e0b4) SHA1(a5e5357120102ad32792bf3ef6362f45b7ba7070) )
4242 ROM_END
4243
4244 ROM_START( sisv ) // rev 4, with 5-digit scoring
4245 ROM_REGION( 0x10000, "maincpu", 0 )
4246 ROM_LOAD( "sv0h.36", 0x0000, 0x0400, CRC(86bb8cb6) SHA1(a75648e7f2446c756d86624b15d387d25ce47b66) )
4247 ROM_LOAD( "sv11.35", 0x0400, 0x0400, CRC(febe6d1a) SHA1(e1c3a24b4fa5862107ada1f9d7249466e8c3f06a) )
4248 ROM_LOAD( "sv12.34", 0x0800, 0x0400, CRC(a08e7202) SHA1(de9f7c851d1b894915e720cfc5d794cdb31752f6) )
4249 ROM_LOAD( "sv04.31", 0x1400, 0x0400, CRC(1293b826) SHA1(165cd5d08a19eadbe954145b12807f10df9e691a) )
4250 ROM_LOAD( "sv13.42", 0x1800, 0x0400, CRC(a9011634) SHA1(1f1369ecb02078042cfdf17a497b8dda6dd23793) )
4251 ROM_LOAD( "sv14.41", 0x1c00, 0x0400, CRC(58730370) SHA1(13dc806bcecd2d6089a85dd710ac2869413f7475) )
4252 ROM_END
4253
4254 ROM_START( spacerng ) // 2017/05 update: a PCB set (CVN 3-layer) was found with a 'Shinnihon Kikaku' sticker on the top board. Sold by SNK?
4255 ROM_REGION( 0x10000, "maincpu", 0 )
4256 ROM_LOAD( "sr1.u36", 0x0000, 0x0800, CRC(b984f52d) SHA1(fdc8b249c0b65339977f91b674bdcb435aa99474) )
4257 ROM_LOAD( "sr2.u35", 0x0800, 0x0800, CRC(4b4f07e6) SHA1(408dcdae3e80a09584d8ebd6491bc90c4def1fcf) )
4258 ROM_LOAD( "sr3.u34", 0x1000, 0x0800, CRC(edc28ba9) SHA1(c96668f709d3fa0b97a6b118614e9c139f8f54cc) )
4259 ROM_LOAD( "sr4.u33", 0x1800, 0x0800, CRC(a95f559f) SHA1(f597c7af96a9d039fd8e54d976d68a065f6bf0c8) )
4260
4261 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 */
4262 ROM_LOAD( "cv01.1", 0x0000, 0x0400, CRC(037e16ac) SHA1(d585030aaff428330c91ae94d7cd5c96ebdd67dd) )
4263 ROM_LOAD( "cv02.2", 0x0400, 0x0400, CRC(8263da38) SHA1(2e7c769d129e6f8a1a31eba1e02777bb94ac32b2) )
4264 ROM_END
4265
4266 ROM_START( spceking )
4267 ROM_REGION( 0x10000, "maincpu", 0 )
4268 ROM_LOAD( "invaders.h", 0x0000, 0x0800, CRC(734f5ad8) SHA1(ff6200af4c9110d8181249cbcef1a8a40fa40b7f) )
4269 ROM_LOAD( "spcekng2", 0x0800, 0x0800, CRC(96dcdd42) SHA1(e18d7ffca92e863ef40e235b2be973d8c5879fdb) )
4270 ROM_LOAD( "spcekng3", 0x1000, 0x0800, CRC(95fc96ad) SHA1(38175edad0e538a1561cec8f7613f15ae274dd14) )
4271 ROM_LOAD( "spcekng4", 0x1800, 0x0800, CRC(54170ada) SHA1(1e8b3774355ec0d448f04805a917f4c1fe64bceb) )
4272 ROM_END
4273
4274 ROM_START( spcewars )
4275 ROM_REGION( 0x10000, "maincpu", 0 )
4276 ROM_LOAD( "sanritsu.1", 0x0000, 0x0400, CRC(ca331679) SHA1(5c362c3d1c721d293bcddbef4033533769c8f0e0) )
4277 ROM_LOAD( "sanritsu.2", 0x0400, 0x0400, CRC(48dc791c) SHA1(91a98205c83ca38961e6ba2ac43a41e6e8bc2675) )
4278 ROM_LOAD( "sanritsu.3", 0x0800, 0x0400, CRC(c34842cb) SHA1(6565ff760909f9339194b7ea45aa8c4e871b9f56) )
4279 ROM_LOAD( "sanritsu.4", 0x0c00, 0x0400, CRC(a7fdfd0e) SHA1(d8501881ce38d7bca29010debf34a8b996f1f103) )
4280 ROM_LOAD( "sanritsu.5", 0x1000, 0x0400, CRC(77475431) SHA1(15a04a2655847ee462be65d1065d643c872bb47c) )
4281 ROM_LOAD( "sanritsu.6", 0x1400, 0x0400, CRC(392ef82c) SHA1(77c98c11ee727ed3ed6e118f13d97aabdb555540) )
4282 ROM_LOAD( "sanritsu.7", 0x1800, 0x0400, CRC(b3a93df8) SHA1(3afc96814149d4d5343fe06eac09f808384d02c4) )
4283 ROM_LOAD( "sanritsu.8", 0x1c00, 0x0400, CRC(64fdc3e1) SHA1(c3c278bc236ced7fc85e1a9b018e80be6ab33402) )
4284 ROM_LOAD( "sanritsu.9", 0x4000, 0x0400, CRC(b2f29601) SHA1(ce855e312f50df7a74682974803cb4f9b2d184f3) )
4285 ROM_END
4286
4287 ROM_START( spcewarla ) // PCB was in a Space Invarders Part II cabinet
4288 ROM_REGION( 0x10000, "maincpu", 0 )
4289 ROM_LOAD( "ps1.bin", 0x0000, 0x0400, CRC(222f6913) SHA1(c0ae8fa8a3b21ebd10cd16952a1c84da1bbd44e3) )
4290 ROM_LOAD( "ps2.bin", 0x0400, 0x0400, CRC(48dc791c) SHA1(91a98205c83ca38961e6ba2ac43a41e6e8bc2675) )
4291 ROM_LOAD( "ps3.bin", 0x0800, 0x0400, CRC(58ddc18c) SHA1(3d96ec3e6abd1430754083503af623fb388146f6) )
4292 ROM_LOAD( "ps4.bin", 0x0c00, 0x0400, CRC(1da5e383) SHA1(8fe84cf290baddad57872092c31abf76950ce00b) )
4293 ROM_LOAD( "ps5.bin", 0x1000, 0x0400, CRC(3b6d9f23) SHA1(39d5144e1636caca89e3694ba3ab3a1ed241128c) )
4294 ROM_LOAD( "ps6.bin", 0x1400, 0x0400, CRC(50be9b7a) SHA1(8372929d71d9a1efc0963cd952ab6c1f574eee32) )
4295 ROM_LOAD( "ps7.bin", 0x1800, 0x0400, CRC(7b8efd7c) SHA1(c2a8d7ddea6f15e483914f032ae6b8aab87b4c14) )
4296 ROM_LOAD( "ps8.bin", 0x1c00, 0x0400, CRC(64fdc3e1) SHA1(c3c278bc236ced7fc85e1a9b018e80be6ab33402) )
4297 ROM_LOAD( "ps9.bin", 0x4000, 0x0400, CRC(b2f29601) SHA1(ce855e312f50df7a74682974803cb4f9b2d184f3) )
4298
4299 ROM_REGION( 0x0800, "proms", 0 ) /* color map */
4300 ROM_LOAD( "cv01_1.bin", 0x0000, 0x0400, BAD_DUMP CRC(aac24f34) SHA1(ad110e776547fb48baac568bb50d61854537ca34) ) // the dumper didn't actually dump this yet
4301 ROM_LOAD( "cv02_2.bin", 0x0400, 0x0400, BAD_DUMP CRC(2bdf83a0) SHA1(01ffbd43964c41987e7d44816271308f9a70802b) ) // the dumper didn't actually dump this yet
4302 ROM_END
4303
4304 ROM_START( spacewr3 )
4305 ROM_REGION( 0x10000, "maincpu", 0 )
4306 ROM_LOAD( "ic36.bin", 0x0000, 0x0800, CRC(9e30f88a) SHA1(314dfb2920d9b43b977cc19e40ac315e6933c3b9) )
4307 ROM_LOAD( "ic35.bin", 0x0800, 0x0800, CRC(40c2d55b) SHA1(b641b63046d242ad23911143ed840011fc98eaff) )
4308 ROM_LOAD( "ic34.bin", 0x1000, 0x0800, CRC(b435f021) SHA1(2d0d813b99d571b53770fa878a1f82ca67827caa) )
4309 ROM_LOAD( "ic33.bin", 0x1800, 0x0800, CRC(cbdc6fe8) SHA1(63038ea09d320c54e3d1cf7f043c17bba71bf13c) )
4310 ROM_LOAD( "ic32.bin", 0x4000, 0x0800, CRC(1e5a753c) SHA1(5b7cd7b347203f4edf816f02c366bd3b1b9517c4) )
4311 ROM_END
4312
4313 ROM_START( swipeout )
4314 ROM_REGION( 0x10000, "maincpu", 0 )
4315 ROM_LOAD( "sw1.bin", 0x0000, 0x0800, CRC(576b5897) SHA1(aa749f745560f33b9bbdf0f3a56b947130862bb2) ) // 2516
4316 ROM_LOAD( "sw2.bin", 0x0800, 0x0800, CRC(40c2d55b) SHA1(b641b63046d242ad23911143ed840011fc98eaff) ) // 2516
4317 ROM_LOAD( "sw3.bin", 0x1000, 0x0800, CRC(65e8ce64) SHA1(8da1836d710e06cd0ac566ba13049326b6295f0b) ) // 2516
4318 ROM_LOAD( "sw4.bin", 0x1800, 0x0800, CRC(ddf1fb9c) SHA1(25184fe9126054f6b5907d8a6a9e95e43126f4e3) ) // 2516
4319 ROM_LOAD( "sw5.bin", 0x4000, 0x0800, CRC(1e5a753c) SHA1(5b7cd7b347203f4edf816f02c366bd3b1b9517c4) ) // 2516
4320 ROM_END
4321
4322 ROM_START( invaderl )
4323 ROM_REGION( 0x10000, "maincpu", 0 )
4324 ROM_LOAD( "c01", 0x0000, 0x0400, CRC(499f253a) SHA1(e13353194277f5d35e92db9b11912b5f392f51b7) )
4325 ROM_LOAD( "c02", 0x0400, 0x0400, CRC(2d0b2e1f) SHA1(2e0262d9dba607824fcd720d2995531649bdd03d) )
4326 ROM_LOAD( "c03", 0x0800, 0x0400, CRC(03033dc2) SHA1(87d7838e6a6542c2c5510af593df45137cb397c6) )
4327 ROM_LOAD( "c07", 0x1000, 0x0400, CRC(5a7bbf1f) SHA1(659f2a8c646660d316d6e70f1d9548375f1da63f) )
4328 ROM_LOAD( "c04", 0x1400, 0x0400, CRC(455b1fa7) SHA1(668800a0a3ba18d8b54c2aa4dfd4bd01a667d679) )
4329 ROM_LOAD( "c05", 0x1800, 0x0400, CRC(40cbef75) SHA1(15994ed8bb8ab8faed6198926873851062c9d95f) )
4330 ROM_LOAD( "sv06.bin", 0x1c00, 0x0400, CRC(2c68e0b4) SHA1(a5e5357120102ad32792bf3ef6362f45b7ba7070) )
4331 ROM_END
4332
4333 ROM_START( invadernc ) // PCBs etched LOGITEC EK-104-101A and EK-104-102, but bootleg Nas Corp set
4334 ROM_REGION( 0x10000, "maincpu", 0 )
4335 ROM_LOAD( "1.ic65", 0x0000, 0x0400, CRC(499f253a) SHA1(e13353194277f5d35e92db9b11912b5f392f51b7) )
4336 ROM_LOAD( "2.ic66", 0x0400, 0x0400, CRC(4b7f232e) SHA1(222987a29225d625557273547660b1bbcc06bcba) )
4337 ROM_LOAD( "3.ic67", 0x0800, 0x0400, CRC(5c6bdd47) SHA1(2ead561b6bef68ed973a9536418dc6afe78a84ca) )
4338 ROM_LOAD( "7.ic57", 0x1000, 0x0400, CRC(5a7bbf1f) SHA1(659f2a8c646660d316d6e70f1d9548375f1da63f) )
4339 ROM_LOAD( "4.ic70", 0x1400, 0x0400, CRC(455b1fa7) SHA1(668800a0a3ba18d8b54c2aa4dfd4bd01a667d679) )
4340 ROM_LOAD( "5.ic71", 0x1800, 0x0400, CRC(b9ea71a0) SHA1(fcf99955798043a34dcbabecf3219972f836ac96) )
4341 ROM_LOAD( "6.ic72", 0x1c00, 0x0400, CRC(2c68e0b4) SHA1(a5e5357120102ad32792bf3ef6362f45b7ba7070) )
4342
4343 ROM_REGION( 0x400, "proms", 0 ) // reads weren't consistent. Below are listed the two best reads
4344 ROM_LOAD( "82s137_1.ic17", 0x0000, 0x0400, CRC(1eb2bc60) SHA1(663f3186af8f64bd0f3f9b113011fc045e44cbc0) )
4345 //ROM_LOAD( "82s137_2.ic17", 0x0000, 0x0400, CRC(2d653d0f) SHA1(57c212c8b6dbaeffdc1cd54d4b0defbf69c96b66) )
4346 ROM_END
4347
4348 ROM_START( invader4 )
4349 ROM_REGION( 0x10000, "maincpu", 0 )
4350 ROM_LOAD( "spin4.a", 0x0000, 0x0800, CRC(bb386dfe) SHA1(cc00f3e4f6ca4c05bae038a24ccdb213fb951cfc) )
4351 ROM_LOAD( "spin4.b", 0x0800, 0x0800, CRC(63afa11d) SHA1(d8cedfa010a49237e31f6ebaed35134cb1c3ce68) )
4352 ROM_LOAD( "spin4.c", 0x1000, 0x0800, CRC(22b0317c) SHA1(8fd037bf5f89a7bcb06042697410566d5180912a) )
4353 ROM_LOAD( "spin4.d", 0x1800, 0x0800, CRC(9102fd68) SHA1(3523e69314844fcd1863b1e9a9d7fcebe9ee174b) )
4354 ROM_END
4355
4356 ROM_START( jspecter )
4357 ROM_REGION( 0x10000, "maincpu", 0 )
4358 ROM_LOAD( "3305.u6", 0x0000, 0x1000, CRC(ab211a4f) SHA1(d675ed29c3479d7318f8559bd56dd619cf631b6a) )
4359 ROM_LOAD( "3306.u7", 0x1400, 0x1000, CRC(0df142a7) SHA1(2f1c32d6fe7eafb7808fef0bdeb69b4909427417) )
4360 ROM_END
4361
4362 ROM_START( jspecter2 )
4363 ROM_REGION( 0x10000, "maincpu", 0 )
4364 ROM_LOAD( "unksi.b2", 0x0000, 0x1000, CRC(0584b6c4) SHA1(c130021b878bde2beda4a189f71bbfed61088535) )
4365 ROM_LOAD( "unksi.a2", 0x1400, 0x1000, CRC(58095955) SHA1(545df3bb9ee4ff09f491d7a4b704e31aa311a8d7) )
4366 ROM_END
4367
4368 ROM_START( invadpt2 )
4369 ROM_REGION( 0x10000, "maincpu", 0 )
4370 ROM_LOAD( "pv01", 0x0000, 0x0800, CRC(7288a511) SHA1(ff617872784c28ed03591aefa9f0519e5651701f) )
4371 ROM_LOAD( "pv02", 0x0800, 0x0800, CRC(097dd8d5) SHA1(8d68654d54d075c0f0d7f63c87ff4551ce8b7fbf) )
4372 ROM_LOAD( "pv03", 0x1000, 0x0800, CRC(1766337e) SHA1(ea959bf06c9930d83a07559e191a28641efb07ac) )
4373 ROM_LOAD( "pv04", 0x1800, 0x0800, CRC(8f0e62e0) SHA1(a967b155f15f8432222fcc78b23121b00c405c5c) )
4374 ROM_LOAD( "pv05", 0x4000, 0x0800, CRC(19b505e9) SHA1(6a31a37586782ce421a7d2cffd8f958c00b7b415) )
4375
4376 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 */
4377 ROM_LOAD( "pv06.1", 0x0000, 0x0400, CRC(a732810b) SHA1(a5fabffa73ca740909e23b9530936f9274dff356) )
4378 ROM_LOAD( "pv07.2", 0x0400, 0x0400, CRC(2c5b91cb) SHA1(7fa4d4aef85473b1b4f18734230c164e72be44e7) )
4379 ROM_END
4380
4381 ROM_START( invadpt2a ) // Comes from original TAITO PCBs. Same as invadpt2 but with half sized ROMs
4382 ROM_REGION( 0x10000, "maincpu", 0 )
4383 ROM_LOAD( "uv01.36", 0x0000, 0x0400, CRC(82dbf2c7) SHA1(c767d8b866db4a5059bd79f962a90ce3a962e1e6) )
4384 ROM_LOAD( "uv02.35", 0x0400, 0x0400, CRC(c867f5b4) SHA1(686318fda6edde297aecaf33f480bfa075fa6eca) )
4385 ROM_LOAD( "uv03.34", 0x0800, 0x0400, CRC(cb23ccc1) SHA1(86be2d14d52b3404e1a25c573bd25b97729d82a1) )
4386 ROM_LOAD( "uv04.33", 0x0c00, 0x0400, CRC(9a11abe2) SHA1(f5337183c7f279d75ddeeab24f4f132aa2ee103b) )
4387 ROM_LOAD( "uv05.32", 0x1000, 0x0400, CRC(787821dd) SHA1(ae6e7297fccf8ae9aced8cb8b58fda1a616fa43b) )
4388 ROM_LOAD( "uv06.31", 0x1400, 0x0400, CRC(f5e8114f) SHA1(dd5f5b00ee662ac2c7234f1e278441879fc7d394) )
4389 ROM_LOAD( "uv07.42", 0x1800, 0x0400, CRC(07839f04) SHA1(989f77219b578b1b14a18e0fd6bf9079e3b1e155) )
4390 ROM_LOAD( "uv08.41", 0x1c00, 0x0400, CRC(a7e1c6ef) SHA1(2b96617a1631d74068f51e911c74fe554a448776) )
4391 ROM_LOAD( "uv09.40", 0x4000, 0x0400, CRC(261a39ae) SHA1(6554b33d9a44632a5856eb45aaafbdeed8244ce4) )
4392 ROM_LOAD( "uv10.39", 0x4400, 0x0400, CRC(b2cbcc8b) SHA1(f11961445e81efeeb636bc430e372f79c10efd8c) )
4393
4394 ROM_REGION( 0x0800, "proms", 0 ) // color maps player 1/player 2
4395 ROM_LOAD( "pv06", 0x0000, 0x0400, CRC(a732810b) SHA1(a5fabffa73ca740909e23b9530936f9274dff356) )
4396 ROM_LOAD( "pv07", 0x0400, 0x0400, CRC(2c5b91cb) SHA1(7fa4d4aef85473b1b4f18734230c164e72be44e7) )
4397 ROM_END
4398
4399 ROM_START( invadpt2br )
4400 ROM_REGION( 0x10000, "maincpu", 0 )
4401 ROM_LOAD( "pv01", 0x0000, 0x0800, CRC(7288a511) SHA1(ff617872784c28ed03591aefa9f0519e5651701f) )
4402 /* pv01 had weird encryption applied to it, very likely to have been done post-dump. */
4403 // for (offs = 0x4fc; offs < 0x5fc; offs++)
4404 // rom[offs] ^= 0x6c;
4405
4406 // 0x4fc + 1 * 0x56
4407 // for (offs = 0x54e; offs < 0x552; offs++)
4408 // rom[offs] ^= 0x03;
4409
4410 // 0x4fc + 2 * 0x56
4411 // for (offs = 0x5a4; offs < 0x5a8; offs++)
4412 // rom[offs] ^= 0x01;
4413
4414 // 0x4fc + 3 * 0x56
4415 // for (offs = 0x5fa; offs < 0x5fc; offs++)
4416 // rom[offs] ^= 0x02;
4417
4418 ROM_LOAD( "br_pv02", 0x0800, 0x0800, CRC(420c7c35) SHA1(b51265f4d9e5a8cf9d53099a97cadd25ea0b34ce) )
4419 ROM_LOAD( "br_pv03", 0x1000, 0x0800, CRC(dffd04b9) SHA1(d51a0f27e90b0a49cf2d57ec82a863dcae9f3ea4) )
4420 ROM_LOAD( "br_pv04", 0x1800, 0x0800, CRC(b0626aff) SHA1(b7de6c21030732bd0479228f057ca4c87b913b0a) )
4421 ROM_LOAD( "br_pv05", 0x4000, 0x0800, CRC(84c70bb8) SHA1(75fef3ee6da3e7e01a257629016bc10a23691d62) )
4422
4423 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 (taken from parent set) */
4424 ROM_LOAD( "pv06.1", 0x0000, 0x0400, CRC(a732810b) SHA1(a5fabffa73ca740909e23b9530936f9274dff356) )
4425 ROM_LOAD( "pv07.2", 0x0400, 0x0400, CRC(2c5b91cb) SHA1(7fa4d4aef85473b1b4f18734230c164e72be44e7) )
4426 ROM_END
4427
4428 ROM_START( invaddlx )
4429 ROM_REGION( 0x10000, "maincpu", 0 )
4430 ROM_LOAD( "invdelux.h", 0x0000, 0x0800, CRC(e690818f) SHA1(0860fb03a64d34a9704a1459a5e96929eafd39c7) )
4431 ROM_LOAD( "invdelux.g", 0x0800, 0x0800, CRC(4268c12d) SHA1(df02419f01cf0874afd1f1aa16276751acd0604a) )
4432 ROM_LOAD( "invdelux.f", 0x1000, 0x0800, CRC(f4aa1880) SHA1(995d77b67cb4f2f3781c2c8747cb058b7c1b3412) )
4433 ROM_LOAD( "invdelux.e", 0x1800, 0x0800, CRC(408849c1) SHA1(f717e81017047497a2e9f33f0aafecfec5a2ed7d) )
4434 ROM_LOAD( "invdelux.d", 0x4000, 0x0800, CRC(e8d5afcd) SHA1(91fde9a9e7c3dd53aac4770bd169721a79b41ed1) )
4435 ROM_END
4436
4437 /* Runs on a Space Invaders Part II boardset with an epoxy module in place of the 8080 CPU */
4438 ROM_START( vortex )
4439 ROM_REGION( 0x10000, "maincpu", 0 )
4440 ROM_LOAD( "1.t36", 0x0000, 0x0800, CRC(577417a6) SHA1(13ed1b989b8ea27cea88be7872921ff9283b5dd6) )
4441 ROM_LOAD( "2.t35", 0x0800, 0x0800, CRC(126d0049) SHA1(4c189a2364bca8682543d605e84d458bf81ee489) )
4442 ROM_LOAD( "3.t34", 0x1000, 0x0800, CRC(4a2510b3) SHA1(1c62583b7baf8ee2b6014a6e5dfc7e2d516886d1) )
4443 ROM_LOAD( "4.t33", 0x1800, 0x0800, CRC(da0274fe) SHA1(b8ab1b16d66700f9ca6a2380a5b6796eaef6e1bd) )
4444 ROM_LOAD( "5.t32", 0x4000, 0x0800, CRC(a3de49d6) SHA1(e302c6fd2705c6e7f9125b52b2dcb034cc88a90e) )
4445 ROM_LOAD( "6.t31", 0x4800, 0x0800, CRC(271085d0) SHA1(a772cec8135bc746f6c56aa294eb22c0604e16f9) )
4446 ROM_END
4447
4448
4449 ROM_START( moonbase )
4450 ROM_REGION( 0x10000, "maincpu", 0 )
4451 ROM_LOAD( "ze3-1.a4", 0x0000, 0x0400, CRC(82dbf2c7) SHA1(c767d8b866db4a5059bd79f962a90ce3a962e1e6) )
4452 ROM_LOAD( "ze3-2.c4", 0x0400, 0x0400, CRC(c867f5b4) SHA1(686318fda6edde297aecaf33f480bfa075fa6eca) )
4453 ROM_LOAD( "ze3-3.e4", 0x0800, 0x0400, CRC(cb23ccc1) SHA1(86be2d14d52b3404e1a25c573bd25b97729d82a1) )
4454 ROM_LOAD( "ze3-4.f4", 0x0c00, 0x0400, CRC(9a11abe2) SHA1(f5337183c7f279d75ddeeab24f4f132aa2ee103b) ) // 'Taito Corp' string hidden in ROM
4455 ROM_LOAD( "ze3-5.h4", 0x1000, 0x0400, CRC(2b105ed3) SHA1(fa0767089b3aaec25be39e950e7163ecbdc2f39f) )
4456 ROM_LOAD( "ze3-6.l4", 0x1400, 0x0400, CRC(cb3d6dcb) SHA1(b4923b12a141c76b7d50274f19a3224db26a5669) )
4457 ROM_LOAD( "ze3-7.a5", 0x1800, 0x0400, CRC(774b52c9) SHA1(ddbbba874ac069fb930b364a890c45675ec389f7) )
4458 ROM_LOAD( "ze3-8.c5", 0x1c00, 0x0400, CRC(e88ea83b) SHA1(ef05be4783c860369ee5ecd4844837207e99ad9f) )
4459 ROM_LOAD( "ze3-9.e5", 0x4000, 0x0400, CRC(2dd5adfa) SHA1(62cb98cad1e48de0e0cbf30392d35834b38dadbd) )
4460 ROM_LOAD( "ze3-10.f5", 0x4400, 0x0400, CRC(1e7c22a4) SHA1(b34173375494ffbf5400dd4014a683a9807f4f08) )
4461
4462 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 */
4463 ROM_LOAD( "cv02.h7", 0x0400, 0x0400, CRC(2bdf83a0) SHA1(01ffbd43964c41987e7d44816271308f9a70802b) ) /* NEC B406 or compatible BPROM, like the 82S137 */
4464 ROM_LOAD( "cv01.g7", 0x0000, 0x0400, CRC(aac24f34) SHA1(ad110e776547fb48baac568bb50d61854537ca34) ) /* NEC B406 or compatible BPROM, like the 82S137 */
4465 ROM_END
4466
4467 ROM_START( moonbasea )
4468 ROM_REGION( 0x10000, "maincpu", 0 )
4469 ROM_LOAD( "ze3-1.a4", 0x0000, 0x0400, CRC(82dbf2c7) SHA1(c767d8b866db4a5059bd79f962a90ce3a962e1e6) )
4470 ROM_LOAD( "ze3-2.c4", 0x0400, 0x0400, CRC(c867f5b4) SHA1(686318fda6edde297aecaf33f480bfa075fa6eca) )
4471 ROM_LOAD( "ze3-3.e4", 0x0800, 0x0400, CRC(cb23ccc1) SHA1(86be2d14d52b3404e1a25c573bd25b97729d82a1) )
4472 ROM_LOAD( "ze3-4_alt.f4", 0x0c00, 0x0400, CRC(86a00411) SHA1(f518f5098512d6d23a8887605707844c1b32e54f) ) // 'Nichibutsu' string hidden in ROM
4473 ROM_LOAD( "ze3-5.h4", 0x1000, 0x0400, CRC(2b105ed3) SHA1(fa0767089b3aaec25be39e950e7163ecbdc2f39f) )
4474 ROM_LOAD( "ze3-6.l4", 0x1400, 0x0400, CRC(cb3d6dcb) SHA1(b4923b12a141c76b7d50274f19a3224db26a5669) )
4475 ROM_LOAD( "ze3-7.a5", 0x1800, 0x0400, CRC(774b52c9) SHA1(ddbbba874ac069fb930b364a890c45675ec389f7) )
4476 ROM_LOAD( "ze3-8.c5", 0x1c00, 0x0400, CRC(e88ea83b) SHA1(ef05be4783c860369ee5ecd4844837207e99ad9f) )
4477 ROM_LOAD( "ze3-9.e5", 0x4000, 0x0400, CRC(2dd5adfa) SHA1(62cb98cad1e48de0e0cbf30392d35834b38dadbd) )
4478 ROM_LOAD( "ze3-10.f5", 0x4400, 0x0400, CRC(1e7c22a4) SHA1(b34173375494ffbf5400dd4014a683a9807f4f08) )
4479
4480 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 */
4481 ROM_LOAD( "cv02.h7", 0x0400, 0x0400, CRC(2bdf83a0) SHA1(01ffbd43964c41987e7d44816271308f9a70802b) ) /* NEC B406 or compatible BPROM, like the 82S137 */
4482 ROM_LOAD( "cv01.g7", 0x0000, 0x0400, CRC(aac24f34) SHA1(ad110e776547fb48baac568bb50d61854537ca34) ) /* NEC B406 or compatible BPROM, like the 82S137 */
4483 ROM_END
4484
4485 ROM_START( invrvnge ) // Space Invaders hw + sound daughterboard
4486 ROM_REGION( 0x10000, "maincpu", 0 )
4487 ROM_LOAD( "h.ic36", 0x0000, 0x0800, CRC(0e229b9f) SHA1(617197bf94e9700cbbb2f32487dc47b318d4f2af) )
4488 ROM_LOAD( "g.ic35", 0x0800, 0x0800, CRC(26b38aa4) SHA1(f281c7ec47ce6ab61bfda2e7aa6a5b8a01f2c11e) )
4489 ROM_LOAD( "f.ic34", 0x1000, 0x0800, CRC(b3b2749e) SHA1(4f854f981396e2d6a959dd48cff12234074fb69b) )
4490 ROM_LOAD( "e.ic33", 0x1800, 0x0800, CRC(d8e75102) SHA1(86d5618944265947e3ce60fdf048d8fff4a55744) )
4491
4492 ROM_REGION( 0x10000, "audiocpu", 0 ) // encrypted
4493 ROM_LOAD( "snd.2c", 0xc000, 0x0800, CRC(135f3b16) SHA1(d472a6ca32c4a16cc1faf09f4a4876d75cd4ba24) )
4494 ROM_LOAD( "snd.1c", 0xe000, 0x0800, CRC(152fc85e) SHA1(df207d6e690287a56e4e330deaa5ee40a179f1fc) )
4495
4496 ROM_REGION( 0x0800, "proms", 0 )
4497 ROM_LOAD( "colour.bin", 0x0000, 0x0800, CRC(7de74988) SHA1(0b8c94b2bfdbc3921d60aad765df8af611f3fdd7) )
4498 ROM_END
4499
4500 ROM_START( invrvngea ) // Space Invaders hw + sound daughterboard
4501 ROM_REGION( 0x10000, "maincpu", 0 )
4502 ROM_LOAD( "h.ic36", 0x0000, 0x0800, CRC(0914b279) SHA1(91e465f56ed0dc8c68e109e33ec9d2bda2616a21) ) // sldh
4503 ROM_LOAD( "g.ic35", 0x0800, 0x0800, CRC(84d9497c) SHA1(fb1b5fc49365fbf89e5418789e64efd186cdeecf) ) // sldh
4504 ROM_LOAD( "f.ic34", 0x1000, 0x0800, CRC(78d34d97) SHA1(a50c19df12e75c644b014d74a463094e249db207) ) // sldh
4505 ROM_LOAD( "e.ic33", 0x1800, 0x0800, CRC(30c71887) SHA1(17c9e905eb327435d52b6d51842f7f42a5e6ab7d) ) // sldh
4506
4507 ROM_REGION( 0x10000, "audiocpu", 0 ) // encrypted
4508 ROM_LOAD( "snd.2c", 0xc000, 0x0800, CRC(135f3b16) SHA1(d472a6ca32c4a16cc1faf09f4a4876d75cd4ba24) )
4509 ROM_LOAD( "snd.1c", 0xe000, 0x0800, CRC(152fc85e) SHA1(df207d6e690287a56e4e330deaa5ee40a179f1fc) )
4510
4511 ROM_REGION( 0x0800, "proms", 0 )
4512 ROM_LOAD( "colour.bin", 0x0000, 0x0800, CRC(7de74988) SHA1(0b8c94b2bfdbc3921d60aad765df8af611f3fdd7) )
4513 ROM_END
4514
4515 ROM_START( invrvngeb ) // source unknown
4516 ROM_REGION( 0x10000, "maincpu", 0 )
4517 ROM_LOAD( "invrvnge.h", 0x0000, 0x0800, CRC(aca41bbb) SHA1(ca71f792abd6d9a44d15b19d2ccf678e82ccba4f) )
4518 ROM_LOAD( "invrvnge.g", 0x0800, 0x0800, CRC(cfe89dad) SHA1(218b6a0b636c49c4cdc3667e8b1387ef0e257115) )
4519 ROM_LOAD( "invrvnge.f", 0x1000, 0x0800, CRC(e350de2c) SHA1(e845565e2f96f9dec3242ec5ab75910a515428c9) )
4520 ROM_LOAD( "invrvnge.e", 0x1800, 0x0800, CRC(1ec8dfc8) SHA1(fc8fbe1161958f57c9f4ccbcab8a769184b1c562) )
4521
4522 ROM_REGION( 0x10000, "audiocpu", 0 ) // encrypted
4523 ROM_LOAD( "snd.2c", 0xc000, 0x0800, BAD_DUMP CRC(135f3b16) SHA1(d472a6ca32c4a16cc1faf09f4a4876d75cd4ba24) ) // not dumped, taken from parent
4524 ROM_LOAD( "snd.1c", 0xe000, 0x0800, BAD_DUMP CRC(152fc85e) SHA1(df207d6e690287a56e4e330deaa5ee40a179f1fc) ) // not dumped, taken from parent
4525
4526 ROM_REGION( 0x0800, "proms", 0 )
4527 ROM_LOAD( "colour.bin", 0x0000, 0x0800, BAD_DUMP CRC(7de74988) SHA1(0b8c94b2bfdbc3921d60aad765df8af611f3fdd7) ) // not dumped, taken from parent
4528 ROM_END
4529
4530 ROM_START( invrvngedu ) // single PCB
4531 ROM_REGION( 0x10000, "maincpu", 0 )
4532 ROM_LOAD( "ir.5m", 0x0000, 0x0800, CRC(b145cb71) SHA1(127eb11de7ab9835f06510fb12838c0b728c0d42) )
4533 ROM_LOAD( "ir.5n", 0x0800, 0x0800, CRC(660e8af3) SHA1(bd52eadf4ee3d717fd5bd7206e1e87d729250c92) )
4534 ROM_LOAD( "ir.5p", 0x1000, 0x0800, CRC(6ec5a9ad) SHA1(d1e84d2d60c6128c092f2cd20a2b87216df3034b) )
4535 ROM_LOAD( "ir.5r", 0x1800, 0x0800, CRC(74516811) SHA1(0f595c7b0fae5f3f83fdd1ffed5a408ee77c9438) )
4536
4537 ROM_REGION( 0x10000, "audiocpu", 0 ) // encrypted
4538 ROM_LOAD( "ir.1t", 0xc000, 0x0800, BAD_DUMP CRC(135f3b16) SHA1(d472a6ca32c4a16cc1faf09f4a4876d75cd4ba24) ) // not dumped, taken from parent
4539 ROM_LOAD( "ir.1u", 0xe000, 0x0800, BAD_DUMP CRC(152fc85e) SHA1(df207d6e690287a56e4e330deaa5ee40a179f1fc) ) // not dumped, taken from parent
4540
4541 ROM_REGION( 0x0800, "proms", 0 )
4542 ROM_LOAD( "ir.3r", 0x0000, 0x0800, CRC(57da51a9) SHA1(a8cb0b45c52eef353b83fe75b61e4990e27eb124) )
4543 ROM_END
4544
4545 ROM_START( invrvngegw ) // single PCB
4546 ROM_REGION( 0x10000, "maincpu", 0 )
4547 ROM_LOAD( "ir.5m", 0x0000, 0x0800, CRC(4fe35d1f) SHA1(469d563f88229cf163f8b21dce9e68f75d3d214e) ) // sldh
4548 ROM_LOAD( "ir.5n", 0x0800, 0x0800, CRC(92d0442c) SHA1(1d104fbb225ce1a3a72e47af396a641030d990c2) ) // sldh
4549 ROM_LOAD( "ir.5p", 0x1000, 0x0800, CRC(18d2372d) SHA1(d19b7bd315226ef0a565b296964b221fa4714413) ) // sldh
4550 ROM_LOAD( "ir.5r", 0x1800, 0x0800, CRC(657ddf27) SHA1(957c6bbdb2133d4697d3302b2358979d1451b6d5) ) // sldh
4551
4552 ROM_REGION( 0x10000, "audiocpu", 0 ) // encrypted
4553 ROM_LOAD( "ir.1t", 0xc000, 0x0800, BAD_DUMP CRC(64e9e81e) SHA1(3390f8bab219cf134b33ae21c473da0873e01929) ) // sldh - bad? yes extremely bad, throw it away
4554 ROM_LOAD( "ir.1u", 0xe000, 0x0800, CRC(152fc85e) SHA1(df207d6e690287a56e4e330deaa5ee40a179f1fc) )
4555
4556 ROM_REGION( 0x0800, "proms", 0 )
4557 ROM_LOAD( "ir.3r", 0x0000, 0x0800, CRC(6ce639bf) SHA1(73752f5886dcf8729d9853ddc258770f5c724ca3) ) // sldh
4558 ROM_END
4559
4560
4561 ROM_START( spclaser )
4562 ROM_REGION( 0x10000, "maincpu", 0 )
4563 ROM_LOAD( "la01", 0x0000, 0x0800, CRC(bedc0078) SHA1(a5bb0cbbb8e3f27d03beb8101b2be1111d73689d) )
4564 ROM_LOAD( "la02", 0x0800, 0x0800, CRC(43bc65c5) SHA1(5f9827c02c2d221e1607359c840374ff7fb92fbf) )
4565 ROM_LOAD( "la03", 0x1000, 0x0800, CRC(1083e9cc) SHA1(7ad45c6230c9e02fcf51e3414c15e2237eebbd7a) )
4566 ROM_LOAD( "la04", 0x1800, 0x0800, CRC(5116b234) SHA1(b165b2574cbcb26a5bb43f91df5f8be5f111f486) )
4567
4568 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 */
4569 /* !! not dumped yet, these were taken from sisv/intruder */
4570 ROM_LOAD( "01.1", 0x0000, 0x0400, BAD_DUMP CRC(aac24f34) SHA1(ad110e776547fb48baac568bb50d61854537ca34) )
4571 ROM_LOAD( "02.2", 0x0400, 0x0400, BAD_DUMP CRC(2bdf83a0) SHA1(01ffbd43964c41987e7d44816271308f9a70802b) )
4572 ROM_END
4573
4574 ROM_START( intruder )
4575 ROM_REGION( 0x10000, "maincpu", 0 )
4576 ROM_LOAD( "la01-1.36", 0x0000, 0x0800, CRC(bedc0078) SHA1(a5bb0cbbb8e3f27d03beb8101b2be1111d73689d) )
4577 ROM_LOAD( "la02-1.35", 0x0800, 0x0800, CRC(43bc65c5) SHA1(5f9827c02c2d221e1607359c840374ff7fb92fbf) )
4578 ROM_LOAD( "la03-1.34", 0x1000, 0x0800, CRC(278ef9cf) SHA1(74a9c1d3500ea28e50d07363a547c381999c84fa) )
4579 ROM_LOAD( "la04-1.33", 0x1800, 0x0800, CRC(5116b234) SHA1(b165b2574cbcb26a5bb43f91df5f8be5f111f486) )
4580
4581 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 */
4582 ROM_LOAD( "01.1", 0x0000, 0x0400, CRC(aac24f34) SHA1(ad110e776547fb48baac568bb50d61854537ca34) )
4583 ROM_LOAD( "02.2", 0x0400, 0x0400, CRC(2bdf83a0) SHA1(01ffbd43964c41987e7d44816271308f9a70802b) )
4584 ROM_END
4585
4586 ROM_START( laser )
4587 ROM_REGION( 0x10000, "maincpu", 0 )
4588 ROM_LOAD( "1.u36", 0x0000, 0x0800, CRC(b44e2c41) SHA1(00e0b2e088495d6f3bc175e8a53dcb3686ea8484) )
4589 ROM_LOAD( "2.u35", 0x0800, 0x0800, CRC(9876f331) SHA1(14e36b26d186d9a195492834ef989ed5664d7b65) )
4590 ROM_LOAD( "3.u34", 0x1000, 0x0800, CRC(ed79000b) SHA1(bfe0407e833ce61aa909f5f1f93c3fc1d46605e9) )
4591 ROM_LOAD( "4.u33", 0x1800, 0x0800, CRC(10a160a1) SHA1(e2d4208af11b65fc42d2856e57ee3c196f89d360) )
4592
4593 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 */
4594 /* !! not dumped yet, these were taken from intruder */
4595 ROM_LOAD( "01.1", 0x0000, 0x0400, BAD_DUMP CRC(aac24f34) SHA1(ad110e776547fb48baac568bb50d61854537ca34) )
4596 ROM_LOAD( "02.2", 0x0400, 0x0400, BAD_DUMP CRC(2bdf83a0) SHA1(01ffbd43964c41987e7d44816271308f9a70802b) )
4597 ROM_END
4598
4599 ROM_START( spcewarl )
4600 ROM_REGION( 0x10000, "maincpu", 0 )
4601 ROM_LOAD( "spcewarl.1", 0x0000, 0x0800, CRC(1fcd34d2) SHA1(674139944e0d842a85bd21b326bd735e15453038) )
4602 ROM_LOAD( "spcewarl.2", 0x0800, 0x0800, CRC(43bc65c5) SHA1(5f9827c02c2d221e1607359c840374ff7fb92fbf) )
4603 ROM_LOAD( "spcewarl.3", 0x1000, 0x0800, CRC(7820df3a) SHA1(53315857f4282c68624b338b068d80ee6828af4c) )
4604 ROM_LOAD( "spcewarl.4", 0x1800, 0x0800, CRC(adc05b8d) SHA1(c4acf75537c0662a4785d5d6a90643239a54bf43) )
4605
4606 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 */
4607 /* !! not dumped yet, these were taken from intruder */
4608 ROM_LOAD( "01.1", 0x0000, 0x0400, BAD_DUMP CRC(aac24f34) SHA1(ad110e776547fb48baac568bb50d61854537ca34) )
4609 ROM_LOAD( "02.2", 0x0400, 0x0400, BAD_DUMP CRC(2bdf83a0) SHA1(01ffbd43964c41987e7d44816271308f9a70802b) )
4610 ROM_END
4611
4612 ROM_START( galxwars )
4613 ROM_REGION( 0x10000, "maincpu", 0 )
4614 ROM_LOAD( "univgw3.0", 0x0000, 0x0400, CRC(937796f4) SHA1(88e9494cc532498e51e3a68fa1122c40f22b27dd) )
4615 ROM_LOAD( "univgw4.1", 0x0400, 0x0400, CRC(4b86e7a6) SHA1(167f9f7491a2de39d08e3e6f7057cc75b36c9340) )
4616 ROM_LOAD( "univgw5.2", 0x0800, 0x0400, CRC(47a187cd) SHA1(640c896ba25f34d323624005bd676257ad17b687) )
4617 ROM_LOAD( "univgw6.3", 0x0c00, 0x0400, CRC(7b7d22ff) SHA1(74364cf2b04dcfbbc8e0131fa12c0e574f693d34) )
4618 ROM_LOAD( "univgw1.4", 0x4000, 0x0400, CRC(0871156e) SHA1(3726d0bfe153a0afc62ea56737662074986064b0) )
4619 ROM_LOAD( "univgw2.5", 0x4400, 0x0400, CRC(6036d7bf) SHA1(36c2ad2ffdb47bbecc40fd67ced6ab51a5cd2f3e) )
4620
4621 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 */
4622 /* !! not dumped yet, these were taken from sisv/intruder */
4623 /* Or are colormaps generated by a group of TTLs, similar to dai3wksi? */
4624 ROM_LOAD( "01.1", 0x0000, 0x0400, BAD_DUMP CRC(aac24f34) SHA1(ad110e776547fb48baac568bb50d61854537ca34) )
4625 ROM_LOAD( "02.2", 0x0400, 0x0400, BAD_DUMP CRC(2bdf83a0) SHA1(01ffbd43964c41987e7d44816271308f9a70802b) )
4626 ROM_END
4627
4628 ROM_START( galxwars2 )
4629 ROM_REGION( 0x10000, "maincpu", 0 )
4630 ROM_LOAD( "3192.h6", 0x0000, 0x1000, CRC(bde6860b) SHA1(e04b8add32d8f7ea588fae6d6a387f1d40495f1b) )
4631 ROM_LOAD( "3193.h7", 0x4000, 0x1000, CRC(a17cd507) SHA1(554ab0e8bdc0e7af4a30b0ddc8aa053c8e70255c) ) /* 2nd half unused */
4632
4633 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 */
4634 /* !! not dumped yet, these were taken from sisv/intruder */
4635 /* Or are colormaps generated by a group of TTLs, similar to dai3wksi? */
4636 ROM_LOAD( "01.1", 0x0000, 0x0400, BAD_DUMP CRC(aac24f34) SHA1(ad110e776547fb48baac568bb50d61854537ca34) )
4637 ROM_LOAD( "02.2", 0x0400, 0x0400, BAD_DUMP CRC(2bdf83a0) SHA1(01ffbd43964c41987e7d44816271308f9a70802b) )
4638 ROM_END
4639
4640 ROM_START( galxwarst )
4641 ROM_REGION( 0x10000, "maincpu", 0 )
4642 ROM_LOAD( "galxwars.0", 0x0000, 0x0400, CRC(608bfe7f) SHA1(a41a40a2f0a1bb61a70b9ff8a7da925ab1db7f74) )
4643 ROM_LOAD( "galxwars.1", 0x0400, 0x0400, CRC(a810b258) SHA1(030a72fffcf240f643bc3006028cb4883cf58bbc) )
4644 ROM_LOAD( "galxwars.2", 0x0800, 0x0400, CRC(74f31781) SHA1(1de70e8ebbb26eea20ffedb7bd0ca051a67f45e7) )
4645 ROM_LOAD( "galxwars.3", 0x0c00, 0x0400, CRC(c88f886c) SHA1(4d705fbb97e3868c3f6c90c5e5753ad17cfbf5d6) )
4646 ROM_LOAD( "galxwars.4", 0x4000, 0x0400, CRC(ae4fe8fb) SHA1(494f44167dc84e4515b769c12f6e24419461dce4) )
4647 ROM_LOAD( "galxwars.5", 0x4400, 0x0400, CRC(37708a35) SHA1(df6fd521ddfa146ef93e390e47741bdbfda1e7ba) )
4648
4649 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 */
4650 /* !! not dumped yet, these were taken from sisv/intruder */
4651 /* Or are colormaps generated by a group of TTLs, similar to dai3wksi? */
4652 ROM_LOAD( "01.1", 0x0000, 0x0400, BAD_DUMP CRC(aac24f34) SHA1(ad110e776547fb48baac568bb50d61854537ca34) )
4653 ROM_LOAD( "02.2", 0x0400, 0x0400, BAD_DUMP CRC(2bdf83a0) SHA1(01ffbd43964c41987e7d44816271308f9a70802b) )
4654 ROM_END
4655
4656 ROM_START( galxwarst2 ) // only ROMs were available, no PCB so the PROMs question remains
4657 ROM_REGION( 0x10000, "maincpu", 0 )
4658 ROM_LOAD( "gv01.bin", 0x0000, 0x0400, CRC(0eeb9952) SHA1(35b4c2161773a55a9305afd7e9a054f29c12648c) )
4659 ROM_LOAD( "gv02.bin", 0x0400, 0x0400, CRC(d385c224) SHA1(9537989a467213a0b0d5685293c8c099625b8f55) )
4660 ROM_LOAD( "gv03.bin", 0x0800, 0x0400, CRC(bb9201af) SHA1(4cbaa018e72ee10e27e0b0f09d98b869638319db) )
4661 ROM_LOAD( "gv04.bin", 0x0c00, 0x0400, CRC(9a2a5b68) SHA1(7576315f5766ee5de85ac0f142d531a62066772a) )
4662 ROM_LOAD( "gv05.bin", 0x4000, 0x0400, CRC(43ac3f02) SHA1(522d8fc71f66f9e7303da25826a065b808e8891c) )
4663 ROM_LOAD( "gv06.bin", 0x4400, 0x0400, CRC(3243af69) SHA1(ccfc97c07f82bf8f3eb0225e5f7832f722631251) )
4664
4665 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 */
4666 /* !! not dumped yet, these were taken from sisv/intruder */
4667 /* Or are colormaps generated by a group of TTLs, similar to dai3wksi? */
4668 ROM_LOAD( "01.1", 0x0000, 0x0400, BAD_DUMP CRC(aac24f34) SHA1(ad110e776547fb48baac568bb50d61854537ca34) )
4669 ROM_LOAD( "02.2", 0x0400, 0x0400, BAD_DUMP CRC(2bdf83a0) SHA1(01ffbd43964c41987e7d44816271308f9a70802b) )
4670 ROM_END
4671
4672 ROM_START( starw )
4673 ROM_REGION( 0x10000, "maincpu", 0 )
4674 ROM_LOAD( "roma", 0x0000, 0x0400, CRC(60e8993c) SHA1(0bdf163ff0f2e6a8771987d4e7ac604c45af21b8) )
4675 ROM_LOAD( "romb", 0x0400, 0x0400, CRC(b8060773) SHA1(92aa358c338ef8f5773bccada8988d068764e7ea) )
4676 ROM_LOAD( "romc", 0x0800, 0x0400, CRC(307ce6b8) SHA1(f4b6f54db3d2377ec27d62d33fa1c4946559a092) )
4677 ROM_LOAD( "romd", 0x1400, 0x0400, CRC(2b0d0a88) SHA1(d079d12b6d4136519ded32415d668a02147b7601) )
4678 ROM_LOAD( "rome", 0x1800, 0x0400, CRC(5b1c3ad0) SHA1(edb42eec59c3dd7e274e2ea08fed0f3e8fc72e9e) )
4679 ROM_LOAD( "romf", 0x1c00, 0x0400, CRC(c8e42d3d) SHA1(841b27af251b9c3a964972e864fb7c88acc742e0) )
4680 ROM_END
4681
4682 ROM_START( starw1 )
4683 ROM_REGION( 0x10000, "maincpu", 0 )
4684 ROM_LOAD( "gc.75", 0x0000, 0x0400, CRC(ad10c128) SHA1(c30ff9ff5cf8dedf7654c8e2799a4bb79a30104a) )
4685 ROM_LOAD( "gc.77", 0x0400, 0x0400, CRC(ab77c474) SHA1(eb07dcad1f265834b93a8108298d4441d6a74b2e) )
4686 ROM_LOAD( "gc.76", 0x0800, 0x0400, CRC(3638aed4) SHA1(1426c9270f248fd2ab134dc35526599c02051ccd) )
4687 ROM_LOAD( "gc.80", 0x1400, 0x0400, CRC(4c67957b) SHA1(dda7bbd54e7395dea80d224e487318fb4429f027) )
4688 ROM_LOAD( "gc.81", 0x1800, 0x0400, CRC(246621ef) SHA1(bddc5253f735fa81266d725a24b1c14faabe0c6a) )
4689 ROM_LOAD( "gc.82", 0x1c00, 0x0400, CRC(19bd32ee) SHA1(a1718a6a6300c3d7df469793cb0d590c4a966aff) )
4690
4691 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 */
4692 ROM_LOAD( "cv01", 0x0000, 0x0400, CRC(8d892ef3) SHA1(c471dd6197a3c779d89c33fcb425cf3bbdf4fc15) )
4693 ROM_IGNORE( 0x0400 )
4694 ROM_LOAD( "cv02", 0x0400, 0x0400, CRC(b44ddde8) SHA1(8793f370526c072e645d8d0b9794b1b64a7701ef) )
4695 ROM_IGNORE( 0x0400 )
4696 ROM_END
4697
4698 ROM_START( lrescue )
4699 ROM_REGION( 0x10000, "maincpu", 0 )
4700 ROM_LOAD( "lrescue.1", 0x0000, 0x0800, CRC(2bbc4778) SHA1(0167f1ac1501ab0b4c4e555023fa5efed59d56ae) )
4701 ROM_LOAD( "lrescue.2", 0x0800, 0x0800, CRC(49e79706) SHA1(bed675bb97d59ae0132c007ccead0d096ed2ddf1) )
4702 ROM_LOAD( "lrescue.3", 0x1000, 0x0800, CRC(1ac969be) SHA1(67ac47f45b9fa5c530bf6047bb7d5776b52847be) )
4703 ROM_LOAD( "lrescue.4", 0x1800, 0x0800, CRC(782fee3c) SHA1(668295e9d6d99084bb4e7c5491f00fe75f4f5a88) )
4704 ROM_LOAD( "lrescue.5", 0x4000, 0x0800, CRC(58fde8bc) SHA1(663665ac5254204c1eba18357d9867034eae55eb) )
4705 ROM_LOAD( "lrescue.6", 0x4800, 0x0800, CRC(bfb0f65d) SHA1(ea0943d764a16094b6e2289f62ef117c9f838c98) )
4706
4707 ROM_REGION( 0x0800, "proms", 0 ) /* color map */
4708 ROM_LOAD( "7643-1.cpu", 0x0000, 0x0400, CRC(8b2e38de) SHA1(d6a757be31c3a179d31bd3709e71f9e38ec632e9) )
4709 ROM_RELOAD( 0x0400, 0x0400 )
4710 ROM_END
4711
4712 /*
4713
4714 MOON LANDER
4715 Manufacturer: Leisure Time Electronics
4716 Year: 1980
4717 Orientation: Vertical B/W
4718 Cabinet: Cocktail
4719
4720
4721 Leisure Time Electronics produced three games: Astro Laser, Moon Lander, and Space Ranger.
4722 The games were designed to be interchangeable with a universal cocktail cabinet which they designed and named "Star Series". The cocktail cabinets share the same artwork with all three games and has a different instruction card for each game.
4723 There were no upright or cabaret cabinets. The game ROMs operate on Taito pc boards.
4724
4725 Moon Lander is a clone/ripoff of Lunar Rescue/Destination Earth. I do not have a manual or schematics for this PCB although
4726 I was able to confirm 5 out of 8 dipswitch settings. I was surprised to hear the sounds effects are almost exactly like when Lunar Rescue used the "invaders" external samples in MAME. The PCB does not play the invader "hit" sound for some reason.
4727 I couldn't find anything obviously wrong in the sound section so it must be that it's just not hooked up as-is from the factory. There does not appear to be a sound-in-attract option.
4728
4729
4730
4731 CPU - Mitsubishi M5L8080AP
4732 X-tal - 19968 mhz (decimal not shown, device stamped very lightly)
4733 Sound - discrete, SN76477N
4734 I/O board - Taito # CV070001A/CVN00001A label= serial# 172190
4735 CPU board - Taito # AA017757 label= CVN00004 serial# 802868
4736 ROM board - Taito # AA017756A label= CVN00006 serial# 046120
4737
4738
4739
4740 EPROMs - 6x 2716
4741 ML1.u36 checksum 0002CA52
4742 ML2.u35 checksum 0002C999
4743 ML3.u34 checksum 0002BD5C
4744 ML4.u33 checksum 000252EE
4745 ML5.u32 checksum 00029365
4746 ML6.u31 checksum 0002C624
4747
4748
4749
4750 Dipswitch sw1, 8-bank
4751
4752
4753 sw1 - # ships
4754 sw2 - # ships
4755 sw3 - not used/unknown
4756 sw4 - not used/unknown
4757 sw5 - ON= enable player2 move right OFF= disabled
4758 sw6 - ON= enable player2 move left OFF= disabled
4759 sw7 - ON= enable player2 fire/shoot OFF= disabled
4760 sw8 - not used/unknown
4761 --------------------------------------------------------------------------
4762 1 2 3 4 5 6 7 8
4763 --------------------------------------------------------------------------
4764 # of player ships
4765 - 3 ships on on
4766 - 4 ships off on
4767 - 5 ships on off
4768 - 6 ships off off
4769
4770
4771 Maximum Credits= 9
4772
4773 Sound Pots:
4774 VR1 = engine sound
4775 VR2 = beam gun
4776 VR3 = ship explosion sound
4777 VR4 = enemy explosion sound (not connected?)
4778 VR5 = bonus ship sound
4779 VR6 = bonus music, footsteps, and docking sound
4780 VR7 = shooting star/ship descending sound
4781 VR8 = pot for adjusting total sounds
4782
4783 */
4784
4785 ROM_START( mlander )
4786 ROM_REGION( 0x10000, "maincpu", 0 )
4787 ROM_LOAD( "ml1.u36", 0x0000, 0x0800, CRC(69df529a) SHA1(ded3b4a04e28dc341b1fc5a8880bc48aa332bdb5) )
4788 ROM_LOAD( "ml2.u35", 0x0800, 0x0800, CRC(3b503337) SHA1(d1056c0161d481202996811503e9970d0a0c9147) )
4789 ROM_LOAD( "ml3.u34", 0x1000, 0x0800, CRC(64e53458) SHA1(629f2434eea4d31dc9db0ee7bc8364cd2bf08a04) )
4790 ROM_LOAD( "ml4.u33", 0x1800, 0x0800, CRC(c9a74571) SHA1(b1671d19eff17f7adb274013c8f11eb044ebdd28) )
4791 ROM_LOAD( "ml5.u32", 0x4000, 0x0800, CRC(88291fa2) SHA1(40c4eb51f75b5ca81a62121231d22b9f48d0f628) )
4792 ROM_LOAD( "ml6.u31", 0x4800, 0x0800, CRC(bfb0f65d) SHA1(ea0943d764a16094b6e2289f62ef117c9f838c98) )
4793
4794 ROM_REGION( 0x0800, "proms", 0 ) /* color map */
4795 ROM_LOAD( "01.bin", 0x0000, 0x0400, CRC(aac24f34) SHA1(ad110e776547fb48baac568bb50d61854537ca34) )
4796 ROM_LOAD( "02.bin", 0x0400, 0x0400, CRC(2bdf83a0) SHA1(01ffbd43964c41987e7d44816271308f9a70802b) )
4797 ROM_END
4798
4799 ROM_START( grescue )
4800 ROM_REGION( 0x10000, "maincpu", 0 )
4801 ROM_LOAD( "lrescue.1", 0x0000, 0x0800, CRC(2bbc4778) SHA1(0167f1ac1501ab0b4c4e555023fa5efed59d56ae) )
4802 ROM_LOAD( "lrescue.2", 0x0800, 0x0800, CRC(49e79706) SHA1(bed675bb97d59ae0132c007ccead0d096ed2ddf1) )
4803 ROM_LOAD( "lrescue.3", 0x1000, 0x0800, CRC(1ac969be) SHA1(67ac47f45b9fa5c530bf6047bb7d5776b52847be) )
4804 ROM_LOAD( "grescue.4", 0x1800, 0x0800, CRC(ca412991) SHA1(41b59f338a6c246e0942a8bfa3c0bca2c24c7f81) )
4805 ROM_LOAD( "grescue.5", 0x4000, 0x0800, CRC(a419a4d6) SHA1(8eeeb31cbebffc98d2c6c5b964f9b320fcf303d2) )
4806 ROM_LOAD( "lrescue.6", 0x4800, 0x0800, CRC(bfb0f65d) SHA1(ea0943d764a16094b6e2289f62ef117c9f838c98) )
4807
4808 ROM_REGION( 0x0800, "proms", 0 ) /* color map */
4809 ROM_LOAD( "7643-1.cpu", 0x0000, 0x0400, CRC(8b2e38de) SHA1(d6a757be31c3a179d31bd3709e71f9e38ec632e9) )
4810 ROM_RELOAD( 0x0400, 0x0400 )
4811 ROM_END
4812
4813 ROM_START( desterth )
4814 ROM_REGION( 0x10000, "maincpu", 0 )
4815 ROM_LOAD( "36_h.bin", 0x0000, 0x0800, CRC(f86923e5) SHA1(d19935ba3d2c1c2553b3779f1a7ad8856c003dae) )
4816 ROM_LOAD( "35_g.bin", 0x0800, 0x0800, CRC(797f440d) SHA1(a96917f2296ae467acc795eacc1533a2a2d2f401) )
4817 ROM_LOAD( "34_f.bin", 0x1000, 0x0800, CRC(993d0846) SHA1(6be0c45add41fa7e43cac96c776cd0ebb45ade7b) )
4818 ROM_LOAD( "33_e.bin", 0x1800, 0x0800, CRC(8d155fc5) SHA1(1ef5e62d71abbf870c027fa1e477121ff124b8da) )
4819 ROM_LOAD( "32_d.bin", 0x4000, 0x0800, CRC(3f531b6f) SHA1(2fc1f4912688986650e20a050a5d63ddecd4267e) )
4820 ROM_LOAD( "31_c.bin", 0x4800, 0x0800, CRC(ab019c30) SHA1(33931510a722168bcf7c30d22eac9345576b6631) )
4821 ROM_LOAD( "42_b.bin", 0x5000, 0x0800, CRC(ed9dbac6) SHA1(4553f445ac32ebb1be490b02df4924f76557e8f9) )
4822
4823 ROM_REGION( 0x0800, "proms", 0 ) /* color map */
4824 ROM_LOAD( "7643-1.cpu", 0x0000, 0x0400, CRC(8b2e38de) SHA1(d6a757be31c3a179d31bd3709e71f9e38ec632e9) )
4825 ROM_RELOAD( 0x0400, 0x0400 )
4826 ROM_END
4827
4828 ROM_START( escmars )
4829 ROM_REGION( 0x10000, "maincpu", 0 )
4830 ROM_LOAD( "2516_em.m5", 0x0000, 0x0800, CRC(6580f1c3) SHA1(fd44d4bab799e02b2d7c20fe6bf14ade9c8d4f1d) )
4831 ROM_LOAD( "2716_em.n5", 0x0800, 0x0800, CRC(49e79706) SHA1(bed675bb97d59ae0132c007ccead0d096ed2ddf1) )
4832 ROM_LOAD( "2516_em.p5", 0x1000, 0x0800, CRC(1ac969be) SHA1(67ac47f45b9fa5c530bf6047bb7d5776b52847be) )
4833 ROM_LOAD( "2516_em.r5", 0x1800, 0x0800, CRC(c1bd5949) SHA1(df390dd159766ed6489abfae8bb258115dc643e6) )
4834 ROM_LOAD( "2716_em.s5", 0x4000, 0x0800, CRC(1ec21a31) SHA1(5db61f00d8987662ccae1132fb25da318ac177dd) )
4835 ROM_LOAD( "2716_em.t5", 0x4800, 0x0800, CRC(bfb0f65d) SHA1(ea0943d764a16094b6e2289f62ef117c9f838c98) )
4836
4837 /* No proms, only colour overlay */
4838 ROM_END
4839
4840 ROM_START( lrescuem )
4841 ROM_REGION( 0x10000, "maincpu", 0 )
4842 ROM_LOAD( "48.ic36", 0x0000, 0x0400, CRC(bad5ba48) SHA1(6d8a2df172e058d16f196ad7f29430e9fd1fdaa8) )
4843 ROM_LOAD( "49.ic35", 0x0400, 0x0400, CRC(a6dc23d6) SHA1(76b9105935bf239ae90b47900f64dac3032ceecd) )
4844 ROM_LOAD( "50.ic34", 0x0800, 0x0400, CRC(90179fee) SHA1(35059f7399229b8d9588d34f79073fa4d3301614) )
4845 ROM_LOAD( "51.ic33", 0x0c00, 0x0400, CRC(1d197d87) SHA1(21e049f9c2a0fe1c0403d9d1a2dc695c4ee764f9) )
4846 ROM_LOAD( "52.ic32", 0x1000, 0x0400, CRC(4326d338) SHA1(ac31645bdf292f28dfcfcb9d5e158e5df7a6f95d) )
4847 ROM_LOAD( "53.ic31", 0x1400, 0x0400, CRC(3b272372) SHA1(39b807c810d093d7a34b102eec16f3d9baeb21f1) )
4848 ROM_LOAD( "54.ic42", 0x1800, 0x0400, CRC(a877c5b6) SHA1(862871c3dd18221d5713fe1fd2dc4f5b7cb913c1) )
4849 ROM_LOAD( "55.ic41", 0x1c00, 0x0400, CRC(c9a93407) SHA1(604bcace8e3bec07db6ca8a8918b306b77643e14) )
4850 ROM_LOAD( "56.ic40", 0x4000, 0x0400, CRC(3398798f) SHA1(d7dd9e65a1048df8edd217f4206b19cd01f143f4) )
4851 ROM_LOAD( "57.ic39", 0x4400, 0x0400, CRC(37c5bfc6) SHA1(b0aec85e6f979cdf7a3a985830c8530302804837) )
4852 ROM_LOAD( "58.ic38", 0x4800, 0x0400, CRC(1b7a5644) SHA1(d26530ea11ada86f7c99b11d6faf4416a8f5a9eb) )
4853 ROM_LOAD( "59.ic37", 0x4c00, 0x0400, CRC(c342b907) SHA1(327da029420c4eedabc2a0534199a008a3f341b8) )
4854
4855 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 - these don't really fit this game, but were on the PCB */
4856 ROM_LOAD( "cv01-7643.2c", 0x0000, 0x0400, CRC(aac24f34) SHA1(ad110e776547fb48baac568bb50d61854537ca34) )
4857 ROM_LOAD( "cv02-7643.1c", 0x0400, 0x0400, CRC(2bdf83a0) SHA1(01ffbd43964c41987e7d44816271308f9a70802b) )
4858 ROM_END
4859
4860 ROM_START( lrescuem2 )
4861 ROM_REGION( 0x10000, "maincpu", 0 )
4862 ROM_LOAD( "0.bin", 0x0000, 0x0800, CRC(27d37ad6) SHA1(18b2de9f9c022a31187b2a4049573e7f204e84c9) )
4863 ROM_LOAD( "1.bin", 0x0800, 0x0800, CRC(d8ed56f0) SHA1(d3f02d43f59d8ee83b4ed94f58f1bd25dca1a8de) )
4864 ROM_LOAD( "2.bin", 0x1000, 0x0800, CRC(3aed9788) SHA1(1be3c2f9f3a0f7d187a6faa2b020979027fa60e9) )
4865 ROM_LOAD( "3.bin", 0x1800, 0x0800, CRC(fa121b92) SHA1(2753b8b93d69d49e85075765630958038aa21ce3) )
4866 ROM_LOAD( "4.bin", 0x4000, 0x0800, CRC(535b4a78) SHA1(dd5613f47a3c7e15701c5d1dbac4a2228b9c28f2) )
4867 ROM_LOAD( "5.bin", 0x4800, 0x0800, CRC(0613a977) SHA1(47b85efdc436b39f8fb12355f9b87cb791f2d3b1) )
4868 ROM_LOAD( "6.bin", 0x5000, 0x0800, CRC(8fe51cc0) SHA1(1a98044ab95a1559362813a3961c1436267dcf63) )
4869
4870 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 - these don't really fit this game, but were on the PCB */
4871 ROM_LOAD( "cv01-7643.2c", 0x0000, 0x0400, CRC(aac24f34) SHA1(ad110e776547fb48baac568bb50d61854537ca34) )
4872 ROM_LOAD( "cv02-7643.1c", 0x0400, 0x0400, CRC(2bdf83a0) SHA1(01ffbd43964c41987e7d44816271308f9a70802b) )
4873 ROM_END
4874
4875
4876 /*
4877 Cosmo
4878 TDS & Mints, 1979/80?
4879
4880 Notes:
4881 This game runs on modified "original" Taito (3 board) Space Invaders hardware.
4882 There are approx. 70 (or more) wires tied to various parts of the boards, plus
4883 there is an extra board on top of the sound board with a *HUGE* amount of wires
4884 running to it from the main boards. There are 2 EPROMs on the top board that appear
4885 to be for use with colour generation or extra sounds(?) The PROMs on the middle board
4886 have been removed and in their place are a pile of wires that join to the top board.
4887 The remainder of the hardware is just standard Taito Space Invaders..... including
4888 a SN76477 and the discrete components for sound generation.
4889 Note that the sounds and gameplay of Cosmo are VERY different from Space Invaders.
4890 */
4891
4892 ROM_START( cosmo )
4893 ROM_REGION( 0x10000, "maincpu", 0 )
4894 ROM_LOAD( "1.36", 0x0000, 0x0800, CRC(445c9a98) SHA1(89bce80a061e9c12544231f970d9dec801eb1b94) )
4895 ROM_LOAD( "2.35", 0x0800, 0x0800, CRC(df3eb731) SHA1(fb90c1d0f2518195dd49062c9f0fd890536d89f4) )
4896 ROM_LOAD( "3.34", 0x1000, 0x0800, CRC(772c813f) SHA1(a1c0d857c660fb0b838dd0466af7bf5d73bcd55d) )
4897 ROM_LOAD( "4.33", 0x1800, 0x0800, CRC(279f66e6) SHA1(8ce71c08cca0bdde2f2e0ef21622731c4610c030) )
4898 ROM_LOAD( "5.32", 0x4000, 0x0800, CRC(cefb18df) SHA1(bb500cf3f7d1a54045a165d3613a92ab3f11d3e8) )
4899 ROM_LOAD( "6.31", 0x4800, 0x0800, CRC(b037f6c4) SHA1(b9a42948052b8cda8d2e4575e59909589f4e7a8d) )
4900 ROM_LOAD( "7.42", 0x5000, 0x0800, CRC(c3831ea2) SHA1(8c67ef0312656ef0eeff34b8463376c736bd8ea1) )
4901
4902 ROM_REGION( 0x1000, "proms", 0 ) /* color map */
4903 ROM_LOAD( "n-1.7d", 0x0800, 0x0800, CRC(bd8576f1) SHA1(aa5fe0a4d024f21a3bca7a6b3f5022779af6f3f4) )
4904 ROM_LOAD( "n-2.6e", 0x0000, 0x0800, CRC(48f1ade5) SHA1(a1b45f82f3649cde8ae6a2ef494a3a6cdb5e65d0) )
4905 ROM_END
4906
4907
4908 ROM_START( cosmicmo ) /* Roms stamped with "II", denoting version II */
4909 ROM_REGION( 0x10000, "maincpu", 0 )
4910 ROM_LOAD( "ii-1.h1", 0x0000, 0x0400, CRC(d6e4e5da) SHA1(8b4275a3c71ac3fa80d17237dc04de5f586645f4) )
4911 ROM_LOAD( "ii-2.h2", 0x0400, 0x0400, CRC(8f7988e6) SHA1(b6a01d5dcab013350f8f7f3e3ebfc986bb939fe0) )
4912 ROM_LOAD( "ii-3.h3", 0x0800, 0x0400, CRC(2d2e9dc8) SHA1(dd3da4fc752e003e5e7c64bf189288133aed545b) )
4913 ROM_LOAD( "ii-4.h4", 0x0c00, 0x0400, CRC(26cae456) SHA1(2f2262340c10e5c29d71317f6eb8072c26655563) )
4914 ROM_LOAD( "ii-5.h5", 0x4000, 0x0400, CRC(b13f228e) SHA1(a0de05aa36435e72c77f5333f3ad964ec448a8f0) )
4915 ROM_LOAD( "ii-6.h6", 0x4400, 0x0400, CRC(4ae1b9c4) SHA1(8eed87eebe68caa775fa679363b0fe3728d98c34) )
4916 ROM_LOAD( "ii-7.h7", 0x4800, 0x0400, CRC(6a13b15b) SHA1(dc03a6c3e938cfd08d16bd1660899f951ba72ea2) )
4917
4918 /* There is no colour circuits or tracking on the game PCB, it's a black and white composite video signal only */
4919 /* The PCB is etched with Universal 7814A-3 */
4920 ROM_END
4921
4922 ROM_START( cosmicm2 )
4923 ROM_REGION( 0x10000, "maincpu", 0 )
4924 ROM_LOAD( "3907.bin", 0x0000, 0x1000, CRC(bbffede6) SHA1(e7505ee8e3f19557ebbfd0145dc2ae0d1c529eba) )
4925 ROM_LOAD( "3906.bin", 0x4000, 0x1000, CRC(b841f894) SHA1(b1f9e1800969baab14da2fd8873b58d4707b7236) )
4926 ROM_END
4927
4928 ROM_START( superinv )
4929 ROM_REGION( 0x10000, "maincpu", 0 )
4930 ROM_LOAD( "00", 0x0000, 0x0400, CRC(7a9b4485) SHA1(dde918ec106971972bf7c7e5085c1262522f7e35) )
4931 ROM_LOAD( "01", 0x0400, 0x0400, CRC(7c86620d) SHA1(9e92ec0aa4eee96a7fa115a14a611c488d13b9dd) )
4932 ROM_LOAD( "02", 0x0800, 0x0400, CRC(ccaf38f6) SHA1(8eb0456e8abdba0d1dda20a335a9ecbe7c38f9ed) )
4933 ROM_LOAD( "03", 0x1400, 0x0400, CRC(8ec9eae2) SHA1(48d7a7dc61e0417ca4093e5c2a36efd96e359233) )
4934 ROM_LOAD( "04", 0x1800, 0x0400, CRC(68719b30) SHA1(2084bd63cd61ef1d2497c32112cdb42b7b582da4) )
4935 ROM_LOAD( "05", 0x1c00, 0x0400, CRC(8abe2466) SHA1(17494b1e5db207e37a7d28d7c89cbc5f36b7aefc) )
4936 ROM_END
4937
4938 ROM_START( invasion )
4939 ROM_REGION( 0x10000, "maincpu", 0 )
4940 ROM_LOAD( "10136-0.0k", 0x0000, 0x0400, CRC(7a9b4485) SHA1(dde918ec106971972bf7c7e5085c1262522f7e35) )
4941 ROM_LOAD( "10136-1.1k", 0x0400, 0x0400, CRC(7c86620d) SHA1(9e92ec0aa4eee96a7fa115a14a611c488d13b9dd) )
4942 ROM_LOAD( "10136-2.2k", 0x0800, 0x0400, CRC(ccaf38f6) SHA1(8eb0456e8abdba0d1dda20a335a9ecbe7c38f9ed) )
4943 ROM_LOAD( "10136-5.5k", 0x1400, 0x0400, CRC(8ec9eae2) SHA1(48d7a7dc61e0417ca4093e5c2a36efd96e359233) )
4944 ROM_LOAD( "10136-6.6k", 0x1800, 0x0400, CRC(ff0b0690) SHA1(8547c4b2a228f1690287217a916613c8f0caccf6) )
4945 ROM_LOAD( "10136-7.7k", 0x1c00, 0x0400, CRC(75d7acaf) SHA1(977d146d7df555cea1bb2156d29d88bec9731f98) )
4946 ROM_END
4947
4948 ROM_START( invasiona )
4949 ROM_REGION( 0x10000, "maincpu", 0 )
4950 ROM_LOAD( "invasiona_0.bin", 0x0000, 0x0400, CRC(c2fe6197) SHA1(823d02c2790711f40c167544a55e1669a97d93b4) )
4951 ROM_LOAD( "invasiona_1.bin", 0x0400, 0x0400, CRC(7c86620d) SHA1(9e92ec0aa4eee96a7fa115a14a611c488d13b9dd) )
4952 ROM_LOAD( "invasiona_2.bin", 0x0800, 0x0400, CRC(ccaf38f6) SHA1(8eb0456e8abdba0d1dda20a335a9ecbe7c38f9ed) )
4953 ROM_LOAD( "invasiona_3.bin", 0x1400, 0x0400, CRC(8ec9eae2) SHA1(48d7a7dc61e0417ca4093e5c2a36efd96e359233) )
4954 ROM_LOAD( "invasiona_4.bin", 0x1800, 0x0400, CRC(24b39879) SHA1(c93530ac20c412b516fbcba8220d85a9bd4fa804) )
4955 ROM_LOAD( "invasiona_5.bin", 0x1c00, 0x0400, CRC(59134ff8) SHA1(2e6a040066b35b10f867a3e500e3b13922c0eb7a) )
4956 ROM_END
4957
4958 ROM_START( invasiona2 )
4959 ROM_REGION( 0x10000, "maincpu", 0 )
4960 ROM_LOAD( "0.0.bin", 0x0000, 0x0400, CRC(7a9b4485) SHA1(dde918ec106971972bf7c7e5085c1262522f7e35) )
4961 ROM_LOAD( "1.1.bin", 0x0400, 0x0400, CRC(7c86620d) SHA1(9e92ec0aa4eee96a7fa115a14a611c488d13b9dd) )
4962 ROM_LOAD( "2.2.bin", 0x0800, 0x0400, CRC(b949185e) SHA1(f6dad27fdc5a030d2391078926bcf8e4adf21a12) )
4963 ROM_LOAD( "3.5.bin", 0x1400, 0x0400, CRC(8ec9eae2) SHA1(48d7a7dc61e0417ca4093e5c2a36efd96e359233) )
4964 ROM_LOAD( "4.6.bin", 0x1800, 0x0400, CRC(ec0edb4a) SHA1(8c6946b50ba5c319fe03c55b43c4e714387719b8) )
4965 ROM_LOAD( "5.7.bin", 0x1c00, 0x0400, CRC(c3466380) SHA1(19b0f274a1b97a6ab48f3fe11fdee44ed2f50603) )
4966 ROM_END
4967
4968 ROM_START( invasionb )
4969 ROM_REGION( 0x10000, "maincpu", 0 )
4970 ROM_LOAD( "invasionb_0.bin", 0x0000, 0x0400, CRC(7a9b4485) SHA1(dde918ec106971972bf7c7e5085c1262522f7e35) )
4971 ROM_LOAD( "invasionb_1.bin", 0x0400, 0x0400, CRC(7c86620d) SHA1(9e92ec0aa4eee96a7fa115a14a611c488d13b9dd) )
4972 ROM_LOAD( "invasionb_2.bin", 0x0800, 0x0400, CRC(ccaf38f6) SHA1(8eb0456e8abdba0d1dda20a335a9ecbe7c38f9ed) )
4973 ROM_LOAD( "invasionb_5.bin", 0x1400, 0x0400, CRC(8ec9eae2) SHA1(48d7a7dc61e0417ca4093e5c2a36efd96e359233) )
4974 ROM_LOAD( "invasionb_6.bin", 0x1800, 0x0400, CRC(ec0edb4a) SHA1(8c6946b50ba5c319fe03c55b43c4e714387719b8) )
4975 ROM_LOAD( "invasionb_7.bin", 0x1c00, 0x0400, CRC(6aac1281) SHA1(f071a21de72d2c9f7851195592c828fa501197ce) )
4976 ROM_END
4977
4978 ROM_START( invasionrz )
4979 ROM_REGION( 0x10000, "maincpu", 0 )
4980 ROM_LOAD( "rz0.0k", 0x0000, 0x0400, CRC(7a9b4485) SHA1(dde918ec106971972bf7c7e5085c1262522f7e35) )
4981 ROM_LOAD( "rz1.1k", 0x0400, 0x0400, CRC(7c86620d) SHA1(9e92ec0aa4eee96a7fa115a14a611c488d13b9dd) )
4982 ROM_LOAD( "rz2.2k", 0x0800, 0x0400, CRC(ccaf38f6) SHA1(8eb0456e8abdba0d1dda20a335a9ecbe7c38f9ed) )
4983 ROM_LOAD( "rz5.5k", 0x1400, 0x0400, CRC(8ec9eae2) SHA1(48d7a7dc61e0417ca4093e5c2a36efd96e359233) )
4984 ROM_LOAD( "rz6.6k", 0x1800, 0x0400, CRC(ec0edb4a) SHA1(8c6946b50ba5c319fe03c55b43c4e714387719b8) )
4985 ROM_LOAD( "rz7.7k", 0x1c00, 0x0400, CRC(e4ab9012) SHA1(4f54e3fd3e3835a7b7d3b8d77929f4d9e42a4917) )
4986 ROM_END
4987
4988 ROM_START( invasionrza )
4989 ROM_REGION( 0x10000, "maincpu", 0 )
4990 ROM_LOAD( "rz0-0.9k", 0x0000, 0x0400, CRC(3044806f) SHA1(7eaedd7fd7fcfd421432d5f6970ede12f586f644) )
4991 ROM_LOAD( "rz1-1.8k", 0x0400, 0x0400, CRC(7c86620d) SHA1(9e92ec0aa4eee96a7fa115a14a611c488d13b9dd) )
4992 ROM_LOAD( "rz2-2.7k", 0x0800, 0x0400, CRC(c808e941) SHA1(c17f2171d82df1984c4b048f2664dea5bd9c136b) )
4993 ROM_LOAD( "rz5-5.4k", 0x1400, 0x0400, CRC(8ec9eae2) SHA1(48d7a7dc61e0417ca4093e5c2a36efd96e359233) )
4994 // 2 reads of the bad rom
4995 ROM_LOAD( "rz6-6.3k", 0x1800, 0x0400, BAD_DUMP CRC(c48df3ca) SHA1(d92064d171e099a45821c944324b993e39d894f7) )
4996 ROM_LOAD( "rz6-6.3ka", 0x1800, 0x0400, BAD_DUMP CRC(aa51b2c3) SHA1(bb30f3827a66ec3cb8436566f6b865995d702f76) )
4997 ROM_LOAD( "rz7-7.2k", 0x1c00, 0x0400, CRC(27dbea48) SHA1(f0bf5d31424dc72ac2e6fa01c528365efff838d2) )
4998 ROM_END
4999
5000 /*
5001
5002 Space Invaders (Electromar, Madrid) 1980
5003
5004 Board by Roselson
5005 Dumped by Ricky2001 from Aumap
5006
5007 This game runs in a clone of a Midway L-Shape Space Invaders PCB with different connectors, but identical.
5008 The board is updated with a litthe daughter board for the reset, instead of being generated in the Power supply.
5009 Most of the Texts are in Spanish but keeps the original name "Space Invaders", also in the psb is writen a Patent number, I think this means it was a licensed version.
5010
5011 Boards Electromar 1007-A / 1007B
5012 Patente N MU221718
5013
5014
5015 */
5016
5017 ROM_START( invadersem )
5018 ROM_REGION( 0x10000, "maincpu", 0 )
5019 ROM_LOAD( "h.bin", 0x0000, 0x0400, CRC(7fc672a5) SHA1(93c8dd27769e9c1ab812fd68031c67a5dc79d0da) )
5020 ROM_LOAD( "g.bin", 0x0400, 0x0400, CRC(ad518883) SHA1(8f7f1f520287b738ebb6f2c70b7da2cae5db2be8) )
5021 ROM_LOAD( "f.bin", 0x0800, 0x0400, CRC(f4a6c480) SHA1(eb179a46345d652ffd74f77956d361cebfbb1112))
5022 ROM_LOAD( "c.bin", 0x1400, 0x0400, CRC(8f62c513) SHA1(87570241d4ab7df3ef380d57d27055af3cca7845) )
5023 ROM_LOAD( "b.bin", 0x1800, 0x0400, CRC(2808e5c0) SHA1(aef4821d6d6e7f062e3ebecb878e6370b604224e) )
5024 ROM_LOAD( "a.bin", 0x1c00, 0x0400, CRC(04c9b084) SHA1(d267438589de2d8332410e9641164fe68f337f73) )
5025 ROM_END
5026
5027 ROM_START( ultrainv )
5028 ROM_REGION( 0x10000, "maincpu", 0 )
5029 ROM_LOAD( "in-01.bin", 0x0000, 0x0400, CRC(db9de599) SHA1(ccee1116ca924b520a126b63088a76d2ce8c396f) )
5030 ROM_LOAD( "in-02.bin", 0x0400, 0x0400, CRC(febe6d1a) SHA1(e1c3a24b4fa5862107ada1f9d7249466e8c3f06a) )
5031 ROM_LOAD( "in-03.bin", 0x0800, 0x0400, CRC(3d5c9820) SHA1(f3c83c660edf56a04148e2aa1c8e00427b86ca07) )
5032 ROM_LOAD( "in-04.bin", 0x1400, 0x0400, CRC(1293b826) SHA1(165cd5d08a19eadbe954145b12807f10df9e691a) )
5033 ROM_LOAD( "in-05.bin", 0x1800, 0x0400, CRC(e315a8c4) SHA1(dffec9e8bd7014fa34500b4bdac7feadac090482) )
5034 ROM_LOAD( "in-06.bin", 0x1c00, 0x0400, CRC(d958478c) SHA1(9df38c400c500b45d306d52fe74cd4d5ca92c0f0) )
5035 ROM_END
5036
5037
5038 ROM_START( invmulti )
5039 ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASE00 ) // decrypted rom goes here
5040
5041 ROM_REGION( 0x20000, "user1", 0 )
5042 ROM_LOAD("m803d.bin", 0x00000, 0x20000, CRC(6a62cb3c) SHA1(eb7b567098ad596859f417dd5c59c2cf1ebf1154) )
5043 ROM_END
5044
5045 ROM_START( invmultim3a )
5046 ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASE00 )
5047
5048 ROM_REGION( 0x20000, "user1", 0 )
5049 ROM_LOAD("m803a.bin", 0x00000, 0x20000, CRC(6d538828) SHA1(9a80c67abd32c4c8cd04320501a2aa4e2a308fc9) )
5050 ROM_END
5051
5052 ROM_START( invmultim2c )
5053 ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASE00 )
5054
5055 ROM_REGION( 0x20000, "user1", 0 )
5056 ROM_LOAD("m802c.bin", 0x00000, 0x20000, CRC(5b537de5) SHA1(4d8a6b622b818e88383d011c25f8f34b7372db6d) )
5057 ROM_END
5058
5059 ROM_START( invmultim2a )
5060 ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASE00 )
5061
5062 ROM_REGION( 0x20000, "user1", 0 )
5063 ROM_LOAD("m802a.bin", 0x00000, 0x20000, CRC(8079b1d0) SHA1(b13d910f314550eef468ee819b92788d2a002d82) )
5064 ROM_END
5065
5066 ROM_START( invmultim1a )
5067 ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASE00 )
5068
5069 ROM_REGION( 0x20000, "user1", 0 )
5070 ROM_LOAD("m801a.bin", 0x00000, 0x20000, CRC(f28536d2) SHA1(08ef3ea3fac38c7a478f094bfa7c369ac39515c4) )
5071 ROM_END
5072
5073 ROM_START( invmultit3d )
5074 ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASE00 )
5075
5076 ROM_REGION( 0x20000, "user1", 0 )
5077 ROM_LOAD("t803d.bin", 0x00000, 0x20000, CRC(4d53173c) SHA1(a9caf7fd8e2fea86ca1cf7edc104bdacf09203f8) )
5078 ROM_END
5079
5080 ROM_START( invmultis3a )
5081 ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASE00 )
5082
5083 ROM_REGION( 0x20000, "user1", 0 )
5084 ROM_LOAD("s083a.bin", 0x00000, 0x20000, CRC(f426d43b) SHA1(a299472f1d65f356ec01ca7cc8d3039abac20019) )
5085 ROM_END
5086
5087 ROM_START( invmultis2a )
5088 ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASE00 )
5089
5090 ROM_REGION( 0x20000, "user1", 0 )
5091 ROM_LOAD("s082a.bin", 0x00000, 0x20000, CRC(25f0f17e) SHA1(a3ccf823399e23dd9fdb38fd58c0acfe80b57fe3) )
5092 ROM_END
5093
5094 ROM_START( invmultis1a )
5095 ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASE00 )
5096
5097 ROM_REGION( 0x20000, "user1", 0 )
5098 ROM_LOAD("s081a.bin", 0x00000, 0x20000, CRC(daa77345) SHA1(0fdc9c2a6d9c0aa3233c5d31433adb1ea4e5b250) )
5099 ROM_END
5100
5101 ROM_START( invmultip )
5102 ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASE00 )
5103
5104 ROM_REGION( 0x20000, "user1", 0 )
5105 ROM_LOAD("s10.bin", 0x00000, 0x20000, CRC(1b43e4d3) SHA1(c50decd9caaec7f2d8b3ba74f718372d31bc1c3b) )
5106 ROM_END
5107
5108
5109 ROM_START( rollingc )
5110 ROM_REGION( 0x10000, "maincpu", 0 )
5111 ROM_LOAD( "rc01.bin", 0x0000, 0x0400, CRC(66fa50bf) SHA1(7451d4ff8d3b351a324aaecdbdc5b46672f5fdd0) )
5112 ROM_LOAD( "rc02.bin", 0x0400, 0x0400, CRC(61c06ae4) SHA1(7685c806e20e4a4a0508a547ac08ca8f6d75bb79) )
5113 ROM_LOAD( "rc03.bin", 0x0800, 0x0400, CRC(77e39fa0) SHA1(16bf88af1b97c5a2a81e105af08b8d9d1f10dcc8) )
5114 ROM_LOAD( "rc04.bin", 0x0c00, 0x0400, CRC(3fdfd0f3) SHA1(4c5e7136a766f3f16399e61eaaa0e00ef6b619f7) )
5115 ROM_LOAD( "rc05.bin", 0x1000, 0x0400, CRC(c26a8f5b) SHA1(f7a541999cfe04c6d6927d285484f0f81857e04a) )
5116 ROM_LOAD( "rc06.bin", 0x1400, 0x0400, CRC(0b98dbe5) SHA1(33cedab82ddccb4caaf681fce553b5230a8d6f92) )
5117 ROM_LOAD( "rc07.bin", 0x1800, 0x0400, CRC(6242145c) SHA1(b01bb02835dda89dc02604ec52e423167183e8c9) )
5118 ROM_LOAD( "rc08.bin", 0x1c00, 0x0400, CRC(d23c2ef1) SHA1(909e3d53291dbd219f4f9e0047c65317b9f6d5bd) )
5119
5120 ROM_LOAD( "rc09.bin", 0x4000, 0x0800, CRC(2e2c5b95) SHA1(33f4e2789d67e355ccd99d2c0d07301ec2bd3bc1) )
5121 ROM_LOAD( "rc10.bin", 0x4800, 0x0800, CRC(ef94c502) SHA1(07c0504b2ebce0fa6e53e6957e7b6c0e9caab430) )
5122 ROM_LOAD( "rc11.bin", 0x5000, 0x0800, CRC(a3164b18) SHA1(7270af25fa4171f86476f5dc409e658da7fba7fc) )
5123 ROM_LOAD( "rc12.bin", 0x5800, 0x0800, CRC(2052f6d9) SHA1(036702fc40cf133eb374ed674695d7c6c79e8311) )
5124 ROM_END
5125
5126 ROM_START( schaser )
5127 ROM_REGION( 0x10000, "maincpu", 0 )
5128 ROM_LOAD( "rt13.bin", 0x0000, 0x0400, CRC(0dfbde68) SHA1(7367b138ad8448aba9222fed632a892df65cecbd) )
5129 ROM_LOAD( "rt14.bin", 0x0400, 0x0400, CRC(5a508a25) SHA1(c681d0bbf49317e79b596fb094e66b8912f0e409) )
5130 ROM_LOAD( "rt15.bin", 0x0800, 0x0400, CRC(2ac43a93) SHA1(d364f0940681a888c0147e06bcb01f8a0d4a24c8) )
5131 ROM_LOAD( "rt16.bin", 0x0c00, 0x0400, CRC(f5583afc) SHA1(5e8edb43ccb138fd47ac8f3da1af79b4444a4a82) )
5132 ROM_LOAD( "rt17.bin", 0x1000, 0x0400, CRC(51cf1155) SHA1(fd8c82d951602fd7e0ada65fc7cdee9f277c70db) )
5133 ROM_LOAD( "rt18.bin", 0x1400, 0x0400, CRC(3f0fc73a) SHA1(b801c3f1e8e6e41c564432db7c5891f6b27293b2) )
5134 ROM_LOAD( "rt19.bin", 0x1800, 0x0400, CRC(b66ea369) SHA1(d277f572f9c7c4301518546cf60671a6539326ee) )
5135 ROM_LOAD( "rt20.bin", 0x1c00, 0x0400, CRC(e3a7466a) SHA1(2378970f38b0cec066ef853a6540500e468e4ab4) )
5136 ROM_LOAD( "rt21.bin", 0x4000, 0x0400, CRC(b368ac98) SHA1(6860efe0496955db67611183be0efecda92c9c98) )
5137 ROM_LOAD( "rt22.bin", 0x4400, 0x0400, CRC(6e060dfb) SHA1(614e2ecf676c3ea2f9ea869125cfffef2f713684) )
5138
5139 ROM_REGION( 0x0400, "proms", 0 ) /* background color map */
5140 ROM_LOAD( "rt06.ic2", 0x0000, 0x0400, CRC(950cf973) SHA1(d22df09b325835a0057ccd0d54f827b374254ac6) )
5141 ROM_END
5142
5143 ROM_START( schasera )
5144 ROM_REGION( 0x10000, "maincpu", 0 )
5145 ROM_LOAD( "rt13.bin", 0x0000, 0x0800, CRC(7b0bfeed) SHA1(832fe90430653d03cd0e7ea1b046524a2ca292ea) ) // sldh
5146 ROM_LOAD( "rt15.bin", 0x0800, 0x0800, CRC(825fc8ac) SHA1(176ff0f4d0cd55be30efb184bd5bef62b92d0333) ) // sldh
5147 ROM_LOAD( "rt17.bin", 0x1000, 0x0800, CRC(de9d3f85) SHA1(13a71fdd889023cfc65ed2c0a65236884b79b1f0) ) // sldh
5148 ROM_LOAD( "rt19.bin", 0x1800, 0x0800, CRC(c0adab87) SHA1(4bb8e4ccfb5eaa052584555bfa03fecf19ab8a29) ) // sldh
5149 ROM_LOAD( "rt21.bin", 0x4000, 0x0800, CRC(a3b31070) SHA1(af0108e1446a2be66cfc00d0b837fa91ab882441) ) // sldh
5150
5151 ROM_REGION( 0x0400, "proms", 0 ) /* background color map */
5152 ROM_LOAD( "rt06.ic2", 0x0000, 0x0400, CRC(950cf973) SHA1(d22df09b325835a0057ccd0d54f827b374254ac6) )
5153 ROM_END
5154
5155 ROM_START( schaserb )
5156 ROM_REGION( 0x10000, "maincpu", 0 )
5157 ROM_LOAD( "rt33.bin", 0x0000, 0x0800, CRC(eec6b032) SHA1(da14fcd862d6b80531cd3b858034bc5a120ed8ae) )
5158 ROM_LOAD( "rt34.bin", 0x0800, 0x0800, CRC(13a73701) SHA1(48ddbc10dec458070274c9fabbb0c420e2a07c96) )
5159 ROM_LOAD( "rt35.bin", 0x1000, 0x0800, CRC(de9d3f85) SHA1(13a71fdd889023cfc65ed2c0a65236884b79b1f0) )
5160 ROM_LOAD( "rt36.bin", 0x1800, 0x0800, CRC(521ec25e) SHA1(ce53e882c11a4c36f3edc3b389d3f5ad0e0ec151) )
5161 ROM_LOAD( "rt37.bin", 0x4000, 0x0800, CRC(44f65f19) SHA1(ee97d7987f54c9c26f5a20c72bdae04c46f94dc4) )
5162
5163 ROM_REGION( 0x0400, "proms", 0 ) /* background color map */
5164 ROM_LOAD( "rt06.ic2", 0x0000, 0x0400, CRC(950cf973) SHA1(d22df09b325835a0057ccd0d54f827b374254ac6) )
5165 ROM_END
5166
5167 ROM_START( schaserm )
5168 ROM_REGION( 0x10000, "maincpu", 0 )
5169 ROM_LOAD( "mr26.71", 0x0000, 0x0800, CRC(4e547879) SHA1(464fab35373d6bd6218474e7f5109425376f1db2) )
5170 ROM_LOAD( "rt08.70", 0x0800, 0x0800, CRC(825fc8ac) SHA1(176ff0f4d0cd55be30efb184bd5bef62b92d0333) )
5171 ROM_LOAD( "rt09.69", 0x1000, 0x0800, CRC(de9d3f85) SHA1(13a71fdd889023cfc65ed2c0a65236884b79b1f0) )
5172 ROM_LOAD( "mr27.62", 0x1800, 0x0800, CRC(069ec108) SHA1(b12cd288d7e42002d01290f0572f9074adf2cdca) )
5173 ROM_LOAD( "rt11.61", 0x4000, 0x0800, CRC(17a7ef7a) SHA1(1a7b3f9393dceddcd1e220cadbff7e619594f884) )
5174
5175 ROM_REGION( 0x0400, "proms", 0 ) /* background color map */
5176 ROM_LOAD( "rt06.ic2", 0x0000, 0x0400, CRC(950cf973) SHA1(d22df09b325835a0057ccd0d54f827b374254ac6) )
5177 ROM_END
5178
5179 ROM_START( crashrd )
5180 ROM_REGION( 0x10000, "maincpu", 0 )
5181 ROM_LOAD( "2716-5m.bin", 0x0000, 0x0800, CRC(53749427) SHA1(213828eea2d5baeae9c6553a531ec4127d795a67) )
5182 ROM_LOAD( "2716-5n.bin", 0x0800, 0x0800, CRC(e391d768) SHA1(22a52f4a01b586489ec79d53817152594cc3189d) )
5183 ROM_LOAD( "2716-5p.bin", 0x1000, 0x0800, CRC(fededc5d) SHA1(205079ddc5893884476672d378a457b5a603f5ae) )
5184 ROM_LOAD( "2716-5r.bin", 0x1800, 0x0800, CRC(30830779) SHA1(dff2fa9244cd3769a167673668acb53a17c395b4) )
5185 ROM_LOAD( "2716-5s.bin", 0x4000, 0x0800, CRC(6a974917) SHA1(4f1a4003652ef47de3d5c270f5f624d172970ec5) )
5186
5187 ROM_REGION( 0x0400, "proms", 0 ) /* background color map (should this have one, or should it be b+w?) */
5188 ROM_LOAD( "rt06.ic2", 0x0000, 0x0400, CRC(950cf973) SHA1(d22df09b325835a0057ccd0d54f827b374254ac6) )
5189 ROM_END
5190
5191 ROM_START( sflush )
5192 ROM_REGION( 0x10000, "maincpu", 0 )
5193 ROM_LOAD( "fr05.sc2", 0xd800, 0x800, CRC(c4f08f9f) SHA1(997f216f5244942fc1a19f5c1988adbfadc301fc) )
5194 ROM_LOAD( "fr04.sc3", 0xe000, 0x800, CRC(87a754a5) SHA1(07c0e2c3cb7aa0086d8f4dd202a452bc6c20d4ee) )
5195 ROM_LOAD( "fr03.sc4", 0xe800, 0x800, CRC(5b12847f) SHA1(4b62342723dd49a387fae6637c331d7c853712a3) )
5196 ROM_LOAD( "fr02.sc5", 0xf000, 0x800, CRC(291c9b1f) SHA1(7e5b3e1605581abf3d8165f4de9d4e32a5ee3bb0) )
5197 ROM_LOAD( "fr01.sc6", 0xf800, 0x800, CRC(55d688c6) SHA1(574a3a2ca73cabb4b8f3444aa4464e6d64daa3ad) )
5198 ROM_END
5199
5200 ROM_START( schasercv )
5201 ROM_REGION( 0x10000, "maincpu", 0 )
5202 ROM_LOAD( "1", 0x0000, 0x0400, CRC(bec2b16b) SHA1(c62210ecb64d7c38e5b63481d7fe04eb59bb1068) )
5203 ROM_LOAD( "2", 0x0400, 0x0400, CRC(9d25e608) SHA1(4cc52a93a3ab96a0ec1d07593e17832fa59b30a1) )
5204 ROM_LOAD( "3", 0x0800, 0x0400, CRC(113d0635) SHA1(ab5e98d0b5fc37d7d69bb5c541681a0f66460440) )
5205 ROM_LOAD( "4", 0x0c00, 0x0400, CRC(f3a43c8d) SHA1(29a7a8b7d1de763a255cfec79157fd95e7bff551) )
5206 ROM_LOAD( "5", 0x1000, 0x0400, CRC(47c84f23) SHA1(61b475fa92b8335f8edd3a128d8ac8561658e464) )
5207 ROM_LOAD( "6", 0x1400, 0x0400, CRC(02ff2199) SHA1(e12c235b2064cb4bb426145172e523256e3c6358) )
5208 ROM_LOAD( "7", 0x1800, 0x0400, CRC(87d06b88) SHA1(2d743161f85e47cb8ee2a600cbee790b1ad7ad99) )
5209 ROM_LOAD( "8", 0x1c00, 0x0400, CRC(6dfaad08) SHA1(2184c4e2f4b6bffdc4fe13e178134331fcd43253) )
5210 ROM_LOAD( "9", 0x4000, 0x0400, CRC(3d1a2ae3) SHA1(672ad6590aebdfebc2748455fa638107f3934c41) )
5211 ROM_LOAD( "10", 0x4400, 0x0400, CRC(037edb99) SHA1(f2fc5e61f962666e7f6bb81753ac24ea0b97e581) )
5212
5213 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 (not used, but they were on the board) */
5214 ROM_LOAD( "cv01", 0x0000, 0x0400, CRC(037e16ac) SHA1(d585030aaff428330c91ae94d7cd5c96ebdd67dd) )
5215 ROM_LOAD( "cv02", 0x0400, 0x0400, CRC(8263da38) SHA1(2e7c769d129e6f8a1a31eba1e02777bb94ac32b2) )
5216 ROM_END
5217
5218 ROM_START( schaserc )
5219 ROM_REGION( 0x10000, "maincpu", 0 )
5220 ROM_LOAD( "45.ic30", 0x0000, 0x0400, CRC(ca90619c) SHA1(d2f9b29290d720c57f867d1dc193e877248e6afd) )
5221 ROM_LOAD( "46.ic36", 0x0400, 0x0400, CRC(6a016895) SHA1(6984d9d002e5d8fa14bdaf16f6ba9ca02136372c) )
5222 ROM_LOAD( "rt15.bin", 0x0800, 0x0400, CRC(2ac43a93) SHA1(d364f0940681a888c0147e06bcb01f8a0d4a24c8) )
5223 ROM_LOAD( "rt16.bin", 0x0c00, 0x0400, CRC(f5583afc) SHA1(5e8edb43ccb138fd47ac8f3da1af79b4444a4a82) )
5224 ROM_LOAD( "rt17.bin", 0x1000, 0x0400, CRC(51cf1155) SHA1(fd8c82d951602fd7e0ada65fc7cdee9f277c70db) )
5225 ROM_LOAD( "rt18.bin", 0x1400, 0x0400, CRC(3f0fc73a) SHA1(b801c3f1e8e6e41c564432db7c5891f6b27293b2) )
5226 ROM_LOAD( "rt19.bin", 0x1800, 0x0400, CRC(b66ea369) SHA1(d277f572f9c7c4301518546cf60671a6539326ee) )
5227 ROM_LOAD( "47.ic39", 0x1c00, 0x0400, CRC(d476e182) SHA1(87428bf0131f8bf39d506b8df424af94cd944d82) )
5228 ROM_LOAD( "rt21.bin", 0x4000, 0x0400, CRC(b368ac98) SHA1(6860efe0496955db67611183be0efecda92c9c98) )
5229 ROM_LOAD( "rt22.bin", 0x4400, 0x0400, CRC(6e060dfb) SHA1(614e2ecf676c3ea2f9ea869125cfffef2f713684) )
5230
5231 ROM_REGION( 0x0400, "proms", 0 ) /* background color map */
5232 ROM_LOAD( "rt06.ic2", 0x0000, 0x0400, CRC(950cf973) SHA1(d22df09b325835a0057ccd0d54f827b374254ac6) )
5233 ROM_END
5234
5235 ROM_START( lupin3 )
5236 ROM_REGION( 0x10000, "maincpu", 0 )
5237 ROM_LOAD( "lp01.36", 0x0000, 0x0800, CRC(fd506ee8) SHA1(67ce62f24892f0eddf3e47913dff541f41493a17) )
5238 ROM_LOAD( "lp02.35", 0x0800, 0x0800, CRC(ec4225f8) SHA1(cd7360b3b339e5050075b498226070914fb7a031) )
5239 ROM_LOAD( "lp03.34", 0x1000, 0x0800, CRC(9307d377) SHA1(081f6c63ff2dcc549e44ab5ff5f5ddf99d544640) )
5240 ROM_LOAD( "lp04.33", 0x1800, 0x0800, CRC(e41e8b2b) SHA1(e67eaa8aeaf13f706afc17074fbbde3ad2cc9548) )
5241 ROM_LOAD( "lp05.32", 0x4000, 0x0800, CRC(f5c2faf4) SHA1(8d056f8c630e4659c02dd5da759dd497e4734292) )
5242 ROM_LOAD( "lp06.31", 0x4800, 0x0800, CRC(66289ab2) SHA1(fc9b4a7b7a08d43f34beaf1a8e68ed0ff6148534) )
5243
5244 ROM_REGION( 0x0800, "proms", 0 ) /* color map */
5245 ROM_LOAD( "lp08.1", 0x0000, 0x0400, CRC(33dbd03a) SHA1(1e0ae1cad1e9a90642886ae2ef726d3f383dd6cf) )
5246 ROM_LOAD( "lp09.2", 0x0400, 0x0400, CRC(9eaee652) SHA1(a4d2d8282ba825f3a8c0cc9bca16e1d36a0d0796) )
5247 ROM_END
5248
5249 ROM_START( lupin3a )
5250 ROM_REGION( 0x10000, "maincpu", 0 )
5251 ROM_LOAD( "lp12.bin", 0x0000, 0x0800, CRC(68a7f47a) SHA1(dce99b3810331d7603fa468f1dea984e571f709b) )
5252 ROM_LOAD( "lp13.bin", 0x0800, 0x0800, CRC(cae9a17b) SHA1(a333ba7db45325996e3254ab36162bb7577e8a38) )
5253 ROM_LOAD( "lp14.bin", 0x1000, 0x0800, CRC(3553b9e4) SHA1(6affb5b6caf08f365c0dce669e44046295c3df91) )
5254 ROM_LOAD( "lp15.bin", 0x1800, 0x0800, CRC(acbeef64) SHA1(50d78cdc9938285b6bf9fa81fa0f6c30b23e0756) )
5255 ROM_LOAD( "lp16.bin", 0x4000, 0x0800, CRC(19fcdc54) SHA1(2f18ee8158321fff68886ffe793724001e8b18c2) )
5256 ROM_LOAD( "lp17.bin", 0x4800, 0x0800, CRC(66289ab2) SHA1(fc9b4a7b7a08d43f34beaf1a8e68ed0ff6148534) )
5257 ROM_LOAD( "lp18.bin", 0x5000, 0x0800, CRC(2f07b4ba) SHA1(982e4c437b39b45e23d15af1b2fc8c7aa3034559) )
5258 ROM_END
5259
5260 ROM_START( polaris )
5261 ROM_REGION( 0x10000, "maincpu", 0 )
5262 ROM_LOAD( "ps01-1.ic71", 0x0000, 0x0800, CRC(7d41007c) SHA1(168f002fe997aac6e4141292de826d389859bb04) )
5263 ROM_LOAD( "ps02-9.ic70", 0x0800, 0x0800, CRC(9a5c8cb2) SHA1(7a8c5d74f8b431072d9476d3ef65a3fe1d639813) )
5264 ROM_LOAD( "ps03-1.ic69", 0x1000, 0x0800, CRC(21f32415) SHA1(6ac9ae9b55e342729fe260147021ed3911a24dc2) )
5265 ROM_LOAD( "ps04-18.ic62", 0x1800, 0x0800, CRC(d717aef3) SHA1(e3361c06e92f82e96d7c6e3d6f8fad89bbf23689) )
5266 ROM_LOAD( "ps05.ic61", 0x4000, 0x0800, CRC(772e31f3) SHA1(fa0b866b6df1a9217e286ca880b3bb3fb0644bf3) )
5267 ROM_LOAD( "ps06-10.ic60", 0x4800, 0x0800, CRC(3df77bac) SHA1(b3275c34b8d42df83df2c404c5b7d220aae651fa) )
5268 ROM_LOAD( "ps26.ic60a", 0x5000, 0x0800, CRC(9d5c3d50) SHA1(a6acf9ca6e807625156cb1759269014d5830a44f) )
5269
5270 ROM_REGION( 0x0400, "proms", 0 ) /* background color map */
5271 ROM_LOAD( "ps08.1b", 0x0000, 0x0400, CRC(164aa05d) SHA1(41c699ce45c76a60c71294f25d8df6c6e6c1280a) ) /* NEC B406 or compatible BPROM (82S137) */
5272
5273 ROM_REGION( 0x0100, "user1", 0 ) /* cloud graphics */
5274 ROM_LOAD( "ps07.2c", 0x0000, 0x0100, CRC(2953253b) SHA1(2fb851bc9652ca4e51d473b484ede6dab05f1b51) ) /* MB7052 or compatible BPROM (82S129) */
5275 ROM_END
5276
5277 ROM_START( polarisa )
5278 ROM_REGION( 0x10000, "maincpu", 0 )
5279 ROM_LOAD( "ps01-1.ic71", 0x0000, 0x0800, CRC(7d41007c) SHA1(168f002fe997aac6e4141292de826d389859bb04) )
5280 ROM_LOAD( "ps02-9.ic70", 0x0800, 0x0800, CRC(9a5c8cb2) SHA1(7a8c5d74f8b431072d9476d3ef65a3fe1d639813) ) // was PS09, an alternate label designation?
5281 ROM_LOAD( "ps03-1.ic69", 0x1000, 0x0800, CRC(21f32415) SHA1(6ac9ae9b55e342729fe260147021ed3911a24dc2) )
5282 ROM_LOAD( "ps04.ic62", 0x1800, 0x0800, CRC(65694948) SHA1(de92a7f3e3ef732b573254baa60df60f8e068a5d) )
5283 ROM_LOAD( "ps05.ic61", 0x4000, 0x0800, CRC(772e31f3) SHA1(fa0b866b6df1a9217e286ca880b3bb3fb0644bf3) )
5284 ROM_LOAD( "ps06-10.ic60", 0x4800, 0x0800, CRC(3df77bac) SHA1(b3275c34b8d42df83df2c404c5b7d220aae651fa) ) // was PS10, an alternate label designation?
5285 ROM_LOAD( "ps26.ic60a", 0x5000, 0x0800, CRC(9d5c3d50) SHA1(a6acf9ca6e807625156cb1759269014d5830a44f) )
5286
5287 ROM_REGION( 0x0400, "proms", 0 ) /* background color map */
5288 ROM_LOAD( "ps08.1b", 0x0000, 0x0400, CRC(164aa05d) SHA1(41c699ce45c76a60c71294f25d8df6c6e6c1280a) ) /* NEC B406 or compatible BPROM (82S137) */
5289
5290 ROM_REGION( 0x0100, "user1", 0 ) /* cloud graphics */
5291 ROM_LOAD( "ps07.2c", 0x0000, 0x0100, CRC(2953253b) SHA1(2fb851bc9652ca4e51d473b484ede6dab05f1b51) ) /* MB7052 or compatible BPROM (82S129) */
5292 ROM_END
5293
5294 ROM_START( polarisb )
5295 ROM_REGION( 0x10000, "maincpu", 0 )
5296 ROM_LOAD( "ps01.ic71", 0x0000, 0x0800, CRC(c04ce5a9) SHA1(62cc9b3b682ebecfb7600393862c65e26ff5263f) )
5297 ROM_LOAD( "ps02-9.ic70", 0x0800, 0x0800, CRC(9a5c8cb2) SHA1(7a8c5d74f8b431072d9476d3ef65a3fe1d639813) ) // was PS09, an alternate label designation?
5298 ROM_LOAD( "ps03.ic69", 0x1000, 0x0800, CRC(8680d7ea) SHA1(7fd4b8a415666c36842fed80d2798b48f8b29d0d) )
5299 ROM_LOAD( "ps04.ic62", 0x1800, 0x0800, CRC(65694948) SHA1(de92a7f3e3ef732b573254baa60df60f8e068a5d) )
5300 ROM_LOAD( "ps05.ic61", 0x4000, 0x0800, CRC(772e31f3) SHA1(fa0b866b6df1a9217e286ca880b3bb3fb0644bf3) )
5301 ROM_LOAD( "ps06-10.ic60", 0x4800, 0x0800, CRC(3df77bac) SHA1(b3275c34b8d42df83df2c404c5b7d220aae651fa) ) // was PS10, an alternate label designation?
5302
5303 ROM_REGION( 0x0400, "proms", 0 ) /* background color map */
5304 ROM_LOAD( "ps08.1b", 0x0000, 0x0400, CRC(164aa05d) SHA1(41c699ce45c76a60c71294f25d8df6c6e6c1280a) ) /* NEC B406 or compatible BPROM (82S137) */
5305
5306 ROM_REGION( 0x0100, "user1", 0 ) /* cloud graphics */
5307 ROM_LOAD( "ps07.2c", 0x0000, 0x0100, CRC(2953253b) SHA1(2fb851bc9652ca4e51d473b484ede6dab05f1b51) ) /* MB7052 or compatible BPROM (82S129) */
5308 ROM_END
5309
5310 ROM_START( polariso )
5311 ROM_REGION( 0x10000, "maincpu", 0 )
5312 ROM_LOAD( "ps01.ic71", 0x0000, 0x0800, CRC(c04ce5a9) SHA1(62cc9b3b682ebecfb7600393862c65e26ff5263f) )
5313 ROM_LOAD( "ps02.ic70", 0x0800, 0x0800, CRC(18648e4f) SHA1(9f672e108177d5d9bc004b41eec00dc4d19269ff) )
5314 ROM_LOAD( "ps03.ic69", 0x1000, 0x0800, CRC(8680d7ea) SHA1(7fd4b8a415666c36842fed80d2798b48f8b29d0d) )
5315 ROM_LOAD( "ps04.ic62", 0x1800, 0x0800, CRC(65694948) SHA1(de92a7f3e3ef732b573254baa60df60f8e068a5d) )
5316 ROM_LOAD( "ps05.ic61", 0x4000, 0x0800, CRC(772e31f3) SHA1(fa0b866b6df1a9217e286ca880b3bb3fb0644bf3) )
5317 ROM_LOAD( "ps06.ic60", 0x4800, 0x0800, CRC(f577cb72) SHA1(7a931b5ebaf0d6941191f21afb9ed670d0251e07) )
5318
5319 ROM_REGION( 0x0400, "proms", 0 ) /* background color map */
5320 ROM_LOAD( "ps08.1b", 0x0000, 0x0400, CRC(164aa05d) SHA1(41c699ce45c76a60c71294f25d8df6c6e6c1280a) ) /* NEC B406 or compatible BPROM (82S137) */
5321
5322 ROM_REGION( 0x0100, "user1", 0 ) /* cloud graphics */
5323 ROM_LOAD( "ps07.2c", 0x0000, 0x0100, CRC(2953253b) SHA1(2fb851bc9652ca4e51d473b484ede6dab05f1b51) ) /* MB7052 or compatible BPROM (82S129) */
5324 ROM_END
5325
5326 ROM_START( polarisbr ) /* aka Polaris II on flyers? */
5327 ROM_REGION( 0x10000, "maincpu", 0 )
5328 ROM_LOAD( "1", 0x0000, 0x0800, CRC(17015f52) SHA1(8beb4d927c08420f9990fac787a81d4bd6dd419c) )
5329 ROM_LOAD( "2", 0x0800, 0x0800, CRC(9a5c8cb2) SHA1(7a8c5d74f8b431072d9476d3ef65a3fe1d639813) )
5330 ROM_LOAD( "3", 0x1000, 0x0800, CRC(60118368) SHA1(e1189fd88b943fcf77a5c41c519cccdb8196910c) )
5331 ROM_LOAD( "4", 0x1800, 0x0800, CRC(65694948) SHA1(de92a7f3e3ef732b573254baa60df60f8e068a5d) )
5332 ROM_LOAD( "5", 0x4000, 0x0800, CRC(6cb21b31) SHA1(f9d435a3aa905f124cb87c139b047e1585d0997b) )
5333 ROM_LOAD( "6", 0x4800, 0x0800, CRC(3df77bac) SHA1(b3275c34b8d42df83df2c404c5b7d220aae651fa) )
5334 ROM_LOAD( "7", 0x5000, 0x0800, CRC(0d811b92) SHA1(09af62997e1e0da0525ab4f6ced775d3673d8f35) )
5335
5336 ROM_REGION( 0x0400, "proms", 0 ) /* background color map */
5337 ROM_LOAD( "ps08.1b", 0x0000, 0x0400, CRC(164aa05d) SHA1(41c699ce45c76a60c71294f25d8df6c6e6c1280a) ) /* NEC B406 or compatible BPROM (82S137) */
5338
5339 ROM_REGION( 0x0100, "user1", 0 ) /* cloud graphics */
5340 ROM_LOAD( "ps07.2c", 0x0000, 0x0100, CRC(2953253b) SHA1(2fb851bc9652ca4e51d473b484ede6dab05f1b51) ) /* MB7052 or compatible BPROM (82S129) */
5341 ROM_END
5342
5343 ROM_START( ozmawars )
5344 ROM_REGION( 0x10000, "maincpu", 0 )
5345 ROM_LOAD( "mw01", 0x0000, 0x0800, CRC(31f4397d) SHA1(bba9765aadd608d19e2515a5edf8e0eceb70916a) )
5346 ROM_LOAD( "mw02", 0x0800, 0x0800, CRC(d8e77c62) SHA1(84fc81cf9a924ecbb13a008cd7435b7d465bddf6) )
5347 ROM_LOAD( "mw03", 0x1000, 0x0800, CRC(3bfa418f) SHA1(7318878202322a2263551ca463e4c70943401f68) )
5348 ROM_LOAD( "mw04", 0x1800, 0x0800, CRC(e190ce6c) SHA1(120898e9a683f5ce874c6fde761570a26de2fa8c) )
5349 ROM_LOAD( "mw05", 0x4000, 0x0800, CRC(3bc7d4c7) SHA1(b084f8cd2ce0f502c2e915da3eceffcbb448e9c0) )
5350 ROM_LOAD( "mw06", 0x4800, 0x0800, CRC(99ca2eae) SHA1(8d0f220f68043eff0c85d2de7bee7fd4365fb51c) )
5351
5352 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 */
5353 /* !! not dumped yet, these were taken from sisv/intruder */
5354 ROM_LOAD( "01.1", 0x0000, 0x0400, BAD_DUMP CRC(aac24f34) SHA1(ad110e776547fb48baac568bb50d61854537ca34) )
5355 ROM_LOAD( "02.2", 0x0400, 0x0400, BAD_DUMP CRC(2bdf83a0) SHA1(01ffbd43964c41987e7d44816271308f9a70802b) )
5356 ROM_END
5357
5358 /*
5359
5360 ------------------------------
5361 Ozma Wars by SHIN NIHON KIKAKU
5362 ------------------------------
5363
5364 Location Type File ID Checksum
5365 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5366 ROM IC36 2708 OZ1 8707
5367 ROM IC35 2708 OZ2 60A7
5368 ROM IC34 2708 OZ3 7504
5369 ROM IC33 2708 OZ4 55A1
5370 ROM IC32 2708 OZ5 6BC3
5371 ROM IC31 2708 OZ6 2808
5372 ROM IC42 2708 OZ7 FE8A
5373 ROM IC41 2708 OZ8 C03B
5374 ROM IC40 2708 OZ9 7515
5375 ROM IC39 2708 OZ10 4BD4
5376 ROM IC38 2708 OZ11 50BA
5377 ROM IC37 2708 OZ12 3411
5378
5379
5380 Note: CPU - CPU board (AA017757)
5381 AUD - Audio/IO board (CV070005)
5382 ROM - ROM board (AA017756A)
5383
5384 - Uses Taito's three board colour version
5385 of Space Invaders PCB
5386
5387 */
5388
5389 ROM_START( ozmawars2 )
5390 ROM_REGION( 0x10000, "maincpu", 0 )
5391 ROM_LOAD( "oz1", 0x0000, 0x0400, CRC(9300830e) SHA1(7ed349f7ad01b30aefb41dcaf97e209d00f5af6c) )
5392 ROM_LOAD( "oz2", 0x0400, 0x0400, CRC(957fc661) SHA1(ac0edc901d8033619f62967f8eaf53a02947e109) )
5393 ROM_LOAD( "oz3", 0x0800, 0x0400, CRC(cf8f4d6c) SHA1(effb4dc48594e1b7164b37f683a5a78b1a9bdd4f) )
5394 ROM_LOAD( "oz4", 0x0c00, 0x0400, CRC(f51544a5) SHA1(368411a2dadaebcbb4d5b6cf6c2beec036ce817f) )
5395 ROM_LOAD( "oz5", 0x1000, 0x0400, CRC(5597bf52) SHA1(626c7348365ed974d416485d94d057745b5d9b96) )
5396 ROM_LOAD( "oz6", 0x1400, 0x0400, CRC(19b43578) SHA1(3609b7c77f5ee6f10f302892f56fcc8375577f20) )
5397 ROM_LOAD( "oz7", 0x1800, 0x0400, CRC(a285bfde) SHA1(ed7a9fce4d887d3b5d596645893ea87c0bafda02) )
5398 ROM_LOAD( "oz8", 0x1c00, 0x0400, CRC(ae59a629) SHA1(0c9ea67dc35f93ec65ec91e1dab2e4b6212428bf) )
5399 ROM_LOAD( "oz9", 0x4000, 0x0400, CRC(df0cc633) SHA1(3725af2e5a6e9ab08dd9ada345630de19c88ce73) )
5400 ROM_LOAD( "oz10", 0x4400, 0x0400, CRC(31b7692e) SHA1(043880750d134d04311eab55e30ee223977d3d17) )
5401 ROM_LOAD( "oz11", 0x4800, 0x0400, CRC(660e934c) SHA1(1d50ae3a9de041b908e256892203ce1738d588f6) )
5402 ROM_LOAD( "oz12", 0x4c00, 0x0400, CRC(8b969f61) SHA1(6d12cacc73c31a897812ccd8de24725ee56dd975) )
5403
5404 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 */
5405 /* !! not dumped yet, these were taken from sisv/intruder */
5406 ROM_LOAD( "01.1", 0x0000, 0x0400, BAD_DUMP CRC(aac24f34) SHA1(ad110e776547fb48baac568bb50d61854537ca34) )
5407 ROM_LOAD( "02.2", 0x0400, 0x0400, BAD_DUMP CRC(2bdf83a0) SHA1(01ffbd43964c41987e7d44816271308f9a70802b) )
5408 ROM_END
5409
5410 ROM_START( ozmawarsmr ) // single PCB marked CS 210. No PROMS.
5411 ROM_REGION( 0x10000, "maincpu", 0 )
5412 ROM_LOAD( "73.1s", 0x0000, 0x0400, CRC(9300830e) SHA1(7ed349f7ad01b30aefb41dcaf97e209d00f5af6c) )
5413 ROM_LOAD( "74.1pr", 0x0400, 0x0400, CRC(957fc661) SHA1(ac0edc901d8033619f62967f8eaf53a02947e109) )
5414 ROM_LOAD( "75.1n", 0x0800, 0x0400, CRC(cf8f4d6c) SHA1(effb4dc48594e1b7164b37f683a5a78b1a9bdd4f) )
5415 ROM_LOAD( "76.1m", 0x0c00, 0x0400, CRC(f51544a5) SHA1(368411a2dadaebcbb4d5b6cf6c2beec036ce817f) )
5416 ROM_LOAD( "77.1l", 0x1000, 0x0400, CRC(4a653fe6) SHA1(22aee4c6cc3bd474d7159a552c4fb666b78fc4fb) )
5417 ROM_LOAD( "78.1kj", 0x1400, 0x0400, CRC(fb3db187) SHA1(bbf3e316215cefe2237115d766332ce185c8ca01) )
5418 ROM_LOAD( "79.1h", 0x1800, 0x0400, CRC(ed2d7c34) SHA1(f468b422e9f06522b034d213cebc914afb21dda1) )
5419 ROM_LOAD( "80.1g", 0x1c00, 0x0400, CRC(85728971) SHA1(400968f5c99b50416cdeefb4405989aa8012a3d1) )
5420 ROM_LOAD( "81.1ef", 0x4000, 0x0400, CRC(df0cc633) SHA1(3725af2e5a6e9ab08dd9ada345630de19c88ce73) )
5421 ROM_LOAD( "82.1d", 0x4400, 0x0400, CRC(31b7692e) SHA1(043880750d134d04311eab55e30ee223977d3d17) )
5422 ROM_LOAD( "83.1c", 0x4800, 0x0400, CRC(50257351) SHA1(5c3eb29f36f04b7fb8f0351ccf9c8cfc7587f927) )
5423 ROM_LOAD( "84.1b", 0x4c00, 0x0400, CRC(293303c9) SHA1(bd3770ff7cf6fa38b17cdfd0e0633d84c015dea7) )
5424 ROM_END
5425
5426 ROM_START( solfight )
5427 ROM_REGION( 0x10000, "maincpu", 0 )
5428 ROM_LOAD( "solfight.m", 0x0000, 0x0800, CRC(a4f2814e) SHA1(e2437e3543dcc97eeaea32babcd4aec6455581ac) )
5429 ROM_LOAD( "solfight.n", 0x0800, 0x0800, CRC(5657ec07) SHA1(9a2fb398841160f59483bb70060caba37addb8a4) )
5430 ROM_LOAD( "solfight.p", 0x1000, 0x0800, CRC(ef9ce96d) SHA1(96867b4f2d72f3a8827b1eb3a0748922eaa8d608) )
5431 ROM_LOAD( "solfight.r", 0x1800, 0x0800, CRC(4f1ef540) SHA1(a798e57959e72bfb554dd2fed0e37027312f9ed3) )
5432 ROM_LOAD( "mw05", 0x4000, 0x0800, CRC(3bc7d4c7) SHA1(b084f8cd2ce0f502c2e915da3eceffcbb448e9c0) )
5433 ROM_LOAD( "solfight.t", 0x4800, 0x0800, CRC(3b6fb206) SHA1(db631f4a0bd5344d130ff8d723d949e9914b6f92) )
5434 ROM_END
5435
5436 ROM_START( spaceph ) /* Also seen in a 6-rom version which matches contents exactly (sv01+sv02, sv03+sv04, etc)*/
5437 ROM_REGION( 0x10000, "maincpu", 0 )
5438 ROM_LOAD( "sv01.bin", 0x0000, 0x0400, CRC(de84771d) SHA1(13a7e5eedb826cca4d59634d38db9fcf5e65b732) )
5439 ROM_LOAD( "sv02.bin", 0x0400, 0x0400, CRC(957fc661) SHA1(ac0edc901d8033619f62967f8eaf53a02947e109) )
5440 ROM_LOAD( "sv03.bin", 0x0800, 0x0400, CRC(dbda38b9) SHA1(73a277616a0c236b07c9ffa66f16a27a78c12d70) )
5441 ROM_LOAD( "sv04.bin", 0x0c00, 0x0400, CRC(f51544a5) SHA1(368411a2dadaebcbb4d5b6cf6c2beec036ce817f) )
5442 ROM_LOAD( "sv05.bin", 0x1000, 0x0400, CRC(98d02683) SHA1(f13958df8d385f532e993e4c34569d992904a4ed) )
5443 ROM_LOAD( "sv06.bin", 0x1400, 0x0400, CRC(4ec390fd) SHA1(ade23efde5d55d282fbb28a5f8a1346601501b79) )
5444 ROM_LOAD( "sv07.bin", 0x1800, 0x0400, CRC(170862fd) SHA1(ac64a97b1510ca81d4ef3a5fcf45b7e6c7414914) )
5445 ROM_LOAD( "sv08.bin", 0x1c00, 0x0400, CRC(511b12cf) SHA1(08ba43024c8574ded11aa457eca24b72984f5ea9) )
5446 ROM_LOAD( "sv09.bin", 0x4000, 0x0400, CRC(af1cd1af) SHA1(286d77e8556e475b291a3b1a53acaca8b7dc3678) )
5447 ROM_LOAD( "sv10.bin", 0x4400, 0x0400, CRC(31b7692e) SHA1(043880750d134d04311eab55e30ee223977d3d17) )
5448 ROM_LOAD( "sv11.bin", 0x4800, 0x0400, CRC(50257351) SHA1(5c3eb29f36f04b7fb8f0351ccf9c8cfc7587f927) )
5449 ROM_LOAD( "sv12.bin", 0x4c00, 0x0400, CRC(a2a3366a) SHA1(87032787450216d378406122effa95ea01145bf7) )
5450 ROM_END
5451
5452 ROM_START( ballbomb )
5453 ROM_REGION( 0x10000, "maincpu", 0 )
5454 ROM_LOAD( "tn01", 0x0000, 0x0800, CRC(551585b5) SHA1(7c17b046bdfca6ab107b7e68ba9bde6ca590c3d4) )
5455 ROM_LOAD( "tn02", 0x0800, 0x0800, CRC(7e1f734f) SHA1(a15656818cd730d9bc98d00ff1e7fe3f860bd624) )
5456 ROM_LOAD( "tn03", 0x1000, 0x0800, CRC(d93e20bc) SHA1(2bf72f813750cef8fad572a18fb8e9fd5bf38804) )
5457 ROM_LOAD( "tn04", 0x1800, 0x0800, CRC(d0689a22) SHA1(1f6b258431b7eb878853ff979e4d97a05fb6b797) )
5458 ROM_LOAD( "tn05-1", 0x4000, 0x0800, CRC(5d5e94f1) SHA1(b9f8ba38161ef4f0940c274e9d93fed4bb7db017) )
5459
5460 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 */
5461 ROM_LOAD( "tn06", 0x0000, 0x0400, CRC(7ec554c4) SHA1(b638605ba2043fdca4c5e18755fa5fa81ed3db07) )
5462 ROM_LOAD( "tn07", 0x0400, 0x0400, CRC(deb0ac82) SHA1(839581c4e58cb7b0c2c14cf4f239220017cc26eb) )
5463
5464 ROM_REGION( 0x0100, "user1", 0 ) /* cloud graphics (missing) */
5465 ROM_LOAD( "mb7052.2c", 0x0000, 0x0100, NO_DUMP )
5466 ROM_END
5467
5468 ROM_START( yosakdon )
5469 ROM_REGION( 0x10000, "maincpu", 0 )
5470 ROM_LOAD( "yd1.bin", 0x0000, 0x0400, CRC(607899c9) SHA1(219c0c99894715818606fba49cc75517f6f43e0c) )
5471 ROM_LOAD( "yd2.bin", 0x0400, 0x0400, CRC(78336df4) SHA1(b0b6254568d191d2d0b9c9280a3ccf2417ef3f38) )
5472 ROM_LOAD( "yd3.bin", 0x0800, 0x0400, CRC(c5af6d52) SHA1(c40af79fe060562c64fc316881b7d0348e11ee3f) )
5473 ROM_LOAD( "yd4.bin", 0x0c00, 0x0400, CRC(dca8064f) SHA1(77a58137cc7f0b5fbe0e9e8deb9c5be88b1ebbcf) )
5474 ROM_LOAD( "yd5.bin", 0x1400, 0x0400, CRC(38804ff1) SHA1(9b7527b9d2b106355f0c8df46666b1e3f286b2e3) )
5475 ROM_LOAD( "yd6.bin", 0x1800, 0x0400, CRC(988d2362) SHA1(deaf864b4e287cbc2585c2a11343b1ae82e15463) )
5476 ROM_LOAD( "yd7.bin", 0x1c00, 0x0400, CRC(2744e68b) SHA1(5ad5a7a615d36f57b6d560425e035c15e25e9005) )
5477 ROM_END
5478
5479 ROM_START( yosakdona )
5480 ROM_REGION( 0x10000, "maincpu", 0 )
5481 ROM_LOAD( "yosaku1", 0x0000, 0x0400, CRC(d132f4f0) SHA1(373c7ea1bd6debcb3dad5881793b8c31dc7a01e6) )
5482 ROM_LOAD( "yd2.bin", 0x0400, 0x0400, CRC(78336df4) SHA1(b0b6254568d191d2d0b9c9280a3ccf2417ef3f38) )
5483 ROM_LOAD( "yosaku3", 0x0800, 0x0400, CRC(b1a0b3eb) SHA1(4eb80668920b45dc6216424f8ca53d753a35f4f1) )
5484 ROM_LOAD( "yosaku4", 0x0c00, 0x0400, CRC(c06c225e) SHA1(2699e3c13b09b6de16bd3ca3ca2e9d7a91b7e268) )
5485 ROM_LOAD( "yosaku5", 0x1400, 0x0400, CRC(ae422a43) SHA1(5219680f9d6c5d984b29167f85106fa375856121) )
5486 ROM_LOAD( "yosaku6", 0x1800, 0x0400, CRC(26b24a12) SHA1(387589fa4027d41b6fb06555661d4f92fe2f990c) )
5487 ROM_LOAD( "yosaku7", 0x1c00, 0x0400, CRC(878d5a18) SHA1(6adc8763d5644602eed7fe6d9186a48be105aace) )
5488 ROM_END
5489
5490 ROM_START( indianbt )
5491 ROM_REGION( 0x10000, "maincpu", 0 )
5492 ROM_LOAD( "1.36", 0x0000, 0x0800, CRC(ddc2b25d) SHA1(120ae17492b79d7d2ad515de9f1e3be7f8b9d4eb) )
5493 ROM_LOAD( "2.35", 0x0800, 0x0800, CRC(6499b062) SHA1(62a301d532b9fc4e7a17cbe8d2061eb0e842bdfa) )
5494 ROM_LOAD( "3.34", 0x1000, 0x0800, CRC(5c51675d) SHA1(1313e8794ee6cd0252452b96d42cff7907eeaa21) )
5495 ROM_LOAD( "4.33", 0x1800, 0x0800, CRC(70ebec95) SHA1(f6e1e7a28033d89e49b88c559ea8926b1b4ff21b) )
5496 ROM_LOAD( "5.32", 0x4000, 0x0800, CRC(7b4022f4) SHA1(10dec8110e8f4bc79764d3183bdfb3c135e27faf) )
5497 ROM_LOAD( "6.31", 0x4800, 0x0800, CRC(89bd6f73) SHA1(5dc63871252c530ef0aae4f4cd02fee44b397815) )
5498 ROM_LOAD( "7.42", 0x5000, 0x0800, CRC(7060ba0b) SHA1(366ce02b7b0a3391afef23b8b41cd98a91034830) )
5499 ROM_LOAD( "8.41", 0x5800, 0x0800, CRC(eaccfc0a) SHA1(c6c2d702243bdd1d2ad5fbaaceadb5a5798577bc) )
5500
5501 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 */
5502 ROM_LOAD( "mb7054.1", 0x0000, 0x0400, CRC(4acf4db3) SHA1(842a6c9f91806b424b7cc437670b4fe0bd57dff1) )
5503 ROM_LOAD( "mb7054.2", 0x0400, 0x0400, CRC(62cb3419) SHA1(3df65062945589f1df37359dbd3e30ae4b23f469) )
5504 ROM_END
5505
5506 ROM_START( indianbtbr )
5507 ROM_REGION( 0x10000, "maincpu", 0 )
5508 ROM_LOAD( "1.36", 0x0000, 0x0800, CRC(5cf6316b) SHA1(9812fbb7139d6f33a832a2485f9cd6422146d1ae) ) // sldh
5509 ROM_LOAD( "2.35", 0x0800, 0x0800, CRC(882c7421) SHA1(b2cc15c8693bd1fc74dddfcf52bf08984423f4bf) ) // sldh
5510 ROM_LOAD( "3.34", 0x1000, 0x0800, CRC(5c51675d) SHA1(1313e8794ee6cd0252452b96d42cff7907eeaa21) )
5511 ROM_LOAD( "4.33", 0x1800, 0x0800, CRC(70ebec95) SHA1(f6e1e7a28033d89e49b88c559ea8926b1b4ff21b) )
5512 ROM_LOAD( "5.32", 0x4000, 0x0800, CRC(aa12dbae) SHA1(083425b82cfdc0f037afcf293ad03b98fc6af3e5) ) // sldh
5513 ROM_LOAD( "6.31", 0x4800, 0x0800, CRC(d9cb1691) SHA1(c13cd8479914ba6719427b408ed589c9892f832c) ) // sldh
5514 ROM_LOAD( "7.42", 0x5000, 0x0800, CRC(7060ba0b) SHA1(366ce02b7b0a3391afef23b8b41cd98a91034830) )
5515 ROM_LOAD( "8.41", 0x5800, 0x0800, CRC(e96699d6) SHA1(701d370ae28608221fb4d00e12877d30122c848e) )
5516
5517 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 */
5518 ROM_LOAD( "mb7054.1", 0x0000, 0x0400, CRC(4acf4db3) SHA1(842a6c9f91806b424b7cc437670b4fe0bd57dff1) )
5519 ROM_LOAD( "mb7054.2", 0x0400, 0x0400, CRC(62cb3419) SHA1(3df65062945589f1df37359dbd3e30ae4b23f469) )
5520 ROM_END
5521
5522 ROM_START( shuttlei )
5523 ROM_REGION( 0x10000, "maincpu", 0 )
5524 ROM_LOAD( "1.13c", 0x0000, 0x0400, CRC(b6d4f0cd) SHA1(f855a793e78ff6283288c815b59e6942513ab4f8) )
5525 ROM_LOAD( "2.11c", 0x0400, 0x0400, CRC(168d6138) SHA1(e0e5ba58eb5a3a00802504c48a96d63522f9865f) )
5526 ROM_LOAD( "3.13d", 0x0800, 0x0400, CRC(804bd7fb) SHA1(f019bcc2894f9b819a14c069de8f1a7d228b79eb) )
5527 ROM_LOAD( "4.11d", 0x0c00, 0x0400, CRC(8205b369) SHA1(685dd244881f5762d0f53cbfa935da2b857e3fba) )
5528 ROM_LOAD( "5.13e", 0x1000, 0x0400, CRC(b50df820) SHA1(27a846ac3da4c0890a80f60483ed5750cb0b2476) )
5529 ROM_LOAD( "8.11f", 0x1c00, 0x0400, CRC(4978552b) SHA1(5a6b6e39f57a353580ed9281d7da24950f058426) )
5530
5531 ROM_REGION( 0x0100, "proms", 0 )
5532 ROM_LOAD( "82s129.2b", 0x0000, 0x0100, CRC(f108d00d) SHA1(de0cb9d18e4c9920495011f962c4497a789f651f) )
5533 ROM_END
5534
5535 ROM_START( skylove )
5536 ROM_REGION( 0x10000, "maincpu", 0 )
5537 ROM_LOAD( "01", 0x0000, 0x0400, CRC(391ad7d0) SHA1(73358fff44da5fffd4e08fbb615ccc0245e3365b) )
5538 ROM_LOAD( "02", 0x0400, 0x0400, CRC(365ba070) SHA1(8493bde493ea0d04b3563f9bc752a6ec57022524) )
5539 ROM_LOAD( "03", 0x0800, 0x0400, CRC(47364dad) SHA1(b49704f8d49a0866cb9cd8bb867f30246e3dabc9) )
5540 ROM_LOAD( "04", 0x0c00, 0x0400, CRC(9d76f33d) SHA1(5aa6a081a3609e6c036843049d58cc763a86fedb) )
5541 ROM_LOAD( "05", 0x1000, 0x0400, CRC(09084954) SHA1(f5c826188ffb7a572c45aad94e794f31bebfebe5) )
5542 ROM_LOAD( "06", 0x1400, 0x0400, CRC(6d494e82) SHA1(8e5ee1b842621cd088e80124b92b8a517e8dfbb9) )
5543 ROM_LOAD( "07", 0x1800, 0x0400, CRC(1a9aa4b8) SHA1(0da553c6343a2740312ebafc2b936ffbbf24af04) )
5544 ROM_LOAD( "08", 0x1c00, 0x0400, CRC(ecaacacc) SHA1(b815366d3aaa8ef311cd54a5be9fb4d60324e5a7) )
5545 ROM_END
5546
5547
5548 ROM_START( darthvdr )
5549 ROM_REGION( 0x10000, "maincpu", 0 )
5550 ROM_LOAD( "rom0", 0x0000, 0x0400, CRC(b15785b6) SHA1(f453a006019dc83bd746f3a26736e913186332e6) )
5551 ROM_LOAD( "rom1", 0x0400, 0x0400, CRC(95947743) SHA1(59f414de21f680e0d68ca8c4b6b538c8006cfdd6) )
5552 ROM_LOAD( "rom2", 0x0800, 0x0400, CRC(19b1731f) SHA1(2383c241de8a1ed57f03ecc7ded97585a6c10c91) )
5553 ROM_LOAD( "rom3", 0x0c00, 0x0400, CRC(ca1b5e3c) SHA1(e54ca4a3f36b2ed5e4e42c1e8bbbde43c92796e9) )
5554 ROM_LOAD( "rom4", 0x1000, 0x0400, CRC(eede5f41) SHA1(cd9f023057eb9598bad01b9e9d91bb4866b9bd3b) )
5555 ROM_LOAD( "rom5", 0x1400, 0x0400, CRC(cc52a4bb) SHA1(857b75a8b01fc707db940197d6bf3b0466c4a7b5) )
5556 ROM_END
5557
5558 ROM_START( astropal )
5559 ROM_REGION( 0x10000, "maincpu", 0 )
5560 ROM_LOAD( "2708.0a", 0x0000, 0x0400, CRC(e6883322) SHA1(05b0ab0dc6297209dcfdd173e762bfae3a720e8d) )
5561 ROM_LOAD( "2708.1a", 0x0400, 0x0400, CRC(4401df1d) SHA1(16f3b957278aa67cb37bcd5defb6e4dd8ccf7d1f) )
5562 ROM_LOAD( "2708.2a", 0x0800, 0x0400, CRC(5bac1ee4) SHA1(8c3e5f882f4798f8ed0523b60a216c989324a7c2) )
5563 ROM_LOAD( "2708.3a", 0x0c00, 0x0400, CRC(a870afad) SHA1(1a256db2bc6baa238ee1df4eff2fdce0888f812c) )
5564 ROM_LOAD( "2708.4a", 0x1000, 0x0400, CRC(8bd2d985) SHA1(3ff9110c1bad7d4562664da772d14750d738c2d6) )
5565 ROM_LOAD( "2708.5a", 0x1400, 0x0400, CRC(5e97a86b) SHA1(f3500d48ecb3969b8aaea9c4e812fbf6cf4170af) )
5566 ROM_LOAD( "2708.6a", 0x1800, 0x0400, CRC(22c354d0) SHA1(c465ca5787ad8de3be97deac1214d3abd0b27e6b) )
5567 ROM_LOAD( "2708.7a", 0x1c00, 0x0400, CRC(aeca51c1) SHA1(767bca1e6bca41327b9ff6c3570edcabe46dec21) )
5568 ROM_END
5569
5570 ROM_START( steelwkr )
5571 ROM_REGION( 0x10000, "maincpu", 0 )
5572 ROM_LOAD( "1.36", 0x0000, 0x0400, CRC(5d78873a) SHA1(293cbc067937668148181453877239cb5ed57600) )
5573 ROM_LOAD( "2.35", 0x0400, 0x0400, CRC(99cd70c6) SHA1(a08bf4db6b39d22dfcf052cc6603aab041db0208) )
5574 ROM_LOAD( "3.34", 0x0800, 0x0400, CRC(18103b67) SHA1(45929ea56ab15769fc68873570aab3d403e8e913) )
5575 ROM_LOAD( "4.33", 0x0c00, 0x0400, CRC(c413ae82) SHA1(302b933b45b2aaa515434b5268fd74aec4160e3f) )
5576 ROM_LOAD( "5.32", 0x1000, 0x0400, CRC(ca7b07b5) SHA1(cbea221c4daf84825f99bbef6d731fc2ef88feeb) )
5577 ROM_LOAD( "6.31", 0x1400, 0x0400, CRC(f8181fa0) SHA1(a907611529a1500a2ae118e834c2d4b6d11974f1) )
5578 ROM_LOAD( "7.42", 0x1800, 0x0400, CRC(a35f113e) SHA1(53073037db55c14055810c0bee7b85eb75bbaa72) )
5579 ROM_LOAD( "8.41", 0x1c00, 0x0400, CRC(af208370) SHA1(ccbd002accda26cc0a02987d9801a47e5f49921a) )
5580
5581 ROM_REGION( 0x0800, "proms", 0 ) /* color maps player 1/player 2 (not used, but they were on the board) */
5582 ROM_LOAD( "la05.1", 0x0000, 0x0400, CRC(98f31392) SHA1(ccdd1bd2ddd24bd6b1f8255a87e138f937eaf5b4) )
5583 ROM_LOAD( "la06.2", 0x0400, 0x0400, CRC(98f31392) SHA1(ccdd1bd2ddd24bd6b1f8255a87e138f937eaf5b4) )
5584 ROM_END
5585
5586 ROM_START( galactic )
5587 ROM_REGION( 0x10000, "maincpu", 0 )
5588 ROM_LOAD( "1", 0x0000, 0x0800, CRC(b5098f1e) SHA1(9d1d045d8abeafd4716d3052fe93e52c6b347049) ) // sldh
5589 ROM_LOAD( "2", 0x0800, 0x0800, CRC(f97410ee) SHA1(47f1f296c905fa13f6c521edc12c10f1f0e42400) )
5590 ROM_LOAD( "3", 0x1000, 0x0800, CRC(c1175feb) SHA1(83bf955ed3a52e1ce8c688d89725d8dee1bcc866) )
5591 ROM_LOAD( "4", 0x1800, 0x0800, CRC(b4451d7c) SHA1(62a18e8e927ef00a7f6cb933cdc5aeae9f074dc0) )
5592 ROM_LOAD( "5", 0x4000, 0x0800, CRC(74c9da61) SHA1(cb98105729f0fa4343b71af3c658b378ade1ed46) )
5593 ROM_LOAD( "6", 0x4800, 0x0800, CRC(5e7c6c44) SHA1(be7eeef10462377909018cf40503766f38466022) )
5594 ROM_LOAD( "7", 0x5000, 0x0800, CRC(02619e18) SHA1(4c59f17fbc96ca08090f08c41ca9fc72c074e9c0) )
5595 ROM_END
5596
5597 ROM_START( spacmiss )
5598 ROM_REGION( 0x10000, "maincpu", 0 )
5599 ROM_LOAD( "1", 0x0000, 0x0800, CRC(e212dc88) SHA1(bc56052bf43d18081f777b936b2be792e91ba842) ) // sldh
5600 ROM_LOAD( "2", 0x0800, 0x0800, CRC(f97410ee) SHA1(47f1f296c905fa13f6c521edc12c10f1f0e42400) )
5601 ROM_LOAD( "3", 0x1000, 0x0800, CRC(c1175feb) SHA1(83bf955ed3a52e1ce8c688d89725d8dee1bcc866) )
5602 ROM_LOAD( "4", 0x1800, 0x0800, CRC(b4451d7c) SHA1(62a18e8e927ef00a7f6cb933cdc5aeae9f074dc0) )
5603 ROM_LOAD( "5", 0x4000, 0x0800, CRC(74c9da61) SHA1(cb98105729f0fa4343b71af3c658b378ade1ed46) )
5604 ROM_LOAD( "6", 0x4800, 0x0800, CRC(5e7c6c44) SHA1(be7eeef10462377909018cf40503766f38466022) )
5605 ROM_LOAD( "7", 0x5000, 0x0800, CRC(02619e18) SHA1(4c59f17fbc96ca08090f08c41ca9fc72c074e9c0) )
5606
5607 ROM_REGION( 0x0800, "user1", 0 )
5608 ROM_LOAD( "8", 0x0000, 0x0800, CRC(942e5261) SHA1(e8af51d644eab4e7b31c14dc66bb036ad8940c42) ) // ?
5609 ROM_END
5610
5611 ROM_START( attackfc )
5612 ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
5613 ROM_LOAD( "30a.bin", 0x0000, 0x0400, CRC(c12e3386) SHA1(72b1d3d67a83edf0be0b0c37ef6dcffba450f16f) )
5614 ROM_LOAD( "36a.bin", 0x0400, 0x0400, CRC(6738dcb9) SHA1(e4c68553fc3f2d3db3d251b9cb325e2409d9c02a) )
5615 ROM_LOAD( "31a.bin", 0x0800, 0x0400, CRC(787a4658) SHA1(5be3143bdba6a32256603be94400034a8ea1fda6) )
5616 ROM_LOAD( "37a.bin", 0x0c00, 0x0400, CRC(ad6bfbbe) SHA1(5f5437b6c8e7dfe9649b25040862f8a51d8c43ed) )
5617 ROM_LOAD( "32a.bin", 0x1000, 0x0400, CRC(cbe0a711) SHA1(6e5f4214a4b48b70464005f4263c9b1ec3cbbeb1) )
5618 ROM_LOAD( "33a.bin", 0x1800, 0x0400, CRC(53147393) SHA1(57e078f1734e382e8a46be09c133daab30c75681) )
5619 ROM_LOAD( "39a.bin", 0x1c00, 0x0400, CRC(f538cf08) SHA1(4a375a41ab5d9f0d9f9a2ebef4c448038c139204) )
5620 ROM_END
5621
5622 ROM_START( cane )
5623 ROM_REGION( 0x10000, "maincpu", 0 )
5624 ROM_LOAD( "mrcane.71", 0x0000, 0x0800, CRC(47de691e) SHA1(8ed359774489ccf6023819b0d604b5a6d94b9f98) )
5625 ROM_LOAD( "mrcane.70", 0x0800, 0x0800, CRC(3f3ee3b9) SHA1(ef45cf76697bbe037c680021ffa663856f2972d0) )
5626 ROM_LOAD( "mrcane.69", 0x1000, 0x0800, CRC(d1fd883f) SHA1(30572ac7052d4898e458ad3130cc05f153427a64) )
5627 ROM_LOAD( "mrcane.62", 0x1800, 0x0800, CRC(0d37cc00) SHA1(02f136b499cca35c70a6aaae475c516d91392e36) )
5628 ROM_END
5629
5630 ROM_START( orbite ) // romset created from sources and assembled. mrxx.69 is "00" padded to retain size consistancy
5631 ROM_REGION( 0x10000, "maincpu", 0 )
5632 ROM_LOAD( "mrxx.71", 0x0000, 0x0800, CRC(78cf0c8a) SHA1(0bda9352c35e2ac175bd5ce6ee42e94247f5149a) )
5633 ROM_LOAD( "mrxx.70", 0x0800, 0x0800, CRC(2914a5c4) SHA1(ac38c3a1c537ab22301bede0013db0d485012237) )
5634 ROM_LOAD( "mrxx.69", 0x1000, 0x0800, CRC(c3e464f5) SHA1(731897c69547eaf103ccaed156b2ef947c72274a) )
5635 ROM_END
5636
5637 // year rom parent machine inp class init monitor ...
5638
5639 // Taito games (+clones), starting with Space Invaders
5640 GAME( 1978, sisv1, invaders, invaders, sitv, mw8080bw_state, empty_init, ROT270, "Taito", "Space Invaders (SV Version rev 1)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
5641 GAME( 1978, sisv2, invaders, invaders, sitv, mw8080bw_state, empty_init, ROT270, "Taito", "Space Invaders (SV Version rev 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
5642 GAME( 1978, sisv3, invaders, invaders, sitv, mw8080bw_state, empty_init, ROT270, "Taito", "Space Invaders (SV Version rev 3)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
5643 GAME( 1978, sisv, invaders, invaders, sitv, mw8080bw_state, empty_init, ROT270, "Taito", "Space Invaders (SV Version rev 4)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
5644 GAMEL(1978, sitv1, invaders, invaders, sitv, mw8080bw_state, empty_init, ROT270, "Taito", "Space Invaders (TV Version rev 1)", MACHINE_SUPPORTS_SAVE, layout_invaders )
5645 GAMEL(1978, sitv, invaders, invaders, sitv, mw8080bw_state, empty_init, ROT270, "Taito", "Space Invaders (TV Version rev 2)", MACHINE_SUPPORTS_SAVE, layout_invaders )
5646 GAME( 1979, sicv, invaders, invadpt2, sicv, _8080bw_state, empty_init, ROT270, "Taito", "Space Invaders (CV Version, larger roms)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
5647 GAME( 1979, sicv1, invaders, invadpt2, sicv, _8080bw_state, empty_init, ROT270, "Taito", "Space Invaders (CV Version, smaller roms)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
5648 GAMEL(1978, invadrmr, invaders, invaders, invadrmr, mw8080bw_state, empty_init, ROT270, "Taito / Model Racing", "Space Invaders (Model Racing)", MACHINE_SUPPORTS_SAVE, layout_invaders ) // unclassified, licensed or bootleg?
5649 GAMEL(1978, invaderl, invaders, invaders, sicv, mw8080bw_state, empty_init, ROT270, "Taito / Logitec", "Space Invaders (Logitec)", MACHINE_SUPPORTS_SAVE, layout_invaders ) // unclassified, licensed or bootleg?
5650 GAMEL(1978, invadernc, invaders, invaders, sicv, mw8080bw_state, empty_init, ROT270, "bootleg (Nas Corp)", "Space Invaders (Nas Corp bootleg)", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE, layout_invaders ) // runs on original Logitec PCB, PROM dump might be bad, needs correct decoding anyway
5651 GAMEL(1978, spcewars, invaders, spcewars, spcewars, _8080bw_state, empty_init, ROT270, "Taito / Sanritsu", "Space War (Sanritsu)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_invaders ) // unclassified, licensed or bootleg?
5652 GAME( 1979, spcewarla, invaders, spcewarla, spcewars, _8080bw_state, empty_init, ROT270, "bootleg (Leisure and Allied)", "Space War (Leisure and Allied)", MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // unclassified, licensed or bootleg?
5653 GAMEL(1978, spceking, invaders, invaders, sicv, mw8080bw_state, empty_init, ROT270, "Taito / Leijac Corporation", "Space King", MACHINE_SUPPORTS_SAVE, layout_invaders ) // unclassified, licensed or bootleg?
5654 GAMEL(1979, cosmicmo, invaders, cosmicmo, cosmicmo, _8080bw_state, empty_init, ROT270, "Taito / Universal", "Cosmic Monsters (version II)", MACHINE_SUPPORTS_SAVE, layout_cosmicm ) // unclassified, licensed or bootleg?
5655 GAMEL(1979, cosmicm2, invaders, cosmicmo, cosmicmo, _8080bw_state, empty_init, ROT270, "Taito / Universal", "Cosmic Monsters 2", MACHINE_SUPPORTS_SAVE, layout_cosmicm ) // unclassified, licensed or bootleg?
5656 GAMEL(1980?,sinvzen, invaders, invaders, sinvzen, mw8080bw_state, empty_init, ROT270, "Taito / Zenitone-Microsec Ltd.", "Super Invaders (Zenitone-Microsec)", MACHINE_SUPPORTS_SAVE, layout_invaders ) // unclassified, licensed or bootleg?
5657 GAMEL(1980, ultrainv, invaders, invaders, sicv, mw8080bw_state, empty_init, ROT270, "Taito / Konami", "Ultra Invaders", MACHINE_SUPPORTS_SAVE, layout_invaders ) // unclassified, licensed or bootleg?
5658 GAMEL(1978, spaceatt, invaders, invaders, sicv, mw8080bw_state, empty_init, ROT270, "bootleg (Video Games GmbH)", "Space Attack (bootleg of Space Invaders)", MACHINE_SUPPORTS_SAVE, layout_invaders )
5659 GAMEL(1978, spaceattbp, invaders, invaders, sicv, mw8080bw_state, empty_init, ROT270, "bootleg (Video Games GmbH)", "Space Attack (bproms)(bootleg of Space Invaders)", MACHINE_SUPPORTS_SAVE, layout_invaders )
5660 GAMEL(1978, spaceatt2k, invaders, invaders, sicv, mw8080bw_state, empty_init, ROT270, "bootleg (Video Games GmbH)", "Space Attack (2k roms)(bootleg of Space Invaders)", MACHINE_SUPPORTS_SAVE, layout_invaders )
5661 GAMEL(1978, cosmicin, invaders, invaders, sicv, mw8080bw_state, empty_init, ROT270, "bootleg", "Cosmic Invaders (bootleg of Space Invaders)", MACHINE_SUPPORTS_SAVE, layout_invaders )
5662 GAMEL(1978, galmonst, invaders, invaders, sicv, mw8080bw_state, empty_init, ROT270, "bootleg (Laguna S.A.)", "Galaxy Monsters (Laguna S.A. Spanish bootleg of Space Invaders)", MACHINE_SUPPORTS_SAVE, layout_invaders )
5663 GAMEL(1980, spaceat2, invaders, invaders, spaceat2, mw8080bw_state, empty_init, ROT270, "bootleg (Video Games UK)", "Space Attack II (bootleg of Super Invaders)", MACHINE_SUPPORTS_SAVE, layout_invaders ) // bootleg of Zenitone-Microsec Super Invaders
5664 GAMEL(1979, spacecom, invaders, spacecom, spacecom, _8080bw_state, init_spacecom, ROT270, "bootleg", "Space Combat (bootleg of Space Invaders)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_spacecom )
5665 GAME( 1978, spacerng, invaders, spacerng, sitv, _8080bw_state, empty_init, ROT90, "bootleg (Leisure Time Electronics)", "Space Ranger", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) // many modifications
5666 GAMEL(19??, invasion, invaders, invaders, invasion, mw8080bw_state, empty_init, ROT270, "bootleg (Sidam)", "Invasion (Sidam)", MACHINE_SUPPORTS_SAVE, layout_invaders )
5667 GAMEL(1979, invasiona, invaders, invaders, invasion, mw8080bw_state, empty_init, ROT270, "bootleg", "UFO Robot Attack (bootleg of Invasion, newer set)", MACHINE_SUPPORTS_SAVE, layout_invaders ) // has Sidam replaced with 'Ufo Monster Attack' and standard GFX
5668 GAMEL(1979, invasiona2, invaders, invaders, invasion, mw8080bw_state, empty_init, ROT270, "bootleg", "UFO Robot Attack (bootleg of Invasion, older set)", MACHINE_SUPPORTS_SAVE, layout_invaders ) // has Sidam replaced with 'Ufo Monster Attack' and standard GFX
5669 GAMEL(1979, invasionb, invaders, invaders, invasion, mw8080bw_state, empty_init, ROT270, "bootleg", "Invasion (Italian bootleg)", MACHINE_SUPPORTS_SAVE, layout_invaders )
5670 GAMEL(1979, invasionrz, invaders, invaders, invasion, mw8080bw_state, empty_init, ROT270, "bootleg (R Z SRL Bologna)", "Invasion (bootleg set 1, R Z SRL Bologna)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING, layout_invaders )
5671 GAMEL(1979, invasionrza, invaders, invaders, invasion, mw8080bw_state, empty_init, ROT270, "bootleg (R Z SRL Bologna)", "Invasion (bootleg set 2, R Z SRL Bologna)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING, layout_invaders )
5672 GAMEL(19??, invadersem, invaders, invaders, sitv, mw8080bw_state, empty_init, ROT270, "Electromar", "Space Invaders (Electromar, Spanish)", MACHINE_SUPPORTS_SAVE, layout_invaders ) // possibly licensed
5673 GAMEL(1978, superinv, invaders, invaders, superinv, mw8080bw_state, empty_init, ROT270, "bootleg", "Super Invaders (bootleg set 1)", MACHINE_SUPPORTS_SAVE, layout_invaders ) // not related to Zenitone-Microsec version
5674 GAMEL(1978, sinvemag, invaders, invaders, sinvemag, mw8080bw_state, empty_init, ROT270, "bootleg (Emag)", "Super Invaders (bootleg set 2)", MACHINE_SUPPORTS_SAVE, layout_invaders ) // not related to Zenitone-Microsec version
5675 GAMEL(1980, searthin, invaders, invaders, searthin, mw8080bw_state, empty_init, ROT270, "bootleg (Competitive Video)", "Super Earth Invasion (set 1)", MACHINE_SUPPORTS_SAVE, layout_invaders )
5676 GAMEL(1980, searthina, invaders, invaders, searthin, mw8080bw_state, empty_init, ROT270, "bootleg (Competitive Video)", "Super Earth Invasion (set 2)", MACHINE_SUPPORTS_SAVE, layout_invaders )
5677 GAMEL(1979, supinvsion, invaders, invaders, searthin, mw8080bw_state, empty_init, ROT270, "bootleg (Electromar / Irecsa)", "Super Invasion (Electromar, Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_CONTROLS, layout_invaders )
5678 GAMEL(1980, searthie, invaders, invaders, searthin, mw8080bw_state, empty_init, ROT270, "bootleg (Electrocoin)", "Super Earth Invasion (set 3)", MACHINE_SUPPORTS_SAVE, layout_invaders )
5679 GAMEL(19??, alieninv, invaders, invaders, alieninv, mw8080bw_state, empty_init, ROT270, "bootleg (Margamatics)", "Alien Invasion", MACHINE_SUPPORTS_SAVE, layout_invaders )
5680 GAMEL(19??, alieninvp2, invaders, invaders, searthin, mw8080bw_state, empty_init, ROT270, "bootleg", "Alien Invasion Part II", MACHINE_SUPPORTS_SAVE, layout_invaders )
5681 GAMEL(1979, jspecter, invaders, invaders, jspecter, mw8080bw_state, empty_init, ROT270, "bootleg (Jatre)", "Jatre Specter (set 1)", MACHINE_SUPPORTS_SAVE, layout_invaders )
5682 GAMEL(1979, jspecter2, invaders, invaders, jspecter, mw8080bw_state, empty_init, ROT270, "bootleg (Jatre)", "Jatre Specter (set 2)", MACHINE_SUPPORTS_SAVE, layout_invaders )
5683 GAMEL(1978, spacewr3, invaders, spcewars, sicv, _8080bw_state, empty_init, ROT270, "bootleg", "Space War Part 3", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_invaders ) // unrelated to Sanritsu's version?
5684 GAMEL(1978, swipeout, invaders, spcewars, sicv, _8080bw_state, empty_init, ROT270, "bootleg (Beyer and Brown)", "Space Wipeout", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_invaders )
5685 GAMEL(1978, invader4, invaders, invaders, sicv, mw8080bw_state, empty_init, ROT270, "bootleg", "Space Invaders Part Four", MACHINE_SUPPORTS_SAVE, layout_invaders )
5686 GAME( 1978, darthvdr, invaders, darthvdr, darthvdr, _8080bw_state, empty_init, ROT270, "bootleg", "Darth Vader (bootleg of Space Invaders)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
5687 GAMEL(19??, tst_invd, invaders, invaders, sicv, mw8080bw_state, empty_init, ROT0, "<unknown>", "Space Invaders Test ROM", MACHINE_SUPPORTS_SAVE, layout_invaders )
5688
5689 // other Taito
5690 GAME( 1979, invadpt2, 0, invadpt2, invadpt2, _8080bw_state, empty_init, ROT270, "Taito", "Space Invaders Part II (Taito, bigger ROMs)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
5691 GAME( 1979, invadpt2a, invadpt2, invadpt2, invadpt2, _8080bw_state, empty_init, ROT270, "Taito", "Space Invaders Part II (Taito, smaller ROMs)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
5692 GAME( 1979, invadpt2br, invadpt2, invadpt2, invadpt2, _8080bw_state, empty_init, ROT270, "Taito do Brasil", "Space Invaders Part II (Brazil)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
5693 GAME( 1980, invaddlx, invadpt2, invaders, invadpt2, mw8080bw_state, empty_init, ROT270, "Taito (Midway license)", "Space Invaders Deluxe", MACHINE_SUPPORTS_SAVE )
5694 GAME( 1979, moonbase, invadpt2, invadpt2, invadpt2, _8080bw_state, empty_init, ROT270, "Taito / Nichibutsu", "Moon Base Zeta (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) // this has a 'Taito Corp' string hidden away in the rom - to display it, press P1 Right+P1 Fire+2P Start then P1 Left+P1 Fire+P1 Start at the attract gameplay sequence
5695 GAME( 1979, moonbasea, invadpt2, invadpt2, invadpt2, _8080bw_state, empty_init, ROT270, "Taito / Nichibutsu", "Moon Base Zeta (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) // this has the same string replaced with Nichibutsu, no other differences
5696
5697 GAME( 1979, spcewarl, 0, invadpt2, spclaser, _8080bw_state, empty_init, ROT270, "Leijac Corporation", "Space War (Leijac Corporation)", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) // Taito's version is actually a spin-off of this?
5698 GAME( 1980, spclaser, spcewarl, invadpt2, spclaser, _8080bw_state, empty_init, ROT270, "Taito", "Space Laser", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE )
5699 GAME( 1980, intruder, spcewarl, invadpt2, spclaser, _8080bw_state, empty_init, ROT270, "Taito (Game Plan license)", "Intruder", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
5700 GAME( 1980, laser, spcewarl, invadpt2, spclaser, _8080bw_state, empty_init, ROT270, "bootleg (Leisure Time Electronics)", "Astro Laser (bootleg of Space Laser)", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE )
5701
5702 GAME( 1979, lrescue, 0, lrescue, lrescue, _8080bw_state, empty_init, ROT270, "Taito", "Lunar Rescue", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
5703 GAME( 1979, grescue, lrescue, lrescue, lrescue, _8080bw_state, empty_init, ROT270, "Taito (Universal license?)", "Galaxy Rescue", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
5704 GAME( 1980, mlander, lrescue, lrescue, lrescue, _8080bw_state, empty_init, ROT270, "bootleg (Leisure Time Electronics)", "Moon Lander (bootleg of Lunar Rescue)", MACHINE_SUPPORTS_SAVE )
5705 GAME( 1979, lrescuem, lrescue, lrescue, lrescue, _8080bw_state, empty_init, ROT270, "bootleg (Model Racing)", "Lunar Rescue (Model Racing bootleg, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
5706 GAME( 1979, lrescuem2, lrescue, lrescue, lrescue, _8080bw_state, empty_init, ROT270, "bootleg (Model Racing)", "Lunar Rescue (Model Racing bootleg, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
5707 GAME( 1979, desterth, lrescue, lrescue, lrescue, _8080bw_state, empty_init, ROT270, "bootleg", "Destination Earth (bootleg of Lunar Rescue)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
5708 GAMEL(1980, escmars, lrescue, escmars, lrescue, _8080bw_state, empty_init, ROT270, "bootleg", "Escape from Mars (bootleg of Lunar Rescue)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_escmars )
5709
5710 GAME( 1979, schaser, 0, schaser, schaser, _8080bw_state, empty_init, ROT270, "Taito", "Space Chaser (set 1)", MACHINE_SUPPORTS_SAVE )
5711 GAME( 1979, schasera, schaser, schaser, schaser, _8080bw_state, empty_init, ROT270, "Taito", "Space Chaser (set 2)", MACHINE_SUPPORTS_SAVE )
5712 GAME( 1979, schaserb, schaser, schaser, schaser, _8080bw_state, empty_init, ROT270, "Taito", "Space Chaser (set 3)", MACHINE_SUPPORTS_SAVE )
5713 GAME( 1979, schaserc, schaser, schaser, schaser, _8080bw_state, empty_init, ROT270, "Taito", "Space Chaser (set 4)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_COLORS )
5714 GAME( 1979, schasercv, schaser, schasercv, schasercv, _8080bw_state, empty_init, ROT270, "Taito", "Space Chaser (CV version - set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_COLORS )
5715 GAME( 1979, schaserm, schaser, schaser, schaserm, _8080bw_state, empty_init, ROT270, "bootleg (Model Racing)", "Space Chaser (Model Racing bootleg)", MACHINE_SUPPORTS_SAVE ) // on original Taito PCB, hacked to be harder?
5716 GAME( 1979, crashrd, schaser, crashrd, schaserm, _8080bw_state, empty_init, ROT270, "bootleg (Centromatic)", "Crash Road (bootleg of Space Chaser)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NO_COCKTAIL ) // PCB marked 'Imbader'; "Taito Corporation" on title screen replaced with a Spanish phone number
5717
5718 GAME( 1979, sflush, 0, sflush, sflush, _8080bw_state, empty_init, ROT270, "Taito", "Straight Flush", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND | MACHINE_IMPERFECT_COLORS | MACHINE_NO_COCKTAIL)
5719
5720 GAME( 1980, lupin3, 0, lupin3, lupin3, _8080bw_state, empty_init, ROT270, "Taito", "Lupin III (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
5721 GAME( 1980, lupin3a, lupin3, lupin3a, lupin3a, _8080bw_state, empty_init, ROT270, "Taito", "Lupin III (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
5722
5723 GAME( 1980, polaris, 0, polaris, polaris, _8080bw_state, empty_init, ROT270, "Taito", "Polaris (latest version)", MACHINE_SUPPORTS_SAVE )
5724 GAME( 1980, polarisa, polaris, polaris, polaris, _8080bw_state, empty_init, ROT270, "Taito", "Polaris (second revision)", MACHINE_SUPPORTS_SAVE )
5725 GAME( 1980, polarisb, polaris, polaris, polaris, _8080bw_state, empty_init, ROT270, "Taito", "Polaris (first revision)", MACHINE_SUPPORTS_SAVE )
5726 GAME( 1980, polariso, polaris, polaris, polaris, _8080bw_state, empty_init, ROT270, "Taito", "Polaris (original version)", MACHINE_SUPPORTS_SAVE )
5727 GAME( 1981, polarisbr, polaris, polaris, polaris, _8080bw_state, empty_init, ROT270, "Taito do Brasil", "Polaris (Brazil)", MACHINE_SUPPORTS_SAVE )
5728
5729 GAME( 1980, ballbomb, 0, ballbomb, ballbomb, _8080bw_state, empty_init, ROT270, "Taito", "Balloon Bomber", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) /* missing clouds */
5730
5731 GAME( 1980, indianbt, 0, indianbt, indianbt, _8080bw_state, empty_init, ROT270, "Taito", "Indian Battle", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
5732 GAME( 1983, indianbtbr, indianbt, indianbtbr,indianbtbr,_8080bw_state, empty_init, ROT270, "Taito do Brasil", "Indian Battle (Brazil)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
5733
5734 GAME( 1980, steelwkr, 0, steelwkr, steelwkr, _8080bw_state, empty_init, ROT0 , "Taito", "Steel Worker", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
5735
5736 GAMEL(1980?,galactic, 0, invaders, galactic, mw8080bw_state, empty_init, ROT270, "Taito do Brasil", "Galactica - Batalha Espacial", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_galactic )
5737 GAMEL(1980?,spacmiss, galactic, invaders, galactic, mw8080bw_state, empty_init, ROT270, "bootleg?", "Space Missile - Space Fighting Game", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_galactic )
5738
5739 // Misc. manufacturers
5740 GAME( 1979, galxwars, 0, invadpt2, galxwars, _8080bw_state, empty_init, ROT270, "Universal", "Galaxy Wars (Universal set 1)", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE )
5741 GAME( 1979, galxwars2, galxwars, invadpt2, galxwars, _8080bw_state, empty_init, ROT270, "Universal", "Galaxy Wars (Universal set 2)", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE )
5742 GAME( 1979, galxwarst, galxwars, invadpt2, galxwars, _8080bw_state, empty_init, ROT270, "Universal (Taito license?)", "Galaxy Wars (Taito?)" , MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) // Copyright not displayed
5743 GAME( 1979, galxwarst2, galxwars, invadpt2, galxwars, _8080bw_state, empty_init, ROT270, "Universal (Taito Corporation license)", "Galaxy Wars (Taito)" , MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) // Copyright displayed, quite different codebase from galxwarst
5744 GAME( 1979, starw, galxwars, invaders, galxwars, mw8080bw_state, empty_init, ROT270, "bootleg", "Star Wars (bootleg of Galaxy Wars, set 1)", MACHINE_SUPPORTS_SAVE )
5745 GAME( 1979, starw1, galxwars, starw1, galxwars, _8080bw_state, empty_init, ROT270, "bootleg (Yamashita)", "Star Wars (bootleg of Galaxy Wars, set 2)", MACHINE_SUPPORTS_SAVE )
5746
5747 GAME( 1979, cosmo, 0, cosmo, cosmo, _8080bw_state, empty_init, ROT90, "TDS & MINTS", "Cosmo", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
5748
5749 GAME( 1980?,invrvnge, 0, invrvnge, invrvnge, _8080bw_state, init_invrvnge, ROT270, "Zenitone-Microsec Ltd.", "Invader's Revenge (set 1)", MACHINE_SUPPORTS_SAVE ) // copyright is either late-1980, or early-1981
5750 GAME( 1980?,invrvngea, invrvnge, invrvnge, invrvnge, _8080bw_state, init_invrvnge, ROT270, "Zenitone-Microsec Ltd.", "Invader's Revenge (set 2)", MACHINE_SUPPORTS_SAVE )
5751 GAME( 1980?,invrvngeb, invrvnge, invrvnge, invrvnge, _8080bw_state, init_invrvnge, ROT270, "Zenitone-Microsec Ltd.", "Invader's Revenge (set 3)", MACHINE_SUPPORTS_SAVE )
5752 GAME( 1980?,invrvngedu, invrvnge, invrvnge, invrvnge, _8080bw_state, init_invrvnge, ROT270, "Zenitone-Microsec Ltd. (Dutchford license)", "Invader's Revenge (Dutchford, single PCB)", MACHINE_SUPPORTS_SAVE )
5753 GAME( 1980?,invrvngegw, invrvnge, invrvnge, invrvnge, _8080bw_state, empty_init, ROT270, "Zenitone-Microsec Ltd. (Game World license)", "Invader's Revenge (Game World, single PCB)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND )
5754
5755 GAME( 1980, vortex, 0, vortex, vortex, _8080bw_state, init_vortex, ROT270, "Zilec Electronics", "Vortex", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) /* Encrypted 8080/IO */
5756
5757 GAME( 1979, rollingc, 0, rollingc, rollingc, _8080bw_state, empty_init, ROT270, "Nichibutsu", "Rolling Crash / Moon Base", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE )
5758
5759 GAME( 1979, ozmawars, 0, invadpt2, ozmawars, _8080bw_state, empty_init, ROT270, "SNK", "Ozma Wars (set 1)", MACHINE_SUPPORTS_SAVE )
5760 GAME( 1979, ozmawars2, ozmawars, invadpt2, ozmawars, _8080bw_state, empty_init, ROT270, "SNK", "Ozma Wars (set 2)", MACHINE_SUPPORTS_SAVE ) /* Uses Taito's three board color version of Space Invaders PCB */
5761 GAME( 1979, ozmawarsmr, ozmawars, invaders, ozmawars, mw8080bw_state, empty_init, ROT270, "bootleg (Model Racing)", "Ozma Wars (Model Racing bootleg)", MACHINE_SUPPORTS_SAVE )
5762 GAME( 1979, spaceph, ozmawars, invaders, spaceph, mw8080bw_state, empty_init, ROT270, "bootleg? (Zilec Games)", "Space Phantoms (bootleg of Ozma Wars)", MACHINE_SUPPORTS_SAVE )
5763 GAME( 1979, solfight, ozmawars, invaders, ozmawars, mw8080bw_state, empty_init, ROT270, "bootleg", "Solar Fight (bootleg of Ozma Wars)", MACHINE_SUPPORTS_SAVE )
5764
5765 GAMEL(1979, yosakdon, 0, yosakdon, yosakdon, _8080bw_state, empty_init, ROT270, "Wing", "Yosaku To Donbei (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_yosakdon )
5766 GAMEL(1979, yosakdona, yosakdon, yosakdon, yosakdon, _8080bw_state, empty_init, ROT270, "Wing", "Yosaku To Donbei (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_yosakdon )
5767
5768 GAMEL(1979, shuttlei, 0, shuttlei, shuttlei, _8080bw_state, empty_init, ROT270, "Omori Electric Co., Ltd.", "Shuttle Invader", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_shuttlei )
5769 GAMEL(1979, skylove, 0, shuttlei, skylove, _8080bw_state, empty_init, ROT270, "Omori Electric Co., Ltd.", "Sky Love", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_shuttlei )
5770
5771 GAME( 1978, claybust, 0, claybust, claybust, _8080bw_state, empty_init, ROT0, "Model Racing", "Claybuster", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND ) // no titlescreen, Claybuster according to flyers
5772 GAMEL(1980, gunchamp, 0, claybust, gunchamp, _8080bw_state, empty_init, ROT0, "Model Racing", "Gun Champ", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND, layout_gunchamp ) // no titlescreen, Gun Champ according to original cab
5773 GAME( 1979?,cane, 0, cane, cane, cane_state, empty_init, ROT0, "Model Racing", "Cane (prototype)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
5774 GAME( 1979?,orbite, 0, orbite, orbite, orbite_state, empty_init, ROT270, "Model Racing", "Orbite (prototype)", MACHINE_SUPPORTS_SAVE | MACHINE_IS_INCOMPLETE | MACHINE_NO_SOUND_HW )
5775
5776 GAME( 1980?,astropal, 0, astropal, astropal, _8080bw_state, empty_init, ROT0, "Sidam?", "Astropal", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
5777
5778 GAMEL(1979?,attackfc, 0, attackfc, attackfc, _8080bw_state, init_attackfc, ROT0, "Electronic Games Systems", "Attack Force", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND, layout_attackfc )
5779
5780 GAME( 2002, invmulti, 0, invmulti, invmulti, _8080bw_state, init_invmulti, ROT270, "hack (Braze Technologies)", "Space Invaders Multigame (M8.03D)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
5781 GAME( 2002, invmultim3a, invmulti, invmulti, invmulti, _8080bw_state, init_invmulti, ROT270, "hack (Braze Technologies)", "Space Invaders Multigame (M8.03A)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
5782 GAME( 2002, invmultim2c, invmulti, invmulti, invmulti, _8080bw_state, init_invmulti, ROT270, "hack (Braze Technologies)", "Space Invaders Multigame (M8.02C)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
5783 GAME( 2002, invmultim2a, invmulti, invmulti, invmulti, _8080bw_state, init_invmulti, ROT270, "hack (Braze Technologies)", "Space Invaders Multigame (M8.02A)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
5784 GAME( 2002, invmultim1a, invmulti, invmulti, invmulti, _8080bw_state, init_invmulti, ROT270, "hack (Braze Technologies)", "Space Invaders Multigame (M8.01A)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
5785 GAME( 2002, invmultit3d, invmulti, invmulti, invmulti, _8080bw_state, init_invmulti, ROT270, "hack (Braze Technologies)", "Space Invaders Multigame (T8.03D)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
5786 GAME( 2002, invmultis3a, invmulti, invmulti, invmulti, _8080bw_state, init_invmulti, ROT270, "hack (Braze Technologies)", "Space Invaders Multigame (S0.83A)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
5787 GAME( 2002, invmultis2a, invmulti, invmulti, invmulti, _8080bw_state, init_invmulti, ROT270, "hack (Braze Technologies)", "Space Invaders Multigame (S0.82A)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
5788 GAME( 2002, invmultis1a, invmulti, invmulti, invmulti, _8080bw_state, init_invmulti, ROT270, "hack (Braze Technologies)", "Space Invaders Multigame (S0.81A)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
5789 GAME( 2002, invmultip, invmulti, invmulti, invmulti, _8080bw_state, init_invmulti, ROT270, "hack (Braze Technologies)", "Space Invaders Multigame (prototype)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
5790