diff options
Diffstat (limited to 'src/mame/drivers/tempest.c')
-rw-r--r-- | src/mame/drivers/tempest.c | 806 |
1 files changed, 806 insertions, 0 deletions
diff --git a/src/mame/drivers/tempest.c b/src/mame/drivers/tempest.c new file mode 100644 index 00000000000..8d096321ef8 --- /dev/null +++ b/src/mame/drivers/tempest.c @@ -0,0 +1,806 @@ +/*************************************************************************** + + Atari Tempest hardware + + Games supported: + * Tempest [4 sets] + * Tempest Tubes + + Known bugs: + * none at this time + +**************************************************************************** + + TEMPEST + ------- + HEX R/W D7 D6 D5 D4 D3 D2 D2 D0 function + 0000-07FF R/W D D D D D D D D program ram (2K) + 0800-080F W D D D D Colour ram + + 0C00 R D Right coin sw + 0C00 R D Center coin sw + 0C00 R D Left coin sw + 0C00 R D Slam sw + 0C00 R D Self test sw + 0C00 R D Diagnostic step sw + 0C00 R D Halt + 0C00 R D 3kHz ?? + 0D00 R D D D D D D D D option switches + 0E00 R D D D D D D D D option switches + + 2000-2FFF R/W D D D D D D D D Vector Ram (4K) + 3000-3FFF R D D D D D D D D Vector Rom (4K) + + 4000 W D Right coin counter + 4000 W D left coin counter + 4000 W D Video invert - x + 4000 W D Video invert - y + 4800 W Vector generator GO + + 5000 W WD clear + 5800 W Vect gen reset + + 6000-603F W D D D D D D D D EAROM write + 6040 W D D D D D D D D EAROM control + 6040 R D Mathbox status + 6050 R D D D D D D D D EAROM read + + 6060 R D D D D D D D D Mathbox read + 6070 R D D D D D D D D Mathbox read + 6080-609F W D D D D D D D D Mathbox start + + 60C0-60CF R/W D D D D D D D D Custom audio chip 1 + 60D0-60DF R/W D D D D D D D D Custom audio chip 2 + + 60E0 R D one player start LED + 60E0 R D two player start LED + 60E0 R D FLIP + + 9000-DFFF R D D D D D D D D Program ROM (20K) + + notes: program ram decode may be incorrect, but it appears like + this on the schematics, and the troubleshooting guide. + + ZAP1,FIRE1,FIRE2,ZAP2 go to pokey2 , bits 3,and 4 + (depending on state of FLIP) + player1 start, player2 start are pokey2 , bits 5 and 6 + + encoder wheel goes to pokey1 bits 0-3 + pokey1, bit4 is cocktail detect + + + TEMPEST SWITCH SETTINGS (Atari, 1980) + ------------------------------------- + + + GAME OPTIONS: + (8-position switch at L12 on Analog Vector-Generator PCB) + + 1 2 3 4 5 6 7 8 Meaning + ------------------------------------------------------------------------- + Off Off 2 lives per game + On On 3 lives per game + On Off 4 lives per game + Off On 5 lives per game + On On Off Bonus life every 10000 pts + On On On Bonus life every 20000 pts + On Off On Bonus life every 30000 pts + On Off Off Bonus life every 40000 pts + Off On On Bonus life every 50000 pts + Off On Off Bonus life every 60000 pts + Off Off On Bonus life every 70000 pts + Off Off Off No bonus lives + On On English + On Off French + Off On German + Off Off Spanish + On 1-credit minimum + Off 2-credit minimum + + + GAME OPTIONS: + (4-position switch at D/E2 on Math Box PCB) + + 1 2 3 4 Meaning + ------------------------------------------------------------------------- + Off Minimum rating range: 1, 3, 5, 7, 9 + On Minimum rating range tied to high score + Off Off Medium difficulty (see notes) + Off On Easy difficulty (see notes) + On Off Hard difficulty (see notes) + On On Medium difficulty (see notes) + + + PRICING OPTIONS: + (8-position switch at N13 on Analog Vector-Generator PCB) + + 1 2 3 4 5 6 7 8 Meaning + ------------------------------------------------------------------------- + On On On No bonus coins + On On Off For every 2 coins, game adds 1 more coin + On Off On For every 4 coins, game adds 1 more coin + On Off Off For every 4 coins, game adds 2 more coins + Off On On For every 5 coins, game adds 1 more coin + Off On Off For every 3 coins, game adds 1 more coin + On Off Off On Demonstration Mode (see notes) + Off Off Off On Demonstration-Freeze Mode (see notes) + On Left coin mech * 1 + Off Left coin mech * 2 + On On Right coin mech * 1 + On Off Right coin mech * 4 + Off On Right coin mech * 5 + Off Off Right coin mech * 6 + Off On Free Play + Off Off 1 coin 2 plays + On On 1 coin 1 play + On Off 2 coins 1 play + + + GAME SETTING NOTES: + ------------------- + + Demonstration Mode: + - Plays a normal game of Tempest, but pressing SUPERZAP sends you + directly to the next level. + + Demonstration-Freeze Mode: + - Just like Demonstration Mode, but with frozen screen action. + + Both Demonstration Modes: + - Pressing RESET in either mode will cause the game to lock up. + To recover, set switch 1 to On. + - You can start at any level from 1..81, so it's an easy way of + seeing what the game can throw at you + - The score is zeroed at the end of the game, so you also don't + have to worry about artificially high scores disrupting your + scoring records as stored in the game's EAROM. + + Easy Difficulty: + - Enemies move more slowly + - One less enemy shot on the screen at any given time + + Hard Difficulty: + - Enemies move more quickly + - 1-4 more enemy shots on the screen at any given time + - One more enemy may be on the screen at any given time + + High Scores: + - Changing toggles 1-5 at L12 (more/fewer lives, bonus ship levels) + will erase the high score table. + - You should also wait 8-10 seconds after a game has been played + before entering self-test mode or powering down; otherwise, you + might erase or corrupt the high score table. + +----------------------------------------- + +Atari Bulletin, December 4, 1981 + +Tempest Program Bug + +Tempest Uprights Prior to Serial #17426 + + If the score on your Tempest(tm) is greater then 170,000, there +is a 12% chance that a program bug may award 40 credits for one +quarter. + + The ROM (#136002-217) in this package, replaces the ROM in +location J-1 on the main PCB and will correct the problem. + + All cabaret and cocktail cabinets will have the correct ROM +Installed. + +Thank you, + +Fred McCord +Field Service Manager + +Tech Tip, December 11, 1981 + +Tempest(tm) ROM #136002-117 + +We have found that the above part number in location J1 should be replaced with part +number 136002-217 in the main board in order to eliminate the possibility of receiving +extra bonus plays after 170,000 points. + +RMA# T1700 + +Exchange offer expires on March 15, 1982 + +----------------------------------------- + +Skill-Step(tm) feature of your new Tempest(tm) game: + +I. Player rating mode + + 1. Occurs at beginning of every game + 2. Player is given 10 seconds to choose his starting level + 3. Player may choose from those levels displayed at bottom of screen + 4. Player chooses level by: + a. spinning knob until white box surrounds desired level and then + b. pressing fire or superzapper (or start 1 or start 2 if remaining + time is less then 8 seconds), or by waiting until timer expires + 5. Player is given a 3 second warning + 6. Level choices are determined by several factors + a. If the game has been idle for 1 or more attract mode cycles + since the last game, then the choices are levels 1,3,5,7,9 + b. If a player has just finished a game and pressed start before + the attract mode has finished its play mode, then the choices + depend on the highest level reached in that previous game as + follows + +Highest level +reached in +last game Level choices this game +------------- ----------------------- +1 through 11 1,3,5,7,9 +12 or 13 1,3,5,7,9,11 +14 or 15 1,3,5,7,9,11,13 +16 or 17 1,3,5,7,9,11,13,15 +18, 19 or 20 1,3,5,7,9,11,13,15,17 +21 or 22 1,3,5,7,9,11,13,15,17,20 +23 or 24 1,3,5,7,9,11,13,15,17,20,22 +25 or 26 1,3,5,7,9,11,13,15,17,20,22,24 +27 or 28 1,3,5,7,9,11,13,15,17,20,22,24,26 +29, 30 or 31 1,3,5,7,9,11,13,15,17,20,22,24,26,28 +32 or 33 1,3,5,7,9,11,13,15,17,20,22,24,26,28,31 +34, 35 or 36 1,3,5,7,9,11,13,15,17,20,22,24,26,28,31,33 +37,38,39,40 1,3,5,7,9,11,13,15,17,20,22,24,26,28,31,33,36 +41,42,43,44 1,3,5,7,9,11,13,15,17,20,22,24,26,28,31,33,36,40 +45, 46 or 47 1,3,5,7,9,11,13,15,17,20,22,24,26,28,31,33,36,40,44 +48 or 49 1,3,5,7,9,11,13,15,17,20,22,24,26,28,31,33,36,40,44,47 +50, 51 or 52 1,3,5,7,9,11,13,15,17,20,22,24,26,28,31,33,36,40,44,47,49 +53,54,55,56 1,3,5,7,9,11,13,15,17,20,22,24,26,28,31,33,36,40,44,47,49,52 +57,58,59,60 1,3,5,7,9,11,13,15,17,20,22,24,26,28,31,33,36,40,44,47,49,52,56 +61, 62 or 63 1,3,5,7,9,11,13,15,17,20,22,24,26,28,31,33,36,40,44,47,49,52,56,60 +64 or 65 1,3,5,7,9,11,13,15,17,20,22,24,26,28,31,33,36,40,44,47,49,52,56,60,63 +66 through 73 1,3,5,7,9,11,13,15,17,20,22,24,26,28,31,33,36,40,44,47,49,52,56,60,63,65 +74 through 81 1,3,5,7,9,11,13,15,17,20,22,24,26,28,31,33,36,40,44,47,49,52,56,60,63,65,73 +82 through 99 1,3,5,7,9,11,13,15,17,20,22,24,26,28,31,33,36,40,44,47,49,52,56,60,63,65,73,81 + +Rom revisions and bug fixes / effects: + +Revision 2 +136002-217.j1 Fixes the score cheat (see tech notes above) +136002-222.r1 In test mode, changes spinner letters to a line, described in Tempest manual C0-190-01 New Roms + +Revision 3 +136002-316.h1 Fixes screen collapse between players when using newer deflection board + +Note: Roms for Tempest Analog Vector-Generator PCB Assembly A037383-03 or A037383-04 are twice + the size as those for Tempest Analog Vector-Generator PCB Assembly A037383-01 or A037383-02 + +Known roms (listed in the manual) currently not dumped: + +Version 1 for Tempest Analog Vector-Generator PCB Assembly A037383-01 or A037383-02 + 136002-137.p1 + 136002-135.j1 + +***************************************************************************/ + +#include "driver.h" +#include "machine/mathbox.h" +#include "video/avgdvg.h" +#include "video/vector.h" +#include "machine/atari_vg.h" +#include "sound/pokey.h" + +#define MASTER_CLOCK (12096000) +#define CLOCK_3KHZ (MASTER_CLOCK / 4096) + +#define TEMPEST_KNOB_P1_TAG ("KNOBP1") +#define TEMPEST_KNOB_P2_TAG ("KNOBP2") +#define TEMPEST_BUTTONS_P1_TAG ("BUTTONSP1") +#define TEMPEST_BUTTONS_P2_TAG ("BUTTONSP2") + + +static UINT8 tempest_player_select; + +/************************************* + * + * Interrupt ack + * + *************************************/ + +static WRITE8_HANDLER( wdclr_w ) +{ + cpunum_set_input_line(0, 0, CLEAR_LINE); + watchdog_reset(); +} + +/************************************* + * + * Input ports + * + *************************************/ + +static UINT32 tempest_knob_r(void *param) +{ + UINT32 ret; + + if (tempest_player_select) + { + ret = readinputportbytag(TEMPEST_KNOB_P2_TAG); + } + else + { + ret = readinputportbytag(TEMPEST_KNOB_P1_TAG); + } + + return ret; +} + +static UINT32 tempest_buttons_r(void *param) +{ + UINT32 ret; + + if (tempest_player_select) + { + ret = readinputportbytag(TEMPEST_BUTTONS_P2_TAG); + } + else + { + ret = readinputportbytag(TEMPEST_BUTTONS_P1_TAG); + } + + return ret; +} + + +static READ8_HANDLER( tempest_IN0_r ) +{ + int res = readinputport(0); + + if (avgdvg_done()) + res |= 0x40; + + /* Emulate the 3kHz source on bit 7 (divide 1.5MHz by 512) */ + if (activecpu_gettotalcycles() & 0x100) + res |= 0x80; + + return res; +} + + +static READ8_HANDLER( input_port_1_bit_r ) +{ + return (readinputport(1) & (1 << offset)) ? 0 : 228; +} + + +static READ8_HANDLER( input_port_2_bit_r ) +{ + return (readinputport(2) & (1 << offset)) ? 0 : 228; +} + + + +/************************************* + * + * Output ports + * + *************************************/ + +static WRITE8_HANDLER( tempest_led_w ) +{ + set_led_status(0, ~data & 0x02); + set_led_status(1, ~data & 0x01); + /* FLIP is bit 0x04 */ + tempest_player_select = data & 0x04; +} + + +static WRITE8_HANDLER( tempest_coin_w ) +{ + coin_counter_w(0, (data & 0x01)); + coin_counter_w(1, (data & 0x02)); + coin_counter_w(2, (data & 0x04)); + avg_set_flip_x(data & 0x08); + avg_set_flip_y(data & 0x10); +} + + + +/************************************* + * + * Main CPU memory handlers + * + *************************************/ + +static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x07ff) AM_RAM + AM_RANGE(0x0800, 0x080f) AM_WRITE(MWA8_RAM) AM_BASE(&tempest_colorram) + AM_RANGE(0x0c00, 0x0c00) AM_READ(tempest_IN0_r) /* IN0 */ + AM_RANGE(0x0d00, 0x0d00) AM_READ(input_port_3_r) /* DSW1 */ + AM_RANGE(0x0e00, 0x0e00) AM_READ(input_port_4_r) /* DSW2 */ + AM_RANGE(0x2000, 0x2fff) AM_RAM AM_BASE(&vectorram) AM_SIZE(&vectorram_size) AM_REGION(REGION_CPU1, 0x2000) + AM_RANGE(0x3000, 0x3fff) AM_READ(MRA8_ROM) + AM_RANGE(0x4000, 0x4000) AM_WRITE(tempest_coin_w) + AM_RANGE(0x4800, 0x4800) AM_WRITE(avgdvg_go_w) + AM_RANGE(0x5000, 0x5000) AM_WRITE(wdclr_w) + AM_RANGE(0x5800, 0x5800) AM_WRITE(avgdvg_reset_w) + AM_RANGE(0x6000, 0x603f) AM_WRITE(atari_vg_earom_w) + AM_RANGE(0x6040, 0x6040) AM_READWRITE(mb_status_r, atari_vg_earom_ctrl_w) + AM_RANGE(0x6050, 0x6050) AM_READ(atari_vg_earom_r) + AM_RANGE(0x6060, 0x6060) AM_READ(mb_lo_r) + AM_RANGE(0x6070, 0x6070) AM_READ(mb_hi_r) + AM_RANGE(0x6080, 0x609f) AM_WRITE(mb_go_w) + AM_RANGE(0x60c0, 0x60cf) AM_READWRITE(pokey1_r, pokey1_w) + AM_RANGE(0x60d0, 0x60df) AM_READWRITE(pokey2_r, pokey2_w) + AM_RANGE(0x60e0, 0x60e0) AM_WRITE(tempest_led_w) + AM_RANGE(0x9000, 0xdfff) AM_ROM + AM_RANGE(0xf000, 0xffff) AM_ROM /* for the reset / interrupt vectors */ +ADDRESS_MAP_END + + +/************************************* + * + * Port definitions + * + *************************************/ + +static INPUT_PORTS_START( tempest ) + PORT_START_TAG("IN0") /* IN0 */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN3 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_TILT ) + PORT_SERVICE( 0x10, IP_ACTIVE_LOW ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Diagnostic Step") PORT_CODE(KEYCODE_F1) + /* bit 6 is the VG HALT bit. We set it to "low" */ + /* per default (busy vector processor). */ + /* handled by tempest_IN0_r() */ + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + /* bit 7 is tied to a 3kHz (?) clock */ + /* handled by tempest_IN0_r() */ + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + + PORT_START_TAG("IN1/DSW0") /* IN1/DSW0 */ + PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(tempest_knob_r, 0) + /* The next one is reponsible for cocktail mode. + * According to the documentation, this is not a switch, although + * it may have been planned to put it on the Math Box PCB, D/E2 ) + */ + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN2") /* IN2 */ + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x03, "Medium1" ) + PORT_DIPSETTING( 0x00, "Medium2" ) + PORT_DIPSETTING( 0x01, DEF_STR( Hard ) ) + PORT_DIPNAME( 0x04, 0x04, "Rating" ) + PORT_DIPSETTING( 0x04, "1, 3, 5, 7, 9" ) + PORT_DIPSETTING( 0x00, "tied to high score" ) + PORT_BIT(0x18, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(tempest_buttons_r, 0) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("DSW1") /* DSW1 - (N13 on analog vector generator PCB */ + PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x03, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x0c, 0x00, "Right Coin" ) + PORT_DIPSETTING( 0x00, "*1" ) + PORT_DIPSETTING( 0x04, "*4" ) + PORT_DIPSETTING( 0x08, "*5" ) + PORT_DIPSETTING( 0x0c, "*6" ) + PORT_DIPNAME( 0x10, 0x00, "Left Coin" ) + PORT_DIPSETTING( 0x00, "*1" ) + PORT_DIPSETTING( 0x10, "*2" ) + PORT_DIPNAME( 0xe0, 0x00, "Bonus Coins" ) + PORT_DIPSETTING( 0x00, DEF_STR( None ) ) + PORT_DIPSETTING( 0x80, "1 each 5" ) + PORT_DIPSETTING( 0x40, "1 each 4 (+Demo)" ) + PORT_DIPSETTING( 0xa0, "1 each 3" ) + PORT_DIPSETTING( 0x60, "2 each 4 (+Demo)" ) + PORT_DIPSETTING( 0x20, "1 each 2" ) + PORT_DIPSETTING( 0xc0, "Freeze Mode" ) + PORT_DIPSETTING( 0xe0, "Freeze Mode" ) + + PORT_START_TAG("DSW2") /* DSW2 - (L12 on analog vector generator PCB */ + PORT_DIPNAME( 0x01, 0x00, "Minimum" ) + PORT_DIPSETTING( 0x00, "1 Credit" ) + PORT_DIPSETTING( 0x01, "2 Credit" ) + PORT_DIPNAME( 0x06, 0x00, DEF_STR( Language ) ) + PORT_DIPSETTING( 0x00, DEF_STR( English ) ) + PORT_DIPSETTING( 0x02, DEF_STR( French ) ) + PORT_DIPSETTING( 0x04, DEF_STR( German ) ) + PORT_DIPSETTING( 0x06, DEF_STR( Spanish ) ) + PORT_DIPNAME( 0x38, 0x00, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING( 0x08, "10000" ) + PORT_DIPSETTING( 0x00, "20000" ) + PORT_DIPSETTING( 0x10, "30000" ) + PORT_DIPSETTING( 0x18, "40000" ) + PORT_DIPSETTING( 0x20, "50000" ) + PORT_DIPSETTING( 0x28, "60000" ) + PORT_DIPSETTING( 0x30, "70000" ) + PORT_DIPSETTING( 0x38, DEF_STR( None ) ) + PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0xc0, "2" ) + PORT_DIPSETTING( 0x00, "3" ) + PORT_DIPSETTING( 0x40, "4" ) + PORT_DIPSETTING( 0x80, "5" ) + + PORT_START_TAG(TEMPEST_KNOB_P1_TAG) + /* This is the Tempest spinner input. It only uses 4 bits. */ + PORT_BIT( 0x0f, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(20) PORT_PLAYER(1) PORT_FULL_TURN_COUNT(72) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START_TAG(TEMPEST_KNOB_P2_TAG) + /* This is the Tempest spinner input. It only uses 4 bits. */ + PORT_BIT( 0x0f, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(20) PORT_PLAYER(2) PORT_FULL_TURN_COUNT(72) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START_TAG(TEMPEST_BUTTONS_P1_TAG) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START_TAG(TEMPEST_BUTTONS_P2_TAG) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED ) +INPUT_PORTS_END + + + +/************************************* + * + * Sound interfaces + * + *************************************/ + +static struct POKEYinterface pokey_interface_1 = +{ + { input_port_1_bit_r,input_port_1_bit_r,input_port_1_bit_r,input_port_1_bit_r, + input_port_1_bit_r,input_port_1_bit_r,input_port_1_bit_r,input_port_1_bit_r } +}; + +static struct POKEYinterface pokey_interface_2 = +{ + { input_port_2_bit_r,input_port_2_bit_r,input_port_2_bit_r,input_port_2_bit_r, + input_port_2_bit_r,input_port_2_bit_r,input_port_2_bit_r,input_port_2_bit_r } +}; + + + +/************************************* + * + * Machine drivers + * + *************************************/ + +static MACHINE_DRIVER_START( tempest ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M6502, MASTER_CLOCK / 8) + MDRV_CPU_PROGRAM_MAP(main_map, 0) + MDRV_CPU_PERIODIC_INT(irq0_line_assert, (double)MASTER_CLOCK / 4096 / 12) + MDRV_WATCHDOG_TIME_INIT(ATTOTIME_IN_HZ(CLOCK_3KHZ / 256)) + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + MDRV_NVRAM_HANDLER(atari_vg) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_VECTOR ) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_RGB15) + MDRV_SCREEN_SIZE(400, 300) + MDRV_SCREEN_VISIBLE_AREA(0, 580, 0, 570) + MDRV_PALETTE_LENGTH(256) + + MDRV_VIDEO_START(avg_tempest) + MDRV_VIDEO_UPDATE(vector) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(POKEY, 12096000/8) + MDRV_SOUND_CONFIG(pokey_interface_1) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + + MDRV_SOUND_ADD(POKEY, 12096000/8) + MDRV_SOUND_CONFIG(pokey_interface_2) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) +MACHINE_DRIVER_END + + + +/************************************* + * + * ROM definitions + * + *************************************/ + +ROM_START( tempest ) /* rev 3 */ + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + /* Roms are for Tempest Analog Vector-Generator PCB Assembly A037383-01 or A037383-02 */ + ROM_LOAD( "136002-113.d1", 0x9000, 0x0800, CRC(65d61fe7) SHA1(38a1e8a8f65b7887cf3e190269fe4ce2c6f818aa) ) + ROM_LOAD( "136002-114.e1", 0x9800, 0x0800, CRC(11077375) SHA1(ed8ff0ca969da6672a7683b93d4fcf2935a0d903) ) + ROM_LOAD( "136002-115.f1", 0xa000, 0x0800, CRC(f3e2827a) SHA1(bd04fcfbbba995e08c3144c1474fcddaaeb1c700) ) + ROM_LOAD( "136002-316.h1", 0xa800, 0x0800, CRC(aeb0f7e9) SHA1(a5cc25015b98692673cfc1c7c2e9634efd750870) ) + ROM_LOAD( "136002-217.j1", 0xb000, 0x0800, CRC(ef2eb645) SHA1(b1a2c969e8897e335d5354de6ae04a65d4b2a1e4) ) + ROM_LOAD( "136002-118.k1", 0xb800, 0x0800, CRC(beb352ab) SHA1(f213166d3970e0bd0f29d8dea8d6afa6990cce38) ) + ROM_LOAD( "136002-119.lm1", 0xc000, 0x0800, CRC(a4de050f) SHA1(ea302e43a313a5a18115e74ddbaaedde0fbecda7) ) + ROM_LOAD( "136002-120.mn1", 0xc800, 0x0800, CRC(35619648) SHA1(48f1e8bed7ec6afa0b4c549a30e5ec331c071e40) ) + ROM_LOAD( "136002-121.p1", 0xd000, 0x0800, CRC(73d38e47) SHA1(9980606376a79ba94f8e2a325871a6c8d10d83fc) ) + ROM_LOAD( "136002-222.r1", 0xd800, 0x0800, CRC(707bd5c3) SHA1(2f0af6fb7154c244c794f7247e5c16a1e06ddf7d) ) + ROM_RELOAD( 0xf800, 0x0800 ) /* for reset/interrupt vectors */ + /* Vector ROM */ + ROM_LOAD( "136002-123.np3", 0x3000, 0x0800, CRC(29f7e937) SHA1(686c8b9b8901262e743497cee7f2f7dd5cb3af7e) ) /* May be labeled "136002-111", same data */ + ROM_LOAD( "136002-124.r3", 0x3800, 0x0800, CRC(c16ec351) SHA1(a30a3662c740810c0f20e3712679606921b8ca06) ) /* May be labeled "136002-112", same data */ + + /* AVG PROM */ + ROM_REGION( 0x100, REGION_USER1, 0 ) + ROM_LOAD( "136002-125.d7", 0x0000, 0x0100, CRC(5903af03) SHA1(24bc0366f394ad0ec486919212e38be0f08d0239) ) + + /* Mathbox PROMs */ + ROM_REGION( 0x20, REGION_USER2, 0 ) + ROM_LOAD( "136002.126", 0x0000, 0x0020, CRC(8b04f921) SHA1(317b3397482f13b2d1bc21f296d3b3f9a118787b) ) + + ROM_REGION32_BE( 0x400, REGION_USER3, 0 ) + ROMX_LOAD( "136002.132", 0, 0x100, CRC(2af82e87) SHA1(3816835a9ccf99a76d246adf204989d9261bb065), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "136002.131", 0, 0x100, CRC(b31f6e24) SHA1(ce5f8ca34d06a5cfa0076b47400e61e0130ffe74), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) + ROMX_LOAD( "136002.130", 1, 0x100, CRC(8119b847) SHA1(c4fbaedd4ce1ad6a4128cbe902b297743edb606a), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "136002.129", 1, 0x100, CRC(09f5a4d5) SHA1(d6f2ac07ca9ee385c08831098b0dcaf56808993b), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) + ROMX_LOAD( "136002.128", 2, 0x100, CRC(823b61ae) SHA1(d99a839874b45f64e14dae92a036e47a53705d16), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "136002.127", 2, 0x100, CRC(276eadd5) SHA1(55718cd8ec4bcf75076d5ef0ee1ed2551e19d9ba), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) +ROM_END + + +ROM_START( tempest1 ) /* rev 1 */ + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + /* Roms are for Tempest Analog Vector-Generator PCB Assembly A037383-01 or A037383-02 */ + ROM_LOAD( "136002-113.d1", 0x9000, 0x0800, CRC(65d61fe7) SHA1(38a1e8a8f65b7887cf3e190269fe4ce2c6f818aa) ) + ROM_LOAD( "136002-114.e1", 0x9800, 0x0800, CRC(11077375) SHA1(ed8ff0ca969da6672a7683b93d4fcf2935a0d903) ) + ROM_LOAD( "136002-115.f1", 0xa000, 0x0800, CRC(f3e2827a) SHA1(bd04fcfbbba995e08c3144c1474fcddaaeb1c700) ) + ROM_LOAD( "136002-116.h1", 0xa800, 0x0800, CRC(7356896c) SHA1(a013ede292189a8f5a907de882ee1a573d784b3c) ) + ROM_LOAD( "136002-117.j1", 0xb000, 0x0800, CRC(55952119) SHA1(470d914fa52fce3786cb6330889876d3547dca65) ) + ROM_LOAD( "136002-118.k1", 0xb800, 0x0800, CRC(beb352ab) SHA1(f213166d3970e0bd0f29d8dea8d6afa6990cce38) ) + ROM_LOAD( "136002-119.lm1", 0xc000, 0x0800, CRC(a4de050f) SHA1(ea302e43a313a5a18115e74ddbaaedde0fbecda7) ) + ROM_LOAD( "136002-120.mn1", 0xc800, 0x0800, CRC(35619648) SHA1(48f1e8bed7ec6afa0b4c549a30e5ec331c071e40) ) + ROM_LOAD( "136002-121.p1", 0xd000, 0x0800, CRC(73d38e47) SHA1(9980606376a79ba94f8e2a325871a6c8d10d83fc) ) + ROM_LOAD( "136002-122.r1", 0xd800, 0x0800, CRC(796a9918) SHA1(c862a0d4ea330161e4c3cc8e5e9ad38893fffbd4) ) + ROM_RELOAD( 0xf800, 0x0800 ) /* for reset/interrupt vectors */ + /* Vector ROM */ + ROM_LOAD( "136002-123.np3", 0x3000, 0x0800, CRC(29f7e937) SHA1(686c8b9b8901262e743497cee7f2f7dd5cb3af7e) ) /* May be labeled "136002-111", same data */ + ROM_LOAD( "136002-124.r3", 0x3800, 0x0800, CRC(c16ec351) SHA1(a30a3662c740810c0f20e3712679606921b8ca06) ) /* May be labeled "136002-112", same data */ + + /* AVG PROM */ + ROM_REGION( 0x100, REGION_USER1, 0 ) + ROM_LOAD( "136002-125.d7", 0x0000, 0x0100, CRC(5903af03) SHA1(24bc0366f394ad0ec486919212e38be0f08d0239) ) + + /* Mathbox PROMs */ + ROM_REGION( 0x20, REGION_USER2, 0 ) + ROM_LOAD( "136002.126", 0x0000, 0x0020, CRC(8b04f921) SHA1(317b3397482f13b2d1bc21f296d3b3f9a118787b) ) + + ROM_REGION32_BE( 0x400, REGION_USER3, 0 ) + ROMX_LOAD( "136002.132", 0, 0x100, CRC(2af82e87) SHA1(3816835a9ccf99a76d246adf204989d9261bb065), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "136002.131", 0, 0x100, CRC(b31f6e24) SHA1(ce5f8ca34d06a5cfa0076b47400e61e0130ffe74), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) + ROMX_LOAD( "136002.130", 1, 0x100, CRC(8119b847) SHA1(c4fbaedd4ce1ad6a4128cbe902b297743edb606a), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "136002.129", 1, 0x100, CRC(09f5a4d5) SHA1(d6f2ac07ca9ee385c08831098b0dcaf56808993b), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) + ROMX_LOAD( "136002.128", 2, 0x100, CRC(823b61ae) SHA1(d99a839874b45f64e14dae92a036e47a53705d16), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "136002.127", 2, 0x100, CRC(276eadd5) SHA1(55718cd8ec4bcf75076d5ef0ee1ed2551e19d9ba), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) +ROM_END + + +ROM_START( tempest2 ) /* rev 2 */ + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + /* Roms are for Tempest Analog Vector-Generator PCB Assembly A037383-01 or A037383-02 */ + ROM_LOAD( "136002-113.d1", 0x9000, 0x0800, CRC(65d61fe7) SHA1(38a1e8a8f65b7887cf3e190269fe4ce2c6f818aa) ) + ROM_LOAD( "136002-114.e1", 0x9800, 0x0800, CRC(11077375) SHA1(ed8ff0ca969da6672a7683b93d4fcf2935a0d903) ) + ROM_LOAD( "136002-115.f1", 0xa000, 0x0800, CRC(f3e2827a) SHA1(bd04fcfbbba995e08c3144c1474fcddaaeb1c700) ) + ROM_LOAD( "136002-116.h1", 0xa800, 0x0800, CRC(7356896c) SHA1(a013ede292189a8f5a907de882ee1a573d784b3c) ) + ROM_LOAD( "136002-217.j1", 0xb000, 0x0800, CRC(ef2eb645) SHA1(b1a2c969e8897e335d5354de6ae04a65d4b2a1e4) ) + ROM_LOAD( "136002-118.k1", 0xb800, 0x0800, CRC(beb352ab) SHA1(f213166d3970e0bd0f29d8dea8d6afa6990cce38) ) + ROM_LOAD( "136002-119.lm1", 0xc000, 0x0800, CRC(a4de050f) SHA1(ea302e43a313a5a18115e74ddbaaedde0fbecda7) ) + ROM_LOAD( "136002-120.mn1", 0xc800, 0x0800, CRC(35619648) SHA1(48f1e8bed7ec6afa0b4c549a30e5ec331c071e40) ) + ROM_LOAD( "136002-121.p1", 0xd000, 0x0800, CRC(73d38e47) SHA1(9980606376a79ba94f8e2a325871a6c8d10d83fc) ) + ROM_LOAD( "136002-222.r1", 0xd800, 0x0800, CRC(707bd5c3) SHA1(2f0af6fb7154c244c794f7247e5c16a1e06ddf7d) ) + ROM_RELOAD( 0xf800, 0x0800 ) /* for reset/interrupt vectors */ + /* Vector ROM */ + ROM_LOAD( "136002-123.np3", 0x3000, 0x0800, CRC(29f7e937) SHA1(686c8b9b8901262e743497cee7f2f7dd5cb3af7e) ) /* May be labeled "136002-111", same data */ + ROM_LOAD( "136002-124.r3", 0x3800, 0x0800, CRC(c16ec351) SHA1(a30a3662c740810c0f20e3712679606921b8ca06) ) /* May be labeled "136002-112", same data */ + + /* AVG PROM */ + ROM_REGION( 0x100, REGION_USER1, 0 ) + ROM_LOAD( "136002-125.d7", 0x0000, 0x0100, CRC(5903af03) SHA1(24bc0366f394ad0ec486919212e38be0f08d0239) ) + + /* Mathbox PROMs */ + ROM_REGION( 0x20, REGION_USER2, 0 ) + ROM_LOAD( "136002.126", 0x0000, 0x0020, CRC(8b04f921) SHA1(317b3397482f13b2d1bc21f296d3b3f9a118787b) ) + + ROM_REGION32_BE( 0x400, REGION_USER3, 0 ) + ROMX_LOAD( "136002.132", 0, 0x100, CRC(2af82e87) SHA1(3816835a9ccf99a76d246adf204989d9261bb065), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "136002.131", 0, 0x100, CRC(b31f6e24) SHA1(ce5f8ca34d06a5cfa0076b47400e61e0130ffe74), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) + ROMX_LOAD( "136002.130", 1, 0x100, CRC(8119b847) SHA1(c4fbaedd4ce1ad6a4128cbe902b297743edb606a), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "136002.129", 1, 0x100, CRC(09f5a4d5) SHA1(d6f2ac07ca9ee385c08831098b0dcaf56808993b), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) + ROMX_LOAD( "136002.128", 2, 0x100, CRC(823b61ae) SHA1(d99a839874b45f64e14dae92a036e47a53705d16), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "136002.127", 2, 0x100, CRC(276eadd5) SHA1(55718cd8ec4bcf75076d5ef0ee1ed2551e19d9ba), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) +ROM_END + + +ROM_START( tempest3 ) /* rev 2 */ + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + /* Roms are for Tempest Analog Vector-Generator PCB Assembly A037383-03 or A037383-04 */ + ROM_LOAD( "136002-237.p1", 0x9000, 0x1000, CRC(1d0cc503) SHA1(7bef95db9b1102d6b1166bda0ccb276ef4cc3764) ) + ROM_LOAD( "136002-136.lm1", 0xa000, 0x1000, CRC(c88e3524) SHA1(89144baf1efc703b2336774793ce345b37829ee7) ) + ROM_LOAD( "136002-235.j1", 0xb000, 0x1000, CRC(a4b2ce3f) SHA1(a5f5fb630a48c5d25346f90d4c13aaa98f60b228) ) + ROM_LOAD( "136002-134.f1", 0xc000, 0x1000, CRC(65a9a9f9) SHA1(73aa7d6f4e7093ccb2d97f6344f354872bcfd72a) ) + ROM_LOAD( "136002-133.d1", 0xd000, 0x1000, CRC(de4e9e34) SHA1(04be074e45bf5cd95a852af97cd04e35b7f27fc4) ) + ROM_RELOAD( 0xf000, 0x1000 ) /* for reset/interrupt vectors */ + /* Vector ROM */ + ROM_LOAD( "136002-138.np3", 0x3000, 0x1000, CRC(9995256d) SHA1(2b725ee1a57d423c7d7377a1744f48412e0f2f69) ) + + /* AVG PROM */ + ROM_REGION( 0x100, REGION_USER1, 0 ) + ROM_LOAD( "136002-125.d7", 0x0000, 0x0100, CRC(5903af03) SHA1(24bc0366f394ad0ec486919212e38be0f08d0239) ) + + /* Mathbox PROMs */ + ROM_REGION( 0x20, REGION_USER2, 0 ) + ROM_LOAD( "136002.126", 0x0000, 0x0020, CRC(8b04f921) SHA1(317b3397482f13b2d1bc21f296d3b3f9a118787b) ) + + ROM_REGION32_BE( 0x400, REGION_USER3, 0 ) + ROMX_LOAD( "136002.132", 0, 0x100, CRC(2af82e87) SHA1(3816835a9ccf99a76d246adf204989d9261bb065), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "136002.131", 0, 0x100, CRC(b31f6e24) SHA1(ce5f8ca34d06a5cfa0076b47400e61e0130ffe74), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) + ROMX_LOAD( "136002.130", 1, 0x100, CRC(8119b847) SHA1(c4fbaedd4ce1ad6a4128cbe902b297743edb606a), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "136002.129", 1, 0x100, CRC(09f5a4d5) SHA1(d6f2ac07ca9ee385c08831098b0dcaf56808993b), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) + ROMX_LOAD( "136002.128", 2, 0x100, CRC(823b61ae) SHA1(d99a839874b45f64e14dae92a036e47a53705d16), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "136002.127", 2, 0x100, CRC(276eadd5) SHA1(55718cd8ec4bcf75076d5ef0ee1ed2551e19d9ba), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) +ROM_END + + +ROM_START( temptube ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + /* Roms are for Tempest Analog Vector-Generator PCB Assembly A037383-01 or A037383-02 */ + ROM_LOAD( "136002-113.d1", 0x9000, 0x0800, CRC(65d61fe7) SHA1(38a1e8a8f65b7887cf3e190269fe4ce2c6f818aa) ) + ROM_LOAD( "136002-114.e1", 0x9800, 0x0800, CRC(11077375) SHA1(ed8ff0ca969da6672a7683b93d4fcf2935a0d903) ) + ROM_LOAD( "136002-115.f1", 0xa000, 0x0800, CRC(f3e2827a) SHA1(bd04fcfbbba995e08c3144c1474fcddaaeb1c700) ) + ROM_LOAD( "136002-316.h1", 0xa800, 0x0800, CRC(aeb0f7e9) SHA1(a5cc25015b98692673cfc1c7c2e9634efd750870) ) + ROM_LOAD( "136002-217.j1", 0xb000, 0x0800, CRC(ef2eb645) SHA1(b1a2c969e8897e335d5354de6ae04a65d4b2a1e4) ) + ROM_LOAD( "tube-118.k1", 0xb800, 0x0800, CRC(cefb03f0) SHA1(41ddfa4991fa49a31d4740a04551556acca66196) ) + ROM_LOAD( "136002-119.lm1", 0xc000, 0x0800, CRC(a4de050f) SHA1(ea302e43a313a5a18115e74ddbaaedde0fbecda7) ) + ROM_LOAD( "136002-120.mn1", 0xc800, 0x0800, CRC(35619648) SHA1(48f1e8bed7ec6afa0b4c549a30e5ec331c071e40) ) + ROM_LOAD( "136002-121.p1", 0xd000, 0x0800, CRC(73d38e47) SHA1(9980606376a79ba94f8e2a325871a6c8d10d83fc) ) + ROM_LOAD( "136002-222.r1", 0xd800, 0x0800, CRC(707bd5c3) SHA1(2f0af6fb7154c244c794f7247e5c16a1e06ddf7d) ) + ROM_RELOAD( 0xf800, 0x0800 ) /* for reset/interrupt vectors */ + /* Vector ROM */ + ROM_LOAD( "136002-123.np3", 0x3000, 0x0800, CRC(29f7e937) SHA1(686c8b9b8901262e743497cee7f2f7dd5cb3af7e) ) /* May be labeled "136002-111", same data */ + ROM_LOAD( "136002-124.r3", 0x3800, 0x0800, CRC(c16ec351) SHA1(a30a3662c740810c0f20e3712679606921b8ca06) ) /* May be labeled "136002-112", same data */ + + /* AVG PROM */ + ROM_REGION( 0x100, REGION_USER1, 0 ) + ROM_LOAD( "136002-125.d7", 0x0000, 0x0100, CRC(5903af03) SHA1(24bc0366f394ad0ec486919212e38be0f08d0239) ) + + /* Mathbox PROMs */ + ROM_REGION( 0x20, REGION_USER2, 0 ) + ROM_LOAD( "136002.126", 0x0000, 0x0020, CRC(8b04f921) SHA1(317b3397482f13b2d1bc21f296d3b3f9a118787b) ) + + ROM_REGION32_BE( 0x400, REGION_USER3, 0 ) + ROMX_LOAD( "136002.132", 0, 0x100, CRC(2af82e87) SHA1(3816835a9ccf99a76d246adf204989d9261bb065), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "136002.131", 0, 0x100, CRC(b31f6e24) SHA1(ce5f8ca34d06a5cfa0076b47400e61e0130ffe74), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) + ROMX_LOAD( "136002.130", 1, 0x100, CRC(8119b847) SHA1(c4fbaedd4ce1ad6a4128cbe902b297743edb606a), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "136002.129", 1, 0x100, CRC(09f5a4d5) SHA1(d6f2ac07ca9ee385c08831098b0dcaf56808993b), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) + ROMX_LOAD( "136002.128", 2, 0x100, CRC(823b61ae) SHA1(d99a839874b45f64e14dae92a036e47a53705d16), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "136002.127", 2, 0x100, CRC(276eadd5) SHA1(55718cd8ec4bcf75076d5ef0ee1ed2551e19d9ba), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) +ROM_END + + +/************************************* + * + * Game drivers + * + *************************************/ + +GAME( 1980, tempest, 0, tempest, tempest, 0, ROT270, "Atari", "Tempest (rev 3)", 0 ) +GAME( 1980, tempest1, tempest, tempest, tempest, 0, ROT270, "Atari", "Tempest (rev 1)", 0 ) +GAME( 1980, tempest2, tempest, tempest, tempest, 0, ROT270, "Atari", "Tempest (rev 2)", 0 ) +GAME( 1980, tempest3, tempest, tempest, tempest, 0, ROT270, "Atari", "Tempest (rev 2, Revised Hardware)", 0 ) +GAME( 1980, temptube, tempest, tempest, tempest, 0, ROT270, "hack", "Tempest Tubes", 0 ) |