1 // FB Alpha tempest driver module
2 // Based on MAME driver by Brad Oliver, Bernd Wiebelt, Allard van der Bas
3
4 #include "tiles_generic.h"
5 #include "m6502_intf.h"
6 #include "burn_gun.h"
7 #include "mathbox.h"
8 #include "vector.h"
9 #include "avgdvg.h"
10 #include "pokey.h"
11 #include "watchdog.h"
12 #include "earom.h"
13
14 static UINT8 *AllMem;
15 static UINT8 *MemEnd;
16 static UINT8 *AllRam;
17 static UINT8 *RamEnd;
18 static UINT8 *DrvM6502ROM;
19 static UINT8 *DrvAVGPROM;
20 static UINT8 *DrvM6502RAM;
21 static UINT8 *DrvVecRAM;
22 static UINT8 *DrvVecROM;
23 static UINT8 *DrvColRAM;
24
25 static UINT32 *DrvPalette;
26 static UINT8 DrvRecalc;
27
28 static INT32 nExtraCycles;
29
30 static UINT8 DrvJoy1[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
31 static UINT8 DrvJoy3[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
32 static UINT8 DrvJoy4f[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
33 static UINT8 DrvDips[6] = { 0, 0, 0, 0, 0, 0 };
34 static UINT8 DrvInputs[3] = { 0, 0, 0 };
35 static UINT8 DrvReset;
36
37 static INT16 DrvAnalogPort0 = 0;
38 static INT16 DrvAnalogPort1 = 0;
39
40 static UINT8 player = 0;
41
42 static UINT32 small_roms = 0;
43
44 #define A(a, b, c, d) {a, b, (UINT8*)(c), d}
45 static struct BurnInputInfo TempestInputList[] = {
46 {"P1 Coin", BIT_DIGITAL, DrvJoy1 + 2, "p1 coin" },
47 {"P1 Start", BIT_DIGITAL, DrvJoy3 + 5, "p1 start" },
48 {"P1 Left", BIT_DIGITAL, DrvJoy4f+ 0, "p1 left" },
49 {"P1 Right", BIT_DIGITAL, DrvJoy4f+ 1, "p1 right" },
50 {"P1 Button 1", BIT_DIGITAL, DrvJoy3 + 4, "p1 fire 1" },
51 {"P1 Button 2", BIT_DIGITAL, DrvJoy3 + 3, "p1 fire 2" },
52 A("P1 Spinner", BIT_ANALOG_REL, &DrvAnalogPort0,"p1 x-axis"),
53
54 {"P2 Coin", BIT_DIGITAL, DrvJoy1 + 1, "p2 coin" },
55 {"P2 Start", BIT_DIGITAL, DrvJoy3 + 6, "p2 start" },
56 {"P2 Left", BIT_DIGITAL, DrvJoy4f+ 2, "p2 left" },
57 {"P2 Right", BIT_DIGITAL, DrvJoy4f+ 3, "p2 right" },
58 {"P2 Button 1", BIT_DIGITAL, DrvJoy4f+ 4, "p2 fire 1" },
59 {"P2 Button 2", BIT_DIGITAL, DrvJoy4f+ 5, "p2 fire 2" },
60 A("P2 Spinner", BIT_ANALOG_REL, &DrvAnalogPort1,"p2 x-axis"),
61
62 {"Reset", BIT_DIGITAL, &DrvReset, "reset" },
63 {"Diagnostic Step", BIT_DIGITAL, DrvJoy1 + 5, "service2" },
64 {"Tilt", BIT_DIGITAL, DrvJoy1 + 3, "tilt" },
65 {"Dip A", BIT_DIPSWITCH, DrvDips + 0, "dip" },
66 {"Dip B", BIT_DIPSWITCH, DrvDips + 1, "dip" },
67 {"Dip C", BIT_DIPSWITCH, DrvDips + 2, "dip" },
68 {"Dip D", BIT_DIPSWITCH, DrvDips + 3, "dip" },
69 {"Dip E", BIT_DIPSWITCH, DrvDips + 4, "dip" },
70 {"Dip F", BIT_DIPSWITCH, DrvDips + 5, "dip" },
71 };
72 #undef A
73 STDINPUTINFO(Tempest)
74
75 static struct BurnDIPInfo TempestDIPList[]=
76 {
77 DIP_OFFSET(0x11)
78 {0x00, 0xff, 0xff, 0x10, NULL },
79 {0x01, 0xff, 0xff, 0x07, NULL },
80 {0x02, 0xff, 0xff, 0x00, NULL },
81 {0x03, 0xff, 0xff, 0x00, NULL },
82 {0x04, 0xff, 0xff, 0x10, NULL },
83 {0x05, 0xff, 0xff, 0x00, NULL },
84
85 {0 , 0xfe, 0 , 2, "Cabinet" },
86 {0x00, 0x01, 0x10, 0x10, "Upright" },
87 {0x00, 0x01, 0x10, 0x00, "Cocktail" },
88
89 {0 , 0xfe, 0 , 4, "Difficulty" },
90 {0x01, 0x01, 0x03, 0x02, "Easy" },
91 {0x01, 0x01, 0x03, 0x03, "Medium1" },
92 {0x01, 0x01, 0x03, 0x00, "Medium2" },
93 {0x01, 0x01, 0x03, 0x01, "Hard" },
94
95 {0 , 0xfe, 0 , 2, "Rating" },
96 {0x01, 0x01, 0x04, 0x04, "1, 3, 5, 7, 9" },
97 {0x01, 0x01, 0x04, 0x00, "tied to high score" },
98
99 {0 , 0xfe, 0 , 4, "Coinage" },
100 {0x02, 0x01, 0x03, 0x01, "2 Coins 1 Credits" },
101 {0x02, 0x01, 0x03, 0x00, "1 Coin 1 Credits" },
102 {0x02, 0x01, 0x03, 0x03, "1 Coin 2 Credits" },
103 {0x02, 0x01, 0x03, 0x02, "Free Play" },
104
105 {0 , 0xfe, 0 , 4, "Right Coin" },
106 {0x02, 0x01, 0x0c, 0x00, "*1" },
107 {0x02, 0x01, 0x0c, 0x04, "*4" },
108 {0x02, 0x01, 0x0c, 0x08, "*5" },
109 {0x02, 0x01, 0x0c, 0x0c, "*6" },
110
111 {0 , 0xfe, 0 , 2, "Left Coin" },
112 {0x02, 0x01, 0x10, 0x00, "*1" },
113 {0x02, 0x01, 0x10, 0x10, "*2" },
114
115 {0 , 0xfe, 0 , 8, "Bonus Coins" },
116 {0x02, 0x01, 0xe0, 0x00, "None" },
117 {0x02, 0x01, 0xe0, 0x80, "1 each 5" },
118 {0x02, 0x01, 0xe0, 0x40, "1 each 4 (+Demo)" },
119 {0x02, 0x01, 0xe0, 0xa0, "1 each 3" },
120 {0x02, 0x01, 0xe0, 0x60, "2 each 4 (+Demo)" },
121 {0x02, 0x01, 0xe0, 0x20, "1 each 2" },
122 {0x02, 0x01, 0xe0, 0xc0, "Freeze Mode" },
123 {0x02, 0x01, 0xe0, 0xe0, "Freeze Mode" },
124
125 {0 , 0xfe, 0 , 2, "Minimum" },
126 {0x03, 0x01, 0x01, 0x00, "1 Credit" },
127 {0x03, 0x01, 0x01, 0x01, "2 Credit" },
128
129 {0 , 0xfe, 0 , 4, "Language" },
130 {0x03, 0x01, 0x06, 0x00, "English" },
131 {0x03, 0x01, 0x06, 0x02, "French" },
132 {0x03, 0x01, 0x06, 0x04, "German" },
133 {0x03, 0x01, 0x06, 0x06, "Spanish" },
134
135 {0 , 0xfe, 0 , 8, "Bonus Life" },
136 {0x03, 0x01, 0x38, 0x08, "10000" },
137 {0x03, 0x01, 0x38, 0x00, "20000" },
138 {0x03, 0x01, 0x38, 0x10, "30000" },
139 {0x03, 0x01, 0x38, 0x18, "40000" },
140 {0x03, 0x01, 0x38, 0x20, "50000" },
141 {0x03, 0x01, 0x38, 0x28, "60000" },
142 {0x03, 0x01, 0x38, 0x30, "70000" },
143 {0x03, 0x01, 0x38, 0x38, "None" },
144
145 {0 , 0xfe, 0 , 4, "Lives" },
146 {0x03, 0x01, 0xc0, 0xc0, "2" },
147 {0x03, 0x01, 0xc0, 0x00, "3" },
148 {0x03, 0x01, 0xc0, 0x40, "4" },
149 {0x03, 0x01, 0xc0, 0x80, "5" },
150
151 {0 , 0xfe, 0 , 2, "Service Mode" },
152 {0x04, 0x01, 0x10, 0x10, "Off" },
153 {0x04, 0x01, 0x10, 0x00, "On" },
154
155 {0 , 0xfe, 0 , 2, "Hires Mode" },
156 {0x05, 0x01, 0x01, 0x00, "No" },
157 {0x05, 0x01, 0x01, 0x01, "Yes" },
158 };
159
STDDIPINFO(Tempest)160 STDDIPINFO(Tempest)
161
162 static UINT8 tempest_read(UINT16 address)
163 {
164 if (address >= 0x60c0 && address <= 0x60cf) {
165 return pokey1_r(address & 0x0f);
166 }
167
168 if (address >= 0x60d0 && address <= 0x60df) {
169 return pokey2_r(address & 0x0f);
170 }
171
172 switch (address)
173 {
174 case 0x0c00: {
175 UINT8 temp = DrvInputs[0] & 0x3f;
176 if (avgdvg_done()) temp |= 0x40;
177 if (M6502TotalCycles() & 0x100) temp |= 0x80;
178 return temp;
179 }
180
181 case 0x0d00:
182 return DrvDips[2];
183
184 case 0x0e00:
185 return DrvDips[3];
186
187 case 0x6040:
188 return mathbox_status_read();
189
190 case 0x6050:
191 return earom_read(address);
192
193 case 0x6060:
194 return mathbox_lo_read();
195
196 case 0x6070:
197 return mathbox_hi_read();
198 }
199
200 return 0;
201 }
202
tempest_write(UINT16 address,UINT8 data)203 static void tempest_write(UINT16 address, UINT8 data)
204 {
205 if (address >= 0x0800 && address <= 0x080f) {
206 DrvColRAM[address & 0x0f] = data;
207 DrvRecalc = 1;
208 return;
209 }
210
211 if (address >= 0x60c0 && address <= 0x60cf) {
212 pokey1_w(address & 0x0f, data);
213 return;
214 }
215
216 if (address >= 0x60d0 && address <= 0x60df) {
217 pokey2_w(address & 0x0f, data);
218 return;
219 }
220 if (address >= 0x6000 && address <= 0x603f) {
221 earom_write(address & 0x3f, data);
222 return;
223 }
224
225 if (address >= 0x6080 && address <= 0x609f) {
226 mathbox_go_write(address & 0x1f, data);
227 return;
228 }
229
230 switch (address)
231 {
232 case 0x4000:
233 avg_set_flip_x(data & 0x08);
234 avg_set_flip_y(data & 0x10);
235 return;
236
237 case 0x4800:
238 avgdvg_go();
239 return;
240
241 case 0x5000:
242 M6502SetIRQLine(0, CPU_IRQSTATUS_NONE);
243 BurnWatchdogRead();
244 return;
245
246 case 0x5800:
247 avgdvg_reset();
248 return;
249
250 case 0x6040:
251 earom_ctrl_write(address, data);
252 return;
253
254 case 0x60e0:
255 player = (data & 0x04) >> 2;
256 return;
257 }
258 }
259
res_check()260 static INT32 res_check()
261 {
262 if (DrvDips[5] & 1) {
263 INT32 Width, Height;
264 BurnDrvGetVisibleSize(&Width, &Height);
265
266 if (Height != 1080) {
267 vector_rescale((1080*480/640), 1080);
268 return 1;
269 }
270 } else {
271 INT32 Width, Height;
272 BurnDrvGetVisibleSize(&Width, &Height);
273
274 if (Height != 640) {
275 vector_rescale(480, 640);
276 return 1;
277 }
278 }
279 return 0;
280 }
281
DrvDoReset(INT32 clear_mem)282 static INT32 DrvDoReset(INT32 clear_mem)
283 {
284 if (clear_mem) {
285 memset (AllRam, 0, RamEnd - AllRam);
286 }
287
288 M6502Open(0);
289 M6502Reset();
290 M6502Close();
291
292 PokeyReset();
293
294 BurnWatchdogReset();
295
296 mathbox_reset();
297 avgdvg_reset();
298
299 earom_reset();
300
301 nExtraCycles = 0;
302
303 res_check();
304
305 return 0;
306 }
307
port1_read(INT32 offset)308 static INT32 port1_read(INT32 offset)
309 {
310 return (DrvInputs[1] & (1 << (offset & 7))) ? 0 : 228;
311 }
312
port2_read(INT32 offset)313 static INT32 port2_read(INT32 offset)
314 {
315 return (DrvInputs[2] & (1 << (offset & 7))) ? 0 : 228;
316 }
317
MemIndex()318 static INT32 MemIndex()
319 {
320 UINT8 *Next; Next = AllMem;
321
322 DrvM6502ROM = Next; Next += 0x010000;
323
324 DrvAVGPROM = Next; Next += 0x000100;
325
326 DrvPalette = (UINT32*)Next; Next += 0x0040 * 256 * sizeof(UINT32);
327
328 AllRam = Next;
329
330 DrvM6502RAM = Next; Next += 0x000800;
331 DrvColRAM = Next; Next += 0x000010;
332 DrvVecRAM = Next; Next += 0x001000;
333
334 RamEnd = Next;
335
336 DrvVecROM = Next; Next += 0x001000; // must(!) come after DrvVecRAM
337
338 MemEnd = Next;
339
340 return 0;
341 }
342
DrvInit()343 static INT32 DrvInit()
344 {
345 BurnAllocMemIndex();
346
347 {
348 if (small_roms) {
349 if (BurnLoadRom(DrvM6502ROM + 0x9000, 0, 1)) return 1;
350 if (BurnLoadRom(DrvM6502ROM + 0x9800, 1, 1)) return 1;
351 if (BurnLoadRom(DrvM6502ROM + 0xa000, 2, 1)) return 1;
352 if (BurnLoadRom(DrvM6502ROM + 0xa800, 3, 1)) return 1;
353 if (BurnLoadRom(DrvM6502ROM + 0xb000, 4, 1)) return 1;
354 if (BurnLoadRom(DrvM6502ROM + 0xb800, 5, 1)) return 1;
355 if (BurnLoadRom(DrvM6502ROM + 0xc000, 6, 1)) return 1;
356 if (BurnLoadRom(DrvM6502ROM + 0xc800, 7, 1)) return 1;
357 if (BurnLoadRom(DrvM6502ROM + 0xd000, 8, 1)) return 1;
358 if (BurnLoadRom(DrvM6502ROM + 0xd800, 9, 1)) return 1;
359 if (BurnLoadRom(DrvM6502ROM + 0xf800, 9, 1)) return 1;
360
361 if (BurnLoadRom(DrvVecROM + 0x0000, 10, 1)) return 1;
362 if (BurnLoadRom(DrvVecROM + 0x0800, 11, 1)) return 1;
363
364 if (BurnLoadRom(DrvAVGPROM + 0x0000, 12, 1)) return 1;
365 } else {
366 if (BurnLoadRom(DrvM6502ROM + 0x9000, 0, 1)) return 1;
367 if (BurnLoadRom(DrvM6502ROM + 0xa000, 1, 1)) return 1;
368 if (BurnLoadRom(DrvM6502ROM + 0xb000, 2, 1)) return 1;
369 if (BurnLoadRom(DrvM6502ROM + 0xc000, 3, 1)) return 1;
370 if (BurnLoadRom(DrvM6502ROM + 0xd000, 4, 1)) return 1;
371 if (BurnLoadRom(DrvM6502ROM + 0xf000, 4, 1)) return 1;
372
373 if (BurnLoadRom(DrvVecROM + 0x0000, 5, 1)) return 1;
374
375 if (BurnLoadRom(DrvAVGPROM + 0x0000, 6, 1)) return 1;
376 }
377 }
378
379 M6502Init(0, TYPE_M6502);
380 M6502Open(0);
381 M6502MapMemory(DrvM6502RAM, 0x0000, 0x07ff, MAP_RAM);
382 M6502MapMemory(DrvVecRAM, 0x2000, 0x2fff, MAP_RAM);
383 M6502MapMemory(DrvVecROM, 0x3000, 0x3fff, MAP_ROM);
384 M6502MapMemory(DrvM6502ROM + 0x9000, 0x9000, 0xffff, MAP_ROM);
385 M6502SetWriteHandler(tempest_write);
386 M6502SetReadHandler(tempest_read);
387 M6502Close();
388
389 BurnWatchdogInit(DrvDoReset, 180);
390
391 PokeyInit(12096000/8, 2, 1.40, 0);
392 PokeySetTotalCyclesCB(M6502TotalCycles);
393 PokeyPotCallback(0, 0, port1_read);
394 PokeyPotCallback(0, 1, port1_read);
395 PokeyPotCallback(0, 2, port1_read);
396 PokeyPotCallback(0, 3, port1_read);
397 PokeyPotCallback(0, 4, port1_read);
398 PokeyPotCallback(0, 5, port1_read);
399 PokeyPotCallback(0, 6, port1_read);
400 PokeyPotCallback(0, 7, port1_read);
401
402 PokeyPotCallback(1, 0, port2_read);
403 PokeyPotCallback(1, 1, port2_read);
404 PokeyPotCallback(1, 2, port2_read);
405 PokeyPotCallback(1, 3, port2_read);
406 PokeyPotCallback(1, 4, port2_read);
407 PokeyPotCallback(1, 5, port2_read);
408 PokeyPotCallback(1, 6, port2_read);
409 PokeyPotCallback(1, 7, port2_read);
410
411 avgdvg_init(USE_AVG_TEMPEST, DrvVecRAM, 0x2000, M6502TotalCycles, 580, 570);
412
413 earom_init();
414
415 BurnTrackballInit(2);
416
417 DrvDoReset(1);
418
419 return 0;
420 }
421
DrvExit()422 static INT32 DrvExit()
423 {
424 avgdvg_exit();
425
426 PokeyExit();
427 M6502Exit();
428
429 small_roms = 0;
430
431 BurnTrackballExit();
432 // mathboxexit() ?
433 earom_exit();
434
435 BurnFreeMemIndex();
436
437 return 0;
438 }
439
DrvPaletteInit()440 static void DrvPaletteInit()
441 {
442 for (INT32 i = 0; i < 0x40; i++) // color
443 {
444 for (INT32 j = 0; j < 256; j++) // intensity
445 {
446 UINT8 data = DrvColRAM[i];
447 INT32 bit3 = (~data >> 3) & 1;
448 INT32 bit2 = (~data >> 2) & 1;
449 INT32 bit1 = (~data >> 1) & 1;
450 INT32 bit0 = (~data >> 0) & 1;
451 INT32 r = (bit1 * 0xee + bit0 * 0x11) * j / 255;
452 INT32 g = (bit3 * 0xee) * j / 255;
453 INT32 b = (bit2 * 0xee) * j / 255;
454
455 DrvPalette[i * 256 + j] = (r << 16) | (g << 8) | b; // must be 32bit palette! -dink (see vector.cpp)
456 }
457 }
458 }
459
460
DrvDraw()461 static INT32 DrvDraw()
462 {
463 if (DrvRecalc) {
464 DrvPaletteInit();
465 DrvRecalc = 0;
466 }
467
468 if (res_check()) return 0; // resolution was changed
469
470 draw_vector(DrvPalette);
471
472 return 0;
473 }
474
update_dial()475 static void update_dial()
476 { // half of the dial value added at the beginning of the frame, half in the middle of the frame.
477 BurnTrackballUpdate(0);
478
479 DrvInputs[1] = (DrvDips[0] & 0x10) | (BurnTrackballRead(0, player) & 0x0f);
480 }
481
DrvFrame()482 static INT32 DrvFrame()
483 {
484 if (DrvReset) {
485 DrvDoReset(1);
486 }
487
488 BurnWatchdogUpdate();
489
490 {
491 if (player) { // player2
492 DrvJoy3[4] = DrvJoy4f[4];
493 DrvJoy3[3] = DrvJoy4f[3];
494 }
495
496 memset (DrvInputs, 0xff, sizeof(DrvInputs));
497 for (INT32 i = 0; i < 8; i++) {
498 DrvInputs[0] ^= (DrvJoy1[i] & 1) << i;
499 DrvInputs[2] ^= (DrvJoy3[i] & 1) << i;
500 }
501
502 BurnTrackballConfig(0, AXIS_NORMAL, AXIS_NORMAL);
503 BurnTrackballFrame(0, DrvAnalogPort0, DrvAnalogPort1, 0x02, 0x07);
504 BurnTrackballUDLR(0, DrvJoy4f[2], DrvJoy4f[3], DrvJoy4f[0], DrvJoy4f[1]);
505 update_dial();
506
507 DrvInputs[0] = (DrvInputs[0] & 0x2f) | (DrvDips[4] & 0x10); // service mode
508 DrvInputs[2] = (DrvInputs[2] & 0xf8) | (DrvDips[1] & 0x07);
509 }
510
511 INT32 nInterleave = 20;
512 INT32 nCyclesTotal[1] = { 1512000 / 60 };
513 INT32 nCyclesDone[1] = { nExtraCycles };
514 INT32 nSoundBufferPos = 0;
515
516 M6502Open(0);
517
518 for (INT32 i = 0; i < nInterleave; i++)
519 {
520 CPU_RUN(0, M6502);
521 if (i == 9) update_dial();
522 if ((i % 5) == 4) M6502SetIRQLine(0, CPU_IRQSTATUS_ACK);
523
524 // Render Sound Segment
525 if (pBurnSoundOut) {
526 INT32 nSegmentLength = nBurnSoundLen / nInterleave;
527 INT16* pSoundBuf = pBurnSoundOut + (nSoundBufferPos << 1);
528 pokey_update(pSoundBuf, nSegmentLength);
529 nSoundBufferPos += nSegmentLength;
530 }
531 }
532 M6502Close();
533
534 nExtraCycles = nCyclesDone - nCyclesTotal;
535
536 // Make sure the buffer is entirely filled.
537 if (pBurnSoundOut) {
538 INT32 nSegmentLength = nBurnSoundLen - nSoundBufferPos;
539 INT16* pSoundBuf = pBurnSoundOut + (nSoundBufferPos << 1);
540 if (nSegmentLength) {
541 pokey_update(pSoundBuf, nSegmentLength);
542 }
543 }
544
545 if (pBurnDraw) {
546 DrvDraw();
547 }
548
549 return 0;
550 }
551
DrvScan(INT32 nAction,INT32 * pnMin)552 static INT32 DrvScan(INT32 nAction, INT32 *pnMin)
553 {
554 struct BurnArea ba;
555
556 if (pnMin) {
557 *pnMin = 0x029722;
558 }
559
560 if (nAction & ACB_VOLATILE) {
561 memset(&ba, 0, sizeof(ba));
562 ba.Data = AllRam;
563 ba.nLen = RamEnd - AllRam;
564 ba.szName = "All Ram";
565 BurnAcb(&ba);
566
567 M6502Scan(nAction);
568
569 avgdvg_scan(nAction, pnMin);
570 mathbox_scan(nAction, pnMin);
571
572 BurnWatchdogScan(nAction);
573
574 pokey_scan(nAction, pnMin);
575
576 BurnTrackballScan();
577
578 SCAN_VAR(nExtraCycles);
579 }
580
581 earom_scan(nAction, pnMin); // here.
582
583 return 0;
584 }
585
586 // Tempest (rev 3, Revised Hardware)
587
588 static struct BurnRomInfo tempestRomDesc[] = {
589 { "136002-133.d1", 0x1000, 0x1d0cc503, 1 | BRF_PRG | BRF_ESS }, // 0 maincpu
590 { "136002-134.f1", 0x1000, 0xc88e3524, 1 | BRF_PRG | BRF_ESS }, // 1
591 { "136002-235.j1", 0x1000, 0xa4b2ce3f, 1 | BRF_PRG | BRF_ESS }, // 2
592 { "136002-136.lm1", 0x1000, 0x65a9a9f9, 1 | BRF_PRG | BRF_ESS }, // 3
593 { "136002-237.p1", 0x1000, 0xde4e9e34, 1 | BRF_PRG | BRF_ESS }, // 4
594
595 { "136002-138.np3", 0x1000, 0x9995256d, 1 | BRF_PRG | BRF_ESS }, // 5 vectrom
596
597 { "136002-125.d7", 0x0100, 0x5903af03, 2 | BRF_GRA }, // 6 avg prom
598
599 { "136002-126.a1", 0x0020, 0x8b04f921, 3 | BRF_GRA }, // 7 mathbox prom
600
601 { "136002-132.l1", 0x0100, 0x2af82e87, 4 | BRF_GRA }, // 8 user3
602 { "136002-131.k1", 0x0100, 0xb31f6e24, 4 | BRF_GRA }, // 9
603 { "136002-130.j1", 0x0100, 0x8119b847, 4 | BRF_GRA }, // 10
604 { "136002-129.h1", 0x0100, 0x09f5a4d5, 4 | BRF_GRA }, // 11
605 { "136002-128.f1", 0x0100, 0x823b61ae, 4 | BRF_GRA }, // 12
606 { "136002-127.e1", 0x0100, 0x276eadd5, 4 | BRF_GRA }, // 13
607 };
608
609 STD_ROM_PICK(tempest)
610 STD_ROM_FN(tempest)
611
612 struct BurnDriver BurnDrvTempest = {
613 "tempest", NULL, NULL, NULL, "1980",
614 "Tempest (rev 3, Revised Hardware)\0", NULL, "Atari", "Miscellaneous",
615 NULL, NULL, NULL, NULL,
616 BDF_GAME_WORKING | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_MISC_PRE90S, GBF_SHOOT | GBF_ACTION | GBF_VECTOR, 0,
617 NULL, tempestRomInfo, tempestRomName, NULL, NULL, NULL, NULL, TempestInputInfo, TempestDIPInfo,
618 DrvInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x40 * 256,
619 480, 640, 3, 4
620 };
621
622
623 // Tempest (rev 1, Revised Hardware)
624
625 static struct BurnRomInfo tempest1rRomDesc[] = {
626 { "136002-133.d1", 0x1000, 0x1d0cc503, 1 | BRF_PRG | BRF_ESS }, // 0 maincpu
627 { "136002-134.f1", 0x1000, 0xc88e3524, 1 | BRF_PRG | BRF_ESS }, // 1
628 { "136002-135.j1", 0x1000, 0x1ca27781, 1 | BRF_PRG | BRF_ESS }, // 2
629 { "136002-136.lm1", 0x1000, 0x65a9a9f9, 1 | BRF_PRG | BRF_ESS }, // 3
630 { "136002-137.p1", 0x1000, 0xd75fd2ef, 1 | BRF_PRG | BRF_ESS }, // 4
631 { "136002-138.np3", 0x1000, 0x9995256d, 1 | BRF_PRG | BRF_ESS }, // 5
632
633 { "136002-125.d7", 0x0100, 0x5903af03, 2 | BRF_GRA }, // 6 user1
634
635 { "136002-126.a1", 0x0020, 0x8b04f921, 3 | BRF_GRA }, // 7 mathbox prom
636
637 { "136002-132.l1", 0x0100, 0x2af82e87, 4 | BRF_GRA }, // 8 user3
638 { "136002-131.k1", 0x0100, 0xb31f6e24, 4 | BRF_GRA }, // 9
639 { "136002-130.j1", 0x0100, 0x8119b847, 4 | BRF_GRA }, // 10
640 { "136002-129.h1", 0x0100, 0x09f5a4d5, 4 | BRF_GRA }, // 11
641 { "136002-128.f1", 0x0100, 0x823b61ae, 4 | BRF_GRA }, // 12
642 { "136002-127.e1", 0x0100, 0x276eadd5, 4 | BRF_GRA }, // 13
643 };
644
645 STD_ROM_PICK(tempest1r)
646 STD_ROM_FN(tempest1r)
647
648 struct BurnDriver BurnDrvTempest1r = {
649 "tempest1r", "tempest", NULL, NULL, "1980",
650 "Tempest (rev 1, Revised Hardware)\0", NULL, "Atari", "Miscellaneous",
651 NULL, NULL, NULL, NULL,
652 BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_MISC_PRE90S, GBF_SHOOT | GBF_ACTION | GBF_VECTOR, 0,
653 NULL, tempest1rRomInfo, tempest1rRomName, NULL, NULL, NULL, NULL, TempestInputInfo, TempestDIPInfo,
654 DrvInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x40 * 256,
655 480, 640, 3, 4
656 };
657
DrvInitSmall()658 static INT32 DrvInitSmall()
659 {
660 small_roms = 1;
661
662 return DrvInit();
663 }
664
665 // Tempest (rev 3)
666
667 static struct BurnRomInfo tempest3RomDesc[] = {
668 { "136002-113.d1", 0x0800, 0x65d61fe7, 1 | BRF_PRG | BRF_ESS }, // 0 maincpu
669 { "136002-114.e1", 0x0800, 0x11077375, 1 | BRF_PRG | BRF_ESS }, // 1
670 { "136002-115.f1", 0x0800, 0xf3e2827a, 1 | BRF_PRG | BRF_ESS }, // 2
671 { "136002-316.h1", 0x0800, 0xaeb0f7e9, 1 | BRF_PRG | BRF_ESS }, // 3
672 { "136002-217.j1", 0x0800, 0xef2eb645, 1 | BRF_PRG | BRF_ESS }, // 4
673 { "136002-118.k1", 0x0800, 0xbeb352ab, 1 | BRF_PRG | BRF_ESS }, // 5
674 { "136002-119.lm1", 0x0800, 0xa4de050f, 1 | BRF_PRG | BRF_ESS }, // 6
675 { "136002-120.mn1", 0x0800, 0x35619648, 1 | BRF_PRG | BRF_ESS }, // 7
676 { "136002-121.p1", 0x0800, 0x73d38e47, 1 | BRF_PRG | BRF_ESS }, // 8
677 { "136002-222.r1", 0x0800, 0x707bd5c3, 1 | BRF_PRG | BRF_ESS }, // 9
678 { "136002-123.np3", 0x0800, 0x29f7e937, 1 | BRF_PRG | BRF_ESS }, // 10
679 { "136002-124.r3", 0x0800, 0xc16ec351, 1 | BRF_PRG | BRF_ESS }, // 11
680
681 { "136002-125.d7", 0x0100, 0x5903af03, 2 | BRF_GRA }, // 12 user1
682
683 { "136002-126.a1", 0x0020, 0x8b04f921, 3 | BRF_GRA }, // 7 mathbox prom
684
685 { "136002-132.l1", 0x0100, 0x2af82e87, 4 | BRF_GRA }, // 8 user3
686 { "136002-131.k1", 0x0100, 0xb31f6e24, 4 | BRF_GRA }, // 9
687 { "136002-130.j1", 0x0100, 0x8119b847, 4 | BRF_GRA }, // 10
688 { "136002-129.h1", 0x0100, 0x09f5a4d5, 4 | BRF_GRA }, // 11
689 { "136002-128.f1", 0x0100, 0x823b61ae, 4 | BRF_GRA }, // 12
690 { "136002-127.e1", 0x0100, 0x276eadd5, 4 | BRF_GRA }, // 13
691 };
692
693 STD_ROM_PICK(tempest3)
694 STD_ROM_FN(tempest3)
695
696 struct BurnDriver BurnDrvTempest3 = {
697 "tempest3", "tempest", NULL, NULL, "1980",
698 "Tempest (rev 3)\0", NULL, "Atari", "Miscellaneous",
699 NULL, NULL, NULL, NULL,
700 BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_MISC_PRE90S, GBF_SHOOT | GBF_ACTION | GBF_VECTOR, 0,
701 NULL, tempest3RomInfo, tempest3RomName, NULL, NULL, NULL, NULL, TempestInputInfo, TempestDIPInfo,
702 DrvInitSmall, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x40 * 256,
703 480, 640, 3, 4
704 };
705
706
707 // Tempest (rev 2)
708
709 static struct BurnRomInfo tempest2RomDesc[] = {
710 { "136002-113.d1", 0x0800, 0x65d61fe7, 1 | BRF_PRG | BRF_ESS }, // 0 maincpu
711 { "136002-114.e1", 0x0800, 0x11077375, 1 | BRF_PRG | BRF_ESS }, // 1
712 { "136002-115.f1", 0x0800, 0xf3e2827a, 1 | BRF_PRG | BRF_ESS }, // 2
713 { "136002-116.h1", 0x0800, 0x7356896c, 1 | BRF_PRG | BRF_ESS }, // 3
714 { "136002-217.j1", 0x0800, 0xef2eb645, 1 | BRF_PRG | BRF_ESS }, // 4
715 { "136002-118.k1", 0x0800, 0xbeb352ab, 1 | BRF_PRG | BRF_ESS }, // 5
716 { "136002-119.lm1", 0x0800, 0xa4de050f, 1 | BRF_PRG | BRF_ESS }, // 6
717 { "136002-120.mn1", 0x0800, 0x35619648, 1 | BRF_PRG | BRF_ESS }, // 7
718 { "136002-121.p1", 0x0800, 0x73d38e47, 1 | BRF_PRG | BRF_ESS }, // 8
719 { "136002-222.r1", 0x0800, 0x707bd5c3, 1 | BRF_PRG | BRF_ESS }, // 9
720 { "136002-123.np3", 0x0800, 0x29f7e937, 1 | BRF_PRG | BRF_ESS }, // 10
721 { "136002-124.r3", 0x0800, 0xc16ec351, 1 | BRF_PRG | BRF_ESS }, // 11
722
723 { "136002-125.d7", 0x0100, 0x5903af03, 2 | BRF_GRA }, // 12 user1
724
725 { "136002-126.a1", 0x0020, 0x8b04f921, 3 | BRF_GRA }, // 7 mathbox prom
726
727 { "136002-132.l1", 0x0100, 0x2af82e87, 4 | BRF_GRA }, // 8 user3
728 { "136002-131.k1", 0x0100, 0xb31f6e24, 4 | BRF_GRA }, // 9
729 { "136002-130.j1", 0x0100, 0x8119b847, 4 | BRF_GRA }, // 10
730 { "136002-129.h1", 0x0100, 0x09f5a4d5, 4 | BRF_GRA }, // 11
731 { "136002-128.f1", 0x0100, 0x823b61ae, 4 | BRF_GRA }, // 12
732 { "136002-127.e1", 0x0100, 0x276eadd5, 4 | BRF_GRA }, // 13
733 };
734
735 STD_ROM_PICK(tempest2)
736 STD_ROM_FN(tempest2)
737
738 struct BurnDriver BurnDrvTempest2 = {
739 "tempest2", "tempest", NULL, NULL, "1980",
740 "Tempest (rev 2)\0", NULL, "Atari", "Miscellaneous",
741 NULL, NULL, NULL, NULL,
742 BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_MISC_PRE90S, GBF_SHOOT | GBF_ACTION | GBF_VECTOR, 0,
743 NULL, tempest2RomInfo, tempest2RomName, NULL, NULL, NULL, NULL, TempestInputInfo, TempestDIPInfo,
744 DrvInitSmall, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x40 * 256,
745 480, 640, 3, 4
746 };
747
748
749 // Tempest (rev 1)
750
751 static struct BurnRomInfo tempest1RomDesc[] = {
752 { "136002-113.d1", 0x0800, 0x65d61fe7, 1 | BRF_PRG | BRF_ESS }, // 0 maincpu
753 { "136002-114.e1", 0x0800, 0x11077375, 1 | BRF_PRG | BRF_ESS }, // 1
754 { "136002-115.f1", 0x0800, 0xf3e2827a, 1 | BRF_PRG | BRF_ESS }, // 2
755 { "136002-116.h1", 0x0800, 0x7356896c, 1 | BRF_PRG | BRF_ESS }, // 3
756 { "136002-117.j1", 0x0800, 0x55952119, 1 | BRF_PRG | BRF_ESS }, // 4
757 { "136002-118.k1", 0x0800, 0xbeb352ab, 1 | BRF_PRG | BRF_ESS }, // 5
758 { "136002-119.lm1", 0x0800, 0xa4de050f, 1 | BRF_PRG | BRF_ESS }, // 6
759 { "136002-120.mn1", 0x0800, 0x35619648, 1 | BRF_PRG | BRF_ESS }, // 7
760 { "136002-121.p1", 0x0800, 0x73d38e47, 1 | BRF_PRG | BRF_ESS }, // 8
761 { "136002-122.r1", 0x0800, 0x796a9918, 1 | BRF_PRG | BRF_ESS }, // 9
762 { "136002-123.np3", 0x0800, 0x29f7e937, 1 | BRF_PRG | BRF_ESS }, // 10
763 { "136002-124.r3", 0x0800, 0xc16ec351, 1 | BRF_PRG | BRF_ESS }, // 11
764
765 { "136002-125.d7", 0x0100, 0x5903af03, 2 | BRF_GRA }, // 12 user1
766
767 { "136002-126.a1", 0x0020, 0x8b04f921, 3 | BRF_GRA }, // 7 mathbox prom
768
769 { "136002-132.l1", 0x0100, 0x2af82e87, 4 | BRF_GRA }, // 8 user3
770 { "136002-131.k1", 0x0100, 0xb31f6e24, 4 | BRF_GRA }, // 9
771 { "136002-130.j1", 0x0100, 0x8119b847, 4 | BRF_GRA }, // 10
772 { "136002-129.h1", 0x0100, 0x09f5a4d5, 4 | BRF_GRA }, // 11
773 { "136002-128.f1", 0x0100, 0x823b61ae, 4 | BRF_GRA }, // 12
774 { "136002-127.e1", 0x0100, 0x276eadd5, 4 | BRF_GRA }, // 13
775 };
776
777 STD_ROM_PICK(tempest1)
778 STD_ROM_FN(tempest1)
779
780 struct BurnDriver BurnDrvTempest1 = {
781 "tempest1", "tempest", NULL, NULL, "1980",
782 "Tempest (rev 1)\0", NULL, "Atari", "Miscellaneous",
783 NULL, NULL, NULL, NULL,
784 BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_MISC_PRE90S, GBF_SHOOT | GBF_ACTION | GBF_VECTOR, 0,
785 NULL, tempest1RomInfo, tempest1RomName, NULL, NULL, NULL, NULL, TempestInputInfo, TempestDIPInfo,
786 DrvInitSmall, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x40 * 256,
787 480, 640, 3, 4
788 };
789
790
791 // Tempest Tubes
792
793 static struct BurnRomInfo temptubeRomDesc[] = {
794 { "136002-113.d1", 0x0800, 0x65d61fe7, 1 | BRF_PRG | BRF_ESS }, // 0 maincpu
795 { "136002-114.e1", 0x0800, 0x11077375, 1 | BRF_PRG | BRF_ESS }, // 1
796 { "136002-115.f1", 0x0800, 0xf3e2827a, 1 | BRF_PRG | BRF_ESS }, // 2
797 { "136002-316.h1", 0x0800, 0xaeb0f7e9, 1 | BRF_PRG | BRF_ESS }, // 3
798 { "136002-217.j1", 0x0800, 0xef2eb645, 1 | BRF_PRG | BRF_ESS }, // 4
799 { "tube-118.k1", 0x0800, 0xcefb03f0, 1 | BRF_PRG | BRF_ESS }, // 5
800 { "136002-119.lm1", 0x0800, 0xa4de050f, 1 | BRF_PRG | BRF_ESS }, // 6
801 { "136002-120.mn1", 0x0800, 0x35619648, 1 | BRF_PRG | BRF_ESS }, // 7
802 { "136002-121.p1", 0x0800, 0x73d38e47, 1 | BRF_PRG | BRF_ESS }, // 8
803 { "136002-222.r1", 0x0800, 0x707bd5c3, 1 | BRF_PRG | BRF_ESS }, // 9
804 { "136002-123.np3", 0x0800, 0x29f7e937, 1 | BRF_PRG | BRF_ESS }, // 10
805 { "136002-124.r3", 0x0800, 0xc16ec351, 1 | BRF_PRG | BRF_ESS }, // 11
806
807 { "136002-125.d7", 0x0100, 0x5903af03, 2 | BRF_GRA }, // 12 user1
808
809 { "136002-126.a1", 0x0020, 0x8b04f921, 3 | BRF_GRA }, // 7 mathbox prom
810
811 { "136002-132.l1", 0x0100, 0x2af82e87, 4 | BRF_GRA }, // 8 user3
812 { "136002-131.k1", 0x0100, 0xb31f6e24, 4 | BRF_GRA }, // 9
813 { "136002-130.j1", 0x0100, 0x8119b847, 4 | BRF_GRA }, // 10
814 { "136002-129.h1", 0x0100, 0x09f5a4d5, 4 | BRF_GRA }, // 11
815 { "136002-128.f1", 0x0100, 0x823b61ae, 4 | BRF_GRA }, // 12
816 { "136002-127.e1", 0x0100, 0x276eadd5, 4 | BRF_GRA }, // 13
817 };
818
819 STD_ROM_PICK(temptube)
820 STD_ROM_FN(temptube)
821
822 struct BurnDriver BurnDrvTemptube = {
823 "temptube", "tempest", NULL, NULL, "1980",
824 "Tempest Tubes\0", NULL, "hack (Duncan Brown)", "Miscellaneous",
825 NULL, NULL, NULL, NULL,
826 BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL, 2, HARDWARE_MISC_PRE90S, GBF_SHOOT | GBF_ACTION | GBF_VECTOR, 0,
827 NULL, temptubeRomInfo, temptubeRomName, NULL, NULL, NULL, NULL, TempestInputInfo, TempestDIPInfo,
828 DrvInitSmall, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x40 * 256,
829 480, 640, 3, 4
830 };
831
832
833 // TempEd
834
835 static struct BurnRomInfo tempedRomDesc[] = {
836 { "136002-113.d1", 0x0800, 0x65d61fe7, 1 | BRF_PRG | BRF_ESS }, // 0 maincpu
837 { "136002-114.e1", 0x0800, 0x11077375, 1 | BRF_PRG | BRF_ESS }, // 1
838 { "136002-115.f1", 0x0800, 0xf3e2827a, 1 | BRF_PRG | BRF_ESS }, // 2
839 { "136002-316.h1", 0x0800, 0xaeb0f7e9, 1 | BRF_PRG | BRF_ESS }, // 3
840 { "136002-217.j1", 0x0800, 0xef2eb645, 1 | BRF_PRG | BRF_ESS }, // 4
841 { "temped.118", 0x0800, 0x4825ee42, 1 | BRF_PRG | BRF_ESS }, // 5
842 { "136002-119.lm1", 0x0800, 0xa4de050f, 1 | BRF_PRG | BRF_ESS }, // 6
843 { "136002-120.mn1", 0x0800, 0x35619648, 1 | BRF_PRG | BRF_ESS }, // 7
844 { "136002-121.p1", 0x0800, 0x73d38e47, 1 | BRF_PRG | BRF_ESS }, // 8
845 { "136002-222.r1", 0x0800, 0x707bd5c3, 1 | BRF_PRG | BRF_ESS }, // 9
846 { "136002-123.np3", 0x0800, 0x29f7e937, 1 | BRF_PRG | BRF_ESS }, // 10
847 { "136002-124.r3", 0x0800, 0xc16ec351, 1 | BRF_PRG | BRF_ESS }, // 11
848
849 { "136002-125.d7", 0x0100, 0x5903af03, 2 | BRF_GRA }, // 12 user1
850
851 { "136002-126.a1", 0x0020, 0x8b04f921, 3 | BRF_GRA }, // 7 mathbox prom
852
853 { "136002-132.l1", 0x0100, 0x2af82e87, 4 | BRF_GRA }, // 8 user3
854 { "136002-131.k1", 0x0100, 0xb31f6e24, 4 | BRF_GRA }, // 9
855 { "136002-130.j1", 0x0100, 0x8119b847, 4 | BRF_GRA }, // 10
856 { "136002-129.h1", 0x0100, 0x09f5a4d5, 4 | BRF_GRA }, // 11
857 { "136002-128.f1", 0x0100, 0x823b61ae, 4 | BRF_GRA }, // 12
858 { "136002-127.e1", 0x0100, 0x276eadd5, 4 | BRF_GRA }, // 13
859 };
860
861 STD_ROM_PICK(temped)
862 STD_ROM_FN(temped)
863
864 struct BurnDriver BurnDrvTemped = {
865 "temped", "tempest", NULL, NULL, "2000",
866 "TempEd\0", NULL, "hack", "Miscellaneous",
867 NULL, NULL, NULL, NULL,
868 BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL | BDF_HACK, 2, HARDWARE_MISC_PRE90S, GBF_SHOOT | GBF_ACTION | GBF_VECTOR, 0,
869 NULL, tempedRomInfo, tempedRomName, NULL, NULL, NULL, NULL, TempestInputInfo, TempestDIPInfo,
870 DrvInitSmall, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x40 * 256,
871 480, 640, 3, 4
872 };
873
874
875 // Tempest All Levels
876
877 static struct BurnRomInfo tempallRomDesc[] = {
878 { "tempall.113", 0x0800, 0xa9000137, 1 | BRF_PRG | BRF_ESS }, // 0 maincpu
879 { "136002-114.e1", 0x0800, 0x11077375, 1 | BRF_PRG | BRF_ESS }, // 1
880 { "136002-115.f1", 0x0800, 0xf3e2827a, 1 | BRF_PRG | BRF_ESS }, // 2
881 { "136002-316.h1", 0x0800, 0xaeb0f7e9, 1 | BRF_PRG | BRF_ESS }, // 3
882 { "136002-217.j1", 0x0800, 0xef2eb645, 1 | BRF_PRG | BRF_ESS }, // 4
883 { "136002.118.k1", 0x0800, 0xbeb352ab, 1 | BRF_PRG | BRF_ESS }, // 5
884 { "136002-119.lm1", 0x0800, 0xa4de050f, 1 | BRF_PRG | BRF_ESS }, // 6
885 { "136002-120.mn1", 0x0800, 0x35619648, 1 | BRF_PRG | BRF_ESS }, // 7
886 { "136002-121.p1", 0x0800, 0x73d38e47, 1 | BRF_PRG | BRF_ESS }, // 8
887 { "136002-222.r1", 0x0800, 0x707bd5c3, 1 | BRF_PRG | BRF_ESS }, // 9
888 { "136002-123.np3", 0x0800, 0x29f7e937, 1 | BRF_PRG | BRF_ESS }, // 10
889 { "136002-124.r3", 0x0800, 0xc16ec351, 1 | BRF_PRG | BRF_ESS }, // 11
890
891 { "136002-125.d7", 0x0100, 0x5903af03, 2 | BRF_GRA }, // 12 user1
892
893 { "136002-126.a1", 0x0020, 0x8b04f921, 3 | BRF_GRA }, // 7 mathbox prom
894
895 { "136002-132.l1", 0x0100, 0x2af82e87, 4 | BRF_GRA }, // 8 user3
896 { "136002-131.k1", 0x0100, 0xb31f6e24, 4 | BRF_GRA }, // 9
897 { "136002-130.j1", 0x0100, 0x8119b847, 4 | BRF_GRA }, // 10
898 { "136002-129.h1", 0x0100, 0x09f5a4d5, 4 | BRF_GRA }, // 11
899 { "136002-128.f1", 0x0100, 0x823b61ae, 4 | BRF_GRA }, // 12
900 { "136002-127.e1", 0x0100, 0x276eadd5, 4 | BRF_GRA }, // 13
901 };
902
903 STD_ROM_PICK(tempall)
904 STD_ROM_FN(tempall)
905
906 struct BurnDriver BurnDrvTempall = {
907 "tempall", "tempest", NULL, NULL, "2000",
908 "Tempest All Levels\0", NULL, "hack", "Miscellaneous",
909 NULL, NULL, NULL, NULL,
910 BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL | BDF_HACK, 2, HARDWARE_MISC_PRE90S, GBF_SHOOT | GBF_ACTION | GBF_VECTOR, 0,
911 NULL, tempallRomInfo, tempallRomName, NULL, NULL, NULL, NULL, TempestInputInfo, TempestDIPInfo,
912 DrvInitSmall, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x40 * 256,
913 480, 640, 3, 4
914 };
915
916
917 // Tempest Twisted
918
919 static struct BurnRomInfo temptwstRomDesc[] = {
920 { "tempall.113", 0x0800, 0xa9000137, 1 | BRF_PRG | BRF_ESS }, // 0 maincpu
921 { "136002-114.e1", 0x0800, 0x11077375, 1 | BRF_PRG | BRF_ESS }, // 1
922 { "136002-115.f1", 0x0800, 0xf3e2827a, 1 | BRF_PRG | BRF_ESS }, // 2
923 { "136002-316.h1", 0x0800, 0xaeb0f7e9, 1 | BRF_PRG | BRF_ESS }, // 3
924 { "136002-217.j1", 0x0800, 0xef2eb645, 1 | BRF_PRG | BRF_ESS }, // 4
925 { "temptwst.118", 0x0800, 0xf30afe2d, 1 | BRF_PRG | BRF_ESS }, // 5
926 { "temptwst.119", 0x0800, 0x571b1799, 1 | BRF_PRG | BRF_ESS }, // 6
927 { "136002-120.mn1", 0x0800, 0x35619648, 1 | BRF_PRG | BRF_ESS }, // 7
928 { "temptwst.121", 0x0800, 0x67619e6e, 1 | BRF_PRG | BRF_ESS }, // 8
929 { "136002-222.r1", 0x0800, 0x707bd5c3, 1 | BRF_PRG | BRF_ESS }, // 9
930 { "136002-123.np3", 0x0800, 0x29f7e937, 1 | BRF_PRG | BRF_ESS }, // 10
931 { "136002-124.r3", 0x0800, 0xc16ec351, 1 | BRF_PRG | BRF_ESS }, // 11
932
933 { "136002-125.d7", 0x0100, 0x5903af03, 2 | BRF_GRA }, // 12 user1
934
935 { "136002-126.a1", 0x0020, 0x8b04f921, 3 | BRF_GRA }, // 7 mathbox prom
936
937 { "136002-132.l1", 0x0100, 0x2af82e87, 4 | BRF_GRA }, // 8 user3
938 { "136002-131.k1", 0x0100, 0xb31f6e24, 4 | BRF_GRA }, // 9
939 { "136002-130.j1", 0x0100, 0x8119b847, 4 | BRF_GRA }, // 10
940 { "136002-129.h1", 0x0100, 0x09f5a4d5, 4 | BRF_GRA }, // 11
941 { "136002-128.f1", 0x0100, 0x823b61ae, 4 | BRF_GRA }, // 12
942 { "136002-127.e1", 0x0100, 0x276eadd5, 4 | BRF_GRA }, // 13
943 };
944
945 STD_ROM_PICK(temptwst)
946 STD_ROM_FN(temptwst)
947
948 struct BurnDriver BurnDrvTemptwst = {
949 "temptwst", "tempest", NULL, NULL, "2000",
950 "Tempest Twisted\0", NULL, "Twisty", "Miscellaneous",
951 NULL, NULL, NULL, NULL,
952 BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL | BDF_HACK, 2, HARDWARE_MISC_PRE90S, GBF_SHOOT | GBF_ACTION | GBF_VECTOR, 0,
953 NULL, temptwstRomInfo, temptwstRomName, NULL, NULL, NULL, NULL, TempestInputInfo, TempestDIPInfo,
954 DrvInitSmall, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x40 * 256,
955 480, 640, 3, 4
956 };
957