1 /***************************************************************************
2 
3 	Atari GX2 hardware
4 
5 	driver by Aaron Giles
6 
7 	Games supported:
8 		* Space Lords (1992) [2 sets]
9 		* Moto Frenzy (1992)
10 		* Road Riot's Revenge Rally (1993)
11 
12 	Known bugs:
13 		* protection devices unknown
14 
15 ****************************************************************************
16 
17 	Memory map (TBA)
18 
19 ***************************************************************************/
20 
21 
22 #include "driver.h"
23 #include "machine/atarigen.h"
24 #include "sndhrdw/atarijsa.h"
25 #include "vidhrdw/atarirle.h"
26 #include "atarigx2.h"
27 
28 
29 
30 /*************************************
31  *
32  *	Statics
33  *
34  *************************************/
35 
36 #if 0
37 static UINT8 		which_input;
38 #endif
39 static data32_t *	mo_command;
40 static data32_t *	protection_base;
41 
42 
43 
44 /*************************************
45  *
46  *	Initialization
47  *
48  *************************************/
49 
update_interrupts(void)50 static void update_interrupts(void)
51 {
52 	int newstate = 0;
53 
54 	if (atarigen_video_int_state)
55 		newstate = 4;
56 	if (atarigen_sound_int_state)
57 		newstate = 5;
58 
59 	if (newstate)
60 		cpu_set_irq_line(0, newstate, ASSERT_LINE);
61 	else
62 		cpu_set_irq_line(0, 7, CLEAR_LINE);
63 }
64 
65 
MACHINE_INIT(atarigx2)66 static MACHINE_INIT( atarigx2 )
67 {
68 	atarigen_eeprom_reset();
69 	atarigen_interrupt_reset(update_interrupts);
70 	atarigen_scanline_timer_reset(atarigx2_scanline_update, 8);
71 	atarijsa_reset();
72 }
73 
74 
75 
76 /*************************************
77  *
78  *	I/O read dispatch.
79  *
80  *************************************/
81 
READ32_HANDLER(special_port2_r)82 static READ32_HANDLER( special_port2_r )
83 {
84 	int temp = readinputport(2);
85 	if (atarigen_cpu_to_sound_ready) temp ^= 0x0020;
86 	if (atarigen_sound_to_cpu_ready) temp ^= 0x0010;
87 	temp ^= 0x0008;		/* A2D.EOC always high for now */
88 	return (temp << 16) | temp;
89 }
90 
91 
READ32_HANDLER(special_port3_r)92 static READ32_HANDLER( special_port3_r )
93 {
94 	int temp = readinputport(3);
95 	return (temp << 16) | temp;
96 }
97 
98 #if 0
99 static WRITE32_HANDLER( a2d_select_w )
100 {
101 	if (ACCESSING_MSW32)
102 		which_input = offset * 2;
103 	if (ACCESSING_LSW32)
104 		which_input = offset * 2 + 1;
105 }
106 #endif
107 
READ32_HANDLER(a2d_data_r)108 static READ32_HANDLER( a2d_data_r )
109 {
110 	/* otherwise, assume it's hydra */
111 	switch (offset)
112 	{
113 		case 0:
114 			return (readinputport(5) << 24) | (readinputport(6) << 8);
115 		case 1:
116 			return (readinputport(7) << 24) | (readinputport(8) << 8);
117 	}
118 
119 	return 0;
120 }
121 
122 
WRITE32_HANDLER(latch_w)123 static WRITE32_HANDLER( latch_w )
124 {
125 	/*
126 		D13 = 68.DISA
127 		D12 = ERASE
128 		D11 = /MOGO
129 		D8  = VCR
130 		D5  = /XRESET
131 		D4  = /SNDRES
132 		D3  = CC.L
133 		D0  = CC.R
134 	*/
135 
136 	log_cb(RETRO_LOG_DEBUG, LOGPRE "latch_w(%08X) & %08X\n", data, ~mem_mask);
137 
138 	/* upper byte */
139 	if (!(mem_mask & 0xff000000))
140 	{
141 		/* bits 13-11 are the MO control bits */
142 		atarirle_control_w(0, (data >> 27) & 7);
143 	}
144 
145 	/* lower byte */
146 	if (!(mem_mask & 0x00ff0000))
147 		cpu_set_reset_line(1, (data & 0x100000) ? CLEAR_LINE : ASSERT_LINE);
148 }
149 
150 
WRITE32_HANDLER(mo_command_w)151 static WRITE32_HANDLER( mo_command_w )
152 {
153 	COMBINE_DATA(mo_command);
154 	if (ACCESSING_LSW32)
155 		atarirle_command_w(0, ((data & 0xffff) == 2) ? ATARIRLE_COMMAND_CHECKSUM : ATARIRLE_COMMAND_DRAW);
156 }
157 
158 
159 
160 /*************************************
161  *
162  *	Protection?
163  *
164  *************************************/
165 
166 static data16_t last_write;
167 static data16_t last_write_offset;
168 
WRITE32_HANDLER(atarigx2_protection_w)169 static WRITE32_HANDLER( atarigx2_protection_w )
170 {
171 	{
172 		int pc = activecpu_get_previouspc();
173 /*		if (pc == 0x11cbe || pc == 0x11c30)*/
174 /*			log_cb(RETRO_LOG_DEBUG, LOGPRE "%06X:Protection W@%04X = %04X  (result to %06X)\n", pc, offset, data, activecpu_get_reg(M68K_A2));*/
175 /*		else*/
176 		if (ACCESSING_MSW32)
177 			log_cb(RETRO_LOG_DEBUG, LOGPRE "%06X:Protection W@%04X = %04X\n", pc, offset * 4, data >> 16);
178 		else
179 			log_cb(RETRO_LOG_DEBUG, LOGPRE "%06X:Protection W@%04X = %04X\n", pc, offset * 4 + 2, data);
180 	}
181 
182 	COMBINE_DATA(&protection_base[offset]);
183 
184 	if (ACCESSING_MSW32)
185 	{
186 		last_write = protection_base[offset] >> 16;
187 		last_write_offset = offset*2;
188 	}
189 	if (ACCESSING_LSW32)
190 	{
191 		last_write = protection_base[offset] & 0xffff;
192 		last_write_offset = offset*2+1;
193 	}
194 }
195 
READ32_HANDLER(atarigx2_protection_r)196 static READ32_HANDLER( atarigx2_protection_r )
197 {
198 	static const UINT32 lookup_table[][2] =
199 	{
200 		/* sprite flipping*/
201 		{ 0x0000e54f, 0<<11 },
202 		{ 0x00024602, 5<<11 },
203 		{ 0x0004ec02, 7<<11 },
204 		{ 0x00064ddb, 7<<11 },
205 		{ 0x00086016, 0<<11 },
206 		{ 0x000ad909, 1<<11 },
207 		{ 0x000cf3cd, 3<<11 },
208 		{ 0x000e0a0f, 3<<11 },
209 
210 		{ 0x00001b23, 0<<11 },
211 		{ 0x0002948b, 5<<11 },
212 		{ 0x0004a826, 7<<11 },
213 		{ 0x0006f6eb, 7<<11 },
214 		{ 0x00085031, 0<<11 },
215 		{ 0x000a798f, 1<<11 },
216 		{ 0x000c708e, 3<<11 },
217 		{ 0x000e1bf8, 3<<11 },
218 
219 		{ 0x00000241, 0<<11 },
220 		{ 0x00020892, 5<<11 },
221 		{ 0x0004e0dc, 7<<11 },
222 		{ 0x00066288, 7<<11 },
223 		{ 0x0008294a, 0<<11 },
224 		{ 0x000a31dc, 1<<11 },
225 		{ 0x000c4413, 3<<11 },
226 		{ 0x000e31b6, 3<<11 },
227 
228 		{ 0x000097c1, 0<<11 },
229 		{ 0x00020e6b, 5<<11 },
230 		{ 0x00042f77, 7<<11 },
231 		{ 0x00068256, 7<<11 },
232 		{ 0x0008317f, 0<<11 },
233 		{ 0x000af594, 1<<11 },
234 		{ 0x000c0a72, 3<<11 },
235 		{ 0x000ea856, 3<<11 },
236 
237 		{ 0x0000ebd6, 0<<11 },
238 		{ 0x0002e22c, 5<<11 },
239 		{ 0x0004bca8, 7<<11 },
240 		{ 0x000688dd, 7<<11 },
241 		{ 0x00088556, 0<<11 },
242 		{ 0x000ad37f, 1<<11 },
243 		{ 0x000ca6d4, 3<<11 },
244 		{ 0x000e88c3, 3<<11 },
245 
246 		{ 0x00007d37, 0<<11 },
247 		{ 0x00027b45, 5<<11 },
248 		{ 0x00045981, 7<<11 },
249 		{ 0x0006d53c, 7<<11 },
250 		{ 0x0008223e, 0<<11 },
251 		{ 0x000aaee3, 1<<11 },
252 		{ 0x000cf4c8, 3<<11 },
253 		{ 0x000e1064, 3<<11 },
254 
255 
256 		/* initialization*/
257 
258 		{ 0x00000241, 0x0000 },
259 		{ 0x0002F1CC, 0x0000 },
260 		{ 0x00043996, 0x7707 },
261 		{ 0x0006451F, 0x3096 },
262 		{ 0x0008BA02, 0xee0e },
263 		{ 0x000A78F4, 0x612c },
264 		{ 0x000CB890, 0x9909 },
265 		{ 0x000EF8A2, 0x51ba },
266 		{ 0x00105C79, 0x076d },
267 		{ 0x00121D13, 0xc419 },
268 		{ 0x00148CB8, 0x706a },
269 		{ 0x00162C65, 0xf48f },
270 		{ 0x0018FABB, 0xe963 },
271 		{ 0x001A2A33, 0xa535 },
272 		{ 0x001CF0DD, 0x9e64 },
273 		{ 0x001E8C14, 0x95a3 },
274 		{ 0x0020F239, 0x0edb },
275 		{ 0x00228E87, 0x8832 },
276 		{ 0x0024B022, 0x79dc },
277 		{ 0x00261D55, 0xb8a4 },
278 		{ 0x002889AB, 0xe0d5 },
279 		{ 0x002A935B, 0xe91e },
280 		{ 0x002C7BAE, 0x97d2 },
281 		{ 0x002E39D1, 0xd988 },
282 		{ 0x0030E44E, 0x09b6 },
283 		{ 0x00321765, 0x4c2b },
284 		{ 0x003487FF, 0x7eb1 },
285 		{ 0x003658C2, 0x7cbd },
286 		{ 0x00381E83, 0xe7b8 },
287 		{ 0x003A77CD, 0x2d07 },
288 		{ 0x003CCAE4, 0x90bf },
289 		{ 0x003EC0CB, 0x1d91 },
290 		{ 0x00409494, 0x1db7 },
291 		{ 0x004289EA, 0x1064 },
292 		{ 0x004458F1, 0x6ab0 },
293 		{ 0x00468029, 0x20f2 },
294 		{ 0x0048491E, 0xf3b9 },
295 		{ 0x004AB99D, 0x7148 },
296 		{ 0x004C1C9F, 0x84be },
297 		{ 0x004E2764, 0x41de },
298 		{ 0x00507ED9, 0x1ada },
299 		{ 0x005215B4, 0xd47d },
300 		{ 0x00547C85, 0x6ddd },
301 		{ 0x0056B74A, 0xe4eb },
302 		{ 0x005852C4, 0xf4d4 },
303 		{ 0x005AC949, 0xb551 },
304 		{ 0x005CD796, 0x83d3 },
305 		{ 0x005E9A08, 0x85c7 },
306 		{ 0x0060F0A5, 0x136c },
307 		{ 0x00629CD1, 0x9856 },
308 		{ 0x0064D3BB, 0x646b },
309 		{ 0x0066DF91, 0xa8c0 },
310 		{ 0x0068E892, 0xfd62 },
311 		{ 0x006AA1A7, 0xf97a },
312 		{ 0x006C2D39, 0x8a65 },
313 		{ 0x006E5928, 0xc9ec },
314 		{ 0x0070E2F1, 0x1401 },
315 		{ 0x00720C3A, 0x5c4f },
316 		{ 0x0074EBF3, 0x6306 },
317 		{ 0x00763113, 0x6cd9 },
318 		{ 0x00788C2A, 0xfa0f },
319 		{ 0x007A9E4B, 0x3d63 },
320 		{ 0x007C021D, 0x8d08 },
321 		{ 0x007E5B2C, 0x0df5 },
322 		{ 0x008016C3, 0x3b6e },
323 		{ 0x008211C5, 0x20c8 },
324 		{ 0x0084BED3, 0x4c69 },
325 		{ 0x00867F09, 0x105e },
326 		{ 0x00888CA5, 0xd560 },
327 		{ 0x008A7AA6, 0x41e4 },
328 		{ 0x008CE2C3, 0xa267 },
329 		{ 0x008EBA54, 0x7172 },
330 		{ 0x0090F0D1, 0x3c03 },
331 		{ 0x0092635E, 0xe4d1 },
332 		{ 0x0094AE35, 0x4b04 },
333 		{ 0x00969B70, 0xd447 },
334 		{ 0x00989794, 0xd20d },
335 		{ 0x009AC1CD, 0x85fd },
336 		{ 0x009CA4AA, 0xa50a },
337 		{ 0x009E265A, 0xb56b },
338 		{ 0x00A0D6FC, 0x35b5 },
339 		{ 0x00A24182, 0xa8fa },
340 		{ 0x00A405F7, 0x42b2 },
341 		{ 0x00A6C9BE, 0x986c },
342 		{ 0x00A8E888, 0xdbbb },
343 		{ 0x00AAA365, 0xc9d6 },
344 		{ 0x00AC9993, 0xacbc },
345 		{ 0x00AE3F72, 0xf940 },
346 		{ 0x00B03288, 0x32d8 },
347 		{ 0x00B2F67D, 0x6ce3 },
348 		{ 0x00B440B2, 0x45df },
349 		{ 0x00B67DA8, 0x5c75 },
350 		{ 0x00B89694, 0xdcd6 },
351 		{ 0x00BA29D0, 0x0dcf },
352 		{ 0x00BCED90, 0xabd1 },
353 		{ 0x00BE9524, 0x3d59 },
354 		{ 0x00C0F2B3, 0x26d9 },
355 		{ 0x00C240C2, 0x30ac },
356 		{ 0x00C4BF06, 0x51de },
357 		{ 0x00C68352, 0x003a },
358 		{ 0x00C868F8, 0xc8d7 },
359 		{ 0x00CAA9AF, 0x5180 },
360 		{ 0x00CC25DE, 0xbfd0 },
361 		{ 0x00CE8F3F, 0x6116 },
362 		{ 0x00D00D11, 0x21b4 },
363 		{ 0x00D216C8, 0xf4b5 },
364 		{ 0x00D4EF51, 0x56b3 },
365 		{ 0x00D61327, 0xc423 },
366 		{ 0x00D802EB, 0xcfba },
367 		{ 0x00DA2BD6, 0x9599 },
368 		{ 0x00DCFDB5, 0xb8bd },
369 		{ 0x00DECE09, 0xa50f },
370 		{ 0x00E037C5, 0x2802 },
371 		{ 0x00E2ECA7, 0xb89e },
372 		{ 0x00E40330, 0x5f05 },
373 		{ 0x00E6ACE5, 0x8808 },
374 		{ 0x00E8390C, 0xc60c },
375 		{ 0x00EAB30C, 0xd9b2 },
376 		{ 0x00ECB932, 0xb10b },
377 		{ 0x00EEEBB1, 0xe924 },
378 		{ 0x00F0B8CF, 0x2f6f },
379 		{ 0x00F23F66, 0x7c87 },
380 		{ 0x00F440E4, 0x5868 },
381 		{ 0x00F63401, 0x4c11 },
382 		{ 0x00F86F6F, 0xc161 },
383 		{ 0x00FAAD62, 0x1dab },
384 		{ 0x00FC0C91, 0xb666 },
385 		{ 0x00FE8189, 0x2d3d },
386 		{ 0x01000712, 0x76dc },
387 		{ 0x010208E2, 0x4190 },
388 		{ 0x01044C60, 0x01db },
389 		{ 0x0106254D, 0x7106 },
390 		{ 0x01081649, 0x98d2 },
391 		{ 0x010AB069, 0x20bc },
392 		{ 0x010C2BE2, 0xefd5 },
393 		{ 0x010E1B1E, 0x102a },
394 		{ 0x0110C888, 0x71b1 },
395 		{ 0x0112506A, 0x8589 },
396 		{ 0x0114E064, 0x06b6 },
397 		{ 0x01161632, 0xb51f },
398 		{ 0x0118A299, 0x9fbf },
399 		{ 0x011A94DB, 0xe4a5 },
400 		{ 0x011C0E71, 0xe8b8 },
401 		{ 0x011E9EF3, 0xd433 },
402 		{ 0x012041FA, 0x7807 },
403 		{ 0x0122D26A, 0xc9a2 },
404 		{ 0x01246AE1, 0x0f00 },
405 		{ 0x0126B6A8, 0xf934 },
406 		{ 0x012836BC, 0x9609 },
407 		{ 0x012AEDE2, 0xa88e },
408 		{ 0x012CF8F2, 0xe10e },
409 		{ 0x012E7530, 0x9818 },
410 		{ 0x0130CE06, 0x7f6a },
411 		{ 0x0132490B, 0x0dbb },
412 		{ 0x0134DCBE, 0x086d },
413 		{ 0x01363A41, 0x3d2d },
414 		{ 0x0138835D, 0x9164 },
415 		{ 0x013A1970, 0x6c97 },
416 		{ 0x013CCB58, 0xe663 },
417 		{ 0x013E514E, 0x5c01 },
418 		{ 0x01401717, 0x6b6b },
419 		{ 0x01428305, 0x51f4 },
420 		{ 0x0144A4CC, 0x1c6c },
421 		{ 0x014675E6, 0x6162 },
422 		{ 0x0148EBBC, 0x8565 },
423 		{ 0x014AED25, 0x30d8 },
424 		{ 0x014C860E, 0xf262 },
425 		{ 0x014EE316, 0x004e },
426 		{ 0x01509004, 0x6c06 },
427 		{ 0x0152C1C0, 0x95ed },
428 		{ 0x0154F096, 0x1b01 },
429 		{ 0x0156ED9B, 0xa57b },
430 		{ 0x01587C24, 0x8208 },
431 		{ 0x015A5DA7, 0xf4c1 },
432 		{ 0x015CFF4E, 0xf50f },
433 		{ 0x015E69E6, 0xc457 },
434 		{ 0x0160A24B, 0x65b0 },
435 		{ 0x0162CDF1, 0xd9c6 },
436 		{ 0x0164AD72, 0x12b7 },
437 		{ 0x01660309, 0xe950 },
438 		{ 0x0168E65E, 0x8bbe },
439 		{ 0x016A31D4, 0xb8ea },
440 		{ 0x016C3361, 0xfcb9 },
441 		{ 0x016E8E02, 0x887c },
442 		{ 0x01703638, 0x62dd },
443 		{ 0x0172EF1D, 0x1ddf },
444 		{ 0x0174E345, 0x15da },
445 		{ 0x0176029F, 0x2d49 },
446 		{ 0x01782EF0, 0x8cd3 },
447 		{ 0x017A7D43, 0x7cf3 },
448 		{ 0x017CA201, 0xfbd4 },
449 		{ 0x017E0360, 0x4c65 },
450 		{ 0x0180E8D8, 0x4db2 },
451 		{ 0x01820C2E, 0x6158 },
452 		{ 0x0184D83C, 0x3ab5 },
453 		{ 0x01867A8F, 0x51ce },
454 		{ 0x0188B382, 0xa3bc },
455 		{ 0x018AD630, 0x0074 },
456 		{ 0x018C7A47, 0xd4bb },
457 		{ 0x018EE93A, 0x30e2 },
458 		{ 0x019039FF, 0x4adf },
459 		{ 0x01925D77, 0xa541 },
460 		{ 0x0194C33D, 0x3dd8 },
461 		{ 0x019624B0, 0x95d7 },
462 		{ 0x01984FAA, 0xa4d1 },
463 		{ 0x019AF889, 0xc46d },
464 		{ 0x019C6DE5, 0xd3d6 },
465 		{ 0x019E06D4, 0xf4fb },
466 		{ 0x01A04BB4, 0x4369 },
467 		{ 0x01A2827B, 0xe96a },
468 		{ 0x01A4490A, 0x346e },
469 		{ 0x01A68ADA, 0xd9fc },
470 		{ 0x01A8D44B, 0xad67 },
471 		{ 0x01AAEB4A, 0x8846 },
472 		{ 0x01AC9BE5, 0xda60 },
473 		{ 0x01AE44F3, 0xb8d0 },
474 		{ 0x01B04E07, 0x4404 },
475 		{ 0x01B27E24, 0x2d73 },
476 		{ 0x01B47297, 0x3303 },
477 		{ 0x01B6E409, 0x1de5 },
478 		{ 0x01B8FFBC, 0xaa0a },
479 		{ 0x01BA5CD2, 0x4c5f },
480 		{ 0x01BCDF00, 0xdd0d },
481 		{ 0x01BEF748, 0x7cc9 },
482 		{ 0x01C0A6B1, 0x5005 },
483 		{ 0x01C2030E, 0x713c },
484 		{ 0x01C46FE5, 0x2702 },
485 		{ 0x01C65493, 0x41aa },
486 		{ 0x01C840BC, 0xbe0b },
487 		{ 0x01CA8B3E, 0x1010 },
488 		{ 0x01CCD7C4, 0xc90c },
489 		{ 0x01CE1A9C, 0x2086 },
490 		{ 0x01D015E6, 0x5768 },
491 		{ 0x01D272E4, 0xb525 },
492 		{ 0x01D4B256, 0x206f },
493 		{ 0x01D6CB39, 0x8583 },
494 		{ 0x01D867DA, 0xb966 },
495 		{ 0x01DA73ED, 0xd409 },
496 		{ 0x01DC6735, 0xce61 },
497 		{ 0x01DEAA0E, 0xe49f },
498 		{ 0x01E01B49, 0x5ede },
499 		{ 0x01E20CFD, 0xf90e },
500 		{ 0x01E415C3, 0x29d9 },
501 		{ 0x01E60EA5, 0xc998 },
502 		{ 0x01E87809, 0xb0d0 },
503 		{ 0x01EA455D, 0x9822 },
504 		{ 0x01EC5A0B, 0xc7d7 },
505 		{ 0x01EEAFDE, 0xa8b4 },
506 		{ 0x01F0A050, 0x59b3 },
507 		{ 0x01F2A751, 0x3d17 },
508 		{ 0x01F4EEF5, 0x2eb4 },
509 		{ 0x01F643FC, 0x0d81 },
510 		{ 0x01F8B9A0, 0xb7bd },
511 		{ 0x01FAA071, 0x5c3b },
512 		{ 0x01FC0340, 0xc0ba },
513 		{ 0x01FECF88, 0x6cad },
514 		{ 0x0200ED43, 0xedb8 },
515 		{ 0x02028222, 0x8320 },
516 		{ 0x020412A4, 0x9abf },
517 		{ 0x0206FC35, 0xb3b6 },
518 		{ 0x020870E9, 0x03b6 },
519 		{ 0x020AA719, 0xe20c },
520 		{ 0x020CBEAE, 0x74b1 },
521 		{ 0x020E50D4, 0xd29a },
522 		{ 0x0210BCA5, 0xead5 },
523 		{ 0x02127B20, 0x4739 },
524 		{ 0x02149187, 0x9dd2 },
525 		{ 0x021609C1, 0x77af },
526 		{ 0x02180B25, 0x04db },
527 		{ 0x021A24CA, 0x2615 },
528 		{ 0x021C1E83, 0x73dc },
529 		{ 0x021EEEF9, 0x1683 },
530 		{ 0x022042DD, 0xe363 },
531 		{ 0x02226C65, 0x0b12 },
532 		{ 0x0224347F, 0x9464 },
533 		{ 0x02266615, 0x3b84 },
534 		{ 0x02280966, 0x0d6d },
535 		{ 0x022A1FEB, 0x6a3e },
536 		{ 0x022CCA04, 0x7a6a },
537 		{ 0x022E9490, 0x5aa8 },
538 		{ 0x0230185F, 0xe40e },
539 		{ 0x023297E3, 0xcf0b },
540 		{ 0x02345336, 0x9309 },
541 		{ 0x02364610, 0xff9d },
542 		{ 0x0238C709, 0x0a00 },
543 		{ 0x023A559B, 0xae27 },
544 		{ 0x023CC2C8, 0x7d07 },
545 		{ 0x023E23E3, 0x9eb1 },
546 		{ 0x0240EEA8, 0xf00f },
547 		{ 0x0242C980, 0x9344 },
548 		{ 0x02448D9B, 0x8708 },
549 		{ 0x02464411, 0xa3d2 },
550 		{ 0x0248A96F, 0x1e01 },
551 		{ 0x024A6EB8, 0xf268 },
552 		{ 0x024C025A, 0x6906 },
553 		{ 0x024E7D2A, 0xc2fe },
554 		{ 0x0250DCBA, 0xf762 },
555 		{ 0x02526DCA, 0x575d },
556 		{ 0x0254063E, 0x8065 },
557 		{ 0x0256CEDB, 0x67cb },
558 		{ 0x0258106A, 0x196c },
559 		{ 0x025A39AC, 0x3671 },
560 		{ 0x025CB664, 0x6e6b },
561 		{ 0x025E5CEB, 0x06e7 },
562 		{ 0x02609C06, 0xfed4 },
563 		{ 0x0262E82F, 0x1b76 },
564 		{ 0x0264702B, 0x89d3 },
565 		{ 0x026638E8, 0x2be0 },
566 		{ 0x02680576, 0x10da },
567 		{ 0x026A06A9, 0x7a5a },
568 		{ 0x026CDF6E, 0x67dd },
569 		{ 0x026EEF02, 0x4acc },
570 		{ 0x0270E35B, 0xf9b9 },
571 		{ 0x02729A9A, 0xdf6f },
572 		{ 0x0274E451, 0x8ebe },
573 		{ 0x0276D343, 0xeff9 },
574 		{ 0x027819F8, 0x17b7 },
575 		{ 0x027A0956, 0xbe43 },
576 		{ 0x027C0DB0, 0x60b0 },
577 		{ 0x027E5D80, 0x8ed5 },
578 		{ 0x02806C72, 0xd6d6 },
579 		{ 0x0282A80F, 0xa3e8 },
580 		{ 0x0284E5EC, 0xa1d1 },
581 		{ 0x02867DCD, 0x937e },
582 		{ 0x02882667, 0x38d8 },
583 		{ 0x028AEBCD, 0xc2c4 },
584 		{ 0x028C668D, 0x4fdf },
585 		{ 0x028E5840, 0xf252 },
586 		{ 0x0290CB93, 0xd1bb },
587 		{ 0x02921C8F, 0x67f1 },
588 		{ 0x02944E2B, 0xa6bc },
589 		{ 0x02961785, 0x5767 },
590 		{ 0x0298E2C3, 0x3fb5 },
591 		{ 0x029ABF47, 0x06dd },
592 		{ 0x029CED9E, 0x48b2 },
593 		{ 0x029E5173, 0x364b },
594 		{ 0x02A0004A, 0xd80d },
595 		{ 0x02A25437, 0x2bda },
596 		{ 0x02A49B8D, 0xaf0a },
597 		{ 0x02A664A0, 0x1b4c },
598 		{ 0x02A8AE40, 0x3603 },
599 		{ 0x02AAE51F, 0x4af6 },
600 		{ 0x02AC80FA, 0x4104 },
601 		{ 0x02AE9687, 0x7a60 },
602 		{ 0x02B0CD25, 0xdf60 },
603 		{ 0x02B2BCB3, 0xefc3 },
604 		{ 0x02B4CD8D, 0xa967 },
605 		{ 0x02B6FFFC, 0xdf55 },
606 		{ 0x02B81F78, 0x316e },
607 		{ 0x02BA0E8B, 0x8eef },
608 		{ 0x02BC1A89, 0x4669 },
609 		{ 0x02BEBA0D, 0xbe79 },
610 		{ 0x02C0587B, 0xcb61 },
611 		{ 0x02C2901E, 0xb38c },
612 		{ 0x02C4F808, 0xbc66 },
613 		{ 0x02C65F98, 0x931a },
614 		{ 0x02C89C62, 0x256f },
615 		{ 0x02CA03F9, 0xd2a0 },
616 		{ 0x02CCA4C0, 0x5268 },
617 		{ 0x02CEF1DD, 0xe236 },
618 		{ 0x02D0707E, 0xcc0c },
619 		{ 0x02D222FE, 0x7795 },
620 		{ 0x02D4F00E, 0xbb0b },
621 		{ 0x02D679FC, 0x4703 },
622 		{ 0x02D89581, 0x2202 },
623 		{ 0x02DADF2F, 0x16b9 },
624 		{ 0x02DCFBCE, 0x5505 },
625 		{ 0x02DE2E69, 0x262f },
626 		{ 0x02E069E7, 0xc5ba },
627 		{ 0x02E20F8F, 0x3bbe },
628 		{ 0x02E42E77, 0xb2bd },
629 		{ 0x02E6969F, 0x0b28 },
630 		{ 0x02E82D59, 0x2bb4 },
631 		{ 0x02EA14FC, 0x5a92 },
632 		{ 0x02EC879C, 0x5cb3 },
633 		{ 0x02EEDEB1, 0x6a04 },
634 		{ 0x02F0A9CB, 0xc2d7 },
635 		{ 0x02F226F7, 0xffa7 },
636 		{ 0x02F40DF5, 0xb5d0 },
637 		{ 0x02F608E7, 0xcf31 },
638 		{ 0x02F87608, 0x2cd9 },
639 		{ 0x02FA507C, 0x9e8b },
640 		{ 0x02FC2A3F, 0x58de },
641 		{ 0x02FEC003, 0xae1d },
642 		{ 0x03007959, 0x9b64 },
643 		{ 0x0302181A, 0xc2b0 },
644 		{ 0x03045C87, 0xec63 },
645 		{ 0x0306F6E4, 0xf226 },
646 		{ 0x0308E603, 0x756a },
647 		{ 0x030A1562, 0xa39c },
648 		{ 0x030CF677, 0x026d },
649 		{ 0x030E56FD, 0x930a },
650 		{ 0x0310731C, 0x9c09 },
651 		{ 0x0312CA4E, 0x06a9 },
652 		{ 0x03148639, 0xeb0e },
653 		{ 0x0316140E, 0x363f },
654 		{ 0x0318EB2F, 0x7207 },
655 		{ 0x031A13D3, 0x6785 },
656 		{ 0x031C8940, 0x0500 },
657 		{ 0x031E5AF7, 0x5713 },
658 		{ 0x0320557E, 0x95bf },
659 		{ 0x0322982F, 0x4a82 },
660 		{ 0x0324B60C, 0xe2b8 },
661 		{ 0x0326A26C, 0x7a14 },
662 		{ 0x0328D0F4, 0x7bb1 },
663 		{ 0x032A9258, 0x2bae },
664 		{ 0x032CEAAE, 0x0cb6 },
665 		{ 0x032EF0B3, 0x1b38 },
666 		{ 0x0330E489, 0x92d2 },
667 		{ 0x03322BC0, 0x8e9b },
668 		{ 0x0334E8E2, 0xe5d5 },
669 		{ 0x0336CB76, 0xbe0d },
670 		{ 0x03380957, 0x7cdc },
671 		{ 0x033AEEA9, 0xefb7 },
672 		{ 0x033C0D68, 0x0bdb },
673 		{ 0x033E26ED, 0xdf21 },
674 		{ 0x0340E5BA, 0x86d3 },
675 		{ 0x0342445C, 0xd2d4 },
676 		{ 0x03444287, 0xf1d4 },
677 		{ 0x03463A60, 0xe242 },
678 		{ 0x0348B680, 0x68dd },
679 		{ 0x034A68AD, 0xb3f8 },
680 		{ 0x034C283D, 0x1fda },
681 		{ 0x034EF68D, 0x836e },
682 		{ 0x03509056, 0x81be },
683 		{ 0x03524E05, 0x16cd },
684 		{ 0x0354B3B5, 0xf6b9 },
685 		{ 0x0356A11D, 0x265b },
686 		{ 0x0358049C, 0x6fb0 },
687 		{ 0x035AD934, 0x77e1 },
688 		{ 0x035C07CD, 0x18b7 },
689 		{ 0x035E9F07, 0x4777 },
690 		{ 0x0360959C, 0x8808 },
691 		{ 0x0362957A, 0x5ae6 },
692 		{ 0x036400C5, 0xff0f },
693 		{ 0x0366E520, 0x6a70 },
694 		{ 0x0368E728, 0x6606 },
695 		{ 0x036A321D, 0x3bca },
696 		{ 0x036C0BF2, 0x1101 },
697 		{ 0x036EC1A9, 0x0b5c },
698 		{ 0x037034E7, 0x8f65 },
699 		{ 0x0372D30B, 0x9eff },
700 		{ 0x0374056C, 0xf862 },
701 		{ 0x0376AB8C, 0xae69 },
702 		{ 0x03786234, 0x616b },
703 		{ 0x037AF5F5, 0xffd3 },
704 		{ 0x037CDD2B, 0x166c },
705 		{ 0x037EE8D2, 0xcf45 },
706 		{ 0x03805144, 0xa00a },
707 		{ 0x03826A5C, 0xe278 },
708 		{ 0x03840DE5, 0xd70d },
709 		{ 0x03869747, 0xd2ee },
710 		{ 0x03888E63, 0x4e04 },
711 		{ 0x038A12F2, 0x8354 },
712 		{ 0x038C597B, 0x3903 },
713 		{ 0x038EB704, 0xb3c2 },
714 		{ 0x03902359, 0xa767 },
715 		{ 0x0392FB74, 0x2661 },
716 		{ 0x0394521A, 0xd060 },
717 		{ 0x03962F46, 0x16f7 },
718 		{ 0x0398F591, 0x4969 },
719 		{ 0x039A6F1A, 0x474d },
720 		{ 0x039CA694, 0x3e6e },
721 		{ 0x039E823F, 0x77db },
722 		{ 0x03A02FF5, 0xaed1 },
723 		{ 0x03A253D2, 0x6a4a },
724 		{ 0x03A4BE72, 0xd9d6 },
725 		{ 0x03A65896, 0x5adc },
726 		{ 0x03A8BBAD, 0x40df },
727 		{ 0x03AA21D8, 0x0b66 },
728 		{ 0x03AC77E9, 0x37d8 },
729 		{ 0x03AEF0FB, 0x3bf0 },
730 		{ 0x03B0DB09, 0xa9bc },
731 		{ 0x03B211E7, 0xae53 },
732 		{ 0x03B4DF01, 0xdebb },
733 		{ 0x03B667F3, 0x9ec5 },
734 		{ 0x03B827ED, 0x47b2 },
735 		{ 0x03BA1787, 0xcf7f },
736 		{ 0x03BCE3A9, 0x30b5 },
737 		{ 0x03BE34A1, 0xffe9 },
738 		{ 0x03C02323, 0xbdbd },
739 		{ 0x03C2370F, 0xf21c },
740 		{ 0x03C4EBDC, 0xcaba },
741 		{ 0x03C62A95, 0xc28a },
742 		{ 0x03C8301E, 0x53b3 },
743 		{ 0x03CA4EB5, 0x9330 },
744 		{ 0x03CCE18C, 0x24b4 },
745 		{ 0x03CE1646, 0xa3a6 },
746 		{ 0x03D07157, 0xbad0 },
747 		{ 0x03D2B0B7, 0x3605 },
748 		{ 0x03D42FFF, 0xcdd7 },
749 		{ 0x03D6269B, 0x0693 },
750 		{ 0x03D88BB0, 0x54de },
751 		{ 0x03DAE167, 0x5729 },
752 		{ 0x03DCA760, 0x23d9 },
753 		{ 0x03DECF00, 0x67bf },
754 		{ 0x03E02963, 0xb366 },
755 		{ 0x03E28258, 0x7a2e },
756 		{ 0x03E4FCA3, 0xc461 },
757 		{ 0x03E6263F, 0x4ab8 },
758 		{ 0x03E8EB02, 0x5d68 },
759 		{ 0x03EA0B78, 0x1b02 },
760 		{ 0x03EC5550, 0x2a6f },
761 		{ 0x03EEBE0C, 0x2b94 },
762 		{ 0x03F0806F, 0xb40b },
763 		{ 0x03F2A949, 0xbe37 },
764 		{ 0x03F41B2F, 0xc30c },
765 		{ 0x03F67713, 0x8ea1 },
766 		{ 0x03F89F8E, 0x5a05 },
767 		{ 0x03FA5016, 0xdf1b },
768 		{ 0x03FCDDE6, 0x2d02 },
769 		{ 0x03FE5B4D, 0xef8d },
770 
771 		{ 0x02003AC0, 0x00d0 },
772 		{ 0x0202D4BC, 0x7fb1 },
773 		{ 0x02042B3E, 0x7f6f },
774 		{ 0x0206D2C0, 0x7f2c },
775 		{ 0x0208EB82, 0x7ee9 },
776 		{ 0x020A0B9A, 0x76c9 },
777 		{ 0x020C4137, 0x6e88 },
778 		{ 0x020EFA40, 0x6647 },
779 		{ 0x02101507, 0x5e07 },
780 		{ 0x0212020F, 0x55e6 },
781 		{ 0x0214C3DE, 0x4da5 },
782 		{ 0x02163152, 0x4164 },
783 		{ 0x02187A11, 0x3944 },
784 		{ 0x021A314B, 0x3103 },
785 		{ 0x021C0C30, 0x28c2 },
786 		{ 0x021E757D, 0x20a2 },
787 
788 		{ 0x01C0F05D, 0x0000 },
789 		{ 0x01C24084, 0x562c },
790 		{ 0x01C4B60C, 0xb5d2 },
791 		{ 0x01C6C25D, 0xc98e },
792 		{ 0x01C874E5, 0xcd87 },
793 		{ 0x01CAB35C, 0x31a7 },
794 		{ 0x01CCABF7, 0xc8e7 },
795 		{ 0x01CE60F5, 0xad4e },
796 		{ 0x01D06E82, 0x34e8 },
797 		{ 0x01D20210, 0x190c },
798 		{ 0x01D44FFD, 0x4461 },
799 		{ 0x01D6FCCC, 0x9cc3 },
800 		{ 0x01D8CD46, 0xa842 },
801 		{ 0x01DAA446, 0x886b },
802 		{ 0x01DC764D, 0x0000 },
803 		{ 0x01DE667F, 0x5235 },
804 		{ 0x0180CF8D, 0x0000 },
805 		{ 0x01820D53, 0x7fff },
806 		{ 0x0184E62A, 0x7ffa },
807 		{ 0x018693FD, 0x7ff5 },
808 		{ 0x0188D142, 0x7ff0 },
809 		{ 0x018AF821, 0x7feb },
810 		{ 0x018CDE00, 0x7fc9 },
811 		{ 0x018ED3E3, 0x7f87 },
812 		{ 0x01904654, 0x7f65 },
813 		{ 0x01921444, 0x7f22 },
814 		{ 0x0194851C, 0x7ee0 },
815 		{ 0x019615A2, 0x7a60 },
816 		{ 0x019815A4, 0x69c0 },
817 		{ 0x019AF59F, 0x64e0 },
818 		{ 0x019C7C68, 0x4c00 },
819 		{ 0x019E3D7A, 0x3c00 },
820 		{ 0x01A0D5A9, 0x03e0 },
821 		{ 0x01A22C96, 0x0080 },
822 		{ 0x01A4F15D, 0x1c0b },
823 		{ 0x01A6A9DD, 0x45ae },
824 		{ 0x01A85152, 0x6f7f },
825 		{ 0x01AA1429, 0x673d },
826 		{ 0x01AC153D, 0x5ada },
827 		{ 0x01AED816, 0x5298 },
828 		{ 0x01B037B8, 0x4635 },
829 		{ 0x01B2626F, 0x3df3 },
830 		{ 0x01B4EFE1, 0x3190 },
831 		{ 0x01B66047, 0x294e },
832 		{ 0x01B8A17F, 0x1ceb },
833 		{ 0x01BAE8F8, 0x14a9 },
834 		{ 0x01BC381B, 0x0846 },
835 		{ 0x01BEB317, 0x0003 },
836 
837 		{ 0x07A0D7BD, 0x0000 },
838 		{ 0x07A2FDF7, 0x7c00 },
839 		{ 0x07A414B0, 0x0360 },
840 		{ 0x07A6A375, 0x001f },
841 		{ 0x07A85770, 0x7fe0 },
842 		{ 0x07AA2F6E, 0x7fff },
843 		{ 0x07AC384C, 0x541d },
844 		{ 0x07AEDFF1, 0x037f },
845 		{ 0x07B0F8D9, 0x0000 },
846 		{ 0x07B2EAAF, 0x7fe7 },
847 		{ 0x07B4750F, 0x7f48 },
848 		{ 0x07B6346C, 0x7ea9 },
849 		{ 0x07B8DAC0, 0x7dea },
850 		{ 0x07BC6350, 0x03e0 },
851 
852 		{ 0x014064E7, 0x0000 },
853 		{ 0x014251E1, 0x7ffa },
854 		{ 0x01443AA9, 0x7f8d },
855 		{ 0x0146488B, 0x7fff },
856 		{ 0x014829A2, 0x7ff0 },
857 		{ 0x014AA74B, 0x7fd9 },
858 		{ 0x014C2EFA, 0x7ffc },
859 		{ 0x014E1287, 0x7f4f },
860 		{ 0x0150E842, 0x7f68 },
861 		{ 0x0152158D, 0x7ee3 },
862 		{ 0x0154B670, 0x7e41 },
863 		{ 0x0156D95E, 0x7e48 },
864 		{ 0x01584FF1, 0x7da0 },
865 		{ 0x015A6F2A, 0x7f99 },
866 		{ 0x015CA37A, 0x76cc },
867 		{ 0x015ECB80, 0x6f17 },
868 		{ 0x01602196, 0x6ad3 },
869 		{ 0x0162D660, 0x5e92 },
870 		{ 0x0164A29B, 0x624e },
871 		{ 0x0166DD13, 0x6208 },
872 		{ 0x01684D54, 0x71a1 },
873 		{ 0x016A2FF4, 0x6108 },
874 		{ 0x016CFDFD, 0x64e0 },
875 		{ 0x016E05A0, 0x4586 },
876 		{ 0x0170B432, 0x4e2e },
877 		{ 0x0172E5C7, 0x41ac },
878 		{ 0x0174CDBB, 0x3107 },
879 		{ 0x01769E44, 0x3880 },
880 		{ 0x0178FAD3, 0x3567 },
881 		{ 0x017A602C, 0x20c3 },
882 		{ 0x017C096A, 0x0800 },
883 		{ 0x017E1488, 0x7fff },
884 
885 		{ 0x0BE0F70E, 0x4cb3 },
886 		{ 0x0BE2E350, 0x7fff },
887 		{ 0x0BE4F722, 0x7ffe },
888 		{ 0x0BE68643, 0x7ffb },
889 		{ 0x0BE8CB3E, 0x7ff9 },
890 		{ 0x0BEAABDC, 0x7ff6 },
891 		{ 0x0BEC000F, 0x7ff4 },
892 		{ 0x0BEEC3C1, 0x7bd1 },
893 		{ 0x0BF0C04A, 0x7bcf },
894 		{ 0x0BF2EB06, 0x77ae },
895 		{ 0x0BF45561, 0x77ad },
896 		{ 0x0BF66384, 0x738d },
897 		{ 0x0BF80566, 0x6f6c },
898 		{ 0x0BFA6EB1, 0x6f6b },
899 		{ 0x0BFCF260, 0x6b4a },
900 		{ 0x0BFE60B7, 0x6b4a },
901 		{ 0x0C000F4B, 0x6729 },
902 		{ 0x0C02E81E, 0x6308 },
903 		{ 0x0C04CF07, 0x6307 },
904 		{ 0x0C060E25, 0x5ee6 },
905 		{ 0x0C0839B6, 0x5ac6 },
906 		{ 0x0C0ABF8D, 0x5ac5 },
907 		{ 0x0C0C35A0, 0x56a4 },
908 		{ 0x0C0ECA49, 0x56a0 },
909 		{ 0x0C10B601, 0x56a0 },
910 		{ 0x0C12175F, 0x56a0 },
911 		{ 0x0C14C4BE, 0x5280 },
912 		{ 0x0C161897, 0x5280 },
913 		{ 0x0C18651C, 0x4e60 },
914 		{ 0x0C1AD23F, 0x4e60 },
915 		{ 0x0C1CB033, 0x4a40 },
916 		{ 0x0C1EDA23, 0x4a40 },
917 		{ 0x0C20A71B, 0x4a40 },
918 		{ 0x0C22DAF3, 0x4620 },
919 		{ 0x0C24EE1E, 0x4620 },
920 		{ 0x0C26D154, 0x4201 },
921 		{ 0x0C280468, 0x4201 },
922 		{ 0x0C2A34A7, 0x3de1 },
923 		{ 0x0C2CA338, 0x3de1 },
924 		{ 0x0C2E71F4, 0x3de1 },
925 		{ 0x0C30E165, 0x39c1 },
926 		{ 0x0C32BB85, 0x39c1 },
927 		{ 0x0C340203, 0x35a1 },
928 		{ 0x0C363F4A, 0x35a1 },
929 		{ 0x0C382D53, 0x3181 },
930 		{ 0x0C3AAA4B, 0x3181 },
931 		{ 0x0C3C4602, 0x2d61 },
932 		{ 0x0C3E888C, 0x2d61 },
933 		{ 0x0C4082BF, 0x2d61 },
934 		{ 0x0C42D415, 0x2d61 },
935 		{ 0x0C445792, 0x2941 },
936 		{ 0x0C46D209, 0x2941 },
937 		{ 0x0C485FF6, 0x2941 },
938 		{ 0x0C4AF2EC, 0x2521 },
939 		{ 0x0C4CDEFD, 0x2521 },
940 		{ 0x0C4E5AB9, 0x2521 },
941 		{ 0x0C50B991, 0x2521 },
942 		{ 0x0C52B6EF, 0x2101 },
943 		{ 0x0C5435E9, 0x2101 },
944 		{ 0x0C56A383, 0x1ce1 },
945 		{ 0x0C58C376, 0x18c1 },
946 		{ 0x0C5AF004, 0x1080 },
947 		{ 0x0C5CD659, 0x0c60 },
948 		{ 0x0C5E7C17, 0x0000 },
949 
950 		/* in-game demo*/
951 
952 		{ 0x0740E366, 0x0000 },
953 		{ 0x07426EEA, 0x03e0 },
954 		{ 0x07485D97, 0x0000 },
955 		{ 0x074A20B4, 0x3863 },
956 		{ 0x074CFCFA, 0x5c21 },
957 		{ 0x074E37F7, 0x7c00 },
958 		{ 0x07509EC6, 0x7e2b },
959 		{ 0x0752736A, 0x14a6 },
960 		{ 0x07540D3B, 0x318c },
961 		{ 0x07567A70, 0x4a53 },
962 		{ 0x075861B3, 0x6739 },
963 		{ 0x075A48D6, 0x7fff },
964 		{ 0x075C4AD8, 0x03e0 },
965 		{ 0x075E7452, 0x294a },
966 
967 		{ 0x07BA4193, 0x0045 },
968 		{ 0x07BECBD7, 0x0000 },
969 
970 		{ 0x03005940, 0x00d0 },
971 		{ 0x0302E2B3, 0x7f75 },
972 		{ 0x03047625, 0x7b33 },
973 		{ 0x030665F4, 0x72b3 },
974 		{ 0x0308310F, 0x6eaf },
975 		{ 0x030A0FBE, 0x666d },
976 		{ 0x030CE5BD, 0x5e2b },
977 		{ 0x030E624D, 0x5a0a },
978 		{ 0x03104644, 0x55a9 },
979 		{ 0x03124604, 0x49a8 },
980 		{ 0x031420BD, 0x4d67 },
981 		{ 0x0316579A, 0x3d46 },
982 		{ 0x03187A4E, 0x3105 },
983 		{ 0x031AF2C9, 0x24c5 },
984 		{ 0x031CA091, 0x20a5 },
985 		{ 0x031E5980, 0x1881 },
986 
987 		{ 0x0400C0C3, 0x00d0 },
988 		{ 0x040261D4, 0x7ef5 },
989 		{ 0x0404D01A, 0x7ad3 },
990 		{ 0x04065D42, 0x72b1 },
991 		{ 0x0408E974, 0x6e8f },
992 		{ 0x040AE9DF, 0x662e },
993 		{ 0x040CA223, 0x61ec },
994 		{ 0x040E0187, 0x5dcb },
995 		{ 0x04102BA8, 0x55a9 },
996 		{ 0x0412A48D, 0x4d88 },
997 		{ 0x04142A16, 0x4568 },
998 		{ 0x041629A5, 0x3d27 },
999 		{ 0x0418D2E6, 0x3105 },
1000 		{ 0x041A091D, 0x24c6 },
1001 		{ 0x041C0EAF, 0x1ca6 },
1002 		{ 0x041E314B, 0x1881 },
1003 
1004 		{ 0x04201D60, 0x0045 },
1005 		{ 0x04229C56, 0x7f75 },
1006 		{ 0x042477E4, 0x7b33 },
1007 		{ 0x04263191, 0x72b3 },
1008 		{ 0x0428AF11, 0x6eae },
1009 		{ 0x042ACCBF, 0x666d },
1010 		{ 0x042C0E5B, 0x5e2b },
1011 		{ 0x042E0363, 0x5e0e },
1012 		{ 0x0430D171, 0x59ed },
1013 		{ 0x04322692, 0x51ac },
1014 		{ 0x0434A314, 0x4d67 },
1015 		{ 0x04366B22, 0x3d46 },
1016 		{ 0x04383EFE, 0x3105 },
1017 		{ 0x043A0272, 0x20a7 },
1018 		{ 0x043C0D9F, 0x1487 },
1019 		{ 0x043E2D92, 0x1881 },
1020 
1021 		{ 0x0702BB8D, 0x2c28 },
1022 		{ 0x0704470B, 0x3048 },
1023 		{ 0x07067B2D, 0x3048 },
1024 		{ 0x070840B7, 0x3048 },
1025 		{ 0x070A58B4, 0x3469 },
1026 		{ 0x070C99D1, 0x3469 },
1027 		{ 0x070EDEF2, 0x386a },
1028 		{ 0x071044AF, 0x3c8a },
1029 		{ 0x0712EB75, 0x3c8a },
1030 		{ 0x0714DB75, 0x3449 },
1031 		{ 0x0716C8A4, 0x2c27 },
1032 		{ 0x0718346B, 0x2406 },
1033 		{ 0x071AFE61, 0x2406 },
1034 		{ 0x071C771A, 0x2807 },
1035 		{ 0x071E50A7, 0x2827 },
1036 
1037 
1038 		/* troid screen*/
1039 
1040 		{ 0x07C0B2D7, 0x0019 },
1041 		{ 0x07C222F6, 0x7fff },
1042 		{ 0x07C43550, 0x7b5f },
1043 		{ 0x07C6221A, 0x7fff },
1044 		{ 0x07C8CEF1, 0x6ede },
1045 		{ 0x07CA4B46, 0x7fdd },
1046 		{ 0x07CC3A84, 0x7f7d },
1047 		{ 0x07CEFD3D, 0x5e9a },
1048 		{ 0x07D09D44, 0x7ffa },
1049 		{ 0x07D20DDC, 0x7b5a },
1050 		{ 0x07D46F47, 0x7f79 },
1051 		{ 0x07D6E3E5, 0x72f9 },
1052 		{ 0x07D8666A, 0x7f18 },
1053 		{ 0x07DAF254, 0x4e17 },
1054 		{ 0x07DC2DD1, 0x5e75 },
1055 		{ 0x07DE0A51, 0x7ff5 },
1056 		{ 0x07E0ADE9, 0x62d5 },
1057 		{ 0x07E2206B, 0x7f55 },
1058 		{ 0x07E4C323, 0x7b35 },
1059 		{ 0x07E681E9, 0x7ef4 },
1060 		{ 0x07E8AFE1, 0x5614 },
1061 		{ 0x07EADE06, 0x76d4 },
1062 		{ 0x07EC7D8D, 0x49f4 },
1063 		{ 0x07EE3EA8, 0x7274 },
1064 		{ 0x07F06F90, 0x7f71 },
1065 		{ 0x07F234C6, 0x41b0 },
1066 		{ 0x07F4320A, 0x5a10 },
1067 		{ 0x07F6F668, 0x7ed0 },
1068 		{ 0x07F869F3, 0x7ab0 },
1069 		{ 0x07FA1140, 0x7f50 },
1070 		{ 0x07FCC28A, 0x6a6f },
1071 		{ 0x07FE3235, 0x5e6f },
1072 		{ 0x08003FD7, 0x720f },
1073 		{ 0x0802DE06, 0x418d },
1074 		{ 0x0804C73E, 0x5a0c },
1075 		{ 0x0806F643, 0x6e0c },
1076 		{ 0x0808188C, 0x55ac },
1077 		{ 0x080A636C, 0x7ecb },
1078 		{ 0x080C4160, 0x310b },
1079 		{ 0x080E39BD, 0x7a6b },
1080 		{ 0x0810AD3A, 0x6a6b },
1081 		{ 0x0812C4F2, 0x20ab },
1082 		{ 0x0814DE48, 0x3d2b },
1083 		{ 0x08163D93, 0x632a },
1084 		{ 0x08181879, 0x458a },
1085 		{ 0x081A8813, 0x5689 },
1086 		{ 0x081C9B42, 0x59e9 },
1087 		{ 0x081E708E, 0x5589 },
1088 		{ 0x08202692, 0x6dc8 },
1089 		{ 0x082280AF, 0x1ca8 },
1090 		{ 0x0824397F, 0x5127 },
1091 		{ 0x08267601, 0x3d27 },
1092 		{ 0x0828F05D, 0x4167 },
1093 		{ 0x082A0A0B, 0x3e47 },
1094 		{ 0x082C881E, 0x2ce7 },
1095 		{ 0x082E1ACC, 0x25a5 },
1096 		{ 0x08304151, 0x5105 },
1097 		{ 0x0832C78D, 0x28a5 },
1098 		{ 0x08346959, 0x1c85 },
1099 		{ 0x08362656, 0x6504 },
1100 		{ 0x083856FE, 0x14e4 },
1101 		{ 0x083A4A7E, 0x3ca4 },
1102 		{ 0x083CCC66, 0x1843 },
1103 		{ 0x083E9C6C, 0x0001 },
1104 
1105 		/* atari screen*/
1106 
1107 		{ 0x0BC0C176, 0x0000 },
1108 		{ 0x0BC2894F, 0x7774 },
1109 		{ 0x0BC45928, 0x66d2 },
1110 		{ 0x0BC6C3C0, 0x5e8d },
1111 		{ 0x0BC8C31C, 0x7bdd },
1112 		{ 0x0BCA6F93, 0x62b9 },
1113 		{ 0x0BCC2CA7, 0x5a92 },
1114 		{ 0x0BCE9F86, 0x522c },
1115 		{ 0x0BD0644B, 0x3dab },
1116 		{ 0x0BD2A1BC, 0x41f2 },
1117 		{ 0x0BD47C0F, 0x41f8 },
1118 		{ 0x0BD6C568, 0x20e6 },
1119 		{ 0x0BD8368A, 0x2951 },
1120 		{ 0x0BDAF5DE, 0x2da4 },
1121 		{ 0x0BDC37CE, 0x1cc9 },
1122 		{ 0x0BDE6895, 0x14a5 },
1123 
1124 		{ 0xffffffff, 0xffff }
1125 	};
1126 
1127 	data32_t result = protection_base[offset];
1128 
1129 	if (offset == 0x300)
1130 		result |= 0x80000000;
1131 	if (offset == 0x3f0)
1132 	{
1133 		UINT32 tag = (last_write_offset << 17) | last_write;
1134 		int i = 0;
1135 
1136 		while (lookup_table[i][0] != 0xffffffff)
1137 		{
1138 			if (tag == lookup_table[i][0])
1139 			{
1140 				result = lookup_table[i][1] << 16;
1141 				break;
1142 			}
1143 			i++;
1144 		}
1145 
1146 		if (lookup_table[i][0] == 0xffffffff)
1147 		{
1148 			if (last_write_offset*2 >= 0x700 && last_write_offset*2 < 0x720)
1149 				result = rand() << 16;
1150 			else
1151 				result = 0xffff << 16;
1152 			log_cb(RETRO_LOG_DEBUG, LOGPRE "%06X:Unhandled protection R@%04X = %04X\n", activecpu_get_previouspc(), offset, result);
1153 		}
1154 	}
1155 
1156 	if (ACCESSING_MSW32)
1157 		log_cb(RETRO_LOG_DEBUG, LOGPRE "%06X:Protection R@%04X = %04X\n", activecpu_get_previouspc(), offset * 4, result >> 16);
1158 	else
1159 		log_cb(RETRO_LOG_DEBUG, LOGPRE "%06X:Protection R@%04X = %04X\n", activecpu_get_previouspc(), offset * 4 + 2, result);
1160 	return result;
1161 }
1162 
1163 
1164 /*************************************
1165  *
1166  *	32-bit stub handlers
1167  *
1168  *************************************/
1169 
READ32_HANDLER(inputs_01_r)1170 static READ32_HANDLER( inputs_01_r )
1171 {
1172 	return (readinputport(0) << 16) | readinputport(1);
1173 }
1174 
1175 
1176 
1177 /*************************************
1178  *
1179  *	Main CPU memory handlers
1180  *
1181  *************************************/
1182 
MEMORY_READ32_START(main_readmem)1183 static MEMORY_READ32_START( main_readmem )
1184 	{ 0x000000, 0x07ffff, MRA32_ROM },
1185 	{ 0xc80000, 0xc80fff, MRA32_RAM },
1186 	{ 0xca0000, 0xca0fff, atarigx2_protection_r },
1187 	{ 0xd00000, 0xd1ffff, a2d_data_r },
1188 	{ 0xd20000, 0xd20fff, atarigen_eeprom_upper32_r },
1189 	{ 0xd40000, 0xd40fff, MRA32_RAM },
1190 	{ 0xd70000, 0xd7ffff, MRA32_RAM },
1191 	{ 0xe80000, 0xe80003, inputs_01_r },
1192 	{ 0xe82000, 0xe82003, special_port2_r },
1193 	{ 0xe82004, 0xe82007, special_port3_r },
1194 	{ 0xe86000, 0xe86003, atarigen_sound_upper32_r },
1195 	{ 0xff8000, 0xffffff, MRA32_RAM },
1196 MEMORY_END
1197 
1198 
1199 static MEMORY_WRITE32_START( main_writemem )
1200 	{ 0x000000, 0x07ffff, MWA32_ROM },
1201 	{ 0xc80000, 0xc80fff, MWA32_RAM },
1202 	{ 0xca0000, 0xca0fff, atarigx2_protection_w, &protection_base },
1203 	{ 0xd20000, 0xd20fff, atarigen_eeprom32_w, (data32_t **)&atarigen_eeprom, &atarigen_eeprom_size },
1204 	{ 0xd40000, 0xd40fff, atarigen_666_paletteram32_w, &paletteram32 },
1205 	{ 0xd70000, 0xd71fff, MWA32_RAM },
1206 	{ 0xd72000, 0xd75fff, atarigen_playfield32_w, &atarigen_playfield32 },
1207 	{ 0xd76000, 0xd76fff, atarigen_alpha32_w, &atarigen_alpha32 },
1208 	{ 0xd77000, 0xd77fff, MWA32_RAM },
1209 	{ 0xd78000, 0xd78fff, atarirle_0_spriteram32_w, &atarirle_0_spriteram32 },
1210 	{ 0xd79000, 0xd7a1ff, MWA32_RAM },
1211 	{ 0xd7a200, 0xd7a203, mo_command_w, &mo_command },
1212 	{ 0xd7a204, 0xd7ffff, MWA32_RAM },
1213 	{ 0xd80000, 0xd9ffff, atarigen_eeprom_enable32_w },
1214 	{ 0xe06000, 0xe06003, atarigen_sound_upper32_w },
1215 	{ 0xe08000, 0xe08003, latch_w },
1216 	{ 0xe0c000, 0xe0c003, atarigen_video_int_ack32_w },
1217 	{ 0xe0e000, 0xe0e003, MWA32_NOP },/*watchdog_reset_w },*/
1218 	{ 0xff8000, 0xffffff, MWA32_RAM },
1219 MEMORY_END
1220 
1221 
1222 
1223 
1224 /*************************************
1225  *
1226  *	Port definitions
1227  *
1228  *************************************/
1229 
1230 INPUT_PORTS_START( spclords )
1231 	PORT_START		/* 68.SW (A1=0) */
1232 	PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED )
1233 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )						/* BLUE button */
1234 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )		/* Left thumb */
1235 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER1 )		/* Left trigger */
1236 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )		/* Throttle forward */
1237 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER1 )
1238 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_PLAYER1 )
1239 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER2 )		/* Throttle button */
1240 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_PLAYER1 )
1241 
1242 	PORT_START		/* 68.SW (A1=1) */
1243 	PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED )
1244 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START2 )						/* RED button */
1245 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER1 )		/* Right thumb */
1246 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON4 | IPF_PLAYER1 )		/* Right trigger */
1247 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )		/* Throttle reverse */
1248 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_PLAYER2 )
1249 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_PLAYER2 )
1250 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_PLAYER2 )
1251 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_PLAYER2 )
1252 
1253 	PORT_START      /* 68.STATUS (A2=0) */
1254 	PORT_BIT( 0x0007, IP_ACTIVE_LOW, IPT_SPECIAL )	/* +5V */
1255 	PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_SPECIAL )	/* A2D.EOC */
1256 	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /AUDIRQ */
1257 	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /AUDFULL */
1258 	PORT_SERVICE( 0x0040, IP_ACTIVE_LOW )
1259 	PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_VBLANK )
1260 	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
1261 
1262 	PORT_START      /* 68.STATUS (A2=1) */
1263 	PORT_BIT( 0x0003, IP_ACTIVE_LOW, IPT_SPECIAL )	/* +5V */
1264 	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /XIRQ */
1265 	PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /XFULL */
1266 	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /SERVICER */
1267 	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /SER.L */
1268 	PORT_BIT( 0x00c0, IP_ACTIVE_LOW, IPT_SPECIAL )	/* +5V */
1269 	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
1270 
1271 	JSA_III_PORT	/* audio board port */
1272 
1273 	PORT_START		/* A2D @ 0xD00000 */
1274 	PORT_ANALOG ( 0x00ff, 0x0080, IPT_AD_STICK_X | IPF_PLAYER1, 100, 10, 0x10, 0xf0 )
1275 	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
1276 
1277 	PORT_START		/* A2D @ 0xD00002 */
1278 	PORT_ANALOG ( 0x00ff, 0x0080, IPT_AD_STICK_Y | IPF_PLAYER1, 100, 10, 0x10, 0xf0 )
1279 	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
1280 
1281 	PORT_START		/* A2D @ 0xD00004 */
1282 	PORT_ANALOG ( 0x00ff, 0x0080, IPT_AD_STICK_X | IPF_PLAYER2, 100, 10, 0x10, 0xf0 )
1283 	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
1284 
1285 	PORT_START		/* A2D @ 0xD00006 */
1286 	PORT_ANALOG ( 0x00ff, 0x0080, IPT_AD_STICK_Y | IPF_PLAYER2, 100, 10, 0x10, 0xf0 )
1287 	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
1288 INPUT_PORTS_END
1289 
1290 
1291 INPUT_PORTS_START( motofren )
1292 	PORT_START		/* 68.SW (A1=0) */
1293 	PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED )
1294 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )						/* Start/fire */
1295 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER1 )		/* AUX3 */
1296 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER1 )		/* AUX2 */
1297 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )		/* AUX1 */
1298 	PORT_BIT( 0xf000, IP_ACTIVE_LOW, IPT_UNUSED )
1299 
1300 	PORT_START		/* 68.SW (A1=1) */
1301 	PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED )
1302 
1303 	PORT_START      /* 68.STATUS (A2=0) */
1304 	PORT_BIT( 0x0007, IP_ACTIVE_LOW, IPT_UNUSED )	/* +5V */
1305 	PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_SPECIAL )	/* A2D.EOC */
1306 	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /AUDIRQ */
1307 	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /AUDFULL */
1308 	PORT_SERVICE( 0x0040, IP_ACTIVE_LOW )
1309 	PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_VBLANK )
1310 	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
1311 
1312 	PORT_START      /* 68.STATUS (A2=1) */
1313 	PORT_BIT( 0x0003, IP_ACTIVE_LOW, IPT_SPECIAL )	/* +5V */
1314 	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /XIRQ */
1315 	PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /XFULL */
1316 	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /SERVICER */
1317 	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /SER.L */
1318 	PORT_BIT( 0x00c0, IP_ACTIVE_LOW, IPT_SPECIAL )	/* +5V */
1319 	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
1320 
1321 	JSA_III_PORT	/* audio board port */
1322 
1323 	PORT_START		/* A2D @ 0xD00000 */
1324 	PORT_ANALOG( 0xff, 0x00, IPT_PEDAL, 100, 16, 0x00, 0xff )
1325 
1326 	PORT_START		/* A2D @ 0xD00002 */
1327 	PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
1328 
1329 	PORT_START		/* A2D @ 0xD00004 */
1330 	PORT_ANALOG( 0xff, 0x80, IPT_AD_STICK_X, 50, 10, 0, 255 )
1331 
1332 	PORT_START		/* A2D @ 0xD00006 */
1333 	PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
1334 INPUT_PORTS_END
1335 
1336 
1337 INPUT_PORTS_START( rrreveng )
1338 	PORT_START		/* 68.SW (A1=0) */
1339 	PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED )
1340 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
1341 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER1 )
1342 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER1 )
1343 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON5 | IPF_PLAYER2 )
1344 	PORT_BIT( 0x3000, IP_ACTIVE_LOW, IPT_UNUSED )
1345 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON4 | IPF_PLAYER2 )
1346 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNUSED )
1347 
1348 	PORT_START		/* 68.SW (A1=1) */
1349 	PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED )
1350 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START2 )
1351 	PORT_BIT( 0xfe00, IP_ACTIVE_LOW, IPT_UNUSED )
1352 
1353 	PORT_START      /* 68.STATUS (A2=0) */
1354 	PORT_BIT( 0x0007, IP_ACTIVE_LOW, IPT_SPECIAL )	/* +5V */
1355 	PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_SPECIAL )	/* A2D.EOC */
1356 	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /AUDIRQ */
1357 	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /AUDFULL */
1358 	PORT_SERVICE( 0x0040, IP_ACTIVE_LOW )
1359 	PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_VBLANK )
1360 	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
1361 
1362 	PORT_START      /* 68.STATUS (A2=1) */
1363 	PORT_BIT( 0x0003, IP_ACTIVE_LOW, IPT_SPECIAL )	/* +5V */
1364 	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /XIRQ */
1365 	PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /XFULL */
1366 	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /SERVICER */
1367 	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SPECIAL )	/* /SER.L */
1368 	PORT_BIT( 0x00c0, IP_ACTIVE_LOW, IPT_SPECIAL )	/* +5V */
1369 	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
1370 
1371 	JSA_III_PORT	/* audio board port */
1372 
1373 	PORT_START		/* A2D @ 0xD00000 */
1374 	PORT_ANALOG ( 0x00ff, 0x0010, IPT_PEDAL, 100, 10, 0x10, 0xf0 )
1375 	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
1376 
1377 	PORT_START		/* A2D @ 0xD00002 */
1378 	PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED )
1379 
1380 	PORT_START		/* A2D @ 0xD00004 */
1381 	PORT_ANALOG ( 0x00ff, 0x0080, IPT_PADDLE, 100, 10, 0x10, 0xf0 )
1382 	PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
1383 
1384 	PORT_START		/* A2D @ 0xD00006 */
1385 	PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED )
1386 INPUT_PORTS_END
1387 
1388 
1389 
1390 /*************************************
1391  *
1392  *	Graphics definitions
1393  *
1394  *************************************/
1395 
1396 static struct GfxLayout pflayout =
1397 {
1398 	8,8,
1399 	RGN_FRAC(1,3),
1400 	5,
1401 	{ 0, 0, 1, 2, 3 },
1402 	{ RGN_FRAC(1,3)+0, RGN_FRAC(1,3)+4, 0, 4, RGN_FRAC(1,3)+8, RGN_FRAC(1,3)+12, 8, 12 },
1403 	{ 0*8, 2*8, 4*8, 6*8, 8*8, 10*8, 12*8, 14*8 },
1404 	16*8
1405 };
1406 
1407 static struct GfxLayout pftoplayout =
1408 {
1409 	8,8,
1410 	RGN_FRAC(1,3),
1411 	6,
1412 	{ RGN_FRAC(2,3)+0, RGN_FRAC(2,3)+4, 0, 0, 0, 0 },
1413 	{ 3, 2, 1, 0, 11, 10, 9, 8 },
1414 	{ 0*8, 2*8, 4*8, 6*8, 8*8, 10*8, 12*8, 14*8 },
1415 	16*8
1416 };
1417 
1418 static struct GfxLayout anlayout =
1419 {
1420 	8,8,
1421 	RGN_FRAC(1,1),
1422 	4,
1423 	{ 0, 1, 2, 3 },
1424 	{ 0, 4, 8, 12, 16, 20, 24, 28 },
1425 	{ 0*8, 4*8, 8*8, 12*8, 16*8, 20*8, 24*8, 28*8 },
1426 	32*8
1427 };
1428 
1429 static struct GfxDecodeInfo gfxdecodeinfo[] =
1430 {
1431 	{ REGION_GFX1, 0, &pflayout, 0x000, 64 },
1432 	{ REGION_GFX2, 0, &anlayout, 0x000, 16 },
1433 	{ REGION_GFX1, 0, &pftoplayout, 0x000, 64 },
1434 	{ -1 } /* end of array */
1435 };
1436 
1437 
1438 
1439 /*************************************
1440  *
1441  *	Machine driver
1442  *
1443  *************************************/
1444 
1445 static MACHINE_DRIVER_START( atarigx2 )
1446 
1447 	/* basic machine hardware */
MDRV_CPU_ADD(M68EC020,ATARI_CLOCK_14MHz)1448 	MDRV_CPU_ADD(M68EC020, ATARI_CLOCK_14MHz)
1449 	MDRV_CPU_MEMORY(main_readmem,main_writemem)
1450 	MDRV_CPU_VBLANK_INT(atarigen_video_int_gen,1)
1451 
1452 	MDRV_FRAMES_PER_SECOND(60)
1453 	MDRV_VBLANK_DURATION(DEFAULT_REAL_60HZ_VBLANK_DURATION)
1454 
1455 	MDRV_MACHINE_INIT(atarigx2)
1456 	MDRV_NVRAM_HANDLER(atarigen)
1457 
1458 	/* video hardware */
1459 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_NEEDS_6BITS_PER_GUN | VIDEO_UPDATE_BEFORE_VBLANK)
1460 	MDRV_SCREEN_SIZE(42*8, 30*8)
1461 	MDRV_VISIBLE_AREA(0*8, 42*8-1, 0*8, 30*8-1)
1462 	MDRV_GFXDECODE(gfxdecodeinfo)
1463 	MDRV_PALETTE_LENGTH(2048)
1464 
1465 	MDRV_VIDEO_START(atarigx2)
1466 	MDRV_VIDEO_EOF(atarirle)
1467 	MDRV_VIDEO_UPDATE(atarigx2)
1468 
1469 	/* sound hardware */
1470 	MDRV_IMPORT_FROM(jsa_iiis_stereo)
1471 MACHINE_DRIVER_END
1472 
1473 
1474 
1475 /*************************************
1476  *
1477  *	ROM definition(s)
1478  *
1479  *************************************/
1480 
1481 ROM_START( spclords )
1482 	ROM_REGION( 0x80000, REGION_CPU1, 0 )	/* 8*64k for 68000 code */
1483 	ROM_LOAD32_BYTE( "136095.21b", 0x00000, 0x20000, CRC(2ba99ce2) SHA1(5d8d138698c29838a85da1721c3400c666a14e18) )
1484 	ROM_LOAD32_BYTE( "136095.22b", 0x00001, 0x20000, CRC(631c5009) SHA1(6b2ea907087e411579f55dff60724ba33afa8a06) )
1485 	ROM_LOAD32_BYTE( "136095.23b", 0x00002, 0x20000, CRC(bc64ab63) SHA1(999851a39123f6a01cb83d97ea744e12590b6e7e) )
1486 	ROM_LOAD32_BYTE( "136095.24b", 0x00003, 0x20000, CRC(7284a01a) SHA1(afa866c97b4c3df7fda3c196072231096beaa0db) )
1487 
1488 	ROM_REGION( 0x14000, REGION_CPU2, 0 )	/* 64k for 6502 code */
1489 	ROM_LOAD( "136095.80a", 0x10000, 0x4000, CRC(33bc0ede) SHA1(2ee30d9125057cdfbdb83e4dbf28306c35a9c233) )
1490 	ROM_CONTINUE(           0x04000, 0xc000 )
1491 
1492 	ROM_REGION( 0x60000, REGION_GFX1, ROMREGION_DISPOSE )
1493 	ROM_LOAD( "136095.30a", 0x00000, 0x20000, CRC(27e0cfec) SHA1(03df57757d091f9a0b8c8d98d091dd759f570788) ) /* playfield, planes 0-1 */
1494 	ROM_LOAD( "136095.31a", 0x20000, 0x20000, CRC(5529cdc7) SHA1(8aff8a42fb2a86b7e4666940da4c1ee19dab6281) ) /* playfield, planes 2-3 */
1495 	ROM_FILL(               0x40000, 0x20000, 0 )		   /* playfield, planes 4-5 */
1496 
1497 	ROM_REGION( 0x020000, REGION_GFX2, ROMREGION_DISPOSE )
1498 	ROM_LOAD( "136095.25a", 0x000000, 0x20000, CRC(1669496e) SHA1(005deaafd6156505e3a27966123e58928837ad9f) ) /* alphanumerics */
1499 
1500 	ROM_REGION16_BE( 0x600000, REGION_GFX3, 0 )
1501 	ROM_LOAD16_BYTE( "136095.41b", 0x000000, 0x80000, CRC(02ce7e07) SHA1(a48a6930c8ca4e2d0e4bc77a558730fa790be3b5) )
1502 	ROM_LOAD16_BYTE( "136095.40b", 0x000001, 0x80000, CRC(abb80720) SHA1(0e02688454f59b90d38d548808f794294f5c9e7e) )
1503 	ROM_LOAD16_BYTE( "136095.43b", 0x100000, 0x80000, CRC(26526345) SHA1(30ef83f63aca3a846dfc2828e3147208e3e350ca) )
1504 	ROM_LOAD16_BYTE( "136095.42b", 0x100001, 0x80000, CRC(c7a163df) SHA1(deb2c1fe57b6673d98ea9880a16e26751cc6e3a5) )
1505 	ROM_LOAD16_BYTE( "136095.45b", 0x200000, 0x80000, CRC(53d01714) SHA1(6ef584eb6c723d4843dad9e00da132e65be5ce25) )
1506 	ROM_LOAD16_BYTE( "136095.44b", 0x200001, 0x80000, CRC(60a16e4d) SHA1(13629b7039e77a654e22d7efb3bc01413b7ec187) )
1507 	ROM_LOAD16_BYTE( "136095.47b", 0x300000, 0x80000, CRC(41c873a3) SHA1(87c4e35a198ba5f73a545ccd176e9c5d454d194a) )
1508 	ROM_LOAD16_BYTE( "136095.46b", 0x300001, 0x80000, CRC(e885aece) SHA1(f02d2028b74ad26447e4d4c9d4d2d8136e0be8f5) )
1509 	ROM_LOAD16_BYTE( "136095.49b", 0x400000, 0x80000, CRC(7af90faf) SHA1(14629961f70ed969525d9aba49b9637115d26f44) )
1510 	ROM_LOAD16_BYTE( "136095.48b", 0x400001, 0x80000, CRC(6c553406) SHA1(b5a596dc69620d935eab9d9afc45377ad98ba77e) )
1511 	ROM_LOAD16_BYTE( "136095.51b", 0x500000, 0x80000, CRC(97541074) SHA1(f9f75bfc4af9587f4a9630ad93d9cd0efd89e4f4) )
1512 	ROM_LOAD16_BYTE( "136095.50b", 0x500001, 0x80000, CRC(a1c11ae8) SHA1(53fb2f376aae0aa346f9f911d6d8a73753c67d6e) )
1513 
1514 	ROM_REGION( 0x100000, REGION_SOUND1, 0 )	/* 1MB for ADPCM samples */
1515 	ROM_LOAD( "136095.81a",  0x80000, 0x80000, CRC(212560dd) SHA1(9d90bca5b478050d640b2393c9d3d59a4bd493dd) )
1516 ROM_END
1517 
1518 
1519 ROM_START( spclorda )
1520 	ROM_REGION( 0x80000, REGION_CPU1, 0 )	/* 8*64k for 68000 code */
1521 	ROM_LOAD32_BYTE( "136095.21a", 0x00000, 0x20000, CRC(fe8edb0b) SHA1(ae50a637df476c62f8194577cdca2677f9b5cbd0) )
1522 	ROM_LOAD32_BYTE( "136095.22a", 0x00001, 0x20000, CRC(c2d2867b) SHA1(481fe54d6cd8698bfd2776e2af6f51332304b7ba) )
1523 	ROM_LOAD32_BYTE( "136095.23a", 0x00002, 0x20000, CRC(20a0e443) SHA1(54597342901d6b38dddbe754f41ceeddcc4e5289) )
1524 	ROM_LOAD32_BYTE( "136095.24a", 0x00003, 0x20000, CRC(d3f0439c) SHA1(f9245f448b77187b4cd5d9436b5caebd2800be5d))
1525 
1526 	ROM_REGION( 0x14000, REGION_CPU2, 0 )	/* 64k for 6502 code */
1527 	ROM_LOAD( "136095.80a", 0x10000, 0x4000, CRC(33bc0ede) SHA1(2ee30d9125057cdfbdb83e4dbf28306c35a9c233) )
1528 	ROM_CONTINUE(           0x04000, 0xc000 )
1529 
1530 	ROM_REGION( 0x60000, REGION_GFX1, ROMREGION_DISPOSE )
1531 	ROM_LOAD( "136095.30a", 0x00000, 0x20000, CRC(27e0cfec) SHA1(03df57757d091f9a0b8c8d98d091dd759f570788) ) /* playfield, planes 0-1 */
1532 	ROM_LOAD( "136095.31a", 0x20000, 0x20000, CRC(5529cdc7) SHA1(8aff8a42fb2a86b7e4666940da4c1ee19dab6281) ) /* playfield, planes 2-3 */
1533 	ROM_FILL(               0x40000, 0x20000, 0 )		   /* playfield, planes 4-5 */
1534 
1535 	ROM_REGION( 0x020000, REGION_GFX2, ROMREGION_DISPOSE )
1536 	ROM_LOAD( "136095.25a", 0x000000, 0x20000, CRC(1669496e) SHA1(005deaafd6156505e3a27966123e58928837ad9f) ) /* alphanumerics */
1537 
1538 	ROM_REGION16_BE( 0x600000, REGION_GFX3, 0 )
1539 	ROM_LOAD16_BYTE( "136095.41a", 0x000000, 0x80000, CRC(5f9743ee) SHA1(fa521572f8dd2eda566f90d1345adba3d0b8c48f) )
1540 	ROM_LOAD16_BYTE( "136095.40a", 0x000001, 0x80000, CRC(99b26863) SHA1(21682771d310c73d4431dde5e72398a69a6f3d53) )
1541 	ROM_LOAD16_BYTE( "136095.43a", 0x100000, 0x80000, CRC(9c0e09a5) SHA1(039dc52318935f686230f57a7b39b9c62280cbf9) )
1542 	ROM_LOAD16_BYTE( "136095.42a", 0x100001, 0x80000, CRC(523bbb39) SHA1(635e859e634f6ef0ba26775653bd38a5ca9ddbbc) )
1543 	ROM_LOAD16_BYTE( "136095.45a", 0x200000, 0x80000, CRC(ac9bf600) SHA1(7da51103c419c7e09992bea67b5413bd2c9a0bb6) )
1544 	ROM_LOAD16_BYTE( "136095.44a", 0x200001, 0x80000, CRC(58949b04) SHA1(c05cc0b691e110532a04e5de43564ddef6c65769) )
1545 	ROM_LOAD16_BYTE( "136095.47a", 0x300000, 0x80000, CRC(675fee50) SHA1(2acbebce99d84ba6029baba48aa0271acb465c1c) )
1546 	ROM_LOAD16_BYTE( "136095.46a", 0x300001, 0x80000, CRC(c948c7b6) SHA1(c5fc684bc8b38370221fe126e6d1461533908cfd) )
1547 	ROM_LOAD16_BYTE( "136095.49a", 0x400000, 0x80000, CRC(04af9a77) SHA1(a985ef7617480e3606068369a1ddb7d90739aeb2) )
1548 	ROM_LOAD16_BYTE( "136095.48a", 0x400001, 0x80000, CRC(5ad113aa) SHA1(71bb40520578447bef1eb78bb60f97a12720ecd9) )
1549 	ROM_LOAD16_BYTE( "136095.51a", 0x500000, 0x80000, CRC(4635c534) SHA1(7261508052e3b17a552b43bc3d4ad7cd2d1f6af9) )
1550 	ROM_LOAD16_BYTE( "136095.50a", 0x500001, 0x80000, CRC(94bde47d) SHA1(dde8f0184a2d7e9f7eb961af2d9d016399ec18fc) )
1551 
1552 	ROM_REGION( 0x100000, REGION_SOUND1, 0 )	/* 1MB for ADPCM samples */
1553 	ROM_LOAD( "136095.81a",  0x80000, 0x80000, CRC(212560dd) SHA1(9d90bca5b478050d640b2393c9d3d59a4bd493dd) )
1554 
1555 	ROM_REGION( 0x0600, REGION_PROMS, ROMREGION_DISPOSE )	/* microcode for growth renderer */
1556 	ROM_LOAD( "094-001a.bin",  0x0000, 0x0200, NO_DUMP CRC(a70ade3f) )
1557 	ROM_LOAD( "094-002a.bin",  0x0200, 0x0200, NO_DUMP CRC(f4768b4d) )
1558 	ROM_LOAD( "094-003a.bin",  0x0400, 0x0200, NO_DUMP CRC(22a76ad4) )
1559 ROM_END
1560 
1561 
1562 ROM_START( motofren )
1563 	ROM_REGION( 0x80000, REGION_CPU1, 0 )	/* 8*64k for 68000 code */
1564 	ROM_LOAD32_BYTE( "94-0221a.23e", 0x00000, 0x20000, CRC(134e9ff0) SHA1(801b817bf49b4317a7518192025a878b9cd13f7f) )
1565 	ROM_LOAD32_BYTE( "94-0222a.23j", 0x00001, 0x20000, CRC(f6df65c7) SHA1(0a2092a509ae8c61e3f55c30c47bf39c71e2aa6e) )
1566 	ROM_LOAD32_BYTE( "94-0223a.37e", 0x00002, 0x20000, CRC(cdb04a4a) SHA1(ee342bdb5654e8b841b1f60e46d1bcae7c4e5cd2) )
1567 	ROM_LOAD32_BYTE( "94-0224a.37j", 0x00003, 0x20000, CRC(f3a9949f) SHA1(d3fa68fc63c505dd4c9d0e0c7f0625cc24ac9571) )
1568 
1569 	ROM_REGION( 0x14000, REGION_CPU2, 0 )	/* 64k for 6502 code */
1570 	ROM_LOAD( "mfs6502.bin", 0x10000, 0x4000, CRC(0b1e565c) SHA1(03bdeafd8cf680f76bbd1f9aba6efac27f19a93c) )
1571 	ROM_CONTINUE(            0x04000, 0xc000 )
1572 
1573 	ROM_REGION( 0x180000, REGION_GFX1, ROMREGION_DISPOSE )
1574 	ROM_LOAD( "motof2d.bin", 0x000000, 0x80000, CRC(1b63b493) SHA1(980141fec011fa2b5cb020eeecb4784d31679dba) ) /* playfield, planes 0-1 */
1575 	ROM_LOAD( "motof5d.bin", 0x080000, 0x80000, CRC(6d290056) SHA1(fa32dbe5ac5e735d700d086353461eaa2c1dee55) ) /* playfield, planes 2-3 */
1576 	ROM_LOAD( "motof8d.bin", 0x100000, 0x80000, CRC(38197c88) SHA1(dc5d4d878759503b8500e8e3a032f499bfeedcb1) ) /* playfield, planes 4-5 */
1577 
1578 	ROM_REGION( 0x020000, REGION_GFX2, ROMREGION_DISPOSE )
1579 	ROM_LOAD( "motof13n.bin", 0x000000, 0x20000, CRC(6ab762ad) SHA1(c52dd207ff5adaffa458e020e7d452a1d1e65194) ) /* alphanumerics */
1580 
1581 	ROM_REGION16_BE( 0x700000, REGION_GFX3, 0 )
1582 	ROM_LOAD16_BYTE( "motof31n.bin", 0x000000, 0x80000, CRC(474770e9) SHA1(507dac654d1c350ab530892e3ec19793629d3a07) )
1583 	ROM_LOAD16_BYTE( "motof31l.bin", 0x000001, 0x80000, CRC(cb777468) SHA1(aa199bc02ab966b9f270057857aec50add8d684c) )
1584 	ROM_LOAD16_BYTE( "motof33n.bin", 0x100000, 0x80000, CRC(353d2dc3) SHA1(82c2c862404ea4c94c9baee1d0ac32696fcf78bd) )
1585 	ROM_LOAD16_BYTE( "motof33l.bin", 0x100001, 0x80000, CRC(17d49f77) SHA1(7ed85035128f3c9dc2bc3d9f387dba01a882e3f4) )
1586 	ROM_LOAD16_BYTE( "motof35n.bin", 0x200000, 0x80000, CRC(13d89355) SHA1(becd43a51c643732025386d7781dcf784b20d031) )
1587 	ROM_LOAD16_BYTE( "motof35l.bin", 0x200001, 0x80000, CRC(924c817e) SHA1(2c23fd8a85833875cfb2d60e1072bd59cea57e0c) )
1588 	ROM_LOAD16_BYTE( "motof37n.bin", 0x300000, 0x80000, CRC(43ee7453) SHA1(3549f62e6b2f50d663fbb4068cb8907b5073ef5e) )
1589 	ROM_LOAD16_BYTE( "motof37l.bin", 0x300001, 0x80000, CRC(980b9b92) SHA1(6a5cfb77b65c0a28dba705d4738c883be983cd4d) )
1590 	ROM_LOAD16_BYTE( "motof31t.bin", 0x400000, 0x80000, CRC(25ac33af) SHA1(e76af04d2e2cbf5769c1f53e2eac4f85e57003ba) )
1591 	ROM_LOAD16_BYTE( "motof31r.bin", 0x400001, 0x80000, CRC(d725a27d) SHA1(9d8d332a6c1d773888c2d9ef1d7ea1e865f6dd02) )
1592 	ROM_LOAD16_BYTE( "motof33t.bin", 0x500000, 0x80000, CRC(a0fc90b2) SHA1(08ac2510287e8c3e8e52995d8f741b2a58e5b37b) )
1593 	ROM_LOAD16_BYTE( "motof33r.bin", 0x500001, 0x80000, CRC(dcc206cf) SHA1(f0b7d5d289f4c0de99b536dd2874ffdabf648cb2) )
1594 	ROM_LOAD16_BYTE( "motof35t.bin", 0x600000, 0x80000, CRC(74320763) SHA1(9cbf61c51dd96dc3e4a4227f3080766b9482a16a) )
1595 	ROM_LOAD16_BYTE( "motof35r.bin", 0x600001, 0x80000, CRC(a7f9df2e) SHA1(c3e0c67081cf8f7b24350abf5a9adbb544ab44a7) )
1596 
1597 	ROM_REGION( 0x100000, REGION_SOUND1, 0 )	/* 1MB for ADPCM samples */
1598 	ROM_LOAD( "mfadpcm.bin",  0x80000, 0x80000, CRC(fde543c4) SHA1(7d36d7f2f30d0ac40da77a36a47488d75474caaf) )
1599 
1600 	ROM_REGION( 0x0600, REGION_PROMS, ROMREGION_DISPOSE )	/* microcode for growth renderer */
1601 	ROM_LOAD( "094-001a.bin",  0x0000, 0x0200, CRC(a70ade3f) SHA1(f4a558b17767eed2683c768d1b441e75edcff967) )
1602 	ROM_LOAD( "094-002a.bin",  0x0200, 0x0200, CRC(f4768b4d) SHA1(a506fa5386ab0ea2851ff1f8474d4bfc66deaa70) )
1603 	ROM_LOAD( "094-003a.bin",  0x0400, 0x0200, CRC(22a76ad4) SHA1(ce840c283bbd3a5f19dc8d91b19d1571eff51ff4) )
1604 ROM_END
1605 
1606 
1607 ROM_START( rrreveng )
1608 	ROM_REGION( 0x80000, REGION_CPU1, 0 )	/* 8*64k for 68000 code */
1609 	ROM_LOAD32_BYTE( "rrprghh.bin", 0x00000, 0x20000, CRC(d2903e9d) SHA1(8782cd6ee39e2159b9ebc68ecdc3ecefcdeb8623) )
1610 	ROM_LOAD32_BYTE( "rrprghl.bin", 0x00001, 0x20000, CRC(1afd500c) SHA1(6d24087a839e5e7d9c764026a9f3089e52785cdb) )
1611 	ROM_LOAD32_BYTE( "rrprglh.bin", 0x00002, 0x20000, CRC(2b03a6fc) SHA1(7c95a0307b854bd37fd327ff1af1b69aa60fb2fd) )
1612 	ROM_LOAD32_BYTE( "rrprgll.bin", 0x00003, 0x20000, CRC(acf078da) SHA1(3506e105d3b208864ce12ab20e6250cb3a0005d6) )
1613 
1614 	ROM_REGION( 0x14000, REGION_CPU2, 0 )	/* 64k for 6502 code */
1615 	ROM_LOAD( "rr65snd.bin", 0x10000, 0x4000, CRC(d78429da) SHA1(a4d36d74986f08c793f15f2e67cb97a8c91c5e90) )
1616 	ROM_CONTINUE(            0x04000, 0xc000 )
1617 
1618 	ROM_REGION( 0x180000, REGION_GFX1, ROMREGION_DISPOSE )
1619 	ROM_LOAD( "rralpl.bin", 0x000000, 0x80000, CRC(00488dad) SHA1(604f08a219db0438dcbf21337ebd497f353bd812) ) /* playfield, planes 0-1 */
1620 	ROM_LOAD( "rralpm.bin", 0x080000, 0x80000, CRC(ade27447) SHA1(641fdca97a4b08251e111425d8467e4640433df7) ) /* playfield, planes 2-3 */
1621 	ROM_LOAD( "rralph.bin", 0x100000, 0x80000, CRC(ef04f04e) SHA1(e518133096978c4a0152253231625c385a84530f) ) /* playfield, planes 4-5 */
1622 
1623 	ROM_REGION( 0x020000, REGION_GFX2, ROMREGION_DISPOSE )
1624 	ROM_LOAD( "rralalph.bin", 0x000000, 0x20000, CRC(7ca93790) SHA1(5e2f069be4b15d63f418c8693e8550eb0ae22381) ) /* alphanumerics */
1625 
1626 	ROM_REGION16_BE( 0x500000, REGION_GFX3, 0 )
1627 	ROM_LOAD16_BYTE( "rrmo0h.bin", 0x000000, 0x80000, CRC(9b7e0315) SHA1(856804e89f586a4e777da5f47dc29c4e34175f44) )
1628 	ROM_LOAD16_BYTE( "rrmo0l.bin", 0x000001, 0x80000, CRC(10478697) SHA1(9682e82cfbdc20f63d5c49303265c598a334c15b) )
1629 	ROM_LOAD16_BYTE( "rrmo1h.bin", 0x100000, 0x80000, CRC(c7a48389) SHA1(a263aa4829cb243440ebe0496dd4f0158d97e2cc) )
1630 	ROM_LOAD16_BYTE( "rrmo1l.bin", 0x100001, 0x80000, CRC(085a67c1) SHA1(0449abb5fec9014bd0ad14ce4802f726a90bc48c) )
1631 	ROM_LOAD16_BYTE( "rrmo2h.bin", 0x200000, 0x80000, CRC(aea35aff) SHA1(2e02d2e877d356f9fb07e8b55ce252a148192d59) )
1632 	ROM_LOAD16_BYTE( "rrmo2l.bin", 0x200001, 0x80000, CRC(b256d6d6) SHA1(0f0a05e3e58a00662f99988a050f2f5a11592d29) )
1633 	ROM_LOAD16_BYTE( "rrmo3h.bin", 0x300000, 0x80000, CRC(e02549d7) SHA1(8b373d4969c77a14b15588f8a7e2977277fc9752) )
1634 	ROM_LOAD16_BYTE( "rrmo3l.bin", 0x300001, 0x80000, CRC(8c81b537) SHA1(16cf8804687590aedf9020f9619bd14240f3b628) )
1635 	ROM_LOAD16_BYTE( "rrmo4h.bin", 0x400000, 0x80000, CRC(12bf3e11) SHA1(37b1a7fe0b50202030f5c1938b95a449bbd51add) )
1636 	ROM_LOAD16_BYTE( "rrmo4l.bin", 0x400001, 0x80000, CRC(a80175f6) SHA1(db621902fdfa99ec532713f4314c6cbb8353a773) )
1637 
1638 	ROM_REGION( 0x100000, REGION_SOUND1, 0 )	/* 1MB for ADPCM samples */
1639 	ROM_LOAD( "rralpc0.bin",  0x80000, 0x80000, CRC(1f7b6ecf) SHA1(1787a2e89618e1338d70a54684dbc7d44c5f5559) )
1640 	ROM_LOAD( "rralpc1.bin",  0x80000, 0x80000, CRC(7ccd26d7) SHA1(1a74bdc66482896f5b9795d27383aa993e5fbaa4) )
1641 
1642 	ROM_REGION( 0x0600, REGION_PROMS, ROMREGION_DISPOSE )	/* microcode for growth renderer */
1643 	ROM_LOAD( "rrmoprg1.bin",  0x0000, 0x0200, NO_DUMP )
1644 	ROM_LOAD( "rrmoprg2.bin",  0x0200, 0x0200, NO_DUMP )
1645 	ROM_LOAD( "rrmoprg3.bin",  0x0400, 0x0200, NO_DUMP )
1646 ROM_END
1647 
1648 
1649 ROM_START( rrrevenp )
1650 	ROM_REGION( 0x80000, REGION_CPU1, 0 )	/* 8*64k for 68000 code */
1651 	ROM_LOAD32_BYTE( "rrprghh.bin", 0x00000, 0x20000, CRC(d2903e9d) SHA1(8782cd6ee39e2159b9ebc68ecdc3ecefcdeb8623) )
1652 	ROM_LOAD32_BYTE( "rrprghl.bin", 0x00001, 0x20000, CRC(1afd500c) SHA1(6d24087a839e5e7d9c764026a9f3089e52785cdb) )
1653 	ROM_LOAD32_BYTE( "rrprglh.bin", 0x00002, 0x20000, CRC(2b03a6fc) SHA1(7c95a0307b854bd37fd327ff1af1b69aa60fb2fd) )
1654 	ROM_LOAD32_BYTE( "rrprgll.bin", 0x00003, 0x20000, CRC(acf078da) SHA1(3506e105d3b208864ce12ab20e6250cb3a0005d6) )
1655 
1656 	ROM_REGION( 0x14000, REGION_CPU2, 0 )	/* 64k for 6502 code */
1657 	ROM_LOAD( "rr65snd.bin", 0x10000, 0x4000, CRC(d78429da) SHA1(a4d36d74986f08c793f15f2e67cb97a8c91c5e90) )
1658 	ROM_CONTINUE(            0x04000, 0xc000 )
1659 
1660 	ROM_REGION( 0x180000, REGION_GFX1, ROMREGION_DISPOSE )
1661 	ROM_LOAD( "rralpl.bin", 0x000000, 0x80000, CRC(00488dad) SHA1(604f08a219db0438dcbf21337ebd497f353bd812) ) /* playfield, planes 0-1 */
1662 	ROM_LOAD( "rralpm.bin", 0x080000, 0x80000, CRC(ade27447) SHA1(641fdca97a4b08251e111425d8467e4640433df7) ) /* playfield, planes 2-3 */
1663 	ROM_LOAD( "rralph.bin", 0x100000, 0x80000, CRC(ef04f04e) SHA1(e518133096978c4a0152253231625c385a84530f) ) /* playfield, planes 4-5 */
1664 
1665 	ROM_REGION( 0x020000, REGION_GFX2, ROMREGION_DISPOSE )
1666 	ROM_LOAD( "alpha.13n", 0x000000, 0x20000, CRC(f2efbd66) SHA1(d5339f0b3de7a102d659f7459b5f4800cab31829) ) /* alphanumerics */
1667 
1668 	ROM_REGION16_BE( 0x500000, REGION_GFX3, 0 )
1669 	ROM_LOAD16_BYTE( "mo0h.31n", 0x000000, 0x80000, CRC(fc2755d5) SHA1(e24319161307efbb3828b21a6250869051f1ccc1) )
1670 	ROM_LOAD16_BYTE( "mo0l.31l", 0x000001, 0x80000, CRC(f9f6bfe3) SHA1(c7e1479bb86646691d5ca7ee9127553cfd86571e) )
1671 	ROM_LOAD16_BYTE( "rrmo1h.bin", 0x100000, 0x80000, CRC(c7a48389) SHA1(a263aa4829cb243440ebe0496dd4f0158d97e2cc) )
1672 	ROM_LOAD16_BYTE( "rrmo1l.bin", 0x100001, 0x80000, CRC(085a67c1) SHA1(0449abb5fec9014bd0ad14ce4802f726a90bc48c) )
1673 	ROM_LOAD16_BYTE( "rrmo2h.bin", 0x200000, 0x80000, CRC(aea35aff) SHA1(2e02d2e877d356f9fb07e8b55ce252a148192d59) )
1674 	ROM_LOAD16_BYTE( "rrmo2l.bin", 0x200001, 0x80000, CRC(b256d6d6) SHA1(0f0a05e3e58a00662f99988a050f2f5a11592d29) )
1675 	ROM_LOAD16_BYTE( "mo3h.37n", 0x300000, 0x80000, CRC(563baaeb) SHA1(e356aa2048c6addefa62d10a17fe5736afa54b16) )
1676 	ROM_LOAD16_BYTE( "mo3l.37l", 0x300001, 0x80000, CRC(e0cf3396) SHA1(544863e5c18cce002ced8f96d5dfaedffdcfff1e) )
1677 	ROM_LOAD16_BYTE( "mo4h.31t", 0x400000, 0x80000, CRC(af6a027e) SHA1(08038bddb6aa7e97f013f9d3e508f5501821e460) )
1678 	ROM_LOAD16_BYTE( "mo4l.31r", 0x400001, 0x80000, CRC(9ebc5369) SHA1(ffd8418b328d99aa44fb1aed1db1aa6ac715c644) )
1679 
1680 	ROM_REGION( 0x100000, REGION_SOUND1, 0 )	/* 1MB for ADPCM samples */
1681 	ROM_LOAD( "rralpc0.bin",  0x80000, 0x80000, CRC(1f7b6ecf) SHA1(1787a2e89618e1338d70a54684dbc7d44c5f5559) )
1682 	ROM_LOAD( "rralpc1.bin",  0x80000, 0x80000, CRC(7ccd26d7) SHA1(1a74bdc66482896f5b9795d27383aa993e5fbaa4) )
1683 
1684 	ROM_REGION( 0x0600, REGION_PROMS, ROMREGION_DISPOSE )	/* microcode for growth renderer */
1685 	ROM_LOAD( "rrmoprg1.bin",  0x0000, 0x0200, NO_DUMP )
1686 	ROM_LOAD( "rrmoprg2.bin",  0x0200, 0x0200, NO_DUMP )
1687 	ROM_LOAD( "rrmoprg3.bin",  0x0400, 0x0200, NO_DUMP )
1688 ROM_END
1689 
1690 
1691 
1692 
1693 /*************************************
1694  *
1695  *	Driver initialization
1696  *
1697  *************************************/
1698 
1699 static DRIVER_INIT( spclords )
1700 {
1701 	atarigen_eeprom_default = NULL;
1702 	atarijsa_init(1, 4, 2, 0x0040);
1703 	atarijsa3_init_adpcm(REGION_SOUND1);
1704 
1705 	atarigx2_playfield_base = 0x000;
1706 	atarigx2_motion_object_base = 0x400;
1707 	atarigx2_motion_object_mask = 0x3ff;
1708 
1709 	memory_set_unmap_value(~0);
1710 }
1711 
1712 
DRIVER_INIT(motofren)1713 static DRIVER_INIT( motofren )
1714 {
1715 	atarigen_eeprom_default = NULL;
1716 	atarijsa_init(1, 4, 2, 0x0040);
1717 	atarijsa3_init_adpcm(REGION_SOUND1);
1718 
1719 	atarigx2_playfield_base = 0x400;
1720 	atarigx2_motion_object_base = 0x200;
1721 	atarigx2_motion_object_mask = 0x1ff;
1722 
1723 	memory_set_unmap_value(~0);
1724 /*
1725 L/W=!68.A23*!E.A22*!E.A21										= 000x xxxx = 000000-1fffff
1726    +68.A23*E.A22*E.A21*68.A20*68.A19*68.A18*68.A17				= 1111 111x = fe0000-ffffff
1727 
1728 68.XIO=68.A23*E.A22*E.A21*!68.A20*!68.A18*!68.A17*!68.A16		= 1110 x000 = e00000-e0ffff, e80000-e8ffff
1729     +68.A23*E.A22*E.A21*!68.A20*!68.A19							= 1110 0xxx = e00000-e7ffff
1730 
1731 68.ROM=!68.A23*68.AS*!E.A22*!E.A21								= 000x xxxx = 000000-1fffff
1732 
1733 68.EXT=68.A23*68.AS*E.A22*!E.A21*!68.A20						= 1100 xxxx = c00000-cfffff
1734 
1735 68.WRAM=68.A23*68.AS*E.A22*E.A21*68.A20*68.A19*68.A18*68.A17	= 1111 111x = fe0000-ffffff
1736 
1737 XMEM=68.A23*E.A22*!E.A21*68.A20									= 1101 xxxx = d00000-dfffff
1738 
1739 68.W1=68.A23*E.A22*!E.A21*68.A20*!68.A18						= 1101 x0xx = d00000-d3ffff, d80000-dbffff
1740 
1741 68.W0=68.A23*E.A22*!E.A21*68.A20*!68.A18						= 1101 x0xx = d00000-d3ffff, d80000-dbffff
1742     +68.A23*E.A22*!E.A21*68.A20*!68.A19							= 1101 0xxx = d00000-d7ffff
1743     +68.A23*E.A22*!E.A21*!68.A20*68.A19							= 1100 1xxx = c80000-cfffff
1744     +!68.A23*!E.A22*!E.A21										= 000x xxxx = 000000-1fffff
1745 */
1746 }
1747 
READ32_HANDLER(rrreveng_prot_r)1748 static READ32_HANDLER( rrreveng_prot_r )
1749 {
1750 	return 0;
1751 }
1752 
DRIVER_INIT(rrreveng)1753 static DRIVER_INIT( rrreveng )
1754 {
1755 	atarigen_eeprom_default = NULL;
1756 	atarijsa_init(1, 4, 2, 0x0040);
1757 	atarijsa3_init_adpcm(REGION_SOUND1);
1758 
1759 	atarigx2_playfield_base = 0x000;
1760 	atarigx2_motion_object_base = 0x400;
1761 	atarigx2_motion_object_mask = 0x3ff;
1762 
1763 	install_mem_read32_handler(0, 0xca0fc0, 0xca0fc3, rrreveng_prot_r);
1764 }
1765 
1766 
1767 
1768 /*************************************
1769  *
1770  *	Game driver(s)
1771  *
1772  *************************************/
1773 
1774 GAMEX( 1992, spclords, 0,        atarigx2, spclords, spclords, ROT0, "Atari Games", "Space Lords", GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
1775 GAMEX( 1992, spclorda, spclords, atarigx2, spclords, spclords, ROT0, "Atari Games", "Space Lords (alternate)", GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING )
1776 GAMEX( 1992, motofren, 0,        atarigx2, motofren, motofren, ROT0, "Atari Games", "Moto Frenzy", GAME_UNEMULATED_PROTECTION )
1777 GAMEX( 1994, rrreveng, 0,        atarigx2, rrreveng, rrreveng, ROT0, "Atari Games", "Road Riot's Revenge (prototype)", GAME_UNEMULATED_PROTECTION )
1778 GAMEX( 1994, rrrevenp, rrreveng, atarigx2, rrreveng, rrreveng, ROT0, "Atari Games", "Road Riot's Revenge (prototype alt)", GAME_UNEMULATED_PROTECTION )
1779