1 /***************************************************************************
2
3 Atari Tempest hardware
4
5 Games supported:
6 * Tempest
7 * Tempest Tubes
8
9 Known bugs:
10 * none at this time
11
12 ****************************************************************************
13
14 TEMPEST
15 -------
16 HEX R/W D7 D6 D5 D4 D3 D2 D2 D0 function
17 0000-07FF R/W D D D D D D D D program ram (2K)
18 0800-080F W D D D D Colour ram
19
20 0C00 R D Right coin sw
21 0C00 R D Center coin sw
22 0C00 R D Left coin sw
23 0C00 R D Slam sw
24 0C00 R D Self test sw
25 0C00 R D Diagnostic step sw
26 0C00 R D Halt
27 0C00 R D 3kHz ??
28 0D00 R D D D D D D D D option switches
29 0E00 R D D D D D D D D option switches
30
31 2000-2FFF R/W D D D D D D D D Vector Ram (4K)
32 3000-3FFF R D D D D D D D D Vector Rom (4K)
33
34 4000 W D Right coin counter
35 4000 W D left coin counter
36 4000 W D Video invert - x
37 4000 W D Video invert - y
38 4800 W Vector generator GO
39
40 5000 W WD clear
41 5800 W Vect gen reset
42
43 6000-603F W D D D D D D D D EAROM write
44 6040 W D D D D D D D D EAROM control
45 6040 R D Mathbox status
46 6050 R D D D D D D D D EAROM read
47
48 6060 R D D D D D D D D Mathbox read
49 6070 R D D D D D D D D Mathbox read
50 6080-609F W D D D D D D D D Mathbox start
51
52 60C0-60CF R/W D D D D D D D D Custom audio chip 1
53 60D0-60DF R/W D D D D D D D D Custom audio chip 2
54
55 60E0 R D one player start LED
56 60E0 R D two player start LED
57 60E0 R D FLIP
58
59 9000-DFFF R D D D D D D D D Program ROM (20K)
60
61 notes: program ram decode may be incorrect, but it appears like
62 this on the schematics, and the troubleshooting guide.
63
64 ZAP1,FIRE1,FIRE2,ZAP2 go to pokey2 , bits 3,and 4
65 (depending on state of FLIP)
66 player1 start, player2 start are pokey2 , bits 5 and 6
67
68 encoder wheel goes to pokey1 bits 0-3
69 pokey1, bit4 is cocktail detect
70
71
72 TEMPEST SWITCH SETTINGS (Atari, 1980)
73 -------------------------------------
74
75
76 GAME OPTIONS:
77 (8-position switch at L12 on Analog Vector-Generator PCB)
78
79 1 2 3 4 5 6 7 8 Meaning
80 -------------------------------------------------------------------------
81 Off Off 2 lives per game
82 On On 3 lives per game
83 On Off 4 lives per game
84 Off On 5 lives per game
85 On On Off Bonus life every 10000 pts
86 On On On Bonus life every 20000 pts
87 On Off On Bonus life every 30000 pts
88 On Off Off Bonus life every 40000 pts
89 Off On On Bonus life every 50000 pts
90 Off On Off Bonus life every 60000 pts
91 Off Off On Bonus life every 70000 pts
92 Off Off Off No bonus lives
93 On On English
94 On Off French
95 Off On German
96 Off Off Spanish
97 On 1-credit minimum
98 Off 2-credit minimum
99
100
101 GAME OPTIONS:
102 (4-position switch at D/E2 on Math Box PCB)
103
104 1 2 3 4 Meaning
105 -------------------------------------------------------------------------
106 Off Minimum rating range: 1, 3, 5, 7, 9
107 On Minimum rating range tied to high score
108 Off Off Medium difficulty (see notes)
109 Off On Easy difficulty (see notes)
110 On Off Hard difficulty (see notes)
111 On On Medium difficulty (see notes)
112
113
114 PRICING OPTIONS:
115 (8-position switch at N13 on Analog Vector-Generator PCB)
116
117 1 2 3 4 5 6 7 8 Meaning
118 -------------------------------------------------------------------------
119 On On On No bonus coins
120 On On Off For every 2 coins, game adds 1 more coin
121 On Off On For every 4 coins, game adds 1 more coin
122 On Off Off For every 4 coins, game adds 2 more coins
123 Off On On For every 5 coins, game adds 1 more coin
124 Off On Off For every 3 coins, game adds 1 more coin
125 On Off Off On Demonstration Mode (see notes)
126 Off Off Off On Demonstration-Freeze Mode (see notes)
127 On Left coin mech * 1
128 Off Left coin mech * 2
129 On On Right coin mech * 1
130 On Off Right coin mech * 4
131 Off On Right coin mech * 5
132 Off Off Right coin mech * 6
133 Off On Free Play
134 Off Off 1 coin 2 plays
135 On On 1 coin 1 play
136 On Off 2 coins 1 play
137
138
139 GAME SETTING NOTES:
140 -------------------
141
142 Demonstration Mode:
143 - Plays a normal game of Tempest, but pressing SUPERZAP sends you
144 directly to the next level.
145
146 Demonstration-Freeze Mode:
147 - Just like Demonstration Mode, but with frozen screen action.
148
149 Both Demonstration Modes:
150 - Pressing RESET in either mode will cause the game to lock up.
151 To recover, set switch 1 to On.
152 - You can start at any level from 1..81, so it's an easy way of
153 seeing what the game can throw at you
154 - The score is zeroed at the end of the game, so you also don't
155 have to worry about artificially high scores disrupting your
156 scoring records as stored in the game's EAROM.
157
158 Easy Difficulty:
159 - Enemies move more slowly
160 - One less enemy shot on the screen at any given time
161
162 Hard Difficulty:
163 - Enemies move more quickly
164 - 1-4 more enemy shots on the screen at any given time
165 - One more enemy may be on the screen at any given time
166
167 High Scores:
168 - Changing toggles 1-5 at L12 (more/fewer lives, bonus ship levels)
169 will erase the high score table.
170 - You should also wait 8-10 seconds after a game has been played
171 before entering self-test mode or powering down; otherwise, you
172 might erase or corrupt the high score table.
173
174 ***************************************************************************/
175
176 #include "driver.h"
177 #include "vidhrdw/generic.h"
178 #include "machine/mathbox.h"
179 #include "vidhrdw/avgdvg.h"
180 #include "vidhrdw/vector.h"
181 #include "machine/atari_vg.h"
182
183
184
185 /*************************************
186 *
187 * Input ports
188 *
189 *************************************/
190
READ_HANDLER(tempest_IN0_r)191 static READ_HANDLER( tempest_IN0_r )
192 {
193 int res = readinputport(0);
194
195 if (avgdvg_done())
196 res |= 0x40;
197
198 /* Emulate the 3kHz source on bit 7 (divide 1.5MHz by 512) */
199 if (activecpu_gettotalcycles() & 0x100)
200 res |= 0x80;
201
202 return res;
203 }
204
205
READ_HANDLER(input_port_1_bit_r)206 static READ_HANDLER( input_port_1_bit_r )
207 {
208 return (readinputport(1) & (1 << offset)) ? 0 : 228;
209 }
210
211
READ_HANDLER(input_port_2_bit_r)212 static READ_HANDLER( input_port_2_bit_r )
213 {
214 return (readinputport(2) & (1 << offset)) ? 0 : 228;
215 }
216
217
218
219 /*************************************
220 *
221 * Output ports
222 *
223 *************************************/
224
WRITE_HANDLER(tempest_led_w)225 static WRITE_HANDLER( tempest_led_w )
226 {
227 set_led_status(0, ~data & 0x02);
228 set_led_status(1, ~data & 0x01);
229 /* FLIP is bit 0x04 */
230 }
231
232
WRITE_HANDLER(tempest_coin_w)233 static WRITE_HANDLER( tempest_coin_w )
234 {
235 coin_counter_w(0, (data & 0x01));
236 coin_counter_w(1, (data & 0x02));
237 coin_counter_w(2, (data & 0x04));
238 avg_set_flip_x(data & 0x08);
239 avg_set_flip_y(data & 0x10);
240 }
241
242
243
244 /*************************************
245 *
246 * Main CPU memory handlers
247 *
248 *************************************/
249
MEMORY_READ_START(readmem)250 static MEMORY_READ_START( readmem )
251 { 0x0000, 0x07ff, MRA_RAM },
252 { 0x0c00, 0x0c00, tempest_IN0_r }, /* IN0 */
253 { 0x0d00, 0x0d00, input_port_3_r }, /* DSW1 */
254 { 0x0e00, 0x0e00, input_port_4_r }, /* DSW2 */
255 { 0x2000, 0x2fff, MRA_RAM },
256 { 0x3000, 0x3fff, MRA_ROM },
257 { 0x6040, 0x6040, mb_status_r },
258 { 0x6050, 0x6050, atari_vg_earom_r },
259 { 0x6060, 0x6060, mb_lo_r },
260 { 0x6070, 0x6070, mb_hi_r },
261 { 0x60c0, 0x60cf, pokey1_r },
262 { 0x60d0, 0x60df, pokey2_r },
263 { 0x9000, 0xdfff, MRA_ROM },
264 { 0xf000, 0xffff, MRA_ROM }, /* for the reset / interrupt vectors */
265 MEMORY_END
266
267
268 static MEMORY_WRITE_START( writemem )
269 { 0x0000, 0x07ff, MWA_RAM },
270 { 0x0800, 0x080f, tempest_colorram_w },
271 { 0x2000, 0x2fff, MWA_RAM, &vectorram, &vectorram_size },
272 { 0x3000, 0x3fff, MWA_ROM },
273 { 0x4000, 0x4000, tempest_coin_w },
274 { 0x4800, 0x4800, avgdvg_go_w },
275 { 0x5000, 0x5000, watchdog_reset_w },
276 { 0x5800, 0x5800, avgdvg_reset_w },
277 { 0x6000, 0x603f, atari_vg_earom_w },
278 { 0x6040, 0x6040, atari_vg_earom_ctrl_w },
279 { 0x6080, 0x609f, mb_go_w },
280 { 0x60c0, 0x60cf, pokey1_w },
281 { 0x60d0, 0x60df, pokey2_w },
282 { 0x60e0, 0x60e0, tempest_led_w },
283 { 0x9000, 0xdfff, MWA_ROM },
284 MEMORY_END
285
286
287
288 /*************************************
289 *
290 * Port definitions
291 *
292 *************************************/
293
294 INPUT_PORTS_START( tempest )
295 PORT_START /* IN0 */
296 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN3 )
297 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
298 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 )
299 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_TILT )
300 PORT_SERVICE( 0x10, IP_ACTIVE_LOW )
301 PORT_BITX( 0x20, IP_ACTIVE_LOW, IPT_SERVICE, "Diagnostic Step", KEYCODE_F1, IP_JOY_NONE )
302 /* bit 6 is the VG HALT bit. We set it to "low" */
303 /* per default (busy vector processor). */
304 /* handled by tempest_IN0_r() */
305 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
306 /* bit 7 is tied to a 3kHz (?) clock */
307 /* handled by tempest_IN0_r() */
308 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
309
310 PORT_START /* IN1/DSW0 */
311 /* This is the Tempest spinner input. It only uses 4 bits. */
312 PORT_ANALOG( 0x0f, 0x00, IPT_DIAL, 25, 20, 0, 0)
313 /* The next one is reponsible for cocktail mode.
314 * According to the documentation, this is not a switch, although
315 * it may have been planned to put it on the Math Box PCB, D/E2 )
316 */
317 PORT_DIPNAME( 0x10, 0x10, DEF_STR( Cabinet ) )
318 PORT_DIPSETTING( 0x10, DEF_STR( Upright ) )
319 PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
320 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
321 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
322 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
323
324 PORT_START /* IN2 */
325 PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) )
326 PORT_DIPSETTING( 0x02, "Easy" )
327 PORT_DIPSETTING( 0x03, "Medium1" )
328 PORT_DIPSETTING( 0x00, "Medium2" )
329 PORT_DIPSETTING( 0x01, "Hard" )
330 PORT_DIPNAME( 0x04, 0x04, "Rating" )
331 PORT_DIPSETTING( 0x04, "1, 3, 5, 7, 9" )
332 PORT_DIPSETTING( 0x00, "tied to high score" )
333 PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_BUTTON2 )
334 PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
335 PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_START1 )
336 PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_START2 )
337 PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
338
339 PORT_START /* DSW1 - (N13 on analog vector generator PCB */
340 PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coinage ) )
341 PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) )
342 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
343 PORT_DIPSETTING( 0x03, DEF_STR( 1C_2C ) )
344 PORT_DIPSETTING( 0x02, DEF_STR( Free_Play ) )
345 PORT_DIPNAME( 0x0c, 0x00, "Right Coin" )
346 PORT_DIPSETTING( 0x00, "*1" )
347 PORT_DIPSETTING( 0x04, "*4" )
348 PORT_DIPSETTING( 0x08, "*5" )
349 PORT_DIPSETTING( 0x0c, "*6" )
350 PORT_DIPNAME( 0x10, 0x00, "Left Coin" )
351 PORT_DIPSETTING( 0x00, "*1" )
352 PORT_DIPSETTING( 0x10, "*2" )
353 PORT_DIPNAME( 0xe0, 0x00, "Bonus Coins" )
354 PORT_DIPSETTING( 0x00, "None" )
355 PORT_DIPSETTING( 0x80, "1 each 5" )
356 PORT_DIPSETTING( 0x40, "1 each 4 (+Demo)" )
357 PORT_DIPSETTING( 0xa0, "1 each 3" )
358 PORT_DIPSETTING( 0x60, "2 each 4 (+Demo)" )
359 PORT_DIPSETTING( 0x20, "1 each 2" )
360 PORT_DIPSETTING( 0xc0, "Freeze Mode" )
361 PORT_DIPSETTING( 0xe0, "Freeze Mode" )
362
363 PORT_START /* DSW2 - (L12 on analog vector generator PCB */
364 PORT_DIPNAME( 0x01, 0x00, "Minimum" )
365 PORT_DIPSETTING( 0x00, "1 Credit" )
366 PORT_DIPSETTING( 0x01, "2 Credit" )
367 PORT_DIPNAME( 0x06, 0x00, "Language" )
368 PORT_DIPSETTING( 0x00, "English" )
369 PORT_DIPSETTING( 0x02, "French" )
370 PORT_DIPSETTING( 0x04, "German" )
371 PORT_DIPSETTING( 0x06, "Spanish" )
372 PORT_DIPNAME( 0x38, 0x00, DEF_STR( Bonus_Life ) )
373 PORT_DIPSETTING( 0x08, "10000" )
374 PORT_DIPSETTING( 0x00, "20000" )
375 PORT_DIPSETTING( 0x10, "30000" )
376 PORT_DIPSETTING( 0x18, "40000" )
377 PORT_DIPSETTING( 0x20, "50000" )
378 PORT_DIPSETTING( 0x28, "60000" )
379 PORT_DIPSETTING( 0x30, "70000" )
380 PORT_DIPSETTING( 0x38, "None" )
381 PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Lives ) )
382 PORT_DIPSETTING( 0xc0, "2" )
383 PORT_DIPSETTING( 0x00, "3" )
384 PORT_DIPSETTING( 0x40, "4" )
385 PORT_DIPSETTING( 0x80, "5" )
386 INPUT_PORTS_END
387
388
389
390 /*************************************
391 *
392 * Sound interfaces
393 *
394 *************************************/
395
396 static struct POKEYinterface pokey_interface =
397 {
398 2, /* 2 chips */
399 12096000/8, /* 1.512 MHz */
400 { 50, 50 },
401 /* The 8 pot handlers */
402 { input_port_1_bit_r, input_port_2_bit_r },
403 { input_port_1_bit_r, input_port_2_bit_r },
404 { input_port_1_bit_r, input_port_2_bit_r },
405 { input_port_1_bit_r, input_port_2_bit_r },
406 { input_port_1_bit_r, input_port_2_bit_r },
407 { input_port_1_bit_r, input_port_2_bit_r },
408 { input_port_1_bit_r, input_port_2_bit_r },
409 { input_port_1_bit_r, input_port_2_bit_r },
410 /* The allpot handler */
411 { 0, 0 },
412 };
413
414
415
416 /*************************************
417 *
418 * Machine drivers
419 *
420 *************************************/
421
422 static MACHINE_DRIVER_START( tempest )
423
424 /* basic machine hardware */
425 MDRV_CPU_ADD(M6502, 12096000/8) /* 1.512 MHz */
426 MDRV_CPU_MEMORY(readmem,writemem)
427 MDRV_CPU_VBLANK_INT(irq0_line_hold,4) /* 4.1ms */
428
429 MDRV_FRAMES_PER_SECOND(60)
430 MDRV_NVRAM_HANDLER(atari_vg)
431
432 /* video hardware */
433 MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_VECTOR | VIDEO_RGB_DIRECT)
434 MDRV_SCREEN_SIZE(400, 300)
435 MDRV_VISIBLE_AREA(0, 580, 0, 570)
436 MDRV_PALETTE_LENGTH(256)
437
438 MDRV_PALETTE_INIT(avg_multi)
439 MDRV_VIDEO_START(avg_tempest)
440 MDRV_VIDEO_UPDATE(vector)
441
442 /* sound hardware */
443 MDRV_SOUND_ADD(POKEY, pokey_interface)
444 MACHINE_DRIVER_END
445
446
447
448 /*************************************
449 *
450 * ROM definitions
451 *
452 *************************************/
453
454 ROM_START( tempest ) /* rev 3 */
455 ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code */
456 ROM_LOAD( "136002.113", 0x9000, 0x0800, CRC(65d61fe7) SHA1(38a1e8a8f65b7887cf3e190269fe4ce2c6f818aa) )
457 ROM_LOAD( "136002.114", 0x9800, 0x0800, CRC(11077375) SHA1(ed8ff0ca969da6672a7683b93d4fcf2935a0d903) )
458 ROM_LOAD( "136002.115", 0xa000, 0x0800, CRC(f3e2827a) SHA1(bd04fcfbbba995e08c3144c1474fcddaaeb1c700) )
459 ROM_LOAD( "136002.316", 0xa800, 0x0800, CRC(aeb0f7e9) SHA1(a5cc25015b98692673cfc1c7c2e9634efd750870) )
460 ROM_LOAD( "136002.217", 0xb000, 0x0800, CRC(ef2eb645) SHA1(b1a2c969e8897e335d5354de6ae04a65d4b2a1e4) )
461 ROM_LOAD( "136002.118", 0xb800, 0x0800, CRC(beb352ab) SHA1(f213166d3970e0bd0f29d8dea8d6afa6990cce38) )
462 ROM_LOAD( "136002.119", 0xc000, 0x0800, CRC(a4de050f) SHA1(ea302e43a313a5a18115e74ddbaaedde0fbecda7) )
463 ROM_LOAD( "136002.120", 0xc800, 0x0800, CRC(35619648) SHA1(48f1e8bed7ec6afa0b4c549a30e5ec331c071e40) )
464 ROM_LOAD( "136002.121", 0xd000, 0x0800, CRC(73d38e47) SHA1(9980606376a79ba94f8e2a325871a6c8d10d83fc) )
465 ROM_LOAD( "136002.222", 0xd800, 0x0800, CRC(707bd5c3) SHA1(2f0af6fb7154c244c794f7247e5c16a1e06ddf7d) )
466 ROM_RELOAD( 0xf800, 0x0800 ) /* for reset/interrupt vectors */
467 /* Mathbox ROMs */
468 ROM_LOAD( "136002.123", 0x3000, 0x0800, CRC(29f7e937) SHA1(686c8b9b8901262e743497cee7f2f7dd5cb3af7e) )
469 ROM_LOAD( "136002.124", 0x3800, 0x0800, CRC(c16ec351) SHA1(a30a3662c740810c0f20e3712679606921b8ca06) )
470 ROM_END
471
472
473 ROM_START( tempest1 ) /* rev 1 */
474 ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code */
475 ROM_LOAD( "136002.113", 0x9000, 0x0800, CRC(65d61fe7) SHA1(38a1e8a8f65b7887cf3e190269fe4ce2c6f818aa) )
476 ROM_LOAD( "136002.114", 0x9800, 0x0800, CRC(11077375) SHA1(ed8ff0ca969da6672a7683b93d4fcf2935a0d903) )
477 ROM_LOAD( "136002.115", 0xa000, 0x0800, CRC(f3e2827a) SHA1(bd04fcfbbba995e08c3144c1474fcddaaeb1c700) )
478 ROM_LOAD( "136002.116", 0xa800, 0x0800, CRC(7356896c) SHA1(a013ede292189a8f5a907de882ee1a573d784b3c) )
479 ROM_LOAD( "136002.117", 0xb000, 0x0800, CRC(55952119) SHA1(470d914fa52fce3786cb6330889876d3547dca65) )
480 ROM_LOAD( "136002.118", 0xb800, 0x0800, CRC(beb352ab) SHA1(f213166d3970e0bd0f29d8dea8d6afa6990cce38) )
481 ROM_LOAD( "136002.119", 0xc000, 0x0800, CRC(a4de050f) SHA1(ea302e43a313a5a18115e74ddbaaedde0fbecda7) )
482 ROM_LOAD( "136002.120", 0xc800, 0x0800, CRC(35619648) SHA1(48f1e8bed7ec6afa0b4c549a30e5ec331c071e40) )
483 ROM_LOAD( "136002.121", 0xd000, 0x0800, CRC(73d38e47) SHA1(9980606376a79ba94f8e2a325871a6c8d10d83fc) )
484 ROM_LOAD( "136002.122", 0xd800, 0x0800, CRC(796a9918) SHA1(c862a0d4ea330161e4c3cc8e5e9ad38893fffbd4) )
485 ROM_RELOAD( 0xf800, 0x0800 ) /* for reset/interrupt vectors */
486 /* Mathbox ROMs */
487 ROM_LOAD( "136002.123", 0x3000, 0x0800, CRC(29f7e937) SHA1(686c8b9b8901262e743497cee7f2f7dd5cb3af7e) )
488 ROM_LOAD( "136002.124", 0x3800, 0x0800, CRC(c16ec351) SHA1(a30a3662c740810c0f20e3712679606921b8ca06) )
489 ROM_END
490
491
492 ROM_START( tempest2 ) /* rev 2 */
493 ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code */
494 ROM_LOAD( "136002.113", 0x9000, 0x0800, CRC(65d61fe7) SHA1(38a1e8a8f65b7887cf3e190269fe4ce2c6f818aa) )
495 ROM_LOAD( "136002.114", 0x9800, 0x0800, CRC(11077375) SHA1(ed8ff0ca969da6672a7683b93d4fcf2935a0d903) )
496 ROM_LOAD( "136002.115", 0xa000, 0x0800, CRC(f3e2827a) SHA1(bd04fcfbbba995e08c3144c1474fcddaaeb1c700) )
497 ROM_LOAD( "136002.116", 0xa800, 0x0800, CRC(7356896c) SHA1(a013ede292189a8f5a907de882ee1a573d784b3c) )
498 ROM_LOAD( "136002.217", 0xb000, 0x0800, CRC(ef2eb645) SHA1(b1a2c969e8897e335d5354de6ae04a65d4b2a1e4) )
499 ROM_LOAD( "136002.118", 0xb800, 0x0800, CRC(beb352ab) SHA1(f213166d3970e0bd0f29d8dea8d6afa6990cce38) )
500 ROM_LOAD( "136002.119", 0xc000, 0x0800, CRC(a4de050f) SHA1(ea302e43a313a5a18115e74ddbaaedde0fbecda7) )
501 ROM_LOAD( "136002.120", 0xc800, 0x0800, CRC(35619648) SHA1(48f1e8bed7ec6afa0b4c549a30e5ec331c071e40) )
502 ROM_LOAD( "136002.121", 0xd000, 0x0800, CRC(73d38e47) SHA1(9980606376a79ba94f8e2a325871a6c8d10d83fc) )
503 ROM_LOAD( "136002.222", 0xd800, 0x0800, CRC(707bd5c3) SHA1(2f0af6fb7154c244c794f7247e5c16a1e06ddf7d) )
504 ROM_RELOAD( 0xf800, 0x0800 ) /* for reset/interrupt vectors */
505 /* Mathbox ROMs */
506 ROM_LOAD( "136002.123", 0x3000, 0x0800, CRC(29f7e937) SHA1(686c8b9b8901262e743497cee7f2f7dd5cb3af7e) )
507 ROM_LOAD( "136002.124", 0x3800, 0x0800, CRC(c16ec351) SHA1(a30a3662c740810c0f20e3712679606921b8ca06) )
508 ROM_END
509
510
511 ROM_START( tempest3 ) /* rev ? */
512 ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code */
513 ROM_LOAD( "237.002", 0x9000, 0x1000, CRC(1d0cc503) SHA1(7bef95db9b1102d6b1166bda0ccb276ef4cc3764) )
514 ROM_LOAD( "136.002", 0xa000, 0x1000, CRC(c88e3524) SHA1(89144baf1efc703b2336774793ce345b37829ee7) )
515 ROM_LOAD( "235.002", 0xb000, 0x1000, CRC(a4b2ce3f) SHA1(a5f5fb630a48c5d25346f90d4c13aaa98f60b228) )
516 ROM_LOAD( "134.002", 0xc000, 0x1000, CRC(65a9a9f9) SHA1(73aa7d6f4e7093ccb2d97f6344f354872bcfd72a) )
517 ROM_LOAD( "133.002", 0xd000, 0x1000, CRC(de4e9e34) SHA1(04be074e45bf5cd95a852af97cd04e35b7f27fc4) )
518 ROM_RELOAD( 0xf000, 0x1000 ) /* for reset/interrupt vectors */
519 /* Mathbox ROMs */
520 ROM_LOAD( "138.002", 0x3000, 0x1000, CRC(9995256d) SHA1(2b725ee1a57d423c7d7377a1744f48412e0f2f69) )
521 ROM_END
522
523
524 ROM_START( temptube )
525 ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code */
526 ROM_LOAD( "136002.113", 0x9000, 0x0800, CRC(65d61fe7) SHA1(38a1e8a8f65b7887cf3e190269fe4ce2c6f818aa) )
527 ROM_LOAD( "136002.114", 0x9800, 0x0800, CRC(11077375) SHA1(ed8ff0ca969da6672a7683b93d4fcf2935a0d903) )
528 ROM_LOAD( "136002.115", 0xa000, 0x0800, CRC(f3e2827a) SHA1(bd04fcfbbba995e08c3144c1474fcddaaeb1c700) )
529 ROM_LOAD( "136002.316", 0xa800, 0x0800, CRC(aeb0f7e9) SHA1(a5cc25015b98692673cfc1c7c2e9634efd750870) )
530 ROM_LOAD( "136002.217", 0xb000, 0x0800, CRC(ef2eb645) SHA1(b1a2c969e8897e335d5354de6ae04a65d4b2a1e4) )
531 ROM_LOAD( "tube.118", 0xb800, 0x0800, CRC(cefb03f0) SHA1(41ddfa4991fa49a31d4740a04551556acca66196) )
532 ROM_LOAD( "136002.119", 0xc000, 0x0800, CRC(a4de050f) SHA1(ea302e43a313a5a18115e74ddbaaedde0fbecda7) )
533 ROM_LOAD( "136002.120", 0xc800, 0x0800, CRC(35619648) SHA1(48f1e8bed7ec6afa0b4c549a30e5ec331c071e40) )
534 ROM_LOAD( "136002.121", 0xd000, 0x0800, CRC(73d38e47) SHA1(9980606376a79ba94f8e2a325871a6c8d10d83fc) )
535 ROM_LOAD( "136002.222", 0xd800, 0x0800, CRC(707bd5c3) SHA1(2f0af6fb7154c244c794f7247e5c16a1e06ddf7d) )
536 ROM_RELOAD( 0xf800, 0x0800 ) /* for reset/interrupt vectors */
537 /* Mathbox ROMs */
538 ROM_LOAD( "136002.123", 0x3000, 0x0800, CRC(29f7e937) SHA1(686c8b9b8901262e743497cee7f2f7dd5cb3af7e) )
539 ROM_LOAD( "136002.124", 0x3800, 0x0800, CRC(c16ec351) SHA1(a30a3662c740810c0f20e3712679606921b8ca06) )
540 ROM_END
541
542
543 #if 0 /* identical to rom_tempest, only different rom sizes */
544 ROM_START( tempest3 )
545 ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code */
546 ROM_LOAD( "tempest.x", 0x9000, 0x1000, NO_DUMP )
547 ROM_LOAD( "tempest.1", 0xa000, 0x1000, NO_DUMP )
548 ROM_LOAD( "tempest.3", 0xb000, 0x1000, NO_DUMP )
549 ROM_LOAD( "tempest.5", 0xc000, 0x1000, NO_DUMP )
550 ROM_LOAD( "tempest.7", 0xd000, 0x1000, NO_DUMP )
551 ROM_RELOAD( 0xf000, 0x1000 ) /* for reset/interrupt vectors */
552 /* Mathbox ROMs */
553 ROM_LOAD( "tempest.np3", 0x3000, 0x1000, NO_DUMP )
554 ROM_END
555 #endif
556
557
558
559 /*************************************
560 *
561 * Game drivers
562 *
563 *************************************/
564
565 GAMEC( 1980, tempest, 0, tempest, tempest, 0, ROT270, "Atari", "Tempest (rev 3)", &tempest_ctrl, NULL )
566 GAMEC( 1980, tempest1, tempest, tempest, tempest, 0, ROT270, "Atari", "Tempest (rev 1)", &tempest_ctrl, NULL )
567 GAMEC( 1980, tempest2, tempest, tempest, tempest, 0, ROT270, "Atari", "Tempest (rev 2)", &tempest_ctrl, NULL )
568 GAMEC( 1980, tempest3, tempest, tempest, tempest, 0, ROT270, "Atari", "Tempest (rev [Q])", &tempest_ctrl, NULL )
569 GAMEC( 1980, temptube, tempest, tempest, tempest, 0, ROT270, "hack", "Tempest Tubes", &tempest_ctrl, NULL )
570