1 // license:BSD-3-Clause
2 // copyright-holders:Nicola Salmoria, Lee Taylor
3 /***************************************************************************
4
5 Universal board numbers (found on the schematics)
6
7 Cosmic Guerilla - 7907A
8 Cosmic Alien - 7910
9 Magical Spot - 8013
10 Magical Spot II - 8013
11 Devil Zone - 8022
12
13 TODO:
14 - double check irq sources via schematics
15
16 2008-08
17 Dip locations verified with manuals for all the games.
18
19
20 Note on Coinage DSW (devzone and magspot only):
21
22 According to manuals, coinage settings (see "DSW" port) should be set by
23 a physical DSW B but only read when SWA:3,4 are both set to OFF. Currently,
24
25 * In magspot, SWA:3 affects the number of lives & SWA:4 seems to have no
26 effect
27 * In devzone, setting SWA:3,4 on anything but OFF,OFF results in no coins
28 accepted at all
29
30 cosmicg - background should be blue
31 cosmicg - board can operate in b&w mode if there is no PROM, in this case
32 a colour overlay should be used.
33
34 ***************************************************************************/
35
36
37 #include "emu.h"
38 #include "includes/cosmic.h"
39
40 #include "cpu/tms9900/tms9980a.h"
41 #include "cpu/z80/z80.h"
42 #include "sound/samples.h"
43 #include "speaker.h"
44
45
46 /* Schematics show 12 triggers for discrete sound circuits */
47
panic_sound_output_w(offs_t offset,uint8_t data)48 void cosmic_state::panic_sound_output_w(offs_t offset, uint8_t data)
49 {
50 /* Sound Enable / Disable */
51 if (offset == 11)
52 {
53 int count;
54 if (data == 0)
55 for (count = 0; count < 9; count++)
56 m_samples->stop(count);
57
58 m_sound_enabled = data;
59 }
60
61 if (m_sound_enabled)
62 {
63 switch (offset)
64 {
65 case 0: if (data) m_samples->start(0, 0); break; /* Walk */
66 case 1: if (data) m_samples->start(0, 5); break; /* Enemy Die 1 */
67 case 2: if (data) /* Drop 1 */
68 {
69 if (!m_samples->playing(1))
70 {
71 m_samples->stop(2);
72 m_samples->start(1, 3);
73 }
74 }
75 else
76 m_samples->stop(1);
77 break;
78
79 case 3: if (data && !m_samples->playing(6)) /* Oxygen */
80 m_samples->start(6, 9, true);
81 break;
82
83 case 4: break; /* Drop 2 */
84 case 5: if (data) m_samples->start(0, 5); break; /* Enemy Die 2 (use same sample as 1) */
85 case 6: if (data && !m_samples->playing(1) && !m_samples->playing(3)) /* Hang */
86 m_samples->start(2, 2);
87 break;
88
89 case 7: if (data) /* Escape */
90 {
91 m_samples->stop(2);
92 m_samples->start(3, 4);
93 }
94 else
95 m_samples->stop(3);
96 break;
97
98 case 8: if (data) m_samples->start(0, 1); break; /* Stairs */
99 case 9: if (data) /* Extend */
100 m_samples->start(4, 8);
101 else
102 m_samples->stop(4);
103 break;
104
105 case 10: m_dac->write(BIT(data, 7)); break; /* Bonus */
106 }
107 }
108
109 #ifdef MAME_DEBUG
110 logerror("panic_sound_output_w %x=%x\n", offset, data);
111 #endif
112 }
113
panic_sound_output2_w(offs_t offset,uint8_t data)114 void cosmic_state::panic_sound_output2_w(offs_t offset, uint8_t data)
115 {
116 if (m_sound_enabled)
117 {
118 switch (offset)
119 {
120 case 0: if (data) m_samples->start(0, 6); break; /* Player Die */
121 case 1: if (data) m_samples->start(5, 7); break; /* Enemy Laugh */
122 }
123 }
124
125 #ifdef MAME_DEBUG
126 logerror("panic_sound_output2_w %x=%x\n", offset, data);
127 #endif
128 }
129
cosmicg_output_w(offs_t offset,uint8_t data)130 void cosmic_state::cosmicg_output_w(offs_t offset, uint8_t data)
131 {
132 /* Sound Enable / Disable */
133 if (offset == 12)
134 {
135 int count;
136
137 m_sound_enabled = data;
138 if (data == 0)
139 for (count = 0; count < 9; count++)
140 m_samples->stop(count);
141 }
142
143 if (m_sound_enabled)
144 {
145 switch (offset)
146 {
147 /* The schematics show a direct link to the sound amp */
148 /* as other cosmic series games, but it is toggled */
149 /* once during game over. It is implemented for sake */
150 /* of completeness. */
151 case 1: m_dac->write(BIT(data, 0)); break; /* Game Over */
152 case 2: if (data) m_samples->start(0, m_march_select); break; /* March Sound */
153 case 3: m_march_select = (m_march_select & 0xfe) | data; break;
154 case 4: m_march_select = (m_march_select & 0xfd) | (data << 1); break;
155 case 5: m_march_select = (m_march_select & 0xfb) | (data << 2); break;
156
157 case 6: if (data) /* Killer Attack (crawly thing at bottom of screen) */
158 m_samples->start(1, 8, true);
159 else
160 m_samples->stop(1);
161 break;
162
163 case 7: if (data) /* Bonus Chance & Got Bonus */
164 {
165 m_samples->stop(4);
166 m_samples->start(4, 10);
167 }
168 break;
169
170 case 8: if (data)
171 {
172 if (!m_samples->playing(4)) m_samples->start(4, 9, true);
173 }
174 else
175 m_samples->stop(4);
176 break;
177
178 case 9: if (data) m_samples->start(3, 11); break; /* Got Ship */
179 case 11: /* watchdog_reset_w(0, 0); */ break; /* Watchdog? only toggles during game play */
180 case 13: if (data) m_samples->start(8, 13 - m_gun_die_select); break; /* Got Monster / Gunshot */
181 case 14: m_gun_die_select = data; break;
182 case 15: if (data) m_samples->start(5, 14); break; /* Coin Extend (extra base) */
183 }
184 }
185
186 #ifdef MAME_DEBUG
187 if (offset != 11) logerror("cosmicg_output_w %x=%x\n", offset, data);
188 #endif
189 }
190
191
cosmica_sound_output_w(offs_t offset,uint8_t data)192 void cosmic_state::cosmica_sound_output_w(offs_t offset, uint8_t data)
193 {
194 /* Sound Enable / Disable */
195 if (offset == 11)
196 {
197 int count;
198 if (data == 0)
199 for (count = 0; count < 12; count++)
200 m_samples->stop(count);
201 else
202 {
203 m_samples->start(0, 0, true); /*Background Noise*/
204 }
205
206 m_sound_enabled = data;
207 }
208
209 if (m_sound_enabled)
210 {
211 switch (offset)
212 {
213 case 0: if (data) m_samples->start(1, 2); break; /*Dive Bombing Type A*/
214
215 case 1: break; /* game writes 0 when alien shot */
216
217 case 2: /*Dive Bombing Type B (Main Control)*/
218 if (data)
219 {
220 switch (m_dive_bomb_b_select)
221 {
222 case 2:
223 if (m_samples->playing(2))
224 {
225 m_samples->stop(2);
226 m_samples->start(2, 3);
227 }
228 else
229 m_samples->start(2, 3);
230 break;
231
232 case 3:
233 if (m_samples->playing(3))
234 {
235 m_samples->stop(3);
236 m_samples->start(3, 4);
237 }
238 else
239 m_samples->start(3, 4);
240 break;
241
242 case 4:
243 if (m_samples->playing(4))
244 {
245 m_samples->stop(4);
246 m_samples->start(4, 5);
247 }
248 else
249 m_samples->start(4, 5);
250 break;
251
252 case 5:
253 if (m_samples->playing(5))
254 {
255 m_samples->stop(5);
256 m_samples->start(5, 6);
257 }
258 else
259 m_samples->start(5, 6);
260 break;
261
262 case 6:
263 if (m_samples->playing(6))
264 {
265 m_samples->stop(6);
266 m_samples->start(6, 7);
267 }
268 else
269 m_samples->start(6, 7);
270 break;
271
272 case 7:
273 if (m_samples->playing(7))
274 {
275 m_samples->stop(7);
276 m_samples->start(7, 8);
277 }
278 else
279 m_samples->start(7, 8);
280 break;
281 }
282 }
283
284 case 3: /*Dive Bombing Type B (G.S.B)*/
285 if (data)
286 m_dive_bomb_b_select |= 0x04;
287 else
288 m_dive_bomb_b_select &= 0xfb;
289 break;
290
291
292 case 4: /*Dive Bombing Type B (M.S.B)*/
293 if (data)
294 m_dive_bomb_b_select |= 0x02;
295 else
296 m_dive_bomb_b_select &= 0xfd;
297 break;
298
299 case 5: /*Dive Bombing Type B (L.S.B)*/
300 if (data)
301 m_dive_bomb_b_select |= 0x01;
302 else
303 m_dive_bomb_b_select &= 0xfe;
304 break;
305
306
307 case 6: if (data) m_samples->start(8, 9); break; /*Fire Control*/
308
309 case 7: if (data) m_samples->start(9, 10); break; /*Small Explosion*/
310
311 case 8: if (data) m_samples->start(10, 11); break; /*Loud Explosion*/
312
313 case 9:
314 if (data)
315 m_samples->start(11, 1, true);
316 else
317 m_samples->stop(11);
318 break; /*Extend Sound control*/
319
320 case 12: if (data) m_samples->start(11,12); break; /*Insert Coin*/
321 }
322 }
323
324 #ifdef MAME_DEBUG
325 logerror("cosmica_sound_output_w %x=%x\n", offset, data);
326 #endif
327 }
328
dac_w(uint8_t data)329 void cosmic_state::dac_w(uint8_t data)
330 {
331 m_dac->write(BIT(data, 7));
332 }
333
cosmica_pixel_clock_r()334 uint8_t cosmic_state::cosmica_pixel_clock_r()
335 {
336 return (m_screen->vpos() >> 2) & 0x3f;
337 }
338
cosmicg_port_0_r(offs_t offset)339 uint8_t cosmic_state::cosmicg_port_0_r(offs_t offset)
340 {
341 /* The top four address lines from the CRTC are bits 0-3 */
342 if (offset >= 4)
343 return BIT(m_in_ports[0]->read(), offset);
344 else
345 return BIT(m_screen->vpos(), offset + 4);
346 }
347
cosmicg_port_1_r(offs_t offset)348 uint8_t cosmic_state::cosmicg_port_1_r(offs_t offset)
349 {
350 return BIT(m_in_ports[1]->read(), offset);
351 }
352
magspot_coinage_dip_r(offs_t offset)353 uint8_t cosmic_state::magspot_coinage_dip_r(offs_t offset)
354 {
355 return (m_dsw.read_safe(0) & (1 << (7 - offset))) ? 0 : 1;
356 }
357
358
359 /* Has 8 way joystick, remap combinations to missing directions */
360
nomnlnd_port_0_1_r(offs_t offset)361 uint8_t cosmic_state::nomnlnd_port_0_1_r(offs_t offset)
362 {
363 int control = m_in_ports[offset]->read();
364 int fire = m_in_ports[3]->read();
365
366 /* If firing - stop tank */
367 if ((fire & 0xc0) == 0) return 0xff;
368
369 /* set bit according to 8 way direction */
370 if ((control & 0x82) == 0 ) return 0xfe; /* Up & Left */
371 if ((control & 0x0a) == 0 ) return 0xfb; /* Down & Left */
372 if ((control & 0x28) == 0 ) return 0xef; /* Down & Right */
373 if ((control & 0xa0) == 0 ) return 0xbf; /* Up & Right */
374
375 return control;
376 }
377
378
379
flip_screen_w(uint8_t data)380 void cosmic_state::flip_screen_w(uint8_t data)
381 {
382 flip_screen_set(data & 0x80);
383 }
384
385
panic_map(address_map & map)386 void cosmic_state::panic_map(address_map &map)
387 {
388 map(0x0000, 0x3fff).rom();
389 map(0x4000, 0x5fff).ram().share("videoram");
390 map(0x6000, 0x601f).writeonly().share("spriteram");
391 map(0x6800, 0x6800).portr("P1");
392 map(0x6801, 0x6801).portr("P2");
393 map(0x6802, 0x6802).portr("DSW");
394 map(0x6803, 0x6803).portr("SYSTEM");
395 map(0x7000, 0x700b).w(FUNC(cosmic_state::panic_sound_output_w));
396 map(0x700c, 0x700e).w(FUNC(cosmic_state::cosmic_color_register_w));
397 map(0x700f, 0x700f).w(FUNC(cosmic_state::flip_screen_w));
398 map(0x7800, 0x7801).w(FUNC(cosmic_state::panic_sound_output2_w));
399 }
400
401
cosmica_map(address_map & map)402 void cosmic_state::cosmica_map(address_map &map)
403 {
404 map(0x0000, 0x3fff).rom();
405 map(0x4000, 0x5fff).ram().share("videoram");
406 map(0x6000, 0x601f).writeonly().share("spriteram");
407 map(0x6800, 0x6800).portr("P1");
408 map(0x6801, 0x6801).portr("P2");
409 map(0x6802, 0x6802).portr("DSW");
410 map(0x6803, 0x6803).r(FUNC(cosmic_state::cosmica_pixel_clock_r));
411 map(0x7000, 0x700b).w(FUNC(cosmic_state::cosmica_sound_output_w));
412 map(0x700c, 0x700d).w(FUNC(cosmic_state::cosmic_color_register_w));
413 map(0x700f, 0x700f).w(FUNC(cosmic_state::flip_screen_w));
414 }
415
416
cosmicg_map(address_map & map)417 void cosmic_state::cosmicg_map(address_map &map)
418 {
419 map(0x0000, 0x1fff).rom();
420 map(0x2000, 0x3fff).ram().share("videoram");
421 }
422
cosmicg_io_map(address_map & map)423 void cosmic_state::cosmicg_io_map(address_map &map)
424 {
425 map(0x0000, 0x000f).r(FUNC(cosmic_state::cosmicg_port_0_r));
426 map(0x0010, 0x001f).r(FUNC(cosmic_state::cosmicg_port_1_r));
427 map(0x0000, 0x002b).w(FUNC(cosmic_state::cosmicg_output_w));
428 map(0x002c, 0x002f).w(FUNC(cosmic_state::cosmic_color_register_w));
429 }
430
431
magspot_map(address_map & map)432 void cosmic_state::magspot_map(address_map &map)
433 {
434 map(0x0000, 0x2fff).rom();
435 map(0x3800, 0x3807).r(FUNC(cosmic_state::magspot_coinage_dip_r));
436 map(0x4000, 0x401f).writeonly().share("spriteram");
437 map(0x4800, 0x4800).w(FUNC(cosmic_state::dac_w));
438 map(0x480c, 0x480d).w(FUNC(cosmic_state::cosmic_color_register_w));
439 map(0x480f, 0x480f).w(FUNC(cosmic_state::flip_screen_w));
440 map(0x5000, 0x5000).portr("IN0");
441 map(0x5001, 0x5001).portr("IN1");
442 map(0x5002, 0x5002).portr("IN2");
443 map(0x5003, 0x5003).portr("IN3");
444 map(0x6000, 0x7fff).ram().share("videoram");
445 }
446
447
WRITE_LINE_MEMBER(cosmic_state::panic_coin_inserted)448 WRITE_LINE_MEMBER(cosmic_state::panic_coin_inserted)
449 {
450 if (m_sound_enabled && !state) m_samples->start(0, 10); /* Coin - Not triggered by software */
451
452 #ifdef MAME_DEBUG
453 logerror("panic_coin_inserted %x\n", state);
454 #endif
455 }
456
457 static INPUT_PORTS_START( panic )
458 PORT_START("P1")
459 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
460 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY
461 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY
462 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY
463 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY
464 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
465 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
466 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 )
467
468 PORT_START("P2")
469 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
470 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL
471 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL
472 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL
473 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL
474 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
475 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
476 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
477
478 PORT_START("DSW")
DEF_STR(Coin_A)479 PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW:6,5,4")
480 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
481 PORT_DIPSETTING( 0x05, DEF_STR( 2C_3C ) )
482 PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) )
483 PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) )
484 PORT_DIPSETTING( 0x03, DEF_STR( 1C_4C ) )
485 PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) )
486 /* 0x06 and 0x07 disabled */
487 PORT_DIPNAME( 0x08, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW:3")
488 PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
489 PORT_DIPSETTING( 0x08, DEF_STR( Cocktail ) )
490 PORT_DIPNAME( 0x10, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW:2")
491 PORT_DIPSETTING( 0x00, "3000" )
492 PORT_DIPSETTING( 0x10, "5000" )
493 PORT_DIPNAME( 0x20, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW:1")
494 PORT_DIPSETTING( 0x00, "3" )
495 PORT_DIPSETTING( 0x20, "4" )
496 PORT_DIPNAME( 0xc0, 0x40, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW:7,8")
497 PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
498 PORT_DIPSETTING( 0x40, DEF_STR( 1C_1C ) )
499 PORT_DIPSETTING( 0x80, DEF_STR( 1C_2C ) )
500 PORT_DIPSETTING( 0xc0, DEF_STR( 1C_3C ) )
501
502 PORT_START("SYSTEM")
503 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
504 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
505 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
506 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
507 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
508 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
509 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF, cosmic_state, panic_coin_inserted)
510 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF, cosmic_state, panic_coin_inserted)
511 INPUT_PORTS_END
512
513 INPUT_CHANGED_MEMBER(cosmic_state::cosmica_coin_inserted)
514 {
515 m_maincpu->set_input_line(INPUT_LINE_NMI, newval ? ASSERT_LINE : CLEAR_LINE);
516 }
517
518 static INPUT_PORTS_START( cosmica )
519 PORT_START("P1")
520 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
521 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY
522 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY
523 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
524 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
525 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
526 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
527 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
528
529 PORT_START("P2")
530 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
531 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_COCKTAIL
532 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_COCKTAIL
533 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
534 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
535 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
536 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
537 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
538
539 PORT_START("DSW")
DEF_STR(Cabinet)540 PORT_DIPNAME( 0x01, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW:6")
541 PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
542 PORT_DIPSETTING( 0x01, DEF_STR( Cocktail ) )
543 PORT_DIPNAME( 0x02, 0x02, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW:5")
544 PORT_DIPSETTING( 0x02, "3" )
545 PORT_DIPSETTING( 0x00, "5" )
546 PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW:4,3")
547 PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) )
548 PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) )
549 PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ) )
550 // PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
551 PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW:2,1")
552 PORT_DIPSETTING( 0x30, "5000" )
553 PORT_DIPSETTING( 0x20, "10000" )
554 PORT_DIPSETTING( 0x10, "15000" )
555 PORT_DIPSETTING( 0x00, DEF_STR( None ) )
556 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 )
557 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
558
559 PORT_START("FAKE")
560 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, cosmic_state,cosmica_coin_inserted, 0)
561 INPUT_PORTS_END
562
563 /* These are used for the CR handling - This can be used to */
564 /* from 1 to 16 bits from any bit offset between 0 and 4096 */
565
566 /* Offsets are in BYTES, so bits 0-7 are at offset 0 etc. */
567
568 INPUT_CHANGED_MEMBER(cosmic_state::cosmicg_coin_inserted)
569 {
570 m_maincpu->set_input_line(INT_9980A_LEVEL4, newval? ASSERT_LINE : CLEAR_LINE);
571 }
572
573 static INPUT_PORTS_START( cosmicg )
574 PORT_START("IN0") /* 4-7 */
575 PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_CUSTOM ) /* pixel clock */
576 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
577 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
578 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 )
579 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY
580
581 PORT_START("IN1") /* 8-15 */
582 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY
583 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
584 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_2WAY PORT_COCKTAIL
585 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_2WAY PORT_COCKTAIL
DEF_STR(Bonus_Life)586 PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW:2,1")
587 PORT_DIPSETTING( 0x10, "1000" )
588 PORT_DIPSETTING( 0x20, "1500" )
589 PORT_DIPSETTING( 0x30, "2000" )
590 PORT_DIPSETTING( 0x00, DEF_STR( None ) )
591 PORT_DIPNAME( 0x40, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW:3")
592 PORT_DIPSETTING( 0x40, DEF_STR( 2C_1C ) )
593 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
594 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW:4")
595 PORT_DIPSETTING( 0x00, "3" )
596 PORT_DIPSETTING( 0x80, "5" )
597
598 PORT_START("IN2") /* Hard wired settings */
599 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, cosmic_state,cosmicg_coin_inserted, 0)
600
601 /* This dip switch is not read by the program at any time */
602 /* but is wired to enable or disable the flip screen output */
603
604 PORT_DIPNAME( 0x02, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW:5")
605 PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
606 PORT_DIPSETTING( 0x02, DEF_STR( Cocktail ) )
607
608 /* This odd setting is marked as shown on the schematic, */
609 /* and again, is not read by the program, but wired into */
610 /* the watchdog circuit. The book says to leave it off */
611
612 PORT_DIPUNUSED_DIPLOC( 0x04, 0x00, "SW:6" )
613 INPUT_PORTS_END
614
615 INPUT_CHANGED_MEMBER(cosmic_state::coin_inserted_irq0)
616 {
617 m_maincpu->set_input_line(0, newval ? HOLD_LINE : CLEAR_LINE);
618 }
619
INPUT_CHANGED_MEMBER(cosmic_state::coin_inserted_nmi)620 INPUT_CHANGED_MEMBER(cosmic_state::coin_inserted_nmi)
621 {
622 m_maincpu->set_input_line(INPUT_LINE_NMI, newval ? ASSERT_LINE : CLEAR_LINE);
623 }
624
625 static INPUT_PORTS_START( magspot )
626 PORT_START("IN0")
627 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
628 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY
629 PORT_BIT( 0x1c, IP_ACTIVE_LOW, IPT_UNUSED )
630 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY
631 PORT_DIPNAME( 0xc0, 0x40, "Bonus Game" )
632 PORT_DIPSETTING( 0x40, "5000" )
633 PORT_DIPSETTING( 0x80, "10000" )
634 PORT_DIPSETTING( 0xc0, "15000" )
635 PORT_DIPSETTING( 0x00, DEF_STR( None ) )
636
637 PORT_START("IN1")
638 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
639 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_COCKTAIL
640 PORT_BIT( 0x1c, IP_ACTIVE_LOW, IPT_UNUSED )
641 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_COCKTAIL
642 PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
643
644 PORT_START("IN2")
645 PORT_DIPNAME( 0x03, 0x01, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWA:5,6")
646 PORT_DIPSETTING( 0x01, "2000" )
647 PORT_DIPSETTING( 0x02, "3000" )
648 PORT_DIPSETTING( 0x03, "5000" )
649 PORT_DIPSETTING( 0x00, DEF_STR( None ) )
650 /* According to the manual, bits 2-3 should control coinage like in devzone
651 and only bit 4 should control lives setting. */
652 // PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SWA:3,4")
653 // PORT_DIPSETTING( 0x0c, "Use Coin A & B" )
654 // PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) )
655 // PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
656 // PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
657 // PORT_DIPNAME( 0x10, 0x10, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWA:2")
658 // PORT_DIPSETTING( 0x00, "2" )
659 // PORT_DIPSETTING( 0x10, "3" )
660 PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x00, "SWA:4" )
661 PORT_DIPNAME( 0x18, 0x08, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWA:2,3")
662 PORT_DIPSETTING( 0x00, "2" )
663 PORT_DIPSETTING( 0x08, "3" )
664 PORT_DIPSETTING( 0x10, "4" )
665 PORT_DIPSETTING( 0x18, "5" )
666 PORT_DIPNAME( 0x20, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SWA:1")
667 PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
668 PORT_DIPSETTING( 0x20, DEF_STR( Cocktail ) )
669 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 )
670 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
671
672 PORT_START("IN3")
673 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
674 PORT_BIT( 0x1e, IP_ACTIVE_LOW, IPT_UNUSED ) /* always HI */
675 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_CUSTOM ) /* reads what was written to 4808. Probably not used?? */
676 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
677 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 )
678
679 /* Fake port to handle coins */
680 PORT_START("COINS")
681 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, cosmic_state,coin_inserted_irq0, 0) PORT_IMPULSE(1)
682 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, cosmic_state,coin_inserted_nmi, 0)
683
684 /* Fake port to handle coinage dip switches. Each bit goes to 3800-3807 */
685 PORT_START("DSW")
686 PORT_DIPNAME( 0x0f, 0x00, DEF_STR( Coin_A ) )
687 PORT_DIPSETTING( 0x0c, DEF_STR( 4C_1C ) )
688 PORT_DIPSETTING( 0x08, DEF_STR( 3C_1C ) )
689 PORT_DIPSETTING( 0x0d, DEF_STR( 4C_2C ) )
690 PORT_DIPSETTING( 0x05, DEF_STR( 2C_1C ) )
691 PORT_DIPSETTING( 0x09, DEF_STR( 3C_2C ) )
692 PORT_DIPSETTING( 0x0e, DEF_STR( 4C_3C ) )
693 PORT_DIPSETTING( 0x0f, DEF_STR( 4C_4C ) )
694 PORT_DIPSETTING( 0x0a, DEF_STR( 3C_3C ) )
695 PORT_DIPSETTING( 0x06, DEF_STR( 2C_2C ) )
696 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
697 PORT_DIPSETTING( 0x0b, DEF_STR( 3C_4C ) )
698 PORT_DIPSETTING( 0x07, DEF_STR( 2C_3C ) )
699 PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) )
700 PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) )
701 PORT_DIPSETTING( 0x03, DEF_STR( 1C_4C ) )
702 PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) )
703 PORT_DIPNAME( 0xf0, 0x00, DEF_STR( Coin_B ) )
704 PORT_DIPSETTING( 0xc0, DEF_STR( 4C_1C ) )
705 PORT_DIPSETTING( 0x80, DEF_STR( 3C_1C ) )
706 PORT_DIPSETTING( 0xd0, DEF_STR( 4C_2C ) )
707 PORT_DIPSETTING( 0x50, DEF_STR( 2C_1C ) )
708 PORT_DIPSETTING( 0x90, DEF_STR( 3C_2C ) )
709 PORT_DIPSETTING( 0xe0, DEF_STR( 4C_3C ) )
710 PORT_DIPSETTING( 0xf0, DEF_STR( 4C_4C ) )
711 PORT_DIPSETTING( 0xa0, DEF_STR( 3C_3C ) )
712 PORT_DIPSETTING( 0x60, DEF_STR( 2C_2C ) )
713 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
714 PORT_DIPSETTING( 0xb0, DEF_STR( 3C_4C ) )
715 PORT_DIPSETTING( 0x70, DEF_STR( 2C_3C ) )
716 PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) )
717 PORT_DIPSETTING( 0x20, DEF_STR( 1C_3C ) )
718 PORT_DIPSETTING( 0x30, DEF_STR( 1C_4C ) )
719 PORT_DIPSETTING( 0x40, DEF_STR( 1C_5C ) )
720 INPUT_PORTS_END
721
722 static INPUT_PORTS_START( devzone )
723 PORT_START("IN0")
724 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
725 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY
726 PORT_BIT( 0x1c, IP_ACTIVE_LOW, IPT_UNUSED )
727 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY
728 PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
729
730 PORT_START("IN1")
731 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
732 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_COCKTAIL
733 PORT_BIT( 0x1c, IP_ACTIVE_LOW, IPT_UNUSED )
734 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_COCKTAIL
735 PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
736
737 PORT_START("IN2")
738 PORT_DIPNAME( 0x03, 0x01, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWA:5,6")
739 PORT_DIPSETTING( 0x01, "4000" )
740 PORT_DIPSETTING( 0x02, "6000" )
741 PORT_DIPSETTING( 0x03, "8000" )
742 PORT_DIPSETTING( 0x00, DEF_STR( None ) )
743 PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SWA:3,4")
744 PORT_DIPSETTING( 0x0c, "Use Coin A & B" )
745 PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) )
746 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
747 PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
748 PORT_DIPNAME( 0x10, 0x10, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWA:2")
749 PORT_DIPSETTING( 0x00, "2" )
750 PORT_DIPSETTING( 0x10, "3" )
751 PORT_DIPNAME( 0x20, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SWA:1")
752 PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
753 PORT_DIPSETTING( 0x20, DEF_STR( Cocktail ) )
754 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 )
755 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
756
757 PORT_START("IN3")
758 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
759 PORT_BIT( 0x3e, IP_ACTIVE_LOW, IPT_UNUSED )
760 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
761 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 )
762
763 /* Fake port to handle coins */
764 PORT_START("COINS")
765 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, cosmic_state,coin_inserted_irq0, 0) PORT_IMPULSE(1)
766 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, cosmic_state,coin_inserted_nmi, 0)
767
768 PORT_START("DSW")
769 PORT_DIPNAME( 0x0f, 0x00, DEF_STR( Coin_A ) )
770 PORT_DIPSETTING( 0x0c, DEF_STR( 4C_1C ) )
771 PORT_DIPSETTING( 0x08, DEF_STR( 3C_1C ) )
772 PORT_DIPSETTING( 0x0d, DEF_STR( 4C_2C ) )
773 PORT_DIPSETTING( 0x05, DEF_STR( 2C_1C ) )
774 PORT_DIPSETTING( 0x09, DEF_STR( 3C_2C ) )
775 PORT_DIPSETTING( 0x0e, DEF_STR( 4C_3C ) )
776 PORT_DIPSETTING( 0x0f, DEF_STR( 4C_4C ) )
777 PORT_DIPSETTING( 0x0a, DEF_STR( 3C_3C ) )
778 PORT_DIPSETTING( 0x06, DEF_STR( 2C_2C ) )
779 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
780 PORT_DIPSETTING( 0x0b, DEF_STR( 3C_4C ) )
781 PORT_DIPSETTING( 0x07, DEF_STR( 2C_3C ) )
782 PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) )
783 PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) )
784 PORT_DIPSETTING( 0x03, DEF_STR( 1C_4C ) )
785 PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) )
786 PORT_DIPNAME( 0xf0, 0x00, DEF_STR( Coin_B ) )
787 PORT_DIPSETTING( 0xc0, DEF_STR( 4C_1C ) )
788 PORT_DIPSETTING( 0x80, DEF_STR( 3C_1C ) )
789 PORT_DIPSETTING( 0xd0, DEF_STR( 4C_2C ) )
790 PORT_DIPSETTING( 0x50, DEF_STR( 2C_1C ) )
791 PORT_DIPSETTING( 0x90, DEF_STR( 3C_2C ) )
792 PORT_DIPSETTING( 0xe0, DEF_STR( 4C_3C ) )
793 PORT_DIPSETTING( 0xf0, DEF_STR( 4C_4C ) )
794 PORT_DIPSETTING( 0xa0, DEF_STR( 3C_3C ) )
795 PORT_DIPSETTING( 0x60, DEF_STR( 2C_2C ) )
796 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
797 PORT_DIPSETTING( 0xb0, DEF_STR( 3C_4C ) )
798 PORT_DIPSETTING( 0x70, DEF_STR( 2C_3C ) )
799 PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) )
800 PORT_DIPSETTING( 0x20, DEF_STR( 1C_3C ) )
801 PORT_DIPSETTING( 0x30, DEF_STR( 1C_4C ) )
802 PORT_DIPSETTING( 0x40, DEF_STR( 1C_5C ) )
803 INPUT_PORTS_END
804
805
806 static INPUT_PORTS_START( devzone2 )
807 PORT_INCLUDE( devzone )
808
809 PORT_MODIFY("IN2")
810 PORT_DIPNAME( 0x03, 0x01, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWA:5,6")
811 PORT_DIPSETTING( 0x01, "2000" )
812 PORT_DIPSETTING( 0x02, "3000" )
813 PORT_DIPSETTING( 0x03, "5000" )
814 PORT_DIPSETTING( 0x00, DEF_STR( None ) )
815 INPUT_PORTS_END
816
817
818 static INPUT_PORTS_START( nomnlnd )
819 PORT_START("IN0") /* Controls - Remapped for game */
820 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
821 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
822 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
823 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
824 PORT_BIT( 0x55, IP_ACTIVE_LOW, IPT_CUSTOM ) /* diagonals */
825
826 PORT_START("IN1")
827 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
828 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
829 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
830 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
831 PORT_BIT( 0x55, IP_ACTIVE_LOW, IPT_CUSTOM ) /* diagonals */
832
833 PORT_START("IN2")
834 PORT_DIPNAME( 0x03, 0x02, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW:5,6")
835 PORT_DIPSETTING( 0x01, "2000" )
836 PORT_DIPSETTING( 0x02, "3000" )
837 PORT_DIPSETTING( 0x03, "5000" )
838 PORT_DIPSETTING( 0x00, DEF_STR( None ) )
839 PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW:3,4")
840 PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) )
841 PORT_DIPSETTING( 0x0c, DEF_STR( 4C_4C ) )
842 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
843 PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
844 PORT_DIPNAME( 0x10, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW:2")
845 PORT_DIPSETTING( 0x00, "3" )
846 PORT_DIPSETTING( 0x10, "5" )
847 PORT_DIPNAME( 0x20, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW:1")
848 PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
849 PORT_DIPSETTING( 0x20, DEF_STR( Cocktail ) )
850 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 )
851 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
852
853 PORT_START("IN3")
854 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
855 PORT_BIT( 0x1e, IP_ACTIVE_LOW, IPT_UNUSED ) /* always HI */
856 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_CUSTOM ) /* reads what was written to 4808. Probably not used?? */
857 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
858 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 )
859
860 /* Fake port to handle coin */
861 PORT_START("COIN")
862 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, cosmic_state,coin_inserted_nmi, 0)
863 INPUT_PORTS_END
864
865
866 static INPUT_PORTS_START( nomnlndg )
867 PORT_INCLUDE( nomnlnd )
868
869 PORT_MODIFY("IN2")
870 PORT_DIPNAME( 0x03, 0x02, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW:5,6")
871 PORT_DIPSETTING( 0x01, "3000" )
872 PORT_DIPSETTING( 0x02, "5000" )
873 PORT_DIPSETTING( 0x03, "8000" )
874 PORT_DIPSETTING( 0x00, DEF_STR( None ) )
875 PORT_DIPNAME( 0x10, 0x10, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW:2")
876 PORT_DIPSETTING( 0x00, "2" )
877 PORT_DIPSETTING( 0x10, "3" )
878 INPUT_PORTS_END
879
880
881 static const gfx_layout cosmic_spritelayout16 =
882 {
883 16,16,
884 RGN_FRAC(1,2),
885 2,
886 { RGN_FRAC(0,2), RGN_FRAC(1,2) },
887 { 0*8+0, 0*8+1, 0*8+2, 0*8+3, 0*8+4, 0*8+5, 0*8+6, 0*8+7,
888 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7},
889 { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
890 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
891 32*8
892 };
893
894 static const gfx_layout cosmic_spritelayout32 =
895 {
896 32,32,
897 RGN_FRAC(1,2),
898 2,
899 { RGN_FRAC(0,2), RGN_FRAC(1,2) },
900 { 0*32*8+0, 0*32*8+1, 0*32*8+2, 0*32*8+3, 0*32*8+4, 0*32*8+5, 0*32*8+6, 0*32*8+7,
901 1*32*8+0, 1*32*8+1, 1*32*8+2, 1*32*8+3, 1*32*8+4, 1*32*8+5, 1*32*8+6, 1*32*8+7,
902 2*32*8+0, 2*32*8+1, 2*32*8+2, 2*32*8+3, 2*32*8+4, 2*32*8+5, 2*32*8+6, 2*32*8+7,
903 3*32*8+0, 3*32*8+1, 3*32*8+2, 3*32*8+3, 3*32*8+4, 3*32*8+5, 3*32*8+6, 3*32*8+7 },
904 { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
905 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8,
906 16*8, 17*8, 18*8, 19*8, 20*8, 21*8, 22*8, 23*8,
907 24*8, 25*8, 26*8, 27*8, 28*8, 29*8, 30*8, 31*8 },
908 128*8
909 };
910
911
912 static GFXDECODE_START( gfx_panic )
913 GFXDECODE_ENTRY( "gfx1", 0, cosmic_spritelayout16, 16, 8 )
914 GFXDECODE_ENTRY( "gfx1", 0, cosmic_spritelayout32, 16, 8 )
915 GFXDECODE_END
916
917 static GFXDECODE_START( gfx_cosmica )
918 GFXDECODE_ENTRY( "gfx1", 0, cosmic_spritelayout16, 8, 16 )
919 GFXDECODE_ENTRY( "gfx1", 0, cosmic_spritelayout32, 8, 16 )
920 GFXDECODE_END
921
922
923 static const char *const cosmica_sample_names[] =
924 {
925 "*cosmica",
926 "backgr",
927 "extend",
928 "divea",
929 "diveb1",
930 "diveb2",
931 "diveb3",
932 "diveb4",
933 "diveb5",
934 "diveb6",
935 "fire",
936 "loudexp",
937 "smallexp",
938 "coin",
939 nullptr /* end of array */
940 };
941
942
943 static const char *const panic_sample_names[] =
944 {
945 "*panic",
946 "walk",
947 "upordown",
948 "trapped",
949 "falling",
950 "escaping",
951 "ekilled",
952 "death",
953 "elaugh",
954 "extral",
955 "oxygen",
956 "coin",
957 nullptr
958 };
959
960
961 static const char *const cosmicg_sample_names[] =
962 {
963 "*cosmicg",
964 "cg_m0", /* 8 Different pitches of March Sound */
965 "cg_m1",
966 "cg_m2",
967 "cg_m3",
968 "cg_m4",
969 "cg_m5",
970 "cg_m6",
971 "cg_m7",
972 "cg_att", /* Killer Attack */
973 "cg_chnc", /* Bonus Chance */
974 "cg_gotb", /* Got Bonus - have not got correct sound for */
975 "cg_dest", /* Gun Destroy */
976 "cg_gun", /* Gun Shot */
977 "cg_gotm", /* Got Monster */
978 "cg_ext", /* Coin Extend */
979 nullptr
980 };
981
982
MACHINE_START_MEMBER(cosmic_state,cosmic)983 MACHINE_START_MEMBER(cosmic_state,cosmic)
984 {
985 save_item(NAME(m_sound_enabled));
986 save_item(NAME(m_march_select));
987 save_item(NAME(m_gun_die_select));
988 save_item(NAME(m_dive_bomb_b_select));
989 save_item(NAME(m_pixel_clock));
990
991 save_item(NAME(m_background_enable));
992 save_item(NAME(m_color_registers));
993 }
994
MACHINE_RESET_MEMBER(cosmic_state,cosmic)995 MACHINE_RESET_MEMBER(cosmic_state,cosmic)
996 {
997 m_pixel_clock = 0;
998 m_background_enable = 0;
999 m_color_registers[0] = 0;
1000 m_color_registers[1] = 0;
1001 m_color_registers[2] = 0;
1002 }
1003
MACHINE_RESET_MEMBER(cosmic_state,cosmicg)1004 MACHINE_RESET_MEMBER(cosmic_state,cosmicg)
1005 {
1006 m_pixel_clock = 0;
1007 m_background_enable = 0;
1008 m_color_registers[0] = 0;
1009 m_color_registers[1] = 0;
1010 m_color_registers[2] = 0;
1011 m_maincpu->set_input_line(INT_9980A_RESET, ASSERT_LINE);
1012 m_maincpu->set_input_line(INT_9980A_RESET, CLEAR_LINE);
1013 }
1014
cosmic(machine_config & config)1015 void cosmic_state::cosmic(machine_config &config)
1016 {
1017 /* basic machine hardware */
1018 Z80(config, m_maincpu, Z80_MASTER_CLOCK/6); /* 1.8026 MHz */
1019
1020 MCFG_MACHINE_START_OVERRIDE(cosmic_state,cosmic)
1021 MCFG_MACHINE_RESET_OVERRIDE(cosmic_state,cosmic)
1022
1023 /* video hardware */
1024 SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
1025 m_screen->set_refresh_hz(60);
1026 m_screen->set_size(32*8, 32*8);
1027 m_screen->set_visarea(0*8, 32*8-1, 4*8, 28*8-1);
1028 m_screen->set_palette(m_palette);
1029 }
1030
TIMER_DEVICE_CALLBACK_MEMBER(cosmic_state::panic_scanline)1031 TIMER_DEVICE_CALLBACK_MEMBER(cosmic_state::panic_scanline)
1032 {
1033 int scanline = param;
1034
1035 if(scanline == 224) // vblank-out irq
1036 m_maincpu->set_input_line_and_vector(0, HOLD_LINE,0xd7); /* Z80 - RST 10h */
1037
1038 if(scanline == 0) // vblank-in irq
1039 m_maincpu->set_input_line_and_vector(0, HOLD_LINE,0xcf); /* Z80 - RST 08h */
1040 }
1041
1042
panic(machine_config & config)1043 void cosmic_state::panic(machine_config &config)
1044 {
1045 cosmic(config);
1046
1047 /* basic machine hardware */
1048 m_maincpu->set_addrmap(AS_PROGRAM, &cosmic_state::panic_map);
1049 TIMER(config, "scantimer").configure_scanline(FUNC(cosmic_state::panic_scanline), "screen", 0, 1);
1050
1051 /* video hardware */
1052 GFXDECODE(config, m_gfxdecode, m_palette, gfx_panic);
1053 PALETTE(config, m_palette, FUNC(cosmic_state::panic_palette), 16 + 8*4, 16);
1054
1055 m_screen->set_screen_update(FUNC(cosmic_state::screen_update_panic));
1056
1057 /* sound hardware */
1058 SPEAKER(config, "speaker").front_center();
1059
1060 SAMPLES(config, m_samples);
1061 m_samples->set_channels(9);
1062 m_samples->set_samples_names(panic_sample_names);
1063 m_samples->add_route(ALL_OUTPUTS, "speaker", 0.25);
1064
1065 DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.5);
1066 }
1067
cosmica(machine_config & config)1068 void cosmic_state::cosmica(machine_config &config)
1069 {
1070 cosmic(config);
1071
1072 /* basic machine hardware */
1073 m_maincpu->set_addrmap(AS_PROGRAM, &cosmic_state::cosmica_map);
1074
1075 /* video hardware */
1076 GFXDECODE(config, m_gfxdecode, m_palette, gfx_cosmica);
1077 PALETTE(config, m_palette, FUNC(cosmic_state::cosmica_palette), 8 + 16*4, 8);
1078
1079 m_screen->set_screen_update(FUNC(cosmic_state::screen_update_cosmica));
1080
1081 /* sound hardware */
1082 SPEAKER(config, "speaker").front_center();
1083
1084 SAMPLES(config, m_samples);
1085 m_samples->set_channels(13);
1086 m_samples->set_samples_names(cosmica_sample_names);
1087 m_samples->add_route(ALL_OUTPUTS, "speaker", 0.25);
1088 }
1089
cosmicg(machine_config & config)1090 void cosmic_state::cosmicg(machine_config &config)
1091 {
1092 /* basic machine hardware */
1093 TMS9980A(config, m_maincpu, COSMICG_MASTER_CLOCK); // 9.828 MHz Crystal
1094 m_maincpu->set_addrmap(AS_PROGRAM, &cosmic_state::cosmicg_map);
1095 m_maincpu->set_addrmap(AS_IO, &cosmic_state::cosmicg_io_map);
1096
1097 MCFG_MACHINE_START_OVERRIDE(cosmic_state,cosmic)
1098 MCFG_MACHINE_RESET_OVERRIDE(cosmic_state,cosmicg)
1099
1100 /* video hardware */
1101 SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
1102 m_screen->set_refresh_hz(60);
1103 m_screen->set_size(32*8, 32*8);
1104 m_screen->set_visarea(0*8, 32*8-1, 4*8, 28*8-1);
1105 m_screen->set_screen_update(FUNC(cosmic_state::screen_update_cosmicg));
1106 m_screen->set_palette(m_palette);
1107
1108 PALETTE(config, m_palette, FUNC(cosmic_state::cosmicg_palette), 16);
1109
1110 /* sound hardware */
1111 SPEAKER(config, "speaker").front_center();
1112
1113 SAMPLES(config, m_samples);
1114 m_samples->set_channels(9);
1115 m_samples->set_samples_names(cosmicg_sample_names);
1116 m_samples->add_route(ALL_OUTPUTS, "speaker", 0.25);
1117
1118 DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.5); // NE556
1119 // Other DACs include 3-bit binary-weighted (100K/50K/25K) DAC combined with another NE556 for attack march
1120 }
1121
magspot(machine_config & config)1122 void cosmic_state::magspot(machine_config &config)
1123 {
1124 cosmic(config);
1125
1126 /* basic machine hardware */
1127 Z80(config.replace(), m_maincpu, Z80_MASTER_CLOCK/4); /* 2.704 MHz, verified via schematics */
1128 m_maincpu->set_addrmap(AS_PROGRAM, &cosmic_state::magspot_map);
1129
1130 /* video hardware */
1131 GFXDECODE(config, m_gfxdecode, m_palette, gfx_panic);
1132 PALETTE(config, m_palette, FUNC(cosmic_state::magspot_palette), 16 + 8*4, 16);
1133
1134 m_screen->set_screen_update(FUNC(cosmic_state::screen_update_magspot));
1135
1136 /* sound hardware */
1137 SPEAKER(config, "speaker").front_center();
1138
1139 DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.5);
1140 }
1141
devzone(machine_config & config)1142 void cosmic_state::devzone(machine_config &config)
1143 {
1144 magspot(config);
1145
1146 /* video hardware */
1147 m_screen->set_screen_update(FUNC(cosmic_state::screen_update_devzone));
1148 }
1149
nomnlnd(machine_config & config)1150 void cosmic_state::nomnlnd(machine_config &config)
1151 {
1152 cosmic(config);
1153
1154 /* basic machine hardware */
1155 m_maincpu->set_addrmap(AS_PROGRAM, &cosmic_state::magspot_map);
1156
1157 /* video hardware */
1158 GFXDECODE(config, m_gfxdecode, m_palette, gfx_panic);
1159 PALETTE(config, m_palette, FUNC(cosmic_state::nomnlnd_palette), 16 + 8*4, 16);
1160
1161 m_screen->set_screen_update(FUNC(cosmic_state::screen_update_nomnlnd));
1162
1163 /* sound hardware */
1164 SPEAKER(config, "speaker").front_center();
1165
1166 DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.5);
1167 }
1168
1169
1170 ROM_START( panic )
1171 ROM_REGION( 0x10000, "maincpu", 0 )
1172 ROM_LOAD( "spe1", 0x0000, 0x0800, CRC(70ac0888) SHA1(bdc6dfb74b4643df36cae60923f9759751340c86) )
1173 ROM_LOAD( "spe2", 0x0800, 0x0800, CRC(2b910c48) SHA1(9ebb15694e068a4d8769ec5d312af1148818d472) )
1174 ROM_LOAD( "spe3", 0x1000, 0x0800, CRC(03810148) SHA1(768418bc0a3a5bc9f7ec07b8edd4099da69efac6) )
1175 ROM_LOAD( "spe4", 0x1800, 0x0800, CRC(119bbbfd) SHA1(2b3722300b1eebe1bffa4a4e39fceb45aefde24f) )
1176 ROM_LOAD( "spcpanic.5", 0x2000, 0x0800, CRC(5b80f277) SHA1(b060e57c88679f547153aed041a5554dc26a83aa) )
CRC(b73babf0)1177 ROM_LOAD( "spcpanic.6", 0x2800, 0x0800, CRC(b73babf0) SHA1(229944a6b3653601bc20afea5a9aec787fd95ce0) )
1178 ROM_LOAD( "spe7", 0x3000, 0x0800, CRC(2894106e) SHA1(625896225b0ec03ac12f3e8b97e801cb743f37e7) )
1179
1180 ROM_REGION( 0x2000, "gfx1", 0 )
1181 ROM_LOAD( "spcpanic.11", 0x0000, 0x0800, CRC(acea9df4) SHA1(7de2a82da8160ad1a01c32a516d10c19dc306051) )
1182 ROM_LOAD( "spcpanic.12", 0x0800, 0x0800, CRC(e83423d0) SHA1(eba1129537869f1ecb5afeeae19db19b134865f6) )
1183 ROM_LOAD( "spcpanic.10", 0x1000, 0x0800, CRC(c9631c2d) SHA1(e5ab95e19c1b22a798a70a1a6599bc1f5e853c60) )
1184 ROM_LOAD( "spcpanic.9", 0x1800, 0x0800, CRC(eec78b4c) SHA1(efd21d0a26b988a490c45315a7a121607f74d147) )
1185
1186 ROM_REGION( 0x0020, "proms", 0 )
1187 ROM_LOAD( "82s123.sp", 0x0000, 0x0020, CRC(35d43d2f) SHA1(2ce164c92ed7ba3ee26a907f0c5969ec3decca01) )
1188
1189 ROM_REGION( 0x0800, "user1", 0 ) /* color map */
1190 ROM_LOAD( "spcpanic.8", 0x0000, 0x0800, CRC(7da0b321) SHA1(b450cc02de9cc27e3f336c626221c90c6961b51e) )
1191 ROM_END
1192
1193 ROM_START( panic2 )
1194 ROM_REGION( 0x10000, "maincpu", 0 )
1195 ROM_LOAD( "spcpanic.1", 0x0000, 0x0800, CRC(405ae6f9) SHA1(92000f5f9bc1384ebae36dd30e715764747504d8) )
1196 ROM_LOAD( "spcpanic.2", 0x0800, 0x0800, CRC(b6a286c5) SHA1(b33beb1fbe622e9c90888d25d018fd5bef6cb65b) )
1197 ROM_LOAD( "spcpanic.3", 0x1000, 0x0800, CRC(85ae8b2e) SHA1(a5676d38e3c0ea0aeedc29bea0c04086e51da67f) )
1198 ROM_LOAD( "spcpanic.4", 0x1800, 0x0800, CRC(b6d4f52f) SHA1(431e5ef00768a633d17449a888ac9ce46975272d) )
1199 ROM_LOAD( "spcpanic.5", 0x2000, 0x0800, CRC(5b80f277) SHA1(b060e57c88679f547153aed041a5554dc26a83aa) )
1200 ROM_LOAD( "spcpanic.6", 0x2800, 0x0800, CRC(b73babf0) SHA1(229944a6b3653601bc20afea5a9aec787fd95ce0) )
1201 ROM_LOAD( "spcpanic.7", 0x3000, 0x0800, CRC(fc27f4e5) SHA1(80064ccfb810d11f6d7d79bfd991adb2eb2f1c16) )
1202
1203 ROM_REGION( 0x2000, "gfx1", 0 )
1204 ROM_LOAD( "spcpanic.11", 0x0000, 0x0800, CRC(acea9df4) SHA1(7de2a82da8160ad1a01c32a516d10c19dc306051) )
1205 ROM_LOAD( "spcpanic.12", 0x0800, 0x0800, CRC(e83423d0) SHA1(eba1129537869f1ecb5afeeae19db19b134865f6) )
1206 ROM_LOAD( "spcpanic.10", 0x1000, 0x0800, CRC(c9631c2d) SHA1(e5ab95e19c1b22a798a70a1a6599bc1f5e853c60) )
1207 ROM_LOAD( "spcpanic.9", 0x1800, 0x0800, CRC(eec78b4c) SHA1(efd21d0a26b988a490c45315a7a121607f74d147) )
1208
1209 ROM_REGION( 0x0020, "proms", 0 )
1210 ROM_LOAD( "82s123.sp", 0x0000, 0x0020, CRC(35d43d2f) SHA1(2ce164c92ed7ba3ee26a907f0c5969ec3decca01) )
1211
1212 ROM_REGION( 0x0800, "user1", 0 ) /* color map */
1213 ROM_LOAD( "spcpanic.8", 0x0000, 0x0800, CRC(7da0b321) SHA1(b450cc02de9cc27e3f336c626221c90c6961b51e) )
1214 ROM_END
1215
1216 ROM_START( panic3 )
1217 ROM_REGION( 0x10000, "maincpu", 0 )
1218 ROM_LOAD( "panica.1", 0x0000, 0x0800, CRC(289720ce) SHA1(8601bda95ac32a55f17fe9c723796bfe8b2b2fa7) )
1219 ROM_LOAD( "spcpanic.2", 0x0800, 0x0800, CRC(b6a286c5) SHA1(b33beb1fbe622e9c90888d25d018fd5bef6cb65b) )
1220 ROM_LOAD( "spcpanic.3", 0x1000, 0x0800, CRC(85ae8b2e) SHA1(a5676d38e3c0ea0aeedc29bea0c04086e51da67f) )
1221 ROM_LOAD( "spcpanic.4", 0x1800, 0x0800, CRC(b6d4f52f) SHA1(431e5ef00768a633d17449a888ac9ce46975272d) )
1222 ROM_LOAD( "spcpanic.5", 0x2000, 0x0800, CRC(5b80f277) SHA1(b060e57c88679f547153aed041a5554dc26a83aa) )
1223 ROM_LOAD( "spcpanic.6", 0x2800, 0x0800, CRC(b73babf0) SHA1(229944a6b3653601bc20afea5a9aec787fd95ce0) )
1224 ROM_LOAD( "panica.7", 0x3000, 0x0800, CRC(3641cb7f) SHA1(94a5108233cf9517f782759bb396e4eab58b8551) )
1225
1226 ROM_REGION( 0x2000, "gfx1", 0 )
1227 ROM_LOAD( "spcpanic.11", 0x0000, 0x0800, CRC(acea9df4) SHA1(7de2a82da8160ad1a01c32a516d10c19dc306051) )
1228 ROM_LOAD( "spcpanic.12", 0x0800, 0x0800, CRC(e83423d0) SHA1(eba1129537869f1ecb5afeeae19db19b134865f6) )
1229 ROM_LOAD( "spcpanic.10", 0x1000, 0x0800, CRC(c9631c2d) SHA1(e5ab95e19c1b22a798a70a1a6599bc1f5e853c60) )
1230 ROM_LOAD( "spcpanic.9", 0x1800, 0x0800, CRC(eec78b4c) SHA1(efd21d0a26b988a490c45315a7a121607f74d147) )
1231
1232 ROM_REGION( 0x0020, "proms", 0 )
1233 ROM_LOAD( "82s123.sp", 0x0000, 0x0020, CRC(35d43d2f) SHA1(2ce164c92ed7ba3ee26a907f0c5969ec3decca01) )
1234
1235 ROM_REGION( 0x0800, "user1", 0 ) /* color map */
1236 ROM_LOAD( "spcpanic.8", 0x0000, 0x0800, CRC(7da0b321) SHA1(b450cc02de9cc27e3f336c626221c90c6961b51e) )
1237 ROM_END
1238
1239 ROM_START( panich )
1240 ROM_REGION( 0x10000, "maincpu", 0 )
1241 ROM_LOAD( "sph1", 0x0000, 0x0800, CRC(f6e9c6ef) SHA1(90b5bba0fd726e4c6618793467eba8c18c63fd43) )
1242 ROM_LOAD( "sph2", 0x0800, 0x0800, CRC(58dbc49b) SHA1(f716e8cdbb7eb456bd7f2996241b5ebd03086de3) )
1243 ROM_LOAD( "sph3", 0x1000, 0x0800, CRC(c4f275ad) SHA1(446be24dc99e46f3c69cf2cfb657958053857b7d) )
1244 ROM_LOAD( "sph4", 0x1800, 0x0800, CRC(6e7785de) SHA1(d12326791cbcae37980e240e2bfc20d7618f3ef5) )
1245 ROM_LOAD( "sph5", 0x2000, 0x0800, CRC(1916c9b8) SHA1(ab4a353340f152d6ba181555ee211afeb7877509) )
1246 ROM_LOAD( "sph6", 0x2800, 0x0800, CRC(54b92314) SHA1(970ebae831ea0a1958b8d711ebc5956ef4f932fe) )
1247 ROM_LOAD( "sph7", 0x3000, 0x0800, CRC(8600b881) SHA1(2eed176de531f44d10b7755141621050d72ad7ac) )
1248
1249 ROM_REGION( 0x2000, "gfx1", 0 )
1250 ROM_LOAD( "spcpanic.11", 0x0000, 0x0800, CRC(acea9df4) SHA1(7de2a82da8160ad1a01c32a516d10c19dc306051) )
1251 ROM_LOAD( "spcpanic.12", 0x0800, 0x0800, CRC(e83423d0) SHA1(eba1129537869f1ecb5afeeae19db19b134865f6) )
1252 ROM_LOAD( "spcpanic.10", 0x1000, 0x0800, CRC(c9631c2d) SHA1(e5ab95e19c1b22a798a70a1a6599bc1f5e853c60) )
1253 ROM_LOAD( "spcpanic.9", 0x1800, 0x0800, CRC(eec78b4c) SHA1(efd21d0a26b988a490c45315a7a121607f74d147) )
1254
1255 ROM_REGION( 0x0020, "proms", 0 )
1256 ROM_LOAD( "82s123.sp", 0x0000, 0x0020, CRC(35d43d2f) SHA1(2ce164c92ed7ba3ee26a907f0c5969ec3decca01) )
1257
1258 ROM_REGION( 0x0800, "user1", 0 ) /* color map */
1259 ROM_LOAD( "spcpanic.8", 0x0000, 0x0800, CRC(7da0b321) SHA1(b450cc02de9cc27e3f336c626221c90c6961b51e) )
1260 ROM_END
1261
1262 ROM_START( panicger )
1263 ROM_REGION( 0x10000, "maincpu", 0 )
1264 ROM_LOAD( "spacepan.001", 0x0000, 0x0800, CRC(a6d9515a) SHA1(20fe6fa4cb10e83f97b77e19d9d4f883aba73d1a) )
1265 ROM_LOAD( "spacepan.002", 0x0800, 0x0800, CRC(cfc22663) SHA1(44036a69ca3463759c56637c3435a3305b102879) )
1266 ROM_LOAD( "spacepan.003", 0x1000, 0x0800, CRC(e1f36893) SHA1(689b77b4df15dc980d35cf245aca1affe46d6b21) )
1267 ROM_LOAD( "spacepan.004", 0x1800, 0x0800, CRC(01be297c) SHA1(d22856ef192d8239a3520f16bbe5a6f7f4c3adc8) )
1268 ROM_LOAD( "spacepan.005", 0x2000, 0x0800, CRC(e0d54805) SHA1(5852f69cee9a8f9984b175268bcfafe4f3f124ba) )
1269 ROM_LOAD( "spacepan.006", 0x2800, 0x0800, CRC(aae1458e) SHA1(79dd5992b81f316cf86efdb2809b7002e824e0e7) )
1270 ROM_LOAD( "spacepan.007", 0x3000, 0x0800, CRC(14e46e70) SHA1(f49f09a12b796f7a7713d872ecd12e246c56c261) )
1271
1272 ROM_REGION( 0x2000, "gfx1", 0 )
1273 ROM_LOAD( "spcpanic.11", 0x0000, 0x0800, CRC(acea9df4) SHA1(7de2a82da8160ad1a01c32a516d10c19dc306051) )
1274 ROM_LOAD( "spcpanic.12", 0x0800, 0x0800, CRC(e83423d0) SHA1(eba1129537869f1ecb5afeeae19db19b134865f6) )
1275 ROM_LOAD( "spcpanic.10", 0x1000, 0x0800, CRC(c9631c2d) SHA1(e5ab95e19c1b22a798a70a1a6599bc1f5e853c60) )
1276 ROM_LOAD( "spcpanic.9", 0x1800, 0x0800, CRC(eec78b4c) SHA1(efd21d0a26b988a490c45315a7a121607f74d147) )
1277
1278 ROM_REGION( 0x0020, "proms", 0 )
1279 ROM_LOAD( "82s123.sp", 0x0000, 0x0020, CRC(35d43d2f) SHA1(2ce164c92ed7ba3ee26a907f0c5969ec3decca01) )
1280
1281 ROM_REGION( 0x0800, "user1", 0 ) /* color map */
1282 ROM_LOAD( "spcpanic.8", 0x0000, 0x0800, CRC(7da0b321) SHA1(b450cc02de9cc27e3f336c626221c90c6961b51e) )
1283 ROM_END
1284
1285 ROM_START( cosmica ) /* later revision 7910-AII pcb; some roms are marked II-x; note that this set does NOT have the 1979 copyright date on the titlescreen! */
1286 ROM_REGION( 0x10000, "maincpu", 0 )
1287 ROM_LOAD( "ii-1.e3", 0x0000, 0x0800, CRC(535ee0c5) SHA1(3ec3056b7fabe07ef49a9179114aa74be44a943e) ) /* tms2516 */
1288 ROM_LOAD( "ii-2.e4", 0x0800, 0x0800, CRC(ed3cf8f7) SHA1(6ba1d98d82400519e844b950cb2fb1274c06d89a) ) /* tms2516; has an & stamped on the chip */
1289 ROM_LOAD( "ii-3.e5", 0x1000, 0x0800, CRC(6a111e5e) SHA1(593be409bc969cece2ff88623e53c166b4dc43cd) ) /* tms2516 */
1290 ROM_LOAD( "ii-4.e6", 0x1800, 0x0800, CRC(c9b5ca2a) SHA1(3384b98954b6bc9a64e753b95757f61ce1d3c52e) ) /* tms2516 */
1291 ROM_LOAD( "ii-5.e7", 0x2000, 0x0800, CRC(43666d68) SHA1(e44492360a77d93aeaaaa0f38f4ac19732998559) ) /* tms2516; has an & stamped on the chip */
1292
1293 ROM_REGION( 0x1000, "gfx1", 0 ) /* sprites */
1294 ROM_LOAD( "ii-7.n2", 0x0000, 0x0800, CRC(aa6c6079) SHA1(af4ab73e9e1c189290b26bf42adb511d5a347df9) ) // verify marking
1295 ROM_LOAD( "ii-6.n1", 0x0800, 0x0800, CRC(431e866c) SHA1(b007cd3cc856360a0247bd78bb49d173f5cef321) ) // verify marking
1296
1297 ROM_REGION( 0x0020, "proms", 0 )
1298 ROM_LOAD( "u7910.d9", 0x0000, 0x0020, CRC(dfb60f19) SHA1(d510327ff3492f098659c551f7245835f61a2959) ) // verify marking
1299
1300 ROM_REGION( 0x0400, "user1", 0 ) /* color map */
1301 ROM_LOAD( "9.e2", 0x0000, 0x0400, CRC(ea4ee931) SHA1(d0a4afda4b493efb40286c2d67bf56a2a8b8da9d) ) /* 2708 */
1302
1303 ROM_REGION( 0x0400, "user2", 0 ) /* starfield generator */
1304 ROM_LOAD( "8.k3", 0x0000, 0x0400, CRC(acbd4e98) SHA1(d33fe8bdc77bb18a3ffb369ea692210d1b890771) ) // verify marking
1305 ROM_END
1306
1307 ROM_START( cosmica2 ) /* this set appears to be an intermediate version between the 'II' (cosmica) version and the early cosmica1 version; It still has the (C) 1979 titlescreen (which was removed on the II version since it may have came out in 1980?), and on all tms2708 eproms on a special rom daughterboard called "7910-V3"; one possible reason is that 2708 eproms became cheaper than tms2516s for a time, so production was switched to them for a while between the early and II versions? */
1308 /* roms a-1 and b-2 match ii-1 from cosmica
1309 * roms c-3 and d-4 are unique
1310 * roms e-5 and f-6 match ii-3 from cosmica
1311 * rom g-7 probably SHOULD match first half of ii-4 from cosmica (and the current 'bad dump' g-7 rom does) but the sum16 from mameinfo doesn't match. since the game works fine I (LN) suspect the sum on mameinfo was wrong.
1312 * rom h-8 matches 2nd half of ii-4 from cosmica
1313 * roms i-9 and j-0 are unique
1314 */
1315 ROM_REGION( 0x10000, "maincpu", 0 ) /* all located on 7910-V3 sub pcb */
1316 ROM_LOAD( "a-1.e2", 0x0000, 0x0400, CRC(8a401b22) SHA1(9518fdbc09e935ede72af201028d80d09062a48d) ) /* tms2708 - sum16 6dd8 */
1317 ROM_LOAD( "b-2.d3", 0x0400, 0x0400, CRC(c8bf86b1) SHA1(324ce057ae9f152c7915d3af7837b09c8d48dec1) ) /* tms2708 - sum16 2fc0 */
1318 ROM_LOAD( "c-3.e3", 0x0800, 0x0400, CRC(699c849e) SHA1(90a58ab8ede9c31eec3df1f8f251b59858f85eb6) ) /* tms2708 - sum16 4767 */
1319 ROM_LOAD( "d-4.d4", 0x0c00, 0x0400, CRC(168e38da) SHA1(63c5f8346861aa7c70ad58a05977c7af413cbfaf) ) /* tms2708 - sum16 9148 */
1320 ROM_LOAD( "e-5.e4", 0x1000, 0x0400, CRC(80cc1fb8) SHA1(a301b236e372574ad3790aef72957cea249f18dc) ) /* tms2708 - sum16 afe2 */
1321 ROM_LOAD( "f-6.d5", 0x1400, 0x0400, CRC(0dc464f7) SHA1(9ad68fd100bd3021202c3831477c8715b4b8f6b8) ) /* tms2708 - sum16 b403 */
1322 ROM_LOAD( "g-7.e5", 0x1800, 0x0400, BAD_DUMP CRC(d5381c54) SHA1(57c170d02aa6d41f7cd4542e084af95ba3fcff7d) ) /* tms2708 - bad? sum16 should be d1aa according to mameinfo; is afda, but works fine... */
1323 ROM_LOAD( "h-8.d6", 0x1c00, 0x0400, CRC(2175fe6f) SHA1(930c70f5d1509f82581bbf760033eb97c34cfce6) ) /* tms2708 - sum16 a096 */
1324 ROM_LOAD( "i-9.e6", 0x2000, 0x0400, CRC(3bb57720) SHA1(2d1edcad57767a4fa2c7713726ed0cb1203f6fbc) ) /* tms2708 - sum16 9b55 */
1325 ROM_LOAD( "j-0.d7", 0x2400, 0x0400, CRC(4ff70f45) SHA1(791499be62a7b91bde75e7a7ab6c546f5fb63027) ) /* tms2708 - sum16 7c3c */
1326
1327 ROM_REGION( 0x1000, "gfx1", 0 ) /* sprites, on mainboard (note: the locations of these two MIGHT be switched around) */
1328 ROM_LOAD( "k-8.n2", 0x0000, 0x0800, CRC(aa6c6079) SHA1(af4ab73e9e1c189290b26bf42adb511d5a347df9) ) /* Fujitsu MB8516 - sum16 4d9c */
1329 ROM_LOAD( "l-7.n1", 0x0800, 0x0800, CRC(431e866c) SHA1(b007cd3cc856360a0247bd78bb49d173f5cef321) ) /* Fujitsu MB8516 - sum16 bb6b */
1330
1331 ROM_REGION( 0x0020, "proms", 0 )/* on mainboard */
1332 ROM_LOAD( "u7910.d9", 0x0000, 0x0020, CRC(dfb60f19) SHA1(d510327ff3492f098659c551f7245835f61a2959) ) /* MMI 6331-1 - sum16 0706 */
1333
1334 ROM_REGION( 0x0400, "user1", 0 ) /* color map, on mainboard */
1335 ROM_LOAD( "9-9.e2", 0x0000, 0x0400, CRC(ea4ee931) SHA1(d0a4afda4b493efb40286c2d67bf56a2a8b8da9d) ) /* tms2708 - sum16 9027 */
1336
1337 ROM_REGION( 0x0400, "user2", 0 ) /* starfield generator */
1338 ROM_LOAD( "8-8.k3", 0x0000, 0x0400, CRC(acbd4e98) SHA1(d33fe8bdc77bb18a3ffb369ea692210d1b890771) ) /* tms2708; located on 7910-BII subpcb, sum16 97c8 */
1339 ROM_END
1340
1341 ROM_START( cosmica1 ) /* earlier 7910-A pcb, had lots of rework; roms do NOT have 'II' markings stamped on them as on the cosmica set */
1342 ROM_REGION( 0x10000, "maincpu", 0 )
1343 ROM_LOAD( "1.e3", 0x0000, 0x0800, CRC(2e44f50e) SHA1(9d87c519a498c47296aa02453806fba95fc4c455) ) /* tms2516 */
1344 ROM_LOAD( "2.e4", 0x0800, 0x0800, CRC(9e5c5281) SHA1(eaf9ca2a37196df758453a73ee145c83e0e3c476) ) /* tms2516; has an & stamped on the chip */
1345 ROM_LOAD( "3.e5", 0x1000, 0x0800, CRC(9e1309db) SHA1(1afbaa8da68abc90bf6f4acd9df9e4d3610f10ce) ) /* tms2516 */
1346 ROM_LOAD( "4.e6", 0x1800, 0x0800, CRC(ba4a9295) SHA1(c7ed9daf48e01ef87253addb0a7e5c62fa1f37cd) ) /* tms2516 */
1347 ROM_LOAD( "5.e7", 0x2000, 0x0800, CRC(2106c82a) SHA1(fa807cf0321813e20dc2d2f2a8ae3778496fa97c) ) /* tms2516; has an & stamped on the chip */
1348
1349 ROM_REGION( 0x1000, "gfx1", 0 ) /* sprites */
1350 ROM_LOAD( "7.n2", 0x0000, 0x0800, CRC(ee3e86fc) SHA1(4fb5fbee06b2d590a83519761f63ec9d6b90efb3) ) /* tms2516 */
1351 ROM_LOAD( "6.n1", 0x0800, 0x0800, CRC(81c86ca0) SHA1(4cea1a61523ae1c3c681b1102b8e18ab26d0040a) ) /* tms2516 */
1352
1353 ROM_REGION( 0x0020, "proms", 0 )
1354 ROM_LOAD( "u7910.d9", 0x0000, 0x0020, CRC(dfb60f19) SHA1(d510327ff3492f098659c551f7245835f61a2959) ) /* MMI 6331 */
1355
1356 ROM_REGION( 0x0400, "user1", 0 ) /* color map */
1357 ROM_LOAD( "9.e2", 0x0000, 0x0400, CRC(ea4ee931) SHA1(d0a4afda4b493efb40286c2d67bf56a2a8b8da9d) ) /* 2708 */
1358
1359 ROM_REGION( 0x0400, "user2", 0 ) /* starfield generator */
1360 ROM_LOAD( "8.k3", 0x0000, 0x0400, CRC(acbd4e98) SHA1(d33fe8bdc77bb18a3ffb369ea692210d1b890771) ) /* 2708; located on sub pcb */
1361 ROM_END
1362
1363 ROM_START( cosmica3 ) // main: 7910-AII sub: 7910-BII sound: 7910-S
1364 ROM_REGION( 0x10000, "maincpu", 0 )
1365 ROM_LOAD( "1.e3", 0x0000, 0x0800, CRC(535ee0c5) SHA1(3ec3056b7fabe07ef49a9179114aa74be44a943e) )
1366 ROM_LOAD( "2-ii-2.e4", 0x0800, 0x0800, CRC(6c9907e8) SHA1(699369b2116c24a41de48c737aa9adc67cbb25cd) ) // has an & stamped on the chip
1367 ROM_LOAD( "3-ii-3.e5", 0x1000, 0x0800, CRC(c7205278) SHA1(439da2d8f591378c323b7ace273fd2da90b80076) ) // has an & stamped on the chip
1368 ROM_LOAD( "4-ii-4.e6", 0x1800, 0x0800, CRC(c7765ecd) SHA1(fa793510560bc50d5ddbdec44651b76f5a22003f) ) // has an & stamped on the chip
1369 ROM_LOAD( "5-ii-5.e7", 0x2000, 0x0800, CRC(5f60242f) SHA1(d5dad3b2b8508dc272567bd091bcbb53fe9b2cc6) ) // has an & stamped on the chip
1370
1371 ROM_REGION( 0x1000, "gfx1", 0 ) // sprites
1372 ROM_LOAD( "7.n2", 0x0000, 0x0800, CRC(aa6c6079) SHA1(af4ab73e9e1c189290b26bf42adb511d5a347df9) )
1373 ROM_LOAD( "6.n1", 0x0800, 0x0800, CRC(431e866c) SHA1(b007cd3cc856360a0247bd78bb49d173f5cef321) )
1374
1375 ROM_REGION( 0x0020, "proms", 0 )
1376 ROM_LOAD( "u7910.d9", 0x0000, 0x0020, BAD_DUMP CRC(dfb60f19) SHA1(d510327ff3492f098659c551f7245835f61a2959) ) // not dumped for this set, probably matches the other
1377
1378 ROM_REGION( 0x0400, "user1", 0 ) // color map
1379 ROM_LOAD( "9-9.e2", 0x0000, 0x0400, CRC(ea4ee931) SHA1(d0a4afda4b493efb40286c2d67bf56a2a8b8da9d) )
1380
1381 ROM_REGION( 0x0400, "user2", 0 ) // starfield generator
1382 ROM_LOAD( "8-8.ic10", 0x0000, 0x0400, CRC(acbd4e98) SHA1(d33fe8bdc77bb18a3ffb369ea692210d1b890771) )
1383 ROM_END
1384
1385 ROM_START( cosmicg )
1386 ROM_REGION( 0x10000, "maincpu", 0 ) /* 8k for code */
1387 ROM_LOAD( "cosmicg1.bin", 0x0000, 0x0400, CRC(e1b9f894) SHA1(bab7fd9b3db145a889542653191905b6efc5ce75) )
1388 ROM_LOAD( "cosmicg2.bin", 0x0400, 0x0400, CRC(35c75346) SHA1(4e50eaa0b50ab04802dc63992ad2600c227301ad) )
1389 ROM_LOAD( "cosmicg3.bin", 0x0800, 0x0400, CRC(82a49b48) SHA1(4cf9f684f3eb18b99a88ca879bb7083b1334f0cc) )
1390 ROM_LOAD( "cosmicg4.bin", 0x0c00, 0x0400, CRC(1c1c934c) SHA1(011b2b3ec4d31869fda13a3654c7bc51f3ce4dc2) )
1391 ROM_LOAD( "cosmicg5.bin", 0x1000, 0x0400, CRC(b1c00fbf) SHA1(136267f75e2d5b445695cabef4538f986e6f1b10) )
1392 ROM_LOAD( "cosmicg6.bin", 0x1400, 0x0400, CRC(f03454ce) SHA1(32c87f369475c7154fe3243d2c7be4a25444e530) )
1393 ROM_LOAD( "cosmicg7.bin", 0x1800, 0x0400, CRC(f33ebae7) SHA1(915bca53d5356e12c94ec765103ceced7306d1dd) )
1394 ROM_LOAD( "cosmicg8.bin", 0x1c00, 0x0400, CRC(472e4990) SHA1(d5797b9d89446aa6533f7515e6a5fc8368d82f91) )
1395
1396 ROM_REGION( 0x0400, "user1", 0 ) /* color map */
1397 ROM_LOAD( "cosmicg9.bin", 0x0000, 0x0400, CRC(689c2c96) SHA1(ddfdc3fd29c56fdebd3b1c3443a7c39f567d5355) )
1398 ROM_END
1399
1400
1401 ROM_START( cosmicgi )
1402 ROM_REGION( 0x10000, "maincpu", 0 ) /* 8k for code */
1403 ROM_LOAD( "1g118.2h", 0x0000, 0x0400, CRC(4bda1711) SHA1(746fd15dbe08c9e2af74547c19a55a84f7b65303) )
1404 ROM_LOAD( "2g118.3h", 0x0400, 0x0400, CRC(3c10b2ba) SHA1(127a950d90420417a91aa3c8fabec7d7e7d526f5) )
1405 ROM_LOAD( "3.4h", 0x0800, 0x0400, CRC(82a49b48) SHA1(4cf9f684f3eb18b99a88ca879bb7083b1334f0cc) )
1406 ROM_LOAD( "4g118.5h", 0x0c00, 0x0400, CRC(42bb0611) SHA1(3894e4372f1443402ea7145b1101e1219fe2cde2) ) // changes in here cause trails when you move the ship, PCB does the same and ROM gives the same read every time, possible a bit has been flipped tho. check
1407 ROM_LOAD( "5.6h", 0x1000, 0x0400, CRC(b1c00fbf) SHA1(136267f75e2d5b445695cabef4538f986e6f1b10) )
1408 ROM_LOAD( "6.7h", 0x1400, 0x0400, CRC(f03454ce) SHA1(32c87f369475c7154fe3243d2c7be4a25444e530) )
1409 ROM_LOAD( "7.8h", 0x1800, 0x0400, CRC(84656c97) SHA1(2180faa07dd5bc618c80ae033babfc1191a0b890) ) // standard label but different anyway?
1410 ROM_LOAD( "8g128.9h", 0x1c00, 0x0400, CRC(7f48307c) SHA1(5929c131d790b0c8f9113730715531809c6840e2) )
1411
1412 ROM_REGION( 0x0400, "user1", 0 ) /* color map */ // population of this is optional, board runs as b&w without (this board didn't have it populated)
1413 ROM_LOAD( "cosmicg9.bin", 0x0000, 0x0400, CRC(689c2c96) SHA1(ddfdc3fd29c56fdebd3b1c3443a7c39f567d5355) )
1414 ROM_END
1415
1416
1417 /* rom 9 not dumped according to readme? */
1418 ROM_START( magspot )
1419 ROM_REGION( 0x10000, "maincpu", 0 )
1420 ROM_LOAD( "ms1.bin", 0x0000, 0x0800, CRC(59e9019d) SHA1(3c64ae956ec4eed988018b89c986ad8f6f065fe0) )
1421 ROM_LOAD( "ms2.bin", 0x0800, 0x0800, CRC(98b913b1) SHA1(2ce86f5069e2664e2ea44bda567ca26432fd59f7) )
1422 ROM_LOAD( "ms3.bin", 0x1000, 0x0800, CRC(ea58c124) SHA1(7551c14ed9563e3aed7220cc03f7bca4029b3a4e) )
1423 ROM_LOAD( "ms5.bin", 0x1800, 0x0800, CRC(4302a658) SHA1(9590be8db27b7122c87cfb27f8e09c2ecbf6fbd0) )
1424 ROM_LOAD( "ms4.bin", 0x2000, 0x0800, CRC(088582ab) SHA1(ad2d86184b4a6ee74464d1df40f4e841434c46c8) )
1425 ROM_LOAD( "ms6.bin", 0x2800, 0x0800, CRC(e6bf492c) SHA1(ada3a33c54b6c02f3fb9590181fceefafdc429bc) )
1426
1427 ROM_REGION( 0x1000, "gfx1", 0 ) /* sprites */
1428 ROM_LOAD( "ms8.bin", 0x0000, 0x0800, CRC(9e1d63a2) SHA1(d8642e515871da44880e105e6891c4b25222744f) )
1429 ROM_LOAD( "ms7.bin", 0x0800, 0x0800, CRC(1ab338d3) SHA1(4e3bf93f94119fd10c40953245cec735db8417fb) )
1430
1431 ROM_REGION( 0x0020, "proms", 0 )
1432 ROM_LOAD( "ms.d9", 0x0000, 0x0020, CRC(36e2aa2a) SHA1(4813b013cb8260157858e3adc7323efc6654e170) )
1433
1434 ROM_REGION( 0x0400, "user1", 0 ) /* color map */
1435 ROM_LOAD( "ms.e2", 0x0000, 0x0400, CRC(89f23ebd) SHA1(a56bda82f8be8e541a50d2a411ada89a6d9c0373) )
1436 ROM_END
1437
1438 ROM_START( magspot2 )
1439 ROM_REGION( 0x10000, "maincpu", 0 )
1440 ROM_LOAD( "ms.e3", 0x0000, 0x0800, CRC(c0085ade) SHA1(ab60ba7c0e45ea2576d935135e930e2fdf165867) )
1441 ROM_LOAD( "ms.e4", 0x0800, 0x0800, CRC(d534a68b) SHA1(fd3b5e619b22a8c53e3c6f5f5351068a3f26eb61) )
1442 ROM_LOAD( "ms.e5", 0x1000, 0x0800, CRC(25513b2a) SHA1(c7f3d9a53cb7e7cf523ff710c333dbc744088e31) )
1443 ROM_LOAD( "ms.e7", 0x1800, 0x0800, CRC(8836bbc4) SHA1(9da6c1b4e9a446108bc324e7fc280bfaeaf50504) )
1444 ROM_LOAD( "ms.e6", 0x2000, 0x0800, CRC(6a08ab94) SHA1(5d9272a5304546cef6668c975e815f6750bcfa15) )
1445 ROM_LOAD( "ms.e8", 0x2800, 0x0800, CRC(77c6d109) SHA1(bb265bd56d4d597d2ef75d169d5d30db1499e3be) )
1446
1447 ROM_REGION( 0x1000, "gfx1", 0 ) /* sprites */
1448 ROM_LOAD( "ms.n2", 0x0000, 0x0800, CRC(9e1d63a2) SHA1(d8642e515871da44880e105e6891c4b25222744f) )
1449 ROM_LOAD( "ms.n1", 0x0800, 0x0800, CRC(1ab338d3) SHA1(4e3bf93f94119fd10c40953245cec735db8417fb) )
1450
1451 ROM_REGION( 0x0020, "proms", 0 )
1452 ROM_LOAD( "ms.d9", 0x0000, 0x0020, CRC(36e2aa2a) SHA1(4813b013cb8260157858e3adc7323efc6654e170) )
1453
1454 ROM_REGION( 0x0400, "user1", 0 ) /* color map */
1455 ROM_LOAD( "ms.e2", 0x0000, 0x0400, CRC(89f23ebd) SHA1(a56bda82f8be8e541a50d2a411ada89a6d9c0373) )
1456 ROM_END
1457
1458 ROM_START( devzone )
1459 ROM_REGION( 0x10000, "maincpu", 0 ) /* all 2716 */
1460 ROM_LOAD( "dv1.e3", 0x0000, 0x0800, CRC(c70faf00) SHA1(d3f0f071e6c7552724eba64a7182637dae4438c7) )
1461 ROM_LOAD( "dv2.e4", 0x0800, 0x0800, CRC(eacfed61) SHA1(493c0d21fd1574b12978dd1f52e8735df6c1732c) )
1462 ROM_LOAD( "dv3.e5", 0x1000, 0x0800, CRC(7973317e) SHA1(d236e3dad8c991c32a2550e561518b522a4580bc) )
1463 ROM_LOAD( "dv5.e7", 0x1800, 0x0800, CRC(b71a3989) SHA1(aad14021ee569e221ea632416d6a006e60dd94e5) )
1464 ROM_LOAD( "dv4.e6", 0x2000, 0x0800, CRC(a58c5b8c) SHA1(7ff08007aedd2ff1d7ef64263da92a5b77ae2dc4) )
1465 ROM_LOAD( "dv6.e8", 0x2800, 0x0800, CRC(3930fb67) SHA1(919883e833d6caa8fe7c3ceaa184575a3b4932b6) )
1466
1467 ROM_REGION( 0x1000, "gfx1", 0 ) /* sprites, all 2716 */
1468 ROM_LOAD( "dv8.n2", 0x0000, 0x0800, CRC(da1cbec1) SHA1(08a668f19c68335f4fc9f98cd53b44047dd8aad9) )
1469 ROM_LOAD( "dv7.n1", 0x0800, 0x0800, CRC(e7562fcf) SHA1(0a0833dbb8d4be69fbf8897aa3e045a87ae42024) )
1470
1471 ROM_REGION( 0x0020, "proms", 0 )
1472 ROM_LOAD( "m13.d9", 0x0000, 0x0020, CRC(36e2aa2a) SHA1(4813b013cb8260157858e3adc7323efc6654e170) ) // 82S123
1473
1474 ROM_REGION( 0x0400, "user1", 0 ) /* color map */
1475 ROM_LOAD( "db9.e2", 0x0000, 0x0400, CRC(693855b6) SHA1(1c29d72be511c1d38b30b9534d647d0813b2ef57) ) // 2708
1476
1477 ROM_REGION( 0x0800, "user2", 0 ) /* grid horizontal line positions */
1478 ROM_LOAD( "dv9.ic12", 0x0000, 0x0800, CRC(f61c1c45) SHA1(9016710409ae2bccfc60f8e3d1131c125333c034) ) // 2716
1479
1480 ROM_REGION( 0x0020, "user3", 0 ) /* grid vertical line positions */
1481 ROM_LOAD( "22.ic1", 0x0000, 0x0020, CRC(df974878) SHA1(2ef2e1b771923f9a0bfe1841444de61200298605) ) // 82S123
1482 ROM_END
1483
1484 ROM_START( devzone2 )
1485 ROM_REGION( 0x10000, "maincpu", 0 )
1486 ROM_LOAD( "p10_1.e3", 0x0000, 0x0800, BAD_DUMP CRC(38bd45a4) SHA1(192eee64ff53c20fb5b369703b52a5bb3976ba1d) )
1487 ROM_LOAD( "my4_2.e4", 0x0800, 0x0800, BAD_DUMP CRC(e1637800) SHA1(3705ce1f02f3fefec0285f5db6a7606e6cec1bac) )
1488 ROM_LOAD( "ms6_3.e5", 0x1000, 0x0800, BAD_DUMP CRC(c1952e2f) SHA1(d42f0f547e989a71254957e5e634ac359e72bb14) )
1489 ROM_LOAD( "mx6_5.e7", 0x1800, 0x0800, BAD_DUMP CRC(c5394215) SHA1(8c970f6a8d34963bc4848f2bef90cee850c9c28d) )
1490 ROM_LOAD( "my1_4.e6", 0x2000, 0x0800, BAD_DUMP CRC(5d965d93) SHA1(49fe79e4b5cec1c7aa2f8e1eb750b39bb7dda16c) )
1491 ROM_LOAD( "mz7_6.e8", 0x2800, 0x0800, BAD_DUMP CRC(8504e8c9) SHA1(40e08ff38673544c734a9fc19b38edaa8cc74f23) )
1492
1493 ROM_REGION( 0x1000, "gfx1", 0 ) /* sprites */
1494 ROM_LOAD( "my8_8.n2", 0x0000, 0x0800, CRC(18abce02) SHA1(5cac11f4e6f1a4801bd02007399a906cdff66b85) )
1495 ROM_LOAD( "mx3_7.n1", 0x0800, 0x0800, CRC(c089c9e3) SHA1(2fb725338a19d5d4f9e445e7d46d105b8db9733c) )
1496
1497 ROM_REGION( 0x0020, "proms", 0 )
1498 ROM_LOAD( "ms.d9", 0x0000, 0x0020, CRC(36e2aa2a) SHA1(4813b013cb8260157858e3adc7323efc6654e170) )
1499
1500 ROM_REGION( 0x0400, "user1", 0 ) /* color map */
1501 ROM_LOAD( "dz9.e2", 0x0000, 0x0400, CRC(693855b6) SHA1(1c29d72be511c1d38b30b9534d647d0813b2ef57) )
1502
1503 ROM_REGION( 0x0800, "user2", 0 ) /* grid horizontal line positions */
1504 ROM_LOAD( "ic12.sub", 0x0000, 0x0800, CRC(f61c1c45) SHA1(9016710409ae2bccfc60f8e3d1131c125333c034) )
1505
1506 ROM_REGION( 0x0020, "user3", 0 ) /* grid vertical line positions */
1507 ROM_LOAD( "ic1.sub", 0x0000, 0x0020, CRC(df974878) SHA1(2ef2e1b771923f9a0bfe1841444de61200298605) )
1508 ROM_END
1509
1510 ROM_START( nomnlnd )
1511 ROM_REGION( 0x10000, "maincpu", 0 )
1512 ROM_LOAD( "1.bin", 0x0000, 0x0800, CRC(ba117ba6) SHA1(7399e7ac8a585ed6502ea0d740850b1ed2dc5bcd) )
1513 ROM_LOAD( "2.bin", 0x0800, 0x0800, CRC(e5ed654f) SHA1(c26dc12ade6dc63392945ec0caca229d936f7f89) )
1514 ROM_LOAD( "3.bin", 0x1000, 0x0800, CRC(7fc42724) SHA1(0f8fdfad0a2557b9dd99ae3890c37bbc5c59bc89) )
1515 ROM_LOAD( "5.bin", 0x1800, 0x0800, CRC(9cc2f1d9) SHA1(453c67b613550c84364f445705019188bb580d64) )
1516 ROM_LOAD( "4.bin", 0x2000, 0x0800, CRC(0e8cd46a) SHA1(14cf9017e408b862a4ed63bb8acd37064b3919a8) )
1517 ROM_LOAD( "6.bin", 0x2800, 0x0800, CRC(ba472ba5) SHA1(49be1500b3805a19c7210e53ad5c2c4a5876bf4e) )
1518
1519 ROM_REGION( 0x1000, "gfx1", 0 ) /* sprites */
1520 ROM_LOAD( "nml8.n2", 0x0000, 0x0800, CRC(739009b4) SHA1(bbabd6ce7b1ded025f20120adaebdb97fb755ef0) )
1521 ROM_LOAD( "nml7.n1", 0x0800, 0x0800, CRC(d08ed22f) SHA1(33f450b6f63110bf804105280dc679f1591422f6) )
1522
1523 ROM_REGION( 0x0020, "proms", 0 )
1524 ROM_LOAD( "nml.d9", 0x0000, 0x0020, CRC(65e911f9) SHA1(6420a03195f63edeed17cc3a235e46e3f88d2037) )
1525
1526 ROM_REGION( 0x0400, "user1", 0 ) /* color map */
1527 ROM_LOAD( "nl9.e2", 0x0000, 0x0400, CRC(9e05f14e) SHA1(76fc0b2b12cc9a0a64b539d2e75edefdb4a2ae61) )
1528
1529 ROM_REGION( 0x0800, "user2", 0 ) /* tree + river */
1530 ROM_LOAD( "nl10.ic4", 0x0000, 0x0400, CRC(5b13f64e) SHA1(b04d2423fb443d46fff69c031b0312d956a5b789) )
1531 ROM_LOAD( "nl11.ic7", 0x0400, 0x0400, CRC(e717b241) SHA1(6d234a75514e22d484dc027db5bb85cf8b58f4f2) )
1532 ROM_END
1533
1534 ROM_START( nomnlndg )
1535 ROM_REGION( 0x10000, "maincpu", 0 )
1536 ROM_LOAD( "nml1.e3", 0x0000, 0x0800, CRC(e212ed91) SHA1(135c20fc97790769d5e1619d7ac844a1d3f6aace) )
1537 ROM_LOAD( "nml2.e4", 0x0800, 0x0800, CRC(f66ef3d8) SHA1(c42a325dd952cda074ef2857e7fa5154f0b7c7ce) )
1538 ROM_LOAD( "nml3.e5", 0x1000, 0x0800, CRC(d422fc8a) SHA1(18cafc462ce0800fea2af277439827dc1f4fc91b) )
1539 ROM_LOAD( "nml5.e7", 0x1800, 0x0800, CRC(d58952ac) SHA1(1c82a49cc1f0203e6436c5292ebd6e9004bd6a84) )
1540 ROM_LOAD( "nml4.e6", 0x2000, 0x0800, CRC(994c9afb) SHA1(c8e6af30d9b2cb5ca52fa325c6ac9a41413d067c) )
1541 ROM_LOAD( "nml6.e8", 0x2800, 0x0800, CRC(01ed2d8c) SHA1(bfa31e9100a1f9276c521ed8699e1cb0d067e0fa) )
1542
1543 ROM_REGION( 0x1000, "gfx1", 0 ) /* sprites */
1544 ROM_LOAD( "nml8.n2", 0x0000, 0x0800, CRC(739009b4) SHA1(bbabd6ce7b1ded025f20120adaebdb97fb755ef0) )
1545 ROM_LOAD( "nml7.n1", 0x0800, 0x0800, CRC(d08ed22f) SHA1(33f450b6f63110bf804105280dc679f1591422f6) )
1546
1547 ROM_REGION( 0x0020, "proms", 0 )
1548 ROM_LOAD( "nml.d9", 0x0000, 0x0020, CRC(65e911f9) SHA1(6420a03195f63edeed17cc3a235e46e3f88d2037) )
1549
1550 ROM_REGION( 0x0400, "user1", 0 ) /* color map */
1551 ROM_LOAD( "nl9.e2", 0x0000, 0x0400, CRC(9e05f14e) SHA1(76fc0b2b12cc9a0a64b539d2e75edefdb4a2ae61) )
1552
1553 ROM_REGION( 0x0800, "user2", 0 ) /* tree + river */
1554 ROM_LOAD( "nl10.ic4", 0x0000, 0x0400, CRC(5b13f64e) SHA1(b04d2423fb443d46fff69c031b0312d956a5b789) )
1555 ROM_LOAD( "nl11.ic7", 0x0400, 0x0400, CRC(e717b241) SHA1(6d234a75514e22d484dc027db5bb85cf8b58f4f2) )
1556 ROM_END
1557
1558
1559 void cosmic_state::init_cosmicg()
1560 {
1561 /* Program ROMs have data pins connected different from normal */
1562 offs_t len = memregion("maincpu")->bytes();
1563 uint8_t *rom = memregion("maincpu")->base();
1564 for (offs_t offs = 0; offs < len; offs++)
1565 {
1566 uint8_t scrambled = rom[offs];
1567
1568 uint8_t normal = (scrambled >> 3 & 0x11)
1569 | (scrambled >> 1 & 0x22)
1570 | (scrambled << 1 & 0x44)
1571 | (scrambled << 3 & 0x88);
1572
1573 rom[offs] = normal;
1574 }
1575
1576 m_sound_enabled = 0;
1577 m_march_select = 0;
1578 m_gun_die_select = 0;
1579 }
1580
1581
init_cosmica()1582 void cosmic_state::init_cosmica()
1583 {
1584 m_sound_enabled = 1;
1585 m_dive_bomb_b_select = 0;
1586 }
1587
1588
init_devzone()1589 void cosmic_state::init_devzone()
1590 {
1591 m_maincpu->space(AS_PROGRAM).install_write_handler(0x4807, 0x4807, write8smo_delegate(*this, FUNC(cosmic_state::cosmic_background_enable_w)));
1592 }
1593
1594
init_nomnlnd()1595 void cosmic_state::init_nomnlnd()
1596 {
1597 m_maincpu->space(AS_PROGRAM).install_read_handler(0x5000, 0x5001, read8sm_delegate(*this, FUNC(cosmic_state::nomnlnd_port_0_1_r)));
1598 m_maincpu->space(AS_PROGRAM).nop_write(0x4800, 0x4800);
1599 m_maincpu->space(AS_PROGRAM).install_write_handler(0x4807, 0x4807, write8smo_delegate(*this, FUNC(cosmic_state::cosmic_background_enable_w)));
1600 m_maincpu->space(AS_PROGRAM).install_write_handler(0x480a, 0x480a, write8smo_delegate(*this, FUNC(cosmic_state::dac_w)));
1601 }
1602
init_panic()1603 void cosmic_state::init_panic()
1604 {
1605 m_sound_enabled = 1;
1606 }
1607
1608
1609 GAME( 1979, cosmicg, 0, cosmicg, cosmicg, cosmic_state, init_cosmicg, ROT270, "Universal", "Cosmic Guerilla", MACHINE_IMPERFECT_SOUND | MACHINE_NO_COCKTAIL /*| MACHINE_SUPPORTS_SAVE */)
1610 GAME( 1979, cosmicgi, cosmicg, cosmicg, cosmicg, cosmic_state, init_cosmicg, ROT270, "bootleg (Inder)", "Cosmic Guerilla (Spanish bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_NO_COCKTAIL /*| MACHINE_SUPPORTS_SAVE */)
1611 GAME( 1979, cosmica, 0, cosmica, cosmica, cosmic_state, init_cosmica, ROT270, "Universal", "Cosmic Alien (version II, set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1612 GAME( 1979, cosmica3, cosmica, cosmica, cosmica, cosmic_state, init_cosmica, ROT270, "Universal", "Cosmic Alien (version II, set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1613 GAME( 1979, cosmica1, cosmica, cosmica, cosmica, cosmic_state, init_cosmica, ROT270, "Universal", "Cosmic Alien (first version)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1614 GAME( 1979, cosmica2, cosmica, cosmica, cosmica, cosmic_state, init_cosmica, ROT270, "Universal", "Cosmic Alien (early version II?)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1615 GAME( 1980, nomnlnd, 0, nomnlnd, nomnlnd, cosmic_state, init_nomnlnd, ROT270, "Universal", "No Man's Land", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1616 GAME( 1980, nomnlndg, nomnlnd, nomnlnd, nomnlndg, cosmic_state, init_nomnlnd, ROT270, "Universal (Gottlieb license)", "No Man's Land (Gottlieb)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1617 GAME( 1980, magspot, 0, magspot, magspot, cosmic_state, empty_init, ROT270, "Universal", "Magical Spot", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1618 GAME( 1980, magspot2, 0, magspot, magspot, cosmic_state, empty_init, ROT270, "Universal", "Magical Spot II", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1619 GAME( 1980, panic, 0, panic, panic, cosmic_state, init_panic, ROT270, "Universal", "Space Panic (version E)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1620 GAME( 1980, panic2, panic, panic, panic, cosmic_state, init_panic, ROT270, "Universal", "Space Panic (set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1621 GAME( 1980, panic3, panic, panic, panic, cosmic_state, init_panic, ROT270, "Universal", "Space Panic (set 3)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1622 GAME( 1980, panich, panic, panic, panic, cosmic_state, init_panic, ROT270, "Universal", "Space Panic (harder)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1623 GAME( 1980, panicger, panic, panic, panic, cosmic_state, init_panic, ROT270, "Universal (ADP Automaten license)", "Space Panic (German)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1624 GAME( 1980, devzone, 0, devzone, devzone, cosmic_state, init_devzone, ROT270, "Universal", "Devil Zone", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1625 GAME( 1980, devzone2, devzone, devzone, devzone2, cosmic_state, init_devzone, ROT270, "Universal", "Devil Zone (easier)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
1626