1 // FB Alpha Taito F3 driver module
2 // Based on MAME driver by Bryan McPhail and MANY others.
3 
4 /*
5     version .00001d ;)
6 
7 	- known issues and workarounds -
8 	scfinals & scfinalso coin inputs do not work, therefore a kludge is used.
9 	  -> if a coin is pressed, it instead presses the service coin :)
10 	  -> scfinals also displays a weird/corrupt version string in service mode(!!)
11 
12 	- todo -
13 	kirameki sound banking
14 */
15 
16 //#define USE_CPU_SPEEDHACKS
17 
18 #include "tiles_generic.h"
19 #include "m68000_intf.h"
20 #include "taito.h"
21 #include "taitof3_snd.h"
22 #include "taitof3_video.h"
23 #include "es5506.h"
24 #include "eeprom.h"
25 #include "msm6295.h"
26 #include "burn_gun.h"
27 
28 static UINT8 *DrvVRAMRAM;
29 static UINT8 *DrvPivotRAM;
30 static UINT16 *DrvCoinWord;
31 
32 static UINT8 DrvJoy1[16];
33 static UINT8 DrvJoy2[16];
34 static UINT8 DrvJoy3[16];
35 static UINT8 DrvJoy4[16];
36 static UINT8 DrvJoy5[16];
37 static UINT8 DrvSrv[1];
38 static UINT8 DrvReset;
39 static UINT16 DrvInputs[5];
40 static INT16 DrvAxis[2];
41 static UINT8 previous_coin;
42 
43 static INT32 sound_cpu_in_reset = 0;
44 static INT32 watchdog;
45 
46 INT32 f3_game = 0;
47 
48 static struct BurnInputInfo F3InputList[] = {
49 	{"P1 Coin",			BIT_DIGITAL,	DrvJoy5 + 4,	"p1 coin"	},
50 	{"P1 Start",		BIT_DIGITAL,	DrvJoy1 + 12,	"p1 start"	},
51 	{"P1 Up",			BIT_DIGITAL,	DrvJoy2 + 0,	"p1 up"		},
52 	{"P1 Down",			BIT_DIGITAL,	DrvJoy2 + 1,	"p1 down"	},
53 	{"P1 Left",			BIT_DIGITAL,	DrvJoy2 + 2,	"p1 left"	},
54 	{"P1 Right",		BIT_DIGITAL,	DrvJoy2 + 3,	"p1 right"	},
55 	{"P1 Button 1",		BIT_DIGITAL,	DrvJoy1 + 0,	"p1 fire 1"	},
56 	{"P1 Button 2",		BIT_DIGITAL,	DrvJoy1 + 1,	"p1 fire 2"	},
57 	{"P1 Button 3",		BIT_DIGITAL,	DrvJoy1 + 2,	"p1 fire 3"	},
58 	{"P1 Button 4",		BIT_DIGITAL,	DrvJoy1 + 3,	"p1 fire 4"	},
59 
60 	{"P2 Coin",			BIT_DIGITAL,	DrvJoy5 + 5,	"p2 coin"	},
61 	{"P2 Start",		BIT_DIGITAL,	DrvJoy1 + 13,	"p2 start"	},
62 	{"P2 Up",			BIT_DIGITAL,	DrvJoy2 + 4,	"p2 up"		},
63 	{"P2 Down",			BIT_DIGITAL,	DrvJoy2 + 5,	"p2 down"	},
64 	{"P2 Left",			BIT_DIGITAL,	DrvJoy2 + 6,	"p2 left"	},
65 	{"P2 Right",		BIT_DIGITAL,	DrvJoy2 + 7,	"p2 right"	},
66 	{"P2 Button 1",		BIT_DIGITAL,	DrvJoy1 + 4,	"p2 fire 1"	},
67 	{"P2 Button 2",		BIT_DIGITAL,	DrvJoy1 + 5,	"p2 fire 2"	},
68 	{"P2 Button 3",		BIT_DIGITAL,	DrvJoy1 + 6,	"p2 fire 3"	},
69 	{"P2 Button 4",		BIT_DIGITAL,	DrvJoy1 + 7,	"p2 fire 4"	},
70 
71 	{"P3 Coin",			BIT_DIGITAL,	DrvJoy5 + 6,	"p3 coin"	},
72 	{"P3 Start",		BIT_DIGITAL,	DrvJoy1 + 14,	"p3 start"	},
73 	{"P3 Up",			BIT_DIGITAL,	DrvJoy4 + 0,	"p3 up"		},
74 	{"P3 Down",			BIT_DIGITAL,	DrvJoy4 + 1,	"p3 down"	},
75 	{"P3 Left",			BIT_DIGITAL,	DrvJoy4 + 2,	"p3 left"	},
76 	{"P3 Right",		BIT_DIGITAL,	DrvJoy4 + 3,	"p3 right"	},
77 	{"P3 Button 1",		BIT_DIGITAL,	DrvJoy3 + 8,	"p3 fire 1"	},
78 	{"P3 Button 2",		BIT_DIGITAL,	DrvJoy3 + 9,	"p3 fire 2"	},
79 	{"P3 Button 3",		BIT_DIGITAL,	DrvJoy3 + 10,	"p3 fire 3"	},
80 	{"P3 Button 4",		BIT_DIGITAL,	DrvJoy3 + 11,	"p3 fire 4"	},
81 
82 	{"P4 Coin",			BIT_DIGITAL,	DrvJoy5 + 7,	"p4 coin"	},
83 	{"P4 Start",		BIT_DIGITAL,	DrvJoy1 + 15,	"p4 start"	},
84 	{"P4 Up",			BIT_DIGITAL,	DrvJoy4 + 4,	"p4 up"		},
85 	{"P4 Down",			BIT_DIGITAL,	DrvJoy4 + 5,	"p4 down"	},
86 	{"P4 Left",			BIT_DIGITAL,	DrvJoy4 + 6,	"p4 left"	},
87 	{"P4 Right",		BIT_DIGITAL,	DrvJoy4 + 7,	"p4 right"	},
88 	{"P4 Button 1",		BIT_DIGITAL,	DrvJoy3 + 12,	"p4 fire 1"	},
89 	{"P4 Button 2",		BIT_DIGITAL,	DrvJoy3 + 13,	"p4 fire 2"	},
90 	{"P4 Button 3",		BIT_DIGITAL,	DrvJoy3 + 14,	"p4 fire 3"	},
91 	{"P4 Button 4",		BIT_DIGITAL,	DrvJoy3 + 15,	"p4 fire 4"	},
92 
93 	{"Reset",			BIT_DIGITAL,	&DrvReset,		"reset"		},
94 	{"Service 1",		BIT_DIGITAL,	DrvJoy1 + 9,	"service"	},
95 	{"Service 2",		BIT_DIGITAL,	DrvJoy1 + 10,	"service"	},
96 	{"Service 3",		BIT_DIGITAL,	DrvJoy1 + 11,	"service"	},
97 	{"Service Mode",	BIT_DIGITAL,    DrvSrv + 0,     "diag"		},
98 	{"Tilt",			BIT_DIGITAL,	DrvJoy1 + 8,	"tilt"		},
99 	{"Dip",	        	BIT_DIPSWITCH,  TaitoDip + 0,	"dip"		},
100 };
101 
102 STDINPUTINFO(F3)
103 
104 #define A(a, b, c, d) { a, b, (UINT8*)(c), d }
105 static struct BurnInputInfo F3AnalogInputList[] = {
106 	{"P1 Coin",			BIT_DIGITAL,	DrvJoy5 + 4,	"p1 coin"	},
107 	{"P1 Start",		BIT_DIGITAL,	DrvJoy1 + 12,	"p1 start"	},
108 	{"P1 Up",			BIT_DIGITAL,	DrvJoy2 + 0,	"p1 up"		},
109 	{"P1 Down",			BIT_DIGITAL,	DrvJoy2 + 1,	"p1 down"	},
110 	{"P1 Left",			BIT_DIGITAL,	DrvJoy2 + 2,	"p1 left"	},
111 	{"P1 Right",		BIT_DIGITAL,	DrvJoy2 + 3,	"p1 right"	},
112 	{"P1 Button 1",		BIT_DIGITAL,	DrvJoy1 + 0,	"p1 fire 1"	},
113 	{"P1 Button 2",		BIT_DIGITAL,	DrvJoy1 + 1,	"p1 fire 2"	},
114 	{"P1 Button 3",		BIT_DIGITAL,	DrvJoy1 + 2,	"p1 fire 3"	},
115 	{"P1 Button 4",		BIT_DIGITAL,	DrvJoy1 + 3,	"p1 fire 4"	},
116 	A("P1 Analog Dial",	BIT_ANALOG_REL, DrvAxis + 0,	"p1 x-axis"	),
117 
118 	{"P2 Coin",			BIT_DIGITAL,	DrvJoy5 + 5,	"p2 coin"	},
119 	{"P2 Start",		BIT_DIGITAL,	DrvJoy1 + 13,	"p2 start"	},
120 	{"P2 Up",			BIT_DIGITAL,	DrvJoy2 + 4,	"p2 up"		},
121 	{"P2 Down",			BIT_DIGITAL,	DrvJoy2 + 5,	"p2 down"	},
122 	{"P2 Left",			BIT_DIGITAL,	DrvJoy2 + 6,	"p2 left"	},
123 	{"P2 Right",		BIT_DIGITAL,	DrvJoy2 + 7,	"p2 right"	},
124 	{"P2 Button 1",		BIT_DIGITAL,	DrvJoy1 + 4,	"p2 fire 1"	},
125 	{"P2 Button 2",		BIT_DIGITAL,	DrvJoy1 + 5,	"p2 fire 2"	},
126 	{"P2 Button 3",		BIT_DIGITAL,	DrvJoy1 + 6,	"p2 fire 3"	},
127 	{"P2 Button 4",		BIT_DIGITAL,	DrvJoy1 + 7,	"p2 fire 4"	},
128 	A("P2 Analog Dial",	BIT_ANALOG_REL, DrvAxis + 1,	"p2 x-axis"	),
129 
130 	{"P3 Coin",			BIT_DIGITAL,	DrvJoy5 + 6,	"p3 coin"	},
131 	{"P3 Start",		BIT_DIGITAL,	DrvJoy1 + 14,	"p3 start"	},
132 	{"P3 Up",			BIT_DIGITAL,	DrvJoy4 + 0,	"p3 up"		},
133 	{"P3 Down",			BIT_DIGITAL,	DrvJoy4 + 1,	"p3 down"	},
134 	{"P3 Left",			BIT_DIGITAL,	DrvJoy4 + 2,	"p3 left"	},
135 	{"P3 Right",		BIT_DIGITAL,	DrvJoy4 + 3,	"p3 right"	},
136 	{"P3 Button 1",		BIT_DIGITAL,	DrvJoy3 + 8,	"p3 fire 1"	},
137 	{"P3 Button 2",		BIT_DIGITAL,	DrvJoy3 + 9,	"p3 fire 2"	},
138 	{"P3 Button 3",		BIT_DIGITAL,	DrvJoy3 + 10,	"p3 fire 3"	},
139 	{"P3 Button 4",		BIT_DIGITAL,	DrvJoy3 + 11,	"p3 fire 4"	},
140 
141 	{"P4 Coin",			BIT_DIGITAL,	DrvJoy5 + 7,	"p4 coin"	},
142 	{"P4 Start",		BIT_DIGITAL,	DrvJoy1 + 15,	"p4 start"	},
143 	{"P4 Up",			BIT_DIGITAL,	DrvJoy4 + 4,	"p4 up"		},
144 	{"P4 Down",			BIT_DIGITAL,	DrvJoy4 + 5,	"p4 down"	},
145 	{"P4 Left",			BIT_DIGITAL,	DrvJoy4 + 6,	"p4 left"	},
146 	{"P4 Right",		BIT_DIGITAL,	DrvJoy4 + 7,	"p4 right"	},
147 	{"P4 Button 1",		BIT_DIGITAL,	DrvJoy3 + 12,	"p4 fire 1"	},
148 	{"P4 Button 2",		BIT_DIGITAL,	DrvJoy3 + 13,	"p4 fire 2"	},
149 	{"P4 Button 3",		BIT_DIGITAL,	DrvJoy3 + 14,	"p4 fire 3"	},
150 	{"P4 Button 4",		BIT_DIGITAL,	DrvJoy3 + 15,	"p4 fire 4"	},
151 
152 	{"Reset",			BIT_DIGITAL,	&DrvReset,		"reset"		},
153 	{"Service 1",		BIT_DIGITAL,	DrvJoy1 + 9,	"service"	},
154 	{"Service 2",		BIT_DIGITAL,	DrvJoy1 + 10,	"service"	},
155 	{"Service 3",		BIT_DIGITAL,	DrvJoy1 + 11,	"service"	},
156 	{"Service Mode",	BIT_DIGITAL,    DrvSrv + 0,     "diag"		},
157 	{"Tilt",			BIT_DIGITAL,	DrvJoy1 + 8,	"tilt"		},
158 	{"Dip",	        	BIT_DIPSWITCH,  TaitoDip + 0,	"dip"		},
159 };
160 
161 STDINPUTINFO(F3Analog)
162 
163 static struct BurnInputInfo KnInputList[] = {
164 	{"P1 Coin",			BIT_DIGITAL,	DrvJoy5 + 4,	"p1 coin"	},
165 	{"P1 Start",		BIT_DIGITAL,	DrvJoy1 + 12,	"p1 start"	},
166 	{"P1 Up",			BIT_DIGITAL,	DrvJoy2 + 0,	"p1 up"		},
167 	{"P1 Down",			BIT_DIGITAL,	DrvJoy2 + 1,	"p1 down"	},
168 	{"P1 Left",			BIT_DIGITAL,	DrvJoy2 + 2,	"p1 left"	},
169 	{"P1 Right",		BIT_DIGITAL,	DrvJoy2 + 3,	"p1 right"	},
170 	{"P1 Weak Punch",	BIT_DIGITAL,	DrvJoy1 + 0,	"p1 fire 1"	},
171 	{"P1 Medium Punch",	BIT_DIGITAL,	DrvJoy1 + 1,	"p1 fire 2"	},
172 	{"P1 Strong Punch",	BIT_DIGITAL,	DrvJoy1 + 2,	"p1 fire 3"	},
173 	{"P1 Weak Kick",	BIT_DIGITAL,	DrvJoy4 + 0,	"p1 fire 4"	},
174 	{"P1 Medium Kick",	BIT_DIGITAL,	DrvJoy4 + 1,	"p1 fire 5"	},
175 	{"P1 Strong Kick",	BIT_DIGITAL,	DrvJoy4 + 2,	"p1 fire 6"	},
176 
177 	{"P2 Coin",			BIT_DIGITAL,	DrvJoy5 + 5,	"p2 coin"	},
178 	{"P2 Start",		BIT_DIGITAL,	DrvJoy1 + 13,	"p2 start"	},
179 	{"P2 Up",			BIT_DIGITAL,	DrvJoy2 + 4,	"p2 up"		},
180 	{"P2 Down",			BIT_DIGITAL,	DrvJoy2 + 5,	"p2 down"	},
181 	{"P2 Left",			BIT_DIGITAL,	DrvJoy2 + 6,	"p2 left"	},
182 	{"P2 Right",		BIT_DIGITAL,	DrvJoy2 + 7,	"p2 right"	},
183 	{"P2 Weak Punch",	BIT_DIGITAL,	DrvJoy1 + 4,	"p2 fire 1"	},
184 	{"P2 Medium Punch",	BIT_DIGITAL,	DrvJoy1 + 5,	"p2 fire 2"	},
185 	{"P2 Strong Punch",	BIT_DIGITAL,	DrvJoy1 + 6,	"p2 fire 3"	},
186 	{"P2 Weak Kick",	BIT_DIGITAL,	DrvJoy3 + 8,	"p2 fire 4"	},
187 	{"P2 Medium Kick",	BIT_DIGITAL,	DrvJoy3 + 9,	"p2 fire 5"	},
188 	{"P2 Strong Kick",	BIT_DIGITAL,	DrvJoy3 + 10,	"p2 fire 6"	},
189 
190 	{"Reset",			BIT_DIGITAL,	&DrvReset,		"reset"		},
191 	{"Service 1",		BIT_DIGITAL,	DrvJoy1 + 9,	"service"	},
192 	{"Service 2",		BIT_DIGITAL,	DrvJoy1 + 10,	"service"	},
193 	{"Service 3",		BIT_DIGITAL,	DrvJoy1 + 11,	"service"	},
194 	{"Service Mode",	BIT_DIGITAL,    DrvSrv + 0,     "diag"		},
195 	{"Tilt",			BIT_DIGITAL,	DrvJoy1 + 8,	"tilt"		},
196 	{"Dip",	        	BIT_DIPSWITCH,  TaitoDip + 0,	"dip"		},
197 };
198 
199 STDINPUTINFO(Kn)
200 
201 static struct BurnDIPInfo gseekerDIPList[]=
202 {
203 	{0x2e, 0xff, 0xff, 0x01, NULL },
204 
205 	{0   , 0xfe, 0   , 2   , "Music Tempo (must restart!)" },
206 	{0x2e, 0x01, 0x02, 0x00, "Normal / Fast" },
207 	{0x2e, 0x01, 0x02, 0x02, "Slow / Mellow" },
208 
209 	{0   , 0xfe, 0   , 2   , "Stage 5 Graphic Glitch Fix" },
210 	{0x2e, 0x01, 0x01, 0x01, "Yes" },
211 	{0x2e, 0x01, 0x01, 0x00, "No" },
212 };
213 
214 STDDIPINFO(gseeker)
215 
216 static struct BurnDIPInfo F3DIPList[]=
217 {
218 	{0x2e, 0xff, 0xff, 0x00, NULL },
219 
220 	{0   , 0xfe, 0   , 2   , "Music Tempo (must restart!)" },
221 	{0x2e, 0x01, 0x02, 0x00, "Normal / Fast" },
222 	{0x2e, 0x01, 0x02, 0x02, "Slow / Mellow" },
223 };
224 
225 STDDIPINFO(F3)
226 
227 static struct BurnDIPInfo F3AnalogDIPList[]=
228 {
229 	{0x30, 0xff, 0xff, 0x00, NULL },
230 
231 	{0   , 0xfe, 0   , 2   , "Music Tempo (must restart!)" },
232 	{0x30, 0x01, 0x02, 0x00, "Normal / Fast" },
233 	{0x30, 0x01, 0x02, 0x02, "Slow / Mellow" },
234 };
235 
236 STDDIPINFO(F3Analog)
237 
238 static struct BurnDIPInfo KnDIPList[]=
239 {
240 	{0x1e, 0xff, 0xff, 0x00, NULL },
241 
242 	{0   , 0xfe, 0   , 2   , "Music Tempo (must restart!)" },
243 	{0x1e, 0x01, 0x02, 0x00, "Normal / Fast" },
244 	{0x1e, 0x01, 0x02, 0x02, "Slow / Mellow" },
245 };
246 
STDDIPINFO(Kn)247 STDDIPINFO(Kn)
248 
249 static void control_w(INT32 offset, UINT32 d, INT32 b)
250 {
251 	switch (offset & 0x1c)
252 	{
253 		case 0x00:
254 			watchdog = 0;
255 		return;
256 
257 		case 0x04:
258 		{
259 	//		bprintf (0, _T("contrl %2.2x, %8.8x, %8.8x\n"), offset, d, b);
260 			if ((offset & 3) == 0) DrvCoinWord[0] = d << 0; // or 8?
261 		}
262 		return;
263 
264 		case 0x10:
265 		{
266 			if ((offset & 3) == 3 || (offset == 0x4a0012 && b == 2)) {
267 				EEPROMSetClockLine((d & 0x08) ? EEPROM_ASSERT_LINE : EEPROM_CLEAR_LINE);
268 				EEPROMWriteBit(d & 0x04);
269 				EEPROMSetCSLine((d & 0x10) ? EEPROM_CLEAR_LINE : EEPROM_ASSERT_LINE);
270 			}
271 		}
272 		return;
273 
274 		case 0x14:
275 		{
276 	//		bprintf (0, _T("contrl %2.2x, %8.8x, %8.8x\n"), offset, d, b);
277 			if ((offset & 3) == 0) DrvCoinWord[1] = d << 0; // or 8?
278 		}
279 		return;
280 
281 		case 0x1c:
282 		{
283 			if (BurnDrvGetFlags() & BDF_BOOTLEG) {
284 				if ((offset & 3) == 3) { MSM6295Write(0, d); return; }
285 			//	bprintf (0, _T("Sound Command: %x, %x %d\n"), offset & 0x1f, d, b);
286 				if ((offset & 3) == 0) { } // banking
287 			}
288 		}
289 		return;
290 	}
291 }
292 
f3_main_write_long(UINT32 a,UINT32 d)293 static void __fastcall f3_main_write_long(UINT32 a, UINT32 d)
294 {
295 	if ((a & 0xffff80) == 0x300000) {
296 		// sound_bankswitch_w
297 		return;
298 	}
299 
300 	if ((a & 0xffffe0) == 0x4a0000) {
301 		control_w(a, d,4);
302 		return;
303 	}
304 
305 	if ((a & 0xfffffc) == 0xc80000) {
306 		sound_cpu_in_reset = 0;
307 		return;
308 	}
309 
310 	if ((a & 0xfffffc) == 0xc80100) {
311 		SekReset(1);
312 		sound_cpu_in_reset = 1;
313 		return;
314 	}
315 }
316 
f3_main_write_word(UINT32 a,UINT16 d)317 static void __fastcall f3_main_write_word(UINT32 a, UINT16 d)
318 {
319 	if ((a & 0xffff80) == 0x300000) {
320 		// sound bankswitch
321 		return;
322 	}
323 
324 	if ((a & 0xffffe0) == 0x4a0000) {
325 		control_w(a, d,2);
326 		return;
327 	}
328 
329 	if ((a & 0xfffffc) == 0x4c0000) {
330 		// unknown
331 		return;
332 	}
333 
334 	if ((a & 0xfffffc) == 0xc80000) {
335 		sound_cpu_in_reset = 0;
336 		return;
337 	}
338 
339 	if ((a & 0xfffffc) == 0xc80100) {
340 		SekReset(1);
341 		sound_cpu_in_reset = 1;
342 		return;
343 	}
344 }
345 
f3_main_write_byte(UINT32 a,UINT8 d)346 static void __fastcall f3_main_write_byte(UINT32 a, UINT8 d)
347 {
348 	if ((a & 0xffff80) == 0x300000) {
349 		// sound bankswitch
350 		return;
351 	}
352 
353 	if ((a & 0xffffe0) == 0x4a0000) {
354 		control_w(a, d,1);
355 		return;
356 	}
357 
358 	if ((a & 0xfffffc) == 0xc80000) {
359 		sound_cpu_in_reset = 0;
360 		return;
361 	}
362 
363 	if ((a & 0xfffffc) == 0xc80100) {
364 		SekReset(1);
365 		sound_cpu_in_reset = 1;
366 		return;
367 	}
368 }
369 
control_r(INT32 offset,INT32 b)370 static UINT32 control_r(INT32 offset, INT32 b)
371 {
372 	offset &= 0x1c;
373 
374 	UINT32 ret = 0xffffffff;
375 
376 	switch (offset & 0x1c)
377 	{
378 		case 0x00:
379 			ret  = DrvInputs[0] & 0xffff;
380 			ret |= EEPROMRead() ? 0x01010000 : 0;
381 			ret |= (DrvInputs[4] & 0xfe) << 16;
382 			ret |= (DrvInputs[4] & 0xfe) << 24;
383 		break;
384 
385 		case 0x04:
386 			ret = DrvInputs[1] | (DrvCoinWord[0] << 16);
387 		break;
388 
389 		case 0x08:
390 		case 0x0c:
391 			ret = BurnTrackballReadWord(0, (offset >> 2) & 1);
392 			ret = 0xffff0000 + (((ret & 0xf) << 12) | ((ret & 0xff0) >> 4));
393 		break;
394 
395 		case 0x10:
396 			ret = DrvInputs[2] | 0xffff0000;
397 		break;
398 
399 		case 0x14:
400 			ret = DrvInputs[3] | (DrvCoinWord[1] << 16);
401 		break;
402 
403 		case 0x1c:
404 			ret = MSM6295Read(0);
405 		break;
406 	}
407 
408 	return ret;
409 }
410 
f3_main_read_long(UINT32 a)411 static UINT32 __fastcall f3_main_read_long(UINT32 a)
412 {
413 	if ((a & 0xffffe0) == 0x4a0000) {
414 		return control_r(a, 4);
415 	}
416 
417 	return 0;
418 }
419 
f3_main_read_word(UINT32 a)420 static UINT16 __fastcall f3_main_read_word(UINT32 a)
421 {
422 	if ((a & 0xffffe0) == 0x4a0000) {
423 		return control_r(a, 2) >> ((~a & 2) * 8);
424 	}
425 
426 	return 0;
427 }
428 
f3_main_read_byte(UINT32 a)429 static UINT8 __fastcall f3_main_read_byte(UINT32 a)
430 {
431 	if ((a & 0xffffe0) == 0x4a0000) {
432 		return control_r(a, 1) >> (((a & 3)^3) * 8);
433 	}
434 
435 	return 0;
436 }
437 
f3_palette_landmakr_onreset()438 static void f3_palette_landmakr_onreset()
439 {
440 	for (INT32 i = 0; i < 0x8000/4; i++) {
441 		UINT8 r = ((i & 1) ? 0xff : 0);
442 		UINT8 g = ((i & 2) ? 0xff : 0);
443 		UINT8 b = ((i & 4) ? 0xff : 0);
444 
445 		*((UINT32*)(TaitoPaletteRam + (i * 4))) =  BURN_ENDIAN_SWAP_INT32(r | (g << 24) | (b << 16));
446 	}
447 }
448 
f3_palette_write_long(UINT32 a,UINT32 d)449 static void __fastcall f3_palette_write_long(UINT32 a, UINT32 d)
450 {
451 	if ((a & 0xff8000) == 0x440000) {
452 		*((UINT32*)(TaitoPaletteRam + (a & 0x7ffc))) = BURN_ENDIAN_SWAP_INT32((d << 16) | (d >> 16));
453 		pPaletteUpdateCallback(a);
454 		return;
455 	}
456 }
457 
f3_palette_write_word(UINT32 a,UINT16 d)458 static void __fastcall f3_palette_write_word(UINT32 a, UINT16 d)
459 {
460 	if ((a & 0xff8000) == 0x440000) {
461 		*((UINT16*)(TaitoPaletteRam + (a & 0x7ffe))) = BURN_ENDIAN_SWAP_INT16(d);
462 		pPaletteUpdateCallback(a);
463 		return;
464 	}
465 }
466 
f3_palette_write_byte(UINT32 a,UINT8 d)467 static void __fastcall f3_palette_write_byte(UINT32 a, UINT8 d)
468 {
469 	if ((a & 0xff8000) == 0x440000) {
470 		TaitoPaletteRam[(a & 0x7fff) ^ 1] = d;
471 		pPaletteUpdateCallback(a);
472 		return;
473 	}
474 }
475 
DrvVRAMExpand(UINT16 offset)476 static void DrvVRAMExpand(UINT16 offset)
477 {
478 	offset &= 0x1ffc;
479 
480 	TaitoCharsB[offset * 2 + 1] = DrvVRAMRAM[offset + 2] >> 4;
481 	TaitoCharsB[offset * 2 + 0] = DrvVRAMRAM[offset + 2] & 0x0f;
482 	TaitoCharsB[offset * 2 + 3] = DrvVRAMRAM[offset + 3] >> 4;
483 	TaitoCharsB[offset * 2 + 2] = DrvVRAMRAM[offset + 3] & 0x0f;
484 	TaitoCharsB[offset * 2 + 5] = DrvVRAMRAM[offset + 0] >> 4;
485 	TaitoCharsB[offset * 2 + 4] = DrvVRAMRAM[offset + 0] & 0x0f;
486 	TaitoCharsB[offset * 2 + 7] = DrvVRAMRAM[offset + 1] >> 4;
487 	TaitoCharsB[offset * 2 + 6] = DrvVRAMRAM[offset + 1] & 0x0f;
488 }
489 
DrvPivotExpand(UINT16 offset)490 static void DrvPivotExpand(UINT16 offset)
491 {
492 	offset &= 0xfffc;
493 
494 	TaitoCharsPivot[offset * 2 + 1] = DrvPivotRAM[offset + 2] >> 4;
495 	TaitoCharsPivot[offset * 2 + 0] = DrvPivotRAM[offset + 2] & 0x0f;
496 	TaitoCharsPivot[offset * 2 + 3] = DrvPivotRAM[offset + 3] >> 4;
497 	TaitoCharsPivot[offset * 2 + 2] = DrvPivotRAM[offset + 3] & 0x0f;
498 	TaitoCharsPivot[offset * 2 + 5] = DrvPivotRAM[offset + 0] >> 4;
499 	TaitoCharsPivot[offset * 2 + 4] = DrvPivotRAM[offset + 0] & 0x0f;
500 	TaitoCharsPivot[offset * 2 + 7] = DrvPivotRAM[offset + 1] >> 4;
501 	TaitoCharsPivot[offset * 2 + 6] = DrvPivotRAM[offset + 1] & 0x0f;
502 }
503 
f3_VRAM_write_long(UINT32 a,UINT32 d)504 static void __fastcall f3_VRAM_write_long(UINT32 a, UINT32 d)
505 {
506 	if ((a & 0xffe000) == 0x61c000) {
507 		*((UINT32*)(TaitoVideoRam + (a & 0x1ffc))) = BURN_ENDIAN_SWAP_INT32((d << 16) | (d >> 16));
508 		dirty_tile_count[9] = 1;
509 		return;
510 	}
511 
512 	if ((a & 0xffe000) == 0x61e000) {
513 		*((UINT32*)(DrvVRAMRAM + (a & 0x1ffc))) = BURN_ENDIAN_SWAP_INT32((d << 16) | (d >> 16));
514 		DrvVRAMExpand(a);
515 		return;
516 	}
517 }
518 
f3_VRAM_write_word(UINT32 a,UINT16 d)519 static void __fastcall f3_VRAM_write_word(UINT32 a, UINT16 d)
520 {
521 	if ((a & 0xffe000) == 0x61c000) {
522 		*((UINT16*)(TaitoVideoRam + (a & 0x1ffe))) = BURN_ENDIAN_SWAP_INT16(d);
523 		dirty_tile_count[9] = 1;
524 		return;
525 	}
526 
527 	if ((a & 0xffe000) == 0x61e000) {
528 		*((UINT16*)(DrvVRAMRAM + (a & 0x1ffe))) = BURN_ENDIAN_SWAP_INT16(d);
529 		DrvVRAMExpand(a);
530 		return;
531 	}
532 }
533 
f3_VRAM_write_byte(UINT32 a,UINT8 d)534 static void __fastcall f3_VRAM_write_byte(UINT32 a, UINT8 d)
535 {
536 	if ((a & 0xffe000) == 0x61c000) {
537 		TaitoVideoRam[(a & 0x1fff) ^ 1] = d;
538 		dirty_tile_count[9] = 1;
539 		return;
540 	}
541 
542 	if ((a & 0xffe000) == 0x61e000) {
543 		DrvVRAMRAM[(a & 0x1fff) ^ 1] = d;
544 		DrvVRAMExpand(a);
545 		return;
546 	}
547 }
548 
f3_pivot_write_long(UINT32 a,UINT32 d)549 static void __fastcall f3_pivot_write_long(UINT32 a, UINT32 d)
550 {
551 	if ((a & 0xff0000) == 0x630000) {
552 		*((UINT32*)(DrvPivotRAM + (a & 0xffff))) = BURN_ENDIAN_SWAP_INT32((d << 16) | (d >> 16));
553 		DrvPivotExpand(a);
554 		dirty_tile_count[9] = 1;
555 		return;
556 	}
557 }
558 
f3_pivot_write_word(UINT32 a,UINT16 d)559 static void __fastcall f3_pivot_write_word(UINT32 a, UINT16 d)
560 {
561 	if ((a & 0xff0000) == 0x630000) {
562 		*((UINT16*)(DrvPivotRAM + (a & 0xffff))) = BURN_ENDIAN_SWAP_INT16(d);
563 		DrvPivotExpand(a);
564 		dirty_tile_count[9] = 1;
565 		return;
566 	}
567 }
568 
f3_pivot_write_byte(UINT32 a,UINT8 d)569 static void __fastcall f3_pivot_write_byte(UINT32 a, UINT8 d)
570 {
571 	if ((a & 0xff0000) == 0x630000) {
572 		DrvPivotRAM[(a & 0xffff) ^ 1] = d;
573 		DrvPivotExpand(a);
574 		dirty_tile_count[9] = 1;
575 		return;
576 	}
577 }
578 
f3_playfield_write_long(UINT32 a,UINT32 d)579 static void __fastcall f3_playfield_write_long(UINT32 a, UINT32 d)
580 {
581 	if ((a & 0xff8000) == 0x610000) {
582 		UINT32 *ram = (UINT32*)(TaitoF3PfRAM + (a & 0x7fff));
583 
584 		if (BURN_ENDIAN_SWAP_INT32(ram[0]) != ((d << 16) | (d >> 16))) {
585 			ram[0] = BURN_ENDIAN_SWAP_INT32((d << 16) | (d >> 16));
586 			dirty_tiles[(a & 0x7ffc)/4] = 1;
587 			dirty_tile_count[((a & 0x7000)/0x1000)] = 1;
588 		}
589 		return;
590 	}
591 }
592 
f3_playfield_write_word(UINT32 a,UINT16 d)593 static void __fastcall f3_playfield_write_word(UINT32 a, UINT16 d)
594 {
595 	if ((a & 0xff8000) == 0x610000) {
596 		UINT16 *ram = (UINT16*)(TaitoF3PfRAM + (a & 0x7fff));
597 
598 		if (BURN_ENDIAN_SWAP_INT16(ram[0]) != d) {
599 			ram[0] = BURN_ENDIAN_SWAP_INT16(d);
600 			dirty_tiles[(a & 0x7ffc)/4] = 1;
601 			dirty_tile_count[((a & 0x7000)/0x1000)] = 1;
602 		}
603 		return;
604 	}
605 }
606 
f3_playfield_write_byte(UINT32 a,UINT8 d)607 static void __fastcall f3_playfield_write_byte(UINT32 a, UINT8 d)
608 {
609 	if ((a & 0xff8000) == 0x610000) {
610 		if (TaitoF3PfRAM[(a & 0x7fff) ^ 1] != d) {
611 			TaitoF3PfRAM[(a & 0x7fff) ^ 1] = d;
612 			dirty_tiles[(a & 0x7ffc)/4] = 1;
613 			dirty_tile_count[((a & 0x7000)/0x1000)] = 1;
614 		}
615 		return;
616 	}
617 }
618 
619 static UINT32 speedhack_address;
620 
f3_speedhack_write_long(UINT32 a,UINT32 d)621 static void __fastcall f3_speedhack_write_long(UINT32 a, UINT32 d)
622 {
623 	a &= 0x1fffe;
624 	*((UINT32*)(Taito68KRam1 + a)) = BURN_ENDIAN_SWAP_INT32((d << 16) | (d >> 16));
625 	if (a == (speedhack_address & ~3)) {
626 	//	SekIdle(100);
627 		SekRunEnd(); // kill until next loop
628 	}
629 }
630 
f3_speedhack_write_word(UINT32 a,UINT16 d)631 static void __fastcall f3_speedhack_write_word(UINT32 a, UINT16 d)
632 {
633 	a &= 0x1fffe;
634 	*((UINT16*)(Taito68KRam1 + (a & 0x1fffe))) = BURN_ENDIAN_SWAP_INT16(d);
635 	if (a == speedhack_address) {
636 	//	SekIdle(100);
637 		SekRunEnd(); // kill until next loop
638 	}
639 }
640 
f3_speedhack_write_byte(UINT32 a,UINT8 d)641 static void __fastcall f3_speedhack_write_byte(UINT32 a, UINT8 d)
642 {
643 	Taito68KRam1[(a & 0x1ffff) ^ 1] = d;
644 }
645 
f3_speedhack_init(UINT32 address)646 static void f3_speedhack_init(UINT32 address)
647 {
648 	if (address == 0) return;
649 
650 #ifndef USE_CPU_SPEEDHACKS
651 	return;
652 #endif
653 
654 	SekOpen(0);
655 
656 	address &= ~0x20000;
657 
658 	speedhack_address = address & 0x1fffe;
659 
660 	SekMapHandler(5,		address & ~0x3ff, address | 0x3ff, MAP_WRITE);
661 	SekSetWriteLongHandler(5,	f3_speedhack_write_long);
662 	SekSetWriteWordHandler(5,	f3_speedhack_write_word);
663 	SekSetWriteByteHandler(5,	f3_speedhack_write_byte);
664 
665 	address |= 0x20000;
666 
667 	SekMapHandler(6,		address & ~0x3ff, address | 0x3ff, MAP_WRITE);
668 	SekSetWriteLongHandler(6,	f3_speedhack_write_long);
669 	SekSetWriteWordHandler(6,	f3_speedhack_write_word);
670 	SekSetWriteByteHandler(6,	f3_speedhack_write_byte);
671 	SekClose();
672 }
673 
f3_reset_dirtybuffer()674 static void f3_reset_dirtybuffer()
675 {
676 	memset (dirty_tiles, 1, 0x8000/4);
677 	memset (dirty_tile_count, 1, 10);
678 }
679 
DrvDoReset(INT32 full_reset)680 static INT32 DrvDoReset(INT32 full_reset)
681 {
682 	if (full_reset) {
683 		memset (TaitoRamStart, 0, TaitoRamEnd - TaitoRamStart);
684 	}
685 
686 	SekOpen(0);
687 	SekReset();
688 	SekClose();
689 
690 	if (BurnDrvGetFlags() & BDF_BOOTLEG) {
691 		MSM6295Reset(0);
692 	} else {
693 		TaitoF3SoundReset();
694 	}
695 
696 	EEPROMReset();
697 
698 	if (EEPROMAvailable() == 0) {
699 		if (TaitoDefaultEEProm[0] != 0) {
700 			EEPROMFill((const UINT8*)TaitoDefaultEEProm, 0, 128);
701 		} else if (f3_game == RECALH ) {
702 			static const UINT8 recalh_eeprom[128] =	{
703 				0x85,0x54,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf3,0x35,
704 				0x00,0x01,0x86,0xa0,0x00,0x13,0x04,0x13,0x00,0x00,0xc3,0x50,0x00,0x19,0x00,0x0a,
705 				0x00,0x00,0x4e,0x20,0x00,0x03,0x18,0x0d,0x00,0x00,0x27,0x10,0x00,0x05,0x14,0x18,
706 				0x00,0x00,0x13,0x88,0x00,0x00,0x12,0x27,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
707 				0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
708 				0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
709 				0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
710 				0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
711 			};
712 
713 			EEPROMFill(recalh_eeprom, 0, 128);
714 		} else if (f3_game == ARKRETRN) {
715 			static const UINT8 arkretrn_eeprom[128] = {
716 				0x54,0x41,0x49,0x54,0x4f,0x03,0x00,0x07,0xa1,0xe8,0xe0,0x01,0x11,0x12,0x30,0x00,
717 				0x00,0x00,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4c,0x63,
718 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
719 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
720 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
721 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
722 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
723 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
724 			};
725 			static const UINT8 arkretrnj_eeprom[128] = {
726 				0x54,0x41,0x49,0x54,0x4f,0x01,0x00,0x07,0xa1,0xe8,0xe0,0x01,0x11,0x11,0x30,0x00,
727 				0x00,0x00,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4c,0x66,
728 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
729 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
730 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
731 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
732 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
733 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
734 			};
735 			static const UINT8 arkretrnu_eeprom[128] = {
736 				0x54,0x41,0x49,0x54,0x4f,0x02,0x00,0x07,0xa1,0xe8,0xe0,0x01,0x11,0x11,0x30,0x00,
737 				0x00,0x00,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4c,0x65,
738 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
739 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
740 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
741 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
742 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
743 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
744 			};
745 
746 			if (strstr(BurnDrvGetTextA(DRV_NAME), "arkretrnu")) {
747 				EEPROMFill(arkretrnu_eeprom, 0, 128);
748 			} else if (strstr(BurnDrvGetTextA(DRV_NAME), "arkretrnj")) {
749 				EEPROMFill(arkretrnj_eeprom, 0, 128);
750 			} else {
751 				EEPROMFill(arkretrn_eeprom, 0, 128);
752 			}
753 		} else if (f3_game == PUCHICAR) {
754 			static const UINT8 puchicar_eeprom[128] = {
755 				0x54,0x41,0x49,0x54,0x4f,0x03,0x00,0x07,0xa1,0xf2,0xe0,0x01,0x11,0x12,0x30,0x00,
756 				0x00,0x00,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4d,0x59,
757 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
758 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
759 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
760 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
761 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
762 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
763 			};
764 			static const UINT8 puchicaru_eeprom[128] = {
765 				0x54,0x41,0x49,0x54,0x4f,0x02,0x00,0x07,0xa1,0xf2,0xe0,0x01,0x11,0x11,0x30,0x00,
766 				0x00,0x00,0x02,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4d,0x5a,
767 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
768 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
769 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
770 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
771 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
772 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
773 			};
774 			static const UINT8 puchicarj_eeprom[128] = {
775 				0x54,0x41,0x49,0x54,0x4f,0x01,0x00,0x07,0xa1,0xf2,0xe0,0x01,0x11,0x11,0x30,0x00,
776 				0x00,0x00,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4d,0x5c,
777 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
778 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
779 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
780 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
781 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
782 				0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
783 			};
784 			if (strstr(BurnDrvGetTextA(DRV_NAME), "puchicaru")) {
785 				EEPROMFill(puchicaru_eeprom, 0, 128);
786 			} else if (strstr(BurnDrvGetTextA(DRV_NAME), "puchicarj")) {
787 				EEPROMFill(puchicarj_eeprom, 0, 128);
788 			} else {
789 				EEPROMFill(puchicar_eeprom, 0, 128);
790 			}
791 		}
792 	}
793 
794 	f3_reset_dirtybuffer();
795 
796 	TaitoF3VideoReset();
797 
798 	if (f3_game == LANDMAKR)
799 	{ // init landmakr's palette with rainbow, needed for text on the "you win" / "you lose" screen.
800 		f3_palette_landmakr_onreset();
801 	}
802 
803 	sound_cpu_in_reset = 1;
804 	watchdog = 0;
805 	previous_coin = 0;
806 
807 	HiscoreReset();
808 
809 	return 0;
810 }
811 
MemIndex()812 static INT32 MemIndex()
813 {
814 	UINT8 *Next; Next = TaitoMem;
815 
816 	Taito68KRom1		= Next; Next += 0x0200000;
817 
818 	TaitoF3SoundRom		= Next;
819 	Taito68KRom2		= Next; Next += 0x0100000;
820 	if (f3_game == KIRAMEKI) Next += 0x200000;
821 
822 	TaitoSpritesA		= Next; Next += TaitoSpriteARomSize;
823 	TaitoChars			= Next; Next += TaitoCharRomSize;
824 
825 	tile_opaque_sp		= Next; Next += TaitoSpriteARomSize / 0x100;
826 
827 	tile_opaque_pf[0]	= Next; Next += TaitoCharRomSize / 0x100;
828 	tile_opaque_pf[1]	= Next; Next += TaitoCharRomSize / 0x100;
829 	tile_opaque_pf[2]	= Next; Next += TaitoCharRomSize / 0x100;
830 	tile_opaque_pf[3]	= Next; Next += TaitoCharRomSize / 0x100;
831 	tile_opaque_pf[4]	= Next; Next += TaitoCharRomSize / 0x100;
832 	tile_opaque_pf[5]	= Next; Next += TaitoCharRomSize / 0x100;
833 	tile_opaque_pf[6]	= Next; Next += TaitoCharRomSize / 0x100;
834 	tile_opaque_pf[7]	= Next; Next += TaitoCharRomSize / 0x100;
835 
836 	MSM6295ROM			= Next;
837 	TaitoF3ES5506Rom	= Next;
838 	TaitoES5505Rom		= Next; Next += TaitoF3ES5506RomSize;
839 
840 	TaitoDefaultEEProm	= Next; Next += 0x0000080;
841 
842 	pBurnDrvPalette		= (UINT32 *)Next;
843 	TaitoPalette		= (UINT32 *)Next; Next += 0x0002000 * sizeof (UINT32);
844 
845 	TaitoCharsB			= Next; Next += 0x0004000;
846 	TaitoCharsPivot		= Next; Next += 0x0020000;
847 
848 	TaitoRamStart		= Next;
849 
850 	Taito68KRam1		= Next; Next += 0x0020000;
851 	TaitoPaletteRam		= Next; Next += 0x0008000;
852 	TaitoSpriteRam		= Next; Next += 0x0010000;
853 	TaitoSpriteRamDelayed	= Next; Next += 0x0010000;
854 	TaitoSpriteRamDelayed2	= Next; Next += 0x0010000;
855 	TaitoF3PfRAM		= Next; Next += 0x000c000;
856 	TaitoVideoRam		= Next; Next += 0x0002000;
857 	DrvVRAMRAM			= Next; Next += 0x0002000;
858 	TaitoF3LineRAM		= Next; Next += 0x0010000;
859 	DrvPivotRAM			= Next; Next += 0x0010000;
860 	TaitoF3CtrlRAM		= Next; Next += 0x0000400;
861 
862 	DrvCoinWord			= (UINT16*)Next; Next += 2 * sizeof(INT16);
863 
864 	TaitoF3SoundRam		= Next; Next += 0x0010000;
865 	TaitoF3SharedRam	= Next; Next += 0x0000800;
866 	TaitoES5510DSPRam	= Next; Next += 0x0000200;
867 
868 	TaitoES5510GPR		= (UINT32*)Next; Next += 0x0000c0 * sizeof(UINT32);
869 	TaitoES5510DRAM		= (UINT16*)Next; Next += 0x200000 * sizeof(UINT16);
870 
871 	TaitoRamEnd			= Next;
872 
873 	output_bitmap		= (UINT32*)Next; Next += 512 * 512 * sizeof(INT32);
874 
875 	TaitoPriorityMap	= Next; Next += 1024 * 512;
876 
877 	bitmap_layer[0] 	= (UINT16*)Next; Next += 1024 * 512 * sizeof(INT16);
878 	bitmap_layer[1] 	= (UINT16*)Next; Next += 1024 * 512 * sizeof(INT16);
879 	bitmap_layer[2] 	= (UINT16*)Next; Next += 1024 * 512 * sizeof(INT16);
880 	bitmap_layer[3] 	= (UINT16*)Next; Next += 1024 * 512 * sizeof(INT16);
881 
882 	bitmap_layer[4] 	= (UINT16*)Next; Next += 512 * 512 * sizeof(INT16);
883 	bitmap_layer[5] 	= (UINT16*)Next; Next += 512 * 512 * sizeof(INT16);
884 	bitmap_layer[6] 	= (UINT16*)Next; Next += 512 * 512 * sizeof(INT16);
885 	bitmap_layer[7] 	= (UINT16*)Next; Next += 512 * 512 * sizeof(INT16);
886 
887 	bitmap_layer[8] 	= (UINT16*)Next; Next += 512 * 512 * sizeof(INT16);
888 	bitmap_layer[9] 	= (UINT16*)Next; Next += 512 * 256 * sizeof(INT16);
889 
890 	bitmap_flags[0]		= Next; Next += 1024 * 512;
891 	bitmap_flags[1]		= Next; Next += 1024 * 512;
892 	bitmap_flags[2]		= Next; Next += 1024 * 512;
893 	bitmap_flags[3]		= Next; Next += 1024 * 512;
894 	bitmap_flags[4]		= Next; Next += 512 * 512;
895 	bitmap_flags[5]		= Next; Next += 512 * 512;
896 	bitmap_flags[6]		= Next; Next += 512 * 512;
897 	bitmap_flags[7]		= Next; Next += 512 * 512;
898 	bitmap_flags[8]		= Next; Next += 512 * 512;
899 	bitmap_flags[9]		= Next; Next += 512 * 256;
900 
901 	dirty_tiles			= Next; Next += 0x8000 / 4;
902 
903 	TaitoMemEnd			= Next;
904 
905 	return 0;
906 }
907 
DrvCalculateTransTable(INT32 sprlen,INT32 len)908 static void DrvCalculateTransTable(INT32 sprlen, INT32 len)
909 {
910 	{
911 		UINT8 *sprite_gfx = TaitoSpritesA;
912 
913 		memset (tile_opaque_sp, 1, sprlen/0x100);
914 
915 		for (INT32 i = 0; i < sprlen; i++) {
916 			if (sprite_gfx[i] == 0) {
917 				tile_opaque_sp[i/0x100] = 0;
918 				i|=0xff;
919 			}
920 		}
921 	}
922 
923 	{
924 		UINT8 *pf_gfx = TaitoChars;
925 
926 		for (INT32 c = 0;c < len/0x100;c++)
927 		{
928 			INT32 x,y;
929 			INT32 extra_planes; /* 0 = 4bpp, 1=5bpp, 2=?, 3=6bpp */
930 
931 			for (extra_planes=0; extra_planes<4; extra_planes++)
932 			{
933 				INT32 chk_trans_or_opa=0;
934 				UINT8 extra_mask = ((extra_planes << 4) | 0x0f);
935 				const UINT8 *dp = pf_gfx + c * 0x100;
936 
937 				for (y = 0;y < 16;y++)
938 				{
939 					for (x = 0;x < 16;x++)
940 					{
941 						if(!(dp[x] & extra_mask))
942 							chk_trans_or_opa|=2;
943 						else
944 							chk_trans_or_opa|=1;
945 					}
946 					dp += 16;
947 				}
948 
949 				tile_opaque_pf[extra_planes][c]=chk_trans_or_opa;
950 			}
951 		}
952 	}
953 }
954 
DrvGfxDecode(INT32 spr_len,INT32 tile_len)955 static void DrvGfxDecode(INT32 spr_len, INT32 tile_len)
956 {
957 	INT32 Plane0[6]  = { (spr_len * 4)+0, (spr_len * 4)+1, 0, 1, 2, 3 }; // sprite
958 	INT32 Plane1[6]  = { (tile_len * 4)+2, (tile_len * 4)+3, 0, 1, 2, 3 }; // tile
959 	INT32 XOffs0[16] = { 4, 0, 12, 8, 16+4, 16+0, 16+12, 16+8, 32+4, 32+0, 32+12, 32+8, 48+4, 48+0, 48+12, 48+8 };
960 	INT32 XOffs1[16] = { 4, 0, 16+4, 16+0, 8+4, 8+0, 24+4, 24+0, 32+4, 32+0, 48+4, 48+0, 40+4, 40+0, 56+4, 56+0 };
961 	INT32 YOffs[16] = { STEP16(0, 64) };
962 
963 	UINT8 *tmp = (UINT8*)BurnMalloc((spr_len > tile_len) ? spr_len : tile_len);
964 
965 	memcpy (tmp, TaitoSpritesA, spr_len);
966 
967 	GfxDecode((spr_len / 0x100),  6, 16, 16, Plane0, XOffs0, YOffs, 0x400, tmp, TaitoSpritesA);
968 
969 	memcpy (tmp, TaitoChars, tile_len);
970 
971 	GfxDecode((tile_len / 0x100), 6, 16, 16, Plane1, XOffs1, YOffs, 0x400, tmp, TaitoChars);
972 
973 	TaitoSpriteAModulo = (spr_len / 0x100);
974 	TaitoCharModulo = (tile_len / 0x100);
975 
976 	BurnFree (tmp);
977 }
978 
tile_decode(INT32 spr_len,INT32 tile_len)979 static void tile_decode(INT32 spr_len, INT32 tile_len)
980 {
981 	UINT8 lsb,msb;
982 	UINT8 *gfx = TaitoChars;
983 	INT32 size=tile_len;
984 	UINT32 offset = size/2;
985 
986 	for (INT32 i = size/2+size/4; i<size; i+=2)
987 	{
988 		lsb = gfx[i+1];
989 		msb = gfx[i+0];
990 
991 		gfx[offset+0]=((msb&0x02)<<3) | ((msb&0x01)>>0) | ((lsb&0x02)<<4) | ((lsb&0x01)<<1);
992 		gfx[offset+2]=((msb&0x08)<<1) | ((msb&0x04)>>2) | ((lsb&0x08)<<2) | ((lsb&0x04)>>1);
993 		gfx[offset+1]=((msb&0x20)>>1) | ((msb&0x10)>>4) | ((lsb&0x20)<<0) | ((lsb&0x10)>>3);
994 		gfx[offset+3]=((msb&0x80)>>3) | ((msb&0x40)>>6) | ((lsb&0x80)>>2) | ((lsb&0x40)>>5);
995 
996 		offset+=4;
997 	}
998 
999 	size = spr_len;
1000 	offset = size/2;
1001 
1002 	for (INT32 i = size/2+size/4; i<size; i++, offset+=2)
1003 	{
1004 		TaitoSpritesA[offset+0] = (((TaitoSpritesA[i] >> 0) & 3) << 2) | (((TaitoSpritesA[i] >> 2) & 3) << 6);
1005 		TaitoSpritesA[offset+1] = (((TaitoSpritesA[i] >> 4) & 3) << 2) | (((TaitoSpritesA[i] >> 6) & 3) << 6);
1006 	}
1007 
1008 	DrvGfxDecode(spr_len, tile_len);
1009 
1010 	DrvCalculateTransTable(spr_len, tile_len);
1011 }
1012 
TaitoF3GetRoms(bool bLoad)1013 static INT32 TaitoF3GetRoms(bool bLoad)
1014 {
1015 	if (!bLoad) TaitoF3ES5506RomSize = 0;
1016 
1017 	char* pRomName;
1018 	struct BurnRomInfo ri = { "\0", 0, 0, 0 };
1019 	struct BurnRomInfo pi = { "\0", 0, 0, 0 };
1020 
1021 	UINT8 *sprites = TaitoSpritesA;
1022 	UINT8 *tiles = TaitoChars;
1023 	UINT8 *samples = TaitoES5505Rom + ((TaitoF3ES5506RomSize == 0x1000000) ? 0x400000 : 0);
1024 
1025 	INT32 prevsize = 0;
1026 	INT32 prevtype = 0;
1027 	INT32 tilecount = 0;
1028 	INT32 spritecount = 0;
1029 	INT32 ret = 0;
1030 
1031 	for (INT32 i = 0; !BurnDrvGetRomName(&pRomName, i, 0); i++) {
1032 		prevsize = ri.nLen;
1033 		prevtype = ri.nType;
1034 
1035 		BurnDrvGetRomInfo(&ri, i);
1036 		BurnDrvGetRomInfo(&pi, i+1);
1037 
1038 		if (ri.nType == TAITO_68KROM1_BYTESWAP32)
1039 		{
1040 	//		if (bLoad) bprintf (0, _T("000000 68k1\n"));
1041 
1042 			if (bLoad) {
1043 				ret  = BurnLoadRom(Taito68KRom1 + 1, i + 0, 4);
1044 				ret |= BurnLoadRom(Taito68KRom1 + 0, i + 1, 4);
1045 				ret |= BurnLoadRom(Taito68KRom1 + 3, i + 2, 4);
1046 				ret |= BurnLoadRom(Taito68KRom1 + 2, i + 3, 4);
1047 				if (ret) return 1;
1048 			}
1049 			i += 3;
1050 			continue;
1051 		}
1052 
1053 		if (ri.nType == TAITO_SPRITESA_BYTESWAP)
1054 		{
1055 	//		if (bLoad) bprintf (0, _T("%6.6x sprite 2x\n"), sprites - TaitoSpritesA);
1056 
1057 			if (f3_game == GSEEKER)
1058 			{
1059 				if (bLoad) {
1060 					if (BurnLoadRom(sprites + 0x000000, i + 0, 2)) return 1;
1061 					if (BurnLoadRom(sprites + 0x100001, i + 1, 2)) return 1;
1062 					if (BurnLoadRom(sprites + 0x000000, i + 2, 2)) return 1;
1063 					if (BurnLoadRom(sprites + 0x000001, i + 3, 2)) return 1;
1064 					memset (sprites + 0x200000, 0, 0x100000);
1065 				}
1066 				sprites += 0x400000;
1067 				i+=3;
1068 			}
1069 			else
1070 			{
1071 				if (bLoad) {
1072 					BurnLoadRom(sprites + 0, i + 0, 2);
1073 					BurnLoadRom(sprites + 1, i + 1, 2);
1074 				}
1075 				sprites += ri.nLen * 2;
1076 				i++;
1077 			}
1078 			continue;
1079 		}
1080 
1081 		if (ri.nType == TAITO_SPRITESA)
1082 		{
1083 			spritecount = 1;
1084 			if (prevtype == TAITO_SPRITESA_BYTESWAP) {
1085 				sprites = TaitoSpritesA + ((sprites - TaitoSpritesA) / 2) * 3;
1086 			}
1087 
1088 	//		if (bLoad) bprintf (0, _T("%6.6x sprite 1x \n"), sprites - TaitoSpritesA);
1089 
1090 			if (bLoad) {
1091 				BurnLoadRom(sprites + 0, i + 0, 1);
1092 			}
1093 			sprites += ri.nLen;
1094 			continue;
1095 		}
1096 
1097 		if (ri.nType == TAITO_CHARS_BYTESWAP32)
1098 		{
1099 	//		if (bLoad) bprintf (0, _T("%6.6x tiles x4\n"), tiles - TaitoChars);
1100 
1101 			if (bLoad) {
1102 				ret  = BurnLoadRom(tiles + 0, i + 0, 4);
1103 				ret |= BurnLoadRom(tiles + 1, i + 1, 4);
1104 				ret |= BurnLoadRom(tiles + 2, i + 2, 4);
1105 				ret |= BurnLoadRom(tiles + 3, i + 3, 4);
1106 				if (ret) return 1;
1107 			}
1108 			i+=3;
1109 			tiles += ri.nLen * 4;
1110 			continue;
1111 		}
1112 
1113 		if (ri.nType == TAITO_CHARS_BYTESWAP)
1114 		{
1115 			if (prevtype == TAITO_CHARS_BYTESWAP32) {
1116 				tiles = TaitoChars + ((tiles - TaitoChars) / 2) * 3;
1117 				tilecount = 1;
1118 			}
1119 
1120 	//		if (bLoad) bprintf (0, _T("%6.6x tiles x2\n"), tiles - TaitoChars);
1121 
1122 			if (pi.nType != TAITO_CHARS_BYTESWAP) {
1123 				if (bLoad) {
1124 					BurnLoadRom(tiles + 0, i + 0, 2);
1125 				}
1126 			} else {
1127 				if (bLoad) {
1128 					BurnLoadRom(tiles + 0, i + 0, 2);
1129 					BurnLoadRom(tiles + 1, i + 1, 2);
1130 				}
1131 				i++;
1132 			}
1133 			tiles += ri.nLen * 2;
1134 			continue;
1135 		}
1136 
1137 		if (ri.nType == TAITO_CHARS)
1138 		{
1139 			tilecount = 1;
1140 			if (prevtype == TAITO_CHARS_BYTESWAP) {
1141 				tiles = TaitoChars + ((tiles - TaitoChars) / 2) * 3;
1142 			}
1143 
1144 	//		if (bLoad) bprintf (0, _T("%6.6x tiles x1 \n"), tiles - TaitoChars);
1145 
1146 			if (bLoad) {
1147 				BurnLoadRom(tiles + 0, i + 0, 1);
1148 			}
1149 			tiles += ri.nLen;
1150 	//		if (bLoad) bprintf (0, _T("%6.6x tiles x1b \n"), tiles - TaitoChars);
1151 
1152 			continue;
1153 		}
1154 
1155 		if (ri.nType == TAITO_68KROM2_BYTESWAP)
1156 		{
1157 	//		if (bLoad) bprintf (0, _T("000000 68k2 x2\n"));
1158 
1159 			if (bLoad) {
1160 				ret  = BurnLoadRom(Taito68KRom2 + 1, i + 0, 2);
1161 				ret |= BurnLoadRom(Taito68KRom2 + 0, i + 1, 2);
1162 				if (ret) return 1;
1163 			}
1164 			i++;
1165 			continue;
1166 		}
1167 
1168 		if (ri.nType == TAITO_68KROM2) // kirameki
1169 		{
1170 	//		if (bLoad) bprintf (0, _T("100000, 68k1 x1\n"));
1171 			if (bLoad) {
1172 				BurnLoadRom(Taito68KRom2 + 0x100000, i, 1);
1173 			}
1174 			continue;
1175 		}
1176 
1177 		if (ri.nType == TAITO_ES5505_BYTESWAP)
1178 		{
1179 			INT32 size = samples - TaitoES5505Rom;
1180 
1181 			if (prevtype == TAITO_ES5505_BYTESWAP && prevsize == 0x200000 && ri.nLen == 0x100000 && size == 0x400000) {
1182 				samples += 0x200000;
1183 			}
1184 
1185 			if (size == 0xc00000 && ri.nLen == 0x100000) {
1186 				samples += 0x200000;
1187 			}
1188 
1189 	//		if (bLoad) bprintf (0, _T("%6.6x, samples \n"), samples - TaitoES5505Rom);
1190 
1191 			if (bLoad) {
1192 				if (BurnLoadRom(samples + 1, i, 2)) return 1;
1193 			}
1194 			samples += ri.nLen * 2;
1195 			continue;
1196 		}
1197 
1198 		if (ri.nType == TAITO_DEFAULT_EEPROM)
1199 		{
1200 			if (bLoad) {
1201 				if (BurnLoadRom(TaitoDefaultEEProm, i, 1)) return 1;
1202 			}
1203 			continue;
1204 		}
1205 	}
1206 
1207 	if (bLoad == false) {
1208 		INT32 spritesize = sprites - TaitoSpritesA;
1209 		INT32 tilesize = tiles - TaitoChars;
1210 		INT32 samplesize = samples - TaitoES5505Rom;
1211 
1212 		if (samplesize >= 0xa00000) {
1213 			samplesize = 0x1000000;
1214 		}
1215 
1216 		if (tilecount == 0) tilesize *= 2;
1217 		if (spritecount == 0) spritesize *= 2;
1218 
1219 		for (INT32 i = 1; i < 1<<30; i<<=1) {
1220 			if (i >= samplesize) {
1221 				samplesize = i;
1222 				break;
1223 			}
1224 		}
1225 
1226 		TaitoSpriteARomSize = spritesize;
1227 		TaitoCharRomSize = tilesize;
1228 		TaitoF3ES5506RomSize = samplesize;
1229 	//	bprintf (0, _T("Load: %x, %x, %x\n"), spritesize, tilesize, samplesize);
1230 	}
1231 
1232 	return 0;
1233 }
1234 
1235 
DrvInit(INT32 (* pRomLoadCB)(),void (* pPalUpdateCB)(UINT16),INT32 extend,INT32 kludge,INT32 spritelag,UINT32 speedhack_addr)1236 static INT32 DrvInit(INT32 (*pRomLoadCB)(), void (*pPalUpdateCB)(UINT16), INT32 extend, INT32 kludge, INT32 spritelag, UINT32 speedhack_addr)
1237 {
1238 	f3_game = kludge;
1239 
1240 	TaitoF3GetRoms(false);
1241 
1242 	MemIndex();
1243 	INT32 nLen = TaitoMemEnd - (UINT8 *)0;
1244 	if ((TaitoMem = (UINT8 *)BurnMalloc(nLen)) == NULL) return 1;
1245 	memset(TaitoMem, 0, nLen);
1246 	MemIndex();
1247 
1248 	{
1249 		if (TaitoF3GetRoms(true)) return 1;
1250 
1251 		if (pRomLoadCB) {
1252 			if (pRomLoadCB()) return 1;
1253 		}
1254 
1255 		tile_decode(TaitoSpriteARomSize, TaitoCharRomSize);
1256 	}
1257 
1258 	SekInit(0, 0x68ec020);
1259 	SekOpen(0);
1260 	SekMapMemory(Taito68KRom1,	0x000000, 0x1fffff, MAP_ROM);
1261 	SekMapMemory(Taito68KRam1,	0x400000, 0x41ffff, MAP_RAM);
1262 	SekMapMemory(Taito68KRam1,	0x420000, 0x43ffff, MAP_RAM); // mirror
1263 	SekMapMemory(TaitoPaletteRam,	0x440000, 0x447fff, MAP_ROM); // write through handler
1264 	SekMapMemory(TaitoSpriteRam,	0x600000, 0x60ffff, MAP_RAM);
1265 	SekMapMemory(TaitoF3PfRAM,		0x610000, 0x617fff, MAP_ROM); // write through handler
1266 	SekMapMemory(TaitoF3PfRAM + 0x8000,	0x618000, 0x61bfff, MAP_RAM);
1267 	SekMapMemory(TaitoVideoRam,	0x61c000, 0x61dfff, MAP_ROM); // write through
1268 	SekMapMemory(DrvVRAMRAM,	0x61e000, 0x61ffff, MAP_ROM); // write through handler
1269 	SekMapMemory(TaitoF3LineRAM,	0x620000, 0x62ffff, MAP_RAM);
1270 	SekMapMemory(DrvPivotRAM,	0x630000, 0x63ffff, MAP_ROM); // write through handler
1271 	SekMapMemory(TaitoF3CtrlRAM,	0x660000, 0x6603ff, MAP_WRITE); // 0-1f
1272 	SekMapMemory(TaitoF3SharedRam,	0xc00000, 0xc007ff, MAP_RAM);
1273 	SekSetWriteLongHandler(0,	f3_main_write_long);
1274 	SekSetWriteWordHandler(0,	f3_main_write_word);
1275 	SekSetWriteByteHandler(0,	f3_main_write_byte);
1276 	SekSetReadLongHandler(0,	f3_main_read_long);
1277 	SekSetReadWordHandler(0,	f3_main_read_word);
1278 	SekSetReadByteHandler(0,	f3_main_read_byte);
1279 
1280 	SekMapHandler(1,		0x440000, 0x447fff, MAP_WRITE);
1281 	SekSetWriteLongHandler(1,	f3_palette_write_long);
1282 	SekSetWriteWordHandler(1,	f3_palette_write_word);
1283 	SekSetWriteByteHandler(1,	f3_palette_write_byte);
1284 
1285 	SekMapHandler(2,		0x61c000, 0x61ffff, MAP_WRITE); // VRAM and TaitoVideoRam
1286 	SekSetWriteLongHandler(2,	f3_VRAM_write_long);
1287 	SekSetWriteWordHandler(2,	f3_VRAM_write_word);
1288 	SekSetWriteByteHandler(2,	f3_VRAM_write_byte);
1289 
1290 	SekMapHandler(3,		0x630000, 0x63ffff, MAP_WRITE);
1291 	SekSetWriteLongHandler(3,	f3_pivot_write_long);
1292 	SekSetWriteWordHandler(3,	f3_pivot_write_word);
1293 	SekSetWriteByteHandler(3,	f3_pivot_write_byte);
1294 
1295 	SekMapHandler(4,		0x610000, 0x617fff, MAP_WRITE);
1296 	SekSetWriteLongHandler(4,	f3_playfield_write_long);
1297 	SekSetWriteWordHandler(4,	f3_playfield_write_word);
1298 	SekSetWriteByteHandler(4,	f3_playfield_write_byte);
1299 	SekClose();
1300 
1301 	f3_speedhack_init(speedhack_addr);
1302 
1303 	TaitoF3SoundInit(1);
1304 	TaitoF3SoundIRQConfig((TaitoDip[0] & 2) ? 0 : 1);
1305 	bprintf(0, _T("Music Speed: %S\n"), (TaitoDip[0] & 2) ? "Slow" : "Fast");
1306 
1307 	EEPROMInit(&eeprom_interface_93C46);
1308 	EEPROMIgnoreErrMessage(1);
1309 
1310 	if (BurnDrvGetFlags() & BDF_ORIENTATION_VERTICAL) {
1311 		BurnDrvGetVisibleSize(&nScreenHeight, &nScreenWidth);
1312 	} else {
1313 		BurnDrvGetVisibleSize(&nScreenWidth, &nScreenHeight);
1314 	}
1315 
1316 	pPaletteUpdateCallback = pPalUpdateCB;
1317 	extended_layers = extend;
1318 	sprite_lag = spritelag;
1319 
1320 	TaitoF3VideoInit();
1321 
1322 	bitmap_width[0] = (extend) ? 1024 : 512;
1323 	bitmap_width[1] = (extend) ? 1024 : 512;
1324 	bitmap_width[2] = (extend) ? 1024 : 512;
1325 	bitmap_width[3] = (extend) ? 1024 : 512;
1326 	bitmap_width[4] = 512;
1327 	bitmap_width[5] = 512;
1328 	bitmap_width[6] = 512;
1329 	bitmap_width[7] = 512;
1330 
1331 	BurnTrackballInit(2);
1332 
1333 	DrvDoReset(1);
1334 
1335 	return 0;
1336 }
1337 
DrvExit()1338 static INT32 DrvExit()
1339 {
1340 	SekExit();
1341 	TaitoF3SoundExit();
1342 
1343 	if (BurnDrvGetFlags() & BDF_BOOTLEG) {
1344 		MSM6295Exit(0);
1345 	}
1346 
1347 	EEPROMExit();
1348 
1349 	BurnFree (TaitoMem);
1350 
1351 	TaitoF3VideoExit();
1352 
1353 	TaitoClearVariables(); // from taito.cpp
1354 
1355 	BurnTrackballExit();
1356 
1357 	pPaletteUpdateCallback = NULL;
1358 
1359 	return 0;
1360 }
1361 
f3_12bit_palette_update(UINT16 offset)1362 static void f3_12bit_palette_update(UINT16 offset)
1363 {
1364 	UINT32 x = BURN_ENDIAN_SWAP_INT32(*((UINT32*)(TaitoPaletteRam + (offset & ~3))));
1365 
1366 	UINT8 r = ((x >> 28) & 0x0f) * 0x0f;
1367 	UINT8 g = ((x >> 24) & 0x0f) * 0x0f;
1368 	UINT8 b = ((x >> 20) & 0x0f) * 0x0f;
1369 
1370 	TaitoPalette[offset/4] = BURN_ENDIAN_SWAP_INT32(r*0x10000+g*0x100+b); //BurnHighCol(r,g,b, 0);
1371 }
1372 
f3_21bit_typeA_palette_update(UINT16 offset)1373 static void f3_21bit_typeA_palette_update(UINT16 offset)
1374 {
1375 	UINT32 x = BURN_ENDIAN_SWAP_INT32(*((UINT32*)(TaitoPaletteRam + (offset & ~3))));
1376 
1377 	UINT8 r = x;
1378 	UINT8 g = x >> 24;
1379 	UINT8 b = x >> 16;
1380 
1381 	if (offset < 0x400 || offset > 0x4000) {
1382 		r <<= 1;
1383 		g <<= 1;
1384 		b <<= 1;
1385 	}
1386 
1387 	TaitoPalette[offset/4] = BURN_ENDIAN_SWAP_INT32(r*0x10000+g*0x100+b);
1388 }
1389 
f3_21bit_typeB_palette_update(UINT16 offset)1390 static void f3_21bit_typeB_palette_update(UINT16 offset)
1391 {
1392 	UINT32 x = BURN_ENDIAN_SWAP_INT32(*((UINT32*)(TaitoPaletteRam + (offset & ~3))));
1393 
1394 	UINT8 r = x;
1395 	UINT8 g = x >> 24;
1396 	UINT8 b = x >> 16;
1397 
1398 	if (offset > 0x7000) {
1399 		r <<= 1;
1400 		g <<= 1;
1401 		b <<= 1;
1402 	}
1403 
1404 	TaitoPalette[offset/4] = BURN_ENDIAN_SWAP_INT32(r*0x10000+g*0x100+b); //BurnHighCol(r,g,b, 0);
1405 }
1406 
f3_24bit_palette_update(UINT16 offset)1407 static void f3_24bit_palette_update(UINT16 offset)
1408 {
1409 	UINT32 x = BURN_ENDIAN_SWAP_INT32(*((UINT32*)(TaitoPaletteRam + (offset & ~3))));
1410 
1411 	UINT8 r = x;
1412 	UINT8 g = x >> 24;
1413 	UINT8 b = x >> 16;
1414 
1415 	TaitoPalette[offset/4] = BURN_ENDIAN_SWAP_INT32(r*0x10000+g*0x100+b); //BurnHighCol(r,g,b, 0);
1416 }
1417 
DrvDraw224A_Flipped()1418 static INT32 DrvDraw224A_Flipped() // 224A, w/ flipscreen
1419 {
1420 	TaitoF3DrawCommon(0x1234);
1421 
1422 	return 0;
1423 }
1424 
DrvDraw224A()1425 static INT32 DrvDraw224A()
1426 {
1427 	TaitoF3DrawCommon(31);
1428 
1429 	return 0;
1430 }
1431 
DrvDraw224B()1432 static INT32 DrvDraw224B()
1433 {
1434 	TaitoF3DrawCommon(32);
1435 
1436 	return 0;
1437 }
1438 
DrvDraw()1439 static INT32 DrvDraw()
1440 {
1441 	TaitoF3DrawCommon(24);
1442 
1443 	return 0;
1444 }
1445 
DrvFrame()1446 static INT32 DrvFrame()
1447 {
1448 	watchdog++;
1449 	if (watchdog >= 180) {
1450 		DrvDoReset(0);
1451 	}
1452 
1453 	if (DrvReset) {
1454 		DrvDoReset(1);
1455 	}
1456 
1457 	{
1458 		 // arkretn / puchicar analog dial
1459 		if (f3_game == ARKRETRN || f3_game == PUCHICAR) {
1460 			BurnTrackballConfig(0, AXIS_NORMAL, AXIS_NORMAL);
1461 			BurnTrackballFrame(0, DrvAxis[0], DrvAxis[1], 0x1, 0x3);
1462 			BurnTrackballUpdate(0);
1463 		}
1464 
1465 		memset (DrvInputs, 0xff, 5 * sizeof(short));
1466 
1467 		for (INT32 i = 0; i < 16; i++) {
1468 			DrvInputs[0] ^= (DrvJoy1[i] & 1) << i;
1469 			DrvInputs[1] ^= (DrvJoy2[i] & 1) << i;
1470 			DrvInputs[2] ^= (DrvJoy3[i] & 1) << i;
1471 			DrvInputs[3] ^= (DrvJoy4[i] & 1) << i;
1472 			DrvInputs[4] ^= (DrvJoy5[i] & 1) << i;
1473 		}
1474 
1475 		DrvInputs[1] &= ~0xff00;
1476 		DrvInputs[4] = (DrvInputs[4] & ~2) | ((DrvSrv[0]) ? 0x00 : 0x02);
1477 
1478 		DrvInputs[4] |= 0xf0; // set all coins disabled
1479 
1480 		INT32 cur_coin = ((DrvJoy5[4] & 1) << 4) | ((DrvJoy5[5] & 1) << 5) | ((DrvJoy5[6] & 1) << 6) | ((DrvJoy5[7] & 1) << 7);
1481 
1482 		for (INT32 i = 0x10; i < 0x100; i <<= 1) {
1483 			if ((cur_coin & i) == i && (previous_coin & i) == 0) {
1484 				DrvInputs[4] &= ~i;
1485 			}
1486 		}
1487 
1488 		previous_coin = cur_coin;
1489 	}
1490 
1491 	INT32 nInterleave = 256;
1492 	nTaitoCyclesTotal[0] = 16000000 / 60; // do not touch!
1493 	nTaitoCyclesDone[0] = nTaitoCyclesDone[1] = 0;
1494 
1495 	SekNewFrame();
1496 
1497 	for (INT32 i = 0; i < nInterleave; i++) {
1498 		INT32 nCurrentCPU, nNext;
1499 
1500 		nCurrentCPU = 0;
1501 		SekOpen(0);
1502 		nNext = (i + 1) * nTaitoCyclesTotal[nCurrentCPU] / nInterleave;
1503 		nTaitoCyclesSegment = nNext - nTaitoCyclesDone[nCurrentCPU];
1504 		nTaitoCyclesDone[nCurrentCPU] += SekRun(nTaitoCyclesSegment);
1505 		if (i == 255) SekSetIRQLine(2, CPU_IRQSTATUS_AUTO);
1506 		if (i == 7) SekSetIRQLine(3, CPU_IRQSTATUS_AUTO);
1507 		SekClose();
1508 
1509 		if ((BurnDrvGetFlags() & BDF_BOOTLEG) == 0) {
1510 			if (sound_cpu_in_reset == 0)
1511 				TaitoF3CpuUpdate(nInterleave, i);
1512 		}
1513 	}
1514 
1515 	if (BurnDrvGetFlags() & BDF_BOOTLEG) {
1516 		if (pBurnSoundOut) {
1517 			MSM6295Render(0, pBurnSoundOut, nBurnSoundLen);
1518 		}
1519 	} else {
1520 		TaitoF3SoundUpdate(pBurnSoundOut, nBurnSoundLen);
1521 	}
1522 
1523 	if (pBurnDraw) {
1524 		BurnDrvRedraw();
1525 	}
1526 
1527 	switch (sprite_lag) {
1528 		case 0: break; // no delay
1529 		case 2:	memcpy(TaitoSpriteRamDelayed2, TaitoSpriteRamDelayed, 0x10000); // no break!
1530 		case 1: /* 1 & 2 */ memcpy(TaitoSpriteRamDelayed, TaitoSpriteRam, 0x10000); break;
1531 	}
1532 
1533 	return 0;
1534 }
1535 
DrvScan(INT32 nAction,INT32 * pnMin)1536 static INT32 DrvScan(INT32 nAction, INT32 *pnMin)
1537 {
1538 	struct BurnArea ba;
1539 
1540 	if (pnMin) {
1541 		*pnMin =  0x029702;
1542 	}
1543 
1544 	/* Save for later debugging...?
1545 
1546 	if (nAction & ACB_MEMORY_ROM) {
1547 		ba.Data		= Taito68KRom1;
1548 		ba.nLen		= 0x0200000;
1549 		ba.nAddress	= 0;
1550 		ba.szName	= "Main ROM";
1551 		BurnAcb(&ba);
1552 	}
1553 
1554 	if (nAction & ACB_MEMORY_RAM) {
1555 		ba.Data		= Taito68KRam1;
1556 		ba.nLen		= 0x020000;
1557 		ba.nAddress	= 0x400000;
1558 		ba.szName	= "F3 RAM";
1559 		BurnAcb(&ba);
1560 
1561 		ba.Data		= TaitoPaletteRam;
1562 		ba.nLen		= 0x0008000;
1563 		ba.nAddress	= 0x440000;
1564 		ba.szName	= "Palette RAM";
1565 		BurnAcb(&ba);
1566 
1567 		ba.Data		= TaitoSpriteRam;
1568 		ba.nLen		= 0x0010000;
1569 		ba.nAddress	= 0x600000;
1570 		ba.szName	= "Sprite RAM";
1571 		BurnAcb(&ba);
1572 
1573 		ba.Data		= TaitoF3PfRAM;
1574 		ba.nLen		= 0x000c000;
1575 		ba.nAddress	= 0x610000;
1576 		ba.szName	= "Playfield RAM";
1577 		BurnAcb(&ba);
1578 
1579 		ba.Data		= TaitoVideoRam;
1580 		ba.nLen		= 0x0002000;
1581 		ba.nAddress	= 0x61c000;
1582 		ba.szName	= "Video RAM";
1583 		BurnAcb(&ba);
1584 
1585 		ba.Data		= DrvVRAMRAM;
1586 		ba.nLen		= 0x0002000;
1587 		ba.nAddress	= 0x61e000;
1588 		ba.szName	= "VRAM";
1589 		BurnAcb(&ba);
1590 
1591 		ba.Data		= TaitoF3LineRAM;
1592 		ba.nLen		= 0x0010000;
1593 		ba.nAddress	= 0x620000;
1594 		ba.szName	= "Line RAM";
1595 		BurnAcb(&ba);
1596 
1597 		ba.Data		= DrvPivotRAM;
1598 		ba.nLen		= 0x0010000;
1599 		ba.nAddress	= 0x620000;
1600 		ba.szName	= "Pivot RAM";
1601 		BurnAcb(&ba);
1602 
1603 		ba.Data		= TaitoF3CtrlRAM;
1604 		ba.nLen		= 0x0000400;
1605 		ba.nAddress	= 0x660000;
1606 		ba.szName	= "Control Registers";
1607 		BurnAcb(&ba);
1608 
1609 		ba.Data		= TaitoF3SoundRam;
1610 		ba.nLen		= 0x010000;
1611 		ba.nAddress	= 0x000000;
1612 		ba.szName	= "F3 Sound RAM";
1613 		BurnAcb(&ba);
1614 
1615 		ba.Data		= TaitoF3SharedRam;
1616 		ba.nLen		= 0x000800;
1617 		ba.nAddress	= 0x000000;
1618 		ba.szName	= "F3 Shared RAM";
1619 		BurnAcb(&ba);
1620 
1621 		ba.Data		= TaitoES5510DSPRam;
1622 		ba.nLen		= 0x000200;
1623 		ba.nAddress	= 0x000000;
1624 		ba.szName	= "ES5510 DSP RAM";
1625 		BurnAcb(&ba);
1626 
1627 		ba.Data		= TaitoES5510GPR;
1628 		ba.nLen		= 0x0000c0 * sizeof(UINT32);
1629 		ba.nAddress	= 0x000000;
1630 		ba.szName	= "ES5510 GPR RAM";
1631 		BurnAcb(&ba);
1632 	} */
1633 
1634 	if (nAction & ACB_MEMORY_RAM) {
1635 		memset(&ba, 0, sizeof(ba));
1636 
1637 		ba.Data	  = TaitoRamStart;
1638 		ba.nLen	  = TaitoRamEnd - TaitoRamStart;
1639 		ba.szName = "All Ram";
1640 		BurnAcb(&ba);
1641 	}
1642 
1643 	if (nAction & ACB_DRIVER_DATA) {
1644 		SekScan(nAction);
1645 		TaitoF3SoundScan(nAction, pnMin);
1646 		SCAN_VAR(sound_cpu_in_reset);
1647 		if (f3_game == ARKRETRN) BurnTrackballScan();
1648 
1649 		EEPROMScan(nAction, pnMin);
1650 
1651 		if (nAction & ACB_WRITE && ~nAction & ACB_RUNAHEAD) {
1652 			for (INT32 i = 0; i < 0x2000; i+=4) {
1653 				DrvVRAMExpand(i);
1654 			}
1655 
1656 			for (INT32 i = 0; i < 0x10000; i+=4) {
1657 				DrvPivotExpand(i);
1658 			}
1659 
1660 			f3_reset_dirtybuffer();
1661 		}
1662 	}
1663 
1664 	return 0;
1665 }
1666 
1667 
1668 
1669 // Ring Rage (Ver 2.3O 1992/08/09)
1670 
1671 static struct BurnRomInfo ringrageRomDesc[] = {
1672 	{ "d21-23.40",		0x040000, 0x14e9ed65, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
1673 	{ "d21-22.38",		0x040000, 0x6f8b65b0, TAITO_68KROM1_BYTESWAP32 }, //  1
1674 	{ "d21-21.36",		0x040000, 0xbf7234bc, TAITO_68KROM1_BYTESWAP32 }, //  2
1675 	{ "d21-25.34",		0x040000, 0xaeff6e19, TAITO_68KROM1_BYTESWAP32 }, //  3
1676 
1677 	{ "d21-02.66",		0x200000, 0xfacd3a02, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
1678 	{ "d21-03.67",		0x200000, 0x6f653e68, TAITO_SPRITESA_BYTESWAP },  //  5
1679 	{ "d21-04.68",		0x200000, 0x9dcdceca, TAITO_SPRITESA },           //  6
1680 
1681 	{ "d21-06.49",		0x080000, 0x92d4a720, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
1682 	{ "d21-07.50",		0x080000, 0x6da696e9, TAITO_CHARS_BYTESWAP },     //  8
1683 	{ "d21-08.51",		0x080000, 0xa0d95be9, TAITO_CHARS } ,             //  9
1684 
1685 	{ "d21-18.5",		0x020000, 0x133b55d0, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
1686 	{ "d21-19.6",		0x020000, 0x1f98908f, TAITO_68KROM2_BYTESWAP },   // 11
1687 
1688 	{ "d21-01.17",		0x200000, 0x1fb6f07d, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
1689 	{ "d21-05.18",		0x100000, 0xed894fe1, TAITO_ES5505_BYTESWAP },    // 13
1690 };
1691 
1692 STD_ROM_PICK(ringrage)
STD_ROM_FN(ringrage)1693 STD_ROM_FN(ringrage)
1694 
1695 static INT32 ringrageInit()
1696 {
1697 	return DrvInit(NULL, f3_12bit_palette_update, 0, RINGRAGE, 2, 0);
1698 }
1699 
1700 struct BurnDriver BurnDrvRingrage = {
1701 	"ringrage", NULL, NULL, NULL, "1992",
1702 	"Ring Rage (Ver 2.3O 1992/08/09)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
1703 	NULL, NULL, NULL, NULL,
1704 	BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_VSFIGHT, 0,
1705 	NULL, ringrageRomInfo, ringrageRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
1706 	ringrageInit, DrvExit, DrvFrame, DrvDraw224A, DrvScan, &TaitoF3PalRecalc, 0x2000,
1707 	320, 224, 4, 3
1708 };
1709 
1710 
1711 // Ring Rage (Ver 2.3A 1992/08/09)
1712 
1713 static struct BurnRomInfo ringrageuRomDesc[] = {
1714 	{ "d21-23.40",		0x040000, 0x14e9ed65, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
1715 	{ "d21-22.38",		0x040000, 0x6f8b65b0, TAITO_68KROM1_BYTESWAP32 }, //  1
1716 	{ "d21-21.36",		0x040000, 0xbf7234bc, TAITO_68KROM1_BYTESWAP32 }, //  2
1717 	{ "d21-24.34",		0x040000, 0x404dee67, TAITO_68KROM1_BYTESWAP32 }, //  3
1718 
1719 	{ "d21-02.66",		0x200000, 0xfacd3a02, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
1720 	{ "d21-03.67",		0x200000, 0x6f653e68, TAITO_SPRITESA_BYTESWAP },  //  5
1721 	{ "d21-04.68",		0x200000, 0x9dcdceca, TAITO_SPRITESA },           //  6
1722 
1723 	{ "d21-06.49",		0x080000, 0x92d4a720, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
1724 	{ "d21-07.50",		0x080000, 0x6da696e9, TAITO_CHARS_BYTESWAP },     //  8
1725 	{ "d21-08.51",		0x080000, 0xa0d95be9, TAITO_CHARS } ,             //  9
1726 
1727 	{ "d21-18.5",		0x020000, 0x133b55d0, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
1728 	{ "d21-19.6",		0x020000, 0x1f98908f, TAITO_68KROM2_BYTESWAP },   // 11
1729 
1730 	{ "d21-01.17",		0x200000, 0x1fb6f07d, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
1731 	{ "d21-05.18",		0x100000, 0xed894fe1, TAITO_ES5505_BYTESWAP },    // 13
1732 };
1733 
1734 STD_ROM_PICK(ringrageu)
1735 STD_ROM_FN(ringrageu)
1736 
1737 struct BurnDriver BurnDrvRingrageu = {
1738 	"ringrageu", "ringrage", NULL, NULL, "1992",
1739 	"Ring Rage (Ver 2.3A 1992/08/09)\0", NULL, "Taito America Corporation", "Taito F3 System",
1740 	NULL, NULL, NULL, NULL,
1741 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_VSFIGHT, 0,
1742 	NULL, ringrageuRomInfo, ringrageuRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
1743 	ringrageInit, DrvExit, DrvFrame, DrvDraw224A, DrvScan, &TaitoF3PalRecalc, 0x2000,
1744 	320, 224, 4, 3
1745 };
1746 
1747 
1748 // Ring Rage (Ver 2.3J 1992/08/09)
1749 
1750 static struct BurnRomInfo ringragejRomDesc[] = {
1751 	{ "d21-23.40",		0x040000, 0x14e9ed65, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
1752 	{ "d21-22.38",		0x040000, 0x6f8b65b0, TAITO_68KROM1_BYTESWAP32 }, //  1
1753 	{ "d21-21.36",		0x040000, 0xbf7234bc, TAITO_68KROM1_BYTESWAP32 }, //  2
1754 	{ "d21-20.34",		0x040000, 0xa8eb68a4, TAITO_68KROM1_BYTESWAP32 }, //  3
1755 
1756 	{ "d21-02.66",		0x200000, 0xfacd3a02, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
1757 	{ "d21-03.67",		0x200000, 0x6f653e68, TAITO_SPRITESA_BYTESWAP },  //  5
1758 	{ "d21-04.68",		0x200000, 0x9dcdceca, TAITO_SPRITESA },           //  6
1759 
1760 	{ "d21-06.49",		0x080000, 0x92d4a720, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
1761 	{ "d21-07.50",		0x080000, 0x6da696e9, TAITO_CHARS_BYTESWAP },     //  8
1762 	{ "d21-08.51",		0x080000, 0xa0d95be9, TAITO_CHARS } ,             //  9
1763 
1764 	{ "d21-18.5",		0x020000, 0x133b55d0, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
1765 	{ "d21-19.6",		0x020000, 0x1f98908f, TAITO_68KROM2_BYTESWAP },   // 11
1766 
1767 	{ "d21-01.17",		0x200000, 0x1fb6f07d, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
1768 	{ "d21-05.18",		0x100000, 0xed894fe1, TAITO_ES5505_BYTESWAP },    // 13
1769 };
1770 
1771 STD_ROM_PICK(ringragej)
1772 STD_ROM_FN(ringragej)
1773 
1774 struct BurnDriver BurnDrvRingragej = {
1775 	"ringragej", "ringrage", NULL, NULL, "1992",
1776 	"Ring Rage (Ver 2.3J 1992/08/09)\0", NULL, "Taito Corporation", "Taito F3 System",
1777 	NULL, NULL, NULL, NULL,
1778 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_VSFIGHT, 0,
1779 	NULL, ringragejRomInfo, ringragejRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
1780 	ringrageInit, DrvExit, DrvFrame, DrvDraw224A, DrvScan, &TaitoF3PalRecalc, 0x2000,
1781 	320, 224, 4, 3
1782 };
1783 
1784 
1785 
1786 // Arabian Magic (Ver 1.0O 1992/07/06)
1787 
1788 static struct BurnRomInfo arabianmRomDesc[] = {
1789 	{ "d29-23.ic40",	0x040000, 0x89a0c706, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
1790 	{ "d29-22.ic38",	0x040000, 0x4afc22a4, TAITO_68KROM1_BYTESWAP32 }, //  1
1791 	{ "d29-21.ic36",	0x040000, 0xac32eb38, TAITO_68KROM1_BYTESWAP32 }, //  2
1792 	{ "d29-25.ic34",	0x040000, 0xb9b652ed, TAITO_68KROM1_BYTESWAP32 }, //  3
1793 
1794 	{ "d29-03.ic66",	0x100000, 0xaeaff456, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
1795 	{ "d29-04.ic67",	0x100000, 0x01711cfe, TAITO_SPRITESA_BYTESWAP },  //  5
1796 	{ "d29-05.ic68",	0x100000, 0x9b5f7a17, TAITO_SPRITESA },           //  6
1797 
1798 	{ "d29-06.ic49",	0x080000, 0xeea07bf3, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
1799 	{ "d29-07.ic50",	0x080000, 0xdb3c094d, TAITO_CHARS_BYTESWAP },     //  8
1800 	{ "d29-08.ic51",	0x080000, 0xd7562851, TAITO_CHARS } ,             //  9
1801 
1802 	{ "d29-18.ic5",		0x020000, 0xd97780df, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
1803 	{ "d29-19.ic6",		0x020000, 0xb1ad365c, TAITO_68KROM2_BYTESWAP },   // 11
1804 
1805 	{ "d29-01.ic17",	0x200000, 0x545ac4b3, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
1806 	{ "d29-02.ic18",	0x100000, 0xed894fe1, TAITO_ES5505_BYTESWAP },    // 13
1807 
1808 	{ "d29-11.ic15.bin",	0x000157, 0x5dd5c8f9, BRF_OPT }, 			  // 14 plds
1809 	{ "pal20l8b.2",			0x000144, 0xc91437e2, BRF_OPT }, 			  // 15
1810 	{ "d29-13.ic14.bin",	0x000157, 0x74d61d36, BRF_OPT }, 			  // 16
1811 	{ "palce16v8h.11",		0x000117, 0x51088324, BRF_OPT }, 			  // 17
1812 	{ "pal16l8b.22",		0x000104, 0x3e01e854, BRF_OPT }, 			  // 18
1813 	{ "palce16v8h.31",		0x000117, 0xe0789727, BRF_OPT }, 			  // 19
1814 	{ "pal16l8b.62",		0x000104, 0x7093e2f3, BRF_OPT }, 			  // 20
1815 	{ "d29-14.ic28.bin",	0x000157, 0x25d205d5, BRF_OPT }, 			  // 21
1816 	{ "pal20l8b.70",		0x000144, 0x92b5b97c, BRF_OPT }, 			  // 22
1817 };
1818 
1819 STD_ROM_PICK(arabianm)
STD_ROM_FN(arabianm)1820 STD_ROM_FN(arabianm)
1821 
1822 static INT32 arabianmInit()
1823 {
1824 	return DrvInit(NULL, f3_12bit_palette_update, 0, ARABIANM, 2, 0x408100);
1825 }
1826 
1827 struct BurnDriver BurnDrvArabianm = {
1828 	"arabianm", NULL, NULL, NULL, "1992",
1829 	"Arabian Magic (Ver 1.0O 1992/07/06)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
1830 	NULL, NULL, NULL, NULL,
1831 	BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_SCRFIGHT, 0,
1832 	NULL, arabianmRomInfo, arabianmRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
1833 	arabianmInit, DrvExit, DrvFrame, DrvDraw224A_Flipped, DrvScan, &TaitoF3PalRecalc, 0x2000,
1834 	320, 224, 4, 3
1835 };
1836 
1837 
1838 // Arabian Magic (Ver 1.0J 1992/07/06)
1839 
1840 static struct BurnRomInfo arabianmjRomDesc[] = {
1841 	{ "d29-23.ic40",	0x040000, 0x89a0c706, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
1842 	{ "d29-22.ic38",	0x040000, 0x4afc22a4, TAITO_68KROM1_BYTESWAP32 }, //  1
1843 	{ "d29-21.ic36",	0x040000, 0xac32eb38, TAITO_68KROM1_BYTESWAP32 }, //  2
1844 	{ "d29-20.ic34",	0x040000, 0x57b833c1, TAITO_68KROM1_BYTESWAP32 }, //  3
1845 
1846 	{ "d29-03.ic66",	0x100000, 0xaeaff456, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
1847 	{ "d29-04.ic67",	0x100000, 0x01711cfe, TAITO_SPRITESA_BYTESWAP },  //  5
1848 	{ "d29-05.ic68",	0x100000, 0x9b5f7a17, TAITO_SPRITESA },           //  6
1849 
1850 	{ "d29-06.ic49",	0x080000, 0xeea07bf3, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
1851 	{ "d29-07.ic50",	0x080000, 0xdb3c094d, TAITO_CHARS_BYTESWAP },     //  8
1852 	{ "d29-08.ic51",	0x080000, 0xd7562851, TAITO_CHARS } ,             //  9
1853 
1854 	{ "d29-18.ic5",		0x020000, 0xd97780df, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
1855 	{ "d29-19.ic6",		0x020000, 0xb1ad365c, TAITO_68KROM2_BYTESWAP },   // 11
1856 
1857 	{ "d29-01.ic17",	0x200000, 0x545ac4b3, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
1858 	{ "d29-02.ic18",	0x100000, 0xed894fe1, TAITO_ES5505_BYTESWAP },    // 13
1859 
1860 	{ "d29-11.ic15.bin",	0x000157, 0x5dd5c8f9, BRF_OPT }, 			  // 14 plds
1861 	{ "pal20l8b.2",			0x000144, 0xc91437e2, BRF_OPT }, 			  // 15
1862 	{ "d29-13.ic14.bin",	0x000157, 0x74d61d36, BRF_OPT }, 			  // 16
1863 	{ "palce16v8h.11",		0x000117, 0x51088324, BRF_OPT }, 			  // 17
1864 	{ "pal16l8b.22",		0x000104, 0x3e01e854, BRF_OPT }, 			  // 18
1865 	{ "palce16v8h.31",		0x000117, 0xe0789727, BRF_OPT }, 			  // 19
1866 	{ "pal16l8b.62",		0x000104, 0x7093e2f3, BRF_OPT }, 			  // 20
1867 	{ "d29-14.ic28.bin",	0x000157, 0x25d205d5, BRF_OPT }, 			  // 21
1868 	{ "pal20l8b.70",		0x000144, 0x92b5b97c, BRF_OPT }, 			  // 22
1869 };
1870 
1871 STD_ROM_PICK(arabianmj)
1872 STD_ROM_FN(arabianmj)
1873 
1874 struct BurnDriver BurnDrvArabianmj = {
1875 	"arabianmj", "arabianm", NULL, NULL, "1992",
1876 	"Arabian Magic (Ver 1.0J 1992/07/06)\0", NULL, "Taito Corporation", "Taito F3 System",
1877 	NULL, NULL, NULL, NULL,
1878 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_SCRFIGHT, 0,
1879 	NULL, arabianmjRomInfo, arabianmjRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
1880 	arabianmInit, DrvExit, DrvFrame, DrvDraw224A_Flipped, DrvScan, &TaitoF3PalRecalc, 0x2000,
1881 	320, 224, 4, 3
1882 };
1883 
1884 
1885 // Arabian Magic (Ver 1.0A 1992/07/06)
1886 
1887 static struct BurnRomInfo arabianmuRomDesc[] = {
1888 	{ "d29-23.ic40",	0x040000, 0x89a0c706, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
1889 	{ "d29-22.ic38",	0x040000, 0x4afc22a4, TAITO_68KROM1_BYTESWAP32 }, //  1
1890 	{ "d29-21.ic36",	0x040000, 0xac32eb38, TAITO_68KROM1_BYTESWAP32 }, //  2
1891 	{ "d29-24.ic34",	0x040000, 0xceb1627b, TAITO_68KROM1_BYTESWAP32 }, //  3
1892 
1893 	{ "d29-03.ic66",	0x100000, 0xaeaff456, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
1894 	{ "d29-04.ic67",	0x100000, 0x01711cfe, TAITO_SPRITESA_BYTESWAP },  //  5
1895 	{ "d29-05.ic68",	0x100000, 0x9b5f7a17, TAITO_SPRITESA },           //  6
1896 
1897 	{ "d29-06.ic49",	0x080000, 0xeea07bf3, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
1898 	{ "d29-07.ic50",	0x080000, 0xdb3c094d, TAITO_CHARS_BYTESWAP },     //  8
1899 	{ "d29-08.ic51",	0x080000, 0xd7562851, TAITO_CHARS } ,             //  9
1900 
1901 	{ "d29-18.ic5",		0x020000, 0xd97780df, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
1902 	{ "d29-19.ic6",		0x020000, 0xb1ad365c, TAITO_68KROM2_BYTESWAP },   // 11
1903 
1904 	{ "d29-01.ic17",	0x200000, 0x545ac4b3, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
1905 	{ "d29-02.ic18",	0x100000, 0xed894fe1, TAITO_ES5505_BYTESWAP },    // 13
1906 
1907 	{ "d29-11.ic15.bin",	0x000157, 0x5dd5c8f9, BRF_OPT }, 			  // 14 plds
1908 	{ "pal20l8b.2",			0x000144, 0xc91437e2, BRF_OPT }, 			  // 15
1909 	{ "d29-13.ic14.bin",	0x000157, 0x74d61d36, BRF_OPT }, 			  // 16
1910 	{ "palce16v8h.11",		0x000117, 0x51088324, BRF_OPT }, 			  // 17
1911 	{ "pal16l8b.22",		0x000104, 0x3e01e854, BRF_OPT }, 			  // 18
1912 	{ "palce16v8h.31",		0x000117, 0xe0789727, BRF_OPT }, 			  // 19
1913 	{ "pal16l8b.62",		0x000104, 0x7093e2f3, BRF_OPT }, 			  // 20
1914 	{ "d29-14.ic28.bin",	0x000157, 0x25d205d5, BRF_OPT }, 			  // 21
1915 	{ "pal20l8b.70",		0x000144, 0x92b5b97c, BRF_OPT }, 			  // 22
1916 };
1917 
1918 STD_ROM_PICK(arabianmu)
1919 STD_ROM_FN(arabianmu)
1920 
1921 struct BurnDriver BurnDrvArabianmu = {
1922 	"arabianmu", "arabianm", NULL, NULL, "1992",
1923 	"Arabian Magic (Ver 1.0A 1992/07/06)\0", NULL, "Taito America Corporation", "Taito F3 System",
1924 	NULL, NULL, NULL, NULL,
1925 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_SCRFIGHT, 0,
1926 	NULL, arabianmuRomInfo, arabianmuRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
1927 	arabianmInit, DrvExit, DrvFrame, DrvDraw224A_Flipped, DrvScan, &TaitoF3PalRecalc, 0x2000,
1928 	320, 224, 4, 3
1929 };
1930 
1931 
1932 // Riding Fight (Ver 1.0O)
1933 
1934 static struct BurnRomInfo ridingfRomDesc[] = {
1935 	{ "d34-12.40",		0x040000, 0xe67e69d4, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
1936 	{ "d34-11.38",		0x040000, 0x7d240a88, TAITO_68KROM1_BYTESWAP32 }, //  1
1937 	{ "d34-10.36",		0x040000, 0x8aa3f4ac, TAITO_68KROM1_BYTESWAP32 }, //  2
1938 	{ "d34_14.34",		0x040000, 0xe000198e, TAITO_68KROM1_BYTESWAP32 }, //  3
1939 
1940 	{ "d34-01.66",		0x200000, 0x7974e6aa, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
1941 	{ "d34-02.67",		0x200000, 0xf4422370, TAITO_SPRITESA_BYTESWAP },  //  5
1942 
1943 	{ "d34-05.49",		0x080000, 0x72e3ee4b, TAITO_CHARS_BYTESWAP },     //  6 Layer Tiles
1944 	{ "d34-06.50",		0x080000, 0xedc9b9f3, TAITO_CHARS_BYTESWAP },     //  7
1945 
1946 	{ "d34-07.5",		0x020000, 0x67239e2b, TAITO_68KROM2_BYTESWAP },   //  8 68k Code
1947 	{ "d34-08.6",		0x020000, 0x2cf20323, TAITO_68KROM2_BYTESWAP },   //  9
1948 
1949 	{ "d34-03.17",		0x200000, 0xe534ef74, TAITO_ES5505_BYTESWAP },    // 10 Ensoniq Samples
1950 	{ "d34-04.18",		0x100000, 0xed894fe1, TAITO_ES5505_BYTESWAP },    // 11
1951 };
1952 
1953 STD_ROM_PICK(ridingf)
STD_ROM_FN(ridingf)1954 STD_ROM_FN(ridingf)
1955 
1956 static INT32 ridingfInit()
1957 {
1958 	return DrvInit(NULL, f3_12bit_palette_update, 1, RIDINGF, 1, 0x417FE4);
1959 }
1960 
1961 struct BurnDriver BurnDrvRidingf = {
1962 	"ridingf", NULL, NULL, NULL, "1992",
1963 	"Riding Fight (Ver 1.0O)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
1964 	NULL, NULL, NULL, NULL,
1965 	BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_RACING, 0,
1966 	NULL, ridingfRomInfo, ridingfRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
1967 	ridingfInit, DrvExit, DrvFrame, DrvDraw224B, DrvScan, &TaitoF3PalRecalc, 0x2000,
1968 	320, 224, 4, 3
1969 };
1970 
1971 
1972 // Riding Fight (Ver 1.0J)
1973 
1974 static struct BurnRomInfo ridingfjRomDesc[] = {
1975 	{ "d34-12.40",		0x040000, 0xe67e69d4, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
1976 	{ "d34-11.38",		0x040000, 0x7d240a88, TAITO_68KROM1_BYTESWAP32 }, //  1
1977 	{ "d34-10.36",		0x040000, 0x8aa3f4ac, TAITO_68KROM1_BYTESWAP32 }, //  2
1978 	{ "d34-09.34",		0x040000, 0x0e0e78a2, TAITO_68KROM1_BYTESWAP32 }, //  3
1979 
1980 	{ "d34-01.66",		0x200000, 0x7974e6aa, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
1981 	{ "d34-02.67",		0x200000, 0xf4422370, TAITO_SPRITESA_BYTESWAP },  //  5
1982 
1983 	{ "d34-05.49",		0x080000, 0x72e3ee4b, TAITO_CHARS_BYTESWAP },     //  6 Layer Tiles
1984 	{ "d34-06.50",		0x080000, 0xedc9b9f3, TAITO_CHARS_BYTESWAP },     //  7
1985 
1986 	{ "d34-07.5",		0x020000, 0x67239e2b, TAITO_68KROM2_BYTESWAP },   //  8 68k Code
1987 	{ "d34-08.6",		0x020000, 0x2cf20323, TAITO_68KROM2_BYTESWAP },   //  9
1988 
1989 	{ "d34-03.17",		0x200000, 0xe534ef74, TAITO_ES5505_BYTESWAP },    // 10 Ensoniq Samples
1990 	{ "d34-04.18",		0x100000, 0xed894fe1, TAITO_ES5505_BYTESWAP },    // 11
1991 };
1992 
1993 STD_ROM_PICK(ridingfj)
1994 STD_ROM_FN(ridingfj)
1995 
1996 struct BurnDriver BurnDrvRidingfj = {
1997 	"ridingfj", "ridingf", NULL, NULL, "1992",
1998 	"Riding Fight (Ver 1.0J)\0", NULL, "Taito Corporation", "Taito F3 System",
1999 	NULL, NULL, NULL, NULL,
2000 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_RACING, 0,
2001 	NULL, ridingfjRomInfo, ridingfjRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
2002 	ridingfInit, DrvExit, DrvFrame, DrvDraw224B, DrvScan, &TaitoF3PalRecalc, 0x2000,
2003 	320, 224, 4, 3
2004 };
2005 
2006 
2007 // Riding Fight (Ver 1.0A)
2008 
2009 static struct BurnRomInfo ridingfuRomDesc[] = {
2010 	{ "d34-12.40",		0x040000, 0xe67e69d4, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
2011 	{ "d34-11.38",		0x040000, 0x7d240a88, TAITO_68KROM1_BYTESWAP32 }, //  1
2012 	{ "d34-10.36",		0x040000, 0x8aa3f4ac, TAITO_68KROM1_BYTESWAP32 }, //  2
2013 	{ "d34_13.34",		0x040000, 0x97072918, TAITO_68KROM1_BYTESWAP32 }, //  3
2014 
2015 	{ "d34-01.66",		0x200000, 0x7974e6aa, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
2016 	{ "d34-02.67",		0x200000, 0xf4422370, TAITO_SPRITESA_BYTESWAP },  //  5
2017 
2018 	{ "d34-05.49",		0x080000, 0x72e3ee4b, TAITO_CHARS_BYTESWAP },     //  6 Layer Tiles
2019 	{ "d34-06.50",		0x080000, 0xedc9b9f3, TAITO_CHARS_BYTESWAP },     //  7
2020 
2021 	{ "d34-07.5",		0x020000, 0x67239e2b, TAITO_68KROM2_BYTESWAP },   //  8 68k Code
2022 	{ "d34-08.6",		0x020000, 0x2cf20323, TAITO_68KROM2_BYTESWAP },   //  9
2023 
2024 	{ "d34-03.17",		0x200000, 0xe534ef74, TAITO_ES5505_BYTESWAP },    // 10 Ensoniq Samples
2025 	{ "d34-04.18",		0x100000, 0xed894fe1, TAITO_ES5505_BYTESWAP },    // 11
2026 };
2027 
2028 STD_ROM_PICK(ridingfu)
2029 STD_ROM_FN(ridingfu)
2030 
2031 struct BurnDriver BurnDrvRidingfu = {
2032 	"ridingfu", "ridingf", NULL, NULL, "1992",
2033 	"Riding Fight (Ver 1.0A)\0", NULL, "Taito America Corporation", "Taito F3 System",
2034 	NULL, NULL, NULL, NULL,
2035 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_RACING, 0,
2036 	NULL, ridingfuRomInfo, ridingfuRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
2037 	ridingfInit, DrvExit, DrvFrame, DrvDraw224B, DrvScan, &TaitoF3PalRecalc, 0x2000,
2038 	320, 224, 4, 3
2039 };
2040 
2041 
2042 
2043 // Grid Seeker: Project Storm Hammer (Ver 1.3O)
2044 
2045 static struct BurnRomInfo gseekerRomDesc[] = {
2046 	{ "d40_12.rom",		0x040000, 0x884055fb, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
2047 	{ "d40_11.rom",		0x040000, 0x85e701d2, TAITO_68KROM1_BYTESWAP32 }, //  1
2048 	{ "d40_10.rom",		0x040000, 0x1e659ac5, TAITO_68KROM1_BYTESWAP32 }, //  2
2049 	{ "d40_14.rom",		0x040000, 0xd9a76bd9, TAITO_68KROM1_BYTESWAP32 }, //  3
2050 
2051 	{ "d40_03.rom",		0x100000, 0xbcd70efc, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
2052 	{ "d40_04.rom",		0x100000, 0xcd2ac666, TAITO_SPRITESA_BYTESWAP },  //  5
2053 	{ "d40_15.rom",		0x080000, 0x50555125, TAITO_SPRITESA_BYTESWAP },  //  6
2054 	{ "d40_16.rom",		0x080000, 0x3f9bbe1e, TAITO_SPRITESA_BYTESWAP },  //  7
2055 
2056 	{ "d40_05.rom",		0x100000, 0xbe6eec8f, TAITO_CHARS_BYTESWAP },     //  8 Layer Tiles
2057 	{ "d40_06.rom",		0x100000, 0xa822abe4, TAITO_CHARS_BYTESWAP },     //  9
2058 
2059 	{ "d40_07.rom",		0x020000, 0x7e9b26c2, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
2060 	{ "d40_08.rom",		0x020000, 0x9c926a28, TAITO_68KROM2_BYTESWAP },   // 11
2061 
2062 	{ "d40_01.rom",		0x200000, 0xee312e95, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
2063 	{ "d40_02.rom",		0x100000, 0xed894fe1, TAITO_ES5505_BYTESWAP },    // 13
2064 
2065 	{ "gseeker.nv",		0x000080, 0x3e24cc80, TAITO_DEFAULT_EEPROM },     // 14 eeprom
2066 };
2067 
2068 STD_ROM_PICK(gseeker)
STD_ROM_FN(gseeker)2069 STD_ROM_FN(gseeker)
2070 
2071 static INT32 gseekerInit()
2072 {
2073 	return DrvInit(NULL, f3_24bit_palette_update, 0, GSEEKER, 1, 0x40A85C);
2074 }
2075 
2076 struct BurnDriver BurnDrvGseeker = {
2077 	"gseeker", NULL, NULL, NULL, "1992",
2078 	"Grid Seeker: Project Storm Hammer (Ver 1.3O)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
2079 	NULL, NULL, NULL, NULL,
2080 	BDF_GAME_WORKING | BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED, 2, HARDWARE_TAITO_MISC, GBF_VERSHOOT, 0,
2081 	NULL, gseekerRomInfo, gseekerRomName, NULL, NULL, NULL, NULL, F3InputInfo, gseekerDIPInfo,
2082 	gseekerInit, DrvExit, DrvFrame, DrvDraw224B, DrvScan, &TaitoF3PalRecalc, 0x2000,
2083 	224, 320, 3, 4
2084 };
2085 
2086 
2087 // Grid Seeker: Project Storm Hammer (Ver 1.3J)
2088 
2089 static struct BurnRomInfo gseekerjRomDesc[] = {
2090 	{ "d40_12.rom",		0x040000, 0x884055fb, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
2091 	{ "d40_11.rom",		0x040000, 0x85e701d2, TAITO_68KROM1_BYTESWAP32 }, //  1
2092 	{ "d40_10.rom",		0x040000, 0x1e659ac5, TAITO_68KROM1_BYTESWAP32 }, //  2
2093 	{ "d40-09.34",		0x040000, 0x37a90af5, TAITO_68KROM1_BYTESWAP32 }, //  3
2094 
2095 	{ "d40_03.rom",		0x100000, 0xbcd70efc, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
2096 	{ "d40_04.rom",		0x100000, 0xcd2ac666, TAITO_SPRITESA_BYTESWAP },  //  5
2097 	{ "d40_15.rom",		0x080000, 0x50555125, TAITO_SPRITESA_BYTESWAP },  //  6
2098 	{ "d40_16.rom",		0x080000, 0x3f9bbe1e, TAITO_SPRITESA_BYTESWAP },  //  7
2099 
2100 	{ "d40_05.rom",		0x100000, 0xbe6eec8f, TAITO_CHARS_BYTESWAP },     //  8 Layer Tiles
2101 	{ "d40_06.rom",		0x100000, 0xa822abe4, TAITO_CHARS_BYTESWAP },     //  9
2102 
2103 	{ "d40_07.rom",		0x020000, 0x7e9b26c2, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
2104 	{ "d40_08.rom",		0x020000, 0x9c926a28, TAITO_68KROM2_BYTESWAP },   // 11
2105 
2106 	{ "d40_01.rom",		0x200000, 0xee312e95, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
2107 	{ "d40_02.rom",		0x100000, 0xed894fe1, TAITO_ES5505_BYTESWAP },    // 13
2108 
2109 	{ "gseeker.nv",		0x000080, 0x3e24cc80, TAITO_DEFAULT_EEPROM },     // 14 eeprom
2110 };
2111 
2112 STD_ROM_PICK(gseekerj)
2113 STD_ROM_FN(gseekerj)
2114 
2115 struct BurnDriver BurnDrvGseekerj = {
2116 	"gseekerj", "gseeker", NULL, NULL, "1992",
2117 	"Grid Seeker: Project Storm Hammer (Ver 1.3J)\0", NULL, "Taito Corporation", "Taito F3 System",
2118 	NULL, NULL, NULL, NULL,
2119 	BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED, 2, HARDWARE_TAITO_MISC, GBF_VERSHOOT, 0,
2120 	NULL, gseekerjRomInfo, gseekerjRomName, NULL, NULL, NULL, NULL, F3InputInfo, gseekerDIPInfo,
2121 	gseekerInit, DrvExit, DrvFrame, DrvDraw224B, DrvScan, &TaitoF3PalRecalc, 0x2000,
2122 	224, 320, 3, 4
2123 };
2124 
2125 
2126 // Grid Seeker: Project Storm Hammer (Ver 1.3A)
2127 
2128 static struct BurnRomInfo gseekeruRomDesc[] = {
2129 	{ "d40_12.rom",		0x040000, 0x884055fb, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
2130 	{ "d40_11.rom",		0x040000, 0x85e701d2, TAITO_68KROM1_BYTESWAP32 }, //  1
2131 	{ "d40_10.rom",		0x040000, 0x1e659ac5, TAITO_68KROM1_BYTESWAP32 }, //  2
2132 	{ "d40-13.bin",		0x040000, 0xaea05b4f, TAITO_68KROM1_BYTESWAP32 }, //  3
2133 
2134 	{ "d40_03.rom",		0x100000, 0xbcd70efc, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
2135 	{ "d40_04.rom",		0x100000, 0xcd2ac666, TAITO_SPRITESA_BYTESWAP },  //  5
2136 	{ "d40_15.rom",		0x080000, 0x50555125, TAITO_SPRITESA_BYTESWAP },  //  6
2137 	{ "d40_16.rom",		0x080000, 0x3f9bbe1e, TAITO_SPRITESA_BYTESWAP },  //  7
2138 
2139 	{ "d40_05.rom",		0x100000, 0xbe6eec8f, TAITO_CHARS_BYTESWAP },     //  8 Layer Tiles
2140 	{ "d40_06.rom",		0x100000, 0xa822abe4, TAITO_CHARS_BYTESWAP },     //  9
2141 
2142 	{ "d40_07.rom",		0x020000, 0x7e9b26c2, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
2143 	{ "d40_08.rom",		0x020000, 0x9c926a28, TAITO_68KROM2_BYTESWAP },   // 11
2144 
2145 	{ "d40_01.rom",		0x200000, 0xee312e95, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
2146 	{ "d40_02.rom",		0x100000, 0xed894fe1, TAITO_ES5505_BYTESWAP },    // 13
2147 
2148 	{ "gseeker.nv",		0x000080, 0x3e24cc80, TAITO_DEFAULT_EEPROM },     // 14 eeprom
2149 };
2150 
2151 STD_ROM_PICK(gseekeru)
2152 STD_ROM_FN(gseekeru)
2153 
2154 struct BurnDriver BurnDrvGseekeru = {
2155 	"gseekeru", "gseeker", NULL, NULL, "1992",
2156 	"Grid Seeker: Project Storm Hammer (Ver 1.3A)\0", NULL, "Taito America Corporation", "Taito F3 System",
2157 	NULL, NULL, NULL, NULL,
2158 	BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED, 2, HARDWARE_TAITO_MISC, GBF_VERSHOOT, 0,
2159 	NULL, gseekeruRomInfo, gseekeruRomName, NULL, NULL, NULL, NULL, F3InputInfo, gseekerDIPInfo,
2160 	gseekerInit, DrvExit, DrvFrame, DrvDraw224B, DrvScan, &TaitoF3PalRecalc, 0x2000,
2161 	224, 320, 3, 4
2162 };
2163 
2164 
2165 // Command War - Super Special Battle & War Game (Ver 0.0J) (Prototype)
2166 
2167 static struct BurnRomInfo commandwRomDesc[] = {
2168 	{ "cw_mpr3.bin",	0x040000, 0x636944fc, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
2169 	{ "cw_mpr2.bin",	0x040000, 0x1151a42b, TAITO_68KROM1_BYTESWAP32 }, //  1
2170 	{ "cw_mpr1.bin",	0x040000, 0x93669389, TAITO_68KROM1_BYTESWAP32 }, //  2
2171 	{ "cw_mpr0.bin",	0x040000, 0x0468df52, TAITO_68KROM1_BYTESWAP32 }, //  3
2172 
2173 	{ "cw_objl0.bin",	0x200000, 0x9822102e, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
2174 	{ "cw_objm0.bin",	0x200000, 0xf7687684, TAITO_SPRITESA_BYTESWAP },  //  5
2175 	{ "cw_objl1.bin",	0x200000, 0xca3ad7f6, TAITO_SPRITESA_BYTESWAP },  //  6
2176 	{ "cw_objm1.bin",	0x200000, 0x504b1bf5, TAITO_SPRITESA_BYTESWAP },  //  7
2177 	{ "cw_objh0.bin",	0x200000, 0x83d7e0ae, TAITO_SPRITESA },           //  8
2178 	{ "cw_objh1.bin",	0x200000, 0x324f5832, TAITO_SPRITESA },           //  9
2179 
2180 	{ "cw_scr_l.bin",	0x100000, 0x4d202323, TAITO_CHARS_BYTESWAP },     // 10 Layer Tiles
2181 	{ "cw_scr_m.bin",	0x100000, 0x537b1c7d, TAITO_CHARS_BYTESWAP },     // 11
2182 	{ "cw_scr_h.bin",	0x100000, 0x001f85dd, TAITO_CHARS },              // 12
2183 
2184 	{ "cw_spr1.bin",	0x020000, 0xc8f81c25, TAITO_68KROM2_BYTESWAP },   // 13 68k Code
2185 	{ "cw_spr0.bin",	0x020000, 0x2aaa9dfb, TAITO_68KROM2_BYTESWAP },   // 14
2186 
2187 	{ "cw_pcm_0.bin",	0x200000, 0xa1e26629, TAITO_ES5505_BYTESWAP },    // 15 Ensoniq Samples
2188 	{ "cw_pcm_1.bin",	0x200000, 0x39fc6cf4, TAITO_ES5505_BYTESWAP },    // 16
2189 };
2190 
2191 STD_ROM_PICK(commandw)
STD_ROM_FN(commandw)2192 STD_ROM_FN(commandw)
2193 
2194 static INT32 commandwInit()
2195 {
2196 	return DrvInit(NULL, f3_24bit_palette_update, 1, COMMANDW, 1, 0x417FE4);
2197 }
2198 
2199 struct BurnDriver BurnDrvCommandw = {
2200 	"commandw", NULL, NULL, NULL, "1992",
2201 	"Command War - Super Special Battle & War Game (Ver 0.0J) (Prototype)\0", NULL, "Taito Corporation", "Taito F3 System",
2202 	NULL, NULL, NULL, NULL,
2203 	BDF_GAME_WORKING | BDF_PROTOTYPE, 2, HARDWARE_TAITO_MISC, GBF_STRATEGY, 0,
2204 	NULL, commandwRomInfo, commandwRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
2205 	commandwInit, DrvExit, DrvFrame, DrvDraw224B, DrvScan, &TaitoF3PalRecalc, 0x2000,
2206 	320, 224, 4, 3
2207 };
2208 
2209 
2210 // Taito Cup Finals (Ver 1.0O 1993/02/28)
2211 
2212 static struct BurnRomInfo cupfinalRomDesc[] = {
2213 	{ "d49-13.20",		0x020000, 0xccee5e73, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
2214 	{ "d49-14.19",		0x020000, 0x2323bf2e, TAITO_68KROM1_BYTESWAP32 }, //  1
2215 	{ "d49-16.18",		0x020000, 0x8e73f739, TAITO_68KROM1_BYTESWAP32 }, //  2
2216 	{ "d49-20.17",		0x020000, 0x1e9c392c, TAITO_68KROM1_BYTESWAP32 }, //  3
2217 
2218 	{ "d49-01.12",		0x200000, 0x1dc89f1c, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
2219 	{ "d49-02.8",		0x200000, 0x1e4c374f, TAITO_SPRITESA_BYTESWAP },  //  5
2220 	{ "d49-06.11",		0x100000, 0x71ef4ee1, TAITO_SPRITESA_BYTESWAP },  //  6
2221 	{ "d49-07.7",		0x100000, 0xe5655b8f, TAITO_SPRITESA_BYTESWAP },  //  7
2222 	{ "d49-03.4",		0x200000, 0xcf9a8727, TAITO_SPRITESA },           //  8
2223 	{ "d49-08.3",		0x100000, 0x7d3c6536, TAITO_SPRITESA },           //  9
2224 
2225 	{ "d49-09.47",		0x080000, 0x257ede01, TAITO_CHARS_BYTESWAP },     // 10 Layer Tiles
2226 	{ "d49-10.45",		0x080000, 0xf587b787, TAITO_CHARS_BYTESWAP },     // 11
2227 	{ "d49-11.43",		0x080000, 0x11318b26, TAITO_CHARS },              // 12
2228 
2229 	{ "d49-17.32",		0x020000, 0xf2058eba, TAITO_68KROM2_BYTESWAP },   // 13 68k Code
2230 	{ "d49-18.33",		0x020000, 0xa0fdd270, TAITO_68KROM2_BYTESWAP },   // 14
2231 
2232 	{ "d49-04.38",		0x200000, 0x44b365a9, TAITO_ES5505_BYTESWAP },    // 15 Ensoniq Samples
2233 	{ "d49-05.41",		0x100000, 0xed894fe1, TAITO_ES5505_BYTESWAP },    // 16
2234 };
2235 
2236 STD_ROM_PICK(cupfinal)
STD_ROM_FN(cupfinal)2237 STD_ROM_FN(cupfinal)
2238 
2239 static INT32 cupfinalInit()
2240 {
2241 	return DrvInit(NULL, f3_24bit_palette_update, 0, SCFINALS, 1, 0x408100);
2242 }
2243 
2244 struct BurnDriver BurnDrvCupfinal = {
2245 	"cupfinal", NULL, NULL, NULL, "1993",
2246 	"Taito Cup Finals (Ver 1.0O 1993/02/28)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
2247 	NULL, NULL, NULL, NULL,
2248 	BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_SPORTSFOOTBALL, 0,
2249 	NULL, cupfinalRomInfo, cupfinalRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
2250 	cupfinalInit, DrvExit, DrvFrame, DrvDraw224A_Flipped, DrvScan, &TaitoF3PalRecalc, 0x2000,
2251 	320, 224, 4, 3
2252 };
2253 
2254 
2255 // Hat Trick Hero '93 (Ver 1.0J 1993/02/28)
2256 
2257 static struct BurnRomInfo hthero93RomDesc[] = {
2258 	{ "d49-13.20",		0x020000, 0xccee5e73, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
2259 	{ "d49-14.19",		0x020000, 0x2323bf2e, TAITO_68KROM1_BYTESWAP32 }, //  1
2260 	{ "d49-16.18",		0x020000, 0x8e73f739, TAITO_68KROM1_BYTESWAP32 }, //  2
2261 	{ "d49-19.17",		0x020000, 0xf0925800, TAITO_68KROM1_BYTESWAP32 }, //  3
2262 
2263 	{ "d49-01.12",		0x200000, 0x1dc89f1c, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
2264 	{ "d49-02.8",		0x200000, 0x1e4c374f, TAITO_SPRITESA_BYTESWAP },  //  5
2265 	{ "d49-06.11",		0x100000, 0x71ef4ee1, TAITO_SPRITESA_BYTESWAP },  //  6
2266 	{ "d49-07.7",		0x100000, 0xe5655b8f, TAITO_SPRITESA_BYTESWAP },  //  7
2267 	{ "d49-03.4",		0x200000, 0xcf9a8727, TAITO_SPRITESA },           //  8
2268 	{ "d49-08.3",		0x100000, 0x7d3c6536, TAITO_SPRITESA },           //  9
2269 
2270 	{ "d49-09.47",		0x080000, 0x257ede01, TAITO_CHARS_BYTESWAP },     // 10 Layer Tiles
2271 	{ "d49-10.45",		0x080000, 0xf587b787, TAITO_CHARS_BYTESWAP },     // 11
2272 	{ "d49-11.43",		0x080000, 0x11318b26, TAITO_CHARS },              // 12
2273 
2274 	{ "d49-17.32",		0x020000, 0xf2058eba, TAITO_68KROM2_BYTESWAP },   // 13 68k Code
2275 	{ "d49-18.33",		0x020000, 0xa0fdd270, TAITO_68KROM2_BYTESWAP },   // 14
2276 
2277 	{ "d49-04.38",		0x200000, 0x44b365a9, TAITO_ES5505_BYTESWAP },    // 15 Ensoniq Samples
2278 	{ "d49-05.41",		0x100000, 0xed894fe1, TAITO_ES5505_BYTESWAP },    // 16
2279 };
2280 
2281 STD_ROM_PICK(hthero93)
2282 STD_ROM_FN(hthero93)
2283 
2284 struct BurnDriver BurnDrvHthero93 = {
2285 	"hthero93", "cupfinal", NULL, NULL, "1993",
2286 	"Hat Trick Hero '93 (Ver 1.0J 1993/02/28)\0", NULL, "Taito Corporation", "Taito F3 System",
2287 	NULL, NULL, NULL, NULL,
2288 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_SPORTSFOOTBALL, 0,
2289 	NULL, hthero93RomInfo, hthero93RomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
2290 	cupfinalInit, DrvExit, DrvFrame, DrvDraw224A_Flipped, DrvScan, &TaitoF3PalRecalc, 0x2000,
2291 	320, 224, 4, 3
2292 };
2293 
2294 
2295 // Hat Trick Hero '93 (Ver 1.0A 1993/02/28)
2296 
2297 static struct BurnRomInfo hthero93uRomDesc[] = {
2298 	{ "d49-13.24",		0x020000, 0xccee5e73, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
2299 	{ "d49-14.26",		0x020000, 0x2323bf2e, TAITO_68KROM1_BYTESWAP32 }, //  1
2300 	{ "d49-16.37",		0x020000, 0x8e73f739, TAITO_68KROM1_BYTESWAP32 }, //  2
2301 	{ "d49-19.35",		0x020000, 0x699b09ba, TAITO_68KROM1_BYTESWAP32 }, //  3
2302 
2303 	{ "d49-01.12",		0x200000, 0x1dc89f1c, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
2304 	{ "d49-02.8",		0x200000, 0x1e4c374f, TAITO_SPRITESA_BYTESWAP },  //  5
2305 	{ "d49-06.11",		0x100000, 0x71ef4ee1, TAITO_SPRITESA_BYTESWAP },  //  6
2306 	{ "d49-07.7",		0x100000, 0xe5655b8f, TAITO_SPRITESA_BYTESWAP },  //  7
2307 	{ "d49-03.4",		0x200000, 0xcf9a8727, TAITO_SPRITESA },           //  8
2308 	{ "d49-08.3",		0x100000, 0x7d3c6536, TAITO_SPRITESA },           //  9
2309 
2310 	{ "d49-09.47",		0x080000, 0x257ede01, TAITO_CHARS_BYTESWAP },     // 10 Layer Tiles
2311 	{ "d49-10.45",		0x080000, 0xf587b787, TAITO_CHARS_BYTESWAP },     // 11
2312 	{ "d49-11.43",		0x080000, 0x11318b26, TAITO_CHARS },              // 12
2313 
2314 	{ "d49-17.32",		0x020000, 0xf2058eba, TAITO_68KROM2_BYTESWAP },   // 13 68k Code
2315 	{ "d49-18.33",		0x020000, 0xa0fdd270, TAITO_68KROM2_BYTESWAP },   // 14
2316 
2317 	{ "d49-04.38",		0x200000, 0x44b365a9, TAITO_ES5505_BYTESWAP },    // 15 Ensoniq Samples
2318 	{ "d49-05.41",		0x100000, 0xed894fe1, TAITO_ES5505_BYTESWAP },    // 16
2319 
2320 	{ "d49-12.ic60.bin",	0x000104, 0xaa4cff37, 0 | BRF_OPT },          // 17 palsgame
2321 	{ "d49-21.ic17.bin",	0x000104, 0x821775d4, 0 | BRF_OPT },          // 18
2322 
2323 	{ "d29-11.ic15.bin",	0x000157, 0x5dd5c8f9, 0 | BRF_OPT },          // 19 plds
2324 	{ "d29-12.ic12.bin",	0x000144, 0xc872f1fd, 0 | BRF_OPT },          // 20
2325 	{ "d29-13.ic14.bin",	0x000157, 0x74d61d36, 0 | BRF_OPT },          // 21
2326 	{ "d29-14.ic28.bin",	0x000157, 0x25d205d5, 0 | BRF_OPT },          // 22
2327 	{ "d29-15.ic29.bin",	0x000157, 0x692eb582, 0 | BRF_OPT },          // 23
2328 	{ "d29-16.ic7.bin",		0x000117, 0x11875f52, 0 | BRF_OPT },          // 24
2329 	{ "d29-17.ic16.bin",	0x000117, 0xa0f74b51, 0 | BRF_OPT },          // 25
2330 };
2331 
2332 STD_ROM_PICK(hthero93u)
2333 STD_ROM_FN(hthero93u)
2334 
2335 struct BurnDriver BurnDrvHthero93u = {
2336 	"hthero93u", "cupfinal", NULL, NULL, "1993",
2337 	"Hat Trick Hero '93 (Ver 1.0A 1993/02/28)\0", NULL, "Taito Corporation", "Taito F3 System",
2338 	NULL, NULL, NULL, NULL,
2339 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_SPORTSFOOTBALL, 0,
2340 	NULL, hthero93uRomInfo, hthero93uRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
2341 	cupfinalInit, DrvExit, DrvFrame, DrvDraw224A_Flipped, DrvScan, &TaitoF3PalRecalc, 0x2000,
2342 	320, 224, 4, 3
2343 };
2344 
2345 
2346 // Top Ranking Stars (Ver 2.1O 1993/05/21) (New Version)
2347 
2348 static struct BurnRomInfo trstarRomDesc[] = {
2349 	{ "d53-15-1.24",	0x040000, 0x098bba94, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
2350 	{ "d53-16-1.26",	0x040000, 0x4fa8b15c, TAITO_68KROM1_BYTESWAP32 }, //  1
2351 	{ "d53-18-1.37",	0x040000, 0xaa71cfcc, TAITO_68KROM1_BYTESWAP32 }, //  2
2352 	{ "d53-20-1.35",	0x040000, 0x4de1e287, TAITO_68KROM1_BYTESWAP32 }, //  3
2353 
2354 	{ "d53-03.45",		0x200000, 0x91b66145, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
2355 	{ "d53-04.46",		0x200000, 0xac3a5e80, TAITO_SPRITESA_BYTESWAP },  //  5
2356 	{ "d53-06.64",		0x100000, 0xf4bac410, TAITO_SPRITESA_BYTESWAP },  //  6
2357 	{ "d53-07.65",		0x100000, 0x2f4773c3, TAITO_SPRITESA_BYTESWAP },  //  7
2358 	{ "d53-05.47",		0x200000, 0xb9b68b15, TAITO_SPRITESA },           //  8
2359 	{ "d53-08.66",		0x100000, 0xad13a1ee, TAITO_SPRITESA },           //  9
2360 
2361 	{ "d53-09.48",		0x100000, 0x690554d3, TAITO_CHARS_BYTESWAP },     // 10 Layer Tiles
2362 	{ "d53-10.49",		0x100000, 0x0ec05dc5, TAITO_CHARS_BYTESWAP },     // 11
2363 	{ "d53-11.50",		0x100000, 0x39c0a546, TAITO_CHARS },              // 12
2364 
2365 	{ "d53-13.10",		0x020000, 0x877f0361, TAITO_68KROM2_BYTESWAP },   // 13 68k Code
2366 	{ "d53-14.23",		0x020000, 0xa8664867, TAITO_68KROM2_BYTESWAP },   // 14
2367 
2368 	{ "d53-01.2",		0x200000, 0x28fd2d9b, TAITO_ES5505_BYTESWAP },    // 15 Ensoniq Samples
2369 	{ "d53-02.3",		0x200000, 0x8bd4367a, TAITO_ES5505_BYTESWAP },    // 16
2370 };
2371 
2372 STD_ROM_PICK(trstar)
STD_ROM_FN(trstar)2373 STD_ROM_FN(trstar)
2374 
2375 static INT32 trstarInit()
2376 {
2377 	return DrvInit(NULL, f3_24bit_palette_update, 1, TRSTAR, 0, 0x41E000);
2378 }
2379 
2380 struct BurnDriver BurnDrvTrstar = {
2381 	"trstar", NULL, NULL, NULL, "1993",
2382 	"Top Ranking Stars (Ver 2.1O 1993/05/21) (New Version)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
2383 	NULL, NULL, NULL, NULL,
2384 	BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_VSFIGHT, 0,
2385 	NULL, trstarRomInfo, trstarRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
2386 	trstarInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
2387 	320, 232, 4, 3
2388 };
2389 
2390 
2391 // Top Ranking Stars (Ver 2.1J 1993/05/21) (New Version)
2392 
2393 static struct BurnRomInfo trstarjRomDesc[] = {
2394 	{ "d53-15-1.24",	0x040000, 0x098bba94, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
2395 	{ "d53-16-1.26",	0x040000, 0x4fa8b15c, TAITO_68KROM1_BYTESWAP32 }, //  1
2396 	{ "d53-18-1.37",	0x040000, 0xaa71cfcc, TAITO_68KROM1_BYTESWAP32 }, //  2
2397 	{ "d53-17-1.35",	0x040000, 0xa3ef83ab, TAITO_68KROM1_BYTESWAP32 }, //  3
2398 
2399 	{ "d53-03.45",		0x200000, 0x91b66145, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
2400 	{ "d53-04.46",		0x200000, 0xac3a5e80, TAITO_SPRITESA_BYTESWAP },  //  5
2401 	{ "d53-06.64",		0x100000, 0xf4bac410, TAITO_SPRITESA_BYTESWAP },  //  6
2402 	{ "d53-07.65",		0x100000, 0x2f4773c3, TAITO_SPRITESA_BYTESWAP },  //  7
2403 	{ "d53-05.47",		0x200000, 0xb9b68b15, TAITO_SPRITESA },           //  8
2404 	{ "d53-08.66",		0x100000, 0xad13a1ee, TAITO_SPRITESA },           //  9
2405 
2406 	{ "d53-09.48",		0x100000, 0x690554d3, TAITO_CHARS_BYTESWAP },     // 10 Layer Tiles
2407 	{ "d53-10.49",		0x100000, 0x0ec05dc5, TAITO_CHARS_BYTESWAP },     // 11
2408 	{ "d53-11.50",		0x100000, 0x39c0a546, TAITO_CHARS },              // 12
2409 
2410 	{ "d53-13.10",		0x020000, 0x877f0361, TAITO_68KROM2_BYTESWAP },   // 13 68k Code
2411 	{ "d53-14.23",		0x020000, 0xa8664867, TAITO_68KROM2_BYTESWAP },   // 14
2412 
2413 	{ "d53-01.2",		0x200000, 0x28fd2d9b, TAITO_ES5505_BYTESWAP },    // 15 Ensoniq Samples
2414 	{ "d53-02.3",		0x200000, 0x8bd4367a, TAITO_ES5505_BYTESWAP },    // 16
2415 };
2416 
2417 STD_ROM_PICK(trstarj)
2418 STD_ROM_FN(trstarj)
2419 
2420 struct BurnDriver BurnDrvTrstarj = {
2421 	"trstarj", "trstar", NULL, NULL, "1993",
2422 	"Top Ranking Stars (Ver 2.1J 1993/05/21) (New Version)\0", NULL, "Taito Corporation", "Taito F3 System",
2423 	NULL, NULL, NULL, NULL,
2424 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_VSFIGHT, 0,
2425 	NULL, trstarjRomInfo, trstarjRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
2426 	trstarInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
2427 	320, 232, 4, 3
2428 };
2429 
2430 
2431 // Prime Time Fighter (Ver 2.1A 1993/05/21) (New Version)
2432 
2433 static struct BurnRomInfo prmtmfgtRomDesc[] = {
2434 	{ "d53-15-1.24",	0x040000, 0x098bba94, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
2435 	{ "d53-16-1.26",	0x040000, 0x4fa8b15c, TAITO_68KROM1_BYTESWAP32 }, //  1
2436 	{ "d53-18-1.37",	0x040000, 0xaa71cfcc, TAITO_68KROM1_BYTESWAP32 }, //  2
2437 	{ "d53-19-1.35",	0x040000, 0x3ae6d211, TAITO_68KROM1_BYTESWAP32 }, //  3
2438 
2439 	{ "d53-03.45",		0x200000, 0x91b66145, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
2440 	{ "d53-04.46",		0x200000, 0xac3a5e80, TAITO_SPRITESA_BYTESWAP },  //  5
2441 	{ "d53-06.64",		0x100000, 0xf4bac410, TAITO_SPRITESA_BYTESWAP },  //  6
2442 	{ "d53-07.65",		0x100000, 0x2f4773c3, TAITO_SPRITESA_BYTESWAP },  //  7
2443 	{ "d53-05.47",		0x200000, 0xb9b68b15, TAITO_SPRITESA },           //  8
2444 	{ "d53-08.66",		0x100000, 0xad13a1ee, TAITO_SPRITESA },           //  9
2445 
2446 	{ "d53-09.48",		0x100000, 0x690554d3, TAITO_CHARS_BYTESWAP },     // 10 Layer Tiles
2447 	{ "d53-10.49",		0x100000, 0x0ec05dc5, TAITO_CHARS_BYTESWAP },     // 11
2448 	{ "d53-11.50",		0x100000, 0x39c0a546, TAITO_CHARS },              // 12
2449 
2450 	{ "d53-13.10",		0x020000, 0x877f0361, TAITO_68KROM2_BYTESWAP },   // 13 68k Code
2451 	{ "d53-14.23",		0x020000, 0xa8664867, TAITO_68KROM2_BYTESWAP },   // 14
2452 
2453 	{ "d53-01.2",		0x200000, 0x28fd2d9b, TAITO_ES5505_BYTESWAP },    // 15 Ensoniq Samples
2454 	{ "d53-02.3",		0x200000, 0x8bd4367a, TAITO_ES5505_BYTESWAP },    // 16
2455 };
2456 
2457 STD_ROM_PICK(prmtmfgt)
2458 STD_ROM_FN(prmtmfgt)
2459 
2460 struct BurnDriver BurnDrvPrmtmfgt = {
2461 	"prmtmfgt", "trstar", NULL, NULL, "1993",
2462 	"Prime Time Fighter (Ver 2.1A 1993/05/21) (New Version)\0", NULL, "Taito America Corporation", "Taito F3 System",
2463 	NULL, NULL, NULL, NULL,
2464 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_VSFIGHT, 0,
2465 	NULL, prmtmfgtRomInfo, prmtmfgtRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
2466 	trstarInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
2467 	320, 232, 4, 3
2468 };
2469 
2470 
2471 // Top Ranking Stars (Ver 2.1O 1993/05/21) (Old Version)
2472 
2473 static struct BurnRomInfo trstaroRomDesc[] = {
2474 	{ "d53-15.24",		0x040000, 0xf24de51b, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
2475 	{ "d53-16.26",		0x040000, 0xffc84429, TAITO_68KROM1_BYTESWAP32 }, //  1
2476 	{ "d53-18.37",		0x040000, 0xea2d6e13, TAITO_68KROM1_BYTESWAP32 }, //  2
2477 	{ "d53-20.35",		0x040000, 0x77e1f267, TAITO_68KROM1_BYTESWAP32 }, //  3
2478 
2479 	{ "d53-03.45",		0x200000, 0x91b66145, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
2480 	{ "d53-04.46",		0x200000, 0xac3a5e80, TAITO_SPRITESA_BYTESWAP },  //  5
2481 	{ "d53-06.64",		0x100000, 0xf4bac410, TAITO_SPRITESA_BYTESWAP },  //  6
2482 	{ "d53-07.65",		0x100000, 0x2f4773c3, TAITO_SPRITESA_BYTESWAP },  //  7
2483 	{ "d53-05.47",		0x200000, 0xb9b68b15, TAITO_SPRITESA },           //  8
2484 	{ "d53-08.66",		0x100000, 0xad13a1ee, TAITO_SPRITESA },           //  9
2485 
2486 	{ "d53-09.48",		0x100000, 0x690554d3, TAITO_CHARS_BYTESWAP },     // 10 Layer Tiles
2487 	{ "d53-10.49",		0x100000, 0x0ec05dc5, TAITO_CHARS_BYTESWAP },     // 11
2488 	{ "d53-11.50",		0x100000, 0x39c0a546, TAITO_CHARS },              // 12
2489 
2490 	{ "d53-13.10",		0x020000, 0x877f0361, TAITO_68KROM2_BYTESWAP },   // 13 68k Code
2491 	{ "d53-14.23",		0x020000, 0xa8664867, TAITO_68KROM2_BYTESWAP },   // 14
2492 
2493 	{ "d53-01.2",		0x200000, 0x28fd2d9b, TAITO_ES5505_BYTESWAP },    // 15 Ensoniq Samples
2494 	{ "d53-02.3",		0x200000, 0x8bd4367a, TAITO_ES5505_BYTESWAP },    // 16
2495 };
2496 
2497 STD_ROM_PICK(trstaro)
2498 STD_ROM_FN(trstaro)
2499 
2500 struct BurnDriver BurnDrvTrstaro = {
2501 	"trstaro", "trstar", NULL, NULL, "1993",
2502 	"Top Ranking Stars (Ver 2.1O 1993/05/21) (Old Version)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
2503 	NULL, NULL, NULL, NULL,
2504 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_VSFIGHT, 0,
2505 	NULL, trstaroRomInfo, trstaroRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
2506 	trstarInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
2507 	320, 232, 4, 3
2508 };
2509 
2510 
2511 // Top Ranking Stars (Ver 2.1J 1993/05/21) (Old Version)
2512 
2513 static struct BurnRomInfo trstarojRomDesc[] = {
2514 	{ "d53-15.24",		0x040000, 0xf24de51b, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
2515 	{ "d53-16.26",		0x040000, 0xffc84429, TAITO_68KROM1_BYTESWAP32 }, //  1
2516 	{ "d53-18.37",		0x040000, 0xea2d6e13, TAITO_68KROM1_BYTESWAP32 }, //  2
2517 	{ "d53-17.35",		0x040000, 0x99ef934b, TAITO_68KROM1_BYTESWAP32 }, //  3
2518 
2519 	{ "d53-03.45",		0x200000, 0x91b66145, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
2520 	{ "d53-04.46",		0x200000, 0xac3a5e80, TAITO_SPRITESA_BYTESWAP },  //  5
2521 	{ "d53-06.64",		0x100000, 0xf4bac410, TAITO_SPRITESA_BYTESWAP },  //  6
2522 	{ "d53-07.65",		0x100000, 0x2f4773c3, TAITO_SPRITESA_BYTESWAP },  //  7
2523 	{ "d53-05.47",		0x200000, 0xb9b68b15, TAITO_SPRITESA },           //  8
2524 	{ "d53-08.66",		0x100000, 0xad13a1ee, TAITO_SPRITESA },           //  9
2525 
2526 	{ "d53-09.48",		0x100000, 0x690554d3, TAITO_CHARS_BYTESWAP },     // 10 Layer Tiles
2527 	{ "d53-10.49",		0x100000, 0x0ec05dc5, TAITO_CHARS_BYTESWAP },     // 11
2528 	{ "d53-11.50",		0x100000, 0x39c0a546, TAITO_CHARS },              // 12
2529 
2530 	{ "d53-13.10",		0x020000, 0x877f0361, TAITO_68KROM2_BYTESWAP },   // 13 68k Code
2531 	{ "d53-14.23",		0x020000, 0xa8664867, TAITO_68KROM2_BYTESWAP },   // 14
2532 
2533 	{ "d53-01.2",		0x200000, 0x28fd2d9b, TAITO_ES5505_BYTESWAP },    // 15 Ensoniq Samples
2534 	{ "d53-02.3",		0x200000, 0x8bd4367a, TAITO_ES5505_BYTESWAP },    // 16
2535 };
2536 
2537 STD_ROM_PICK(trstaroj)
2538 STD_ROM_FN(trstaroj)
2539 
2540 struct BurnDriver BurnDrvTrstaroj = {
2541 	"trstaroj", "trstar", NULL, NULL, "1993",
2542 	"Top Ranking Stars (Ver 2.1J 1993/05/21) (Old Version)\0", NULL, "Taito Corporation", "Taito F3 System",
2543 	NULL, NULL, NULL, NULL,
2544 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_VSFIGHT, 0,
2545 	NULL, trstarojRomInfo, trstarojRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
2546 	trstarInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
2547 	320, 232, 4, 3
2548 };
2549 
2550 
2551 // Prime Time Fighter (Ver 2.1A 1993/05/21) (Old Version)
2552 
2553 static struct BurnRomInfo prmtmfgtoRomDesc[] = {
2554 	{ "d53-15.24",		0x040000, 0xf24de51b, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
2555 	{ "d53-16.26",		0x040000, 0xffc84429, TAITO_68KROM1_BYTESWAP32 }, //  1
2556 	{ "d53-18.37",		0x040000, 0xea2d6e13, TAITO_68KROM1_BYTESWAP32 }, //  2
2557 	{ "d53-19.35",		0x040000, 0x00e6c2f1, TAITO_68KROM1_BYTESWAP32 }, //  3
2558 
2559 	{ "d53-03.45",		0x200000, 0x91b66145, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
2560 	{ "d53-04.46",		0x200000, 0xac3a5e80, TAITO_SPRITESA_BYTESWAP },  //  5
2561 	{ "d53-06.64",		0x100000, 0xf4bac410, TAITO_SPRITESA_BYTESWAP },  //  6
2562 	{ "d53-07.65",		0x100000, 0x2f4773c3, TAITO_SPRITESA_BYTESWAP },  //  7
2563 	{ "d53-05.47",		0x200000, 0xb9b68b15, TAITO_SPRITESA },           //  8
2564 	{ "d53-08.66",		0x100000, 0xad13a1ee, TAITO_SPRITESA },           //  9
2565 
2566 	{ "d53-09.48",		0x100000, 0x690554d3, TAITO_CHARS_BYTESWAP },     // 10 Layer Tiles
2567 	{ "d53-10.49",		0x100000, 0x0ec05dc5, TAITO_CHARS_BYTESWAP },     // 11
2568 	{ "d53-11.50",		0x100000, 0x39c0a546, TAITO_CHARS },              // 12
2569 
2570 	{ "d53-13.10",		0x020000, 0x877f0361, TAITO_68KROM2_BYTESWAP },   // 13 68k Code
2571 	{ "d53-14.23",		0x020000, 0xa8664867, TAITO_68KROM2_BYTESWAP },   // 14
2572 
2573 	{ "d53-01.2",		0x200000, 0x28fd2d9b, TAITO_ES5505_BYTESWAP },    // 15 Ensoniq Samples
2574 	{ "d53-02.3",		0x200000, 0x8bd4367a, TAITO_ES5505_BYTESWAP },    // 16
2575 };
2576 
2577 STD_ROM_PICK(prmtmfgto)
2578 STD_ROM_FN(prmtmfgto)
2579 
2580 struct BurnDriver BurnDrvPrmtmfgto = {
2581 	"prmtmfgto", "trstar", NULL, NULL, "1993",
2582 	"Prime Time Fighter (Ver 2.1A 1993/05/21) (Old Version)\0", NULL, "Taito America Corporation", "Taito F3 System",
2583 	NULL, NULL, NULL, NULL,
2584 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_VSFIGHT, 0,
2585 	NULL, prmtmfgtoRomInfo, prmtmfgtoRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
2586 	trstarInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
2587 	320, 232, 4, 3
2588 };
2589 
2590 
2591 // Gunlock (Ver 2.3O 1994/01/20)
2592 
2593 static struct BurnRomInfo gunlockRomDesc[] = {
2594 	{ "d66-18.ic24",	0x040000, 0x8418513e, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
2595 	{ "d66-19.ic26",	0x040000, 0x95731473, TAITO_68KROM1_BYTESWAP32 }, //  1
2596 	{ "d66-21.ic37",	0x040000, 0xbd0d60f2, TAITO_68KROM1_BYTESWAP32 }, //  2
2597 	{ "d66-24.ic35",	0x040000, 0x97816378, TAITO_68KROM1_BYTESWAP32 }, //  3
2598 
2599 	{ "d66-03.ic45",	0x100000, 0xe7a4a491, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
2600 	{ "d66-04.ic46",	0x100000, 0xc1c7aaa7, TAITO_SPRITESA_BYTESWAP },  //  5
2601 	{ "d66-05.ic47",	0x100000, 0xa3cefe04, TAITO_SPRITESA },           //  6
2602 
2603 	{ "d66-06.ic48",	0x100000, 0xb3d8126d, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
2604 	{ "d66-07.ic49",	0x100000, 0xa6da9be7, TAITO_CHARS_BYTESWAP },     //  8
2605 	{ "d66-08.ic50",	0x100000, 0x9959f30b, TAITO_CHARS },              //  9
2606 
2607 	{ "d66-23.ic10",	0x040000, 0x57fb7c49, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
2608 	{ "d66-22.ic23",	0x040000, 0x83dd7f9b, TAITO_68KROM2_BYTESWAP },   // 11
2609 
2610 	{ "d66-01.ic2",		0x200000, 0x58c92efa, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
2611 	{ "d66-02.ic3",		0x200000, 0xdcdafaab, TAITO_ES5505_BYTESWAP },    // 13
2612 };
2613 
2614 STD_ROM_PICK(gunlock)
STD_ROM_FN(gunlock)2615 STD_ROM_FN(gunlock)
2616 
2617 static INT32 gunlockInit()
2618 {
2619 	return DrvInit(NULL, f3_24bit_palette_update, 1, GUNLOCK, 2, 0x400004); // speed hack isn't great for this game
2620 }
2621 
2622 struct BurnDriver BurnDrvGunlock = {
2623 	"gunlock", NULL, NULL, NULL, "1993",
2624 	"Gunlock (Ver 2.3O 1994/01/20)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
2625 	NULL, NULL, NULL, NULL,
2626 	BDF_GAME_WORKING | BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED, 2, HARDWARE_TAITO_MISC, GBF_VERSHOOT, 0,
2627 	NULL, gunlockRomInfo, gunlockRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
2628 	gunlockInit, DrvExit, DrvFrame, DrvDraw224A_Flipped, DrvScan, &TaitoF3PalRecalc, 0x2000,
2629 	224, 320, 3, 4
2630 };
2631 
2632 
2633 // Ray Force (Ver 2.3A 1994/01/20)
2634 
2635 static struct BurnRomInfo rayforceRomDesc[] = {
2636 	{ "d66-18.ic24",	0x040000, 0x8418513e, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
2637 	{ "d66-19.ic26",	0x040000, 0x95731473, TAITO_68KROM1_BYTESWAP32 }, //  1
2638 	{ "d66-21.ic37",	0x040000, 0xbd0d60f2, TAITO_68KROM1_BYTESWAP32 }, //  2
2639 	{ "d66-25.ic35",	0x040000, 0xe08653ee, TAITO_68KROM1_BYTESWAP32 }, //  3
2640 
2641 	{ "d66-03.ic45",	0x100000, 0xe7a4a491, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
2642 	{ "d66-04.ic46",	0x100000, 0xc1c7aaa7, TAITO_SPRITESA_BYTESWAP },  //  5
2643 	{ "d66-05.ic47",	0x100000, 0xa3cefe04, TAITO_SPRITESA },           //  6
2644 
2645 	{ "d66-06.ic48",	0x100000, 0xb3d8126d, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
2646 	{ "d66-07.ic49",	0x100000, 0xa6da9be7, TAITO_CHARS_BYTESWAP },     //  8
2647 	{ "d66-08.ic49",	0x100000, 0x9959f30b, TAITO_CHARS },              //  9
2648 
2649 	{ "d66-23.ic10",	0x040000, 0x57fb7c49, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
2650 	{ "d66-22.ic23",	0x040000, 0x83dd7f9b, TAITO_68KROM2_BYTESWAP },   // 11
2651 
2652 	{ "d66-01.ic2",		0x200000, 0x58c92efa, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
2653 	{ "d66-02.ic3",		0x200000, 0xdcdafaab, TAITO_ES5505_BYTESWAP },    // 13
2654 };
2655 
2656 STD_ROM_PICK(rayforce)
2657 STD_ROM_FN(rayforce)
2658 
2659 struct BurnDriver BurnDrvRayforce = {
2660 	"rayforce", "gunlock", NULL, NULL, "1993",
2661 	"Ray Force (Ver 2.3A 1994/01/20)\0", NULL, "Taito Corporation", "Taito F3 System",
2662 	NULL, NULL, NULL, NULL,
2663 	BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED, 2, HARDWARE_TAITO_MISC, GBF_VERSHOOT, 0,
2664 	NULL, rayforceRomInfo, rayforceRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
2665 	gunlockInit, DrvExit, DrvFrame, DrvDraw224A_Flipped, DrvScan, &TaitoF3PalRecalc, 0x2000,
2666 	224, 320, 3, 4
2667 };
2668 
2669 
2670 // Ray Force (Ver 2.3J 1994/01/20)
2671 
2672 static struct BurnRomInfo rayforcejRomDesc[] = {
2673 	{ "d66-18.ic24",	0x040000, 0x8418513e, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
2674 	{ "d66-19.ic26",	0x040000, 0x95731473, TAITO_68KROM1_BYTESWAP32 }, //  1
2675 	{ "d66-21.ic37",	0x040000, 0xbd0d60f2, TAITO_68KROM1_BYTESWAP32 }, //  2
2676 	{ "d66-20.ic35",	0x040000, 0x798f0254, TAITO_68KROM1_BYTESWAP32 }, //  3
2677 
2678 	{ "d66-03.ic45",	0x100000, 0xe7a4a491, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
2679 	{ "d66-04.ic46",	0x100000, 0xc1c7aaa7, TAITO_SPRITESA_BYTESWAP },  //  5
2680 	{ "d66-05.ic47",	0x100000, 0xa3cefe04, TAITO_SPRITESA },           //  6
2681 
2682 	{ "d66-06.ic48",	0x100000, 0xb3d8126d, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
2683 	{ "d66-07.ic49",	0x100000, 0xa6da9be7, TAITO_CHARS_BYTESWAP },     //  8
2684 	{ "d66-08.ic49",	0x100000, 0x9959f30b, TAITO_CHARS },              //  9
2685 
2686 	{ "d66-23.ic10",	0x040000, 0x57fb7c49, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
2687 	{ "d66-22.ic23",	0x040000, 0x83dd7f9b, TAITO_68KROM2_BYTESWAP },   // 11
2688 
2689 	{ "d66-01.ic2",		0x200000, 0x58c92efa, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
2690 	{ "d66-02.ic3",		0x200000, 0xdcdafaab, TAITO_ES5505_BYTESWAP },    // 13
2691 };
2692 
2693 STD_ROM_PICK(rayforcej)
2694 STD_ROM_FN(rayforcej)
2695 
2696 struct BurnDriver BurnDrvRayforcej = {
2697 	"rayforcej", "gunlock", NULL, NULL, "1993",
2698 	"Ray Force (Ver 2.3J 1994/01/20)\0", NULL, "Taito Corporation", "Taito F3 System",
2699 	NULL, NULL, NULL, NULL,
2700 	BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED, 2, HARDWARE_TAITO_MISC, GBF_VERSHOOT, 0,
2701 	NULL, rayforcejRomInfo, rayforcejRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
2702 	gunlockInit, DrvExit, DrvFrame, DrvDraw224A_Flipped, DrvScan, &TaitoF3PalRecalc, 0x2000,
2703 	224, 320, 3, 4
2704 };
2705 
2706 
2707 // Super Cup Finals (Ver 2.2O 1994/01/13, single PCB)
2708 /* This is the single PCB version */
2709 
2710 static struct BurnRomInfo scfinalsRomDesc[] = {
2711 	{ "d68-09.ic40",	0x040000, 0x28193b3f, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
2712 	{ "d68-10.ic38",	0x040000, 0x67481bad, TAITO_68KROM1_BYTESWAP32 }, //  1
2713 	{ "d68-11.ic36",	0x040000, 0xd456c124, TAITO_68KROM1_BYTESWAP32 }, //  2
2714 	{ "d68-12.ic34",	0x040000, 0xdec41397, TAITO_68KROM1_BYTESWAP32 }, //  3
2715 
2716 	{ "d49-01.12",		0x200000, 0x1dc89f1c, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
2717 	{ "d49-02.8",		0x200000, 0x1e4c374f, TAITO_SPRITESA_BYTESWAP },  //  5
2718 	{ "d49-06.11",		0x100000, 0x71ef4ee1, TAITO_SPRITESA_BYTESWAP },  //  6
2719 	{ "d49-07.7",		0x100000, 0xe5655b8f, TAITO_SPRITESA_BYTESWAP },  //  7
2720 	{ "d49-03.4",		0x200000, 0xcf9a8727, TAITO_SPRITESA },           //  8
2721 	{ "d49-08.3",		0x100000, 0x7d3c6536, TAITO_SPRITESA },           //  9
2722 
2723 	{ "d49-09.47",		0x080000, 0x257ede01, TAITO_CHARS_BYTESWAP },     // 10 Layer Tiles
2724 	{ "d49-10.45",		0x080000, 0xf587b787, TAITO_CHARS_BYTESWAP },     // 11
2725 	{ "d49-11.43",		0x080000, 0x11318b26, TAITO_CHARS },              // 12
2726 
2727 	{ "d49-17.ic5",		0x020000, 0xf2058eba, TAITO_68KROM2_BYTESWAP },   // 13 68k Code
2728 	{ "d49-18.ic6",		0x020000, 0xa0fdd270, TAITO_68KROM2_BYTESWAP },   // 14
2729 
2730 	{ "d49-04.38",		0x200000, 0x44b365a9, TAITO_ES5505_BYTESWAP },    // 15 Ensoniq Samples
2731 	{ "d49-05.41",		0x100000, 0xed894fe1, TAITO_ES5505_BYTESWAP },    // 16
2732 
2733 	{ "scfinals.nv",	0x000080, 0xf25945fc, TAITO_DEFAULT_EEPROM },     // 17 eeprom
2734 
2735 };
2736 
2737 STD_ROM_PICK(scfinals)
STD_ROM_FN(scfinals)2738 STD_ROM_FN(scfinals)
2739 
2740 static INT32 scfinalsCallback()
2741 {
2742 	UINT32 *ROM = (UINT32 *)Taito68KRom1;
2743 
2744 	ROM[0x5af0/4] = BURN_ENDIAN_SWAP_INT32(0x4e754e71);
2745 	ROM[0xdd0/4] = BURN_ENDIAN_SWAP_INT32(0x4e714e75);
2746 
2747 	return 0;
2748 }
2749 
scfinalsInit()2750 static INT32 scfinalsInit()
2751 {
2752 	return DrvInit(scfinalsCallback, f3_24bit_palette_update, 0, SCFINALS, 1, 0x408100);
2753 }
2754 
2755 struct BurnDriver BurnDrvScfinals = {
2756 	"scfinals", NULL, NULL, NULL, "1993",
2757 	"Super Cup Finals (Ver 2.2O 1994/01/13, single PCB)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
2758 	NULL, NULL, NULL, NULL,
2759 	BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_SPORTSFOOTBALL, 0,
2760 	NULL, scfinalsRomInfo, scfinalsRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
2761 	scfinalsInit, DrvExit, DrvFrame, DrvDraw224A_Flipped, DrvScan, &TaitoF3PalRecalc, 0x2000,
2762 	320, 224, 4, 3
2763 };
2764 
2765 
2766 // Super Cup Finals (Ver 2.1O 1993/11/19, single PCB)
2767 /* This is the single PCB version of v2.1O */
2768 
2769 static struct BurnRomInfo scfinalsoRomDesc[] = {
2770 	{ "s-final_rom_24_071293.ic24",		0x020000, 0x466700c8, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
2771 	{ "s-final_rom_26_071293.ic26",		0x020000, 0x824092de, TAITO_68KROM1_BYTESWAP32 }, //  1
2772 	{ "s-final_rom_37_071293.ic37",		0x020000, 0x9aa0cca4, TAITO_68KROM1_BYTESWAP32 }, //  2
2773 	{ "s-final_rom_35_071293.ic35",		0x020000, 0xe7a298fa, TAITO_68KROM1_BYTESWAP32 }, //  3
2774 
2775 	{ "d49-01.12",		0x200000, 0x1dc89f1c, TAITO_SPRITESA_BYTESWAP },  				  //  4 Sprites
2776 	{ "d49-02.8",		0x200000, 0x1e4c374f, TAITO_SPRITESA_BYTESWAP },  				  //  5
2777 	{ "d49-06.11",		0x100000, 0x71ef4ee1, TAITO_SPRITESA_BYTESWAP },  				  //  6
2778 	{ "d49-07.7",		0x100000, 0xe5655b8f, TAITO_SPRITESA_BYTESWAP },  				  //  7
2779 	{ "d49-03.4",		0x200000, 0xcf9a8727, TAITO_SPRITESA },           				  //  8
2780 	{ "d49-08.3",		0x100000, 0x7d3c6536, TAITO_SPRITESA },           				  //  9
2781 
2782 	{ "d49-09.47",		0x080000, 0x257ede01, TAITO_CHARS_BYTESWAP },     				  // 10 Layer Tiles
2783 	{ "d49-10.45",		0x080000, 0xf587b787, TAITO_CHARS_BYTESWAP },     				  // 11
2784 	{ "d49-11.43",		0x080000, 0x11318b26, TAITO_CHARS },              				  // 12
2785 
2786 	{ "d49-17.32",		0x020000, 0xf2058eba, TAITO_68KROM2_BYTESWAP },   				  // 13 68k Code
2787 	{ "d49-18.33",		0x020000, 0xa0fdd270, TAITO_68KROM2_BYTESWAP },   				  // 14
2788 
2789 	{ "d49-04.38",		0x200000, 0x44b365a9, TAITO_ES5505_BYTESWAP },    				  // 15 Ensoniq Samples
2790 	{ "d49-05.41",		0x100000, 0xed894fe1, TAITO_ES5505_BYTESWAP },    				  // 16
2791 
2792 	{ "scfinalso.nv",	0x000080, 0x1319752e, TAITO_DEFAULT_EEPROM },     				  // 17 eeprom
2793 };
2794 
2795 STD_ROM_PICK(scfinalso)
2796 STD_ROM_FN(scfinalso)
2797 
2798 struct BurnDriver BurnDrvScfinalso = {
2799 	"scfinalso", "scfinals", NULL, NULL, "1993",
2800 	"Super Cup Finals (Ver 2.1O 1993/11/19, single PCB)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
2801 	NULL, NULL, NULL, NULL,
2802 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_SPORTSFOOTBALL, 0,
2803 	NULL, scfinalsoRomInfo, scfinalsoRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
2804 	scfinalsInit, DrvExit, DrvFrame, DrvDraw224A_Flipped, DrvScan, &TaitoF3PalRecalc, 0x2000,
2805 	320, 224, 4, 3
2806 };
2807 
2808 
2809 // Super Cup Finals (Ver 2.1O 1993/11/19, F3 Cartridge)
2810 /* This is the Cart version of v2.1O */
2811 
2812 static struct BurnRomInfo scfinalsocRomDesc[] = {
2813 	{ "d68-01.20",		0x040000, 0xcb951856, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
2814 	{ "d68-02.19",		0x040000, 0x4f94413a, TAITO_68KROM1_BYTESWAP32 }, //  1
2815 	{ "d68-04.18",		0x040000, 0x4a4e4972, TAITO_68KROM1_BYTESWAP32 }, //  2
2816 	{ "d68-03.17",		0x040000, 0xa40be699, TAITO_68KROM1_BYTESWAP32 }, //  3
2817 
2818 	{ "d49-01.12",		0x200000, 0x1dc89f1c, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
2819 	{ "d49-02.8",		0x200000, 0x1e4c374f, TAITO_SPRITESA_BYTESWAP },  //  5
2820 	{ "d49-06.11",		0x100000, 0x71ef4ee1, TAITO_SPRITESA_BYTESWAP },  //  6
2821 	{ "d49-07.7",		0x100000, 0xe5655b8f, TAITO_SPRITESA_BYTESWAP },  //  7
2822 	{ "d49-03.4",		0x200000, 0xcf9a8727, TAITO_SPRITESA },           //  8
2823 	{ "d49-08.3",		0x100000, 0x7d3c6536, TAITO_SPRITESA },           //  9
2824 
2825 	{ "d49-09.47",		0x080000, 0x257ede01, TAITO_CHARS_BYTESWAP },     // 10 Layer Tiles
2826 	{ "d49-10.45",		0x080000, 0xf587b787, TAITO_CHARS_BYTESWAP },     // 11
2827 	{ "d49-11.43",		0x080000, 0x11318b26, TAITO_CHARS },              // 12
2828 
2829 	{ "d49-17.32",		0x020000, 0xf2058eba, TAITO_68KROM2_BYTESWAP },   // 13 68k Code
2830 	{ "d49-18.33",		0x020000, 0xa0fdd270, TAITO_68KROM2_BYTESWAP },   // 14
2831 
2832 	{ "d49-04.38",		0x200000, 0x44b365a9, TAITO_ES5505_BYTESWAP },    // 15 Ensoniq Samples
2833 	{ "d49-05.41",		0x100000, 0xed894fe1, TAITO_ES5505_BYTESWAP },    // 16
2834 
2835 	{ "scfinalso.nv",	0x000080, 0x1319752e, TAITO_DEFAULT_EEPROM },     // 17 eeprom
2836 };
2837 
2838 STD_ROM_PICK(scfinalsoc)
2839 STD_ROM_FN(scfinalsoc)
2840 
2841 struct BurnDriver BurnDrvScfinalsoc = {
2842 	"scfinalsoc", "scfinals", NULL, NULL, "1993",
2843 	"Super Cup Finals (Ver 2.1O 1993/11/19, F3 Cartridge)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
2844 	NULL, NULL, NULL, NULL,
2845 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_SPORTSFOOTBALL, 0,
2846 	NULL, scfinalsocRomInfo, scfinalsocRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
2847 	scfinalsInit, DrvExit, DrvFrame, DrvDraw224A_Flipped, DrvScan, &TaitoF3PalRecalc, 0x2000,
2848 	320, 224, 4, 3
2849 };
2850 
2851 
2852 // Light Bringer (Ver 2.2O 1994/04/08)
2853 
2854 static struct BurnRomInfo lightbrRomDesc[] = {
2855 	{ "d69-25.ic40",	0x080000, 0x27f1b8be, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
2856 	{ "d69-26.ic38",	0x080000, 0x2ff7dba6, TAITO_68KROM1_BYTESWAP32 }, //  1
2857 	{ "d69-28.ic36",	0x080000, 0xa5546162, TAITO_68KROM1_BYTESWAP32 }, //  2
2858 	{ "d69-27.ic34",	0x080000, 0xe232a949, TAITO_68KROM1_BYTESWAP32 }, //  3
2859 
2860 	{ "d69-06.bin",		0x200000, 0xcb4aac81, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
2861 	{ "d69-07.bin",		0x200000, 0xb749f984, TAITO_SPRITESA_BYTESWAP },  //  5
2862 	{ "d69-09.bin",		0x100000, 0xa96c19b8, TAITO_SPRITESA_BYTESWAP },  //  6
2863 	{ "d69-10.bin",		0x100000, 0x36aa80c6, TAITO_SPRITESA_BYTESWAP },  //  7
2864 	{ "d69-08.bin",		0x200000, 0x5b68d7d8, TAITO_SPRITESA },           //  8
2865 	{ "d69-11.bin",		0x100000, 0xc11adf92, TAITO_SPRITESA },           //  9
2866 
2867 	{ "d69-03.bin",		0x200000, 0x6999c86f, TAITO_CHARS_BYTESWAP },     // 10 Layer Tiles
2868 	{ "d69-04.bin",		0x200000, 0xcc91dcb7, TAITO_CHARS_BYTESWAP },     // 11
2869 	{ "d69-05.bin",		0x200000, 0xf9f5433c, TAITO_CHARS },              // 12
2870 
2871 	{ "d69-18.bin",		0x020000, 0x04600d7b, TAITO_68KROM2_BYTESWAP },   // 13 68k Code
2872 	{ "d69-19.bin",		0x020000, 0x1484e853, TAITO_68KROM2_BYTESWAP },   // 14
2873 
2874 	{ "d69-01.bin",		0x200000, 0x9ac93ac2, TAITO_ES5505_BYTESWAP },    // 15 Ensoniq Samples
2875 	{ "d69-02.bin",		0x200000, 0xdce28dd7, TAITO_ES5505_BYTESWAP },    // 16
2876 };
2877 
2878 STD_ROM_PICK(lightbr)
STD_ROM_FN(lightbr)2879 STD_ROM_FN(lightbr)
2880 
2881 static INT32 lightbrInit()
2882 {
2883 	return DrvInit(NULL, f3_24bit_palette_update, 1, LIGHTBR, 2, 0x400118);
2884 }
2885 
2886 struct BurnDriver BurnDrvLightbr = {
2887 	"lightbr", NULL, NULL, NULL, "1993",
2888 	"Light Bringer (Ver 2.2O 1994/04/08)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
2889 	NULL, NULL, NULL, NULL,
2890 	BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_SCRFIGHT, 0,
2891 	NULL, lightbrRomInfo, lightbrRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
2892 	lightbrInit, DrvExit, DrvFrame, DrvDraw224A, DrvScan, &TaitoF3PalRecalc, 0x2000,
2893 	320, 224, 4, 3
2894 };
2895 
2896 
2897 // Dungeon Magic (Ver 2.1O 1994/02/18)
2898 
2899 static struct BurnRomInfo dungeonmRomDesc[] = {
2900 	{ "d69-20.bin",		0x080000, 0x33650fe4, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
2901 	{ "d69-13.bin",		0x080000, 0xdec2ec17, TAITO_68KROM1_BYTESWAP32 }, //  1
2902 	{ "d69-15.bin",		0x080000, 0x323e1955, TAITO_68KROM1_BYTESWAP32 }, //  2
2903 	{ "d69-22.bin",		0x080000, 0xf99e175d, TAITO_68KROM1_BYTESWAP32 }, //  3
2904 
2905 	{ "d69-06.bin",		0x200000, 0xcb4aac81, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
2906 	{ "d69-07.bin",		0x200000, 0xb749f984, TAITO_SPRITESA_BYTESWAP },  //  5
2907 	{ "d69-09.bin",		0x100000, 0xa96c19b8, TAITO_SPRITESA_BYTESWAP },  //  6
2908 	{ "d69-10.bin",		0x100000, 0x36aa80c6, TAITO_SPRITESA_BYTESWAP },  //  7
2909 	{ "d69-08.bin",		0x200000, 0x5b68d7d8, TAITO_SPRITESA },           //  8
2910 	{ "d69-11.bin",		0x100000, 0xc11adf92, TAITO_SPRITESA },           //  9
2911 
2912 	{ "d69-03.bin",		0x200000, 0x6999c86f, TAITO_CHARS_BYTESWAP },     // 10 Layer Tiles
2913 	{ "d69-04.bin",		0x200000, 0xcc91dcb7, TAITO_CHARS_BYTESWAP },     // 11
2914 	{ "d69-05.bin",		0x200000, 0xf9f5433c, TAITO_CHARS },              // 12
2915 
2916 	{ "d69-18.bin",		0x020000, 0x04600d7b, TAITO_68KROM2_BYTESWAP },   // 13 68k Code
2917 	{ "d69-19.bin",		0x020000, 0x1484e853, TAITO_68KROM2_BYTESWAP },   // 14
2918 
2919 	{ "d69-01.bin",		0x200000, 0x9ac93ac2, TAITO_ES5505_BYTESWAP },    // 15 Ensoniq Samples
2920 	{ "d69-02.bin",		0x200000, 0xdce28dd7, TAITO_ES5505_BYTESWAP },    // 16
2921 };
2922 
2923 STD_ROM_PICK(dungeonm)
2924 STD_ROM_FN(dungeonm)
2925 
2926 struct BurnDriver BurnDrvDungeonm = {
2927 	"dungeonm", "lightbr", NULL, NULL, "1993",
2928 	"Dungeon Magic (Ver 2.1O 1994/02/18)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
2929 	NULL, NULL, NULL, NULL,
2930 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_SCRFIGHT, 0,
2931 	NULL, dungeonmRomInfo, dungeonmRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
2932 	lightbrInit, DrvExit, DrvFrame, DrvDraw224A, DrvScan, &TaitoF3PalRecalc, 0x2000,
2933 	320, 224, 4, 3
2934 };
2935 
2936 
2937 // Dungeon Magic (Ver 2.1A 1994/02/18)
2938 
2939 static struct BurnRomInfo dungeonmuRomDesc[] = {
2940 	{ "d69-20.bin",		0x080000, 0x33650fe4, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
2941 	{ "d69-13.bin",		0x080000, 0xdec2ec17, TAITO_68KROM1_BYTESWAP32 }, //  1
2942 	{ "d69-15.bin",		0x080000, 0x323e1955, TAITO_68KROM1_BYTESWAP32 }, //  2
2943 	{ "d69-21.bin",		0x080000, 0xc9d4e051, TAITO_68KROM1_BYTESWAP32 }, //  3
2944 
2945 	{ "d69-06.bin",		0x200000, 0xcb4aac81, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
2946 	{ "d69-07.bin",		0x200000, 0xb749f984, TAITO_SPRITESA_BYTESWAP },  //  5
2947 	{ "d69-09.bin",		0x100000, 0xa96c19b8, TAITO_SPRITESA_BYTESWAP },  //  6
2948 	{ "d69-10.bin",		0x100000, 0x36aa80c6, TAITO_SPRITESA_BYTESWAP },  //  7
2949 	{ "d69-08.bin",		0x200000, 0x5b68d7d8, TAITO_SPRITESA },           //  8
2950 	{ "d69-11.bin",		0x100000, 0xc11adf92, TAITO_SPRITESA },           //  9
2951 
2952 	{ "d69-03.bin",		0x200000, 0x6999c86f, TAITO_CHARS_BYTESWAP },     // 10 Layer Tiles
2953 	{ "d69-04.bin",		0x200000, 0xcc91dcb7, TAITO_CHARS_BYTESWAP },     // 11
2954 	{ "d69-05.bin",		0x200000, 0xf9f5433c, TAITO_CHARS },              // 12
2955 
2956 	{ "d69-18.bin",		0x020000, 0x04600d7b, TAITO_68KROM2_BYTESWAP },   // 13 68k Code
2957 	{ "d69-19.bin",		0x020000, 0x1484e853, TAITO_68KROM2_BYTESWAP },   // 14
2958 
2959 	{ "d69-01.bin",		0x200000, 0x9ac93ac2, TAITO_ES5505_BYTESWAP },    // 15 Ensoniq Samples
2960 	{ "d69-02.bin",		0x200000, 0xdce28dd7, TAITO_ES5505_BYTESWAP },    // 16
2961 };
2962 
2963 STD_ROM_PICK(dungeonmu)
2964 STD_ROM_FN(dungeonmu)
2965 
2966 struct BurnDriver BurnDrvDungeonmu = {
2967 	"dungeonmu", "lightbr", NULL, NULL, "1993",
2968 	"Dungeon Magic (Ver 2.1A 1994/02/18)\0", NULL, "Taito America Corporation", "Taito F3 System",
2969 	NULL, NULL, NULL, NULL,
2970 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_SCRFIGHT, 0,
2971 	NULL, dungeonmuRomInfo, dungeonmuRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
2972 	lightbrInit, DrvExit, DrvFrame, DrvDraw224A, DrvScan, &TaitoF3PalRecalc, 0x2000,
2973 	320, 224, 4, 3
2974 };
2975 
2976 
2977 // Light Bringer (Ver 2.1J 1994/02/18)
2978 
2979 static struct BurnRomInfo lightbrjRomDesc[] = {
2980 	{ "d69-20.bin",		0x080000, 0x33650fe4, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
2981 	{ "d69-13.bin",		0x080000, 0xdec2ec17, TAITO_68KROM1_BYTESWAP32 }, //  1
2982 	{ "d69-15.bin",		0x080000, 0x323e1955, TAITO_68KROM1_BYTESWAP32 }, //  2
2983 	{ "d69-14.bin",		0x080000, 0x990bf945, TAITO_68KROM1_BYTESWAP32 }, //  3
2984 
2985 	{ "d69-06.bin",		0x200000, 0xcb4aac81, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
2986 	{ "d69-07.bin",		0x200000, 0xb749f984, TAITO_SPRITESA_BYTESWAP },  //  5
2987 	{ "d69-09.bin",		0x100000, 0xa96c19b8, TAITO_SPRITESA_BYTESWAP },  //  6
2988 	{ "d69-10.bin",		0x100000, 0x36aa80c6, TAITO_SPRITESA_BYTESWAP },  //  7
2989 	{ "d69-08.bin",		0x200000, 0x5b68d7d8, TAITO_SPRITESA },           //  8
2990 	{ "d69-11.bin",		0x100000, 0xc11adf92, TAITO_SPRITESA },           //  9
2991 
2992 	{ "d69-03.bin",		0x200000, 0x6999c86f, TAITO_CHARS_BYTESWAP },     // 10 Layer Tiles
2993 	{ "d69-04.bin",		0x200000, 0xcc91dcb7, TAITO_CHARS_BYTESWAP },     // 11
2994 	{ "d69-05.bin",		0x200000, 0xf9f5433c, TAITO_CHARS },              // 12
2995 
2996 	{ "d69-18.bin",		0x020000, 0x04600d7b, TAITO_68KROM2_BYTESWAP },   // 13 68k Code
2997 	{ "d69-19.bin",		0x020000, 0x1484e853, TAITO_68KROM2_BYTESWAP },   // 14
2998 
2999 	{ "d69-01.bin",		0x200000, 0x9ac93ac2, TAITO_ES5505_BYTESWAP },    // 15 Ensoniq Samples
3000 	{ "d69-02.bin",		0x200000, 0xdce28dd7, TAITO_ES5505_BYTESWAP },    // 16
3001 };
3002 
3003 STD_ROM_PICK(lightbrj)
3004 STD_ROM_FN(lightbrj)
3005 
3006 struct BurnDriver BurnDrvLightbrj = {
3007 	"lightbrj", "lightbr", NULL, NULL, "1993",
3008 	"Light Bringer (Ver 2.1J 1994/02/18)\0", NULL, "Taito Corporation", "Taito F3 System",
3009 	NULL, NULL, NULL, NULL,
3010 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_SCRFIGHT, 0,
3011 	NULL, lightbrjRomInfo, lightbrjRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
3012 	lightbrInit, DrvExit, DrvFrame, DrvDraw224A, DrvScan, &TaitoF3PalRecalc, 0x2000,
3013 	320, 224, 4, 3
3014 };
3015 
3016 
3017 // International Cup '94 (Ver 2.2O 1994/05/26)
3018 
3019 static struct BurnRomInfo intcup94RomDesc[] = {
3020 	{ "d78-07.20",		0x020000, 0x8525d990, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
3021 	{ "d78-06.19",		0x020000, 0x42db1d41, TAITO_68KROM1_BYTESWAP32 }, //  1
3022 	{ "d78-05.18",		0x020000, 0x5f7fbbbc, TAITO_68KROM1_BYTESWAP32 }, //  2
3023 	{ "d78-11.17",		0x020000, 0xbb9d2987, TAITO_68KROM1_BYTESWAP32 }, //  3
3024 
3025 	{ "d49-01.12",		0x200000, 0x1dc89f1c, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
3026 	{ "d49-02.8",		0x200000, 0x1e4c374f, TAITO_SPRITESA_BYTESWAP },  //  5
3027 	{ "d49-06.11",		0x100000, 0x71ef4ee1, TAITO_SPRITESA_BYTESWAP },  //  6
3028 	{ "d49-07.7",		0x100000, 0xe5655b8f, TAITO_SPRITESA_BYTESWAP },  //  7
3029 	{ "d49-03.4",		0x200000, 0xcf9a8727, TAITO_SPRITESA },           //  8
3030 	{ "d49-08.3",		0x100000, 0x7d3c6536, TAITO_SPRITESA },           //  9
3031 
3032 	{ "d78-01.47",		0x080000, 0x543f8967, TAITO_CHARS_BYTESWAP },     // 10 Layer Tiles
3033 	{ "d78-02.45",		0x080000, 0xe8289394, TAITO_CHARS_BYTESWAP },     // 11
3034 	{ "d78-03.43",		0x080000, 0xa8bc36e5, TAITO_CHARS },              // 12
3035 
3036 	{ "d78-08.32",		0x020000, 0xa629d07c, TAITO_68KROM2_BYTESWAP },   // 13 68k Code
3037 	{ "d78-09.33",		0x020000, 0x1f0efe01, TAITO_68KROM2_BYTESWAP },   // 14
3038 
3039 	{ "d49-04.38",		0x200000, 0x44b365a9, TAITO_ES5505_BYTESWAP },    // 15 Ensoniq Samples
3040 	{ "d49-05.41",		0x100000, 0xed894fe1, TAITO_ES5505_BYTESWAP },    // 16
3041 };
3042 
3043 STD_ROM_PICK(intcup94)
3044 STD_ROM_FN(intcup94)
3045 
3046 struct BurnDriver BurnDrvIntcup94 = {
3047 	"intcup94", NULL, NULL, NULL, "1994",
3048 	"International Cup '94 (Ver 2.2O 1994/05/26)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
3049 	NULL, NULL, NULL, NULL,
3050 	BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_SPORTSFOOTBALL, 0,
3051 	NULL, intcup94RomInfo, intcup94RomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
3052 	cupfinalInit, DrvExit, DrvFrame, DrvDraw224A_Flipped, DrvScan, &TaitoF3PalRecalc, 0x2000,
3053 	320, 224, 4, 3
3054 };
3055 
3056 
3057 // Hat Trick Hero '94 (Ver 2.2A 1994/05/26)
3058 
3059 static struct BurnRomInfo hthero94RomDesc[] = {
3060 	{ "d78-07.20",		0x020000, 0x8525d990, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
3061 	{ "d78-06.19",		0x020000, 0x42db1d41, TAITO_68KROM1_BYTESWAP32 }, //  1
3062 	{ "d78-05.18",		0x020000, 0x5f7fbbbc, TAITO_68KROM1_BYTESWAP32 }, //  2
3063 	{ "d78-10.17",		0x020000, 0xcc9a1911, TAITO_68KROM1_BYTESWAP32 }, //  3
3064 
3065 	{ "d49-01.12",		0x200000, 0x1dc89f1c, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
3066 	{ "d49-02.8",		0x200000, 0x1e4c374f, TAITO_SPRITESA_BYTESWAP },  //  5
3067 	{ "d49-06.11",		0x100000, 0x71ef4ee1, TAITO_SPRITESA_BYTESWAP },  //  6
3068 	{ "d49-07.7",		0x100000, 0xe5655b8f, TAITO_SPRITESA_BYTESWAP },  //  7
3069 	{ "d49-03.4",		0x200000, 0xcf9a8727, TAITO_SPRITESA },           //  8
3070 	{ "d49-08.3",		0x100000, 0x7d3c6536, TAITO_SPRITESA },           //  9
3071 
3072 	{ "d78-01.47",		0x080000, 0x543f8967, TAITO_CHARS_BYTESWAP },     // 10 Layer Tiles
3073 	{ "d78-02.45",		0x080000, 0xe8289394, TAITO_CHARS_BYTESWAP },     // 11
3074 	{ "d78-03.43",		0x080000, 0xa8bc36e5, TAITO_CHARS },              // 12
3075 
3076 	{ "d78-08.32",		0x020000, 0xa629d07c, TAITO_68KROM2_BYTESWAP },   // 13 68k Code
3077 	{ "d78-09.33",		0x020000, 0x1f0efe01, TAITO_68KROM2_BYTESWAP },   // 14
3078 
3079 	{ "d49-04.38",		0x200000, 0x44b365a9, TAITO_ES5505_BYTESWAP },    // 15 Ensoniq Samples
3080 	{ "d49-05.41",		0x100000, 0xed894fe1, TAITO_ES5505_BYTESWAP },    // 16
3081 };
3082 
3083 STD_ROM_PICK(hthero94)
3084 STD_ROM_FN(hthero94)
3085 
3086 struct BurnDriver BurnDrvHthero94 = {
3087 	"hthero94", "intcup94", NULL, NULL, "1994",
3088 	"Hat Trick Hero '94 (Ver 2.2A 1994/05/26)\0", NULL, "Taito America Corporation", "Taito F3 System",
3089 	NULL, NULL, NULL, NULL,
3090 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_SPORTSFOOTBALL, 0,
3091 	NULL, hthero94RomInfo, hthero94RomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
3092 	cupfinalInit, DrvExit, DrvFrame, DrvDraw224A_Flipped, DrvScan, &TaitoF3PalRecalc, 0x2000,
3093 	320, 224, 4, 3
3094 };
3095 
3096 
3097 // Recalhorn (Ver 1.42J 1994/5/11) (Prototype)
3098 
3099 static struct BurnRomInfo recalhRomDesc[] = {
3100 	{ "rh_mpr3.bin",	0x080000, 0x65202dd4, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
3101 	{ "rh_mpr2.bin",	0x080000, 0x3eda66db, TAITO_68KROM1_BYTESWAP32 }, //  1
3102 	{ "rh_mpr1.bin",	0x080000, 0x536e74ca, TAITO_68KROM1_BYTESWAP32 }, //  2
3103 	{ "rh_mpr0.bin",	0x080000, 0x38025817, TAITO_68KROM1_BYTESWAP32 }, //  3
3104 
3105 	{ "rh_objl.bin",	0x100000, 0xc1772b55, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
3106 	{ "rh_objm.bin",	0x100000, 0xef87c0fd, TAITO_SPRITESA_BYTESWAP },  //  5
3107 
3108 	{ "rh_scrl.bin",	0x100000, 0x1e3f6b79, TAITO_CHARS_BYTESWAP },     //  6 Layer Tiles
3109 	{ "rh_scrm.bin",	0x100000, 0x37200968, TAITO_CHARS_BYTESWAP },     //  7
3110 
3111 	{ "rh_spr1.bin",	0x020000, 0x504cbc1d, TAITO_68KROM2_BYTESWAP },   //  8 68k Code
3112 	{ "rh_spr0.bin",	0x020000, 0x78fba467, TAITO_68KROM2_BYTESWAP },   //  9
3113 
3114 	{ "rh_snd0.bin",	0x200000, 0x386f5e1b, TAITO_ES5505_BYTESWAP },    // 10 Ensoniq Samples
3115 	{ "rh_snd1.bin",	0x100000, 0xed894fe1, TAITO_ES5505_BYTESWAP },    // 11
3116 };
3117 
3118 STD_ROM_PICK(recalh)
STD_ROM_FN(recalh)3119 STD_ROM_FN(recalh)
3120 
3121 static INT32 recalhInit()
3122 {
3123 	return DrvInit(NULL, f3_21bit_typeB_palette_update, 1, RECALH, 1, 0);
3124 }
3125 
3126 struct BurnDriver BurnDrvRecalh = {
3127 	"recalh", NULL, NULL, NULL, "1994",
3128 	"Recalhorn (Ver 1.42J 1994/5/11) (Prototype)\0", NULL, "Taito Corporation", "Taito F3 System",
3129 	NULL, NULL, NULL, NULL,
3130 	BDF_GAME_WORKING | BDF_PROTOTYPE, 2, HARDWARE_TAITO_MISC, GBF_PLATFORM, 0,
3131 	NULL, recalhRomInfo, recalhRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
3132 	recalhInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
3133 	320, 232, 4, 3
3134 };
3135 
3136 
3137 // Kaiser Knuckle (Ver 2.1O 1994/07/29)
3138 
3139 static struct BurnRomInfo kaiserknRomDesc[] = {
3140 	{ "d84-25.20",		0x080000, 0x2840893f, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
3141 	{ "d84-24.19",		0x080000, 0xbf20c755, TAITO_68KROM1_BYTESWAP32 }, //  1
3142 	{ "d84-23.18",		0x080000, 0x39f12a9b, TAITO_68KROM1_BYTESWAP32 }, //  2
3143 	{ "d84-29.17",		0x080000, 0x9821f17a, TAITO_68KROM1_BYTESWAP32 }, //  3
3144 
3145 	{ "d84-03.rom",		0x200000, 0xd786f552, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
3146 	{ "d84-04.rom",		0x200000, 0xd1f32b5d, TAITO_SPRITESA_BYTESWAP },  //  5
3147 	{ "d84-06.rom",		0x200000, 0xfa924dab, TAITO_SPRITESA_BYTESWAP },  //  6
3148 	{ "d84-07.rom",		0x200000, 0x54517a6b, TAITO_SPRITESA_BYTESWAP },  //  7
3149 	{ "d84-09.rom",		0x200000, 0xfaa78d98, TAITO_SPRITESA_BYTESWAP },  //  8
3150 	{ "d84-10.rom",		0x200000, 0xb84b7320, TAITO_SPRITESA_BYTESWAP },  //  9
3151 	{ "d84-19.rom",		0x080000, 0x6ddf77e5, TAITO_SPRITESA_BYTESWAP },  // 10
3152 	{ "d84-20.rom",		0x080000, 0xf85041e5, TAITO_SPRITESA_BYTESWAP },  // 11
3153 	{ "d84-05.rom",		0x200000, 0x31a3c75d, TAITO_SPRITESA },           // 12
3154 	{ "d84-08.rom",		0x200000, 0x07347bf1, TAITO_SPRITESA },           // 13
3155 	{ "d84-11.rom",		0x200000, 0xa062c1d4, TAITO_SPRITESA },           // 14
3156 	{ "d84-21.rom",		0x080000, 0x89f68b66, TAITO_SPRITESA },           // 15
3157 
3158 	{ "d84-12.rom",		0x200000, 0x66a7a9aa, TAITO_CHARS_BYTESWAP },     // 16 Layer Tiles
3159 	{ "d84-13.rom",		0x200000, 0xae125516, TAITO_CHARS_BYTESWAP },     // 17
3160 	{ "d84-16.rom",		0x100000, 0xbcff9b2d, TAITO_CHARS_BYTESWAP },     // 18
3161 	{ "d84-17.rom",		0x100000, 0x0be37cc3, TAITO_CHARS_BYTESWAP },     // 19
3162 	{ "d84-14.rom",		0x200000, 0x2b2e693e, TAITO_CHARS },              // 20
3163 	{ "d84-18.rom",		0x100000, 0xe812bcc5, TAITO_CHARS },              // 21
3164 
3165 	{ "d84-26.32",		0x040000, 0x4f5b8563, TAITO_68KROM2_BYTESWAP },   // 22 68k Code
3166 	{ "d84-27.33",		0x040000, 0xfb0cb1ba, TAITO_68KROM2_BYTESWAP },   // 23
3167 
3168 	{ "d84-01.rom",		0x200000, 0x9ad22149, TAITO_ES5505_BYTESWAP },    // 24 Ensoniq Samples
3169 	{ "d84-02.rom",		0x200000, 0x9e1827e4, TAITO_ES5505_BYTESWAP },    // 25
3170 	{ "d84-15.rom",		0x100000, 0x31ceb152, TAITO_ES5505_BYTESWAP },    // 26
3171 };
3172 
3173 STD_ROM_PICK(kaiserkn)
STD_ROM_FN(kaiserkn)3174 STD_ROM_FN(kaiserkn)
3175 
3176 static INT32 kaiserknInit()
3177 {
3178 	return DrvInit(NULL, f3_24bit_palette_update, 0, KAISERKN, 2, 0x408100);
3179 }
3180 
3181 struct BurnDriver BurnDrvKaiserkn = {
3182 	"kaiserkn", NULL, NULL, NULL, "1994",
3183 	"Kaiser Knuckle (Ver 2.1O 1994/07/29)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
3184 	NULL, NULL, NULL, NULL,
3185 	BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_VSFIGHT, 0,
3186 	NULL, kaiserknRomInfo, kaiserknRomName, NULL, NULL, NULL, NULL, KnInputInfo, KnDIPInfo,
3187 	kaiserknInit, DrvExit, DrvFrame, DrvDraw224A_Flipped, DrvScan, &TaitoF3PalRecalc, 0x2000,
3188 	320, 224, 4, 3
3189 };
3190 
3191 
3192 // Kaiser Knuckle (Ver 2.1J 1994/07/29)
3193 
3194 static struct BurnRomInfo kaiserknjRomDesc[] = {
3195 	{ "d84-25.20",		0x080000, 0x2840893f, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
3196 	{ "d84-24.19",		0x080000, 0xbf20c755, TAITO_68KROM1_BYTESWAP32 }, //  1
3197 	{ "d84-23.18",		0x080000, 0x39f12a9b, TAITO_68KROM1_BYTESWAP32 }, //  2
3198 	{ "d84-22.17",		0x080000, 0x762f9056, TAITO_68KROM1_BYTESWAP32 }, //  3
3199 
3200 	{ "d84-03.rom",		0x200000, 0xd786f552, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
3201 	{ "d84-04.rom",		0x200000, 0xd1f32b5d, TAITO_SPRITESA_BYTESWAP },  //  5
3202 	{ "d84-06.rom",		0x200000, 0xfa924dab, TAITO_SPRITESA_BYTESWAP },  //  6
3203 	{ "d84-07.rom",		0x200000, 0x54517a6b, TAITO_SPRITESA_BYTESWAP },  //  7
3204 	{ "d84-09.rom",		0x200000, 0xfaa78d98, TAITO_SPRITESA_BYTESWAP },  //  8
3205 	{ "d84-10.rom",		0x200000, 0xb84b7320, TAITO_SPRITESA_BYTESWAP },  //  9
3206 	{ "d84-19.rom",		0x080000, 0x6ddf77e5, TAITO_SPRITESA_BYTESWAP },  // 10
3207 	{ "d84-20.rom",		0x080000, 0xf85041e5, TAITO_SPRITESA_BYTESWAP },  // 11
3208 	{ "d84-05.rom",		0x200000, 0x31a3c75d, TAITO_SPRITESA },           // 12
3209 	{ "d84-08.rom",		0x200000, 0x07347bf1, TAITO_SPRITESA },           // 13
3210 	{ "d84-11.rom",		0x200000, 0xa062c1d4, TAITO_SPRITESA },           // 14
3211 	{ "d84-21.rom",		0x080000, 0x89f68b66, TAITO_SPRITESA },           // 15
3212 
3213 	{ "d84-12.rom",		0x200000, 0x66a7a9aa, TAITO_CHARS_BYTESWAP },     // 16 Layer Tiles
3214 	{ "d84-13.rom",		0x200000, 0xae125516, TAITO_CHARS_BYTESWAP },     // 17
3215 	{ "d84-16.rom",		0x100000, 0xbcff9b2d, TAITO_CHARS_BYTESWAP },     // 18
3216 	{ "d84-17.rom",		0x100000, 0x0be37cc3, TAITO_CHARS_BYTESWAP },     // 19
3217 	{ "d84-14.rom",		0x200000, 0x2b2e693e, TAITO_CHARS },              // 20
3218 	{ "d84-18.rom",		0x100000, 0xe812bcc5, TAITO_CHARS },              // 21
3219 
3220 	{ "d84-26.32",		0x040000, 0x4f5b8563, TAITO_68KROM2_BYTESWAP },   // 22 68k Code
3221 	{ "d84-27.33",		0x040000, 0xfb0cb1ba, TAITO_68KROM2_BYTESWAP },   // 23
3222 
3223 	{ "d84-01.rom",		0x200000, 0x9ad22149, TAITO_ES5505_BYTESWAP },    // 24 Ensoniq Samples
3224 	{ "d84-02.rom",		0x200000, 0x9e1827e4, TAITO_ES5505_BYTESWAP },    // 25
3225 	{ "d84-15.rom",		0x100000, 0x31ceb152, TAITO_ES5505_BYTESWAP },    // 26
3226 };
3227 
3228 STD_ROM_PICK(kaiserknj)
3229 STD_ROM_FN(kaiserknj)
3230 
3231 struct BurnDriver BurnDrvKaiserknj = {
3232 	"kaiserknj", "kaiserkn", NULL, NULL, "1994",
3233 	"Kaiser Knuckle (Ver 2.1J 1994/07/29)\0", NULL, "Taito Corporation", "Taito F3 System",
3234 	NULL, NULL, NULL, NULL,
3235 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_VSFIGHT, 0,
3236 	NULL, kaiserknjRomInfo, kaiserknjRomName, NULL, NULL, NULL, NULL, KnInputInfo, KnDIPInfo,
3237 	kaiserknInit, DrvExit, DrvFrame, DrvDraw224A_Flipped, DrvScan, &TaitoF3PalRecalc, 0x2000,
3238 	320, 224, 4, 3
3239 };
3240 
3241 
3242 // Global Champion (Ver 2.1A 1994/07/29)
3243 
3244 static struct BurnRomInfo gblchmpRomDesc[] = {
3245 	{ "d84-25.20",		0x080000, 0x2840893f, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
3246 	{ "d84-24.19",		0x080000, 0xbf20c755, TAITO_68KROM1_BYTESWAP32 }, //  1
3247 	{ "d84-23.18",		0x080000, 0x39f12a9b, TAITO_68KROM1_BYTESWAP32 }, //  2
3248 	{ "d84-28.17",		0x080000, 0xef26c1ec, TAITO_68KROM1_BYTESWAP32 }, //  3
3249 
3250 	{ "d84-03.rom",		0x200000, 0xd786f552, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
3251 	{ "d84-04.rom",		0x200000, 0xd1f32b5d, TAITO_SPRITESA_BYTESWAP },  //  5
3252 	{ "d84-06.rom",		0x200000, 0xfa924dab, TAITO_SPRITESA_BYTESWAP },  //  6
3253 	{ "d84-07.rom",		0x200000, 0x54517a6b, TAITO_SPRITESA_BYTESWAP },  //  7
3254 	{ "d84-09.rom",		0x200000, 0xfaa78d98, TAITO_SPRITESA_BYTESWAP },  //  8
3255 	{ "d84-10.rom",		0x200000, 0xb84b7320, TAITO_SPRITESA_BYTESWAP },  //  9
3256 	{ "d84-19.rom",		0x080000, 0x6ddf77e5, TAITO_SPRITESA_BYTESWAP },  // 10
3257 	{ "d84-20.rom",		0x080000, 0xf85041e5, TAITO_SPRITESA_BYTESWAP },  // 11
3258 	{ "d84-05.rom",		0x200000, 0x31a3c75d, TAITO_SPRITESA },           // 12
3259 	{ "d84-08.rom",		0x200000, 0x07347bf1, TAITO_SPRITESA },           // 13
3260 	{ "d84-11.rom",		0x200000, 0xa062c1d4, TAITO_SPRITESA },           // 14
3261 	{ "d84-21.rom",		0x080000, 0x89f68b66, TAITO_SPRITESA },           // 15
3262 
3263 	{ "d84-12.rom",		0x200000, 0x66a7a9aa, TAITO_CHARS_BYTESWAP },     // 16 Layer Tiles
3264 	{ "d84-13.rom",		0x200000, 0xae125516, TAITO_CHARS_BYTESWAP },     // 17
3265 	{ "d84-16.rom",		0x100000, 0xbcff9b2d, TAITO_CHARS_BYTESWAP },     // 18
3266 	{ "d84-17.rom",		0x100000, 0x0be37cc3, TAITO_CHARS_BYTESWAP },     // 19
3267 	{ "d84-14.rom",		0x200000, 0x2b2e693e, TAITO_CHARS },              // 20
3268 	{ "d84-18.rom",		0x100000, 0xe812bcc5, TAITO_CHARS },              // 21
3269 
3270 	{ "d84-26.32",		0x040000, 0x4f5b8563, TAITO_68KROM2_BYTESWAP },   // 22 68k Code
3271 	{ "d84-27.33",		0x040000, 0xfb0cb1ba, TAITO_68KROM2_BYTESWAP },   // 23
3272 
3273 	{ "d84-01.rom",		0x200000, 0x9ad22149, TAITO_ES5505_BYTESWAP },    // 24 Ensoniq Samples
3274 	{ "d84-02.rom",		0x200000, 0x9e1827e4, TAITO_ES5505_BYTESWAP },    // 25
3275 	{ "d84-15.rom",		0x100000, 0x31ceb152, TAITO_ES5505_BYTESWAP },    // 26
3276 };
3277 
3278 STD_ROM_PICK(gblchmp)
3279 STD_ROM_FN(gblchmp)
3280 
3281 struct BurnDriver BurnDrvGblchmp = {
3282 	"gblchmp", "kaiserkn", NULL, NULL, "1994",
3283 	"Global Champion (Ver 2.1A 1994/07/29)\0", NULL, "Taito America Corporation", "Taito F3 System",
3284 	NULL, NULL, NULL, NULL,
3285 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_VSFIGHT, 0,
3286 	NULL, gblchmpRomInfo, gblchmpRomName, NULL, NULL, NULL, NULL, KnInputInfo, KnDIPInfo,
3287 	kaiserknInit, DrvExit, DrvFrame, DrvDraw224A_Flipped, DrvScan, &TaitoF3PalRecalc, 0x2000,
3288 	320, 224, 4, 3
3289 };
3290 
3291 
3292 // Dan-Ku-Ga (Ver 0.0J 1994/12/13) (Prototype)
3293 
3294 static struct BurnRomInfo dankugaRomDesc[] = {
3295 	{ "dkg_mpr3.20",	0x080000, 0xee1531ca, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
3296 	{ "dkg_mpr2.19",	0x080000, 0x18a4748b, TAITO_68KROM1_BYTESWAP32 }, //  1
3297 	{ "dkg_mpr1.18",	0x080000, 0x97566f69, TAITO_68KROM1_BYTESWAP32 }, //  2
3298 	{ "dkg_mpr0.17",	0x080000, 0xad6ada07, TAITO_68KROM1_BYTESWAP32 }, //  3
3299 
3300 	{ "d84-03.rom",		0x200000, 0xd786f552, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
3301 	{ "d84-04.rom",		0x200000, 0xd1f32b5d, TAITO_SPRITESA_BYTESWAP },  //  5
3302 	{ "d84-06.rom",		0x200000, 0xfa924dab, TAITO_SPRITESA_BYTESWAP },  //  6
3303 	{ "d84-07.rom",		0x200000, 0x54517a6b, TAITO_SPRITESA_BYTESWAP },  //  7
3304 	{ "d84-09.rom",		0x200000, 0xfaa78d98, TAITO_SPRITESA_BYTESWAP },  //  8
3305 	{ "d84-10.rom",		0x200000, 0xb84b7320, TAITO_SPRITESA_BYTESWAP },  //  9
3306 	{ "d84-19.rom",		0x080000, 0x6ddf77e5, TAITO_SPRITESA_BYTESWAP },  // 10
3307 	{ "d84-20.rom",		0x080000, 0xf85041e5, TAITO_SPRITESA_BYTESWAP },  // 11
3308 	{ "d84-05.rom",		0x200000, 0x31a3c75d, TAITO_SPRITESA },           // 12
3309 	{ "d84-08.rom",		0x200000, 0x07347bf1, TAITO_SPRITESA },           // 13
3310 	{ "d84-11.rom",		0x200000, 0xa062c1d4, TAITO_SPRITESA },           // 14
3311 	{ "d84-21.rom",		0x080000, 0x89f68b66, TAITO_SPRITESA },           // 15
3312 
3313 	{ "d84-12.rom",		0x200000, 0x66a7a9aa, TAITO_CHARS_BYTESWAP },     // 16 Layer Tiles
3314 	{ "d84-13.rom",		0x200000, 0xae125516, TAITO_CHARS_BYTESWAP },     // 17
3315 	{ "d84-16.rom",		0x100000, 0xbcff9b2d, TAITO_CHARS_BYTESWAP },     // 18
3316 	{ "d84-17.rom",		0x100000, 0x0be37cc3, TAITO_CHARS_BYTESWAP },     // 19
3317 	{ "d84-14.rom",		0x200000, 0x2b2e693e, TAITO_CHARS },              // 20
3318 	{ "d84-18.rom",		0x100000, 0xe812bcc5, TAITO_CHARS },              // 21
3319 
3320 	{ "d84-26.32",		0x040000, 0x4f5b8563, TAITO_68KROM2_BYTESWAP },   // 22 68k Code
3321 	{ "d84-27.33",		0x040000, 0xfb0cb1ba, TAITO_68KROM2_BYTESWAP },   // 23
3322 
3323 	{ "d84-01.rom",		0x200000, 0x9ad22149, TAITO_ES5505_BYTESWAP },    // 24 Ensoniq Samples
3324 	{ "d84-02.rom",		0x200000, 0x9e1827e4, TAITO_ES5505_BYTESWAP },    // 25
3325 	{ "d84-15.rom",		0x100000, 0x31ceb152, TAITO_ES5505_BYTESWAP },    // 26
3326 };
3327 
3328 STD_ROM_PICK(dankuga)
3329 STD_ROM_FN(dankuga)
3330 
3331 struct BurnDriver BurnDrvDankuga = {
3332 	"dankuga", NULL, NULL, NULL, "1994",
3333 	"Dan-Ku-Ga (Ver 0.0J 1994/12/13) (Prototype)\0", "Missing graphics are normal in this prototype", "Taito Corporation", "Taito F3 System",
3334 	NULL, NULL, NULL, NULL,
3335 	BDF_GAME_WORKING | BDF_PROTOTYPE, 2, HARDWARE_TAITO_MISC, GBF_VSFIGHT, 0,
3336 	NULL, dankugaRomInfo, dankugaRomName, NULL, NULL, NULL, NULL, KnInputInfo, KnDIPInfo,
3337 	kaiserknInit, DrvExit, DrvFrame, DrvDraw224A_Flipped, DrvScan, &TaitoF3PalRecalc, 0x2000,
3338 	320, 224, 4, 3
3339 };
3340 
3341 
3342 // Darius Gaiden - Silver Hawk (Ver 2.5O 1994/09/19)
3343 
3344 static struct BurnRomInfo dariusgRomDesc[] = {
3345 	{ "d87-12.bin",		0x080000, 0xde78f328, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
3346 	{ "d87-11.bin",		0x080000, 0xf7bed18e, TAITO_68KROM1_BYTESWAP32 }, //  1
3347 	{ "d87-10.bin",		0x080000, 0x4149f66f, TAITO_68KROM1_BYTESWAP32 }, //  2
3348 	{ "d87-16.bin",		0x080000, 0x8f7e5901, TAITO_68KROM1_BYTESWAP32 }, //  3
3349 
3350 	{ "d87-03.bin",		0x200000, 0x4be1666e, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
3351 	{ "d87-04.bin",		0x200000, 0x2616002c, TAITO_SPRITESA_BYTESWAP },  //  5
3352 	{ "d87-05.bin",		0x200000, 0x4e5891a9, TAITO_SPRITESA },           //  6
3353 
3354 	{ "d87-06.bin",		0x200000, 0x3b97a07c, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
3355 	{ "d87-17.bin",		0x200000, 0xe601d63e, TAITO_CHARS_BYTESWAP },     //  8
3356 	{ "d87-08.bin",		0x200000, 0x76d23602, TAITO_CHARS },              //  9
3357 
3358 	{ "d87-13.bin",		0x040000, 0x15b1fff4, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
3359 	{ "d87-14.bin",		0x040000, 0xeecda29a, TAITO_68KROM2_BYTESWAP },   // 11
3360 
3361 	{ "d87-01.bin",		0x200000, 0x3848a110, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
3362 	{ "d87-02.bin",		0x200000, 0x9250abae, TAITO_ES5505_BYTESWAP },    // 13
3363 };
3364 
3365 STD_ROM_PICK(dariusg)
STD_ROM_FN(dariusg)3366 STD_ROM_FN(dariusg)
3367 
3368 static INT32 dariusgInit()
3369 {
3370 	return DrvInit(NULL, f3_24bit_palette_update, 0, DARIUSG, 1, 0x406baa);
3371 }
3372 
3373 struct BurnDriver BurnDrvDariusg = {
3374 	"dariusg", NULL, NULL, NULL, "1994",
3375 	"Darius Gaiden - Silver Hawk (Ver 2.5O 1994/09/19)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
3376 	NULL, NULL, NULL, NULL,
3377 	BDF_GAME_WORKING | BDF_HISCORE_SUPPORTED, 2, HARDWARE_TAITO_MISC, GBF_HORSHOOT, 0,
3378 	NULL, dariusgRomInfo, dariusgRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
3379 	dariusgInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
3380 	320, 232, 4, 3
3381 };
3382 
3383 
3384 // Darius Gaiden - Silver Hawk (Ver 2.5J 1994/09/19)
3385 
3386 static struct BurnRomInfo dariusgjRomDesc[] = {
3387 	{ "d87-12.bin",		0x080000, 0xde78f328, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
3388 	{ "d87-11.bin",		0x080000, 0xf7bed18e, TAITO_68KROM1_BYTESWAP32 }, //  1
3389 	{ "d87-10.bin",		0x080000, 0x4149f66f, TAITO_68KROM1_BYTESWAP32 }, //  2
3390 	{ "d87-09.bin",		0x080000, 0x6170382d, TAITO_68KROM1_BYTESWAP32 }, //  3
3391 
3392 	{ "d87-03.bin",		0x200000, 0x4be1666e, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
3393 	{ "d87-04.bin",		0x200000, 0x2616002c, TAITO_SPRITESA_BYTESWAP },  //  5
3394 	{ "d87-05.bin",		0x200000, 0x4e5891a9, TAITO_SPRITESA },           //  6
3395 
3396 	{ "d87-06.bin",		0x200000, 0x3b97a07c, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
3397 	{ "d87-17.bin",		0x200000, 0xe601d63e, TAITO_CHARS_BYTESWAP },     //  8
3398 	{ "d87-08.bin",		0x200000, 0x76d23602, TAITO_CHARS },              //  9
3399 
3400 	{ "d87-13.bin",		0x040000, 0x15b1fff4, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
3401 	{ "d87-14.bin",		0x040000, 0xeecda29a, TAITO_68KROM2_BYTESWAP },   // 11
3402 
3403 	{ "d87-01.bin",		0x200000, 0x3848a110, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
3404 	{ "d87-02.bin",		0x200000, 0x9250abae, TAITO_ES5505_BYTESWAP },    // 13
3405 };
3406 
3407 STD_ROM_PICK(dariusgj)
3408 STD_ROM_FN(dariusgj)
3409 
3410 struct BurnDriver BurnDrvDariusgj = {
3411 	"dariusgj", "dariusg", NULL, NULL, "1994",
3412 	"Darius Gaiden - Silver Hawk (Ver 2.5J 1994/09/19)\0", NULL, "Taito Corporation", "Taito F3 System",
3413 	NULL, NULL, NULL, NULL,
3414 	BDF_GAME_WORKING | BDF_CLONE | BDF_HISCORE_SUPPORTED, 2, HARDWARE_TAITO_MISC, GBF_HORSHOOT, 0,
3415 	NULL, dariusgjRomInfo, dariusgjRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
3416 	dariusgInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
3417 	320, 232, 4, 3
3418 };
3419 
3420 
3421 // Darius Gaiden - Silver Hawk (Ver 2.5A 1994/09/19)
3422 
3423 static struct BurnRomInfo dariusguRomDesc[] = {
3424 	{ "d87-12.bin",		0x080000, 0xde78f328, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
3425 	{ "d87-11.bin",		0x080000, 0xf7bed18e, TAITO_68KROM1_BYTESWAP32 }, //  1
3426 	{ "d87-10.bin",		0x080000, 0x4149f66f, TAITO_68KROM1_BYTESWAP32 }, //  2
3427 	{ "d87-15.bin",		0x080000, 0xf8796997, TAITO_68KROM1_BYTESWAP32 }, //  3
3428 
3429 	{ "d87-03.bin",		0x200000, 0x4be1666e, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
3430 	{ "d87-04.bin",		0x200000, 0x2616002c, TAITO_SPRITESA_BYTESWAP },  //  5
3431 	{ "d87-05.bin",		0x200000, 0x4e5891a9, TAITO_SPRITESA },           //  6
3432 
3433 	{ "d87-06.bin",		0x200000, 0x3b97a07c, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
3434 	{ "d87-17.bin",		0x200000, 0xe601d63e, TAITO_CHARS_BYTESWAP },     //  8
3435 	{ "d87-08.bin",		0x200000, 0x76d23602, TAITO_CHARS },              //  9
3436 
3437 	{ "d87-13.bin",		0x040000, 0x15b1fff4, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
3438 	{ "d87-14.bin",		0x040000, 0xeecda29a, TAITO_68KROM2_BYTESWAP },   // 11
3439 
3440 	{ "d87-01.bin",		0x200000, 0x3848a110, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
3441 	{ "d87-02.bin",		0x200000, 0x9250abae, TAITO_ES5505_BYTESWAP },    // 13
3442 };
3443 
3444 STD_ROM_PICK(dariusgu)
3445 STD_ROM_FN(dariusgu)
3446 
3447 struct BurnDriver BurnDrvDariusgu = {
3448 	"dariusgu", "dariusg", NULL, NULL, "1994",
3449 	"Darius Gaiden - Silver Hawk (Ver 2.5A 1994/09/19)\0", NULL, "Taito America Corporation", "Taito F3 System",
3450 	NULL, NULL, NULL, NULL,
3451 	BDF_GAME_WORKING | BDF_CLONE | BDF_HISCORE_SUPPORTED, 2, HARDWARE_TAITO_MISC, GBF_HORSHOOT, 0,
3452 	NULL, dariusguRomInfo, dariusguRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
3453 	dariusgInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
3454 	320, 232, 4, 3
3455 };
3456 
3457 
3458 // Darius Gaiden - Silver Hawk Extra Version (Ver 2.7J 1995/03/06) (Official Hack)
3459 
3460 static struct BurnRomInfo dariusgxRomDesc[] = {
3461 	{ "dge_mpr3.bin",	0x080000, 0x1c1e24a7, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
3462 	{ "dge_mpr2.bin",	0x080000, 0x7be23e23, TAITO_68KROM1_BYTESWAP32 }, //  1
3463 	{ "dge_mpr1.bin",	0x080000, 0xbc030f6f, TAITO_68KROM1_BYTESWAP32 }, //  2
3464 	{ "dge_mpr0.bin",	0x080000, 0xc5bd135c, TAITO_68KROM1_BYTESWAP32 }, //  3
3465 
3466 	{ "d87-03.bin",		0x200000, 0x4be1666e, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
3467 	{ "d87-04.bin",		0x200000, 0x2616002c, TAITO_SPRITESA_BYTESWAP },  //  5
3468 	{ "d87-05.bin",		0x200000, 0x4e5891a9, TAITO_SPRITESA },           //  6
3469 
3470 	{ "d87-06.bin",		0x200000, 0x3b97a07c, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
3471 	{ "d87-17.bin",		0x200000, 0xe601d63e, TAITO_CHARS_BYTESWAP },     //  8
3472 	{ "d87-08.bin",		0x200000, 0x76d23602, TAITO_CHARS },              //  9
3473 
3474 	{ "d87-13.bin",		0x040000, 0x15b1fff4, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
3475 	{ "d87-14.bin",		0x040000, 0xeecda29a, TAITO_68KROM2_BYTESWAP },   // 11
3476 
3477 	{ "d87-01.bin",		0x200000, 0x3848a110, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
3478 	{ "d87-02.bin",		0x200000, 0x9250abae, TAITO_ES5505_BYTESWAP },    // 13
3479 };
3480 
3481 STD_ROM_PICK(dariusgx)
3482 STD_ROM_FN(dariusgx)
3483 
3484 struct BurnDriver BurnDrvDariusgx = {
3485 	"dariusgx", NULL, NULL, NULL, "1994",
3486 	"Darius Gaiden - Silver Hawk Extra Version (Ver 2.7J 1995/03/06) (Official Hack)\0", NULL, "Taito Corporation", "Taito F3 System",
3487 	NULL, NULL, NULL, NULL,
3488 	BDF_GAME_WORKING | BDF_HISCORE_SUPPORTED, 2, HARDWARE_TAITO_MISC, GBF_HORSHOOT, 0,
3489 	NULL, dariusgxRomInfo, dariusgxRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
3490 	dariusgInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
3491 	320, 232, 4, 3
3492 };
3493 
3494 
3495 // Bubble Bobble II (Ver 2.6O 1994/12/16)
3496 
3497 static struct BurnRomInfo bublbob2RomDesc[] = {
3498 	{ "d90-21.ic20",	0x040000, 0x2a2b771a, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
3499 	{ "d90-20.ic19",	0x040000, 0xf01f63b6, TAITO_68KROM1_BYTESWAP32 }, //  1
3500 	{ "d90-19.ic18",	0x040000, 0x86eef19a, TAITO_68KROM1_BYTESWAP32 }, //  2
3501 	{ "d90-18.ic17",	0x040000, 0xf5b8cdce, TAITO_68KROM1_BYTESWAP32 }, //  3
3502 
3503 	{ "d90-03",		0x100000, 0x6fa894a1, TAITO_SPRITESA_BYTESWAP },      //  4 Sprites
3504 	{ "d90-02",		0x100000, 0x5ab04ca2, TAITO_SPRITESA_BYTESWAP },      //  5
3505 	{ "d90-01",		0x100000, 0x8aedb9e5, TAITO_SPRITESA },               //  6
3506 
3507 	{ "d90-08",		0x100000, 0x25a4fb2c, TAITO_CHARS_BYTESWAP },         //  7 Layer Tiles
3508 	{ "d90-07",		0x100000, 0xb436b42d, TAITO_CHARS_BYTESWAP },         //  8
3509 	{ "d90-06",		0x100000, 0x166a72b8, TAITO_CHARS },                  //  9
3510 
3511 	{ "d90-13.ic32",0x040000, 0x6762bd90, TAITO_68KROM2_BYTESWAP },       // 10 68k Code
3512 	{ "d90-14.ic33",0x040000, 0x8e33357e, TAITO_68KROM2_BYTESWAP },       // 11
3513 
3514 	{ "d90-04",		0x200000, 0xfeee5fda, TAITO_ES5505_BYTESWAP },        // 12 Ensoniq Samples
3515 	{ "d90-05",		0x200000, 0xc192331f, TAITO_ES5505_BYTESWAP },        // 13
3516 
3517 	{ "d77-14_palce16v8q-15.ic21.bin", 0x117, 0x2c798a1c, BRF_OPT },	  // 14 plds
3518 	{ "d77-12_palce16v8q-15.ic48.bin", 0x117, 0xb1cc6195, BRF_OPT },	  // 15
3519 	{ "d77-11_palce16v8q-15.ic37.bin", 0x117, 0xa733f0de, BRF_OPT },	  // 16
3520 };
3521 
3522 STD_ROM_PICK(bublbob2)
STD_ROM_FN(bublbob2)3523 STD_ROM_FN(bublbob2)
3524 
3525 static INT32 bublbob2Init()
3526 {
3527 	return DrvInit(NULL, f3_24bit_palette_update, 1, BUBSYMPH, 1, 0x41f3fc);
3528 }
3529 
3530 struct BurnDriver BurnDrvBublbob2 = {
3531 	"bublbob2", NULL, NULL, NULL, "1994",
3532 	"Bubble Bobble II (Ver 2.6O 1994/12/16)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
3533 	NULL, NULL, NULL, NULL,
3534 	BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_PLATFORM, 0,
3535 	NULL, bublbob2RomInfo, bublbob2RomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
3536 	bublbob2Init, DrvExit, DrvFrame, DrvDraw224A, DrvScan, &TaitoF3PalRecalc, 0x2000,
3537 	320, 224, 4, 3
3538 };
3539 
3540 
3541 // Bubble Bobble II (Ver 2.5O 1994/10/05)
3542 
3543 static struct BurnRomInfo bublbob2oRomDesc[] = {
3544 	{ "d90-12",		0x040000, 0x9e523996, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
3545 	{ "d90-11",		0x040000, 0xedfdbb7f, TAITO_68KROM1_BYTESWAP32 }, //  1
3546 	{ "d90-10",		0x040000, 0x8e957d3d, TAITO_68KROM1_BYTESWAP32 }, //  2
3547 	{ "d90-17",		0x040000, 0x711f1894, TAITO_68KROM1_BYTESWAP32 }, //  3
3548 
3549 	{ "d90-03",		0x100000, 0x6fa894a1, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
3550 	{ "d90-02",		0x100000, 0x5ab04ca2, TAITO_SPRITESA_BYTESWAP },  //  5
3551 	{ "d90-01",		0x100000, 0x8aedb9e5, TAITO_SPRITESA },           //  6
3552 
3553 	{ "d90-08",		0x100000, 0x25a4fb2c, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
3554 	{ "d90-07",		0x100000, 0xb436b42d, TAITO_CHARS_BYTESWAP },     //  8
3555 	{ "d90-06",		0x100000, 0x166a72b8, TAITO_CHARS },              //  9
3556 
3557 	{ "d90-13.ic32",0x040000, 0x6762bd90, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
3558 	{ "d90-14.ic33",0x040000, 0x8e33357e, TAITO_68KROM2_BYTESWAP },   // 11
3559 
3560 	{ "d90-04",		0x200000, 0xfeee5fda, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
3561 	{ "d90-05",		0x200000, 0xc192331f, TAITO_ES5505_BYTESWAP },    // 13
3562 };
3563 
3564 STD_ROM_PICK(bublbob2o)
3565 STD_ROM_FN(bublbob2o)
3566 
3567 struct BurnDriver BurnDrvBublbob2o = {
3568 	"bublbob2o", "bublbob2", NULL, NULL, "1994",
3569 	"Bubble Bobble II (Ver 2.5O 1994/10/05)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
3570 	NULL, NULL, NULL, NULL,
3571 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PLATFORM, 0,
3572 	NULL, bublbob2oRomInfo, bublbob2oRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
3573 	bublbob2Init, DrvExit, DrvFrame, DrvDraw224A, DrvScan, &TaitoF3PalRecalc, 0x2000,
3574 	320, 224, 4, 3
3575 };
3576 
3577 
3578 // Bubble Symphony (Ver 2.5O 1994/10/05)
3579 
3580 static struct BurnRomInfo bubsympheRomDesc[] = {
3581 	{ "d90-12",		0x040000, 0x9e523996, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
3582 	{ "d90-11",		0x040000, 0xedfdbb7f, TAITO_68KROM1_BYTESWAP32 }, //  1
3583 	{ "d90-10",		0x040000, 0x8e957d3d, TAITO_68KROM1_BYTESWAP32 }, //  2
3584 	{ "d90-16",		0x040000, 0xd12ef19b, TAITO_68KROM1_BYTESWAP32 }, //  3
3585 
3586 	{ "d90-03",		0x100000, 0x6fa894a1, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
3587 	{ "d90-02",		0x100000, 0x5ab04ca2, TAITO_SPRITESA_BYTESWAP },  //  5
3588 	{ "d90-01",		0x100000, 0x8aedb9e5, TAITO_SPRITESA },           //  6
3589 
3590 	{ "d90-08",		0x100000, 0x25a4fb2c, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
3591 	{ "d90-07",		0x100000, 0xb436b42d, TAITO_CHARS_BYTESWAP },     //  8
3592 	{ "d90-06",		0x100000, 0x166a72b8, TAITO_CHARS },              //  9
3593 
3594 	{ "d90-13.ic32",0x040000, 0x6762bd90, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
3595 	{ "d90-14.ic33",0x040000, 0x8e33357e, TAITO_68KROM2_BYTESWAP },   // 11
3596 
3597 	{ "d90-04",		0x200000, 0xfeee5fda, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
3598 	{ "d90-05",		0x200000, 0xc192331f, TAITO_ES5505_BYTESWAP },    // 13
3599 };
3600 
3601 STD_ROM_PICK(bubsymphe)
3602 STD_ROM_FN(bubsymphe)
3603 
3604 struct BurnDriver BurnDrvBubsymphe = {
3605 	"bubsymphe", "bublbob2", NULL, NULL, "1994",
3606 	"Bubble Symphony (Ver 2.5O 1994/10/05)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
3607 	NULL, NULL, NULL, NULL,
3608 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PLATFORM, 0,
3609 	NULL, bubsympheRomInfo, bubsympheRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
3610 	bublbob2Init, DrvExit, DrvFrame, DrvDraw224A, DrvScan, &TaitoF3PalRecalc, 0x2000,
3611 	320, 224, 4, 3
3612 };
3613 
3614 
3615 // Bubble Symphony (Ver 2.5J 1994/10/05)
3616 
3617 static struct BurnRomInfo bubsymphjRomDesc[] = {
3618 	{ "d90-12",		0x040000, 0x9e523996, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
3619 	{ "d90-11",		0x040000, 0xedfdbb7f, TAITO_68KROM1_BYTESWAP32 }, //  1
3620 	{ "d90-10",		0x040000, 0x8e957d3d, TAITO_68KROM1_BYTESWAP32 }, //  2
3621 	{ "d90-09",		0x040000, 0x3f2090b7, TAITO_68KROM1_BYTESWAP32 }, //  3
3622 
3623 	{ "d90-03",		0x100000, 0x6fa894a1, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
3624 	{ "d90-02",		0x100000, 0x5ab04ca2, TAITO_SPRITESA_BYTESWAP },  //  5
3625 	{ "d90-01",		0x100000, 0x8aedb9e5, TAITO_SPRITESA },           //  6
3626 
3627 	{ "d90-08",		0x100000, 0x25a4fb2c, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
3628 	{ "d90-07",		0x100000, 0xb436b42d, TAITO_CHARS_BYTESWAP },     //  8
3629 	{ "d90-06",		0x100000, 0x166a72b8, TAITO_CHARS },              //  9
3630 
3631 	{ "d90-13.ic32",0x040000, 0x6762bd90, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
3632 	{ "d90-14.ic33",0x040000, 0x8e33357e, TAITO_68KROM2_BYTESWAP },   // 11
3633 
3634 	{ "d90-04",		0x200000, 0xfeee5fda, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
3635 	{ "d90-05",		0x200000, 0xc192331f, TAITO_ES5505_BYTESWAP },    // 13
3636 
3637 	{ "pal16l8a-d77-09.bin",	0x000104, 0xb371532b, BRF_OPT },      // 14 plds
3638 	{ "pal16l8a-d77-10.bin",	0x000104, 0x42f59227, BRF_OPT }, 	  // 15
3639 	{ "palce16v8q-d77-11.bin",	0x000117, 0xeacc294e, BRF_OPT }, 	  // 16
3640 	{ "palce16v8q-d77-12.bin",	0x000117, 0xe9920cfe, BRF_OPT }, 	  // 17
3641 	{ "palce16v8q-d77-14.bin",	0x000117, 0x7427e777, BRF_OPT }, 	  // 18
3642 };
3643 
3644 STD_ROM_PICK(bubsymphj)
3645 STD_ROM_FN(bubsymphj)
3646 
3647 struct BurnDriver BurnDrvBubsymphj = {
3648 	"bubsymphj", "bublbob2", NULL, NULL, "1994",
3649 	"Bubble Symphony (Ver 2.5J 1994/10/05)\0", NULL, "Taito Corporation", "Taito F3 System",
3650 	NULL, NULL, NULL, NULL,
3651 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PLATFORM, 0,
3652 	NULL, bubsymphjRomInfo, bubsymphjRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
3653 	bublbob2Init, DrvExit, DrvFrame, DrvDraw224A, DrvScan, &TaitoF3PalRecalc, 0x2000,
3654 	320, 224, 4, 3
3655 };
3656 
3657 
3658 // Bubble Bobble II (Ver 0.0J 1993/12/13, prototype)
3659 
3660 static struct BurnRomInfo bublbob2pRomDesc[] = {
3661 	{ "soft-3-8c9b.ic60",		0x40000, 0x15d0594e, TAITO_68KROM1_BYTESWAP32 }, 	//  0 68ec20 Code
3662 	{ "soft-2-0587.ic61",		0x40000, 0xd1a5231f, TAITO_68KROM1_BYTESWAP32 }, 	//  1
3663 	{ "soft-1-9a9c.ic62",		0x40000, 0xc11a4d26, TAITO_68KROM1_BYTESWAP32 }, 	//  2
3664 	{ "soft-0-a523.ic63",		0x40000, 0x58131f9e, TAITO_68KROM1_BYTESWAP32 }, 	//  3
3665 
3666 	{ "cq80-obj-0l-c166.ic8",	0x80000, 0x9bff223b, TAITO_SPRITESA_BYTESWAP },  	//  4 Sprites
3667 	{ "cq80-obj-0m-24f4.ic30",	0x80000, 0xee71f643, TAITO_SPRITESA_BYTESWAP },  	//  5
3668 	{ "cq80-obj-0h-990d.ic32",	0x80000, 0x4d3a78e0, TAITO_SPRITESA },           	//  6
3669 
3670 	{ "cq80-scr0-5ba4.ic7",		0x80000, 0x044dc38b, TAITO_CHARS_BYTESWAP32 },   	//  7 Layer Tiles
3671 	{ "cq80-scr2-cc11.ic5",		0x80000, 0xb81aa2c7, TAITO_CHARS_BYTESWAP32 },   	//  8
3672 	{ "cq80-scr1-a5f3.ic6",		0x80000, 0x3cf3a3ba, TAITO_CHARS_BYTESWAP32 },   	//  9
3673 	{ "cq80-scr3-4266.ic4",		0x80000, 0xc114583f, TAITO_CHARS_BYTESWAP32 },   	// 10
3674 	{ "cq80-scr4-7fe1.ic3",		0x80000, 0x2bba1728, TAITO_CHARS_BYTESWAP  },    	// 11
3675 
3676 	{ "snd-h-348f.ic66",		0x20000, 0xf66e60f2, TAITO_68KROM2_BYTESWAP },   	// 12 68k Code
3677 	{ "snd-l-4ec1.ic65",		0x20000, 0xd302d8bc, TAITO_68KROM2_BYTESWAP },   	// 13
3678 
3679 	{ "cq80-snd-data0-7b5f.ic43",	0x80000, 0xbf8f26d3, TAITO_ES5505_BYTESWAP },	// 14 Ensoniq Samples
3680 	{ "cq80-snd-data1-933b.ic44",	0x80000, 0x62b00475, TAITO_ES5505_BYTESWAP },    // 15
3681 	{ "cq80-snd3-std5-3a9c.ic10",	0x80000, 0x26312451, TAITO_ES5505_BYTESWAP },    // 16
3682 	{ "cq80-snd2-std6-a148.ic11",	0x80000, 0x2edaa9dc, TAITO_ES5505_BYTESWAP },    // 17
3683 
3684 	{ "bb2proto-ic12.bin",		0x002e5, 0xacf20b88, 0 | BRF_OPT },              	// 18 pals
3685 	{ "bb2proto-ic24.bin",		0x002e5, 0xd15a4987, 0 | BRF_OPT },              	// 19
3686 	{ "pal16l8b.ic57.bin",		0x00104, 0x74b4d8be, 0 | BRF_OPT },              	// 20
3687 	{ "pal16l8b.ic58.bin",		0x00104, 0x17e2c9b8, 0 | BRF_OPT },              	// 21
3688 	{ "pal16l8b.ic59.bin",		0x00104, 0xdc0db200, 0 | BRF_OPT },              	// 22
3689 	{ "pal16l8b.ic64.bin",		0x00104, 0x3aed3d98, 0 | BRF_OPT },              	// 23
3690 };
3691 
3692 STD_ROM_PICK(bublbob2p)
STD_ROM_FN(bublbob2p)3693 STD_ROM_FN(bublbob2p)
3694 
3695 static INT32 bublbob2pRomCallback()
3696 {
3697 	memcpy (TaitoES5505Rom + 0x600000, TaitoES5505Rom + 0x200000, 0x200000);
3698 	memset (TaitoES5505Rom + 0x200000, 0, 0x200000);
3699 
3700 	return 0;
3701 }
3702 
bublbob2pInit()3703 static INT32 bublbob2pInit()
3704 {
3705 	return DrvInit(bublbob2pRomCallback, f3_24bit_palette_update, 1, BUBSYMPH, 1, 0);
3706 }
3707 
3708 struct BurnDriver BurnDrvBublbob2p = {
3709 	"bublbob2p", "bublbob2", NULL, NULL, "1994",
3710 	"Bubble Bobble II (Ver 0.0J 1993/12/13, prototype)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
3711 	NULL, NULL, NULL, NULL,
3712 	BDF_GAME_WORKING | BDF_CLONE | BDF_PROTOTYPE, 2, HARDWARE_TAITO_MISC, GBF_PLATFORM, 0,
3713 	NULL, bublbob2pRomInfo, bublbob2pRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
3714 	bublbob2pInit, DrvExit, DrvFrame, DrvDraw224A, DrvScan, &TaitoF3PalRecalc, 0x2000,
3715 	320, 224, 4, 3
3716 };
3717 
3718 
3719 // Bubble Symphony (bootleg with OKI6295)
3720 
3721 static struct BurnRomInfo bubsymphbRomDesc[] = {
3722 	{ "bsb_d12.bin",	0x40000, 0xd05160fc, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
3723 	{ "bsb_d13.bin",	0x40000, 0x83fc0d2c, TAITO_68KROM1_BYTESWAP32 }, //  1
3724 	{ "bsb_d14.bin",	0x40000, 0xe6d49bb7, TAITO_68KROM1_BYTESWAP32 }, //  2
3725 	{ "bsb_d15.bin",	0x40000, 0x014cf8e0, TAITO_68KROM1_BYTESWAP32 }, //  3
3726 
3727 	{ "bsb_d18.bin",	0x80000, 0x22d7eeb5, TAITO_SPRITESA },           //  4 Sprites
3728 	{ "bsb_d19.bin",	0x80000, 0xd36801fd, TAITO_SPRITESA },           //  5
3729 	{ "bsb_d20.bin",	0x80000, 0x20222e15, TAITO_SPRITESA },           //  6
3730 	{ "bsb_d17.bin",	0x80000, 0xea2eadfc, TAITO_SPRITESA },           //  7
3731 	{ "bsb_d16.bin",	0x80000, 0xedccd4e0, TAITO_SPRITESA },           //  8
3732 
3733 	{ "bsb_d13b.bin",	0x80000, 0x430af2aa, TAITO_CHARS },              //  9 Layer Tiles
3734 	{ "bsb_d14b.bin",	0x80000, 0xc006e832, TAITO_CHARS },              // 10
3735 	{ "bsb_d15b.bin",	0x80000, 0x74644ad4, TAITO_CHARS },              // 11
3736 	{ "bsb_d12b.bin",	0x80000, 0xcb2e2abb, TAITO_CHARS },              // 12
3737 	{ "bsb_d11b.bin",	0x80000, 0xd0607829, TAITO_CHARS },              // 13
3738 
3739 	{ "bsb_d11.bin",	0x80000, 0x26bdc617, TAITO_MSM6295 },            // 14 oki
3740 };
3741 
3742 STD_ROM_PICK(bubsymphb)
STD_ROM_FN(bubsymphb)3743 STD_ROM_FN(bubsymphb)
3744 
3745 static void bootlegpatch()
3746 {
3747 	Taito68KRom1[0xed9ca] = 0x6d; // 2d
3748 	Taito68KRom1[0xed9cb] = 0x4a; // 30
3749 	Taito68KRom1[0xed9cc] = 0x00; // 8c
3750 	Taito68KRom1[0xed9cd] = 0x80; // 82
3751 	Taito68KRom1[0xed9ce] = 0x00; // 02
3752 	Taito68KRom1[0xed9cf] = 0x66; // 6a
3753 	Taito68KRom1[0xed9d0] = 0xcc; // 40
3754 	Taito68KRom1[0xed9d1] = 0x00; // 44
3755 	Taito68KRom1[0xed9d2] = 0x2d; // 40
3756 	Taito68KRom1[0xed9d3] = 0x30; // 04
3757 	Taito68KRom1[0xed9d4] = 0x8c; // 1a
3758 	Taito68KRom1[0xed9d5] = 0x82; // 00
3759 	Taito68KRom1[0xed9d6] = 0x40; // c0
3760 	Taito68KRom1[0xed9d7] = 0x06; // 33
3761 	Taito68KRom1[0xed9d8] = 0x29; // 66
3762 	Taito68KRom1[0xed9da] = 0xc0; // 18
3763 	Taito68KRom1[0xed9db] = 0x33; // 00
3764 	Taito68KRom1[0xed9dc] = 0x66; // 2d
3765 	Taito68KRom1[0xed9dd] = 0x00; // 30
3766 	Taito68KRom1[0xed9de] = 0x18; // a0
3767 	Taito68KRom1[0xed9df] = 0x00; // 82
3768 	Taito68KRom1[0xed9e0] = 0x2d; // 02
3769 	Taito68KRom1[0xed9e1] = 0x30; // 6a
3770 	Taito68KRom1[0xed9e2] = 0xa0; // 40
3771 	Taito68KRom1[0xed9e3] = 0x82; // 44
3772 	Taito68KRom1[0xed9e5] = 0x06; // 04
3773 	Taito68KRom1[0xed9e6] = 0x1f; // 00
3774 	Taito68KRom1[0xed9f4] = 0xd8; // 2c
3775 	Taito68KRom1[0xed9f5] = 0xff; // 00
3776 	Taito68KRom1[0xeda1c] = 0xdc; // 2d
3777 	Taito68KRom1[0xeda1d] = 0xff; // 00
3778 	Taito68KRom1[0xeda44] = 0xe0; // 30
3779 	Taito68KRom1[0xeda45] = 0xff; // 00
3780 	Taito68KRom1[0xeda6c] = 0xe4; // 32
3781 	Taito68KRom1[0xeda6d] = 0xff; // 00
3782 	Taito68KRom1[0xedaa1] = 0x06; // 04
3783 	Taito68KRom1[0xedaa2] = 0x9e; // 10
3784 	Taito68KRom1[0xedba8] = 0x29; // f0
3785 	Taito68KRom1[0xedba9] = 0x00; // ff
3786 
3787 	Taito68KRom1[0xee1d0] = 0x3e; // 00	// black backgrounds
3788 	Taito68KRom1[0xee1d2] = 0xc0; // 00
3789 	Taito68KRom1[0xee1d3] = 0x01; // 00
3790 	Taito68KRom1[0xee1d4] = 0xfa; // 75
3791 	Taito68KRom1[0xee1d5] = 0x41; // 4e
3792 
3793 	Taito68KRom1[0xf04e7] = 0x08; // 00	- demo logo
3794 }
3795 
DrvGfxDecode()3796 static INT32 DrvGfxDecode()
3797 {
3798 	INT32 Plane0[8] = { STEP8(0, 0x080000*8) };
3799 	INT32 XOffs0[16] = { STEP8(7,-1), STEP8(15,-1) };
3800 	INT32 YOffs0[16] = { STEP16(0,16) };
3801 
3802 	INT32 Plane1[5] = { 0x200000*8, STEP4(0,1) };
3803 	INT32 XOffs1[16] = { 20,16,12,8, 4,0,28,24, 52,48,44,40, 36,32,60,56 };
3804 	INT32 YOffs1[16] = { STEP16(0,64) };
3805 
3806 	UINT8 *tmp = (UINT8*)BurnMalloc(0x400000);
3807 	if (tmp == NULL) {
3808 		return 1;
3809 	}
3810 
3811 	{
3812 		UINT8 *gfx = TaitoChars;
3813 
3814 		for (INT32 i=0x200000;i<0x400000; i+=4)
3815 		{
3816 			UINT8 byte = gfx[i];
3817 			gfx[i+0] = (byte & 0x80)? 1<<7 : 0<<4;
3818 			gfx[i+0]|= (byte & 0x40)? 1<<3 : 0<<0;
3819 			gfx[i+1] = (byte & 0x20)? 1<<7 : 0<<4;
3820 			gfx[i+1]|= (byte & 0x10)? 1<<3 : 0<<0;
3821 			gfx[i+2] = (byte & 0x08)? 1<<7 : 0<<4;
3822 			gfx[i+2]|= (byte & 0x04)? 1<<3 : 0<<0;
3823 			gfx[i+3] = (byte & 0x02)? 1<<7 : 0<<4;
3824 			gfx[i+3]|= (byte & 0x01)? 1<<3 : 0<<0;
3825 		}
3826 	}
3827 
3828 	memcpy (tmp, TaitoSpritesA, 0x400000);
3829 
3830 	GfxDecode(0x4000, 6, 16, 16, Plane0, XOffs0, YOffs0, 0x100, tmp, TaitoSpritesA);
3831 
3832 	memcpy (tmp, TaitoChars, 0x400000);
3833 
3834 	GfxDecode(0x4000, 5, 16, 16, Plane1, XOffs1, YOffs1, 0x400, tmp, TaitoChars);
3835 
3836 	UINT8 tmp2[0x8];
3837 
3838 	for (INT32 i = 0x200000; i < 0x400000; i+=8) {
3839 		memcpy (tmp2, TaitoChars + i, 8);
3840 
3841 		for (INT32 j = 0; j < 8; j++) {
3842 			TaitoChars[i+j] &= 0xf;
3843 			TaitoChars[i+j] |= 0x20;
3844 			tmp2[j] &= 0x10;
3845 		}
3846 
3847 		TaitoChars[i+0] |= tmp2[6];
3848 		TaitoChars[i+1] |= tmp2[7];
3849 		TaitoChars[i+2] |= tmp2[0];
3850 		TaitoChars[i+3] |= tmp2[1];
3851 		TaitoChars[i+4] |= tmp2[2];
3852 		TaitoChars[i+5] |= tmp2[3];
3853 		TaitoChars[i+6] |= tmp2[4];
3854 		TaitoChars[i+7] |= tmp2[5];
3855 	}
3856 
3857 	DrvCalculateTransTable(0x400000,0x400000);
3858 
3859 	BurnFree(tmp);
3860 
3861 	return 0;
3862 }
3863 
bubsymphbInit()3864 static INT32 bubsymphbInit()
3865 {
3866 	f3_game = BUBSYMPH;
3867 
3868 	TaitoSpriteARomSize = (0x300000 * 8) / 6;
3869 	TaitoCharRomSize = 0x400000;
3870 	TaitoF3ES5506RomSize = 0x80000;
3871 	TaitoSpriteAModulo = (TaitoSpriteARomSize / 0x100);
3872 	TaitoCharModulo = (TaitoCharRomSize / 0x100);
3873 
3874 	MemIndex();
3875 	INT32 nLen = TaitoMemEnd - (UINT8 *)0;
3876 	if ((TaitoMem = (UINT8 *)BurnMalloc(nLen)) == NULL) return 1;
3877 	memset(TaitoMem, 0, nLen);
3878 	MemIndex();
3879 
3880 	{
3881 		if (BurnLoadRom(Taito68KRom1  + 0x000001,  0, 4)) return 1;
3882 		if (BurnLoadRom(Taito68KRom1  + 0x000000,  1, 4)) return 1;
3883 		if (BurnLoadRom(Taito68KRom1  + 0x000003,  2, 4)) return 1;
3884 		if (BurnLoadRom(Taito68KRom1  + 0x000002,  3, 4)) return 1;
3885 
3886 		if (BurnLoadRom(TaitoSpritesA + 0x080000,  4, 1)) return 1;
3887 		if (BurnLoadRom(TaitoSpritesA + 0x100000,  5, 1)) return 1;
3888 		if (BurnLoadRom(TaitoSpritesA + 0x180000,  6, 1)) return 1;
3889 		if (BurnLoadRom(TaitoSpritesA + 0x200000,  7, 1)) return 1;
3890 		if (BurnLoadRom(TaitoSpritesA + 0x280000,  8, 1)) return 1;
3891 
3892 		if (BurnLoadRom(TaitoChars    + 0x000000,  9, 4)) return 1;
3893 		if (BurnLoadRom(TaitoChars    + 0x000001, 10, 4)) return 1;
3894 		if (BurnLoadRom(TaitoChars    + 0x000002, 11, 4)) return 1;
3895 		if (BurnLoadRom(TaitoChars    + 0x000003, 12, 4)) return 1;
3896 		if (BurnLoadRom(TaitoChars    + 0x200000, 13, 4)) return 1;
3897 
3898 		if (BurnLoadRom(TaitoF3ES5506Rom,         14, 1)) return 1;
3899 
3900 		DrvGfxDecode();
3901 
3902 		bootlegpatch();
3903 	}
3904 
3905 	SekInit(0, 0x68ec020);
3906 	SekOpen(0);
3907 	SekMapMemory(Taito68KRom1,	0x000000, 0x1fffff, MAP_ROM);
3908 	SekMapMemory(Taito68KRam1,	0x400000, 0x41ffff, MAP_RAM);
3909 	SekMapMemory(Taito68KRam1,	0x420000, 0x43ffff, MAP_RAM); // mirror
3910 	SekMapMemory(TaitoPaletteRam,	0x440000, 0x447fff, MAP_ROM); // write through handler
3911 	SekMapMemory(TaitoSpriteRam,	0x600000, 0x60ffff, MAP_RAM);
3912 	SekMapMemory(TaitoF3PfRAM,		0x610000, 0x617fff, MAP_ROM); // write through handler
3913 	SekMapMemory(TaitoF3PfRAM + 0x8000,	0x618000, 0x61bfff, MAP_RAM);
3914 	SekMapMemory(TaitoVideoRam,	0x61c000, 0x61dfff, MAP_RAM);
3915 	SekMapMemory(DrvVRAMRAM,	0x61e000, 0x61ffff, MAP_ROM); // write through handler
3916 	SekMapMemory(TaitoF3LineRAM,	0x620000, 0x62ffff, MAP_RAM);
3917 	SekMapMemory(DrvPivotRAM,	0x630000, 0x63ffff, MAP_ROM); // write through handler
3918 	SekMapMemory(TaitoF3CtrlRAM,	0x660000, 0x6603ff, MAP_WRITE); // 0-1f
3919 	SekMapMemory(TaitoF3SharedRam,	0xc00000, 0xc007ff, MAP_RAM);
3920 	SekSetWriteLongHandler(0,	f3_main_write_long);
3921 	SekSetWriteWordHandler(0,	f3_main_write_word);
3922 	SekSetWriteByteHandler(0,	f3_main_write_byte);
3923 	SekSetReadLongHandler(0,	f3_main_read_long);
3924 	SekSetReadWordHandler(0,	f3_main_read_word);
3925 	SekSetReadByteHandler(0,	f3_main_read_byte);
3926 
3927 	SekMapHandler(1,		0x440000, 0x447fff, MAP_WRITE);
3928 	SekSetWriteLongHandler(1,	f3_palette_write_long);
3929 	SekSetWriteWordHandler(1,	f3_palette_write_word);
3930 	SekSetWriteByteHandler(1,	f3_palette_write_byte);
3931 
3932 	SekMapHandler(2,		0x61e000, 0x61ffff, MAP_WRITE);
3933 	SekSetWriteLongHandler(2,	f3_VRAM_write_long);
3934 	SekSetWriteWordHandler(2,	f3_VRAM_write_word);
3935 	SekSetWriteByteHandler(2,	f3_VRAM_write_byte);
3936 
3937 	SekMapHandler(3,		0x630000, 0x63ffff, MAP_WRITE);
3938 	SekSetWriteLongHandler(3,	f3_pivot_write_long);
3939 	SekSetWriteWordHandler(3,	f3_pivot_write_word);
3940 	SekSetWriteByteHandler(3,	f3_pivot_write_byte);
3941 
3942 	SekMapHandler(4,		0x610000, 0x617fff, MAP_WRITE);
3943 	SekSetWriteLongHandler(4,	f3_playfield_write_long);
3944 	SekSetWriteWordHandler(4,	f3_playfield_write_word);
3945 	SekSetWriteByteHandler(4,	f3_playfield_write_byte);
3946 	SekClose();
3947 
3948 	TaitoF3SoundInit(1); // keep us safe from crashes!
3949 
3950 	MSM6295Init(0, 1000000 / 132, 0);
3951 	MSM6295SetRoute(0, 0.80, BURN_SND_ROUTE_BOTH);
3952 
3953 	EEPROMInit(&eeprom_interface_93C46);
3954 	EEPROMIgnoreErrMessage(1);
3955 
3956 	if (BurnDrvGetFlags() & BDF_ORIENTATION_VERTICAL) {
3957 		BurnDrvGetVisibleSize(&nScreenHeight, &nScreenWidth);
3958 	} else {
3959 		BurnDrvGetVisibleSize(&nScreenWidth, &nScreenHeight);
3960 	}
3961 
3962 	pPaletteUpdateCallback = f3_24bit_palette_update;
3963 	extended_layers = 1;
3964 	sprite_lag = 1;
3965 
3966 	TaitoF3VideoInit();
3967 
3968 	bitmap_width[0] = extended_layers ? 1024 : 512;
3969 	bitmap_width[1] = extended_layers ? 1024 : 512;
3970 	bitmap_width[2] = extended_layers ? 1024 : 512;
3971 	bitmap_width[3] = extended_layers ? 1024 : 512;
3972 	bitmap_width[4] = 512;
3973 	bitmap_width[5] = 512;
3974 	bitmap_width[6] = 512;
3975 	bitmap_width[7] = 512;
3976 
3977 	DrvDoReset(1);
3978 
3979 	return 0;
3980 }
3981 
3982 
3983 struct BurnDriverD BurnDrvBubsymphb = {
3984 	"bubsymphb", "bublbob2", NULL, NULL, "1994",
3985 	"Bubble Symphony (bootleg with OKI6295)\0", NULL, "bootleg", "Taito F3 System",
3986 	NULL, NULL, NULL, NULL,
3987 	BDF_CLONE | BDF_BOOTLEG, 2, HARDWARE_TAITO_MISC, GBF_PLATFORM, 0,
3988 	NULL, bubsymphbRomInfo, bubsymphbRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
3989 	bubsymphbInit, DrvExit, DrvFrame, DrvDraw224A, DrvScan, &TaitoF3PalRecalc, 0x2000,
3990 	320, 224, 4, 3
3991 };
3992 
3993 
3994 // Seoul Symphony (Bubble Symphony bootleg with OKI6295)
3995 // extremely similar to bubsymphb (i.e. the only differences in the program ROMs are copyright removals). 2 PCB set: 70121 MAIN + ROM board
3996 
3997 static struct BurnRomInfo bubsymphbaRomDesc[] = {
3998 	{ "2-27c2000.bin",	0x40000, 0xb26728fa, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
3999 	{ "3-27c2000.bin",	0x40000, 0xd7406de1, TAITO_68KROM1_BYTESWAP32 }, //  1
4000 	{ "4-27c2000.bin",	0x40000, 0x5a45a291, TAITO_68KROM1_BYTESWAP32 }, //  2
4001 	{ "5-27c2000.bin",	0x40000, 0xaad3806b, TAITO_68KROM1_BYTESWAP32 }, //  3
4002 
4003 	{ "8-27c4000.bin",	0x80000, 0x22d7eeb5, TAITO_SPRITESA },           //  4 Sprites
4004 	{ "9-27c4000.bin",	0x80000, 0xb8f7b1c6, TAITO_SPRITESA },           //  5
4005 	{ "10-27c4000.bin",	0x80000, 0xd4981f73, TAITO_SPRITESA },           //  6
4006 	{ "7-27c4000.bin",	0x80000, 0xc1c35f7b, TAITO_SPRITESA },           //  7
4007 	{ "6-27c4000.bin",	0x80000, 0x35a60e28, TAITO_SPRITESA },           //  8
4008 
4009 	{ "13-27c4000.bin",	0x80000, 0x5d87b202, TAITO_CHARS },              //  9 Layer Tiles
4010 	{ "12-27c4000.bin",	0x80000, 0x95add6ec, TAITO_CHARS },              // 10
4011 	{ "11-27c4000.bin",	0x80000, 0x69f814b1, TAITO_CHARS },              // 11
4012 	{ "14-27c4000.bin",	0x80000, 0x8be51e5a, TAITO_CHARS },              // 12
4013 	{ "15-27c4000.bin",	0x80000, 0x45b3cf43, TAITO_CHARS },              // 13
4014 
4015 	{ "1-27c4000.bin",	0x80000, 0x26bdc617, TAITO_MSM6295 },            // 14 oki
4016 };
4017 
4018 STD_ROM_PICK(bubsymphba)
4019 STD_ROM_FN(bubsymphba)
4020 
4021 struct BurnDriverD BurnDrvBubsymphba = {
4022 	"bubsymphba", "bublbob2", NULL, NULL, "1994",
4023 	"Seoul Symphony (Bubble Symphony bootleg with OKI6295)\0", NULL, "bootleg (SOFTV)", "Taito F3 System",
4024 	NULL, NULL, NULL, NULL,
4025 	BDF_CLONE | BDF_BOOTLEG, 2, HARDWARE_TAITO_MISC, GBF_PLATFORM, 0,
4026 	NULL, bubsymphbaRomInfo, bubsymphbaRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
4027 	bubsymphbInit, DrvExit, DrvFrame, DrvDraw224A, DrvScan, &TaitoF3PalRecalc, 0x2000,
4028 	320, 224, 4, 3
4029 };
4030 
4031 
4032 // Bubble Symphony (Ver 2.5A 1994/10/05)
4033 
4034 static struct BurnRomInfo bubsymphuRomDesc[] = {
4035 	{ "d90-12",		0x040000, 0x9e523996, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
4036 	{ "d90-11",		0x040000, 0xedfdbb7f, TAITO_68KROM1_BYTESWAP32 }, //  1
4037 	{ "d90-10",		0x040000, 0x8e957d3d, TAITO_68KROM1_BYTESWAP32 }, //  2
4038 	{ "d90-15",		0x040000, 0x06182802, TAITO_68KROM1_BYTESWAP32 }, //  3
4039 
4040 	{ "d90-03",		0x100000, 0x6fa894a1, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
4041 	{ "d90-02",		0x100000, 0x5ab04ca2, TAITO_SPRITESA_BYTESWAP },  //  5
4042 	{ "d90-01",		0x100000, 0x8aedb9e5, TAITO_SPRITESA },           //  6
4043 
4044 	{ "d90-08",		0x100000, 0x25a4fb2c, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
4045 	{ "d90-07",		0x100000, 0xb436b42d, TAITO_CHARS_BYTESWAP },     //  8
4046 	{ "d90-06",		0x100000, 0x166a72b8, TAITO_CHARS },              //  9
4047 
4048 	{ "d90-13.ic32",0x040000, 0x6762bd90, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
4049 	{ "d90-14.ic33",0x040000, 0x8e33357e, TAITO_68KROM2_BYTESWAP },   // 11
4050 
4051 	{ "d90-04",		0x200000, 0xfeee5fda, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
4052 	{ "d90-05",		0x200000, 0xc192331f, TAITO_ES5505_BYTESWAP },    // 13
4053 };
4054 
4055 STD_ROM_PICK(bubsymphu)
4056 STD_ROM_FN(bubsymphu)
4057 
4058 struct BurnDriver BurnDrvBubsymphu = {
4059 	"bubsymphu", "bublbob2", NULL, NULL, "1994",
4060 	"Bubble Symphony (Ver 2.5A 1994/10/05)\0", NULL, "Taito America Corporation", "Taito F3 System",
4061 	NULL, NULL, NULL, NULL,
4062 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PLATFORM, 0,
4063 	NULL, bubsymphuRomInfo, bubsymphuRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
4064 	bublbob2Init, DrvExit, DrvFrame, DrvDraw224A, DrvScan, &TaitoF3PalRecalc, 0x2000,
4065 	320, 224, 4, 3
4066 };
4067 
4068 
4069 // Space Invaders DX (Ver 2.6J 1994/09/14) (F3 Version)
4070 
4071 static struct BurnRomInfo spcinvdjRomDesc[] = {
4072 	{ "d93-04.bin",		0x20000, 0xcd9a4e5c, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
4073 	{ "d93-03.bin",		0x20000, 0x0174bfc1, TAITO_68KROM1_BYTESWAP32 }, //  1
4074 	{ "d93-02.bin",		0x20000, 0x01922b31, TAITO_68KROM1_BYTESWAP32 }, //  2
4075 	{ "d93-01.bin",		0x20000, 0x4a74ab1c, TAITO_68KROM1_BYTESWAP32 }, //  3
4076 
4077 	{ "d93-07.12",		0x80000, 0x8cf5b972, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
4078 	{ "d93-08.08",		0x80000, 0x4c11af2b, TAITO_SPRITESA_BYTESWAP },  //  5
4079 
4080 	{ "d93-09.47",		0x20000, 0x9076f663, TAITO_CHARS_BYTESWAP },     //  6 Layer Tiles
4081 	{ "d93-10.45",		0x20000, 0x8a3f531b, TAITO_CHARS_BYTESWAP },     //  7
4082 
4083 	{ "d93-05.bin",		0x20000, 0xff365596, TAITO_68KROM2_BYTESWAP },   //  8 68k Code
4084 	{ "d93-06.bin",		0x20000, 0xef7ad400, TAITO_68KROM2_BYTESWAP },   //  9
4085 
4086 	{ "d93-11.38",		0x80000, 0xdf5853de, TAITO_ES5505_BYTESWAP },    // 10 Ensoniq Samples
4087 	{ "d93-12.39",		0x80000, 0xb0f71d60, TAITO_ES5505_BYTESWAP },    // 11
4088 	{ "d93-13.40",		0x80000, 0x26312451, TAITO_ES5505_BYTESWAP },    // 12
4089 	{ "d93-14.41",		0x80000, 0x2edaa9dc, TAITO_ES5505_BYTESWAP },    // 13
4090 };
4091 
4092 STD_ROM_PICK(spcinvdj)
STD_ROM_FN(spcinvdj)4093 STD_ROM_FN(spcinvdj)
4094 
4095 static INT32 spcinvdjInit()
4096 {
4097 	return DrvInit(NULL, f3_12bit_palette_update, 1, SPCINVDX, 1, 0x400218);
4098 }
4099 
4100 struct BurnDriver BurnDrvSpcinvdj = {
4101 	"spcinvdj", "spacedx", NULL, NULL, "1994",
4102 	"Space Invaders DX (Ver 2.6J 1994/09/14) (F3 Version)\0", "Graphics issues in Cellophane mode - use parent!", "Taito Corporation", "Taito F3 System",
4103 	NULL, NULL, NULL, NULL,
4104 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_VERSHOOT, 0,
4105 	NULL, spcinvdjRomInfo, spcinvdjRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
4106 	spcinvdjInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
4107 	320, 232, 4, 3
4108 };
4109 
4110 
4111 // Taito Power Goal (Ver 2.5O 1994/11/03)
4112 
4113 static struct BurnRomInfo pwrgoalRomDesc[] = {
4114 	{ "d94-18.20",		0x040000, 0xb92681c3, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
4115 	{ "d94-17.19",		0x040000, 0x6009333e, TAITO_68KROM1_BYTESWAP32 }, //  1
4116 	{ "d94-16.18",		0x040000, 0xc6dbc9c8, TAITO_68KROM1_BYTESWAP32 }, //  2
4117 	{ "d94-22.17",		0x040000, 0xf672e487, TAITO_68KROM1_BYTESWAP32 }, //  3
4118 
4119 	{ "d94-09.bin",		0x200000, 0x425e6bec, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
4120 	{ "d94-06.bin",		0x200000, 0x0ed1df55, TAITO_SPRITESA_BYTESWAP },  //  5
4121 	{ "d94-08.bin",		0x200000, 0xbd909caf, TAITO_SPRITESA_BYTESWAP },  //  6
4122 	{ "d94-05.bin",		0x200000, 0x121c8542, TAITO_SPRITESA_BYTESWAP },  //  7
4123 	{ "d94-07.bin",		0x200000, 0xc8c95e49, TAITO_SPRITESA_BYTESWAP },  //  8
4124 	{ "d94-04.bin",		0x200000, 0x24958b50, TAITO_SPRITESA_BYTESWAP },  //  9
4125 	{ "d94-03.bin",		0x200000, 0x95e32072, TAITO_SPRITESA },           // 10
4126 	{ "d94-02.bin",		0x200000, 0xf460b9ac, TAITO_SPRITESA },           // 11
4127 	{ "d94-01.bin",		0x200000, 0x410ffccd, TAITO_SPRITESA },           // 12
4128 
4129 	{ "d94-14.bin",		0x100000, 0xb8ba5761, TAITO_CHARS_BYTESWAP },     // 13 Layer Tiles
4130 	{ "d94-13.bin",		0x100000, 0xcafc68ce, TAITO_CHARS_BYTESWAP },     // 14
4131 	{ "d94-12.bin",		0x100000, 0x47064189, TAITO_CHARS },              // 15
4132 
4133 	{ "d94-19.bin",		0x040000, 0xc93dbcf4, TAITO_68KROM2_BYTESWAP },   // 16 68k Code
4134 	{ "d94-20.bin",		0x040000, 0xf232bf64, TAITO_68KROM2_BYTESWAP },   // 17
4135 
4136 	{ "d94-10.bin",		0x200000, 0xa22563ae, TAITO_ES5505_BYTESWAP },    // 18 Ensoniq Samples
4137 	{ "d94-11.bin",		0x200000, 0x61ed83fa, TAITO_ES5505_BYTESWAP },    // 19
4138 };
4139 
4140 STD_ROM_PICK(pwrgoal)
STD_ROM_FN(pwrgoal)4141 STD_ROM_FN(pwrgoal)
4142 
4143 static INT32 pwrgoalInit()
4144 {
4145 	return DrvInit(NULL, f3_24bit_palette_update, 0, HTHERO95, 1, 0);
4146 }
4147 
4148 struct BurnDriver BurnDrvPwrgoal = {
4149 	"pwrgoal", NULL, NULL, NULL, "1994",
4150 	"Taito Power Goal (Ver 2.5O 1994/11/03)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
4151 	NULL, NULL, NULL, NULL,
4152 	BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_SPORTSFOOTBALL, 0,
4153 	NULL, pwrgoalRomInfo, pwrgoalRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
4154 	pwrgoalInit, DrvExit, DrvFrame, DrvDraw224A_Flipped, DrvScan, &TaitoF3PalRecalc, 0x2000,
4155 	320, 224, 4, 3
4156 };
4157 
4158 
4159 // Hat Trick Hero '95 (Ver 2.5J 1994/11/03)
4160 
4161 static struct BurnRomInfo hthero95RomDesc[] = {
4162 	{ "d94-18.20",		0x040000, 0xb92681c3, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
4163 	{ "d94-17.19",		0x040000, 0x6009333e, TAITO_68KROM1_BYTESWAP32 }, //  1
4164 	{ "d94-16.18",		0x040000, 0xc6dbc9c8, TAITO_68KROM1_BYTESWAP32 }, //  2
4165 	{ "d94-15.17",		0x040000, 0x187c85ab, TAITO_68KROM1_BYTESWAP32 }, //  3
4166 
4167 	{ "d94-09.bin",		0x200000, 0x425e6bec, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
4168 	{ "d94-06.bin",		0x200000, 0x0ed1df55, TAITO_SPRITESA_BYTESWAP },  //  5
4169 	{ "d94-08.bin",		0x200000, 0xbd909caf, TAITO_SPRITESA_BYTESWAP },  //  6
4170 	{ "d94-05.bin",		0x200000, 0x121c8542, TAITO_SPRITESA_BYTESWAP },  //  7
4171 	{ "d94-07.bin",		0x200000, 0xc8c95e49, TAITO_SPRITESA_BYTESWAP },  //  8
4172 	{ "d94-04.bin",		0x200000, 0x24958b50, TAITO_SPRITESA_BYTESWAP },  //  9
4173 	{ "d94-03.bin",		0x200000, 0x95e32072, TAITO_SPRITESA },           // 10
4174 	{ "d94-02.bin",		0x200000, 0xf460b9ac, TAITO_SPRITESA },           // 11
4175 	{ "d94-01.bin",		0x200000, 0x410ffccd, TAITO_SPRITESA },           // 12
4176 
4177 	{ "d94-14.bin",		0x100000, 0xb8ba5761, TAITO_CHARS_BYTESWAP },     // 13 Layer Tiles
4178 	{ "d94-13.bin",		0x100000, 0xcafc68ce, TAITO_CHARS_BYTESWAP },     // 14
4179 	{ "d94-12.bin",		0x100000, 0x47064189, TAITO_CHARS },              // 15
4180 
4181 	{ "d94-19.bin",		0x040000, 0xc93dbcf4, TAITO_68KROM2_BYTESWAP },   // 16 68k Code
4182 	{ "d94-20.bin",		0x040000, 0xf232bf64, TAITO_68KROM2_BYTESWAP },   // 17
4183 
4184 	{ "d94-10.bin",		0x200000, 0xa22563ae, TAITO_ES5505_BYTESWAP },    // 18 Ensoniq Samples
4185 	{ "d94-11.bin",		0x200000, 0x61ed83fa, TAITO_ES5505_BYTESWAP },    // 19
4186 };
4187 
4188 STD_ROM_PICK(hthero95)
4189 STD_ROM_FN(hthero95)
4190 
4191 struct BurnDriver BurnDrvHthero95 = {
4192 	"hthero95", "pwrgoal", NULL, NULL, "1994",
4193 	"Hat Trick Hero '95 (Ver 2.5J 1994/11/03)\0", NULL, "Taito Corporation", "Taito F3 System",
4194 	NULL, NULL, NULL, NULL,
4195 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_SPORTSFOOTBALL, 0,
4196 	NULL, hthero95RomInfo, hthero95RomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
4197 	pwrgoalInit, DrvExit, DrvFrame, DrvDraw224A_Flipped, DrvScan, &TaitoF3PalRecalc, 0x2000,
4198 	320, 224, 4, 3
4199 };
4200 
4201 
4202 // Hat Trick Hero '95 (Ver 2.5A 1994/11/03)
4203 
4204 static struct BurnRomInfo hthero95uRomDesc[] = {
4205 	{ "d94-18.20",		0x040000, 0xb92681c3, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
4206 	{ "d94-17.19",		0x040000, 0x6009333e, TAITO_68KROM1_BYTESWAP32 }, //  1
4207 	{ "d94-16.18",		0x040000, 0xc6dbc9c8, TAITO_68KROM1_BYTESWAP32 }, //  2
4208 	{ "d94-21.17",		0x040000, 0x8175d411, TAITO_68KROM1_BYTESWAP32 }, //  3
4209 
4210 	{ "d94-09.bin",		0x200000, 0x425e6bec, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
4211 	{ "d94-06.bin",		0x200000, 0x0ed1df55, TAITO_SPRITESA_BYTESWAP },  //  5
4212 	{ "d94-08.bin",		0x200000, 0xbd909caf, TAITO_SPRITESA_BYTESWAP },  //  6
4213 	{ "d94-05.bin",		0x200000, 0x121c8542, TAITO_SPRITESA_BYTESWAP },  //  7
4214 	{ "d94-07.bin",		0x200000, 0xc8c95e49, TAITO_SPRITESA_BYTESWAP },  //  8
4215 	{ "d94-04.bin",		0x200000, 0x24958b50, TAITO_SPRITESA_BYTESWAP },  //  9
4216 	{ "d94-03.bin",		0x200000, 0x95e32072, TAITO_SPRITESA },           // 10
4217 	{ "d94-02.bin",		0x200000, 0xf460b9ac, TAITO_SPRITESA },           // 11
4218 	{ "d94-01.bin",		0x200000, 0x410ffccd, TAITO_SPRITESA },           // 12
4219 
4220 	{ "d94-14.bin",		0x100000, 0xb8ba5761, TAITO_CHARS_BYTESWAP },     // 13 Layer Tiles
4221 	{ "d94-13.bin",		0x100000, 0xcafc68ce, TAITO_CHARS_BYTESWAP },     // 14
4222 	{ "d94-12.bin",		0x100000, 0x47064189, TAITO_CHARS },              // 15
4223 
4224 	{ "d94-19.bin",		0x040000, 0xc93dbcf4, TAITO_68KROM2_BYTESWAP },   // 16 68k Code
4225 	{ "d94-20.bin",		0x040000, 0xf232bf64, TAITO_68KROM2_BYTESWAP },   // 17
4226 
4227 	{ "d94-10.bin",		0x200000, 0xa22563ae, TAITO_ES5505_BYTESWAP },    // 18 Ensoniq Samples
4228 	{ "d94-11.bin",		0x200000, 0x61ed83fa, TAITO_ES5505_BYTESWAP },    // 19
4229 };
4230 
4231 STD_ROM_PICK(hthero95u)
4232 STD_ROM_FN(hthero95u)
4233 
4234 struct BurnDriver BurnDrvHthero95u = {
4235 	"hthero95u", "pwrgoal", NULL, NULL, "1994",
4236 	"Hat Trick Hero '95 (Ver 2.5A 1994/11/03)\0", NULL, "Taito America Corporation", "Taito F3 System",
4237 	NULL, NULL, NULL, NULL,
4238 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_SPORTSFOOTBALL, 0,
4239 	NULL, hthero95uRomInfo, hthero95uRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
4240 	pwrgoalInit, DrvExit, DrvFrame, DrvDraw224A_Flipped, DrvScan, &TaitoF3PalRecalc, 0x2000,
4241 	320, 224, 4, 3
4242 };
4243 
4244 
4245 // Hat Trick Hero '95 (Ver 2.6Asia 1994/11/17)
4246 
4247 static struct BurnRomInfo hthero95aRomDesc[] = {
4248 	{ "d94-26.20",		0x040000, 0x3170fa0b, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
4249 	{ "d94-25.19",		0x040000, 0xdfd5cbf9, TAITO_68KROM1_BYTESWAP32 }, //  1
4250 	{ "d94-24.18",		0x040000, 0xd97269cc, TAITO_68KROM1_BYTESWAP32 }, //  2
4251 	{ "d94-23.17",		0x040000, 0x71092708, TAITO_68KROM1_BYTESWAP32 }, //  3
4252 
4253 	{ "d94-09.bin",		0x200000, 0x425e6bec, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
4254 	{ "d94-06.bin",		0x200000, 0x0ed1df55, TAITO_SPRITESA_BYTESWAP },  //  5
4255 	{ "d94-08.bin",		0x200000, 0xbd909caf, TAITO_SPRITESA_BYTESWAP },  //  6
4256 	{ "d94-05.bin",		0x200000, 0x121c8542, TAITO_SPRITESA_BYTESWAP },  //  7
4257 	{ "d94-07.bin",		0x200000, 0xc8c95e49, TAITO_SPRITESA_BYTESWAP },  //  8
4258 	{ "d94-04.bin",		0x200000, 0x24958b50, TAITO_SPRITESA_BYTESWAP },  //  9
4259 	{ "d94-03.bin",		0x200000, 0x95e32072, TAITO_SPRITESA },           // 10
4260 	{ "d94-02.bin",		0x200000, 0xf460b9ac, TAITO_SPRITESA },           // 11
4261 	{ "d94-01.bin",		0x200000, 0x410ffccd, TAITO_SPRITESA },           // 12
4262 
4263 	{ "d94-14.bin",		0x100000, 0xb8ba5761, TAITO_CHARS_BYTESWAP },     // 13 Layer Tiles
4264 	{ "d94-13.bin",		0x100000, 0xcafc68ce, TAITO_CHARS_BYTESWAP },     // 14
4265 	{ "d94-12.bin",		0x100000, 0x47064189, TAITO_CHARS },              // 15
4266 
4267 	{ "d94-19.bin",		0x040000, 0xc93dbcf4, TAITO_68KROM2_BYTESWAP },   // 16 68k Code
4268 	{ "d94-20.bin",		0x040000, 0xf232bf64, TAITO_68KROM2_BYTESWAP },   // 17
4269 
4270 	{ "d94-10.bin",		0x200000, 0xa22563ae, TAITO_ES5505_BYTESWAP },    // 18 Ensoniq Samples
4271 	{ "d94-11.bin",		0x200000, 0x61ed83fa, TAITO_ES5505_BYTESWAP },    // 19
4272 };
4273 
4274 STD_ROM_PICK(hthero95a)
4275 STD_ROM_FN(hthero95a)
4276 
4277 struct BurnDriver BurnDrvHthero95a = {
4278 	"hthero95a", "pwrgoal", NULL, NULL, "1994",
4279 	"Hat Trick Hero '95 (Ver 2.6Asia 1994/11/17)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
4280 	NULL, NULL, NULL, NULL,
4281 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_SPORTSFOOTBALL, 0,
4282 	NULL, hthero95aRomInfo, hthero95aRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
4283 	pwrgoalInit, DrvExit, DrvFrame, DrvDraw224A_Flipped, DrvScan, &TaitoF3PalRecalc, 0x2000,
4284 	320, 224, 4, 3
4285 };
4286 
4287 
4288 // Quiz Theater - 3tsu no Monogatari (Ver 2.3J 1994/11/10)
4289 
4290 static struct BurnRomInfo qtheaterRomDesc[] = {
4291 	{ "d95-12.20",		0x080000, 0xfcee76ee, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
4292 	{ "d95-11.19",		0x080000, 0xb3c2b8d5, TAITO_68KROM1_BYTESWAP32 }, //  1
4293 	{ "d95-10.18",		0x080000, 0x85236e40, TAITO_68KROM1_BYTESWAP32 }, //  2
4294 	{ "d95-09.17",		0x080000, 0xf456519c, TAITO_68KROM1_BYTESWAP32 }, //  3
4295 
4296 	{ "d95-02.12",		0x200000, 0x74ce6f3e, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
4297 	{ "d95-01.8",		0x200000, 0x141beb7d, TAITO_SPRITESA_BYTESWAP },  //  5
4298 
4299 	{ "d95-06.47",		0x200000, 0x70a0dcbb, TAITO_CHARS_BYTESWAP },     //  6 Layer Tiles
4300 	{ "d95-05.45",		0x200000, 0x1a1a852b, TAITO_CHARS_BYTESWAP },     //  7
4301 
4302 	{ "d95-07.32",		0x040000, 0x3c201d70, TAITO_68KROM2_BYTESWAP },   //  8 68k Code
4303 	{ "d95-08.33",		0x040000, 0x01c23354, TAITO_68KROM2_BYTESWAP },   //  9
4304 
4305 	{ "d95-03.38",		0x200000, 0x4149ea67, TAITO_ES5505_BYTESWAP },    // 10 Ensoniq Samples
4306 	{ "d95-04.41",		0x200000, 0xe9049d16, TAITO_ES5505_BYTESWAP },    // 11
4307 };
4308 
4309 STD_ROM_PICK(qtheater)
STD_ROM_FN(qtheater)4310 STD_ROM_FN(qtheater)
4311 
4312 static INT32 qtheaterInit()
4313 {
4314 	return DrvInit(NULL, f3_24bit_palette_update, 1, QTHEATER, 1, 0);
4315 }
4316 
4317 struct BurnDriver BurnDrvQtheater = {
4318 	"qtheater", NULL, NULL, NULL, "1994",
4319 	"Quiz Theater - 3tsu no Monogatari (Ver 2.3J 1994/11/10)\0", NULL, "Taito Corporation", "Taito F3 System",
4320 	NULL, NULL, NULL, NULL,
4321 	BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_QUIZ, 0,
4322 	NULL, qtheaterRomInfo, qtheaterRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
4323 	qtheaterInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
4324 	320, 224, 4, 3
4325 };
4326 
4327 
4328 // Space Invaders '95: The Attack Of Lunar Loonies (Ver 2.5O 1995/06/14)
4329 
4330 static struct BurnRomInfo spcinv95RomDesc[] = {
4331 	{ "e06-14.20",		0x020000, 0x71ba7f00, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
4332 	{ "e06-13.19",		0x020000, 0xf506ba4b, TAITO_68KROM1_BYTESWAP32 }, //  1
4333 	{ "e06-12.18",		0x020000, 0x06cbd72b, TAITO_68KROM1_BYTESWAP32 }, //  2
4334 	{ "e06-16.17",		0x020000, 0xd1eb3195, TAITO_68KROM1_BYTESWAP32 }, //  3
4335 
4336 	{ "e06-03",		0x100000, 0xa24070ef, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
4337 	{ "e06-02",		0x100000, 0x8f646dea, TAITO_SPRITESA_BYTESWAP },  //  5
4338 	{ "e06-01",		0x100000, 0x51721b15, TAITO_SPRITESA },           //  6
4339 
4340 	{ "e06-08",		0x100000, 0x72ae2fbf, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
4341 	{ "e06-07",		0x100000, 0x4b02e8f5, TAITO_CHARS_BYTESWAP },     //  8
4342 	{ "e06-06",		0x100000, 0x9380db3c, TAITO_CHARS },              //  9
4343 
4344 	{ "e06-09.32",		0x040000, 0x9bcafc87, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
4345 	{ "e06-10.33",		0x040000, 0xb752b61f, TAITO_68KROM2_BYTESWAP },   // 11
4346 
4347 	{ "e06-04",		0x200000, 0x1dac29df, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
4348 	{ "e06-05",		0x200000, 0xf370ff15, TAITO_ES5505_BYTESWAP },    // 13
4349 
4350 	{ "pal16l8a-d77-09.bin",	0x000104, 0xb371532b, BRF_OPT }, // 14 plds
4351 	{ "pal16l8a-d77-10.bin",	0x000104, 0x42f59227, BRF_OPT }, // 15
4352 	{ "palce16v8q-d77-11.bin",	0x000117, 0xeacc294e, BRF_OPT }, // 16
4353 	{ "palce16v8q-d77-12.bin",	0x000117, 0xe9920cfe, BRF_OPT }, // 17
4354 	{ "palce16v8q-d77-13.bin",	0x000117, 0x66e32e73, BRF_OPT }, // 18
4355 };
4356 
4357 STD_ROM_PICK(spcinv95)
STD_ROM_FN(spcinv95)4358 STD_ROM_FN(spcinv95)
4359 
4360 static INT32 spcinv95Init()
4361 {
4362 	return DrvInit(NULL, f3_24bit_palette_update, 0, SPCINV95, 1, 0x408100);
4363 }
4364 
4365 struct BurnDriver BurnDrvSpcinv95 = {
4366 	"spcinv95", NULL, NULL, NULL, "1995",
4367 	"Space Invaders '95: The Attack Of Lunar Loonies (Ver 2.5O 1995/06/14)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
4368 	NULL, NULL, NULL, NULL,
4369 	BDF_GAME_WORKING | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_TAITO_MISC, GBF_VERSHOOT, 0,
4370 	NULL, spcinv95RomInfo, spcinv95RomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
4371 	spcinv95Init, DrvExit, DrvFrame, DrvDraw224A, DrvScan, &TaitoF3PalRecalc, 0x2000,
4372 	224, 320, 3, 4
4373 };
4374 
4375 
4376 // Space Invaders '95: The Attack Of Lunar Loonies (Ver 2.5A 1995/06/14)
4377 
4378 static struct BurnRomInfo spcinv95uRomDesc[] = {
4379 	{ "e06-14.20",		0x020000, 0x71ba7f00, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
4380 	{ "e06-13.19",		0x020000, 0xf506ba4b, TAITO_68KROM1_BYTESWAP32 }, //  1
4381 	{ "e06-12.18",		0x020000, 0x06cbd72b, TAITO_68KROM1_BYTESWAP32 }, //  2
4382 	{ "e06-15.17",		0x020000, 0xa6ec0103, TAITO_68KROM1_BYTESWAP32 }, //  3
4383 
4384 	{ "e06-03",		0x100000, 0xa24070ef, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
4385 	{ "e06-02",		0x100000, 0x8f646dea, TAITO_SPRITESA_BYTESWAP },  //  5
4386 	{ "e06-01",		0x100000, 0x51721b15, TAITO_SPRITESA },           //  6
4387 
4388 	{ "e06-08",		0x100000, 0x72ae2fbf, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
4389 	{ "e06-07",		0x100000, 0x4b02e8f5, TAITO_CHARS_BYTESWAP },     //  8
4390 	{ "e06-06",		0x100000, 0x9380db3c, TAITO_CHARS },              //  9
4391 
4392 	{ "e06-09.32",		0x040000, 0x9bcafc87, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
4393 	{ "e06-10.33",		0x040000, 0xb752b61f, TAITO_68KROM2_BYTESWAP },   // 11
4394 
4395 	{ "e06-04",		0x200000, 0x1dac29df, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
4396 	{ "e06-05",		0x200000, 0xf370ff15, TAITO_ES5505_BYTESWAP },    // 13
4397 
4398 	{ "pal16l8a-d77-09.bin",	0x000104, 0xb371532b, BRF_OPT }, // 14 plds
4399 	{ "pal16l8a-d77-10.bin",	0x000104, 0x42f59227, BRF_OPT }, // 15
4400 	{ "palce16v8q-d77-11.bin",	0x000117, 0xeacc294e, BRF_OPT }, // 16
4401 	{ "palce16v8q-d77-12.bin",	0x000117, 0xe9920cfe, BRF_OPT }, // 17
4402 	{ "palce16v8q-d77-13.bin",	0x000117, 0x66e32e73, BRF_OPT }, // 18
4403 };
4404 
4405 STD_ROM_PICK(spcinv95u)
4406 STD_ROM_FN(spcinv95u)
4407 
4408 struct BurnDriver BurnDrvSpcinv95u = {
4409 	"spcinv95u", "spcinv95", NULL, NULL, "1995",
4410 	"Space Invaders '95: The Attack Of Lunar Loonies (Ver 2.5A 1995/06/14)\0", NULL, "Taito America Corporation", "Taito F3 System",
4411 	NULL, NULL, NULL, NULL,
4412 	BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_TAITO_MISC, GBF_VERSHOOT, 0,
4413 	NULL, spcinv95uRomInfo, spcinv95uRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
4414 	spcinv95Init, DrvExit, DrvFrame, DrvDraw224A, DrvScan, &TaitoF3PalRecalc, 0x2000,
4415 	224, 320, 3, 4
4416 };
4417 
4418 
4419 // Akkanbeder (Ver 2.5J 1995/06/14)
4420 
4421 static struct BurnRomInfo akkanvdrRomDesc[] = {
4422 	{ "e06-14.20",		0x020000, 0x71ba7f00, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
4423 	{ "e06-13.19",		0x020000, 0xf506ba4b, TAITO_68KROM1_BYTESWAP32 }, //  1
4424 	{ "e06-12.18",		0x020000, 0x06cbd72b, TAITO_68KROM1_BYTESWAP32 }, //  2
4425 	{ "e06-11.17",		0x020000, 0x3fe550b9, TAITO_68KROM1_BYTESWAP32 }, //  3
4426 
4427 	{ "e06-03",		0x100000, 0xa24070ef, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
4428 	{ "e06-02",		0x100000, 0x8f646dea, TAITO_SPRITESA_BYTESWAP },  //  5
4429 	{ "e06-01",		0x100000, 0x51721b15, TAITO_SPRITESA },           //  6
4430 
4431 	{ "e06-08",		0x100000, 0x72ae2fbf, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
4432 	{ "e06-07",		0x100000, 0x4b02e8f5, TAITO_CHARS_BYTESWAP },     //  8
4433 	{ "e06-06",		0x100000, 0x9380db3c, TAITO_CHARS },              //  9
4434 
4435 	{ "e06-09.32",		0x040000, 0x9bcafc87, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
4436 	{ "e06-10.33",		0x040000, 0xb752b61f, TAITO_68KROM2_BYTESWAP },   // 11
4437 
4438 	{ "e06-04",		0x200000, 0x1dac29df, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
4439 	{ "e06-05",		0x200000, 0xf370ff15, TAITO_ES5505_BYTESWAP },    // 13
4440 };
4441 
4442 STD_ROM_PICK(akkanvdr)
4443 STD_ROM_FN(akkanvdr)
4444 
4445 struct BurnDriver BurnDrvAkkanvdr = {
4446 	"akkanvdr", "spcinv95", NULL, NULL, "1995",
4447 	"Akkanbeder (Ver 2.5J 1995/06/14)\0", NULL, "Taito Corporation", "Taito F3 System",
4448 	NULL, NULL, NULL, NULL,
4449 	BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_TAITO_MISC, GBF_VERSHOOT, 0,
4450 	NULL, akkanvdrRomInfo, akkanvdrRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
4451 	spcinv95Init, DrvExit, DrvFrame, DrvDraw224A, DrvScan, &TaitoF3PalRecalc, 0x2000,
4452 	224, 320, 3, 4
4453 };
4454 
4455 
4456 // Elevator Action Returns (Ver 2.2O 1995/02/20)
4457 
4458 static struct BurnRomInfo elvactrRomDesc[] = {
4459 	{ "e02-12.20",		0x080000, 0xea5f5a32, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
4460 	{ "e02-11.19",		0x080000, 0xbcced8ff, TAITO_68KROM1_BYTESWAP32 }, //  1
4461 	{ "e02-10.18",		0x080000, 0x72f1b952, TAITO_68KROM1_BYTESWAP32 }, //  2
4462 	{ "e02-16.17",		0x080000, 0xcd97182b, TAITO_68KROM1_BYTESWAP32 }, //  3
4463 
4464 	{ "e02-03.12",		0x200000, 0xc884ebb5, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
4465 	{ "e02-02.8",		0x200000, 0xc8e06cfb, TAITO_SPRITESA_BYTESWAP },  //  5
4466 	{ "e02-01.4",		0x200000, 0x2ba94726, TAITO_SPRITESA },           //  6
4467 
4468 	{ "e02-08.47",		0x200000, 0x29c9bd02, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
4469 	{ "e02-07.45",		0x200000, 0x5eeee925, TAITO_CHARS_BYTESWAP },     //  8
4470 	{ "e02-06.43",		0x200000, 0x4c8726e9, TAITO_CHARS },              //  9
4471 
4472 	{ "e02-13.32",		0x040000, 0x80932702, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
4473 	{ "e02-14.33",		0x040000, 0x706671a5, TAITO_68KROM2_BYTESWAP },   // 11
4474 
4475 	{ "e02-04.38",		0x200000, 0xb74307af, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
4476 	{ "e02-05.39",		0x200000, 0xeb729855, TAITO_ES5505_BYTESWAP },    // 13
4477 
4478 	{ "ampal20l10a.a12",	0x0000cc, 0xe719542f, BRF_OPT }, // 14 plds
4479 	{ "pal20l10b.a24",	0x0000cc, 0x00000000, BRF_OPT | BRF_NODUMP }, // 15
4480 	{ "pal16l8b.b24",	0x000104, 0x0b73a7d1, BRF_OPT }, // 16
4481 	{ "pal16l8b.b57",	0x000104, 0x74b4d8be, BRF_OPT }, // 17
4482 	{ "pal16l8b.b58",	0x000104, 0x17e2c9b8, BRF_OPT }, // 18
4483 	{ "pal16l8b.b59",	0x000104, 0xdc0db200, BRF_OPT }, // 19
4484 	{ "pal16l8b.b64",	0x000104, 0x3aed3d98, BRF_OPT }, // 20
4485 };
4486 
4487 STD_ROM_PICK(elvactr)
STD_ROM_FN(elvactr)4488 STD_ROM_FN(elvactr)
4489 
4490 static INT32 elvactrInit()
4491 {
4492 	return DrvInit(NULL, f3_24bit_palette_update, 1, EACTION2, 2, 0x4007a2);
4493 }
4494 
4495 struct BurnDriver BurnDrvElvactr = {
4496 	"elvactr", NULL, NULL, NULL, "1994",
4497 	"Elevator Action Returns (Ver 2.2O 1995/02/20)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
4498 	NULL, NULL, NULL, NULL,
4499 	BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_PLATFORM, 0,
4500 	NULL, elvactrRomInfo, elvactrRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
4501 	elvactrInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
4502 	320, 232, 4, 3
4503 };
4504 
4505 
4506 // Elevator Action Returns (Ver 2.2J 1995/02/20)
4507 
4508 static struct BurnRomInfo elvactrjRomDesc[] = {
4509 	{ "e02-12.20",		0x080000, 0xea5f5a32, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
4510 	{ "e02-11.19",		0x080000, 0xbcced8ff, TAITO_68KROM1_BYTESWAP32 }, //  1
4511 	{ "e02-10.18",		0x080000, 0x72f1b952, TAITO_68KROM1_BYTESWAP32 }, //  2
4512 	{ "e02-09.17",		0x080000, 0x23997907, TAITO_68KROM1_BYTESWAP32 }, //  3
4513 
4514 	{ "e02-03.12",		0x200000, 0xc884ebb5, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
4515 	{ "e02-02.8",		0x200000, 0xc8e06cfb, TAITO_SPRITESA_BYTESWAP },  //  5
4516 	{ "e02-01.4",		0x200000, 0x2ba94726, TAITO_SPRITESA },           //  6
4517 
4518 	{ "e02-08.47",		0x200000, 0x29c9bd02, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
4519 	{ "e02-07.45",		0x200000, 0x5eeee925, TAITO_CHARS_BYTESWAP },     //  8
4520 	{ "e02-06.43",		0x200000, 0x4c8726e9, TAITO_CHARS },              //  9
4521 
4522 	{ "e02-13.32",		0x040000, 0x80932702, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
4523 	{ "e02-14.33",		0x040000, 0x706671a5, TAITO_68KROM2_BYTESWAP },   // 11
4524 
4525 	{ "e02-04.38",		0x200000, 0xb74307af, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
4526 	{ "e02-05.39",		0x200000, 0xeb729855, TAITO_ES5505_BYTESWAP },    // 13
4527 };
4528 
4529 STD_ROM_PICK(elvactrj)
4530 STD_ROM_FN(elvactrj)
4531 
4532 struct BurnDriver BurnDrvElvactrj = {
4533 	"elvactrj", "elvactr", NULL, NULL, "1994",
4534 	"Elevator Action Returns (Ver 2.2J 1995/02/20)\0", NULL, "Taito Corporation", "Taito F3 System",
4535 	NULL, NULL, NULL, NULL,
4536 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PLATFORM, 0,
4537 	NULL, elvactrjRomInfo, elvactrjRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
4538 	elvactrInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
4539 	320, 232, 4, 3
4540 };
4541 
4542 
4543 // Elevator Action II (Ver 2.2A 1995/02/20)
4544 
4545 static struct BurnRomInfo elvact2uRomDesc[] = {
4546 	{ "e02-12.20",		0x080000, 0xea5f5a32, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
4547 	{ "e02-11.19",		0x080000, 0xbcced8ff, TAITO_68KROM1_BYTESWAP32 }, //  1
4548 	{ "e02-10.18",		0x080000, 0x72f1b952, TAITO_68KROM1_BYTESWAP32 }, //  2
4549 	{ "e02-15.17",		0x080000, 0xba9028bd, TAITO_68KROM1_BYTESWAP32 }, //  3
4550 
4551 	{ "e02-03.12",		0x200000, 0xc884ebb5, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
4552 	{ "e02-02.8",		0x200000, 0xc8e06cfb, TAITO_SPRITESA_BYTESWAP },  //  5
4553 	{ "e02-01.4",		0x200000, 0x2ba94726, TAITO_SPRITESA },           //  6
4554 
4555 	{ "e02-08.47",		0x200000, 0x29c9bd02, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
4556 	{ "e02-07.45",		0x200000, 0x5eeee925, TAITO_CHARS_BYTESWAP },     //  8
4557 	{ "e02-06.43",		0x200000, 0x4c8726e9, TAITO_CHARS },     //  9
4558 
4559 	{ "e02-13.32",		0x040000, 0x80932702, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
4560 	{ "e02-14.33",		0x040000, 0x706671a5, TAITO_68KROM2_BYTESWAP },   // 11
4561 
4562 	{ "e02-04.38",		0x200000, 0xb74307af, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
4563 	{ "e02-05.39",		0x200000, 0xeb729855, TAITO_ES5505_BYTESWAP },    // 13
4564 };
4565 
4566 STD_ROM_PICK(elvact2u)
4567 STD_ROM_FN(elvact2u)
4568 
4569 struct BurnDriver BurnDrvElvact2u = {
4570 	"elvact2u", "elvactr", NULL, NULL, "1994",
4571 	"Elevator Action II (Ver 2.2A 1995/02/20)\0", NULL, "Taito America Corporation", "Taito F3 System",
4572 	NULL, NULL, NULL, NULL,
4573 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PLATFORM, 0,
4574 	NULL, elvact2uRomInfo, elvact2uRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
4575 	elvactrInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
4576 	320, 232, 4, 3
4577 };
4578 
4579 
4580 // Twin Qix (Ver 1.0A 1995/01/17) (Prototype)
4581 
4582 static struct BurnRomInfo twinqixRomDesc[] = {
4583 	{ "mpr0-3.b60",		0x40000, 0x1a63d0de, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
4584 	{ "mpr0-2.b61",		0x40000, 0x45a70987, TAITO_68KROM1_BYTESWAP32 }, //  1
4585 	{ "mpr0-1.b62",		0x40000, 0x531f9447, TAITO_68KROM1_BYTESWAP32 }, //  2
4586 	{ "mpr0-0.b63",		0x40000, 0xa4c44c11, TAITO_68KROM1_BYTESWAP32 }, //  3
4587 
4588 	{ "obj0-0.a08",		0x80000, 0xc6ea845c, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
4589 	{ "obj0-1.a20",		0x80000, 0x8c12b7fb, TAITO_SPRITESA_BYTESWAP },  //  5
4590 
4591 	{ "scr0-0.b07",		0x80000, 0x9a1b9b34, TAITO_CHARS_BYTESWAP32 },   //  6 Layer Tiles
4592 	{ "scr0-2.b05",		0x80000, 0xcac6854b, TAITO_CHARS_BYTESWAP32 },   //  7
4593 	{ "scr0-1.b06",		0x80000, 0xe9bef879, TAITO_CHARS_BYTESWAP32 },   //  8
4594 	{ "scr0-3.b04",		0x80000, 0xce063034, TAITO_CHARS_BYTESWAP32 },   //  9
4595 	{ "scr0-4.b03",		0x80000, 0xd32280fe, TAITO_CHARS_BYTESWAP },     // 10
4596 	{ "scr0-5.b02",		0x80000, 0xfdd1a85b, TAITO_CHARS_BYTESWAP },     // 11
4597 
4598 	{ "spr0-1.b66",		0x40000, 0x4b20e99d, TAITO_68KROM2_BYTESWAP },   // 12 68k Code
4599 	{ "spr0-0.b65",		0x40000, 0x2569eb30, TAITO_68KROM2_BYTESWAP },   // 13
4600 
4601 	{ "snd-0.b43",		0x80000, 0xad5405a9, TAITO_ES5505_BYTESWAP },    // 14 Ensoniq Samples
4602 	{ "snd-1.b44",		0x80000, 0x274864af, TAITO_ES5505_BYTESWAP },    // 15
4603 	{ "snd-14.b10",		0x80000, 0x26312451, TAITO_ES5505_BYTESWAP },    // 16
4604 	{ "snd-15.b11",		0x80000, 0x2edaa9dc, TAITO_ES5505_BYTESWAP },    // 17
4605 
4606 	{ "pal20l10a.a12",	0x0cc, 0x00000000, 0 | BRF_NODUMP },       		   // 18 plds
4607 	{ "pal20l10a.a24",	0x0cc, 0x00000000, 0 | BRF_NODUMP },       		   // 19
4608 	{ "pal16l8b.b24",	0x104, 0x0b73a7d1, 0 },                    // 20
4609 	{ "pal16l8b.b57",	0x104, 0x74b4d8be, 0 },                    // 21
4610 	{ "pal16l8b.b58",	0x104, 0x17e2c9b8, 0 },                    // 22
4611 	{ "pal16l8b.b59",	0x104, 0xdc0db200, 0 },                    // 23
4612 	{ "pal16l8b.b64",	0x104, 0x3aed3d98, 0 },                    // 24
4613 };
4614 
4615 STD_ROM_PICK(twinqix)
STD_ROM_FN(twinqix)4616 STD_ROM_FN(twinqix)
4617 
4618 static INT32 twinqixInit()
4619 {
4620 	return DrvInit(NULL/*twinqixRomCallback*/, f3_21bit_typeB_palette_update, 1, TWINQIX, 1, 0x40011c);
4621 }
4622 
4623 struct BurnDriver BurnDrvTwinqix = {
4624 	"twinqix", NULL, NULL, NULL, "1995",
4625 	"Twin Qix (Ver 1.0A 1995/01/17) (Prototype)\0", NULL, "Taito America Corporation", "Taito F3 System",
4626 	NULL, NULL, NULL, NULL,
4627 	BDF_GAME_WORKING | BDF_PROTOTYPE, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0,
4628 	NULL, twinqixRomInfo, twinqixRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
4629 	twinqixInit, DrvExit, DrvFrame, DrvDraw224A, DrvScan, &TaitoF3PalRecalc, 0x2000,
4630 	320, 224, 4, 3
4631 };
4632 
4633 
4634 // Moriguchi Hiroko no Quiz de Hyuu!Hyuu! (Ver 2.2J 1995/05/25)
4635 
4636 static struct BurnRomInfo quizhuhuRomDesc[] = {
4637 	{ "e08-16.20",		0x080000, 0xfaa8f373, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
4638 	{ "e08-15.19",		0x080000, 0x23acf231, TAITO_68KROM1_BYTESWAP32 }, //  1
4639 	{ "e08-14.18",		0x080000, 0x33a4951d, TAITO_68KROM1_BYTESWAP32 }, //  2
4640 	{ "e08-13.17",		0x080000, 0x0936fd2a, TAITO_68KROM1_BYTESWAP32 }, //  3
4641 
4642 	{ "e08-06.12",		0x200000, 0x8dadc9ac, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
4643 	{ "e08-04.8",		0x200000, 0x5423721d, TAITO_SPRITESA_BYTESWAP },  //  5
4644 	{ "e08-05.11",		0x100000, 0x79d2e516, TAITO_SPRITESA_BYTESWAP },  //  6
4645 	{ "e08-03.7",		0x100000, 0x07b9ab6a, TAITO_SPRITESA_BYTESWAP },  //  7
4646 	{ "e08-02.4",		0x200000, 0xd89eb067, TAITO_SPRITESA },           //  8
4647 	{ "e08-01.3",		0x100000, 0x90223c06, TAITO_SPRITESA },           //  9
4648 
4649 	{ "e08-12.47",		0x100000, 0x6c711d36, TAITO_CHARS_BYTESWAP },     // 10 Layer Tiles
4650 	{ "e08-11.45",		0x100000, 0x56775a60, TAITO_CHARS_BYTESWAP },     // 11
4651 	{ "e08-10.43",		0x100000, 0x60abc71b, TAITO_CHARS },              // 12
4652 
4653 	{ "e08-18.32",		0x020000, 0xe695497e, TAITO_68KROM2_BYTESWAP },   // 13 68k Code
4654 	{ "e08-17.33",		0x020000, 0xfafc7e4e, TAITO_68KROM2_BYTESWAP },   // 14
4655 
4656 	{ "e08-07.38",		0x200000, 0xc05dc85b, TAITO_ES5505_BYTESWAP },    // 15 Ensoniq Samples
4657 	{ "e08-08.39",		0x200000, 0x3eb94a99, TAITO_ES5505_BYTESWAP },    // 16
4658 	{ "e08-09.41",		0x200000, 0x200b26ee, TAITO_ES5505_BYTESWAP },    // 17
4659 };
4660 
4661 STD_ROM_PICK(quizhuhu)
STD_ROM_FN(quizhuhu)4662 STD_ROM_FN(quizhuhu)
4663 
4664 static INT32 quizhuhuInit()
4665 {
4666 	return DrvInit(NULL, f3_24bit_palette_update, 1, QUIZHUHU, 1, 0);
4667 }
4668 
4669 struct BurnDriver BurnDrvQuizhuhu = {
4670 	"quizhuhu", NULL, NULL, NULL, "1995",
4671 	"Moriguchi Hiroko no Quiz de Hyuu!Hyuu! (Ver 2.2J 1995/05/25)\0", NULL, "Taito Corporation", "Taito F3 System",
4672 	NULL, NULL, NULL, NULL,
4673 	BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_QUIZ, 0,
4674 	NULL, quizhuhuRomInfo, quizhuhuRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
4675 	quizhuhuInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
4676 	320, 232, 4, 3
4677 };
4678 
4679 
4680 // Puzzle Bobble 2 (Ver 2.3O 1995/07/31)
4681 
4682 static struct BurnRomInfo pbobble2RomDesc[] = {
4683 	{ "e10-24.bin",		0x040000, 0xf9d0794b, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
4684 	{ "e10-23.bin",		0x040000, 0x56a66435, TAITO_68KROM1_BYTESWAP32 }, //  1
4685 	{ "e10-22.bin",		0x040000, 0x7b12105d, TAITO_68KROM1_BYTESWAP32 }, //  2
4686 	{ "e10-25.bin",		0x040000, 0xff0407d3, TAITO_68KROM1_BYTESWAP32 }, //  3
4687 
4688 	{ "e10-02.rom",		0x100000, 0xc0564490, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
4689 	{ "e10-01.rom",		0x100000, 0x8c26ff49, TAITO_SPRITESA_BYTESWAP },  //  5
4690 
4691 	{ "e10-07.rom",		0x100000, 0xdcb3c29b, TAITO_CHARS_BYTESWAP },     //  6 Layer Tiles
4692 	{ "e10-06.rom",		0x100000, 0x1b0f20e2, TAITO_CHARS_BYTESWAP },     //  7
4693 	{ "e10-05.rom",		0x100000, 0x81266151, TAITO_CHARS },              //  8
4694 
4695 	{ "e10-12.32",		0x040000, 0xb92dc8ad, TAITO_68KROM2_BYTESWAP },   //  9 68k Code
4696 	{ "e10-13.33",		0x040000, 0x87842c13, TAITO_68KROM2_BYTESWAP },   // 10
4697 
4698 	{ "e10-04.rom",		0x200000, 0x5c0862a6, TAITO_ES5505_BYTESWAP },    // 11 Ensoniq Samples
4699 	{ "e10-03.rom",		0x200000, 0x46d68ac8, TAITO_ES5505_BYTESWAP },    // 12
4700 
4701 	{ "e10-21.bin",		0x000117, 0x458499b7, BRF_OPT }, // 13 extra
4702 };
4703 
4704 STD_ROM_PICK(pbobble2)
STD_ROM_FN(pbobble2)4705 STD_ROM_FN(pbobble2)
4706 
4707 static INT32 pbobble2Init()
4708 {
4709 	return DrvInit(NULL, f3_24bit_palette_update, 0, PBOBBLE2, 1, 0x40451c);
4710 }
4711 
pbobble23OCallback()4712 static INT32 pbobble23OCallback()
4713 {
4714 	UINT32 *ROM = (UINT32 *)Taito68KRom1;
4715 
4716 	ROM[0x40090/4] = BURN_ENDIAN_SWAP_INT32(0x4e71815c);
4717 	ROM[0x40094/4] = BURN_ENDIAN_SWAP_INT32(0x4e714e71);
4718 
4719 	return 0;
4720 }
4721 
pbobble23OInit()4722 static INT32 pbobble23OInit()
4723 {
4724 	return DrvInit(pbobble23OCallback, f3_24bit_palette_update, 0, PBOBBLE2, 1, 0x40451c);
4725 }
4726 
4727 struct BurnDriver BurnDrvPbobble2 = {
4728 	"pbobble2", NULL, NULL, NULL, "1995",
4729 	"Puzzle Bobble 2 (Ver 2.3O 1995/07/31)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
4730 	NULL, NULL, NULL, NULL,
4731 	BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0,
4732 	NULL, pbobble2RomInfo, pbobble2RomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
4733 	pbobble23OInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
4734 	320, 232, 4, 3
4735 };
4736 
4737 
4738 // Puzzle Bobble 2 (Ver 2.2O 1995/07/20)
4739 
4740 static struct BurnRomInfo pbobble2oRomDesc[] = {
4741 	{ "e10-11.20",		0x040000, 0xb82f81da, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
4742 	{ "e10-10.19",		0x040000, 0xf432267a, TAITO_68KROM1_BYTESWAP32 }, //  1
4743 	{ "e10-09.18",		0x040000, 0xe0b1b599, TAITO_68KROM1_BYTESWAP32 }, //  2
4744 	{ "e10-15.17",		0x040000, 0xa2c0a268, TAITO_68KROM1_BYTESWAP32 }, //  3
4745 
4746 	{ "e10-02.rom",		0x100000, 0xc0564490, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
4747 	{ "e10-01.rom",		0x100000, 0x8c26ff49, TAITO_SPRITESA_BYTESWAP },  //  5
4748 
4749 	{ "e10-07.rom",		0x100000, 0xdcb3c29b, TAITO_CHARS_BYTESWAP },     //  6 Layer Tiles
4750 	{ "e10-06.rom",		0x100000, 0x1b0f20e2, TAITO_CHARS_BYTESWAP },     //  7
4751 	{ "e10-05.rom",		0x100000, 0x81266151, TAITO_CHARS },              //  8
4752 
4753 	{ "e10-12.32",		0x040000, 0xb92dc8ad, TAITO_68KROM2_BYTESWAP },   //  9 68k Code
4754 	{ "e10-13.33",		0x040000, 0x87842c13, TAITO_68KROM2_BYTESWAP },   // 10
4755 
4756 	{ "e10-04.rom",		0x200000, 0x5c0862a6, TAITO_ES5505_BYTESWAP },    // 11 Ensoniq Samples
4757 	{ "e10-03.rom",		0x200000, 0x46d68ac8, TAITO_ES5505_BYTESWAP },    // 12
4758 };
4759 
4760 STD_ROM_PICK(pbobble2o)
4761 STD_ROM_FN(pbobble2o)
4762 
4763 struct BurnDriver BurnDrvPbobble2o = {
4764 	"pbobble2o", "pbobble2", NULL, NULL, "1995",
4765 	"Puzzle Bobble 2 (Ver 2.2O 1995/07/20)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
4766 	NULL, NULL, NULL, NULL,
4767 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0,
4768 	NULL, pbobble2oRomInfo, pbobble2oRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
4769 	pbobble2Init, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
4770 	320, 232, 4, 3
4771 };
4772 
4773 
4774 // Puzzle Bobble 2 (Ver 2.2J 1995/07/20)
4775 
4776 static struct BurnRomInfo pbobble2jRomDesc[] = {
4777 	{ "e10-11.20",		0x040000, 0xb82f81da, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
4778 	{ "e10-10.19",		0x040000, 0xf432267a, TAITO_68KROM1_BYTESWAP32 }, //  1
4779 	{ "e10-09.18",		0x040000, 0xe0b1b599, TAITO_68KROM1_BYTESWAP32 }, //  2
4780 	{ "e10-08.17",		0x040000, 0x4ccec344, TAITO_68KROM1_BYTESWAP32 }, //  3
4781 
4782 	{ "e10-02.rom",		0x100000, 0xc0564490, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
4783 	{ "e10-01.rom",		0x100000, 0x8c26ff49, TAITO_SPRITESA_BYTESWAP },  //  5
4784 
4785 	{ "e10-07.rom",		0x100000, 0xdcb3c29b, TAITO_CHARS_BYTESWAP },     //  6 Layer Tiles
4786 	{ "e10-06.rom",		0x100000, 0x1b0f20e2, TAITO_CHARS_BYTESWAP },     //  7
4787 	{ "e10-05.rom",		0x100000, 0x81266151, TAITO_CHARS },              //  8
4788 
4789 	{ "e10-12.32",		0x040000, 0xb92dc8ad, TAITO_68KROM2_BYTESWAP },   //  9 68k Code
4790 	{ "e10-13.33",		0x040000, 0x87842c13, TAITO_68KROM2_BYTESWAP },   // 10
4791 
4792 	{ "e10-04.rom",		0x200000, 0x5c0862a6, TAITO_ES5505_BYTESWAP },    // 11 Ensoniq Samples
4793 	{ "e10-03.rom",		0x200000, 0x46d68ac8, TAITO_ES5505_BYTESWAP },    // 12
4794 };
4795 
4796 STD_ROM_PICK(pbobble2j)
4797 STD_ROM_FN(pbobble2j)
4798 
4799 struct BurnDriver BurnDrvPbobble2j = {
4800 	"pbobble2j", "pbobble2", NULL, NULL, "1995",
4801 	"Puzzle Bobble 2 (Ver 2.2J 1995/07/20)\0", NULL, "Taito Corporation", "Taito F3 System",
4802 	NULL, NULL, NULL, NULL,
4803 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0,
4804 	NULL, pbobble2jRomInfo, pbobble2jRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
4805 	pbobble2Init, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
4806 	320, 232, 4, 3
4807 };
4808 
4809 
4810 // Bust-A-Move Again (Ver 2.3A 1995/07/31)
4811 
4812 static struct BurnRomInfo pbobble2uRomDesc[] = {
4813 	{ "e10-20.20",		0x040000, 0x97eb15c6, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
4814 	{ "e10-19.19",		0x040000, 0x7082d796, TAITO_68KROM1_BYTESWAP32 }, //  1
4815 	{ "e10-18.18",		0x040000, 0x2ffa3ef2, TAITO_68KROM1_BYTESWAP32 }, //  2
4816 	{ "e10-14.17",		0x040000, 0x4a19ed67, TAITO_68KROM1_BYTESWAP32 }, //  3
4817 
4818 	{ "e10-02.rom",		0x100000, 0xc0564490, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
4819 	{ "e10-01.rom",		0x100000, 0x8c26ff49, TAITO_SPRITESA_BYTESWAP },  //  5
4820 
4821 	{ "e10-07.rom",		0x100000, 0xdcb3c29b, TAITO_CHARS_BYTESWAP },     //  6 Layer Tiles
4822 	{ "e10-06.rom",		0x100000, 0x1b0f20e2, TAITO_CHARS_BYTESWAP },     //  7
4823 	{ "e10-05.rom",		0x100000, 0x81266151, TAITO_CHARS },              //  8
4824 
4825 	{ "e10-16.32",		0x040000, 0x765ce77a, TAITO_68KROM2_BYTESWAP },   //  9 68k Code
4826 	{ "e10-17.33",		0x040000, 0x0aec3b1e, TAITO_68KROM2_BYTESWAP },   // 10
4827 
4828 	{ "e10-04.rom",		0x200000, 0x5c0862a6, TAITO_ES5505_BYTESWAP },    // 11 Ensoniq Samples
4829 	{ "e10-03.rom",		0x200000, 0x46d68ac8, TAITO_ES5505_BYTESWAP },    // 12
4830 };
4831 
4832 STD_ROM_PICK(pbobble2u)
4833 STD_ROM_FN(pbobble2u)
4834 
4835 struct BurnDriver BurnDrvPbobble2u = {
4836 	"pbobble2u", "pbobble2", NULL, NULL, "1995",
4837 	"Bust-A-Move Again (Ver 2.3A 1995/07/31)\0", NULL, "Taito America Corporation", "Taito F3 System",
4838 	NULL, NULL, NULL, NULL,
4839 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0,
4840 	NULL, pbobble2uRomInfo, pbobble2uRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
4841 	pbobble2Init, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
4842 	320, 232, 4, 3
4843 };
4844 
4845 
4846 // Puzzle Bobble 2X (Ver 2.2J 1995/11/11)
4847 
4848 static struct BurnRomInfo pbobble2xRomDesc[] = {
4849 	{ "e10-29.20",		0x040000, 0xf1e9ad3f, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
4850 	{ "e10-28.19",		0x040000, 0x412a3602, TAITO_68KROM1_BYTESWAP32 }, //  1
4851 	{ "e10-27.18",		0x040000, 0x88cc0b5c, TAITO_68KROM1_BYTESWAP32 }, //  2
4852 	{ "e10-26.17",		0x040000, 0xa5c24047, TAITO_68KROM1_BYTESWAP32 }, //  3
4853 
4854 	{ "e10-02.rom",		0x100000, 0xc0564490, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
4855 	{ "e10-01.rom",		0x100000, 0x8c26ff49, TAITO_SPRITESA_BYTESWAP },  //  5
4856 
4857 	{ "e10-07.rom",		0x100000, 0xdcb3c29b, TAITO_CHARS_BYTESWAP },     //  6 Layer Tiles
4858 	{ "e10-06.rom",		0x100000, 0x1b0f20e2, TAITO_CHARS_BYTESWAP },     //  7
4859 	{ "e10-05.rom",		0x100000, 0x81266151, TAITO_CHARS },              //  8
4860 
4861 	{ "e10-30.32",		0x040000, 0xbb090c1e, TAITO_68KROM2_BYTESWAP },   //  9 68k Code
4862 	{ "e10-31.33",		0x040000, 0xf4b88d65, TAITO_68KROM2_BYTESWAP },   // 10
4863 
4864 	{ "e10-04.rom",		0x200000, 0x5c0862a6, TAITO_ES5505_BYTESWAP },    // 11 Ensoniq Samples
4865 	{ "e10-03.rom",		0x200000, 0x46d68ac8, TAITO_ES5505_BYTESWAP },    // 12
4866 
4867 	{ "pal16l8a-d77-09.bin",	0x000104, 0xb371532b, BRF_OPT }, // 13 plds
4868 	{ "pal16l8a-d77-10.bin",	0x000104, 0x42f59227, BRF_OPT }, // 14
4869 	{ "palce16v8q-d77-11.bin",	0x000117, 0xeacc294e, BRF_OPT }, // 15
4870 	{ "palce16v8q-d77-12.bin",	0x000117, 0xe9920cfe, BRF_OPT }, // 16
4871 	{ "palce16v8q-d77-14.bin",	0x000117, 0x7427e777, BRF_OPT }, // 17
4872 };
4873 
4874 STD_ROM_PICK(pbobble2x)
4875 STD_ROM_FN(pbobble2x)
4876 
4877 struct BurnDriver BurnDrvPbobble2x = {
4878 	"pbobble2x", "pbobble2", NULL, NULL, "1995",
4879 	"Puzzle Bobble 2X (Ver 2.2J 1995/11/11)\0", NULL, "Taito Corporation", "Taito F3 System",
4880 	NULL, NULL, NULL, NULL,
4881 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0,
4882 	NULL, pbobble2xRomInfo, pbobble2xRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
4883 	pbobble2Init, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
4884 	320, 232, 4, 3
4885 };
4886 
4887 
4888 // Gekirindan (Ver 2.3O 1995/09/21)
4889 
4890 static struct BurnRomInfo gekiridnRomDesc[] = {
4891 	{ "e11-12.ic20",	0x040000, 0x6a7aaacf, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
4892 	{ "e11-11.ic19",	0x040000, 0x2284a08e, TAITO_68KROM1_BYTESWAP32 }, //  1
4893 	{ "e11-10.ic18",	0x040000, 0x8795e6ba, TAITO_68KROM1_BYTESWAP32 }, //  2
4894 	{ "e11-15.ic17",	0x040000, 0x5aef1fd8, TAITO_68KROM1_BYTESWAP32 }, //  3
4895 
4896 	{ "e11-03.ic12",	0x200000, 0xf73877c5, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
4897 	{ "e11-02.ic8",		0x200000, 0x5722a83b, TAITO_SPRITESA_BYTESWAP },  //  5
4898 	{ "e11-01.ic4",		0x200000, 0xc2cd1069, TAITO_SPRITESA },           //  6
4899 
4900 	{ "e11-08.ic47",	0x200000, 0x907f69d3, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
4901 	{ "e11-07.ic45",	0x200000, 0xef018607, TAITO_CHARS_BYTESWAP },     //  8
4902 	{ "e11-06.ic43",	0x200000, 0x200ce305, TAITO_CHARS },              //  9
4903 
4904 	{ "e11-13.ic32",	0x040000, 0xf5c5486a, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
4905 	{ "e11-14.ic33",	0x040000, 0x7fa10f96, TAITO_68KROM2_BYTESWAP },   // 11
4906 
4907 	{ "e11-04.ic38",	0x200000, 0xe0ff4fb1, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
4908 	{ "e11-05.ic41",	0x200000, 0xa4d08cf1, TAITO_ES5505_BYTESWAP },    // 13
4909 };
4910 
4911 STD_ROM_PICK(gekiridn)
STD_ROM_FN(gekiridn)4912 STD_ROM_FN(gekiridn)
4913 
4914 static INT32 gekiridnInit()
4915 {
4916 	return DrvInit(NULL, f3_24bit_palette_update, 0, GEKIRIDO, 1, 0x406bb0);
4917 }
4918 
4919 struct BurnDriver BurnDrvGekiridn = {
4920 	"gekiridn", NULL, NULL, NULL, "1995",
4921 	"Gekirindan (Ver 2.3O 1995/09/21)\0", NULL, "Taito Corporation", "Taito F3 System",
4922 	NULL, NULL, NULL, NULL,
4923 	BDF_GAME_WORKING | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_TAITO_MISC, GBF_VERSHOOT, 0,
4924 	NULL, gekiridnRomInfo, gekiridnRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
4925 	gekiridnInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
4926 	232, 320, 3, 4
4927 };
4928 
4929 
4930 // Gekirindan (Ver 2.3J 1995/09/21)
4931 
4932 static struct BurnRomInfo gekiridnjRomDesc[] = {
4933 	{ "e11-12.ic20",	0x040000, 0x6a7aaacf, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
4934 	{ "e11-11.ic19",	0x040000, 0x2284a08e, TAITO_68KROM1_BYTESWAP32 }, //  1
4935 	{ "e11-10.ic18",	0x040000, 0x8795e6ba, TAITO_68KROM1_BYTESWAP32 }, //  2
4936 	{ "e11-09.ic17",	0x040000, 0xb4e17ef4, TAITO_68KROM1_BYTESWAP32 }, //  3
4937 
4938 	{ "e11-03.ic12",	0x200000, 0xf73877c5, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
4939 	{ "e11-02.ic8",		0x200000, 0x5722a83b, TAITO_SPRITESA_BYTESWAP },  //  5
4940 	{ "e11-01.ic4",		0x200000, 0xc2cd1069, TAITO_SPRITESA },           //  6
4941 
4942 	{ "e11-08.ic47",	0x200000, 0x907f69d3, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
4943 	{ "e11-07.ic45",	0x200000, 0xef018607, TAITO_CHARS_BYTESWAP },     //  8
4944 	{ "e11-06.ic43",	0x200000, 0x200ce305, TAITO_CHARS },              //  9
4945 
4946 	{ "e11-13.ic32",	0x040000, 0xf5c5486a, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
4947 	{ "e11-14.ic33",	0x040000, 0x7fa10f96, TAITO_68KROM2_BYTESWAP },   // 11
4948 
4949 	{ "e11-04.ic38",	0x200000, 0xe0ff4fb1, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
4950 	{ "e11-05.ic41",	0x200000, 0xa4d08cf1, TAITO_ES5505_BYTESWAP },    // 13
4951 };
4952 
4953 STD_ROM_PICK(gekiridnj)
4954 STD_ROM_FN(gekiridnj)
4955 
4956 struct BurnDriver BurnDrvGekiridnj = {
4957 	"gekiridnj", "gekiridn", NULL, NULL, "1995",
4958 	"Gekirindan (Ver 2.3J 1995/09/21)\0", NULL, "Taito Corporation", "Taito F3 System",
4959 	NULL, NULL, NULL, NULL,
4960 	BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_TAITO_MISC, GBF_VERSHOOT, 0,
4961 	NULL, gekiridnjRomInfo, gekiridnjRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
4962 	gekiridnInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
4963 	232, 320, 3, 4
4964 };
4965 
4966 
4967 // Twin Cobra II (Ver 2.1O 1995/11/30)
4968 
4969 static struct BurnRomInfo tcobra2RomDesc[] = {
4970 	{ "e15-14.ic20",	0x040000, 0xb527b733, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
4971 	{ "e15-13.ic19",	0x040000, 0x0f03daf7, TAITO_68KROM1_BYTESWAP32 }, //  1
4972 	{ "e15-12.ic18",	0x040000, 0x59d832f2, TAITO_68KROM1_BYTESWAP32 }, //  2
4973 	{ "e15-18.ic17",	0x040000, 0x4908c3aa, TAITO_68KROM1_BYTESWAP32 }, //  3
4974 
4975 	{ "e15-04.ic12",	0x200000, 0x6ea8d9bd, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
4976 	{ "e15-02.ic8",		0x200000, 0xbf1232aa, TAITO_SPRITESA_BYTESWAP },  //  5
4977 	{ "e15-03.ic11",	0x100000, 0xbe45a52f, TAITO_SPRITESA_BYTESWAP },  //  6
4978 	{ "e15-01.ic7",		0x100000, 0x85421aac, TAITO_SPRITESA_BYTESWAP },  //  7
4979 
4980 	{ "e15-10.ic47",	0x200000, 0xd8c96b00, TAITO_CHARS_BYTESWAP },     //  8 Layer Tiles
4981 	{ "e15-08.ic45",	0x200000, 0x4bdb2bf3, TAITO_CHARS_BYTESWAP },     //  9
4982 	{ "e15-09.ic46",	0x100000, 0x07c29f60, TAITO_CHARS_BYTESWAP },     // 10
4983 	{ "e15-07.ic44",	0x100000, 0x8164f7ee, TAITO_CHARS_BYTESWAP },     // 11
4984 
4985 	{ "e15-15.ic32",	0x020000, 0x22126dfb, TAITO_68KROM2_BYTESWAP },   // 12 68k Code
4986 	{ "e15-16.ic33",	0x020000, 0xf8b58ea0, TAITO_68KROM2_BYTESWAP },   // 13
4987 
4988 	{ "e15-05.ic38",	0x200000, 0x3e5da5f6, TAITO_ES5505_BYTESWAP },    // 14 Ensoniq Samples
4989 	{ "e15-06.ic41",	0x200000, 0xb182a3e1, TAITO_ES5505_BYTESWAP },    // 15
4990 
4991 	{ "d77-12.ic48.bin", 	0x117, 0x6f93a4d8, BRF_OPT },
4992 	{ "d77-14.ic21.bin", 	0x117, 0xf2264f51, BRF_OPT },
4993 	{ "palce16v8.ic37.bin", 0x117, 0x6ccd8168, BRF_OPT },
4994 	{ "d77-09.ic14.bin", 	0x001, 0x00000000, BRF_NODUMP },
4995 	{ "d77-10.ic28.bin", 	0x001, 0x00000000, BRF_NODUMP },
4996 };
4997 
4998 STD_ROM_PICK(tcobra2)
STD_ROM_FN(tcobra2)4999 STD_ROM_FN(tcobra2)
5000 
5001 static INT32 tcobra2Init()
5002 {
5003 	INT32 rc = DrvInit(NULL, f3_24bit_palette_update, 0, KTIGER2, 0, 0);
5004 
5005 	if (!rc) {
5006 		ES550X_twincobra2_pan_fix = 1;
5007 	}
5008 
5009 	return rc;
5010 }
5011 
5012 struct BurnDriver BurnDrvTcobra2 = {
5013 	"tcobra2", NULL, NULL, NULL, "1995",
5014 	"Twin Cobra II (Ver 2.1O 1995/11/30)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
5015 	NULL, NULL, NULL, NULL,
5016 	BDF_GAME_WORKING | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_TAITO_MISC, GBF_VERSHOOT, 0,
5017 	NULL, tcobra2RomInfo, tcobra2RomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
5018 	tcobra2Init, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
5019 	232, 320, 3, 4
5020 };
5021 
5022 
5023 // Twin Cobra II (Ver 2.1A 1995/11/30)
5024 
5025 static struct BurnRomInfo tcobra2uRomDesc[] = {
5026 	{ "e15-14.ic20",	0x040000, 0xb527b733, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
5027 	{ "e15-13.ic19",	0x040000, 0x0f03daf7, TAITO_68KROM1_BYTESWAP32 }, //  1
5028 	{ "e15-12.ic18",	0x040000, 0x59d832f2, TAITO_68KROM1_BYTESWAP32 }, //  2
5029 	{ "e15-17.ic17",	0x040000, 0x3e0ff33c, TAITO_68KROM1_BYTESWAP32 }, //  3
5030 
5031 	{ "e15-04.ic12",	0x200000, 0x6ea8d9bd, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
5032 	{ "e15-02.ic8",		0x200000, 0xbf1232aa, TAITO_SPRITESA_BYTESWAP },  //  5
5033 	{ "e15-03.ic11",	0x100000, 0xbe45a52f, TAITO_SPRITESA_BYTESWAP },  //  6
5034 	{ "e15-01.ic7",		0x100000, 0x85421aac, TAITO_SPRITESA_BYTESWAP },  //  7
5035 
5036 	{ "e15-10.ic47",	0x200000, 0xd8c96b00, TAITO_CHARS_BYTESWAP },     //  8 Layer Tiles
5037 	{ "e15-08.ic45",	0x200000, 0x4bdb2bf3, TAITO_CHARS_BYTESWAP },     //  9
5038 	{ "e15-09.ic46",	0x100000, 0x07c29f60, TAITO_CHARS_BYTESWAP },     // 10
5039 	{ "e15-07.ic44",	0x100000, 0x8164f7ee, TAITO_CHARS_BYTESWAP },     // 11
5040 
5041 	{ "e15-15.ic32",	0x020000, 0x22126dfb, TAITO_68KROM2_BYTESWAP },   // 12 68k Code
5042 	{ "e15-16.ic33",	0x020000, 0xf8b58ea0, TAITO_68KROM2_BYTESWAP },   // 13
5043 
5044 	{ "e15-05.ic38",	0x200000, 0x3e5da5f6, TAITO_ES5505_BYTESWAP },    // 14 Ensoniq Samples
5045 	{ "e15-06.ic41",	0x200000, 0xb182a3e1, TAITO_ES5505_BYTESWAP },    // 15
5046 
5047 	{ "d77-12.ic48.bin", 0x117, 0x6f93a4d8, BRF_OPT },
5048 	{ "d77-14.ic21.bin", 0x117, 0xf2264f51, BRF_OPT },
5049 	{ "palce16v8.ic37.bin", 0x117, 0x6ccd8168, BRF_OPT },
5050 	{ "d77-09.ic14.bin", 0x001, 0x00000000, BRF_NODUMP },
5051 	{ "d77-10.ic28.bin", 0x001, 0x00000000, BRF_NODUMP },
5052 };
5053 
5054 STD_ROM_PICK(tcobra2u)
5055 STD_ROM_FN(tcobra2u)
5056 
5057 struct BurnDriver BurnDrvTcobra2u = {
5058 	"tcobra2u", "tcobra2", NULL, NULL, "1995",
5059 	"Twin Cobra II (Ver 2.1A 1995/11/30)\0", NULL, "Taito America Corporation", "Taito F3 System",
5060 	NULL, NULL, NULL, NULL,
5061 	BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_TAITO_MISC, GBF_VERSHOOT, 0,
5062 	NULL, tcobra2uRomInfo, tcobra2uRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
5063 	tcobra2Init, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
5064 	232, 320, 3, 4
5065 };
5066 
5067 
5068 // Kyukyoku Tiger II (Ver 2.1J 1995/11/30)
5069 
5070 static struct BurnRomInfo ktiger2RomDesc[] = {
5071 	{ "e15-14.ic20",	0x040000, 0xb527b733, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
5072 	{ "e15-13.ic19",	0x040000, 0x0f03daf7, TAITO_68KROM1_BYTESWAP32 }, //  1
5073 	{ "e15-12.ic18",	0x040000, 0x59d832f2, TAITO_68KROM1_BYTESWAP32 }, //  2
5074 	{ "e15-11.ic17",	0x040000, 0xa706a286, TAITO_68KROM1_BYTESWAP32 }, //  3
5075 
5076 	{ "e15-04.ic12",	0x200000, 0x6ea8d9bd, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
5077 	{ "e15-02.ic8",		0x200000, 0xbf1232aa, TAITO_SPRITESA_BYTESWAP },  //  5
5078 	{ "e15-03.ic11",	0x100000, 0xbe45a52f, TAITO_SPRITESA_BYTESWAP },  //  6
5079 	{ "e15-01.ic7",		0x100000, 0x85421aac, TAITO_SPRITESA_BYTESWAP },  //  7
5080 
5081 	{ "e15-10.ic47",	0x200000, 0xd8c96b00, TAITO_CHARS_BYTESWAP },     //  8 Layer Tiles
5082 	{ "e15-08.ic45",	0x200000, 0x4bdb2bf3, TAITO_CHARS_BYTESWAP },     //  9
5083 	{ "e15-09.ic46",	0x100000, 0x07c29f60, TAITO_CHARS_BYTESWAP },     // 10
5084 	{ "e15-07.ic44",	0x100000, 0x8164f7ee, TAITO_CHARS_BYTESWAP },     // 11
5085 
5086 	{ "e15-15.ic32",	0x020000, 0x22126dfb, TAITO_68KROM2_BYTESWAP },   // 12 68k Code
5087 	{ "e15-16.ic33",	0x020000, 0xf8b58ea0, TAITO_68KROM2_BYTESWAP },   // 13
5088 
5089 	{ "e15-05.ic38",	0x200000, 0x3e5da5f6, TAITO_ES5505_BYTESWAP },    // 14 Ensoniq Samples
5090 	{ "e15-06.ic41",	0x200000, 0xb182a3e1, TAITO_ES5505_BYTESWAP },    // 15
5091 
5092 	{ "d77-12.ic48.bin", 0x117, 0x6f93a4d8, BRF_OPT },
5093 	{ "d77-14.ic21.bin", 0x117, 0xf2264f51, BRF_OPT },
5094 	{ "palce16v8.ic37.bin", 0x117, 0x6ccd8168, BRF_OPT },
5095 	{ "d77-09.ic14.bin", 0x001, 0x00000000, BRF_NODUMP },
5096 	{ "d77-10.ic28.bin", 0x001, 0x00000000, BRF_NODUMP },
5097 };
5098 
5099 STD_ROM_PICK(ktiger2)
5100 STD_ROM_FN(ktiger2)
5101 
5102 struct BurnDriver BurnDrvKtiger2 = {
5103 	"ktiger2", "tcobra2", NULL, NULL, "1995",
5104 	"Kyukyoku Tiger II (Ver 2.1J 1995/11/30)\0", NULL, "Taito Corporation", "Taito F3 System",
5105 	NULL, NULL, NULL, NULL,
5106 	BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_TAITO_MISC, GBF_VERSHOOT, 0,
5107 	NULL, ktiger2RomInfo, ktiger2RomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
5108 	tcobra2Init, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
5109 	232, 320, 3, 4
5110 };
5111 
5112 
5113 // Bubble Memories: The Story Of Bubble Bobble III (Ver 2.4O 1996/02/15)
5114 
5115 static struct BurnRomInfo bubblemRomDesc[] = {
5116 	{ "e21-21.20",		0x080000, 0xcac4169c, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
5117 	{ "e21-20.19",		0x080000, 0x7727c673, TAITO_68KROM1_BYTESWAP32 }, //  1
5118 	{ "e21-19.18",		0x080000, 0xbe0b907d, TAITO_68KROM1_BYTESWAP32 }, //  2
5119 	{ "e21-18.17",		0x080000, 0xd14e313a, TAITO_68KROM1_BYTESWAP32 }, //  3
5120 
5121 	{ "e21-02.rom",		0x200000, 0xb7cb9232, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
5122 	{ "e21-01.rom",		0x200000, 0xa11f2f99, TAITO_SPRITESA_BYTESWAP },  //  5
5123 
5124 	{ "e21-07.rom",		0x100000, 0x7789bf7c, TAITO_CHARS_BYTESWAP },     //  6 Layer Tiles
5125 	{ "e21-06.rom",		0x100000, 0x997fc0d7, TAITO_CHARS_BYTESWAP },     //  7
5126 	{ "e21-05.rom",		0x100000, 0x07eab58f, TAITO_CHARS },              //  8
5127 
5128 	{ "e21-12.32",		0x040000, 0x34093de1, TAITO_68KROM2_BYTESWAP },   //  9 68k Code
5129 	{ "e21-13.33",		0x040000, 0x9e9ec437, TAITO_68KROM2_BYTESWAP },   // 10
5130 
5131 	{ "e21-03.rom",		0x200000, 0x54c5f83d, TAITO_ES5505_BYTESWAP },    // 11 Ensoniq Samples
5132 	{ "e21-04.rom",		0x200000, 0xe5af2a2d, TAITO_ES5505_BYTESWAP },    // 12
5133 
5134 	{ "bubblem.nv",		0x000080, 0x9a59326e, TAITO_DEFAULT_EEPROM },     // 13 eeprom
5135 };
5136 
5137 STD_ROM_PICK(bubblem)
STD_ROM_FN(bubblem)5138 STD_ROM_FN(bubblem)
5139 
5140 static INT32 bubblemInit()
5141 {
5142 	return DrvInit(NULL, f3_24bit_palette_update, 1, BUBBLEM, 1, 0x40011c);
5143 }
5144 
5145 struct BurnDriver BurnDrvBubblem = {
5146 	"bubblem", NULL, NULL, NULL, "1995",
5147 	"Bubble Memories: The Story Of Bubble Bobble III (Ver 2.4O 1996/02/15)\0", NULL, "Taito Corporation Japan", "Taito F3 System",
5148 	NULL, NULL, NULL, NULL,
5149 	BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_PLATFORM, 0,
5150 	NULL, bubblemRomInfo, bubblemRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
5151 	bubblemInit, DrvExit, DrvFrame, DrvDraw224A, DrvScan, &TaitoF3PalRecalc, 0x2000,
5152 	320, 224, 4, 3
5153 };
5154 
5155 
5156 // Bubble Memories: The Story Of Bubble Bobble III (Ver 2.5A 1996/02/21)
5157 
5158 static struct BurnRomInfo bubblemuRomDesc[] = {
5159 	{ "e21-17.20",		0x080000, 0x0b72e8f1, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
5160 	{ "e21-16.19",		0x080000, 0xb47354cc, TAITO_68KROM1_BYTESWAP32 }, //  1
5161 	{ "e21-15.18",		0x080000, 0x64bf2c24, TAITO_68KROM1_BYTESWAP32 }, //  2
5162 	{ "e21-14.17",		0x080000, 0x48aecd47, TAITO_68KROM1_BYTESWAP32 }, //  3
5163 
5164 	{ "e21-02.rom",		0x200000, 0xb7cb9232, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
5165 	{ "e21-01.rom",		0x200000, 0xa11f2f99, TAITO_SPRITESA_BYTESWAP },  //  5
5166 
5167 	{ "e21-07.rom",		0x100000, 0x7789bf7c, TAITO_CHARS_BYTESWAP },     //  6 Layer Tiles
5168 	{ "e21-06.rom",		0x100000, 0x997fc0d7, TAITO_CHARS_BYTESWAP },     //  7
5169 	{ "e21-05.rom",		0x100000, 0x07eab58f, TAITO_CHARS },              //  8
5170 
5171 	{ "e21-12.32",		0x040000, 0x34093de1, TAITO_68KROM2_BYTESWAP },   //  9 68k Code
5172 	{ "e21-13.33",		0x040000, 0x9e9ec437, TAITO_68KROM2_BYTESWAP },   // 10
5173 
5174 	{ "e21-03.rom",		0x200000, 0x54c5f83d, TAITO_ES5505_BYTESWAP },    // 11 Ensoniq Samples
5175 	{ "e21-04.rom",		0x200000, 0xe5af2a2d, TAITO_ES5505_BYTESWAP },    // 12
5176 
5177 	{ "bubblemu.nv",	0x000080, 0xa503276c, TAITO_DEFAULT_EEPROM },     // 13 eeprom
5178 };
5179 
5180 STD_ROM_PICK(bubblemu)
5181 STD_ROM_FN(bubblemu)
5182 
5183 struct BurnDriver BurnDrvBubblemu = {
5184 	"bubblemu", "bubblem", NULL, NULL, "1995",
5185 	"Bubble Memories: The Story Of Bubble Bobble III (Ver 2.5A 1996/02/21)\0", NULL, "Taito America Corporation", "Taito F3 System",
5186 	NULL, NULL, NULL, NULL,
5187 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PLATFORM, 0,
5188 	NULL, bubblemuRomInfo, bubblemuRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
5189 	bubblemInit, DrvExit, DrvFrame, DrvDraw224A, DrvScan, &TaitoF3PalRecalc, 0x2000,
5190 	320, 224, 4, 3
5191 };
5192 
5193 
5194 // Bubble Memories: The Story Of Bubble Bobble III (Ver 2.3J 1996/02/07)
5195 
5196 static struct BurnRomInfo bubblemjRomDesc[] = {
5197 	{ "e21-11.20",		0x080000, 0xdf0eeae4, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
5198 	{ "e21-10.19",		0x080000, 0xcdfb58f6, TAITO_68KROM1_BYTESWAP32 }, //  1
5199 	{ "e21-09.18",		0x080000, 0x6c305f17, TAITO_68KROM1_BYTESWAP32 }, //  2
5200 	{ "e21-08.17",		0x080000, 0x27381ae2, TAITO_68KROM1_BYTESWAP32 }, //  3
5201 
5202 	{ "e21-02.rom",		0x200000, 0xb7cb9232, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
5203 	{ "e21-01.rom",		0x200000, 0xa11f2f99, TAITO_SPRITESA_BYTESWAP },  //  5
5204 
5205 	{ "e21-07.rom",		0x100000, 0x7789bf7c, TAITO_CHARS_BYTESWAP },     //  6 Layer Tiles
5206 	{ "e21-06.rom",		0x100000, 0x997fc0d7, TAITO_CHARS_BYTESWAP },     //  7
5207 	{ "e21-05.rom",		0x100000, 0x07eab58f, TAITO_CHARS },              //  8
5208 
5209 	{ "e21-12.32",		0x040000, 0x34093de1, TAITO_68KROM2_BYTESWAP },   //  9 68k Code
5210 	{ "e21-13.33",		0x040000, 0x9e9ec437, TAITO_68KROM2_BYTESWAP },   // 10
5211 
5212 	{ "e21-03.rom",		0x200000, 0x54c5f83d, TAITO_ES5505_BYTESWAP },    // 11 Ensoniq Samples
5213 	{ "e21-04.rom",		0x200000, 0xe5af2a2d, TAITO_ES5505_BYTESWAP },    // 12
5214 
5215 	{ "bubblemj.nv",	0x000080, 0xcb4ef35c, TAITO_DEFAULT_EEPROM },     // 13 eeprom
5216 };
5217 
5218 STD_ROM_PICK(bubblemj)
5219 STD_ROM_FN(bubblemj)
5220 
5221 struct BurnDriver BurnDrvBubblemj = {
5222 	"bubblemj", "bubblem", NULL, NULL, "1995",
5223 	"Bubble Memories: The Story Of Bubble Bobble III (Ver 2.3J 1996/02/07)\0", NULL, "Taito Corporation", "Taito F3 System",
5224 	NULL, NULL, NULL, NULL,
5225 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PLATFORM, 0,
5226 	NULL, bubblemjRomInfo, bubblemjRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
5227 	bubblemInit, DrvExit, DrvFrame, DrvDraw224A, DrvScan, &TaitoF3PalRecalc, 0x2000,
5228 	320, 224, 4, 3
5229 };
5230 
5231 
5232 // Cleopatra Fortune (Ver 2.1J 1996/09/05)
5233 
5234 static struct BurnRomInfo cleopatrRomDesc[] = {
5235 	{ "e28-10.bin",		0x080000, 0x013fbc39, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
5236 	{ "e28-09.bin",		0x080000, 0x1c48a1f9, TAITO_68KROM1_BYTESWAP32 }, //  1
5237 	{ "e28-08.bin",		0x080000, 0x7564f199, TAITO_68KROM1_BYTESWAP32 }, //  2
5238 	{ "e28-07.bin",		0x080000, 0xa507797b, TAITO_68KROM1_BYTESWAP32 }, //  3
5239 
5240 	{ "e28-02.bin",		0x080000, 0xb20d47cb, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
5241 	{ "e28-01.bin",		0x080000, 0x4440e659, TAITO_SPRITESA_BYTESWAP },  //  5
5242 
5243 	{ "e28-06.bin",		0x100000, 0x21d0c454, TAITO_CHARS_BYTESWAP },     //  6 Layer Tiles
5244 	{ "e28-05.bin",		0x100000, 0x2870dbbc, TAITO_CHARS_BYTESWAP },     //  7
5245 	{ "e28-04.bin",		0x100000, 0x57aef029, TAITO_CHARS },              //  8
5246 
5247 	{ "e28-11.bin",		0x020000, 0x01a06950, TAITO_68KROM2_BYTESWAP },   //  9 68k Code
5248 	{ "e28-12.bin",		0x020000, 0xdc19260f, TAITO_68KROM2_BYTESWAP },   // 10
5249 
5250 	{ "e28-03.bin",		0x200000, 0x15c7989d, TAITO_ES5505_BYTESWAP },    // 11 Ensoniq Samples
5251 };
5252 
5253 STD_ROM_PICK(cleopatr)
STD_ROM_FN(cleopatr)5254 STD_ROM_FN(cleopatr)
5255 
5256 static INT32 cleopatrInit()
5257 {
5258 	return DrvInit(NULL, f3_21bit_typeA_palette_update, 0, CLEOPATR, 1, 0);
5259 }
5260 
5261 struct BurnDriver BurnDrvCleopatr = {
5262 	"cleopatr", NULL, NULL, NULL, "1996",
5263 	"Cleopatra Fortune (Ver 2.1J 1996/09/05)\0", NULL, "Taito Corporation", "Taito F3 System",
5264 	NULL, NULL, NULL, NULL,
5265 	BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0,
5266 	NULL, cleopatrRomInfo, cleopatrRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
5267 	cleopatrInit, DrvExit, DrvFrame, DrvDraw224A_Flipped, DrvScan, &TaitoF3PalRecalc, 0x2000,
5268 	320, 224, 4, 3
5269 };
5270 
5271 
5272 // Puzzle Bobble 3 (Ver 2.1O 1996/09/27)
5273 
5274 static struct BurnRomInfo pbobble3RomDesc[] = {
5275 	{ "e29-12.rom",		0x080000, 0x9eb19a00, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
5276 	{ "e29-11.rom",		0x080000, 0xe54ada97, TAITO_68KROM1_BYTESWAP32 }, //  1
5277 	{ "e29-10.rom",		0x080000, 0x1502a122, TAITO_68KROM1_BYTESWAP32 }, //  2
5278 	{ "e29-16.rom",		0x080000, 0xaac293da, TAITO_68KROM1_BYTESWAP32 }, //  3
5279 
5280 	{ "e29-02.rom",		0x100000, 0x437391d3, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
5281 	{ "e29-01.rom",		0x100000, 0x52547c77, TAITO_SPRITESA_BYTESWAP },  //  5
5282 
5283 	{ "e29-08.rom",		0x100000, 0x7040a3d5, TAITO_CHARS_BYTESWAP },     //  6 Layer Tiles
5284 	{ "e29-07.rom",		0x100000, 0xfca2ea9b, TAITO_CHARS_BYTESWAP },     //  7
5285 	{ "e29-06.rom",		0x100000, 0xc16184f8, TAITO_CHARS },              //  8
5286 
5287 	{ "e29-13.rom",		0x040000, 0x1ef551ef, TAITO_68KROM2_BYTESWAP },   //  9 68k Code
5288 	{ "e29-14.rom",		0x040000, 0x7ee7e688, TAITO_68KROM2_BYTESWAP },   // 10
5289 
5290 	{ "e29-03.rom",		0x200000, 0xa4371658, TAITO_ES5505_BYTESWAP },    // 11 Ensoniq Samples
5291 	{ "e29-04.rom",		0x200000, 0xd1f42457, TAITO_ES5505_BYTESWAP },    // 12
5292 	{ "e29-05.rom",		0x200000, 0xe33c1234, TAITO_ES5505_BYTESWAP },    // 13
5293 };
5294 
5295 STD_ROM_PICK(pbobble3)
STD_ROM_FN(pbobble3)5296 STD_ROM_FN(pbobble3)
5297 
5298 static INT32 pbobble3Init()
5299 {
5300 	return DrvInit(NULL, f3_24bit_palette_update, 0, PBOBBLE3, 1, 0x4055c0);
5301 }
5302 
5303 struct BurnDriver BurnDrvPbobble3 = {
5304 	"pbobble3", NULL, NULL, NULL, "1996",
5305 	"Puzzle Bobble 3 (Ver 2.1O 1996/09/27)\0", NULL, "Taito Corporation", "Taito F3 System",
5306 	NULL, NULL, NULL, NULL,
5307 	BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0,
5308 	NULL, pbobble3RomInfo, pbobble3RomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
5309 	pbobble3Init, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
5310 	320, 232, 4, 3
5311 };
5312 
5313 
5314 // Puzzle Bobble 3 (Ver 2.1A 1996/09/27)
5315 
5316 static struct BurnRomInfo pbobble3uRomDesc[] = {
5317 	{ "e29-12.rom",		0x080000, 0x9eb19a00, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
5318 	{ "e29-11.rom",		0x080000, 0xe54ada97, TAITO_68KROM1_BYTESWAP32 }, //  1
5319 	{ "e29-10.rom",		0x080000, 0x1502a122, TAITO_68KROM1_BYTESWAP32 }, //  2
5320 	{ "e29-15.bin",		0x080000, 0xddc5a34c, TAITO_68KROM1_BYTESWAP32 }, //  3
5321 
5322 	{ "e29-02.rom",		0x100000, 0x437391d3, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
5323 	{ "e29-01.rom",		0x100000, 0x52547c77, TAITO_SPRITESA_BYTESWAP },  //  5
5324 
5325 	{ "e29-08.rom",		0x100000, 0x7040a3d5, TAITO_CHARS_BYTESWAP },     //  6 Layer Tiles
5326 	{ "e29-07.rom",		0x100000, 0xfca2ea9b, TAITO_CHARS_BYTESWAP },     //  7
5327 	{ "e29-06.rom",		0x100000, 0xc16184f8, TAITO_CHARS },              //  8
5328 
5329 	{ "e29-13.rom",		0x040000, 0x1ef551ef, TAITO_68KROM2_BYTESWAP },   //  9 68k Code
5330 	{ "e29-14.rom",		0x040000, 0x7ee7e688, TAITO_68KROM2_BYTESWAP },   // 10
5331 
5332 	{ "e29-03.rom",		0x200000, 0xa4371658, TAITO_ES5505_BYTESWAP },    // 11 Ensoniq Samples
5333 	{ "e29-04.rom",		0x200000, 0xd1f42457, TAITO_ES5505_BYTESWAP },    // 12
5334 	{ "e29-05.rom",		0x200000, 0xe33c1234, TAITO_ES5505_BYTESWAP },    // 13
5335 };
5336 
5337 STD_ROM_PICK(pbobble3u)
5338 STD_ROM_FN(pbobble3u)
5339 
5340 struct BurnDriver BurnDrvPbobble3u = {
5341 	"pbobble3u", "pbobble3", NULL, NULL, "1996",
5342 	"Puzzle Bobble 3 (Ver 2.1A 1996/09/27)\0", NULL, "Taito Corporation", "Taito F3 System",
5343 	NULL, NULL, NULL, NULL,
5344 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0,
5345 	NULL, pbobble3uRomInfo, pbobble3uRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
5346 	pbobble3Init, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
5347 	320, 232, 4, 3
5348 };
5349 
5350 
5351 // Puzzle Bobble 3 (Ver 2.1J 1996/09/27)
5352 
5353 static struct BurnRomInfo pbobble3jRomDesc[] = {
5354 	{ "e29-12.ic20",	0x080000, 0x9eb19a00, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
5355 	{ "e29-11.ic19",	0x080000, 0xe54ada97, TAITO_68KROM1_BYTESWAP32 }, //  1
5356 	{ "e29-10.ic18",	0x080000, 0x1502a122, TAITO_68KROM1_BYTESWAP32 }, //  2
5357 	{ "e29-09.ic17",	0x080000, 0x44ccf2f6, TAITO_68KROM1_BYTESWAP32 }, //  3
5358 
5359 	{ "e29-02.ic8",		0x100000, 0x437391d3, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
5360 	{ "e29-01.ic12",	0x100000, 0x52547c77, TAITO_SPRITESA_BYTESWAP },  //  5
5361 
5362 	{ "e29-08.ic47",	0x100000, 0x7040a3d5, TAITO_CHARS_BYTESWAP },     //  6 Layer Tiles
5363 	{ "e29-07.ic45",	0x100000, 0xfca2ea9b, TAITO_CHARS_BYTESWAP },     //  7
5364 	{ "e29-06.ic43",	0x100000, 0xc16184f8, TAITO_CHARS },              //  8
5365 
5366 	{ "e29-13.ic32",	0x040000, 0x1ef551ef, TAITO_68KROM2_BYTESWAP },   //  9 68k Code
5367 	{ "e29-14.ic33",	0x040000, 0x7ee7e688, TAITO_68KROM2_BYTESWAP },   // 10
5368 
5369 	{ "e29-03.ic38",	0x200000, 0xa4371658, TAITO_ES5505_BYTESWAP },    // 11 Ensoniq Samples
5370 	{ "e29-04.ic39",	0x200000, 0xd1f42457, TAITO_ES5505_BYTESWAP },    // 12
5371 	{ "e29-05.ic41",	0x200000, 0xe33c1234, TAITO_ES5505_BYTESWAP },    // 13
5372 
5373 	{ "d77-12.ic48.bin", 0x000001, 0x00000000, BRF_OPT | BRF_NODUMP },
5374 	{ "d77-14.ic21.bin", 0x000001, 0x00000000, BRF_OPT | BRF_NODUMP },
5375 	{ "d77-11.ic37.bin", 0x000001, 0x00000000, BRF_OPT | BRF_NODUMP },
5376 	{ "d77-09.ic14.bin", 0x000001, 0x00000000, BRF_OPT | BRF_NODUMP },
5377 	{ "d77-10.ic28.bin", 0x000001, 0x00000000, BRF_OPT | BRF_NODUMP },
5378 };
5379 
5380 STD_ROM_PICK(pbobble3j)
5381 STD_ROM_FN(pbobble3j)
5382 
5383 struct BurnDriver BurnDrvPbobble3j = {
5384 	"pbobble3j", "pbobble3", NULL, NULL, "1996",
5385 	"Puzzle Bobble 3 (Ver 2.1J 1996/09/27)\0", NULL, "Taito Corporation", "Taito F3 System",
5386 	NULL, NULL, NULL, NULL,
5387 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0,
5388 	NULL, pbobble3jRomInfo, pbobble3jRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
5389 	pbobble3Init, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
5390 	320, 232, 4, 3
5391 };
5392 
5393 
5394 // Arkanoid Returns (Ver 2.02O 1997/02/10)
5395 
5396 static struct BurnRomInfo arkretrnRomDesc[] = {
5397 	{ "e36-11.20",		0x040000, 0xb50cfb92, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
5398 	{ "e36-10.19",		0x040000, 0xc940dba1, TAITO_68KROM1_BYTESWAP32 }, //  1
5399 	{ "e36-09.18",		0x040000, 0xf16985e0, TAITO_68KROM1_BYTESWAP32 }, //  2
5400 	{ "e36-15.17",		0x040000, 0x4467ff37, TAITO_68KROM1_BYTESWAP32 }, //  3
5401 
5402 	{ "e36-03.12",		0x040000, 0x1ea8558b, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
5403 	{ "e36-02.8",		0x040000, 0x694eda31, TAITO_SPRITESA_BYTESWAP },  //  5
5404 	{ "e36-01.4",		0x040000, 0x54b9b2cd, TAITO_SPRITESA },           //  6
5405 
5406 	{ "e36-07.47",		0x080000, 0x266bf1c1, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
5407 	{ "e36-06.45",		0x080000, 0x110ab729, TAITO_CHARS_BYTESWAP },     //  8
5408 	{ "e36-05.43",		0x080000, 0xdb18bce2, TAITO_CHARS },              //  9
5409 
5410 	{ "e36-12.32",		0x040000, 0x3bae39be, TAITO_68KROM2_BYTESWAP},    // 10 68k Code
5411 	{ "e36-13.33",		0x040000, 0x94448e82, TAITO_68KROM2_BYTESWAP},    // 11
5412 
5413 	{ "e36-04.38",		0x200000, 0x2250959b, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
5414 
5415 	{ "pal16l8a-d77-09.bin",	0x000104, 0xb371532b, 0 },           // 13 plds
5416 	{ "pal16l8a-d77-10.bin",	0x000104, 0x42f59227, 0 },           // 14
5417 	{ "palce16v8-d77-11.bin",	0x000117, 0xeacc294e, 0 },           // 15
5418 	{ "palce16v8-d77-12.bin",	0x000117, 0xe9920cfe, 0 },           // 16
5419 	{ "palce16v8-d77-14.bin",	0x000117, 0x7427e777, 0 },           // 17
5420 };
5421 
5422 STD_ROM_PICK(arkretrn)
STD_ROM_FN(arkretrn)5423 STD_ROM_FN(arkretrn)
5424 
5425 static INT32 arkretrnInit()
5426 {
5427 	return DrvInit(NULL, f3_24bit_palette_update, 1, ARKRETRN, 1, 0);
5428 }
5429 
5430 struct BurnDriver BurnDrvArkretrn = {
5431 	"arkretrn", NULL, NULL, NULL, "1997",
5432 	"Arkanoid Returns (Ver 2.02O 1997/02/10)\0", NULL, "Taito Corporation", "Taito F3 System",
5433 	NULL, NULL, NULL, NULL,
5434 	BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_BREAKOUT, 0,
5435 	NULL, arkretrnRomInfo, arkretrnRomName, NULL, NULL, NULL, NULL, F3AnalogInputInfo, F3AnalogDIPInfo,
5436 	arkretrnInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
5437 	320, 232, 4, 3
5438 };
5439 
5440 
5441 // Arkanoid Returns (Ver 2.02A 1997/02/10)
5442 
5443 static struct BurnRomInfo arkretrnuRomDesc[] = {
5444 	{ "e36-11.20",		0x040000, 0xb50cfb92, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
5445 	{ "e36-10.19",		0x040000, 0xc940dba1, TAITO_68KROM1_BYTESWAP32 }, //  1
5446 	{ "e36-09.18",		0x040000, 0xf16985e0, TAITO_68KROM1_BYTESWAP32 }, //  2
5447 	{ "e36-14.17",		0x040000, 0x3360cfa1, TAITO_68KROM1_BYTESWAP32 }, //  3
5448 
5449 	{ "e36-03.12",		0x040000, 0x1ea8558b, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
5450 	{ "e36-02.8",		0x040000, 0x694eda31, TAITO_SPRITESA_BYTESWAP },  //  5
5451 	{ "e36-01.4",		0x040000, 0x54b9b2cd, TAITO_SPRITESA },  //  6
5452 
5453 	{ "e36-07.47",		0x080000, 0x266bf1c1, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
5454 	{ "e36-06.45",		0x080000, 0x110ab729, TAITO_CHARS_BYTESWAP },     //  8
5455 	{ "e36-05.43",		0x080000, 0xdb18bce2, TAITO_CHARS },     //  9
5456 
5457 	{ "e36-12.32",		0x040000, 0x3bae39be, TAITO_68KROM2_BYTESWAP},    // 10 68k Code
5458 	{ "e36-13.33",		0x040000, 0x94448e82, TAITO_68KROM2_BYTESWAP},    // 11
5459 
5460 	{ "e36-04.38",		0x200000, 0x2250959b, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
5461 
5462 	{ "pal16l8a-d77-09.bin",	0x000104, 0xb371532b, 0 },           // 13 plds
5463 	{ "pal16l8a-d77-10.bin",	0x000104, 0x42f59227, 0 },           // 14
5464 	{ "palce16v8-d77-11.bin",	0x000117, 0xeacc294e, 0 },           // 15
5465 	{ "palce16v8-d77-12.bin",	0x000117, 0xe9920cfe, 0 },           // 16
5466 	{ "palce16v8-d77-14.bin",	0x000117, 0x7427e777, 0 },           // 17
5467 };
5468 
5469 STD_ROM_PICK(arkretrnu)
5470 STD_ROM_FN(arkretrnu)
5471 
5472 struct BurnDriver BurnDrvArkretrnu = {
5473 	"arkretrnu", "arkretrn", NULL, NULL, "1997",
5474 	"Arkanoid Returns (Ver 2.02A 1997/02/10)\0", NULL, "Taito Corporation", "Taito F3 System",
5475 	NULL, NULL, NULL, NULL,
5476 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_BREAKOUT, 0,
5477 	NULL, arkretrnuRomInfo, arkretrnuRomName, NULL, NULL, NULL, NULL, F3AnalogInputInfo, F3AnalogDIPInfo,
5478 	arkretrnInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
5479 	320, 232, 4, 3
5480 };
5481 
5482 
5483 // Arkanoid Returns (Ver 2.02J 1997/02/10)
5484 
5485 static struct BurnRomInfo arkretrnjRomDesc[] = {
5486 	{ "e36-11.20",		0x040000, 0xb50cfb92, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
5487 	{ "e36-10.19",		0x040000, 0xc940dba1, TAITO_68KROM1_BYTESWAP32 }, //  1
5488 	{ "e36-09.18",		0x040000, 0xf16985e0, TAITO_68KROM1_BYTESWAP32 }, //  2
5489 	{ "e36-08.17",		0x040000, 0xaa699e1b, TAITO_68KROM1_BYTESWAP32 }, //  3
5490 
5491 	{ "e36-03.12",		0x040000, 0x1ea8558b, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
5492 	{ "e36-02.8",		0x040000, 0x694eda31, TAITO_SPRITESA_BYTESWAP },  //  5
5493 	{ "e36-01.4",		0x040000, 0x54b9b2cd, TAITO_SPRITESA },  //  6
5494 
5495 	{ "e36-07.47",		0x080000, 0x266bf1c1, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
5496 	{ "e36-06.45",		0x080000, 0x110ab729, TAITO_CHARS_BYTESWAP },     //  8
5497 	{ "e36-05.43",		0x080000, 0xdb18bce2, TAITO_CHARS },     //  9
5498 
5499 	{ "e36-12.32",		0x040000, 0x3bae39be, TAITO_68KROM2_BYTESWAP},    // 10 68k Code
5500 	{ "e36-13.33",		0x040000, 0x94448e82, TAITO_68KROM2_BYTESWAP},    // 11
5501 
5502 	{ "e36-04.38",		0x200000, 0x2250959b, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
5503 
5504 	{ "pal16l8a-d77-09.bin",	0x000104, 0xb371532b, 0 },           // 13 plds
5505 	{ "pal16l8a-d77-10.bin",	0x000104, 0x42f59227, 0 },           // 14
5506 	{ "palce16v8-d77-11.bin",	0x000117, 0xeacc294e, 0 },           // 15
5507 	{ "palce16v8-d77-12.bin",	0x000117, 0xe9920cfe, 0 },           // 16
5508 	{ "palce16v8-d77-14.bin",	0x000117, 0x7427e777, 0 },           // 17
5509 };
5510 
5511 STD_ROM_PICK(arkretrnj)
5512 STD_ROM_FN(arkretrnj)
5513 
5514 struct BurnDriver BurnDrvArkretrnj = {
5515 	"arkretrnj", "arkretrn", NULL, NULL, "1997",
5516 	"Arkanoid Returns (Ver 2.02J 1997/02/10)\0", NULL, "Taito Corporation", "Taito F3 System",
5517 	NULL, NULL, NULL, NULL,
5518 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_BREAKOUT, 0,
5519 	NULL, arkretrnjRomInfo, arkretrnjRomName, NULL, NULL, NULL, NULL, F3AnalogInputInfo, F3AnalogDIPInfo,
5520 	arkretrnInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
5521 	320, 232, 4, 3
5522 };
5523 
5524 
5525 // Kirameki Star Road (Ver 2.10J 1997/08/29)
5526 
5527 static struct BurnRomInfo kiramekiRomDesc[] = {
5528 	{ "e44-19.20",		0x080000, 0x2f3b239a, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
5529 	{ "e44-18.19",		0x080000, 0x3137c8bc, TAITO_68KROM1_BYTESWAP32 }, //  1
5530 	{ "e44-17.18",		0x080000, 0x5905cd20, TAITO_68KROM1_BYTESWAP32 }, //  2
5531 	{ "e44-16.17",		0x080000, 0x5e9ac3fd, TAITO_68KROM1_BYTESWAP32 }, //  3
5532 
5533 	{ "e44-06.12",		0x400000, 0x80526d58, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
5534 	{ "e44-04.8",		0x400000, 0x28c7c295, TAITO_SPRITESA_BYTESWAP },  //  5
5535 	{ "e44-05.11",		0x200000, 0x0fbc2b26, TAITO_SPRITESA_BYTESWAP },  //  6
5536 	{ "e44-03.7",		0x200000, 0xd9e63fb0, TAITO_SPRITESA_BYTESWAP },  //  7
5537 	{ "e44-02.4",		0x400000, 0x5481efde, TAITO_SPRITESA },           //  8
5538 	{ "e44-01.3",		0x200000, 0xc4bdf727, TAITO_SPRITESA },           //  9
5539 
5540 	{ "e44-14.47",		0x200000, 0x4597c034, TAITO_CHARS_BYTESWAP },     // 10 Layer Tiles
5541 	{ "e44-12.45",		0x200000, 0x7160a181, TAITO_CHARS_BYTESWAP },     // 11
5542 	{ "e44-13.46",		0x100000, 0x0b016c4e, TAITO_CHARS_BYTESWAP },     // 12
5543 	{ "e44-11.44",		0x100000, 0x34d84143, TAITO_CHARS_BYTESWAP },     // 13
5544 	{ "e44-10.43",		0x200000, 0x326f738e, TAITO_CHARS },              // 14
5545 	{ "e44-09.42",		0x100000, 0xa8e68eb7, TAITO_CHARS },              // 15
5546 
5547 	{ "e44-20.51",		0x080000, 0x4df7e051, TAITO_68KROM2_BYTESWAP },   // 16 68k Code
5548 	{ "e44-21.52",		0x080000, 0xd31b94b8, TAITO_68KROM2_BYTESWAP },   // 17
5549 	{ "e44-15.53",		0x200000, 0x5043b608, TAITO_68KROM2 },            // 18
5550 
5551 	{ "e44-07.38",		0x400000, 0xa9e28544, TAITO_ES5505_BYTESWAP },    // 19 Ensoniq Samples
5552 	{ "e44-08.39",		0x400000, 0x33ba3037, TAITO_ES5505_BYTESWAP },    // 20
5553 
5554 	{ "d77-20.37",		0x000117, 0x6bfbec07, BRF_OPT },
5555 };
5556 
5557 STD_ROM_PICK(kirameki)
STD_ROM_FN(kirameki)5558 STD_ROM_FN(kirameki)
5559 
5560 static INT32 kiramekiInit()
5561 {
5562 	return DrvInit(NULL, f3_24bit_palette_update, 0, KIRAMEKI, 1, 0);
5563 }
5564 
5565 struct BurnDriver BurnDrvKirameki = {
5566 	"kirameki", NULL, NULL, NULL, "1997",
5567 	"Kirameki Star Road (Ver 2.10J 1997/08/29)\0", "No sound", "Taito Corporation", "Taito F3 System",
5568 	NULL, NULL, NULL, NULL,
5569 	BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_QUIZ, 0,
5570 	NULL, kiramekiRomInfo, kiramekiRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
5571 	kiramekiInit, DrvExit, DrvFrame, DrvDraw224A, DrvScan, &TaitoF3PalRecalc, 0x2000,
5572 	320, 224, 4, 3
5573 };
5574 
5575 
5576 // Puchi Carat (Ver 2.02O 1997/10/29)
5577 
5578 static struct BurnRomInfo puchicarRomDesc[] = {
5579 	{ "e46-16.ic20",		0x080000, 0xcf2accdf, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
5580 	{ "e46-15.ic19",		0x080000, 0xc32c6ed8, TAITO_68KROM1_BYTESWAP32 }, //  1
5581 	{ "e46-14.ic18",		0x080000, 0xa154c300, TAITO_68KROM1_BYTESWAP32 }, //  2
5582 	{ "e46-18.ic17",		0x080000, 0x396e3122, TAITO_68KROM1_BYTESWAP32 }, //  3
5583 
5584 	{ "e46-06.ic12",		0x200000, 0xb74336f2, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
5585 	{ "e46-04.ic8",			0x200000, 0x463ecc4c, TAITO_SPRITESA_BYTESWAP },  //  5
5586 	{ "e46-05.ic11",		0x200000, 0x83a32eee, TAITO_SPRITESA_BYTESWAP },  //  6
5587 	{ "e46-03.ic7",			0x200000, 0xeb768193, TAITO_SPRITESA_BYTESWAP },  //  7
5588 	{ "e46-02.ic4",			0x200000, 0xfb046018, TAITO_SPRITESA },           //  8
5589 	{ "e46-01.ic3",			0x200000, 0x34fc2103, TAITO_SPRITESA },           //  9
5590 
5591 	{ "e46-12.ic47",		0x100000, 0x1f3a9851, TAITO_CHARS_BYTESWAP },     // 10 Layer Tiles
5592 	{ "e46-11.ic45",		0x100000, 0xe9f10bf1, TAITO_CHARS_BYTESWAP },     // 11
5593 	{ "e46-10.ic43",		0x100000, 0x1999b76a, TAITO_CHARS },              // 12
5594 
5595 	{ "e46-21.ic32",		0x040000, 0xb466cff6, TAITO_68KROM2_BYTESWAP },   // 13 68k Code
5596 	{ "e46-22.ic33",		0x040000, 0xc67b767e, TAITO_68KROM2_BYTESWAP },   // 14
5597 
5598 	{ "e46-07.ic38",		0x200000, 0xf20af91e, TAITO_ES5505_BYTESWAP },    // 15 Ensoniq Samples
5599 	{ "e46-08.ic39",		0x200000, 0xf7f96e1d, TAITO_ES5505_BYTESWAP },    // 16
5600 	{ "e46-09.ic40",		0x200000, 0x824135f8, TAITO_ES5505_BYTESWAP },    // 17
5601 
5602 	{ "pal16l8a-d77-09a.bin",	0x104, 0xb371532b, BRF_OPT },             	  // 14 plds
5603 	{ "pal16l8a-d77-10a.bin",	0x104, 0x42f59227, BRF_OPT },                 // 15
5604 	{ "palce16v8q-d77-11a.bin",	0x117, 0xeacc294e, BRF_OPT },                 // 16
5605 	{ "palce16v8q-d77-12a.bin",	0x117, 0xe9920cfe, BRF_OPT },                 // 17
5606 	{ "palce16v8q-d77-15a.bin",	0x117, 0x0edf820a, BRF_OPT },			      // 18
5607 };
5608 
5609 STD_ROM_PICK(puchicar)
STD_ROM_FN(puchicar)5610 STD_ROM_FN(puchicar)
5611 
5612 static INT32 puchicarInit()
5613 {
5614 	return DrvInit(NULL, f3_24bit_palette_update, 1, PUCHICAR, 1, 0);
5615 }
5616 
5617 struct BurnDriver BurnDrvPuchicar = {
5618 	"puchicar", NULL, NULL, NULL, "1997",
5619 	"Puchi Carat (Ver 2.02O 1997/10/29)\0", NULL, "Taito Corporation", "Taito F3 System",
5620 	NULL, NULL, NULL, NULL,
5621 	BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0,
5622 	NULL, puchicarRomInfo, puchicarRomName, NULL, NULL, NULL, NULL, F3AnalogInputInfo, F3AnalogDIPInfo,
5623 	puchicarInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
5624 	320, 232, 4, 3
5625 };
5626 
5627 
5628 // Puchi Carat (Ver 2.02J 1997/10/29)
5629 
5630 static struct BurnRomInfo puchicarjRomDesc[] = {
5631 	{ "e46-16.ic20",		0x080000, 0xcf2accdf, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
5632 	{ "e46-15.ic19",		0x080000, 0xc32c6ed8, TAITO_68KROM1_BYTESWAP32 }, //  1
5633 	{ "e46-14.ic18",		0x080000, 0xa154c300, TAITO_68KROM1_BYTESWAP32 }, //  2
5634 	{ "e46-13.ic17",		0x080000, 0x59fbdf3a, TAITO_68KROM1_BYTESWAP32 }, //  3
5635 
5636 	{ "e46-06.ic12",		0x200000, 0xb74336f2, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
5637 	{ "e46-04.ic8",			0x200000, 0x463ecc4c, TAITO_SPRITESA_BYTESWAP },  //  5
5638 	{ "e46-05.ic11",		0x200000, 0x83a32eee, TAITO_SPRITESA_BYTESWAP },  //  6
5639 	{ "e46-03.ic7",			0x200000, 0xeb768193, TAITO_SPRITESA_BYTESWAP },  //  7
5640 	{ "e46-02.ic4",			0x200000, 0xfb046018, TAITO_SPRITESA },           //  8
5641 	{ "e46-01.ic3",			0x200000, 0x34fc2103, TAITO_SPRITESA },           //  9
5642 
5643 	{ "e46-12.ic47",		0x100000, 0x1f3a9851, TAITO_CHARS_BYTESWAP },     // 10 Layer Tiles
5644 	{ "e46-11.ic45",		0x100000, 0xe9f10bf1, TAITO_CHARS_BYTESWAP },     // 11
5645 	{ "e46-10.ic43",		0x100000, 0x1999b76a, TAITO_CHARS },              // 12
5646 
5647 	{ "e46-19.ic32",		0x040000, 0x2624eba0, TAITO_68KROM2_BYTESWAP },   // 13 68k Code
5648 	{ "e46-20.ic33",		0x040000, 0x065e934f, TAITO_68KROM2_BYTESWAP },   // 14
5649 
5650 	{ "e46-07.ic38",		0x200000, 0xf20af91e, TAITO_ES5505_BYTESWAP },    // 15 Ensoniq Samples
5651 	{ "e46-08.ic39",		0x200000, 0xf7f96e1d, TAITO_ES5505_BYTESWAP },    // 16
5652 	{ "e46-09.ic40",		0x200000, 0x824135f8, TAITO_ES5505_BYTESWAP },    // 17
5653 
5654 	{ "pal16l8a-d77-09a.bin",	0x104, 0xb371532b, BRF_OPT },                 // 14 plds
5655 	{ "pal16l8a-d77-10a.bin",	0x104, 0x42f59227, BRF_OPT },                 // 15
5656 	{ "palce16v8q-d77-11a.bin",	0x117, 0xeacc294e, BRF_OPT },                 // 16
5657 	{ "palce16v8q-d77-12a.bin",	0x117, 0xe9920cfe, BRF_OPT },                 // 17
5658 	{ "palce16v8q-d77-15a.bin",	0x117, 0x0edf820a, BRF_OPT },				  // 18
5659 };
5660 
5661 STD_ROM_PICK(puchicarj)
5662 STD_ROM_FN(puchicarj)
5663 
5664 struct BurnDriver BurnDrvPuchicarj = {
5665 	"puchicarj", "puchicar", NULL, NULL, "1997",
5666 	"Puchi Carat (Ver 2.02J 1997/10/29)\0", NULL, "Taito Corporation", "Taito F3 System",
5667 	NULL, NULL, NULL, NULL,
5668 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0,
5669 	NULL, puchicarjRomInfo, puchicarjRomName, NULL, NULL, NULL, NULL, F3AnalogInputInfo, F3AnalogDIPInfo,
5670 	puchicarInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
5671 	320, 232, 4, 3
5672 };
5673 
5674 
5675 // Puchi Carat (Ver 2.04A 1997/11/08)
5676 
5677 static struct BurnRomInfo puchicaruRomDesc[] = {
5678 	{ "e46-29.ic20",		0x080000, 0x6df39fc3, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
5679 	{ "e46-28.ic19",		0x080000, 0x06a29747, TAITO_68KROM1_BYTESWAP32 }, //  1
5680 	{ "e46-27.ic18",		0x080000, 0x9441cc7c, TAITO_68KROM1_BYTESWAP32 }, //  2
5681 	{ "e46-17.ic17",		0x080000, 0xa0ff0e8c, TAITO_68KROM1_BYTESWAP32 }, //  3
5682 
5683 	{ "e46-06.ic12",		0x200000, 0xb74336f2, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
5684 	{ "e46-04.ic8",			0x200000, 0x463ecc4c, TAITO_SPRITESA_BYTESWAP },  //  5
5685 	{ "e46-05.ic11",		0x200000, 0x83a32eee, TAITO_SPRITESA_BYTESWAP },  //  6
5686 	{ "e46-03.ic7",			0x200000, 0xeb768193, TAITO_SPRITESA_BYTESWAP },  //  7
5687 	{ "e46-02.ic4",			0x200000, 0xfb046018, TAITO_SPRITESA },           //  8
5688 	{ "e46-01.ic3",			0x200000, 0x34fc2103, TAITO_SPRITESA },           //  9
5689 
5690 	{ "e46-12.ic47",		0x100000, 0x1f3a9851, TAITO_CHARS_BYTESWAP },     // 10 Layer Tiles
5691 	{ "e46-11.ic45",		0x100000, 0xe9f10bf1, TAITO_CHARS_BYTESWAP },     // 11
5692 	{ "e46-10.ic43",		0x100000, 0x1999b76a, TAITO_CHARS },              // 12
5693 
5694 	{ "e46-21.ic32",		0x040000, 0xb466cff6, TAITO_68KROM2_BYTESWAP },   // 13 68k Code
5695 	{ "e46-22.ic33",		0x040000, 0xc67b767e, TAITO_68KROM2_BYTESWAP },   // 14
5696 
5697 	{ "e46-07.ic38",		0x200000, 0xf20af91e, TAITO_ES5505_BYTESWAP },    // 15 Ensoniq Samples
5698 	{ "e46-08.ic39",		0x200000, 0xf7f96e1d, TAITO_ES5505_BYTESWAP },    // 16
5699 	{ "e46-09.ic40",		0x200000, 0x824135f8, TAITO_ES5505_BYTESWAP },    // 17
5700 
5701 	{ "pal16l8a-d77-09a.bin",	0x104, 0xb371532b, BRF_OPT },                 // 14 plds
5702 	{ "pal16l8a-d77-10a.bin",	0x104, 0x42f59227, BRF_OPT },                 // 15
5703 	{ "palce16v8q-d77-11a.bin",	0x117, 0xeacc294e, BRF_OPT },                 // 16
5704 	{ "palce16v8q-d77-12a.bin",	0x117, 0xe9920cfe, BRF_OPT },                 // 17
5705 	{ "palce16v8q-d77-15a.bin",	0x117, 0x0edf820a, BRF_OPT },				  // 18
5706 };
5707 
5708 STD_ROM_PICK(puchicaru)
5709 STD_ROM_FN(puchicaru)
5710 
5711 struct BurnDriver BurnDrvPuchicaru = {
5712 	"puchicaru", "puchicar", NULL, NULL, "1997",
5713 	"Puchi Carat (Ver 2.04A 1997/11/08)\0", NULL, "Taito America Corporation", "Taito F3 System",
5714 	NULL, NULL, NULL, NULL,
5715 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0,
5716 	NULL, puchicaruRomInfo, puchicaruRomName, NULL, NULL, NULL, NULL, F3AnalogInputInfo, F3AnalogDIPInfo,
5717 	puchicarInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
5718 	320, 232, 4, 3
5719 };
5720 
5721 
5722 // Puzzle Bobble 4 (Ver 2.04O 1997/12/19)
5723 
5724 static struct BurnRomInfo pbobble4RomDesc[] = {
5725 	{ "e49-12.20",		0x080000, 0xfffea203, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
5726 	{ "e49-11.19",		0x080000, 0xbf69a087, TAITO_68KROM1_BYTESWAP32 }, //  1
5727 	{ "e49-10.18",		0x080000, 0x0307460b, TAITO_68KROM1_BYTESWAP32 }, //  2
5728 	{ "e49-16.17",		0x080000, 0x0a021624, TAITO_68KROM1_BYTESWAP32 }, //  3
5729 
5730 	{ "e49-02",		0x100000, 0xc7d2f40b, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
5731 	{ "e49-01",		0x100000, 0xa3dd5f85, TAITO_SPRITESA_BYTESWAP },  //  5
5732 
5733 	{ "e49-08",		0x100000, 0x87408106, TAITO_CHARS_BYTESWAP },     //  6 Layer Tiles
5734 	{ "e49-07",		0x100000, 0x1e1e8e1c, TAITO_CHARS_BYTESWAP },     //  7
5735 	{ "e49-06",		0x100000, 0xec85f7ce, TAITO_CHARS },              //  8
5736 
5737 	{ "e49-13.32",		0x040000, 0x83536f7f, TAITO_68KROM2_BYTESWAP },   //  9 68k Code
5738 	{ "e49-14.33",		0x040000, 0x19815bdb, TAITO_68KROM2_BYTESWAP },   // 10
5739 
5740 	{ "e49-03",		0x200000, 0xf64303e0, TAITO_ES5505_BYTESWAP },    // 11 Ensoniq Samples
5741 	{ "e49-04",		0x200000, 0x09be229c, TAITO_ES5505_BYTESWAP },    // 12
5742 	{ "e49-05",		0x200000, 0x5ce90ee2, TAITO_ES5505_BYTESWAP },    // 13
5743 
5744 	{ "pal16l8a-d77-09.bin",	0x104, 0xb371532b, BRF_OPT },             // 14 plds
5745 	{ "pal16l8a-d77-10.bin",	0x104, 0x42f59227, BRF_OPT },             // 15
5746 	{ "palce16v8q-d77-11.bin",	0x117, 0xeacc294e, BRF_OPT },             // 16
5747 	{ "palce16v8q-d77-12.bin",	0x117, 0xe9920cfe, BRF_OPT },             // 17
5748 	{ "palce16v8q-d77-15.bin",	0x117, 0x00000000, BRF_NODUMP },// 18
5749 };
5750 
5751 STD_ROM_PICK(pbobble4)
STD_ROM_FN(pbobble4)5752 STD_ROM_FN(pbobble4)
5753 
5754 static INT32 pbobble4Init()
5755 {
5756 	return DrvInit(NULL, f3_24bit_palette_update, 0, PBOBBLE4, 1, 0x4053c0);
5757 }
5758 
5759 struct BurnDriver BurnDrvPbobble4 = {
5760 	"pbobble4", NULL, NULL, NULL, "1997",
5761 	"Puzzle Bobble 4 (Ver 2.04O 1997/12/19)\0", NULL, "Taito Corporation", "Taito F3 System",
5762 	NULL, NULL, NULL, NULL,
5763 	BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0,
5764 	NULL, pbobble4RomInfo, pbobble4RomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
5765 	pbobble4Init, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
5766 	320, 232, 4, 3
5767 };
5768 
5769 
5770 // Puzzle Bobble 4 (Ver 2.04J 1997/12/19)
5771 
5772 static struct BurnRomInfo pbobble4jRomDesc[] = {
5773 	{ "e49-12.20",		0x080000, 0xfffea203, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
5774 	{ "e49-11.19",		0x080000, 0xbf69a087, TAITO_68KROM1_BYTESWAP32 }, //  1
5775 	{ "e49-10.18",		0x080000, 0x0307460b, TAITO_68KROM1_BYTESWAP32 }, //  2
5776 	{ "e49-09.17",		0x080000, 0xe40c7708, TAITO_68KROM1_BYTESWAP32 }, //  3
5777 
5778 	{ "e49-02",		0x100000, 0xc7d2f40b, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
5779 	{ "e49-01",		0x100000, 0xa3dd5f85, TAITO_SPRITESA_BYTESWAP },  //  5
5780 
5781 	{ "e49-08",		0x100000, 0x87408106, TAITO_CHARS_BYTESWAP },     //  6 Layer Tiles
5782 	{ "e49-07",		0x100000, 0x1e1e8e1c, TAITO_CHARS_BYTESWAP },     //  7
5783 	{ "e49-06",		0x100000, 0xec85f7ce, TAITO_CHARS },              //  8
5784 
5785 	{ "e49-13.32",		0x040000, 0x83536f7f, TAITO_68KROM2_BYTESWAP },   //  9 68k Code
5786 	{ "e49-14.33",		0x040000, 0x19815bdb, TAITO_68KROM2_BYTESWAP },   // 10
5787 
5788 	{ "e49-03",		0x200000, 0xf64303e0, TAITO_ES5505_BYTESWAP },    // 11 Ensoniq Samples
5789 	{ "e49-04",		0x200000, 0x09be229c, TAITO_ES5505_BYTESWAP },    // 12
5790 	{ "e49-05",		0x200000, 0x5ce90ee2, TAITO_ES5505_BYTESWAP },    // 13
5791 
5792 	{ "pal16l8a-d77-09.bin",	0x104, 0xb371532b, BRF_OPT },             // 14 plds
5793 	{ "pal16l8a-d77-10.bin",	0x104, 0x42f59227, BRF_OPT },             // 15
5794 	{ "palce16v8q-d77-11.bin",	0x117, 0xeacc294e, BRF_OPT },             // 16
5795 	{ "palce16v8q-d77-12.bin",	0x117, 0xe9920cfe, BRF_OPT },             // 17
5796 	{ "palce16v8q-d77-15.bin",	0x117, 0x00000000, BRF_NODUMP },// 18
5797 };
5798 
5799 STD_ROM_PICK(pbobble4j)
5800 STD_ROM_FN(pbobble4j)
5801 
5802 struct BurnDriver BurnDrvPbobble4j = {
5803 	"pbobble4j", "pbobble4", NULL, NULL, "1997",
5804 	"Puzzle Bobble 4 (Ver 2.04J 1997/12/19)\0", NULL, "Taito Corporation", "Taito F3 System",
5805 	NULL, NULL, NULL, NULL,
5806 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0,
5807 	NULL, pbobble4jRomInfo, pbobble4jRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
5808 	pbobble4Init, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
5809 	320, 232, 4, 3
5810 };
5811 
5812 
5813 // Puzzle Bobble 4 (Ver 2.04A 1997/12/19)
5814 
5815 static struct BurnRomInfo pbobble4uRomDesc[] = {
5816 	{ "e49-12.20",		0x080000, 0xfffea203, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
5817 	{ "e49-11.19",		0x080000, 0xbf69a087, TAITO_68KROM1_BYTESWAP32 }, //  1
5818 	{ "e49-10.18",		0x080000, 0x0307460b, TAITO_68KROM1_BYTESWAP32 }, //  2
5819 	{ "e49-15.17",		0x080000, 0x7d0526b2, TAITO_68KROM1_BYTESWAP32 }, //  3
5820 
5821 	{ "e49-02",		0x100000, 0xc7d2f40b, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
5822 	{ "e49-01",		0x100000, 0xa3dd5f85, TAITO_SPRITESA_BYTESWAP },  //  5
5823 
5824 	{ "e49-08",		0x100000, 0x87408106, TAITO_CHARS_BYTESWAP },     //  6 Layer Tiles
5825 	{ "e49-07",		0x100000, 0x1e1e8e1c, TAITO_CHARS_BYTESWAP },     //  7
5826 	{ "e49-06",		0x100000, 0xec85f7ce, TAITO_CHARS },              //  8
5827 
5828 	{ "e49-13.32",		0x040000, 0x83536f7f, TAITO_68KROM2_BYTESWAP },   //  9 68k Code
5829 	{ "e49-14.33",		0x040000, 0x19815bdb, TAITO_68KROM2_BYTESWAP },   // 10
5830 
5831 	{ "e49-03",		0x200000, 0xf64303e0, TAITO_ES5505_BYTESWAP },    // 11 Ensoniq Samples
5832 	{ "e49-04",		0x200000, 0x09be229c, TAITO_ES5505_BYTESWAP },    // 12
5833 	{ "e49-05",		0x200000, 0x5ce90ee2, TAITO_ES5505_BYTESWAP },    // 13
5834 
5835 	{ "pal16l8a-d77-09.bin",	0x104, 0xb371532b, BRF_OPT },             // 14 plds
5836 	{ "pal16l8a-d77-10.bin",	0x104, 0x42f59227, BRF_OPT },             // 15
5837 	{ "palce16v8q-d77-11.bin",	0x117, 0xeacc294e, BRF_OPT },             // 16
5838 	{ "palce16v8q-d77-12.bin",	0x117, 0xe9920cfe, BRF_OPT },             // 17
5839 	{ "palce16v8q-d77-15.bin",	0x117, 0x00000000, BRF_NODUMP },// 18
5840 };
5841 
5842 STD_ROM_PICK(pbobble4u)
5843 STD_ROM_FN(pbobble4u)
5844 
5845 struct BurnDriver BurnDrvPbobble4u = {
5846 	"pbobble4u", "pbobble4", NULL, NULL, "1997",
5847 	"Puzzle Bobble 4 (Ver 2.04A 1997/12/19)\0", NULL, "Taito Corporation", "Taito F3 System",
5848 	NULL, NULL, NULL, NULL,
5849 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0,
5850 	NULL, pbobble4uRomInfo, pbobble4uRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
5851 	pbobble4Init, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
5852 	320, 232, 4, 3
5853 };
5854 
5855 
5856 // Pop'n Pop (Ver 2.07O 1998/02/09)
5857 
5858 static struct BurnRomInfo popnpopRomDesc[] = {
5859 	{ "e51-12.20",		0x080000, 0x86a237d5, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
5860 	{ "e51-11.19",		0x080000, 0x8a49f34f, TAITO_68KROM1_BYTESWAP32 }, //  1
5861 	{ "e51-10.18",		0x080000, 0x4bce68f8, TAITO_68KROM1_BYTESWAP32 }, //  2
5862 	{ "e51-16.17",		0x080000, 0x2a9d8e0f, TAITO_68KROM1_BYTESWAP32 }, //  3
5863 
5864 	{ "e51-03.12",		0x100000, 0xa24c4607, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
5865 	{ "e51-02.8",		0x100000, 0x6aa8b96c, TAITO_SPRITESA_BYTESWAP },  //  5
5866 	{ "e51-01.4",		0x100000, 0x70347e24, TAITO_SPRITESA },           //  6
5867 
5868 	{ "e51-08.47",		0x200000, 0x3ad41f02, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
5869 	{ "e51-07.45",		0x200000, 0x95873e46, TAITO_CHARS_BYTESWAP },     //  8
5870 	{ "e51-06.43",		0x200000, 0xc240d6c8, TAITO_CHARS },              //  9
5871 
5872 	{ "e51-13.32",		0x040000, 0x3b9e3986, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
5873 	{ "e51-14.33",		0x040000, 0x1f9a5015, TAITO_68KROM2_BYTESWAP },   // 11
5874 
5875 	{ "e51-04.38",		0x200000, 0x66790f55, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
5876 	{ "e51-05.41",		0x200000, 0x4d08b26d, TAITO_ES5505_BYTESWAP },    // 13
5877 
5878 	{ "pal16l8a-d77-09.ic14",	0x104, 0xb371532b, 0 },             // 14 plds
5879 	{ "pal16l8a-d77-10.ic28",	0x104, 0x42f59227, 0 },             // 15
5880 	{ "palce16v8q-d77-11.ic37",	0x117, 0xeacc294e, 0 },             // 16
5881 	{ "palce16v8q-d77-12.ic48",	0x117, 0xe9920cfe, 0 },             // 17
5882 	{ "palce16v8q-d77-15.ic21",	0x117, 0x00000000, 0 | BRF_NODUMP },// 18
5883 };
5884 
5885 STD_ROM_PICK(popnpop)
STD_ROM_FN(popnpop)5886 STD_ROM_FN(popnpop)
5887 
5888 static INT32 popnpopInit()
5889 {
5890 	return DrvInit(NULL, f3_24bit_palette_update, 1, POPNPOP, 1, 0);
5891 }
5892 
5893 struct BurnDriver BurnDrvPopnpop = {
5894 	"popnpop", NULL, NULL, NULL, "1997",
5895 	"Pop'n Pop (Ver 2.07O 1998/02/09)\0", NULL, "Taito Corporation", "Taito F3 System",
5896 	NULL, NULL, NULL, NULL,
5897 	BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0,
5898 	NULL, popnpopRomInfo, popnpopRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
5899 	popnpopInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
5900 	320, 232, 4, 3
5901 };
5902 
5903 
5904 // Pop'n Pop (Ver 2.07J 1998/02/09)
5905 
5906 static struct BurnRomInfo popnpopjRomDesc[] = {
5907 	{ "e51-12.20",		0x080000, 0x86a237d5, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
5908 	{ "e51-11.19",		0x080000, 0x8a49f34f, TAITO_68KROM1_BYTESWAP32 }, //  1
5909 	{ "e51-10.18",		0x080000, 0x4bce68f8, TAITO_68KROM1_BYTESWAP32 }, //  2
5910 	{ "e51-09.17",		0x080000, 0x4a086017, TAITO_68KROM1_BYTESWAP32 }, //  3
5911 
5912 	{ "e51-03.12",		0x100000, 0xa24c4607, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
5913 	{ "e51-02.8",		0x100000, 0x6aa8b96c, TAITO_SPRITESA_BYTESWAP },  //  5
5914 	{ "e51-01.4",		0x100000, 0x70347e24, TAITO_SPRITESA },           //  6
5915 
5916 	{ "e51-08.47",		0x200000, 0x3ad41f02, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
5917 	{ "e51-07.45",		0x200000, 0x95873e46, TAITO_CHARS_BYTESWAP },     //  8
5918 	{ "e51-06.43",		0x200000, 0xc240d6c8, TAITO_CHARS },              //  9
5919 
5920 	{ "e51-13.32",		0x040000, 0x3b9e3986, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
5921 	{ "e51-14.33",		0x040000, 0x1f9a5015, TAITO_68KROM2_BYTESWAP },   // 11
5922 
5923 	{ "e51-04.38",		0x200000, 0x66790f55, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
5924 	{ "e51-05.41",		0x200000, 0x4d08b26d, TAITO_ES5505_BYTESWAP },    // 13
5925 
5926 	{ "pal16l8a-d77-09.ic14",	0x104, 0xb371532b, 0 },             // 14 plds
5927 	{ "pal16l8a-d77-10.ic28",	0x104, 0x42f59227, 0 },             // 15
5928 	{ "palce16v8q-d77-11.ic37",	0x117, 0xeacc294e, 0 },             // 16
5929 	{ "palce16v8q-d77-12.ic48",	0x117, 0xe9920cfe, 0 },             // 17
5930 	{ "palce16v8q-d77-15.ic21",	0x117, 0x00000000, 0 | BRF_NODUMP },// 18
5931 };
5932 
5933 STD_ROM_PICK(popnpopj)
5934 STD_ROM_FN(popnpopj)
5935 
5936 struct BurnDriver BurnDrvPopnpopj = {
5937 	"popnpopj", "popnpop", NULL, NULL, "1997",
5938 	"Pop'n Pop (Ver 2.07J 1998/02/09)\0", NULL, "Taito Corporation", "Taito F3 System",
5939 	NULL, NULL, NULL, NULL,
5940 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0,
5941 	NULL, popnpopjRomInfo, popnpopjRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
5942 	popnpopInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
5943 	320, 232, 4, 3
5944 };
5945 
5946 
5947 // Pop'n Pop (Ver 2.07A 1998/02/09)
5948 
5949 static struct BurnRomInfo popnpopuRomDesc[] = {
5950 	{ "e51-12.20",		0x080000, 0x86a237d5, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
5951 	{ "e51-11.19",		0x080000, 0x8a49f34f, TAITO_68KROM1_BYTESWAP32 }, //  1
5952 	{ "e51-10.18",		0x080000, 0x4bce68f8, TAITO_68KROM1_BYTESWAP32 }, //  2
5953 	{ "e51-15.17",		0x080000, 0x1ad77903, TAITO_68KROM1_BYTESWAP32 }, //  3
5954 
5955 	{ "e51-03.12",		0x100000, 0xa24c4607, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
5956 	{ "e51-02.8",		0x100000, 0x6aa8b96c, TAITO_SPRITESA_BYTESWAP },  //  5
5957 	{ "e51-01.4",		0x100000, 0x70347e24, TAITO_SPRITESA },           //  6
5958 
5959 	{ "e51-08.47",		0x200000, 0x3ad41f02, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
5960 	{ "e51-07.45",		0x200000, 0x95873e46, TAITO_CHARS_BYTESWAP },     //  8
5961 	{ "e51-06.43",		0x200000, 0xc240d6c8, TAITO_CHARS },              //  9
5962 
5963 	{ "e51-13.32",		0x040000, 0x3b9e3986, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
5964 	{ "e51-14.33",		0x040000, 0x1f9a5015, TAITO_68KROM2_BYTESWAP },   // 11
5965 
5966 	{ "e51-04.38",		0x200000, 0x66790f55, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
5967 	{ "e51-05.41",		0x200000, 0x4d08b26d, TAITO_ES5505_BYTESWAP },    // 13
5968 
5969 	{ "pal16l8a-d77-09.ic14",	0x104, 0xb371532b, 0 },             // 14 plds
5970 	{ "pal16l8a-d77-10.ic28",	0x104, 0x42f59227, 0 },             // 15
5971 	{ "palce16v8q-d77-11.ic37",	0x117, 0xeacc294e, 0 },             // 16
5972 	{ "palce16v8q-d77-12.ic48",	0x117, 0xe9920cfe, 0 },             // 17
5973 	{ "palce16v8q-d77-15.ic21",	0x117, 0x00000000, 0 | BRF_NODUMP },// 18
5974 };
5975 
5976 STD_ROM_PICK(popnpopu)
5977 STD_ROM_FN(popnpopu)
5978 
5979 struct BurnDriver BurnDrvPopnpopu = {
5980 	"popnpopu", "popnpop", NULL, NULL, "1997",
5981 	"Pop'n Pop (Ver 2.07A 1998/02/09)\0", NULL, "Taito Corporation", "Taito F3 System",
5982 	NULL, NULL, NULL, NULL,
5983 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0,
5984 	NULL, popnpopuRomInfo, popnpopuRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
5985 	popnpopInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
5986 	320, 232, 4, 3
5987 };
5988 
5989 
5990 // Land Maker (Ver 2.02O 1998/06/02)
5991 
5992 static struct BurnRomInfo landmakrRomDesc[] = {
5993 	{ "e61-19.20",		0x080000, 0xf92eccd0, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
5994 	{ "e61-18.19",		0x080000, 0x5a26c9e0, TAITO_68KROM1_BYTESWAP32 }, //  1
5995 	{ "e61-17.18",		0x080000, 0x710776a8, TAITO_68KROM1_BYTESWAP32 }, //  2
5996 	{ "e61-16.17",		0x080000, 0xb073cda9, TAITO_68KROM1_BYTESWAP32 }, //  3
5997 
5998 	{ "e61-03.12",		0x200000, 0xe8abfc46, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
5999 	{ "e61-02.08",		0x200000, 0x1dc4a164, TAITO_SPRITESA_BYTESWAP },  //  5
6000 	{ "e61-01.04",		0x200000, 0x6cdd8311, TAITO_SPRITESA },           //  6
6001 
6002 	{ "e61-09.47",		0x200000, 0x6ba29987, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
6003 	{ "e61-08.45",		0x200000, 0x76c98e14, TAITO_CHARS_BYTESWAP },     //  8
6004 	{ "e61-07.43",		0x200000, 0x4a57965d, TAITO_CHARS },              //  9
6005 
6006 	{ "e61-14.32",		0x040000, 0x18961bbb, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
6007 	{ "e61-15.33",		0x040000, 0x2c64557a, TAITO_68KROM2_BYTESWAP },   // 11
6008 
6009 	{ "e61-04.38",		0x200000, 0xc27aec0c, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
6010 	{ "e61-05.39",		0x200000, 0x83920d9d, TAITO_ES5505_BYTESWAP },    // 13
6011 	{ "e61-06.40",		0x200000, 0x2e717bfe, TAITO_ES5505_BYTESWAP },    // 14
6012 
6013 	{ "pal16l8a-d77-09.ic14",	0x104, 0xb371532b, 0 },             // 15 plds
6014 	{ "pal16l8a-d77-10.ic28",	0x104, 0x42f59227, 0 },             // 16
6015 	{ "palce16v8q-d77-11.ic37",	0x117, 0xeacc294e, 0 },             // 17
6016 	{ "palce16v8q-d77-12.ic48",	0x117, 0xe9920cfe, 0 },             // 18
6017 	{ "palce16v8q-d77-15.ic21",	0x117, 0x00000000, 0 | BRF_NODUMP },// 19
6018 };
6019 
6020 STD_ROM_PICK(landmakr)
STD_ROM_FN(landmakr)6021 STD_ROM_FN(landmakr)
6022 
6023 static INT32 landmakrInit()
6024 {
6025 	return DrvInit(NULL, f3_24bit_palette_update, 1, LANDMAKR, 1, 0x400826);
6026 }
6027 
6028 struct BurnDriver BurnDrvLandmakr = {
6029 	"landmakr", NULL, NULL, NULL, "1998",
6030 	"Land Maker (Ver 2.02O 1998/06/02)\0", NULL, "Taito Corporation", "Taito F3 System",
6031 	NULL, NULL, NULL, NULL,
6032 	BDF_GAME_WORKING, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0,
6033 	NULL, landmakrRomInfo, landmakrRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
6034 	landmakrInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
6035 	320, 232, 4, 3
6036 };
6037 
6038 
6039 // Land Maker (Ver 2.01J 1998/06/01)
6040 
6041 static struct BurnRomInfo landmakrjRomDesc[] = {
6042 	{ "e61-13.20",		0x080000, 0x0af756a2, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
6043 	{ "e61-12.19",		0x080000, 0x636b3df9, TAITO_68KROM1_BYTESWAP32 }, //  1
6044 	{ "e61-11.18",		0x080000, 0x279a0ee4, TAITO_68KROM1_BYTESWAP32 }, //  2
6045 	{ "e61-10.17",		0x080000, 0xdaabf2b2, TAITO_68KROM1_BYTESWAP32 }, //  3
6046 
6047 	{ "e61-03.12",		0x200000, 0xe8abfc46, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
6048 	{ "e61-02.08",		0x200000, 0x1dc4a164, TAITO_SPRITESA_BYTESWAP },  //  5
6049 	{ "e61-01.04",		0x200000, 0x6cdd8311, TAITO_SPRITESA },           //  6
6050 
6051 	{ "e61-09.47",		0x200000, 0x6ba29987, TAITO_CHARS_BYTESWAP },     //  7 Layer Tiles
6052 	{ "e61-08.45",		0x200000, 0x76c98e14, TAITO_CHARS_BYTESWAP },     //  8
6053 	{ "e61-07.43",		0x200000, 0x4a57965d, TAITO_CHARS },              //  9
6054 
6055 	{ "e61-14.32",		0x040000, 0x18961bbb, TAITO_68KROM2_BYTESWAP },   // 10 68k Code
6056 	{ "e61-15.33",		0x040000, 0x2c64557a, TAITO_68KROM2_BYTESWAP },   // 11
6057 
6058 	{ "e61-04.38",		0x200000, 0xc27aec0c, TAITO_ES5505_BYTESWAP },    // 12 Ensoniq Samples
6059 	{ "e61-05.39",		0x200000, 0x83920d9d, TAITO_ES5505_BYTESWAP },    // 13
6060 	{ "e61-06.40",		0x200000, 0x2e717bfe, TAITO_ES5505_BYTESWAP },    // 14
6061 
6062 	{ "pal16l8a-d77-09.ic14",	0x104, 0xb371532b, 0 },             // 15 plds
6063 	{ "pal16l8a-d77-10.ic28",	0x104, 0x42f59227, 0 },             // 16
6064 	{ "palce16v8q-d77-11.ic37",	0x117, 0xeacc294e, 0 },             // 17
6065 	{ "palce16v8q-d77-12.ic48",	0x117, 0xe9920cfe, 0 },             // 18
6066 	{ "palce16v8q-d77-15.ic21",	0x117, 0x00000000, 0 | BRF_NODUMP },// 19
6067 };
6068 
6069 STD_ROM_PICK(landmakrj)
6070 STD_ROM_FN(landmakrj)
6071 
6072 struct BurnDriver BurnDrvLandmakrj = {
6073 	"landmakrj", "landmakr", NULL, NULL, "1998",
6074 	"Land Maker (Ver 2.01J 1998/06/01)\0", NULL, "Taito Corporation", "Taito F3 System",
6075 	NULL, NULL, NULL, NULL,
6076 	BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0,
6077 	NULL, landmakrjRomInfo, landmakrjRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
6078 	landmakrInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
6079 	320, 232, 4, 3
6080 };
6081 
6082 
6083 // Land Maker (Ver 2.02O 1998/06/02) (Prototype)
6084 
6085 static struct BurnRomInfo landmakrpRomDesc[] = {
6086 	{ "mpro-3.60",		0x80000, 0xf92eccd0, TAITO_68KROM1_BYTESWAP32 }, //  0 68ec20 Code
6087 	{ "mpro-2.61",		0x80000, 0x5a26c9e0, TAITO_68KROM1_BYTESWAP32 }, //  1
6088 	{ "mpro-1.62",		0x80000, 0x710776a8, TAITO_68KROM1_BYTESWAP32 }, //  2
6089 	{ "mpro-0.63",		0x80000, 0xbc71dd2f, TAITO_68KROM1_BYTESWAP32 }, //  3
6090 
6091 	{ "obj0-0.8",		0x80000, 0x4b862c1b, TAITO_SPRITESA_BYTESWAP },  //  4 Sprites
6092 	{ "obj0-1.20",		0x80000, 0x1dc6e1ae, TAITO_SPRITESA_BYTESWAP },  //  5
6093 	{ "obj1-0.7",		0x80000, 0x90502355, TAITO_SPRITESA_BYTESWAP },  //  6
6094 	{ "obj1-1.19",		0x80000, 0xa24edb24, TAITO_SPRITESA_BYTESWAP },  //  7
6095 	{ "obj2-0.6",		0x80000, 0x3bffe4b2, TAITO_SPRITESA_BYTESWAP },  //  8
6096 	{ "obj2-1.18",		0x80000, 0x1b2a87f3, TAITO_SPRITESA_BYTESWAP },  //  9
6097 	{ "obj3-0.5",		0x80000, 0x3a0e1479, TAITO_SPRITESA_BYTESWAP },  // 10
6098 	{ "obj3-1.17",		0x80000, 0xc7e91180, TAITO_SPRITESA_BYTESWAP },  // 11
6099 	{ "obj0-2.32",		0x80000, 0x94cc01d0, TAITO_SPRITESA },           // 12
6100 	{ "obj1-2.31",		0x80000, 0xc2757722, TAITO_SPRITESA },           // 13
6101 	{ "obj2-2.30",		0x80000, 0x934556ff, TAITO_SPRITESA },           // 14
6102 	{ "obj3-2.29",		0x80000, 0x97f0f777, TAITO_SPRITESA },           // 15
6103 
6104 	{ "scr0-0.7",		0x80000, 0xda6ba562, TAITO_CHARS_BYTESWAP32 },   // 16 Layer Tiles
6105 	{ "scr0-2.5",		0x80000, 0x36756b9c, TAITO_CHARS_BYTESWAP32 },   // 17
6106 	{ "scr0-1.6",		0x80000, 0x8c201d27, TAITO_CHARS_BYTESWAP32 },   // 18
6107 	{ "scr0-3.4",		0x80000, 0x4e0274f3, TAITO_CHARS_BYTESWAP32 },   // 19
6108 	{ "scr1-0.19",		0x80000, 0x2689f716, TAITO_CHARS_BYTESWAP32 },   // 20
6109 	{ "scr1-2.17",		0x80000, 0x7841468a, TAITO_CHARS_BYTESWAP32 },   // 21
6110 	{ "scr1-1.18",		0x80000, 0xf3086949, TAITO_CHARS_BYTESWAP32 },   // 22
6111 	{ "scr1-3.16",		0x80000, 0x926ad229, TAITO_CHARS_BYTESWAP32 },   // 23
6112 	{ "scr0-4.3",		0x80000, 0x5b3cf564, TAITO_CHARS_BYTESWAP },     // 24
6113 	{ "scr0-5.2",		0x80000, 0x8e1ea0fe, TAITO_CHARS_BYTESWAP },     // 25
6114 	{ "scr1-4.15",		0x80000, 0x783b6d10, TAITO_CHARS_BYTESWAP },     // 26
6115 	{ "scr1-5.14",		0x80000, 0x24aba128, TAITO_CHARS_BYTESWAP },     // 27
6116 
6117 	{ "spro-1.66",		0x40000, 0x18961bbb, TAITO_68KROM2_BYTESWAP },   // 28 68k Code
6118 	{ "spro-0.65",		0x40000, 0x2c64557a, TAITO_68KROM2_BYTESWAP },   // 29
6119 
6120 	{ "snd-0.43",		0x80000, 0x0e5ef5c8, TAITO_ES5505_BYTESWAP },    // 30 Ensoniq Samples
6121 	{ "snd-1.44",		0x80000, 0x2998fd65, TAITO_ES5505_BYTESWAP },    // 31
6122 	{ "snd-2.45",		0x80000, 0xda7477ad, TAITO_ES5505_BYTESWAP },    // 32
6123 	{ "snd-3.46",		0x80000, 0x141670b9, TAITO_ES5505_BYTESWAP },    // 33
6124 	{ "snd-4.32",		0x80000, 0xe9dc18f6, TAITO_ES5505_BYTESWAP },    // 34
6125 	{ "snd-5.33",		0x80000, 0x8af91ca8, TAITO_ES5505_BYTESWAP },    // 35
6126 	{ "snd-6.34",		0x80000, 0x6f520b82, TAITO_ES5505_BYTESWAP },    // 36
6127 	{ "snd-7.35",		0x80000, 0x69410f0f, TAITO_ES5505_BYTESWAP },    // 37
6128 	{ "snd-8.20",		0x80000, 0xd98c275e, TAITO_ES5505_BYTESWAP },    // 38
6129 	{ "snd-9.21",		0x80000, 0x82a76cfc, TAITO_ES5505_BYTESWAP },    // 39
6130 	{ "snd-10.22",		0x80000, 0x0345f585, TAITO_ES5505_BYTESWAP },    // 40
6131 	{ "snd-11.23",		0x80000, 0x4caf571a, TAITO_ES5505_BYTESWAP },    // 41
6132 };
6133 
6134 STD_ROM_PICK(landmakrp)
STD_ROM_FN(landmakrp)6135 STD_ROM_FN(landmakrp)
6136 
6137 static INT32 landmakrpRomCallback()
6138 {
6139 	UINT32 *ROM = (UINT32 *)Taito68KRom1;
6140 
6141 	ROM[0x1ffff8 / 4] = BURN_ENDIAN_SWAP_INT32(0xffffffff);
6142 	ROM[0x1ffffc / 4] = BURN_ENDIAN_SWAP_INT32(0x0003ffff);
6143 
6144 	return 0;
6145 }
6146 
landmakrpInit()6147 static INT32 landmakrpInit()
6148 {
6149 	return DrvInit(landmakrpRomCallback, f3_24bit_palette_update, 1, LANDMAKR, 1, 0);
6150 }
6151 
6152 struct BurnDriver BurnDrvLandmakrp = {
6153 	"landmakrp", "landmakr", NULL, NULL, "1998",
6154 	"Land Maker (Ver 2.02O 1998/06/02) (Prototype)\0", NULL, "Taito Corporation", "Taito F3 System",
6155 	NULL, NULL, NULL, NULL,
6156 	BDF_GAME_WORKING | BDF_CLONE | BDF_PROTOTYPE, 2, HARDWARE_TAITO_MISC, GBF_PUZZLE, 0,
6157 	NULL, landmakrpRomInfo, landmakrpRomName, NULL, NULL, NULL, NULL, F3InputInfo, F3DIPInfo,
6158 	landmakrpInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &TaitoF3PalRecalc, 0x2000,
6159 	320, 232, 4, 3
6160 };
6161