diff options
Diffstat (limited to 'src/mame/drivers/tempest.cpp')
-rw-r--r-- | src/mame/drivers/tempest.cpp | 910 |
1 files changed, 0 insertions, 910 deletions
diff --git a/src/mame/drivers/tempest.cpp b/src/mame/drivers/tempest.cpp deleted file mode 100644 index 0b3f08575cb..00000000000 --- a/src/mame/drivers/tempest.cpp +++ /dev/null @@ -1,910 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Brad Oliver, Bernd Wiebelt, Allard van der Bas -/*************************************************************************** - - Atari Tempest hardware - - Games supported: - * Tempest [5 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 - -136002-134.f1 Contains the 136002-316.h1 code fix even though it's listed as a rev 1 rom - -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 - -***************************************************************************/ - -#include "emu.h" -#include "cpu/m6502/m6502.h" -#include "machine/mathbox.h" -#include "machine/watchdog.h" -#include "video/avgdvg.h" -#include "video/vector.h" -#include "machine/er2055.h" -#include "sound/pokey.h" -#include "screen.h" -#include "speaker.h" - - -static constexpr XTAL MASTER_CLOCK = 12.096_MHz_XTAL; -static constexpr XTAL 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" - -class tempest_state : public driver_device -{ -public: - tempest_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_mathbox(*this, "mathbox"), - m_watchdog(*this, "watchdog"), - m_avg(*this, "avg"), - m_earom(*this, "earom"), - m_rom(*this, "maincpu"), - m_knob_p1(*this, TEMPEST_KNOB_P1_TAG), - m_knob_p2(*this, TEMPEST_KNOB_P2_TAG), - m_buttons_p1(*this, TEMPEST_BUTTONS_P1_TAG), - m_buttons_p2(*this, TEMPEST_BUTTONS_P2_TAG), - m_in1(*this, "IN1/DSW0"), - m_in2(*this, "IN2"), - m_leds(*this, "led%u", 0U) - { } - - void tempest(machine_config &config); - - DECLARE_CUSTOM_INPUT_MEMBER(tempest_knob_r); - DECLARE_CUSTOM_INPUT_MEMBER(tempest_buttons_r); - DECLARE_READ_LINE_MEMBER(clock_r); - -protected: - DECLARE_WRITE8_MEMBER(wdclr_w); - DECLARE_WRITE8_MEMBER(tempest_led_w); - DECLARE_WRITE8_MEMBER(tempest_coin_w); - DECLARE_READ8_MEMBER(input_port_1_bit_r); - DECLARE_READ8_MEMBER(input_port_2_bit_r); - - DECLARE_READ8_MEMBER(earom_read); - DECLARE_WRITE8_MEMBER(earom_write); - DECLARE_WRITE8_MEMBER(earom_control_w); - - DECLARE_READ8_MEMBER(rom_ae1f_r); - - virtual void machine_start() override; - void main_map(address_map &map); - - required_device<cpu_device> m_maincpu; - required_device<mathbox_device> m_mathbox; - required_device<watchdog_timer_device> m_watchdog; - required_device<avg_tempest_device> m_avg; - required_device<er2055_device> m_earom; - required_region_ptr<uint8_t> m_rom; - - required_ioport m_knob_p1; - required_ioport m_knob_p2; - required_ioport m_buttons_p1; - required_ioport m_buttons_p2; - required_ioport m_in1; - required_ioport m_in2; - output_finder<2> m_leds; - - uint8_t m_player_select; -}; - - -void tempest_state::machine_start() -{ - m_leds.resolve(); - save_item(NAME(m_player_select)); -} - -/************************************* - * - * Interrupt ack - * - *************************************/ - -WRITE8_MEMBER(tempest_state::wdclr_w) -{ - m_maincpu->set_input_line(0, CLEAR_LINE); - m_watchdog->watchdog_reset(); -} - -/************************************* - * - * Input ports - * - *************************************/ - -CUSTOM_INPUT_MEMBER(tempest_state::tempest_knob_r) -{ - return (m_player_select == 0) ? m_knob_p1->read() : m_knob_p2->read(); -} - -CUSTOM_INPUT_MEMBER(tempest_state::tempest_buttons_r) -{ - return (m_player_select == 0) ? m_buttons_p1->read() : m_buttons_p2->read(); -} - - -READ_LINE_MEMBER(tempest_state::clock_r) -{ - /* Emulate the 3kHz source on bit 7 (divide 1.5MHz by 512) */ - return (m_maincpu->total_cycles() & 0x100) ? 1 : 0; -} - - -READ8_MEMBER(tempest_state::input_port_1_bit_r) -{ - return (m_in1->read() & (1 << offset)) ? 0 : 228; -} - - -READ8_MEMBER(tempest_state::input_port_2_bit_r) -{ - return (m_in2->read() & (1 << offset)) ? 0 : 228; -} - - - -/************************************* - * - * Output ports - * - *************************************/ - -WRITE8_MEMBER(tempest_state::tempest_led_w) -{ - m_leds[0] = BIT(~data, 1); - m_leds[1] = BIT(~data, 0); - /* FLIP is bit 0x04 */ - m_player_select = data & 0x04; -} - - -WRITE8_MEMBER(tempest_state::tempest_coin_w) -{ - machine().bookkeeping().coin_counter_w(0, (data & 0x01)); - machine().bookkeeping().coin_counter_w(1, (data & 0x02)); - machine().bookkeeping().coin_counter_w(2, (data & 0x04)); - m_avg->set_flip_x(data & 0x08); - m_avg->set_flip_y(data & 0x10); -} - - - -/************************************* - * - * High score EAROM - * - *************************************/ - -READ8_MEMBER(tempest_state::earom_read) -{ - return m_earom->data(); -} - -WRITE8_MEMBER(tempest_state::earom_write) -{ - m_earom->set_address(offset & 0x3f); - m_earom->set_data(data); -} - -WRITE8_MEMBER(tempest_state::earom_control_w) -{ - // CK = EDB0, C1 = /EDB2, C2 = EDB1, CS1 = EDB3, /CS2 = GND - m_earom->set_control(BIT(data, 3), 1, !BIT(data, 2), BIT(data, 1)); - m_earom->set_clk(BIT(data, 0)); -} - - - -/************************************* - * - * Main CPU memory handlers - * - *************************************/ - -READ8_MEMBER(tempest_state::rom_ae1f_r) -{ - // This is needed to ensure that the routine starting at ae1c passes checks and does not corrupt data; - // config.m_perfect_cpu_quantum = subtag("maincpu"); would be very taxing on this driver. - machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100)); - machine().scheduler().abort_timeslice(); - - return m_rom[0xae1f]; -} - - -void tempest_state::main_map(address_map &map) -{ - map(0x0000, 0x07ff).ram(); - map(0x0800, 0x080f).writeonly().share("avg:colorram"); - map(0x0c00, 0x0c00).portr("IN0"); - map(0x0d00, 0x0d00).portr("DSW1"); - map(0x0e00, 0x0e00).portr("DSW2"); - map(0x2000, 0x2fff).ram().share("avg:vectorram").region("maincpu", 0x2000); - map(0x3000, 0x3fff).rom(); - map(0x4000, 0x4000).w(FUNC(tempest_state::tempest_coin_w)); - map(0x4800, 0x4800).w(m_avg, FUNC(avg_tempest_device::go_w)); - map(0x5000, 0x5000).w(FUNC(tempest_state::wdclr_w)); - map(0x5800, 0x5800).w(m_avg, FUNC(avg_tempest_device::reset_w)); - map(0x6000, 0x603f).w(FUNC(tempest_state::earom_write)); - map(0x6040, 0x6040).r(m_mathbox, FUNC(mathbox_device::status_r)).w(FUNC(tempest_state::earom_control_w)); - map(0x6050, 0x6050).r(FUNC(tempest_state::earom_read)); - map(0x6060, 0x6060).r(m_mathbox, FUNC(mathbox_device::lo_r)); - map(0x6070, 0x6070).r(m_mathbox, FUNC(mathbox_device::hi_r)); - map(0x6080, 0x609f).w(m_mathbox, FUNC(mathbox_device::go_w)); - map(0x60c0, 0x60cf).rw("pokey1", FUNC(pokey_device::read), FUNC(pokey_device::write)); - map(0x60d0, 0x60df).rw("pokey2", FUNC(pokey_device::read), FUNC(pokey_device::write)); - map(0x60e0, 0x60e0).w(FUNC(tempest_state::tempest_led_w)); - map(0x9000, 0xdfff).rom(); - map(0xae1f, 0xae1f).r(FUNC(tempest_state::rom_ae1f_r)); - map(0xf000, 0xffff).rom(); /* for the reset / interrupt vectors */ -} - - -/************************************* - * - * Port definitions - * - *************************************/ - -static INPUT_PORTS_START( tempest ) - PORT_START("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_SERVICE1 ) PORT_NAME("Diagnostic Step") - /* bit 6 is the VG HALT bit. We set it to "low" */ - /* per default (busy vector processor). */ - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("avg", avg_tempest_device, done_r) - /* bit 7 is tied to a 3kHz (?) clock */ - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(tempest_state, clock_r) - - PORT_START("IN1/DSW0") - PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(tempest_state, tempest_knob_r) - /* 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("IN2") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DE2:4,3") - 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_DIPLOCATION("DE2:2") - PORT_DIPSETTING( 0x04, "1, 3, 5, 7, 9" ) - PORT_DIPSETTING( 0x00, "tied to high score" ) - PORT_BIT(0x18, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(tempest_state, tempest_buttons_r) - 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("DSW1") /* N13 on analog vector generator PCB */ - PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("N13:8,7") - 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_DIPLOCATION("N13:6,5") - PORT_DIPSETTING( 0x00, "*1" ) - PORT_DIPSETTING( 0x04, "*4" ) - PORT_DIPSETTING( 0x08, "*5" ) - PORT_DIPSETTING( 0x0c, "*6" ) - PORT_DIPNAME( 0x10, 0x00, "Left Coin" ) PORT_DIPLOCATION("N13:4") - PORT_DIPSETTING( 0x00, "*1" ) - PORT_DIPSETTING( 0x10, "*2" ) - PORT_DIPNAME( 0xe0, 0x00, "Bonus Coins" ) PORT_DIPLOCATION("N13:3,2,1") - 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("DSW2") /* L12 on analog vector generator PCB */ - PORT_DIPNAME( 0x01, 0x00, "Minimum" ) PORT_DIPLOCATION("L12:8") - PORT_DIPSETTING( 0x00, "1 Credit" ) - PORT_DIPSETTING( 0x01, "2 Credit" ) - PORT_DIPNAME( 0x06, 0x00, DEF_STR( Language ) ) PORT_DIPLOCATION("L12:7,6") - 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_DIPLOCATION("L12:5,4,3") - 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_DIPLOCATION("L12:2,1") - PORT_DIPSETTING( 0xc0, "2" ) - PORT_DIPSETTING( 0x00, "3" ) - PORT_DIPSETTING( 0x40, "4" ) - PORT_DIPSETTING( 0x80, "5" ) - - PORT_START(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(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(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(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 - - -/************************************* - * - * Machine drivers - * - *************************************/ - -void tempest_state::tempest(machine_config &config) -{ - /* basic machine hardware */ - M6502(config, m_maincpu, MASTER_CLOCK / 8); - m_maincpu->set_addrmap(AS_PROGRAM, &tempest_state::main_map); - m_maincpu->set_periodic_int(FUNC(tempest_state::irq0_line_assert), attotime::from_hz(CLOCK_3KHZ / 12)); - - WATCHDOG_TIMER(config, m_watchdog).set_time(attotime::from_hz(CLOCK_3KHZ / 256)); - - ER2055(config, m_earom); - - /* video hardware */ - VECTOR(config, "vector"); - screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_VECTOR)); - screen.set_refresh_hz(60); - screen.set_size(400, 300); - screen.set_visarea(0, 580, 0, 570); - screen.set_screen_update("vector", FUNC(vector_device::screen_update)); - - AVG_TEMPEST(config, m_avg, 0); - m_avg->set_vector_tag("vector"); - - /* Drivers */ - MATHBOX(config, m_mathbox, 0); - - /* sound hardware */ - SPEAKER(config, "mono").front_center(); - - pokey_device &pokey1(POKEY(config, "pokey1", MASTER_CLOCK / 8)); - pokey1.pot_r<0>().set(FUNC(tempest_state::input_port_1_bit_r)); - pokey1.pot_r<1>().set(FUNC(tempest_state::input_port_1_bit_r)); - pokey1.pot_r<2>().set(FUNC(tempest_state::input_port_1_bit_r)); - pokey1.pot_r<3>().set(FUNC(tempest_state::input_port_1_bit_r)); - pokey1.pot_r<4>().set(FUNC(tempest_state::input_port_1_bit_r)); - pokey1.pot_r<5>().set(FUNC(tempest_state::input_port_1_bit_r)); - pokey1.pot_r<6>().set(FUNC(tempest_state::input_port_1_bit_r)); - pokey1.pot_r<7>().set(FUNC(tempest_state::input_port_1_bit_r)); - pokey1.set_output_rc(RES_K(10), CAP_U(0.015), 5.0); - pokey1.add_route(ALL_OUTPUTS, "mono", 0.5); - - pokey_device &pokey2(POKEY(config, "pokey2", MASTER_CLOCK / 8)); - pokey2.pot_r<0>().set(FUNC(tempest_state::input_port_2_bit_r)); - pokey2.pot_r<1>().set(FUNC(tempest_state::input_port_2_bit_r)); - pokey2.pot_r<2>().set(FUNC(tempest_state::input_port_2_bit_r)); - pokey2.pot_r<3>().set(FUNC(tempest_state::input_port_2_bit_r)); - pokey2.pot_r<4>().set(FUNC(tempest_state::input_port_2_bit_r)); - pokey2.pot_r<5>().set(FUNC(tempest_state::input_port_2_bit_r)); - pokey2.pot_r<6>().set(FUNC(tempest_state::input_port_2_bit_r)); - pokey2.pot_r<7>().set(FUNC(tempest_state::input_port_2_bit_r)); - pokey2.set_output_rc(RES_K(10), CAP_U(0.015), 5.0); - pokey2.add_route(ALL_OUTPUTS, "mono", 0.5); -} - - - -/************************************* - * - * ROM definitions - * - *************************************/ - -ROM_START( tempest ) /* rev 3 */ - ROM_REGION( 0x10000, "maincpu", 0 ) - /* Roms are for Tempest Analog Vector-Generator PCB Assembly A037383-03 or A037383-04 */ - ROM_LOAD( "136002-133.d1", 0x9000, 0x1000, CRC(1d0cc503) SHA1(7bef95db9b1102d6b1166bda0ccb276ef4cc3764) ) /* 136002-113 + 136002-114 */ - ROM_LOAD( "136002-134.f1", 0xa000, 0x1000, CRC(c88e3524) SHA1(89144baf1efc703b2336774793ce345b37829ee7) ) /* 136002-115 + 136002-316 */ - ROM_LOAD( "136002-235.j1", 0xb000, 0x1000, CRC(a4b2ce3f) SHA1(a5f5fb630a48c5d25346f90d4c13aaa98f60b228) ) /* 136002-217 + 136002-118 */ - ROM_LOAD( "136002-136.lm1", 0xc000, 0x1000, CRC(65a9a9f9) SHA1(73aa7d6f4e7093ccb2d97f6344f354872bcfd72a) ) /* 136002-119 + 136002-120 */ - ROM_LOAD( "136002-237.p1", 0xd000, 0x1000, CRC(de4e9e34) SHA1(04be074e45bf5cd95a852af97cd04e35b7f27fc4) ) /* 136002-121 + 136002-222 */ - 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, "avg:prom", 0 ) - ROM_LOAD( "136002-125.d7", 0x0000, 0x0100, CRC(5903af03) SHA1(24bc0366f394ad0ec486919212e38be0f08d0239) ) - - /* Mathbox PROMs */ - ROM_REGION( 0x20, "user2", 0 ) - ROM_LOAD( "136002.126", 0x0000, 0x0020, CRC(8b04f921) SHA1(317b3397482f13b2d1bc21f296d3b3f9a118787b) ) - - ROM_REGION32_BE( 0x400, "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( tempest1r ) /* rev 1 */ - ROM_REGION( 0x10000, "maincpu", 0 ) - /* Roms are for Tempest Analog Vector-Generator PCB Assembly A037383-03 or A037383-04 */ - ROM_LOAD( "136002-133.d1", 0x9000, 0x1000, CRC(1d0cc503) SHA1(7bef95db9b1102d6b1166bda0ccb276ef4cc3764) ) /* 136002-113 + 136002-114 */ - ROM_LOAD( "136002-134.f1", 0xa000, 0x1000, CRC(c88e3524) SHA1(89144baf1efc703b2336774793ce345b37829ee7) ) /* 136002-115 + 136002-316 */ - ROM_LOAD( "136002-135.j1", 0xb000, 0x1000, CRC(1ca27781) SHA1(cafbec28d682e98a74fdd5b8dfcfa33c64ff6a93) ) /* 136002-117 + 136002-118 */ - ROM_LOAD( "136002-136.lm1", 0xc000, 0x1000, CRC(65a9a9f9) SHA1(73aa7d6f4e7093ccb2d97f6344f354872bcfd72a) ) /* 136002-119 + 136002-120 */ - ROM_LOAD( "136002-137.p1", 0xd000, 0x1000, CRC(d75fd2ef) SHA1(19f611a77989d201d346b3e89fac5789663a01ce) ) /* 136002-121 + 136002-122 */ - 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, "avg:prom", 0 ) - ROM_LOAD( "136002-125.d7", 0x0000, 0x0100, CRC(5903af03) SHA1(24bc0366f394ad0ec486919212e38be0f08d0239) ) - - /* Mathbox PROMs */ - ROM_REGION( 0x20, "user2", 0 ) - ROM_LOAD( "136002.126", 0x0000, 0x0020, CRC(8b04f921) SHA1(317b3397482f13b2d1bc21f296d3b3f9a118787b) ) - - ROM_REGION32_BE( 0x400, "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 3 */ - ROM_REGION( 0x10000, "maincpu", 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, "avg:prom", 0 ) - ROM_LOAD( "136002-125.d7", 0x0000, 0x0100, CRC(5903af03) SHA1(24bc0366f394ad0ec486919212e38be0f08d0239) ) - - /* Mathbox PROMs */ - ROM_REGION( 0x20, "user2", 0 ) - ROM_LOAD( "136002.126", 0x0000, 0x0020, CRC(8b04f921) SHA1(317b3397482f13b2d1bc21f296d3b3f9a118787b) ) - - ROM_REGION32_BE( 0x400, "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, "maincpu", 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, "avg:prom", 0 ) - ROM_LOAD( "136002-125.d7", 0x0000, 0x0100, CRC(5903af03) SHA1(24bc0366f394ad0ec486919212e38be0f08d0239) ) - - /* Mathbox PROMs */ - ROM_REGION( 0x20, "user2", 0 ) - ROM_LOAD( "136002.126", 0x0000, 0x0020, CRC(8b04f921) SHA1(317b3397482f13b2d1bc21f296d3b3f9a118787b) ) - - ROM_REGION32_BE( 0x400, "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, "maincpu", 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, "avg:prom", 0 ) - ROM_LOAD( "136002-125.d7", 0x0000, 0x0100, CRC(5903af03) SHA1(24bc0366f394ad0ec486919212e38be0f08d0239) ) - - /* Mathbox PROMs */ - ROM_REGION( 0x20, "user2", 0 ) - ROM_LOAD( "136002.126", 0x0000, 0x0020, CRC(8b04f921) SHA1(317b3397482f13b2d1bc21f296d3b3f9a118787b) ) - - ROM_REGION32_BE( 0x400, "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, "maincpu", 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, "avg:prom", 0 ) - ROM_LOAD( "136002-125.d7", 0x0000, 0x0100, CRC(5903af03) SHA1(24bc0366f394ad0ec486919212e38be0f08d0239) ) - - /* Mathbox PROMs */ - ROM_REGION( 0x20, "user2", 0 ) - ROM_LOAD( "136002.126", 0x0000, 0x0020, CRC(8b04f921) SHA1(317b3397482f13b2d1bc21f296d3b3f9a118787b) ) - - ROM_REGION32_BE( 0x400, "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, tempest_state, empty_init, ROT270, "Atari", "Tempest (rev 3, Revised Hardware)", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, tempest3, tempest, tempest, tempest, tempest_state, empty_init, ROT270, "Atari", "Tempest (rev 3)", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, tempest2, tempest, tempest, tempest, tempest_state, empty_init, ROT270, "Atari", "Tempest (rev 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, tempest1, tempest, tempest, tempest, tempest_state, empty_init, ROT270, "Atari", "Tempest (rev 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, tempest1r, tempest, tempest, tempest, tempest_state, empty_init, ROT270, "Atari", "Tempest (rev 1, Revised Hardware)", MACHINE_SUPPORTS_SAVE ) -GAME( 1980, temptube, tempest, tempest, tempest, tempest_state, empty_init, ROT270, "hack (Duncan Brown)", "Tempest Tubes", MACHINE_SUPPORTS_SAVE ) |