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