1 /***************************************************************************
2 
3 	Atari GT hardware
4 
5 	driver by Aaron Giles
6 
7 	Games supported:
8 		* T-Mek (1994) [2 sets]
9 		* Primal Rage (1994) [2 sets]
10 
11 	Known bugs:
12 		* protection devices unknown
13 
14 ****************************************************************************
15 
16 	Memory map (TBA)
17 
18 ***************************************************************************/
19 
20 
21 #include "driver.h"
22 #include "machine/atarigen.h"
23 #include "vidhrdw/atarirle.h"
24 #include "cpu/m68000/m68000.h"
25 #include "sndhrdw/cage.h"
26 #include "atarigt.h"
27 
28 
29 #define LOG_PROTECTION		(0)
30 #define HACK_TMEK_CONTROLS	(0)
31 
32 
33 
34 /*************************************
35  *
36  *	Statics
37  *
38  *************************************/
39 
40 UINT8 atarigt_is_primrage;
41 
42 static data32_t *	mo_command;
43 
44 static void (*protection_w)(offs_t offset, data16_t data);
45 static void (*protection_r)(offs_t offset, data16_t *data);
46 
47 static void cage_irq_callback(int reason);
48 
49 
50 
51 /*************************************
52  *
53  *	Initialization
54  *
55  *************************************/
56 
update_interrupts(void)57 static void update_interrupts(void)
58 {
59 	int newstate = 0;
60 
61 	if (atarigen_sound_int_state)
62 		newstate = 3;
63 	if (atarigen_video_int_state)
64 		newstate = 4;
65 	if (atarigen_scanline_int_state)
66 		newstate = 6;
67 
68 	if (newstate)
69 		cpu_set_irq_line(0, newstate, ASSERT_LINE);
70 	else
71 		cpu_set_irq_line(0, 7, CLEAR_LINE);
72 }
73 
74 
MACHINE_INIT(atarigt)75 static MACHINE_INIT( atarigt )
76 {
77 	atarigen_eeprom_reset();
78 	atarigen_interrupt_reset(update_interrupts);
79 	atarigen_scanline_timer_reset(atarigt_scanline_update, 8);
80 }
81 
82 
83 
84 /*************************************
85  *
86  *	CAGE sound interrupts
87  *
88  *************************************/
89 
cage_irq_callback(int reason)90 static void cage_irq_callback(int reason)
91 {
92 	if (reason)
93 		atarigen_sound_int_gen();
94 	else
95 		atarigen_sound_int_ack_w(0,0,0);
96 }
97 
98 
99 
100 /*************************************
101  *
102  *	Input ports
103  *
104  *************************************/
105 
READ32_HANDLER(inputs_01_r)106 static READ32_HANDLER( inputs_01_r )
107 {
108 	return (readinputport(0) << 16) | readinputport(1);
109 }
110 
111 
READ32_HANDLER(special_port2_r)112 static READ32_HANDLER( special_port2_r )
113 {
114 	int temp = readinputport(2);
115 	temp ^= 0x0001;		/* /A2DRDY always high for now */
116 	temp ^= 0x0008;		/* A2D.EOC always high for now */
117 	return (temp << 16) | temp;
118 }
119 
120 
READ32_HANDLER(special_port3_r)121 static READ32_HANDLER( special_port3_r )
122 {
123 	int temp = readinputport(3);
124 	if (atarigen_video_int_state) temp ^= 0x0001;
125 	if (atarigen_scanline_int_state) temp ^= 0x0002;
126 	return (temp << 16) | temp;
127 }
128 
129 
130 #if (HACK_TMEK_CONTROLS)
compute_fake_pots(int * pots)131 static INLINE void compute_fake_pots(int *pots)
132 {
133 	int fake = readinputport(4);
134 
135 	pots[0] = pots[1] = pots[2] = pots[3] = 0x80;
136 
137 	if (fake & 0x01)			/* up */
138 	{
139 		if (fake & 0x04)		/* up and left */
140 			pots[3] = 0x00;
141 		else if (fake & 0x08)	/* up and right */
142 			pots[1] = 0x00;
143 		else					/* up only */
144 			pots[1] = pots[3] = 0x00;
145 	}
146 	else if (fake & 0x02)		/* down */
147 	{
148 		if (fake & 0x04)		/* down and left */
149 			pots[3] = 0xff;
150 		else if (fake & 0x08)	/* down and right */
151 			pots[1] = 0xff;
152 		else					/* down only */
153 			pots[1] = pots[3] = 0xff;
154 	}
155 	else if (fake & 0x04)		/* left only */
156 		pots[1] = 0xff, pots[3] = 0x00;
157 	else if (fake & 0x08)		/* right only */
158 		pots[3] = 0xff, pots[1] = 0x00;
159 }
160 #endif
161 
162 
READ32_HANDLER(analog_port0_r)163 static READ32_HANDLER( analog_port0_r )
164 {
165 #if (HACK_TMEK_CONTROLS)
166 	int pots[4];
167 	compute_fake_pots(pots);
168 	return (pots[0] << 24) | (pots[3] << 8);
169 #else
170 	return (readinputport(4) << 24) | (readinputport(5) << 8);
171 #endif
172 }
173 
174 
READ32_HANDLER(analog_port1_r)175 static READ32_HANDLER( analog_port1_r )
176 {
177 #if (HACK_TMEK_CONTROLS)
178 	int pots[4];
179 	compute_fake_pots(pots);
180 	return (pots[2] << 24) | (pots[1] << 8);
181 #else
182 	return (readinputport(6) << 24) | (readinputport(7) << 8);
183 #endif
184 }
185 
186 
187 
188 /*************************************
189  *
190  *	Output ports
191  *
192  *************************************/
193 
WRITE32_HANDLER(latch_w)194 static WRITE32_HANDLER( latch_w )
195 {
196 	/*
197 		D13 = 68.DISA
198 		D12 = ERASE
199 		D11 = /MOGO
200 		D8  = VCR
201 		D5  = /XRESET
202 		D4  = /SNDRES
203 		D3  = CC.L
204 		D0  = CC.R
205 	*/
206 
207 	/* upper byte */
208 	if (!(mem_mask & 0xff000000))
209 	{
210 		/* bits 13-11 are the MO control bits */
211 		atarirle_control_w(0, (data >> 27) & 7);
212 	}
213 
214 	if (!(mem_mask & 0x00ff0000))
215 	{
216 //		cage_reset_w(data & 0x00100000);
217 		coin_counter_w(0, data & 0x00080000);
218 		coin_counter_w(1, data & 0x00010000);
219 	}
220 }
221 
222 
WRITE32_HANDLER(mo_command_w)223 static WRITE32_HANDLER( mo_command_w )
224 {
225 	COMBINE_DATA(mo_command);
226 	if (ACCESSING_LSW32)
227 		atarirle_command_w(0, ((data & 0xffff) == 2) ? ATARIRLE_COMMAND_CHECKSUM : ATARIRLE_COMMAND_DRAW);
228 }
229 
230 
WRITE32_HANDLER(led_w)231 static WRITE32_HANDLER( led_w )
232 {
233 //	logerror("LED = %08X & %08X\n", data, ~mem_mask);
234 }
235 
236 
237 
238 /*************************************
239  *
240  *	Sound I/O
241  *
242  *************************************/
243 
READ32_HANDLER(sound_data_r)244 static READ32_HANDLER( sound_data_r )
245 {
246 	data32_t result = 0;
247 
248 	if (ACCESSING_LSW32)
249 		result |= cage_control_r();
250 	if (ACCESSING_MSW32)
251 		result |= main_from_cage_r() << 16;
252 	return result;
253 }
254 
255 
WRITE32_HANDLER(sound_data_w)256 static WRITE32_HANDLER( sound_data_w )
257 {
258 	if (ACCESSING_LSW32)
259 		cage_control_w(data);
260 	if (ACCESSING_MSW32)
261 		main_to_cage_w(data >> 16);
262 }
263 
264 
265 
266 /*************************************
267  *
268  *	T-Mek protection
269  *
270  *************************************/
271 
272 #define ADDRSEQ_COUNT	4
273 
274 static offs_t protaddr[ADDRSEQ_COUNT];
275 static UINT8 protmode;
276 static UINT16 protresult;
277 static UINT8 protdata[0x800];
278 
279 static UINT8 ignore_writes = 0;
280 
tmek_update_mode(offs_t offset)281 static void tmek_update_mode(offs_t offset)
282 {
283 	int i;
284 
285 	/* pop us into the readseq */
286 	for (i = 0; i < ADDRSEQ_COUNT - 1; i++)
287 		protaddr[i] = protaddr[i + 1];
288 	protaddr[ADDRSEQ_COUNT - 1] = offset;
289 
290 }
291 
292 
tmek_protection_w(offs_t offset,UINT16 data)293 static void tmek_protection_w(offs_t offset, UINT16 data)
294 {
295 #if LOG_PROTECTION
296 	logerror("%06X:Protection W@%06X = %04X\n", activecpu_get_previouspc(), offset, data);
297 #endif
298 
299 	/* track accesses */
300 	tmek_update_mode(offset);
301 
302 	switch (offset)
303 	{
304 		case 0xdb0000:
305 			ignore_writes = (data == 0x18);
306 			break;
307 	}
308 }
309 
tmek_protection_r(offs_t offset,data16_t * data)310 static void tmek_protection_r(offs_t offset, data16_t *data)
311 {
312 #if LOG_PROTECTION
313 	logerror("%06X:Protection R@%06X\n", activecpu_get_previouspc(), offset);
314 #endif
315 
316 	/* track accesses */
317 	tmek_update_mode(offset);
318 
319 	/* handle specific reads */
320 	switch (offset)
321 	{
322 		/* status register; the code spins on this waiting for the high bit to be set */
323 		case 0xdb8700:
324 		case 0xdb87c0:
325 //			if (protmode != 0)
326 			{
327 				*data = -1;//0x8000;
328 			}
329 			break;
330 	}
331 }
332 
333 
334 
335 /*************************************
336  *
337  *	Primal Rage protection
338  *
339  *************************************/
340 
primage_update_mode(offs_t offset)341 static void primage_update_mode(offs_t offset)
342 {
343 	int i;
344 
345 	/* pop us into the readseq */
346 	for (i = 0; i < ADDRSEQ_COUNT - 1; i++)
347 		protaddr[i] = protaddr[i + 1];
348 	protaddr[ADDRSEQ_COUNT - 1] = offset;
349 
350 	/* check for particular sequences */
351 	if (!protmode)
352 	{
353 		/* this is from the code at $20f90 */
354 		if (protaddr[1] == 0xdcc7c4 && protaddr[2] == 0xdcc7c4 && protaddr[3] == 0xdc4010)
355 		{
356 //			logerror("prot:Entering mode 1\n");
357 			protmode = 1;
358 		}
359 
360 		/* this is from the code at $27592 */
361 		if (protaddr[0] == 0xdcc7ca && protaddr[1] == 0xdcc7ca && protaddr[2] == 0xdcc7c6 && protaddr[3] == 0xdc4022)
362 		{
363 //			logerror("prot:Entering mode 2\n");
364 			protmode = 2;
365 		}
366 
367 		/* this is from the code at $3d8dc */
368 		if (protaddr[0] == 0xdcc7c0 && protaddr[1] == 0xdcc7c0 && protaddr[2] == 0xdc80f2 && protaddr[3] == 0xdc7af2)
369 		{
370 //			logerror("prot:Entering mode 3\n");
371 			protmode = 3;
372 		}
373 	}
374 }
375 
376 
377 
primrage_protection_w(offs_t offset,data16_t data)378 static void primrage_protection_w(offs_t offset, data16_t data)
379 {
380 #if LOG_PROTECTION
381 {
382 	UINT32 pc = activecpu_get_previouspc();
383 	switch (pc)
384 	{
385 		/* protection code from 20f90 - 21000 */
386 		case 0x20fba:
387 			if (offset % 16 == 0) logerror("\n   ");
388 			logerror("W@%06X(%04X) ", offset, data);
389 			break;
390 
391 		/* protection code from 27592 - 27664 */
392 		case 0x275f6:
393 			logerror("W@%06X(%04X) ", offset, data);
394 			break;
395 
396 		/* protection code from 3d8dc - 3d95a */
397 		case 0x3d908:
398 		case 0x3d932:
399 		case 0x3d938:
400 		case 0x3d93e:
401 			logerror("W@%06X(%04X) ", offset, data);
402 			break;
403 		case 0x3d944:
404 			logerror("W@%06X(%04X) - done\n", offset, data);
405 			break;
406 
407 		/* protection code from 437fa - 43860 */
408 		case 0x43830:
409 		case 0x43838:
410 			logerror("W@%06X(%04X) ", offset, data);
411 			break;
412 
413 		/* catch anything else */
414 		default:
415 			logerror("%06X:Unknown protection W@%06X = %04X\n", activecpu_get_previouspc(), offset, data);
416 			break;
417 	}
418 }
419 #endif
420 
421 /* mask = 0x78fff */
422 
423 	/* track accesses */
424 	primage_update_mode(offset);
425 
426 	/* check for certain read sequences */
427 	if (protmode == 1 && offset >= 0xdc7800 && offset < 0xdc7800 + sizeof(protdata) * 2)
428 		protdata[(offset - 0xdc7800) / 2] = data;
429 
430 	if (protmode == 2)
431 	{
432 		int temp = (offset - 0xdc7800) / 2;
433 //		logerror("prot:mode 2 param = %04X\n", temp);
434 		protresult = temp * 0x6915 + 0x6915;
435 	}
436 
437 	if (protmode == 3)
438 	{
439 		if (offset == 0xdc4700)
440 		{
441 //			logerror("prot:Clearing mode 3\n");
442 			protmode = 0;
443 		}
444 	}
445 }
446 
447 
448 
primrage_protection_r(offs_t offset,data16_t * data)449 static void primrage_protection_r(offs_t offset, data16_t *data)
450 {
451 	/* track accesses */
452 	primage_update_mode(offset);
453 
454 #if LOG_PROTECTION
455 {
456 	UINT32 pc = activecpu_get_previouspc();
457 	UINT32 p1, p2, a6;
458 	switch (pc)
459 	{
460 		/* protection code from 20f90 - 21000 */
461 		case 0x20f90:
462 			logerror("Known Protection @ 20F90: R@%06X ", offset);
463 			break;
464 		case 0x20f98:
465 		case 0x20fa0:
466 			logerror("R@%06X ", offset);
467 			break;
468 		case 0x20fcc:
469 			logerror("R@%06X - done\n", offset);
470 			break;
471 
472 		/* protection code from 27592 - 27664 */
473 		case 0x275bc:
474 			break;
475 		case 0x275cc:
476 			a6 = activecpu_get_reg(M68K_A6);
477 			p1 = (cpu_readmem24bedw_word(a6+8) << 16) | cpu_readmem24bedw_word(a6+10);
478 			p2 = (cpu_readmem24bedw_word(a6+12) << 16) | cpu_readmem24bedw_word(a6+14);
479 			logerror("Known Protection @ 275BC(%08X, %08X): R@%06X ", p1, p2, offset);
480 			break;
481 		case 0x275d2:
482 		case 0x275d8:
483 		case 0x275de:
484 		case 0x2761e:
485 		case 0x2762e:
486 			logerror("R@%06X ", offset);
487 			break;
488 		case 0x2763e:
489 			logerror("R@%06X - done\n", offset);
490 			break;
491 
492 		/* protection code from 3d8dc - 3d95a */
493 		case 0x3d8f4:
494 			a6 = activecpu_get_reg(M68K_A6);
495 			p1 = (cpu_readmem24bedw_word(a6+12) << 16) | cpu_readmem24bedw_word(a6+14);
496 			logerror("Known Protection @ 3D8F4(%08X): R@%06X ", p1, offset);
497 			break;
498 		case 0x3d8fa:
499 		case 0x3d90e:
500 			logerror("R@%06X ", offset);
501 			break;
502 
503 		/* protection code from 437fa - 43860 */
504 		case 0x43814:
505 			a6 = activecpu_get_reg(M68K_A6);
506 			p1 = cpu_readmem24bedw(a6+15);
507 			logerror("Known Protection @ 43814(%08X): R@%06X ", p1, offset);
508 			break;
509 		case 0x4381c:
510 		case 0x43840:
511 			logerror("R@%06X ", offset);
512 			break;
513 		case 0x43848:
514 			logerror("R@%06X - done\n", offset);
515 			break;
516 
517 		/* catch anything else */
518 		default:
519 			logerror("%06X:Unknown protection R@%06X\n", activecpu_get_previouspc(), offset);
520 			break;
521 	}
522 }
523 #endif
524 
525 	/* handle specific reads */
526 	switch (offset)
527 	{
528 		/* status register; the code spins on this waiting for the high bit to be set */
529 		case 0xdc4700:
530 //			if (protmode != 0)
531 			{
532 				*data = 0x8000;
533 			}
534 			break;
535 
536 		/* some kind of result register */
537 		case 0xdcc7c2:
538 			if (protmode == 2)
539 			{
540 				*data = protresult;
541 				protmode = 0;
542 //				logerror("prot:Clearing mode 2\n");
543 			}
544 			break;
545 
546 		case 0xdcc7c4:
547 			if (protmode == 1)
548 			{
549 				protmode = 0;
550 //				logerror("prot:Clearing mode 1\n");
551 			}
552 			break;
553 	}
554 }
555 
556 
557 
558 /*************************************
559  *
560  *	Protection/color RAM
561  *
562  *************************************/
563 
READ32_HANDLER(colorram_protection_r)564 static READ32_HANDLER( colorram_protection_r )
565 {
566 	offs_t address = 0xd80000 + offset * 4;
567 	data32_t result32 = 0;
568 	data16_t result;
569 
570 	if ((mem_mask & 0xffff0000) != 0xffff0000)
571 	{
572 		result = atarigt_colorram_r(address);
573 		(*protection_r)(address, &result);
574 		result32 |= result << 16;
575 	}
576 	if ((mem_mask & 0x0000ffff) != 0x0000ffff)
577 	{
578 		result = atarigt_colorram_r(address + 2);
579 		(*protection_r)(address + 2, &result);
580 		result32 |= result;
581 	}
582 
583 	return result32;
584 }
585 
586 
WRITE32_HANDLER(colorram_protection_w)587 static WRITE32_HANDLER( colorram_protection_w )
588 {
589 	offs_t address = 0xd80000 + offset * 4;
590 
591 	if ((mem_mask & 0xffff0000) != 0xffff0000)
592 	{
593 		if (!ignore_writes)
594 			atarigt_colorram_w(address, data >> 16, mem_mask >> 16);
595 		(*protection_w)(address, data >> 16);
596 	}
597 	if ((mem_mask & 0x0000ffff) != 0x0000ffff)
598 	{
599 		if (!ignore_writes)
600 			atarigt_colorram_w(address + 2, data, mem_mask);
601 		(*protection_w)(address + 2, data);
602 	}
603 }
604 
605 
606 
607 /*************************************
608  *
609  *	Main CPU memory handlers
610  *
611  *************************************/
612 
MEMORY_READ32_START(readmem)613 static MEMORY_READ32_START( readmem )
614 	{ 0x000000, 0x1fffff, MRA32_ROM },
615 	{ 0xc00000, 0xc00003, sound_data_r },
616 	{ 0xd00014, 0xd00017, analog_port0_r },
617 	{ 0xd0001c, 0xd0001f, analog_port1_r },
618 	{ 0xd20000, 0xd20fff, atarigen_eeprom_upper32_r },
619 	{ 0xd70000, 0xd7ffff, MRA32_RAM },
620 	{ 0xd80000, 0xdfffff, colorram_protection_r },
621 	{ 0xe80000, 0xe80003, inputs_01_r },
622 	{ 0xe82000, 0xe82003, special_port2_r },
623 	{ 0xe82004, 0xe82007, special_port3_r },
624 	{ 0xf80000, 0xffffff, MRA32_RAM },
625 MEMORY_END
626 
627 
628 static MEMORY_WRITE32_START( writemem )
629 	{ 0x000000, 0x1fffff, MWA32_ROM },
630 	{ 0xc00000, 0xc00003, sound_data_w },
631 	{ 0xd20000, 0xd20fff, atarigen_eeprom32_w, (data32_t **)&atarigen_eeprom, &atarigen_eeprom_size },
632 	{ 0xd40000, 0xd4ffff, atarigen_eeprom_enable32_w },
633 	{ 0xd70000, 0xd71fff, MWA32_RAM },
634 	{ 0xd72000, 0xd75fff, atarigen_playfield32_w, &atarigen_playfield32 },
635 	{ 0xd76000, 0xd76fff, atarigen_alpha32_w, &atarigen_alpha32 },
636 	{ 0xd77000, 0xd77fff, MWA32_RAM },
637 	{ 0xd78000, 0xd78fff, atarirle_0_spriteram32_w, &atarirle_0_spriteram32 },
638 	{ 0xd79000, 0xd7a1ff, MWA32_RAM },
639 	{ 0xd7a200, 0xd7a203, mo_command_w, &mo_command },
640 	{ 0xd7a204, 0xd7ffff, MWA32_RAM },
641 	{ 0xd80000, 0xdfffff, colorram_protection_w, (data32_t **)&atarigt_colorram },
642 	{ 0xe04000, 0xe04003, led_w },
643 	{ 0xe08000, 0xe08003, latch_w },
644 	{ 0xe0a000, 0xe0a003, atarigen_scanline_int_ack32_w },
645 	{ 0xe0c000, 0xe0c003, atarigen_video_int_ack32_w },
646 	{ 0xe0e000, 0xe0e003, MWA32_NOP },//watchdog_reset_w },
647 	{ 0xf80000, 0xffffff, MWA32_RAM },
648 MEMORY_END
649 
650 
651 
652 /*************************************
653  *
654  *	Port definitions
655  *
656  *************************************/
657 
658 INPUT_PORTS_START( tmek )
659 	PORT_START		/* 68.SW (A1=0) */
660 	PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED )
661 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
662 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )
663 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER1 )
664 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER1 )
665 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER1 )
666 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_PLAYER1 )
667 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_PLAYER1 )
668 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_PLAYER1 )
669 
670 	PORT_START		/* 68.SW (A1=1) */
671 	PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED )
672 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START2 )
673 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
674 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
675 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER2 )
676 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER2 )
677 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_PLAYER2 )
678 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_PLAYER2 )
679 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_PLAYER2 )
680 
681 	PORT_START      /* 68.STATUS (A2=0) */
682 	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /A2DRDY */
683 	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_TILT )		/* TILT */
684 	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /XIRQ23 */
685 	PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_SPECIAL )	/* A2D.EOC */
686 	PORT_BIT( 0x0030, IP_ACTIVE_LOW, IPT_UNUSED )	/* NC */
687 	PORT_SERVICE( 0x0040, IP_ACTIVE_LOW )			/* SELFTEST */
688 	PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_VBLANK )	/* VBLANK */
689 	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
690 
691 	PORT_START      /* 68.STATUS (A2=1) */
692 	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /VBIRQ */
693 	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /4MSIRQ */
694 	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /XIRQ0 */
695 	PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /XIRQ1 */
696 	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /SERVICER */
697 	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /SER.L */
698 	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_COIN2 )	/* COINR */
699 	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN1 )	/* COINL */
700 	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
701 
702 #if (HACK_TMEK_CONTROLS)
703 	PORT_START		/* single digital joystick */
704 	PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_8WAY | IPF_CHEAT | IPF_PLAYER1 )
705 	PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_CHEAT | IPF_PLAYER1 )
706 	PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_CHEAT | IPF_PLAYER1 )
707 	PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_CHEAT | IPF_PLAYER1 )
708 #else
709 	PORT_START
710 	PORT_ANALOG( 0xff, 0x80, IPT_AD_STICK_X | IPF_PLAYER2, 100, 10, 0, 255 )
711 
712 	PORT_START
713 	PORT_ANALOG( 0xff, 0x80, IPT_AD_STICK_Y | IPF_PLAYER1, 100, 10, 0, 255 )
714 
715 	PORT_START
716 	PORT_ANALOG( 0xff, 0x80, IPT_AD_STICK_X | IPF_PLAYER1, 100, 10, 0, 255 )
717 
718 	PORT_START
719 	PORT_ANALOG( 0xff, 0x80, IPT_AD_STICK_Y | IPF_PLAYER2, 100, 10, 0, 255 )
720 #endif
721 
722 INPUT_PORTS_END
723 
724 
725 INPUT_PORTS_START( primrage )
726 	PORT_START		/* 68.SW (A1=0) */
727 	PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED )
728 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
729 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )
730 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER1 )
731 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER1 )
732 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER1 )
733 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_PLAYER1 )
734 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_PLAYER1 )
735 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_PLAYER1 )
736 
737 	PORT_START		/* 68.SW (A1=1) */
738 // bit 0x0008 does something
739 	PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED )
740 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START2 )
741 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
742 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
743 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER2 )
744 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER2 )
745 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_PLAYER2 )
746 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_PLAYER2 )
747 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_PLAYER2 )
748 
749 	PORT_START      /* 68.STATUS (A2=0) */
750 	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /A2DRDY */
751 	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_TILT )		/* TILT */
752 	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /XIRQ23 */
753 	PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_SPECIAL )	/* A2D.EOC */
754 	PORT_BIT( 0x0030, IP_ACTIVE_LOW, IPT_UNUSED )	/* NC */
755 	PORT_SERVICE( 0x0040, IP_ACTIVE_LOW )			/* SELFTEST */
756 	PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_VBLANK )	/* VBLANK */
757 	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
758 
759 	PORT_START      /* 68.STATUS (A2=1) */
760 	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /VBIRQ */
761 	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /4MSIRQ */
762 	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /XIRQ0 */
763 	PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /XIRQ1 */
764 	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /SERVICER */
765 	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /SER.L */
766 	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_COIN2 )	/* COINR */
767 	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN1 )	/* COINL */
768 	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
769 
770 	PORT_START
771 	PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
772 
773 	PORT_START
774 	PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
775 
776 	PORT_START
777 	PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
778 
779 	PORT_START
780 	PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
781 INPUT_PORTS_END
782 
783 
784 
785 /*************************************
786  *
787  *	Graphics definitions
788  *
789  *************************************/
790 
791 static struct GfxLayout pflayout =
792 {
793 	8,8,
794 	RGN_FRAC(1,3),
795 	5,
796 	{ 0, 0, 1, 2, 3 },
797 	{ RGN_FRAC(1,3)+0, RGN_FRAC(1,3)+4, 0, 4, RGN_FRAC(1,3)+8, RGN_FRAC(1,3)+12, 8, 12 },
798 	{ 0*8, 2*8, 4*8, 6*8, 8*8, 10*8, 12*8, 14*8 },
799 	16*8
800 };
801 
802 
803 static struct GfxLayout pftoplayout =
804 {
805 	8,8,
806 	RGN_FRAC(1,3),
807 	6,
808 	{ RGN_FRAC(2,3)+0, RGN_FRAC(2,3)+4, 0, 0, 0, 0 },
809 	{ 3, 2, 1, 0, 11, 10, 9, 8 },
810 	{ 0*8, 2*8, 4*8, 6*8, 8*8, 10*8, 12*8, 14*8 },
811 	16*8
812 };
813 
814 
815 static struct GfxLayout anlayout =
816 {
817 	8,8,
818 	RGN_FRAC(1,1),
819 	4,
820 	{ 0, 1, 2, 3 },
821 	{ 0, 4, 8, 12, 16, 20, 24, 28 },
822 	{ 0*8, 4*8, 8*8, 12*8, 16*8, 20*8, 24*8, 28*8 },
823 	32*8
824 };
825 
826 
827 static struct GfxDecodeInfo gfxdecodeinfo[] =
828 {
829 	{ REGION_GFX1, 0, &pflayout, 0x000, 64 },
830 	{ REGION_GFX2, 0, &anlayout, 0x000, 16 },
831 	{ REGION_GFX1, 0, &pftoplayout, 0x000, 64 },
832 	{ -1 } /* end of array */
833 };
834 
835 
836 
837 /*************************************
838  *
839  *	Machine driver
840  *
841  *************************************/
842 
843 static MACHINE_DRIVER_START( atarigt )
844 
845 	/* basic machine hardware */
846 	MDRV_CPU_ADD(M68EC020, ATARI_CLOCK_50MHz/2)
MDRV_CPU_MEMORY(readmem,writemem)847 	MDRV_CPU_MEMORY(readmem,writemem)
848 	MDRV_CPU_VBLANK_INT(atarigen_video_int_gen,1)
849 	MDRV_CPU_PERIODIC_INT(atarigen_scanline_int_gen,250)
850 
851 	MDRV_FRAMES_PER_SECOND(60)
852 	MDRV_VBLANK_DURATION(DEFAULT_REAL_60HZ_VBLANK_DURATION)
853 
854 	MDRV_MACHINE_INIT(atarigt)
855 	MDRV_NVRAM_HANDLER(atarigen)
856 
857 	/* video hardware */
858 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_RGB_DIRECT | VIDEO_NEEDS_6BITS_PER_GUN | VIDEO_UPDATE_BEFORE_VBLANK)
859 	MDRV_SCREEN_SIZE(42*8, 30*8)
860 	MDRV_VISIBLE_AREA(0*8, 42*8-1, 0*8, 30*8-1)
861 	MDRV_GFXDECODE(gfxdecodeinfo)
862 	MDRV_PALETTE_LENGTH(32768)
863 
864 	MDRV_VIDEO_START(atarigt)
865 	MDRV_VIDEO_EOF(atarirle)
866 	MDRV_VIDEO_UPDATE(atarigt)
867 
868 	/* sound hardware */
869 	MDRV_IMPORT_FROM(cage)
870 MACHINE_DRIVER_END
871 
872 
873 
874 /*************************************
875  *
876  *	ROM definition(s)
877  *
878  *************************************/
879 
880 ROM_START( tmek )
881 	ROM_REGION( 0x80000, REGION_CPU1, 0 )	/* 8*64k for 68000 code */
882 	ROM_LOAD32_BYTE( "0044d", 0x00000, 0x20000, CRC(1cd62725) SHA1(7685794d9fbe3fe7a9978d12e489447b4fba5282) )
883 	ROM_LOAD32_BYTE( "0043d", 0x00001, 0x20000, CRC(82185051) SHA1(a21aad4f6ec948d9cd47efb89e7811c5c2e4850b) )
884 	ROM_LOAD32_BYTE( "0042d", 0x00002, 0x20000, CRC(ef9feda4) SHA1(9fb6e91d4c22e28ced61d0d1f28f5e43191c8762) )
885 	ROM_LOAD32_BYTE( "0041d", 0x00003, 0x20000, CRC(179da056) SHA1(5f7ddf44aab55beaf2c377b0c93279acb6273255) )
886 
887 	ROM_REGION( 0x040000, REGION_CPU2, 0 )	/* RAM for TMS320C31 */
888 
889 	ROM_REGION32_LE( 0x200000, REGION_USER1, 0 )	/* TMS320C31 boot ROM */
890 	ROM_LOAD32_BYTE( "0078c", 0x000000, 0x080000, CRC(ff5b979a) SHA1(deb8ee454b6b7c7bddb2ba0c808869e45b19e55f) )
891 
892 	ROM_REGION32_LE( 0x1000000, REGION_USER2, 0 )	/* TMS320C31 sound ROMs */
893 	ROM_LOAD32_WORD( "0077",  0x400000, 0x200000, CRC(8f650f8b) SHA1(e3b48ff4e2093d709134b6bf62cecd101ab5cef4) )
894 	ROM_LOAD32_BYTE( "2501a", 0x400002, 0x080000, CRC(98e51103) SHA1(420d0aac6b1de1bd990b9e4219041192400299f8) )
895 	ROM_LOAD32_BYTE( "2500a", 0x400003, 0x080000, CRC(49c0136c) SHA1(1ad463b1e50df9843abb8c645cbe8a79e42cbb87) )
896 	ROM_LOAD32_BYTE( "2503a", 0x600002, 0x080000, CRC(4376f3eb) SHA1(fe3f1efec3e6b4da3d5a13611bad7e34306cc224) )
897 	ROM_LOAD32_BYTE( "2502a", 0x600003, 0x080000, CRC(a48e6a5f) SHA1(f9615ff587b60d07172fc44ce87ae0fb49cb02a0) )
898 	ROM_LOAD32_WORD( "0076",  0x800000, 0x200000, CRC(74dffe2d) SHA1(9436f69827050ad2f3be58f1cb57d7a06b75ab61) )
899 	ROM_LOAD32_WORD( "0074",  0x800002, 0x200000, CRC(8dfc6ce0) SHA1(5b0d4dd4cb7934f542e67217a2542a3c69558cea) )
900 
901 	ROM_REGION( 0x300000, REGION_GFX1, ROMREGION_DISPOSE )
902 	ROM_LOAD( "0250",  0x000000, 0x80000, CRC(56bd9f25) SHA1(a8161aeee274f28c41f82b6b3f63570970ee281d) ) /* playfield, planes 0-1 */
903 	ROM_LOAD( "0253a", 0x080000, 0x80000, CRC(23e2f83d) SHA1(804a17ce8768bd48cda853e55fc1f54ed7475968) )
904 	ROM_LOAD( "0251",  0x100000, 0x80000, CRC(0d3b08f7) SHA1(72ec2383011ef20e9054594279cc85fa55c3a9b2) ) /* playfield, planes 2-3 */
905 	ROM_LOAD( "0254a", 0x180000, 0x80000, CRC(448aea87) SHA1(8c9e367b2f8d06858d37a9239fb732c1379ec374) )
906 	ROM_LOAD( "0252",  0x200000, 0x80000, CRC(95a1c23b) SHA1(74eb69dcaebd7a7a03d8f7c9bf6183ece695e91d) ) /* playfield, planes 4-5 */
907 	ROM_LOAD( "0255a", 0x280000, 0x80000, CRC(f0fbb700) SHA1(3f0355b137f6426a07abab77f25e718c6102a16f) )
908 
909 	ROM_REGION( 0x020000, REGION_GFX2, ROMREGION_DISPOSE )
910 	ROM_LOAD( "0045a", 0x000000, 0x20000, CRC(057a5304) SHA1(d44c0cf885a1324888b7e8118f124c0dae616859) ) /* alphanumerics */
911 
912 	ROM_REGION16_BE( 0x1000000, REGION_GFX3, 0 )
913 	ROM_LOAD16_BYTE( "0300", 0x000001, 0x100000, CRC(8367ddac) SHA1(9ca77962259284cef8a261b652ab1327817ee8d0) )
914 	ROM_LOAD16_BYTE( "0301", 0x000000, 0x100000, CRC(94524b5b) SHA1(db401fd7ba56658fcb614406672c02569d845930) )
915 	ROM_LOAD16_BYTE( "0302", 0x200001, 0x100000, CRC(c03f1aa7) SHA1(c68b52280d0695629c843b9c90f7a39713e063b0) )
916 	ROM_LOAD16_BYTE( "0303", 0x200000, 0x100000, CRC(3ac5b24f) SHA1(96c26cb3f17f4a383bf0a7be442c6199fbac8b4b) )
917 	ROM_LOAD16_BYTE( "0304", 0x400001, 0x100000, CRC(b053ef78) SHA1(30dd8c409ed7fbc12495829e680df9d7d1cf6c6c) )
918 	ROM_LOAD16_BYTE( "0305", 0x400000, 0x100000, CRC(b012b8e9) SHA1(89af30b49fad8424b00252c2ea3ef454a45a5622) )
919 	ROM_LOAD16_BYTE( "0306", 0x600001, 0x100000, CRC(d086f149) SHA1(92b5b7c01863a9fcc9b9b3990744da7ac107a324) )
920 	ROM_LOAD16_BYTE( "0307", 0x600000, 0x100000, CRC(49c1a541) SHA1(65169a8ed4cd5f77fec61252a72b7731d8e910e1) )
921 	ROM_LOAD16_BYTE( "0308", 0x800001, 0x100000, CRC(97033c8a) SHA1(c81d30a492dd0419193a68eea78ba5e6b12a3f9a) )
922 	ROM_LOAD16_BYTE( "0309", 0x800000, 0x100000, CRC(e095ecb3) SHA1(79b7d21096cc1abeb2d1bc45deab5dc42282a807) )
923 	ROM_LOAD16_BYTE( "0310", 0xa00001, 0x100000, CRC(e056a0c3) SHA1(0a87e4078371e1b52e9418a4824f2d37cb07a649) )
924 	ROM_LOAD16_BYTE( "0311", 0xa00000, 0x100000, CRC(05afb2dc) SHA1(db186bfde255aa57f8e80bdc92c9be6d8c366bb9) )
925 	ROM_LOAD16_BYTE( "0312", 0xc00001, 0x100000, CRC(cc224dae) SHA1(0d57382b53920172ceaba62a0f690fc04aedfddc) )
926 	ROM_LOAD16_BYTE( "0313", 0xc00000, 0x100000, CRC(a8cf049d) SHA1(d130e1f94d2a2819ed46c45834aa1b1cd86ab839) )
927 	ROM_LOAD16_BYTE( "0314", 0xe00001, 0x100000, CRC(4f01db8d) SHA1(c18c72f1ccbe6ff18576592548c960f9ce357016) )
928 	ROM_LOAD16_BYTE( "0315", 0xe00000, 0x100000, CRC(28e97d06) SHA1(ef115f393c568822cb2cb3cca92c7656e1ee07f9) )
929 
930 	ROM_REGION( 0x0600, REGION_PROMS, ROMREGION_DISPOSE )
931 	ROM_LOAD( "0001a",  0x0000, 0x0200, CRC(a70ade3f) SHA1(f4a558b17767eed2683c768d1b441e75edcff967) )	/* microcode for growth renderer */
932 	ROM_LOAD( "0001b",  0x0200, 0x0200, CRC(f4768b4d) SHA1(a506fa5386ab0ea2851ff1f8474d4bfc66deaa70) )
933 	ROM_LOAD( "0001c",  0x0400, 0x0200, CRC(22a76ad4) SHA1(ce840c283bbd3a5f19dc8d91b19d1571eff51ff4) )
934 ROM_END
935 
936 
937 ROM_START( tmekprot )
938 	ROM_REGION( 0x80000, REGION_CPU1, 0 )	/* 8*64k for 68000 code */
939 	ROM_LOAD32_BYTE( "pgm0", 0x00000, 0x20000, CRC(f5f7f7be) SHA1(66be472e7c0ef26e2ce2b45488a8e4cfc1b0f80a) )
940 	ROM_LOAD32_BYTE( "pgm1", 0x00001, 0x20000, CRC(284f7971) SHA1(5327f6368abd2ab9740a5150a8660c420f750476) )
941 	ROM_LOAD32_BYTE( "pgm2", 0x00002, 0x20000, CRC(ce9a77d4) SHA1(025143b59d85180286086940b05c8e5ea0b4a7fe) )
942 	ROM_LOAD32_BYTE( "pgm3", 0x00003, 0x20000, CRC(28b0e210) SHA1(7567671beecc7d30e9d4b61cf7d3448bb1dbb072) )
943 
944 	ROM_REGION( 0x040000, REGION_CPU2, 0 )	/* RAM for TMS320C31 */
945 
946 	ROM_REGION32_LE( 0x200000, REGION_USER1, 0 )	/* TMS320C31 boot ROM */
947 	ROM_LOAD32_BYTE( "0078c", 0x000000, 0x080000, BAD_DUMP CRC(ff5b979a) SHA1(deb8ee454b6b7c7bddb2ba0c808869e45b19e55f) )
948 
949 	ROM_REGION32_LE( 0x1000000, REGION_USER2, 0 )	/* TMS320C31 sound ROMs */
950 	ROM_LOAD32_WORD( "0077",  0x400000, 0x200000, CRC(8f650f8b) SHA1(e3b48ff4e2093d709134b6bf62cecd101ab5cef4) )
951 	ROM_LOAD32_BYTE( "2501a", 0x400002, 0x080000, CRC(98e51103) SHA1(420d0aac6b1de1bd990b9e4219041192400299f8) )
952 	ROM_LOAD32_BYTE( "2500a", 0x400003, 0x080000, CRC(49c0136c) SHA1(1ad463b1e50df9843abb8c645cbe8a79e42cbb87) )
953 	ROM_LOAD32_BYTE( "2503a", 0x600002, 0x080000, CRC(4376f3eb) SHA1(fe3f1efec3e6b4da3d5a13611bad7e34306cc224) )
954 	ROM_LOAD32_BYTE( "2502a", 0x600003, 0x080000, CRC(a48e6a5f) SHA1(f9615ff587b60d07172fc44ce87ae0fb49cb02a0) )
955 	ROM_LOAD32_WORD( "0076",  0x800000, 0x200000, CRC(74dffe2d) SHA1(9436f69827050ad2f3be58f1cb57d7a06b75ab61) )
956 	ROM_LOAD32_WORD( "0074",  0x800002, 0x200000, CRC(8dfc6ce0) SHA1(5b0d4dd4cb7934f542e67217a2542a3c69558cea) )
957 
958 	ROM_REGION( 0x300000, REGION_GFX1, ROMREGION_DISPOSE )
959 	ROM_LOAD( "0250",  0x000000, 0x80000, CRC(56bd9f25) SHA1(a8161aeee274f28c41f82b6b3f63570970ee281d) ) /* playfield, planes 0-1 */
960 	ROM_LOAD( "0253a", 0x080000, 0x80000, CRC(23e2f83d) SHA1(804a17ce8768bd48cda853e55fc1f54ed7475968) )
961 	ROM_LOAD( "0251",  0x100000, 0x80000, CRC(0d3b08f7) SHA1(72ec2383011ef20e9054594279cc85fa55c3a9b2) ) /* playfield, planes 2-3 */
962 	ROM_LOAD( "0254a", 0x180000, 0x80000, CRC(448aea87) SHA1(8c9e367b2f8d06858d37a9239fb732c1379ec374) )
963 	ROM_LOAD( "0252",  0x200000, 0x80000, CRC(95a1c23b) SHA1(74eb69dcaebd7a7a03d8f7c9bf6183ece695e91d) ) /* playfield, planes 4-5 */
964 	ROM_LOAD( "0255a", 0x280000, 0x80000, CRC(f0fbb700) SHA1(3f0355b137f6426a07abab77f25e718c6102a16f) )
965 
966 	ROM_REGION( 0x020000, REGION_GFX2, ROMREGION_DISPOSE )
967 	ROM_LOAD( "alpha", 0x000000, 0x20000, CRC(8f57a604) SHA1(f076636430ff73ea11e4687ef7b21a7bac1d8e34) ) /* alphanumerics */
968 
969 	ROM_REGION16_BE( 0x1000000, REGION_GFX3, 0 )
970 	ROM_LOAD16_BYTE( "0300", 0x000001, 0x100000, CRC(8367ddac) SHA1(9ca77962259284cef8a261b652ab1327817ee8d0) )
971 	ROM_LOAD16_BYTE( "0301", 0x000000, 0x100000, CRC(94524b5b) SHA1(db401fd7ba56658fcb614406672c02569d845930) )
972 	ROM_LOAD16_BYTE( "0302", 0x200001, 0x100000, CRC(c03f1aa7) SHA1(c68b52280d0695629c843b9c90f7a39713e063b0) )
973 	ROM_LOAD16_BYTE( "0303", 0x200000, 0x100000, CRC(3ac5b24f) SHA1(96c26cb3f17f4a383bf0a7be442c6199fbac8b4b) )
974 	ROM_LOAD16_BYTE( "0304", 0x400001, 0x100000, CRC(b053ef78) SHA1(30dd8c409ed7fbc12495829e680df9d7d1cf6c6c) )
975 	ROM_LOAD16_BYTE( "0305", 0x400000, 0x100000, CRC(b012b8e9) SHA1(89af30b49fad8424b00252c2ea3ef454a45a5622) )
976 	ROM_LOAD16_BYTE( "0306", 0x600001, 0x100000, CRC(d086f149) SHA1(92b5b7c01863a9fcc9b9b3990744da7ac107a324) )
977 	ROM_LOAD16_BYTE( "0307", 0x600000, 0x100000, CRC(49c1a541) SHA1(65169a8ed4cd5f77fec61252a72b7731d8e910e1) )
978 	ROM_LOAD16_BYTE( "0308", 0x800001, 0x100000, CRC(97033c8a) SHA1(c81d30a492dd0419193a68eea78ba5e6b12a3f9a) )
979 	ROM_LOAD16_BYTE( "0309", 0x800000, 0x100000, CRC(e095ecb3) SHA1(79b7d21096cc1abeb2d1bc45deab5dc42282a807) )
980 	ROM_LOAD16_BYTE( "0310", 0xa00001, 0x100000, CRC(e056a0c3) SHA1(0a87e4078371e1b52e9418a4824f2d37cb07a649) )
981 	ROM_LOAD16_BYTE( "0311", 0xa00000, 0x100000, CRC(05afb2dc) SHA1(db186bfde255aa57f8e80bdc92c9be6d8c366bb9) )
982 	ROM_LOAD16_BYTE( "0312", 0xc00001, 0x100000, CRC(cc224dae) SHA1(0d57382b53920172ceaba62a0f690fc04aedfddc) )
983 	ROM_LOAD16_BYTE( "0313", 0xc00000, 0x100000, CRC(a8cf049d) SHA1(d130e1f94d2a2819ed46c45834aa1b1cd86ab839) )
984 	ROM_LOAD16_BYTE( "0314", 0xe00001, 0x100000, CRC(4f01db8d) SHA1(c18c72f1ccbe6ff18576592548c960f9ce357016) )
985 	ROM_LOAD16_BYTE( "0315", 0xe00000, 0x100000, CRC(28e97d06) SHA1(ef115f393c568822cb2cb3cca92c7656e1ee07f9) )
986 
987 	ROM_REGION( 0x0600, REGION_PROMS, ROMREGION_DISPOSE )
988 	ROM_LOAD( "0001a",  0x0000, 0x0200, CRC(a70ade3f) SHA1(f4a558b17767eed2683c768d1b441e75edcff967) )	/* microcode for growth renderer */
989 	ROM_LOAD( "0001b",  0x0200, 0x0200, CRC(f4768b4d) SHA1(a506fa5386ab0ea2851ff1f8474d4bfc66deaa70) )
990 	ROM_LOAD( "0001c",  0x0400, 0x0200, CRC(22a76ad4) SHA1(ce840c283bbd3a5f19dc8d91b19d1571eff51ff4) )
991 ROM_END
992 
993 
994 ROM_START( primrage )
995 	ROM_REGION( 0x200000, REGION_CPU1, 0 )	/* 8*64k for 68000 code */
996 	ROM_LOAD32_BYTE( "1044b", 0x000000, 0x80000, CRC(35c9c34b) SHA1(4bd1d35cc7c68574819afd648405eedb8db25b4c) )
997 	ROM_LOAD32_BYTE( "1043b", 0x000001, 0x80000, CRC(86322829) SHA1(e0e72888def0931d078921f099bae6788738a291) )
998 	ROM_LOAD32_BYTE( "1042b", 0x000002, 0x80000, CRC(750e8095) SHA1(4660637136b1a25169d8c43646c8b87081763987) )
999 	ROM_LOAD32_BYTE( "1041b", 0x000003, 0x80000, CRC(6a90d283) SHA1(7c18c97cb5e5cdd26a52cd6bc099fbce87055311) )
1000 
1001 	ROM_REGION( 0x040000, REGION_CPU2, 0 )	/* RAM for TMS320C31 */
1002 
1003 	ROM_REGION32_LE( 0x200000, REGION_USER1, 0 )	/* TMS320C31 boot ROM */
1004 	ROM_LOAD32_BYTE( "1078a", 0x000000, 0x080000, CRC(0656435f) SHA1(f8e498171e754eb8703dad6b2351509bbb27e06b) )
1005 
1006 	ROM_REGION32_LE( 0x1000000, REGION_USER2, 0 )	/* TMS320C31 sound ROMs */
1007 	ROM_LOAD32_WORD( "0075",  0x400000, 0x200000, CRC(b685a88e) SHA1(998b8fe54971f6cd96e4c22b19e3831f29d8172d) )
1008 	ROM_LOAD32_WORD( "0077",  0x400002, 0x200000, CRC(3283cea8) SHA1(fb7333ca951053a56c501f2ce0eb197c8fcafaf7) )
1009 
1010 	ROM_REGION( 0x300000, REGION_GFX1, ROMREGION_DISPOSE )
1011 	ROM_LOAD( "0050a",  0x000000, 0x80000, CRC(66896e8f) SHA1(7675b24c15ca0608f11f2a7b8d70717adb10924c) ) /* playfield, planes 0-1 */
1012 	ROM_LOAD( "0051a",  0x100000, 0x80000, CRC(fb5b3e7b) SHA1(f43fe4b5c4bbea10da46b60c644f586fb391355d) ) /* playfield, planes 2-3 */
1013 	ROM_LOAD( "0052a",  0x200000, 0x80000, CRC(cbe38670) SHA1(0780e599007851f6d37cdd8c701d01cb1ae48b9d) ) /* playfield, planes 4-5 */
1014 
1015 	ROM_REGION( 0x020000, REGION_GFX2, ROMREGION_DISPOSE )
1016 	ROM_LOAD( "1045b", 0x000000, 0x20000, CRC(1d3260bf) SHA1(85d9db8499cbe180c8d52710f3cfe64453a530ff) ) /* alphanumerics */
1017 
1018 	ROM_REGION16_BE( 0x2000000, REGION_GFX3, 0 )
1019 	ROM_LOAD16_BYTE( "1100a", 0x0000001, 0x080000, CRC(6e9c80b5) SHA1(ec724011527dd8707c733211b1a6c51b22f580c7) )
1020 	ROM_LOAD16_BYTE( "1101a", 0x0000000, 0x080000, CRC(bb7ee624) SHA1(0de6385aee7d25b41fd5bf232e44e5da536504ac) )
1021 	ROM_LOAD16_BYTE( "0332",  0x0800001, 0x100000, CRC(610cfcb4) SHA1(bed1bd0d11c0a7cc48d020fc0acec34daf48c5ac) )
1022 	ROM_LOAD16_BYTE( "0333",  0x0800000, 0x100000, CRC(3320448e) SHA1(aef42328bf72fca5c04bfed1ea41100bb5aafeaa) )
1023 	ROM_LOAD16_BYTE( "0334",  0x0a00001, 0x100000, CRC(be3acb6f) SHA1(664cb4cd4d325577ab0cbe0cf48870a9f4706573) )
1024 	ROM_LOAD16_BYTE( "0335",  0x0a00000, 0x100000, CRC(e4f6e87a) SHA1(2a3f8ff46b289c25cd4ca2a1369b14613f48e964) )
1025 	ROM_LOAD16_BYTE( "0336",  0x0c00001, 0x100000, CRC(a78a8525) SHA1(69c3da4d45b0f09f5bdabcedd238b82efab48a70) )
1026 	ROM_LOAD16_BYTE( "0337",  0x0c00000, 0x100000, CRC(73fdd050) SHA1(63c67187953d2dab93a260e548ef5965e7cba4e8) )
1027 	ROM_LOAD16_BYTE( "0338",  0x0e00001, 0x100000, CRC(fa19cae6) SHA1(7d0560516971f32835329a17450c7561631a27d1) )
1028 	ROM_LOAD16_BYTE( "0339",  0x0e00000, 0x100000, CRC(e0cd1393) SHA1(0de59d04165d64320512936c194db19cca6455fd) )
1029 	ROM_LOAD16_BYTE( "0316",  0x1000001, 0x100000, CRC(9301c672) SHA1(a8971049c857ae283a95b257dd0d6aaff6d787cd) )
1030 	ROM_LOAD16_BYTE( "0317",  0x1000000, 0x100000, CRC(9e3b831a) SHA1(b799e57bea9522cb83f9aa7ea38a17b1d8273b8d) )
1031 	ROM_LOAD16_BYTE( "0318",  0x1200001, 0x100000, CRC(8523db5d) SHA1(f2476aa26b1a7cbe7510994d92eb209fda65593d) )
1032 	ROM_LOAD16_BYTE( "0319",  0x1200000, 0x100000, CRC(42f22e4b) SHA1(2a1a6f0a7aca7b7b64bce0bd54eb4cb23a2336b1) )
1033 	ROM_LOAD16_BYTE( "0320",  0x1400001, 0x100000, CRC(21369d13) SHA1(28e03595c098fd9bec6f7316180d17905a51a51b) )
1034 	ROM_LOAD16_BYTE( "0321",  0x1400000, 0x100000, CRC(3b7d498a) SHA1(804e9e1567bf97e8dae3b9444428254ced8b60da) )
1035 	ROM_LOAD16_BYTE( "0322",  0x1600001, 0x100000, CRC(05e9f407) SHA1(fa25a893d4cb805df02d7d12df4dbabefb3114a2) )
1036 	ROM_LOAD16_BYTE( "0323",  0x1600000, 0x100000, CRC(603f3bb6) SHA1(d7c22dc900d9edc36d8f211df67a206d14637fab) )
1037 	ROM_LOAD16_BYTE( "0324",  0x1800001, 0x100000, CRC(3c37769f) SHA1(ca0306a439949d2a0305cc0cf05808a58e84084c) )
1038 	ROM_LOAD16_BYTE( "0325",  0x1800000, 0x100000, CRC(f43321e3) SHA1(8bb4dd4a5d5400b17052d50dca9078211dc6b861) )
1039 	ROM_LOAD16_BYTE( "0326",  0x1a00001, 0x100000, CRC(63d4ccea) SHA1(340fced6998a8ae6fd285d8fe666f5f1e4b6bfaf) )
1040 	ROM_LOAD16_BYTE( "0327",  0x1a00000, 0x100000, CRC(9f4806d5) SHA1(76e9f1a47e7fa45e834fa8739528f1e3c54b14dc) )
1041 	ROM_LOAD16_BYTE( "0328",  0x1c00001, 0x100000, CRC(a08d73e1) SHA1(25a58777f15e9550111447b47a98762fd6bb498d) )
1042 	ROM_LOAD16_BYTE( "0329",  0x1c00000, 0x100000, CRC(eff3d2cd) SHA1(8532568b5fd91d2b738947e9cd575a4eb2a03be2) )
1043 	ROM_LOAD16_BYTE( "0330",  0x1e00001, 0x100000, CRC(7bf6bb8f) SHA1(f34bd8a9c7f95436a1c816badc59673cd2a6969a) )
1044 	ROM_LOAD16_BYTE( "0331",  0x1e00000, 0x100000, CRC(c6a64dad) SHA1(ee54514463ab61cbaef70da064cf5de591e5861f) )
1045 
1046 	ROM_REGION( 0x0600, REGION_PROMS, ROMREGION_DISPOSE )
1047 	ROM_LOAD( "0001a",  0x0000, 0x0200, CRC(a70ade3f) SHA1(f4a558b17767eed2683c768d1b441e75edcff967) )	/* microcode for growth renderer */
1048 	ROM_LOAD( "0001b",  0x0200, 0x0200, CRC(f4768b4d) SHA1(a506fa5386ab0ea2851ff1f8474d4bfc66deaa70) )
1049 	ROM_LOAD( "0001c",  0x0400, 0x0200, CRC(22a76ad4) SHA1(ce840c283bbd3a5f19dc8d91b19d1571eff51ff4) )
1050 ROM_END
1051 
1052 
1053 ROM_START( primraga )
1054 	ROM_REGION( 0x200000, REGION_CPU1, 0 )	/* 8*64k for 68000 code */
1055 	ROM_LOAD32_BYTE( "0044b", 0x000000, 0x80000, CRC(26139575) SHA1(22e59ab621d58e56969b64701fc59aec085193dd) )
1056 	ROM_LOAD32_BYTE( "0043b", 0x000001, 0x80000, CRC(928d2447) SHA1(9bbbdbf056a7b986d985d79be889b9876a710631) )
1057 	ROM_LOAD32_BYTE( "0042b", 0x000002, 0x80000, CRC(cd6062b9) SHA1(2973fb561ab68cd48ec132b6720c04d10bedfd19) )
1058 	ROM_LOAD32_BYTE( "0041b", 0x000003, 0x80000, CRC(3008f6f0) SHA1(45aac457b4584ee3bd3561e3b2e34e49aa61fbc5) )
1059 
1060 	ROM_REGION( 0x040000, REGION_CPU2, 0 )	/* RAM for TMS320C31 */
1061 
1062 	ROM_REGION32_LE( 0x200000, REGION_USER1, 0 )	/* TMS320C31 boot ROM */
1063 	ROM_LOAD32_BYTE( "0078a", 0x000000, 0x080000, CRC(91df8d8f) SHA1(6d361f88de604b8f11dd9bfe85ff18bcd322862d) )
1064 
1065 	ROM_REGION32_LE( 0x1000000, REGION_USER2, 0 )	/* TMS320C31 sound ROMs */
1066 	ROM_LOAD32_WORD( "0075",  0x400000, 0x200000, CRC(b685a88e) SHA1(998b8fe54971f6cd96e4c22b19e3831f29d8172d) )
1067 	ROM_LOAD32_WORD( "0077",  0x400002, 0x200000, CRC(3283cea8) SHA1(fb7333ca951053a56c501f2ce0eb197c8fcafaf7) )
1068 
1069 	ROM_REGION( 0x300000, REGION_GFX1, ROMREGION_DISPOSE )
1070 	ROM_LOAD( "0050a",  0x000000, 0x80000, CRC(66896e8f) SHA1(7675b24c15ca0608f11f2a7b8d70717adb10924c) ) /* playfield, planes 0-1 */
1071 	ROM_LOAD( "0051a",  0x100000, 0x80000, CRC(fb5b3e7b) SHA1(f43fe4b5c4bbea10da46b60c644f586fb391355d) ) /* playfield, planes 2-3 */
1072 	ROM_LOAD( "0052a",  0x200000, 0x80000, CRC(cbe38670) SHA1(0780e599007851f6d37cdd8c701d01cb1ae48b9d) ) /* playfield, planes 4-5 */
1073 
1074 	ROM_REGION( 0x020000, REGION_GFX2, ROMREGION_DISPOSE )
1075 	ROM_LOAD( "0045a", 0x000000, 0x20000, CRC(c8b39b1c) SHA1(836c0ccf96b2beccacf6d8ac23981fc2d1f09803) ) /* alphanumerics */
1076 
1077 	ROM_REGION16_BE( 0x2000000, REGION_GFX3, 0 )
1078 	ROM_LOAD16_BYTE( "0100a", 0x0000001, 0x080000, CRC(5299fb2a) SHA1(791378215ab6ffff3ab2ae7192ce9f88dae4090d) )
1079 	ROM_LOAD16_BYTE( "0101a", 0x0000000, 0x080000, CRC(3e234711) SHA1(6a9f19db2b4c8c34d3d7b4984206e3d5c4398d7f) )
1080 	ROM_LOAD16_BYTE( "0332",  0x0800001, 0x100000, CRC(610cfcb4) SHA1(bed1bd0d11c0a7cc48d020fc0acec34daf48c5ac) )
1081 	ROM_LOAD16_BYTE( "0333",  0x0800000, 0x100000, CRC(3320448e) SHA1(aef42328bf72fca5c04bfed1ea41100bb5aafeaa) )
1082 	ROM_LOAD16_BYTE( "0334",  0x0a00001, 0x100000, CRC(be3acb6f) SHA1(664cb4cd4d325577ab0cbe0cf48870a9f4706573) )
1083 	ROM_LOAD16_BYTE( "0335",  0x0a00000, 0x100000, CRC(e4f6e87a) SHA1(2a3f8ff46b289c25cd4ca2a1369b14613f48e964) )
1084 	ROM_LOAD16_BYTE( "0336",  0x0c00001, 0x100000, CRC(a78a8525) SHA1(69c3da4d45b0f09f5bdabcedd238b82efab48a70) )
1085 	ROM_LOAD16_BYTE( "0337",  0x0c00000, 0x100000, CRC(73fdd050) SHA1(63c67187953d2dab93a260e548ef5965e7cba4e8) )
1086 	ROM_LOAD16_BYTE( "0338",  0x0e00001, 0x100000, CRC(fa19cae6) SHA1(7d0560516971f32835329a17450c7561631a27d1) )
1087 	ROM_LOAD16_BYTE( "0339",  0x0e00000, 0x100000, CRC(e0cd1393) SHA1(0de59d04165d64320512936c194db19cca6455fd) )
1088 	ROM_LOAD16_BYTE( "0316",  0x1000001, 0x100000, CRC(9301c672) SHA1(a8971049c857ae283a95b257dd0d6aaff6d787cd) )
1089 	ROM_LOAD16_BYTE( "0317",  0x1000000, 0x100000, CRC(9e3b831a) SHA1(b799e57bea9522cb83f9aa7ea38a17b1d8273b8d) )
1090 	ROM_LOAD16_BYTE( "0318",  0x1200001, 0x100000, CRC(8523db5d) SHA1(f2476aa26b1a7cbe7510994d92eb209fda65593d) )
1091 	ROM_LOAD16_BYTE( "0319",  0x1200000, 0x100000, CRC(42f22e4b) SHA1(2a1a6f0a7aca7b7b64bce0bd54eb4cb23a2336b1) )
1092 	ROM_LOAD16_BYTE( "0320",  0x1400001, 0x100000, CRC(21369d13) SHA1(28e03595c098fd9bec6f7316180d17905a51a51b) )
1093 	ROM_LOAD16_BYTE( "0321",  0x1400000, 0x100000, CRC(3b7d498a) SHA1(804e9e1567bf97e8dae3b9444428254ced8b60da) )
1094 	ROM_LOAD16_BYTE( "0322",  0x1600001, 0x100000, CRC(05e9f407) SHA1(fa25a893d4cb805df02d7d12df4dbabefb3114a2) )
1095 	ROM_LOAD16_BYTE( "0323",  0x1600000, 0x100000, CRC(603f3bb6) SHA1(d7c22dc900d9edc36d8f211df67a206d14637fab) )
1096 	ROM_LOAD16_BYTE( "0324",  0x1800001, 0x100000, CRC(3c37769f) SHA1(ca0306a439949d2a0305cc0cf05808a58e84084c) )
1097 	ROM_LOAD16_BYTE( "0325",  0x1800000, 0x100000, CRC(f43321e3) SHA1(8bb4dd4a5d5400b17052d50dca9078211dc6b861) )
1098 	ROM_LOAD16_BYTE( "0326",  0x1a00001, 0x100000, CRC(63d4ccea) SHA1(340fced6998a8ae6fd285d8fe666f5f1e4b6bfaf) )
1099 	ROM_LOAD16_BYTE( "0327",  0x1a00000, 0x100000, CRC(9f4806d5) SHA1(76e9f1a47e7fa45e834fa8739528f1e3c54b14dc) )
1100 	ROM_LOAD16_BYTE( "0328",  0x1c00001, 0x100000, CRC(a08d73e1) SHA1(25a58777f15e9550111447b47a98762fd6bb498d) )
1101 	ROM_LOAD16_BYTE( "0329",  0x1c00000, 0x100000, CRC(eff3d2cd) SHA1(8532568b5fd91d2b738947e9cd575a4eb2a03be2) )
1102 	ROM_LOAD16_BYTE( "0330",  0x1e00001, 0x100000, CRC(7bf6bb8f) SHA1(f34bd8a9c7f95436a1c816badc59673cd2a6969a) )
1103 	ROM_LOAD16_BYTE( "0331",  0x1e00000, 0x100000, CRC(c6a64dad) SHA1(ee54514463ab61cbaef70da064cf5de591e5861f) )
1104 
1105 	ROM_REGION( 0x0600, REGION_PROMS, ROMREGION_DISPOSE )
1106 	ROM_LOAD( "0001a",  0x0000, 0x0200, CRC(a70ade3f) SHA1(f4a558b17767eed2683c768d1b441e75edcff967) )	/* microcode for growth renderer */
1107 	ROM_LOAD( "0001b",  0x0200, 0x0200, CRC(f4768b4d) SHA1(a506fa5386ab0ea2851ff1f8474d4bfc66deaa70) )
1108 	ROM_LOAD( "0001c",  0x0400, 0x0200, CRC(22a76ad4) SHA1(ce840c283bbd3a5f19dc8d91b19d1571eff51ff4) )
1109 ROM_END
1110 
1111 
1112 
1113 /*************************************
1114  *
1115  *	Driver initialization
1116  *
1117  *************************************/
1118 
1119 static WRITE32_HANDLER( tmek_pf_w )
1120 {
1121 	offs_t pc = activecpu_get_pc();
1122 
1123 	/* protected version */
1124 	if (pc == 0x2EB3C || pc == 0x2EB48)
1125 	{
1126 		logerror("%06X:PFW@%06X = %08X & %08X (src=%06X)\n", activecpu_get_pc(), 0xd72000 + offset*4, data, ~mem_mask, activecpu_get_reg(M68K_A4) - 2);
1127 		/* skip these writes to make more stuff visible */
1128 		return;
1129 	}
1130 
1131 	/* unprotected version */
1132 	if (pc == 0x25834 || pc == 0x25860)
1133 		logerror("%06X:PFW@%06X = %08X & %08X (src=%06X)\n", activecpu_get_pc(), 0xd72000 + offset*4, data, ~mem_mask, activecpu_get_reg(M68K_A3) - 2);
1134 
1135 	atarigen_playfield32_w(offset, data, mem_mask);
1136 }
1137 
DRIVER_INIT(tmek)1138 static DRIVER_INIT( tmek )
1139 {
1140 	atarigen_eeprom_default = NULL;
1141 	atarigt_is_primrage = 0;
1142 
1143 	cage_init(REGION_USER1, 0x4fad);
1144 	cage_set_irq_handler(cage_irq_callback);
1145 
1146 	/* setup protection */
1147 	protection_r = tmek_protection_r;
1148 	protection_w = tmek_protection_w;
1149 
1150 	/* temp hack */
1151 	install_mem_write32_handler(0, 0xd72000, 0xd75fff, tmek_pf_w);
1152 }
1153 
1154 
primrage_init_common(offs_t cage_speedup)1155 static void primrage_init_common(offs_t cage_speedup)
1156 {
1157 	atarigen_eeprom_default = NULL;
1158 	atarigt_is_primrage = 1;
1159 
1160 	cage_init(REGION_USER1, cage_speedup);
1161 	cage_set_irq_handler(cage_irq_callback);
1162 
1163 	/* install protection */
1164 	protection_r = primrage_protection_r;
1165 	protection_w = primrage_protection_w;
1166 }
1167 
DRIVER_INIT(primrage)1168 static DRIVER_INIT( primrage ) { primrage_init_common(0x42f2); }
DRIVER_INIT(primraga)1169 static DRIVER_INIT( primraga ) { primrage_init_common(0x48a4); }
1170 
1171 
1172 
1173 /*************************************
1174  *
1175  *	Game driver(s)
1176  *
1177  *************************************/
1178 
1179 GAMEX( 1994, tmek,     0,        atarigt,  tmek,     tmek,     ROT0, "Atari Games", "T-MEK", GAME_UNEMULATED_PROTECTION )
1180 GAME ( 1994, tmekprot, tmek,     atarigt,  tmek,     tmek,     ROT0, "Atari Games", "T-MEK (prototype)" )
1181 GAMEX( 1994, primrage, 0,        atarigt,  primrage, primrage, ROT0, "Atari Games", "Primal Rage (version 2.3)", GAME_UNEMULATED_PROTECTION )
1182 GAMEX( 1994, primraga, primrage, atarigt,  primrage, primraga, ROT0, "Atari Games", "Primal Rage (version 2.0)", GAME_UNEMULATED_PROTECTION )
1183