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