diff options
Diffstat (limited to 'src/mame/drivers/bzone.c')
-rw-r--r-- | src/mame/drivers/bzone.c | 840 |
1 files changed, 840 insertions, 0 deletions
diff --git a/src/mame/drivers/bzone.c b/src/mame/drivers/bzone.c new file mode 100644 index 00000000000..c8ac766d606 --- /dev/null +++ b/src/mame/drivers/bzone.c @@ -0,0 +1,840 @@ +/*************************************************************************** + + Atari Battlezone hardware + + Games supported: + * Battlezone + * Bradley Trainer + * Red Baron + + Known bugs: + * none at this time + +**************************************************************************** + + Battlezone memory map (preliminary) + + 0000-04ff RAM + 0800 IN0 + 0a00 IN1 + 0c00 IN2 + + 1200 Vector generator start (write) + 1400 + 1600 Vector generator reset (write) + + 1800 Mathbox Status register + 1810 Mathbox value (lo-byte) + 1818 Mathbox value (hi-byte) + 1820-182f POKEY I/O + 1828 Control inputs + 1860-187f Mathbox RAM + + 2000-2fff Vector generator RAM + 3000-37ff Vector Generator ROM + 5000-7fff ROM + + Battlezone settings: + + 0 = OFF 1 = ON X = Don't Care $ = Atari suggests + + ** IMPORTANT - BITS are INVERTED in the game itself ** + + TOP 8 SWITCH DIP + 87654321 + -------- + XXXXXX11 Free Play + XXXXXX10 1 coin for 2 plays + XXXXXX01 1 coin for 1 play + XXXXXX00 2 coins for 1 play + XXXX11XX Right coin mech x 1 + XXXX10XX Right coin mech x 4 + XXXX01XX Right coin mech x 5 + XXXX00XX Right coin mech x 6 + XXX1XXXX Center (or Left) coin mech x 1 + XXX0XXXX Center (or Left) coin mech x 2 + 111XXXXX No bonus coin + 110XXXXX For every 2 coins inserted, game logic adds 1 more + 101XXXXX For every 4 coins inserted, game logic adds 1 more + 100XXXXX For every 4 coins inserted, game logic adds 2 more + 011XXXXX For every 5 coins inserted, game logic adds 1 more + + BOTTOM 8 SWITCH DIP + 87654321 + -------- + XXXXXX11 Game starts with 2 tanks + XXXXXX10 Game starts with 3 tanks $ + XXXXXX01 Game starts with 4 tanks + XXXXXX00 Game starts with 5 tanks + XXXX11XX Missile appears after 5,000 points + XXXX10XX Missile appears after 10,000 points $ + XXXX01XX Missile appears after 20,000 points + XXXX00XX Missile appears after 30,000 points + XX11XXXX No bonus tank + XX10XXXX Bonus taks at 15,000 and 100,000 points $ + XX01XXXX Bonus taks at 20,000 and 100,000 points + XX00XXXX Bonus taks at 50,000 and 100,000 points + 11XXXXXX English language + 10XXXXXX French language + 01XXXXXX German language + 00XXXXXX Spanish language + + 4 SWITCH DIP + + XX11 All coin mechanisms register on one coin counter + XX01 Left and center coin mechanisms on one coin counter, right on second + XX10 Center and right coin mechanisms on one coin counter, left on second + XX00 Each coin mechanism has it's own counter + +**************************************************************************** + + Red Baron memory map (preliminary) + + 0000-04ff RAM + 0800 COIN_IN + 0a00 IN1 + 0c00 IN2 + + 1200 Vector generator start (write) + 1400 + 1600 Vector generator reset (write) + + 1800 Mathbox Status register + 1802 Button inputs + 1804 Mathbox value (lo-byte) + 1806 Mathbox value (hi-byte) + 1808 Red Baron Sound (bit 1 selects joystick pot to read also) + 1810-181f POKEY I/O + 1818 Joystick inputs + 1860-187f Mathbox RAM + + 2000-2fff Vector generator RAM + 3000-37ff Vector generator ROM + 5000-7fff ROM + + RED BARON DIP SWITCH SETTINGS + Donated by Dana Colbert + + + $=Default + "K" = 1,000 + + Switch at position P10 + 8 7 6 5 4 3 2 1 + _________________________________________ + English $| | | | | | |Off |Off | + Spanish | | | | | | |Off | On | + French | | | | | | | On |Off | + German | | | | | | | On | On | + | | | | | | | | | + Bonus airplane granted at: | | | | | | | | | + Bonus at 2K, 10K and 30K | | | | |Off |Off | | | + Bonus at 4K, 15K and 40K $| | | | |Off | On | | | + Bonus at 6K, 20K and 50K | | | | | On |Off | | | + No bonus airplanes | | | | | On | On | | | + | | | | | | | | | + 2 aiplanes per game | | |Off |Off | | | | | + 3 airplanes per game $| | |Off | On | | | | | + 4 airplanes per game | | | On |Off | | | | | + 5 airplanes per game | | | On | On | | | | | + | | | | | | | | | + 1-play minimum $| |Off | | | | | | | + 2-play minimum | | On | | | | | | | + | | | | | | | | | + Self-adj. game difficulty: on $|Off | | | | | | | | + Self-adj. game difficulty: off | On | | | | | | | | + ----------------------------------------- + + If self-adjusting game difficulty feature is + turned on, the program strives to maintain the + following average game lengths (in seconds): + + Airplanes per game: + Bonus airplane granted at: 2 3 4 5 + 2,000, 10,000 and 30,000 points 90 105$ 120 135 + 4,000, 15,000 and 40,000 points 75 90 105 120 + 6,000, 20,000 and 50,000 points 60 75 90 105 + No bonus airplanes 45 60 75 90 + + + + Switch at position M10 + 8 7 6 5 4 3 2 1 + _________________________________________ + 50 PER PLAY | | | | | | | | | + Straight 25 Door: | | | | | | | | | + No Bonus Coins |Off |Off |Off |Off |Off |Off | On | On | + Bonus $1= 3 plays |Off | On | On |Off |Off |Off | On | On | + Bonus $1= 3 plays, 75 = 2 plays |Off |Off | On |Off |Off |Off | On | On | + | | | | | | | | | + 25 /$1 Door or 25 /25 /$1 Door | | | | | | | | | + No Bonus Coins |Off |Off |Off |Off |Off | On | On | On | + Bonus $1= 3 plays |Off | On | On |Off |Off | On | On | On | + Bonus $1= 3 plays, 75 = 2 plays |Off |Off | On |Off |Off | On | On | On | + | | | | | | | | | + 25 PER PLAY | | | | | | | | | + Straight 25 Door: | | | | | | | | | + No Bonus Coins |Off |Off |Off |Off |Off |Off | On |Off | + Bonus 50 = 3 plays |Off |Off | On |Off |Off |Off | On |Off | + Bonus $1= 5 plays |Off | On |Off |Off |Off |Off | On |Off | + | | | | | | | | | + 25 /$1 Door or 25 /25 /$1 Door | | | | | | | | | + No Bonus Coins |Off |Off |Off |Off |Off | On | On |Off | + Bonus 50 = 3 plays |Off |Off | On |Off |Off | On | On |Off | + Bonus $1= 5 plays |Off | On |Off |Off |Off | On | On |Off | + ----------------------------------------- + + Switch at position L11 + 1 2 3 4 + _____________________ + All 3 mechs same denomination | On | On | | | + Left and Center same, right different denomination | On |Off | | | + Right and Center same, left differnnt denomination |Off | On | | | + All different denominations |Off |Off | | | + --------------------- + +***************************************************************************/ + +#include "driver.h" +#include "video/vector.h" +#include "video/avgdvg.h" +#include "machine/mathbox.h" +#include "machine/atari_vg.h" +#include "sound/pokey.h" +#include "sound/custom.h" +#include "rendlay.h" +#include "bzone.h" + +#include "bzone.lh" + +#define IN0_3KHZ (1<<7) +#define IN0_VG_HALT (1<<6) + +#define MASTER_CLOCK (12096000) +#define CLOCK_3KHZ (MASTER_CLOCK / 4096) + + +static UINT8 analog_data; + +UINT8 rb_input_select; + + + +/************************************* + * + * Save state registration + * + *************************************/ + +static MACHINE_START( bzone ) +{ + state_save_register_global(analog_data); + mb_register_states(); + atari_vg_register_states(); +} + + +static MACHINE_START( redbaron ) +{ + state_save_register_global(analog_data); + state_save_register_global(rb_input_select); + mb_register_states(); + atari_vg_register_states(); +} + + + +/************************************* + * + * Interrupt handling + * + *************************************/ + +static INTERRUPT_GEN( bzone_interrupt ) +{ + if (readinputport(0) & 0x10) + cpunum_set_input_line(0, INPUT_LINE_NMI, PULSE_LINE); +} + + + +/************************************* + * + * Battlezone input ports + * + *************************************/ + +READ8_HANDLER( bzone_IN0_r ) +{ + int res; + + res = readinputportbytag("IN0"); + + if (activecpu_gettotalcycles() & 0x100) + res |= IN0_3KHZ; + else + res &= ~IN0_3KHZ; + + if (avgdvg_done()) + res |= IN0_VG_HALT; + else + res &= ~IN0_VG_HALT; + + return res; +} + + +static WRITE8_HANDLER( bzone_coin_counter_w ) +{ + coin_counter_w(offset,data); +} + + + +/************************************* + * + * Red Baron input ports + * + *************************************/ + +static READ8_HANDLER( redbaron_joy_r ) +{ + return readinputport(rb_input_select ? 5 : 6); +} + + + +/************************************* + * + * Main CPU memory handlers + * + *************************************/ + +static ADDRESS_MAP_START( bzone_map, ADDRESS_SPACE_PROGRAM, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(15) ) + AM_RANGE(0x0000, 0x03ff) AM_RAM + AM_RANGE(0x0800, 0x0800) AM_READ(bzone_IN0_r) /* IN0 */ + AM_RANGE(0x0a00, 0x0a00) AM_READ(input_port_1_r) /* DSW1 */ + AM_RANGE(0x0c00, 0x0c00) AM_READ(input_port_2_r) /* DSW2 */ + AM_RANGE(0x1000, 0x1000) AM_WRITE(bzone_coin_counter_w) + AM_RANGE(0x1200, 0x1200) AM_WRITE(avgdvg_go_w) + AM_RANGE(0x1400, 0x1400) AM_WRITE(watchdog_reset_w) + AM_RANGE(0x1600, 0x1600) AM_WRITE(avgdvg_reset_w) + AM_RANGE(0x1800, 0x1800) AM_READ(mb_status_r) + AM_RANGE(0x1810, 0x1810) AM_READ(mb_lo_r) + AM_RANGE(0x1818, 0x1818) AM_READ(mb_hi_r) + AM_RANGE(0x1820, 0x182f) AM_READWRITE(pokey1_r, pokey1_w) + AM_RANGE(0x1840, 0x1840) AM_WRITE(bzone_sounds_w) + AM_RANGE(0x1860, 0x187f) AM_WRITE(mb_go_w) + AM_RANGE(0x2000, 0x2fff) AM_RAM AM_BASE(&vectorram) AM_SIZE(&vectorram_size) AM_REGION(REGION_CPU1, 0x2000) + AM_RANGE(0x3000, 0x7fff) AM_ROM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( redbaron_map, ADDRESS_SPACE_PROGRAM, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(15) ) + AM_RANGE(0x0000, 0x03ff) AM_RAM + AM_RANGE(0x0800, 0x0800) AM_READ(bzone_IN0_r) /* IN0 */ + AM_RANGE(0x0a00, 0x0a00) AM_READ(input_port_1_r) /* DSW1 */ + AM_RANGE(0x0c00, 0x0c00) AM_READ(input_port_2_r) /* DSW2 */ + AM_RANGE(0x1000, 0x1000) AM_WRITE(MWA8_NOP) /* coin out */ + AM_RANGE(0x1200, 0x1200) AM_WRITE(avgdvg_go_w) + AM_RANGE(0x1400, 0x1400) AM_WRITE(watchdog_reset_w) + AM_RANGE(0x1600, 0x1600) AM_WRITE(avgdvg_reset_w) + AM_RANGE(0x1800, 0x1800) AM_READ(mb_status_r) + AM_RANGE(0x1802, 0x1802) AM_READ(input_port_4_r) /* IN4 */ + AM_RANGE(0x1804, 0x1804) AM_READ(mb_lo_r) + AM_RANGE(0x1806, 0x1806) AM_READ(mb_hi_r) + AM_RANGE(0x1808, 0x1808) AM_WRITE(redbaron_sounds_w) /* and select joystick pot also */ + AM_RANGE(0x180a, 0x180a) AM_WRITE(MWA8_NOP) /* sound reset, yet todo */ + AM_RANGE(0x180c, 0x180c) AM_WRITE(atari_vg_earom_ctrl_w) + AM_RANGE(0x1810, 0x181f) AM_READWRITE(pokey1_r, pokey1_w) + AM_RANGE(0x1820, 0x185f) AM_READWRITE(atari_vg_earom_r, atari_vg_earom_w) + AM_RANGE(0x1860, 0x187f) AM_WRITE(mb_go_w) + AM_RANGE(0x2000, 0x2fff) AM_RAM AM_BASE(&vectorram) AM_SIZE(&vectorram_size) AM_REGION(REGION_CPU1, 0x2000) + AM_RANGE(0x3000, 0x7fff) AM_ROM +ADDRESS_MAP_END + + + +/************************************* + * + * Port definitions + * + *************************************/ + +#define BZONEIN0\ + PORT_START_TAG("IN0")\ + PORT_BIT ( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )\ + PORT_BIT ( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )\ + PORT_BIT ( 0x0c, IP_ACTIVE_LOW, IPT_UNUSED )\ + 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 bzone_IN0_r() */\ + PORT_BIT ( 0x40, IP_ACTIVE_HIGH, IPT_SPECIAL )\ + /* bit 7 is tied to a 3kHz clock */\ + /* handled by bzone_IN0_r() */\ + PORT_BIT ( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) + + +#define BZONEDSW0\ + PORT_START_TAG("DSW0")\ + PORT_DIPNAME(0x03, 0x01, DEF_STR( Lives ) )\ + PORT_DIPSETTING ( 0x00, "2" )\ + PORT_DIPSETTING ( 0x01, "3" )\ + PORT_DIPSETTING ( 0x02, "4" )\ + PORT_DIPSETTING ( 0x03, "5" )\ + PORT_DIPNAME(0x0c, 0x04, "Missile appears at" )\ + PORT_DIPSETTING ( 0x00, "5000" )\ + PORT_DIPSETTING ( 0x04, "10000" )\ + PORT_DIPSETTING ( 0x08, "20000" )\ + PORT_DIPSETTING ( 0x0c, "30000" )\ + PORT_DIPNAME(0x30, 0x10, DEF_STR( Bonus_Life ) )\ + PORT_DIPSETTING ( 0x10, "15k and 100k" )\ + PORT_DIPSETTING ( 0x20, "20k and 100k" )\ + PORT_DIPSETTING ( 0x30, "50k and 100k" )\ + PORT_DIPSETTING ( 0x00, DEF_STR( None ) )\ + PORT_DIPNAME(0xc0, 0x00, DEF_STR( Language ) )\ + PORT_DIPSETTING ( 0x00, DEF_STR( English ))\ + PORT_DIPSETTING ( 0x40, DEF_STR( German ))\ + PORT_DIPSETTING ( 0x80, DEF_STR( French ))\ + PORT_DIPSETTING ( 0xc0, DEF_STR( Spanish )) + +#define BZONEDSW1\ + PORT_START_TAG("DSW1")\ + PORT_DIPNAME(0x03, 0x02, DEF_STR( Coinage ) )\ + PORT_DIPSETTING ( 0x03, DEF_STR( 2C_1C ) )\ + PORT_DIPSETTING ( 0x02, DEF_STR( 1C_1C ) )\ + PORT_DIPSETTING ( 0x01, DEF_STR( 1C_2C ) )\ + PORT_DIPSETTING ( 0x00, DEF_STR( Free_Play ) )\ + PORT_DIPNAME(0x0c, 0x00, DEF_STR( Coin_B ) )\ + PORT_DIPSETTING ( 0x00, "*1" )\ + PORT_DIPSETTING ( 0x04, "*4" )\ + PORT_DIPSETTING ( 0x08, "*5" )\ + PORT_DIPSETTING ( 0x0c, "*6" )\ + PORT_DIPNAME(0x10, 0x00, DEF_STR( Coin_A ) )\ + PORT_DIPSETTING ( 0x00, "*1" )\ + PORT_DIPSETTING ( 0x10, "*2" )\ + PORT_DIPNAME(0xe0, 0x00, "Bonus Coins" )\ + PORT_DIPSETTING ( 0x00, DEF_STR( None ) )\ + PORT_DIPSETTING ( 0x20, "3 credits/2 coins" )\ + PORT_DIPSETTING ( 0x40, "5 credits/4 coins" )\ + PORT_DIPSETTING ( 0x60, "6 credits/4 coins" )\ + PORT_DIPSETTING ( 0x80, "6 credits/5 coins" ) + +static INPUT_PORTS_START( bzone ) +BZONEIN0 +BZONEDSW0 +BZONEDSW1 + + PORT_START_TAG("IN3") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_DOWN ) PORT_2WAY + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_UP ) PORT_2WAY + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_DOWN ) PORT_2WAY + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_UP ) PORT_2WAY + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START1 ) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 ) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( redbaron ) +BZONEIN0 + PORT_START_TAG("DSW0") + /* See the table above if you are really interested */ + PORT_DIPNAME(0xff, 0xfd, DEF_STR( Coinage ) ) + PORT_DIPSETTING ( 0xfd, DEF_STR( Normal ) ) + + PORT_START_TAG("DSW1") + PORT_DIPNAME(0x03, 0x03, DEF_STR( Language ) ) + PORT_DIPSETTING ( 0x00, DEF_STR( German ) ) + PORT_DIPSETTING ( 0x01, DEF_STR( French ) ) + PORT_DIPSETTING ( 0x02, DEF_STR( Spanish ) ) + PORT_DIPSETTING ( 0x03, DEF_STR( English ) ) + PORT_DIPNAME(0x0c, 0x04, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING ( 0x0c, "2k 10k 30k" ) + PORT_DIPSETTING ( 0x08, "4k 15k 40k" ) + PORT_DIPSETTING ( 0x04, "6k 20k 50k" ) + PORT_DIPSETTING ( 0x00, DEF_STR( None ) ) + PORT_DIPNAME(0x30, 0x20, DEF_STR( Lives ) ) + PORT_DIPSETTING ( 0x30, "2" ) + PORT_DIPSETTING ( 0x20, "3" ) + PORT_DIPSETTING ( 0x10, "4" ) + PORT_DIPSETTING ( 0x00, "5" ) + PORT_DIPNAME(0x40, 0x40, "One Play Minimum" ) + PORT_DIPSETTING ( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING ( 0x00, DEF_STR( On ) ) + PORT_DIPNAME(0x80, 0x80, "Self Adjust Diff" ) + PORT_DIPSETTING ( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING ( 0x00, DEF_STR( On ) ) + + /* IN3 - the real machine reads either the X or Y axis from this port */ + /* Instead, we use the two fake 5 & 6 ports and bank-switch the proper */ + /* value based on the lsb of the byte written to the sound port */ + PORT_START_TAG("IN3") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_4WAY + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_4WAY + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_4WAY + + PORT_START_TAG("IN4") /* Misc controls */ + PORT_BIT( 0x3f, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START1 ) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) + + /* These 2 are fake - they are bank-switched from reads to IN3 */ + /* Red Baron doesn't seem to use the full 0-255 range. */ + PORT_START_TAG("FAKE1") /* IN5 */ + PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_MINMAX(64,192) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) + + PORT_START_TAG("FAKE2") /* IN6 */ + PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_MINMAX(64,192) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) +INPUT_PORTS_END + + +static INPUT_PORTS_START( bradley ) +BZONEIN0 +BZONEDSW0 +BZONEDSW1 + + PORT_START_TAG("IN3") + PORT_BIT( 0x1f, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START1 ) + PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START_TAG("1808") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Armor Piercing (Single Shot)") PORT_CODE(KEYCODE_A) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("High Explosive (Single Shot)") PORT_CODE(KEYCODE_Z) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Armor Piercing (Low Rate)") PORT_CODE(KEYCODE_S) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("High Explosive (Low Rate)") PORT_CODE(KEYCODE_X) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Armor Piercing (High Rate)") PORT_CODE(KEYCODE_D) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_NAME("High Explosive (High Rate)") PORT_CODE(KEYCODE_C) + + PORT_START_TAG("1809") + PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON9 ) PORT_NAME("Select TOW Missiles") PORT_CODE(KEYCODE_T) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_NAME("7.62 mm Machine Gun") PORT_CODE(KEYCODE_V) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON10 ) PORT_NAME("Magnification Toggle") PORT_CODE(KEYCODE_M) PORT_TOGGLE + PORT_BIT( 0xe0, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START_TAG("AN0") /* analog 0 = turret rotation */ + PORT_BIT( 0xff, 0x88, IPT_AD_STICK_X ) PORT_MINMAX(0x48,0xc8) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) + + PORT_START_TAG("AN1") /* analog 1 = turret elevation */ + PORT_BIT( 0xff, 0x86, IPT_AD_STICK_Y ) PORT_MINMAX(0x46,0xc6) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) + + PORT_START_TAG("AN2") /* analog 2 = shell firing range hack removed, now uses Z */ + PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Z ) PORT_MINMAX(0x10,0xf0) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) PORT_CENTERDELTA(0) PORT_REVERSE +INPUT_PORTS_END + + + +/************************************* + * + * Sound interfaces + * + *************************************/ + +static struct POKEYinterface bzone_pokey_interface = +{ + { 0 }, + input_port_3_r +}; + + +static struct CustomSound_interface bzone_custom_interface = +{ + bzone_sh_start +}; + + +static struct POKEYinterface redbaron_pokey_interface = +{ + { 0 }, + redbaron_joy_r +}; + + +static struct CustomSound_interface redbaron_custom_interface = +{ + redbaron_sh_start +}; + + + +/************************************* + * + * Machine driver + * + *************************************/ + +static MACHINE_DRIVER_START( bzone ) + + /* basic machine hardware */ + MDRV_CPU_ADD_TAG("main", M6502, MASTER_CLOCK / 8) + MDRV_CPU_PROGRAM_MAP(bzone_map,0) + MDRV_CPU_PERIODIC_INT(bzone_interrupt, (double)MASTER_CLOCK / 4096 / 12) + + MDRV_SCREEN_REFRESH_RATE(40) + MDRV_SCREEN_VBLANK_TIME(0) + + MDRV_MACHINE_START(bzone) + + /* 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, 400) + MDRV_PALETTE_LENGTH(32768) + + MDRV_VIDEO_START(avg_bzone) + MDRV_VIDEO_UPDATE(vector) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD_TAG("pokey", POKEY, MASTER_CLOCK / 8) + MDRV_SOUND_CONFIG(bzone_pokey_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + + MDRV_SOUND_ADD_TAG("custom", CUSTOM, 0) + MDRV_SOUND_CONFIG(bzone_custom_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) +MACHINE_DRIVER_END + + +static MACHINE_DRIVER_START( bradley ) + + /* basic machine hardware */ + MDRV_IMPORT_FROM(bzone) + + /* sound hardware */ + MDRV_SOUND_REPLACE("pokey", POKEY, MASTER_CLOCK / 8) + MDRV_SOUND_CONFIG(bzone_pokey_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) +MACHINE_DRIVER_END + + +static MACHINE_DRIVER_START( redbaron ) + + /* basic machine hardware */ + MDRV_IMPORT_FROM(bzone) + MDRV_CPU_MODIFY("main") + MDRV_CPU_PROGRAM_MAP(redbaron_map,0) + MDRV_CPU_PERIODIC_INT(bzone_interrupt, (double)MASTER_CLOCK / 4096 / 12) + + MDRV_MACHINE_START(redbaron) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_NVRAM_HANDLER(atari_vg) + + /* video hardware */ + MDRV_SCREEN_VISIBLE_AREA(0, 520, 0, 400) + + MDRV_VIDEO_START(avg_bzone) + + /* sound hardware */ + MDRV_SOUND_REPLACE("pokey", POKEY, 1500000) + MDRV_SOUND_CONFIG(redbaron_pokey_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + + MDRV_SOUND_REPLACE("custom", CUSTOM, 0) + MDRV_SOUND_CONFIG(redbaron_custom_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) +MACHINE_DRIVER_END + + + +/************************************* + * + * ROM definitions + * + *************************************/ + +ROM_START( bzone ) + ROM_REGION( 0x8000, REGION_CPU1, 0 ) + ROM_LOAD( "036414.01", 0x5000, 0x0800, CRC(efbc3fa0) SHA1(6d284fab34b09dde8aa0df7088711d4723f07970) ) + ROM_LOAD( "036413.01", 0x5800, 0x0800, CRC(5d9d9111) SHA1(42638cff53a9791a0f18d316f62a0ea8eea4e194) ) + ROM_LOAD( "036412.01", 0x6000, 0x0800, CRC(ab55cbd2) SHA1(6bbb8316d9f8588ea0893932f9174788292b8edc) ) + ROM_LOAD( "036411.01", 0x6800, 0x0800, CRC(ad281297) SHA1(54c5e06b2e69eb731a6c9b1704e4340f493e7ea5) ) + ROM_LOAD( "036410.01", 0x7000, 0x0800, CRC(0b7bfaa4) SHA1(33ae0f68b4e2eae9f3aecbee2d0b29003ce460b2) ) + ROM_LOAD( "036409.01", 0x7800, 0x0800, CRC(1e14e919) SHA1(448fab30535e6fad7e0ab4427bc06bbbe075e797) ) + /* Vector Generator ROMs */ + ROM_LOAD( "036422.01", 0x3000, 0x0800, CRC(7414177b) SHA1(147d97a3b475e738ce00b1a7909bbd787ad06eda) ) + ROM_LOAD( "036421.01", 0x3800, 0x0800, CRC(8ea8f939) SHA1(b71e0ab0e220c3e64dc2b094c701fb1a960b64e4) ) + /* AVG PROM */ + ROM_REGION( 0x100, REGION_USER1, 0 ) + ROM_LOAD( "036498-01.k7", 0x0000, 0x0100, CRC(5903af03) SHA1(24bc0366f394ad0ec486919212e38be0f08d0239) ) + /* Mathbox PROMs */ + ROM_REGION( 0x20, REGION_USER2, 0 ) + ROM_LOAD( "036174.01", 0x0000, 0x0020, CRC(8b04f921) SHA1(317b3397482f13b2d1bc21f296d3b3f9a118787b) ) + ROM_REGION32_BE( 0x400, REGION_USER3, 0 ) + ROMX_LOAD( "036175.01", 0, 0x100, CRC(2af82e87) SHA1(3816835a9ccf99a76d246adf204989d9261bb065), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "036176.01", 0, 0x100, CRC(b31f6e24) SHA1(ce5f8ca34d06a5cfa0076b47400e61e0130ffe74), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) + ROMX_LOAD( "036177.01", 1, 0x100, CRC(8119b847) SHA1(c4fbaedd4ce1ad6a4128cbe902b297743edb606a), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "036178.01", 1, 0x100, CRC(09f5a4d5) SHA1(d6f2ac07ca9ee385c08831098b0dcaf56808993b), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) + ROMX_LOAD( "036179.01", 2, 0x100, CRC(823b61ae) SHA1(d99a839874b45f64e14dae92a036e47a53705d16), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "036180.01", 2, 0x100, CRC(276eadd5) SHA1(55718cd8ec4bcf75076d5ef0ee1ed2551e19d9ba), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) +ROM_END + + +ROM_START( bzone2 ) + ROM_REGION( 0x8000, REGION_CPU1, 0 ) + ROM_LOAD( "036414a.01", 0x5000, 0x0800, CRC(13de36d5) SHA1(40e356ddc5c042bc1ce0b71f51e8b6de72daf1e4) ) + ROM_LOAD( "036413.01", 0x5800, 0x0800, CRC(5d9d9111) SHA1(42638cff53a9791a0f18d316f62a0ea8eea4e194) ) + ROM_LOAD( "036412.01", 0x6000, 0x0800, CRC(ab55cbd2) SHA1(6bbb8316d9f8588ea0893932f9174788292b8edc) ) + ROM_LOAD( "036411.01", 0x6800, 0x0800, CRC(ad281297) SHA1(54c5e06b2e69eb731a6c9b1704e4340f493e7ea5) ) + ROM_LOAD( "036410.01", 0x7000, 0x0800, CRC(0b7bfaa4) SHA1(33ae0f68b4e2eae9f3aecbee2d0b29003ce460b2) ) + ROM_LOAD( "036409.01", 0x7800, 0x0800, CRC(1e14e919) SHA1(448fab30535e6fad7e0ab4427bc06bbbe075e797) ) + /* Vector Generator ROMs */ + ROM_LOAD( "036422.01", 0x3000, 0x0800, CRC(7414177b) SHA1(147d97a3b475e738ce00b1a7909bbd787ad06eda) ) + ROM_LOAD( "036421.01", 0x3800, 0x0800, CRC(8ea8f939) SHA1(b71e0ab0e220c3e64dc2b094c701fb1a960b64e4) ) + /* AVG PROM */ + ROM_REGION( 0x100, REGION_USER1, 0 ) + ROM_LOAD( "036498-01.k7", 0x0000, 0x0100, CRC(5903af03) SHA1(24bc0366f394ad0ec486919212e38be0f08d0239) ) + /* Mathbox PROMs */ + ROM_REGION( 0x20, REGION_USER2, 0 ) + ROM_LOAD( "036174.01", 0x0000, 0x0020, CRC(8b04f921) SHA1(317b3397482f13b2d1bc21f296d3b3f9a118787b) ) + ROM_REGION32_BE( 0x400, REGION_USER3, 0 ) + ROMX_LOAD( "036175.01", 0, 0x100, CRC(2af82e87) SHA1(3816835a9ccf99a76d246adf204989d9261bb065), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "036176.01", 0, 0x100, CRC(b31f6e24) SHA1(ce5f8ca34d06a5cfa0076b47400e61e0130ffe74), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) + ROMX_LOAD( "036177.01", 1, 0x100, CRC(8119b847) SHA1(c4fbaedd4ce1ad6a4128cbe902b297743edb606a), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "036178.01", 1, 0x100, CRC(09f5a4d5) SHA1(d6f2ac07ca9ee385c08831098b0dcaf56808993b), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) + ROMX_LOAD( "036179.01", 2, 0x100, CRC(823b61ae) SHA1(d99a839874b45f64e14dae92a036e47a53705d16), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "036180.01", 2, 0x100, CRC(276eadd5) SHA1(55718cd8ec4bcf75076d5ef0ee1ed2551e19d9ba), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) +ROM_END + + +ROM_START( bzonec ) /* cocktail version */ + ROM_REGION( 0x8000, REGION_CPU1, 0 ) + ROM_LOAD( "bz1g4800", 0x4800, 0x0800, CRC(e228dd64) SHA1(247c788b4ccadf6c1e9201ad4f31d55c0036ff0f) ) + ROM_LOAD( "bz1f5000", 0x5000, 0x0800, CRC(dddfac9a) SHA1(e6f2761902e1ffafba437a1117e9ba40f116087d) ) + ROM_LOAD( "bz1e5800", 0x5800, 0x0800, CRC(7e00e823) SHA1(008e491a8074dac16e56c3aedec32d4b340158ce) ) + ROM_LOAD( "bz1d6000", 0x6000, 0x0800, CRC(c0f8c068) SHA1(66fff6b493371f0015c21b06b94637db12deced2) ) + ROM_LOAD( "bz1c6800", 0x6800, 0x0800, CRC(5adc64bd) SHA1(4574e4fe375d4ab3151a988235efa11e8744e2c6) ) + ROM_LOAD( "bz1b7000", 0x7000, 0x0800, CRC(ed8a860e) SHA1(316a3c4870ba44bb3e9cb9fc5200eb081318facf) ) + ROM_LOAD( "bz1a7800", 0x7800, 0x0800, CRC(04babf45) SHA1(a59da5ff49fc398ca4a948e28f05250af776b898) ) + /* Vector Generator ROMs */ + ROM_LOAD( "036422.01", 0x3000, 0x0800, CRC(7414177b) SHA1(147d97a3b475e738ce00b1a7909bbd787ad06eda) ) // bz3a3000 + ROM_LOAD( "bz3b3800", 0x3800, 0x0800, CRC(76cf57f6) SHA1(1b8f3fcd664ed04ce60d94fdf27e56b20d52bdbd) ) + /* AVG PROM */ + ROM_REGION( 0x100, REGION_USER1, 0 ) + ROM_LOAD( "036498-01.k7", 0x0000, 0x0100, CRC(5903af03) SHA1(24bc0366f394ad0ec486919212e38be0f08d0239) ) + /* Mathbox PROMs */ + ROM_REGION( 0x20, REGION_USER2, 0 ) + ROM_LOAD( "036174.01", 0x0000, 0x0020, CRC(8b04f921) SHA1(317b3397482f13b2d1bc21f296d3b3f9a118787b) ) + ROM_REGION32_BE( 0x400, REGION_USER3, 0 ) + ROMX_LOAD( "036175.01", 0, 0x100, CRC(2af82e87) SHA1(3816835a9ccf99a76d246adf204989d9261bb065), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "036176.01", 0, 0x100, CRC(b31f6e24) SHA1(ce5f8ca34d06a5cfa0076b47400e61e0130ffe74), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) + ROMX_LOAD( "036177.01", 1, 0x100, CRC(8119b847) SHA1(c4fbaedd4ce1ad6a4128cbe902b297743edb606a), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "036178.01", 1, 0x100, CRC(09f5a4d5) SHA1(d6f2ac07ca9ee385c08831098b0dcaf56808993b), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) + ROMX_LOAD( "036179.01", 2, 0x100, CRC(823b61ae) SHA1(d99a839874b45f64e14dae92a036e47a53705d16), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "036180.01", 2, 0x100, CRC(276eadd5) SHA1(55718cd8ec4bcf75076d5ef0ee1ed2551e19d9ba), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) +ROM_END + + +ROM_START( bradley ) + ROM_REGION( 0x8000, REGION_CPU1, 0 ) + ROM_LOAD( "btc1.bin", 0x4000, 0x0800, CRC(0bb8e049) SHA1(158517ff9a4e8ae7270ccf7eab87bf77427a4a8c) ) + ROM_LOAD( "btd1.bin", 0x4800, 0x0800, CRC(9e0566d4) SHA1(f14aa5c3d14136c5e9a317004f82d44a8d5d6815) ) + ROM_LOAD( "bte1.bin", 0x5000, 0x0800, CRC(64ee6a42) SHA1(33d0713ed2a1f4c1c443dce1f053321f2c279293) ) + ROM_LOAD( "bth1.bin", 0x5800, 0x0800, CRC(baab67be) SHA1(77ad1935bf252b401bb6bbb57bd2ed66a85f0a6d) ) + ROM_LOAD( "btj1.bin", 0x6000, 0x0800, CRC(036adde4) SHA1(16a9fcf98a2aa287e0b7a665b88c9c67377a1203) ) + ROM_LOAD( "btk1.bin", 0x6800, 0x0800, CRC(f5c2904e) SHA1(f2cbf720c4f5ce0fc912dbc2f0445cb2c51ffac1) ) + ROM_LOAD( "btlm.bin", 0x7000, 0x0800, CRC(7d0313bf) SHA1(17e3d8df62b332cf889133f1943c8f27308df027) ) + ROM_LOAD( "btn1.bin", 0x7800, 0x0800, CRC(182c8c64) SHA1(511af60d86551291d2dc28442970b4863c62624a) ) + /* Vector Generator ROMs */ + ROM_LOAD( "btb3.bin", 0x3000, 0x0800, CRC(88206304) SHA1(6a2e2ff35a929acf460f244db7968f3978b1d239) ) + ROM_LOAD( "bta3.bin", 0x3800, 0x0800, CRC(d669d796) SHA1(ad606882320cd13612c7962d4718680fe5a35dd3) ) + /* AVG PROM */ + ROM_REGION( 0x100, REGION_USER1, 0 ) + ROM_LOAD( "036498-01.k7", 0x0000, 0x0100, CRC(5903af03) SHA1(24bc0366f394ad0ec486919212e38be0f08d0239) ) + /* Mathbox PROMs */ + ROM_REGION( 0x20, REGION_USER2, 0 ) + ROM_LOAD( "036174.01", 0x0000, 0x0020, CRC(8b04f921) SHA1(317b3397482f13b2d1bc21f296d3b3f9a118787b) ) + ROM_REGION32_BE( 0x400, REGION_USER3, 0 ) + ROMX_LOAD( "036175.01", 0, 0x100, CRC(2af82e87) SHA1(3816835a9ccf99a76d246adf204989d9261bb065), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "036176.01", 0, 0x100, CRC(b31f6e24) SHA1(ce5f8ca34d06a5cfa0076b47400e61e0130ffe74), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) + ROMX_LOAD( "036177.01", 1, 0x100, CRC(8119b847) SHA1(c4fbaedd4ce1ad6a4128cbe902b297743edb606a), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "036178.01", 1, 0x100, CRC(09f5a4d5) SHA1(d6f2ac07ca9ee385c08831098b0dcaf56808993b), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) + ROMX_LOAD( "036179.01", 2, 0x100, CRC(823b61ae) SHA1(d99a839874b45f64e14dae92a036e47a53705d16), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "036180.01", 2, 0x100, CRC(276eadd5) SHA1(55718cd8ec4bcf75076d5ef0ee1ed2551e19d9ba), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) +ROM_END + + +ROM_START( redbaron ) + ROM_REGION( 0x8000, REGION_CPU1, 0 ) + ROM_LOAD( "037587.01", 0x4800, 0x0800, CRC(60f23983) SHA1(7a9e5380bf49bf50a2d8ab0e0bd1ba3ac8efde24) ) + ROM_CONTINUE( 0x5800, 0x0800 ) + ROM_LOAD( "037000.01e", 0x5000, 0x0800, CRC(69bed808) SHA1(27d99efc74113cdcbbf021734b8a5a5fdb78c04c) ) + ROM_LOAD( "036998.01e", 0x6000, 0x0800, CRC(d1104dd7) SHA1(0eab47cb45ede9dcc4dd7498dcf3a8d8194460b4) ) + ROM_LOAD( "036997.01e", 0x6800, 0x0800, CRC(7434acb4) SHA1(c950c4c12ab556b5051ad356ab4a0ed6b779ba1f) ) + ROM_LOAD( "036996.01e", 0x7000, 0x0800, CRC(c0e7589e) SHA1(c1aedc95966afffd860d7e0009d5a43e8b292036) ) + ROM_LOAD( "036995.01e", 0x7800, 0x0800, CRC(ad81d1da) SHA1(8bd66e5f34fc1c75f31eb6b168607e52aa3aa4df) ) + /* Vector Generator ROMs */ + ROM_LOAD( "037006.01e", 0x3000, 0x0800, CRC(9fcffea0) SHA1(69b76655ee75742fcaa0f39a4a1cf3aa58088343) ) + ROM_LOAD( "037007.01e", 0x3800, 0x0800, CRC(60250ede) SHA1(9c48952bd69863bee0c6dce09f3613149e0151ef) ) + /* AVG PROM */ + ROM_REGION( 0x100, REGION_USER1, 0 ) + ROM_LOAD( "036408-01.k7", 0x0000, 0x0100, BAD_DUMP CRC(5903af03) SHA1(24bc0366f394ad0ec486919212e38be0f08d0239) ) + /* Mathbox PROMs */ + ROM_REGION( 0x20, REGION_USER2, 0 ) + ROM_LOAD( "036174.01", 0x0000, 0x0020, CRC(8b04f921) SHA1(317b3397482f13b2d1bc21f296d3b3f9a118787b) ) + ROM_REGION32_BE( 0x400, REGION_USER3, 0 ) + ROMX_LOAD( "036175.01", 0, 0x100, CRC(2af82e87) SHA1(3816835a9ccf99a76d246adf204989d9261bb065), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "036176.01", 0, 0x100, CRC(b31f6e24) SHA1(ce5f8ca34d06a5cfa0076b47400e61e0130ffe74), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) + ROMX_LOAD( "036177.01", 1, 0x100, CRC(8119b847) SHA1(c4fbaedd4ce1ad6a4128cbe902b297743edb606a), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "036178.01", 1, 0x100, CRC(09f5a4d5) SHA1(d6f2ac07ca9ee385c08831098b0dcaf56808993b), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) + ROMX_LOAD( "036179.01", 2, 0x100, CRC(823b61ae) SHA1(d99a839874b45f64e14dae92a036e47a53705d16), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(3)) + ROMX_LOAD( "036180.01", 2, 0x100, CRC(276eadd5) SHA1(55718cd8ec4bcf75076d5ef0ee1ed2551e19d9ba), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(3)) +ROM_END + + + +/************************************* + * + * Driver initialization + * + *************************************/ + +static READ8_HANDLER( analog_data_r ) +{ + return analog_data; +} + + +static WRITE8_HANDLER( analog_select_w ) +{ + if (offset <= 2) + analog_data = readinputport(6 + offset); +} + + +static DRIVER_INIT( bradley ) +{ + memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0x400, 0x7ff, 0, 0, MRA8_RAM); + memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0x400, 0x7ff, 0, 0, MWA8_RAM); + + memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0x1808, 0x1808, 0, 0, input_port_4_r); + memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0x1809, 0x1809, 0, 0, input_port_5_r); + memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0x180a, 0x180a, 0, 0, analog_data_r); + memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0x1848, 0x1850, 0, 0, analog_select_w); +} + + + +/************************************* + * + * Game drivers + * + *************************************/ + +GAMEL(1980, bzone, 0, bzone, bzone, 0, ROT0, "Atari", "Battle Zone (set 1)", GAME_SUPPORTS_SAVE, layout_bzone ) +GAMEL(1980, bzone2, bzone, bzone, bzone, 0, ROT0, "Atari", "Battle Zone (set 2)", GAME_SUPPORTS_SAVE, layout_bzone ) +GAMEL(1980, bzonec, bzone, bzone, bzone, 0, ROT0, "Atari", "Battle Zone (cocktail)", GAME_SUPPORTS_SAVE|GAME_NO_COCKTAIL, layout_bzone ) +GAME( 1980, bradley, 0, bradley, bradley, bradley, ROT0, "Atari", "Bradley Trainer", GAME_SUPPORTS_SAVE ) +GAMEL(1980, redbaron, 0, redbaron, redbaron, 0, ROT0, "Atari", "Red Baron", GAME_SUPPORTS_SAVE, layout_ho88ffff ) |