diff options
Diffstat (limited to 'src/mame/drivers/rallyx.c')
-rw-r--r-- | src/mame/drivers/rallyx.c | 1235 |
1 files changed, 1235 insertions, 0 deletions
diff --git a/src/mame/drivers/rallyx.c b/src/mame/drivers/rallyx.c new file mode 100644 index 00000000000..91c1e980413 --- /dev/null +++ b/src/mame/drivers/rallyx.c @@ -0,0 +1,1235 @@ +/*************************************************************************** + +Rally X (c) 1980 Namco +New Rally X (c) 1981 Namco + +and also + +Jungler (c) 1981 Konami +Tactician (c) 1981 Konami +Loco-Motion (c) 1982 Konami +Commando (c) 1983 Sega + +driver by Nicola Salmoria + +There doesn't seem to be much doubt that Konami copied the video hardware of +Rally X. +The boards are surely very different; Rally X has video and sound split on the +two boards, while the Konami version has all video in one board and all sound +in the other. +Rally X uses a single Z80 and Namco sound hardware, while the others use the +standard Konami sound hardware of that era (slave Z80 + 2xAY-3-8910). +Also, the Konami design includes an optional starfield generator, only used +by Tactician. + + +Rally X Memory map: +------------------ +Note: the memory map for the RAM 6x chips derived from the schematics doesn't +seem to be entirely correct. Here it's modified to match program behaviour. +The names might be assigned incorrectly. + +Address Dir Data Name Description +---------------- --- -------- --------- ----------------------- +0-000xxxxxxxxxxx R xxxxxxxx ROM 1B program ROM \[1] +0-001xxxxxxxxxxx R xxxxxxxx ROM 1C program ROM / +0-010xxxxxxxxxxx R xxxxxxxx ROM 1D program ROM \[1] +0-011xxxxxxxxxxx R xxxxxxxx ROM 1E program ROM / +0-100xxxxxxxxxxx R xxxxxxxx ROM 1H program ROM \[1] +0-101xxxxxxxxxxx R xxxxxxxx ROM 1J program ROM / +0-110xxxxxxxxxxx R xxxxxxxx ROM 1K program ROM \[1] +0-111xxxxxxxxxxx R xxxxxxxx ROM 1L program ROM / +1-0000xxxxxxxxxx R/W xxxxxxxx RAM 6A/6C radar tilemap RAM + sprites +1-0001xxxxxxxxxx R/W xxxxxxxx RAM 6B/6D playfield tilemap RAM +1-0010xxxxxxxxxx R/W xxxxxxxx RAM 6J/6K radar tilemap RAM + sprites +1-0011xxxxxxxxxx R/W xxxxxxxx RAM 6H/6L playfield tilemap RAM +1-0110xxxxxxxxxx R/W xxxxxxxx RAM 6F/6M work RAM +1-0111xxxxxxxxxx R/W xxxxxxxx RAM 6E/6N work RAM +1-1----00---xxxx W ----xxxx SODWR bullets shape and X pos msb [2] +1-1----01------- W -------- watchdog reset +1-1----10000xxxx W ----xxxx RAM 2N \ sound control registers +1-1----10001xxxx W ----xxxx RAM 2P / +1-1----10010---- W n.c. +1-1----10011---- W xxxxxxxx POSIX playfield X scroll +1-1----10100---- W xxxxxxxx POSIY playfield Y scroll +1-1----10101---- W n.c. +1-1----10110 W WR2 ? +1-1----10111 W WR3 ? this is written to A LOT of times every frame +1-1----11----000 W -------x BANG explosion sound trigger +1-1----11----001 W -------x INT ON interrupt enable +1-1----11----010 W -------x SOUND ON sound enable [3] +1-1----11----011 W -------x FLIP flip screen +1-1----11----100 W -------x 1 player start lamp +1-1----11----101 W -------x 2 players start lamp +1-1----11----110 W -------x coin lockout +1-1----11----111 W -------x coin counter +1-1----00------- R xxxxxxxx switch inputs +1-1----01------- R xxxxxxxx switch inputs +1-1----10------- R xxxxxxxx dip switches +1-1----11 R RDSTB ? + +[1] either 2x2716 or 1x2732 +[2] SO = Small Objects? Only locations 4-F are used. +[3] doesn't seem to work in New Rally X. + +I/O ports: +OUT on port $0 sets the interrupt vector/instruction (the game uses both +IM 2 and IM 0) + + +Loco-Motion Memory map: +---------------------- +Main CPU: + +Address Dir Data Name Description +---------------- --- -------- --------- ----------------------- +0000xxxxxxxxxxxx R xxxxxxxx ROM 3D program ROM +0001xxxxxxxxxxxx R xxxxxxxx ROM 3E program ROM +0010xxxxxxxxxxxx R xxxxxxxx ROM 3F program ROM +0011xxxxxxxxxxxx R xxxxxxxx ROM 3G program ROM +0100xxxxxxxxxxxx R xxxxxxxx ROM 3J program ROM +0101xxxxxxxxxxxx R xxxxxxxx ROM 3K program ROM +0110xxxxxxxxxxxx R xxxxxxxx ROM 3L program ROM +0111xxxxxxxxxxxx R xxxxxxxx ROM 3M program ROM +1-000xxxxxxxxxxx R/W xxxxxxxx RAM 3C tilemap RAM (tile code) [1] +1-001xxxxxxxxxxx R/W xxxxxxxx RAM 3B tilemap RAM (tile attr) [1] +1-011xxxxxxxxxxx R/W xxxxxxxx RAM 3A work RAM +1-1----00------- R xxxxxxxx IN1 switch inputs +1-1----01------- R xxxxxxxx IN2 switch inputs +1-1----10------- R xxxxxxxx IN3 switch inputs / dip switches +1-1----11------- R xxxxxxxx IN4 dip switches +1-1----00---xxxx W ----xxxx SCARW bullets shape and X pos msb +1-1----01------- W -------- watchdog reset +1-1----10------- W xxxxxxxx SOUNDDATA command for sound CPU +1-1----11----000 W -------x SOUNDON trigger irq on sound CPU +1-1----11----001 W -------x INTST irq enable/acknowledge +1-1----11----010 W -------x MUT sound disable +1-1----11----011 W -------x FLIP flip screen +1-1----11----100 W -------x OUT1 coin counter #1 +1-1----11----101 W -------x OUT2 ? +1-1----11----110 W -------x OUT3 coin counter #2 +1-1----11----111 W -------x STARSON stars enable (optional) + +[1] 1st half is "radar" + sprite registers, 2nd half is scrolling playfield + + +Sound CPU (standard Konami sound board): + +Address Dir Data Name Description +---------------- --- -------- --------- ----------------------- +0000xxxxxxxxxxxx R xxxxxxxx ROM 1B program ROM +0001xxxxxxxxxxxx R xxxxxxxx ROM 1C program ROM +0010--xxxxxxxxxx R/W xxxxxxxx RAM 2B/2C work RAM +0011xxxxxx------ W -------- CKB RC filters enable for 8910 #1 (data is in A6-A11) +0011------xxxxxx W -------- CKB RC filters enable for 8910 #2 (data is in A0-A5) +0100------------ R/W xxxxxxxx SEN1 AY-3-8910 #1 r/w [1] +0101------------ W xxxxxxxx SEN2 AY-3-8910 #1 ctrl +0110------------ R/W xxxxxxxx SEN3 AY-3-8910 #2 r/w +0111------------ W xxxxxxxx SEN4 AY-3-8910 #2 ctrl + +[1] port A: command from main CPU; port B: timer + + +Notes: +- Easter egg (both Rally X and New Rally X): + - enter service mode + - keep B1 pressed and enter the following sequence: + 2xU 7xD 1xR 6xL + (c) NAMCO LTD. 1980 will be added at the bottom of the screen. + +- The Test Mode "dip switch" actually comes from the edge connector, but is mapped + in memory in place of dip switch #8. Dip switch #8 is supposed to freeze the + game and is entirely handled by hardware. + +- PROM 7a controls the video shape. This is used to hide the rightmost 4 char + columns in Locomotion and Commando, while showing them in Jungler and + Tactician. + +- The playfield scroll registers used in Rally X are present, but not useful + (always 0) in Jungler and Tactician. They were removed in Locomotn and Commando. + +- commsega has more sprites and more "bullets" than the other games. + +- it seems that Jungler doesn't support high priority tiles. Maybe they + disabled that feature because they needed more color combinations. + +- there are also 1-pixel sprite and bullet placement differences from game to game. + +- cottong is a bootleg of a very different version of locomotn, possibly a + prototype. + +- commsega: + Due to a bug at 0x1259, bit 3 of DSW1 also affects the "Bonus Life" value: + - when bit 3 is OFF, you get an extra life at 30000 points + - when bit 3 is ON , you get an extra life at 50000 points + At 0x0050 there is code to give infinite lives for player 1 when bit 3 of DSW0 + is ON. I can't tell however when it is supposed to be called. + +TODO: +- commsega: the first time you kill a soldier, the music stops. When you die, + the music restarts and won't stop a second time. + +- rallyx: Three things in the schematics that I haven't been able to trace: + WR2, WR3 and RDSTB. Only WR3 is actually used by the game. + +- rallyx: emulate the explosion with discrete sound components. The schematics + are available so it should be possible eventually. + +- tactician: the bouncing bomb seems to show incorrect graphics when it's hit. + +***************************************************************************/ + +#include "driver.h" +#include "audio/timeplt.h" +#include "sound/namco.h" +#include "sound/samples.h" + + +extern UINT8 *rallyx_videoram,*rallyx_radarattr; +WRITE8_HANDLER( rallyx_videoram_w ); +WRITE8_HANDLER( rallyx_scrollx_w ); +WRITE8_HANDLER( rallyx_scrolly_w ); +WRITE8_HANDLER( tactcian_starson_w ); +PALETTE_INIT( rallyx ); +VIDEO_START( rallyx ); +VIDEO_UPDATE( rallyx ); +DRIVER_INIT( rallyx ); +DRIVER_INIT( jungler ); +DRIVER_INIT( tactcian ); +DRIVER_INIT( locomotn ); +DRIVER_INIT( commsega ); + + +static WRITE8_HANDLER( rallyx_interrupt_vector_w ) +{ + cpunum_set_input_line_vector(0, 0, data); + cpunum_set_input_line(0, 0, CLEAR_LINE); +} + + + +static WRITE8_HANDLER( rallyx_bang_w ) +{ + static int last; + + if (data == 0 && last != 0) + sample_start(0,0,0); + + last = data; +} + + +static WRITE8_HANDLER( rallyx_latch_w ) +{ + int bit = data & 1; + + switch (offset) + { + case 0x00: /* BANG */ + rallyx_bang_w(0,bit); + break; + + case 0x01: /* INT ON */ + cpu_interrupt_enable(0,bit); + if (!bit) + cpunum_set_input_line(0, 0, CLEAR_LINE); + break; + + case 0x02: /* SOUND ON */ + /* this doesn't work in New Rally X so I'm not supporting it */ +// pacman_sound_enable_w(0,bit); + break; + + case 0x03: /* FLIP */ + flip_screen_set(bit); + break; + + case 0x04: + set_led_status(0,bit); + break; + + case 0x05: + set_led_status(1,bit); + break; + + case 0x06: + coin_lockout_w(0,!bit); + break; + + case 0x07: + coin_counter_w(0,bit); + break; + } +} + + +static WRITE8_HANDLER( locomotn_latch_w ) +{ + int bit = data & 1; + + switch (offset) + { + case 0x00: /* SOUNDON */ + timeplt_sh_irqtrigger_w(0,bit); + break; + + case 0x01: /* INTST */ + cpu_interrupt_enable(0,bit); + break; + + case 0x02: /* MUT */ +// sound disable + break; + + case 0x03: /* FLIP */ + flip_screen_set(bit); + break; + + case 0x04: /* OUT1 */ + coin_counter_w(0,bit); + break; + + case 0x05: /* OUT2 */ + break; + + case 0x06: /* OUT3 */ + coin_counter_w(1,bit); + break; + + case 0x07: /* STARSON */ + tactcian_starson_w(offset,bit); + break; + } +} + + + +static ADDRESS_MAP_START( rallyx_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x3fff) AM_ROM + AM_RANGE(0x8000, 0x8fff) AM_READWRITE(MRA8_RAM, rallyx_videoram_w) AM_BASE(&rallyx_videoram) + AM_RANGE(0x9800, 0x9fff) AM_RAM + AM_RANGE(0xa000, 0xa000) AM_READ(input_port_0_r) + AM_RANGE(0xa080, 0xa080) AM_READ(input_port_1_r) + AM_RANGE(0xa100, 0xa100) AM_READ(input_port_2_r) + AM_RANGE(0xa000, 0xa00f) AM_WRITE(MWA8_RAM) AM_BASE(&rallyx_radarattr) + AM_RANGE(0xa080, 0xa080) AM_WRITE(watchdog_reset_w) + AM_RANGE(0xa100, 0xa11f) AM_WRITE(pacman_sound_w) AM_BASE(&namco_soundregs) + AM_RANGE(0xa130, 0xa130) AM_WRITE(rallyx_scrollx_w) + AM_RANGE(0xa140, 0xa140) AM_WRITE(rallyx_scrolly_w) + AM_RANGE(0xa170, 0xa170) AM_WRITE(MWA8_NOP) /* ? */ + AM_RANGE(0xa180, 0xa187) AM_WRITE(rallyx_latch_w) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( writeport, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE(0, 0) AM_WRITE(rallyx_interrupt_vector_w) +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( locomotn_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x7fff) AM_ROM + AM_RANGE(0x8000, 0x8fff) AM_READWRITE(MRA8_RAM, rallyx_videoram_w) AM_BASE(&rallyx_videoram) + AM_RANGE(0x9800, 0x9fff) AM_RAM + AM_RANGE(0xa000, 0xa000) AM_READ(input_port_0_r) + AM_RANGE(0xa080, 0xa080) AM_READ(input_port_1_r) + AM_RANGE(0xa100, 0xa100) AM_READ(input_port_2_r) + AM_RANGE(0xa180, 0xa180) AM_READ(input_port_3_r) + AM_RANGE(0xa000, 0xa00f) AM_MIRROR(0x00f0) AM_WRITE(MWA8_RAM) AM_BASE(&rallyx_radarattr) // jungler writes to a03x + AM_RANGE(0xa080, 0xa080) AM_WRITE(watchdog_reset_w) + AM_RANGE(0xa100, 0xa100) AM_WRITE(soundlatch_w) + AM_RANGE(0xa130, 0xa130) AM_WRITE(rallyx_scrollx_w) /* only jungler and tactcian */ + AM_RANGE(0xa140, 0xa140) AM_WRITE(rallyx_scrolly_w) /* only jungler and tactcian */ + AM_RANGE(0xa180, 0xa187) AM_WRITE(locomotn_latch_w) +ADDRESS_MAP_END + + + +static INPUT_PORTS_START( rallyx ) + PORT_START_TAG("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) + + PORT_START_TAG("IN1") + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) + + PORT_START_TAG("DSW0") + PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x40, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0xc0, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x80, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x38, 0x08, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x10, "1 Car, Medium" ) + PORT_DIPSETTING( 0x28, "1 Car, Hard" ) + PORT_DIPSETTING( 0x00, "2 Cars, Easy" ) + PORT_DIPSETTING( 0x18, "2 Cars, Medium" ) + PORT_DIPSETTING( 0x30, "2 Cars, Hard" ) + PORT_DIPSETTING( 0x08, "3 Cars, Easy" ) + PORT_DIPSETTING( 0x20, "3 Cars, Medium" ) + PORT_DIPSETTING( 0x38, "3 Cars, Hard" ) + PORT_DIPNAME( 0x06, 0x02, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING( 0x02, "10000" ) PORT_CONDITION("DSW0",0x38,PORTCOND_EQUALS,0x10) + PORT_DIPSETTING( 0x02, "10000" ) PORT_CONDITION("DSW0",0x38,PORTCOND_EQUALS,0x28) + PORT_DIPSETTING( 0x02, "15000" ) PORT_CONDITION("DSW0",0x38,PORTCOND_EQUALS,0x00) + PORT_DIPSETTING( 0x02, "15000" ) PORT_CONDITION("DSW0",0x38,PORTCOND_EQUALS,0x18) + PORT_DIPSETTING( 0x02, "15000" ) PORT_CONDITION("DSW0",0x38,PORTCOND_EQUALS,0x30) + PORT_DIPSETTING( 0x02, "20000" ) PORT_CONDITION("DSW0",0x38,PORTCOND_EQUALS,0x08) + PORT_DIPSETTING( 0x02, "20000" ) PORT_CONDITION("DSW0",0x38,PORTCOND_EQUALS,0x20) + PORT_DIPSETTING( 0x02, "20000" ) PORT_CONDITION("DSW0",0x38,PORTCOND_EQUALS,0x38) + PORT_DIPSETTING( 0x04, "20000" ) PORT_CONDITION("DSW0",0x38,PORTCOND_EQUALS,0x10) + PORT_DIPSETTING( 0x04, "20000" ) PORT_CONDITION("DSW0",0x38,PORTCOND_EQUALS,0x28) + PORT_DIPSETTING( 0x04, "30000" ) PORT_CONDITION("DSW0",0x38,PORTCOND_EQUALS,0x00) + PORT_DIPSETTING( 0x04, "30000" ) PORT_CONDITION("DSW0",0x38,PORTCOND_EQUALS,0x18) + PORT_DIPSETTING( 0x04, "30000" ) PORT_CONDITION("DSW0",0x38,PORTCOND_EQUALS,0x30) + PORT_DIPSETTING( 0x04, "40000" ) PORT_CONDITION("DSW0",0x38,PORTCOND_EQUALS,0x08) + PORT_DIPSETTING( 0x04, "40000" ) PORT_CONDITION("DSW0",0x38,PORTCOND_EQUALS,0x20) + PORT_DIPSETTING( 0x04, "40000" ) PORT_CONDITION("DSW0",0x38,PORTCOND_EQUALS,0x38) + PORT_DIPSETTING( 0x06, "30000" ) PORT_CONDITION("DSW0",0x38,PORTCOND_EQUALS,0x10) + PORT_DIPSETTING( 0x06, "30000" ) PORT_CONDITION("DSW0",0x38,PORTCOND_EQUALS,0x28) + PORT_DIPSETTING( 0x06, "40000" ) PORT_CONDITION("DSW0",0x38,PORTCOND_EQUALS,0x00) + PORT_DIPSETTING( 0x06, "40000" ) PORT_CONDITION("DSW0",0x38,PORTCOND_EQUALS,0x18) + PORT_DIPSETTING( 0x06, "40000" ) PORT_CONDITION("DSW0",0x38,PORTCOND_EQUALS,0x30) + PORT_DIPSETTING( 0x06, "60000" ) PORT_CONDITION("DSW0",0x38,PORTCOND_EQUALS,0x08) + PORT_DIPSETTING( 0x06, "60000" ) PORT_CONDITION("DSW0",0x38,PORTCOND_EQUALS,0x20) + PORT_DIPSETTING( 0x06, "60000" ) PORT_CONDITION("DSW0",0x38,PORTCOND_EQUALS,0x38) + PORT_DIPSETTING( 0x00, DEF_STR( None ) ) + PORT_SERVICE( 0x01, IP_ACTIVE_LOW ) +INPUT_PORTS_END + +static INPUT_PORTS_START( nrallyx ) + PORT_START_TAG("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) + + PORT_START_TAG("IN1") + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) + + PORT_START_TAG("DSW") + PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x40, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0xc0, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x80, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x38, 0x00, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x10, "1 Car, Medium" ) + PORT_DIPSETTING( 0x28, "1 Car, Hard" ) + PORT_DIPSETTING( 0x18, "2 Cars, Medium" ) + PORT_DIPSETTING( 0x30, "2 Cars, Hard" ) + PORT_DIPSETTING( 0x00, "3 Cars, Easy" ) + PORT_DIPSETTING( 0x20, "3 Cars, Medium" ) + PORT_DIPSETTING( 0x38, "3 Cars, Hard" ) + PORT_DIPSETTING( 0x08, "4 Cars, Easy" ) + /* TODO: the bonus score depends on the number of lives */ + PORT_DIPNAME( 0x06, 0x02, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING( 0x02, "A" ) + PORT_DIPSETTING( 0x04, "B" ) + PORT_DIPSETTING( 0x06, "C" ) + PORT_DIPSETTING( 0x00, DEF_STR( None ) ) + PORT_SERVICE( 0x01, IP_ACTIVE_LOW ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( jungler ) + PORT_START_TAG("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) + + PORT_START_TAG("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START_TAG("DSW0") /* Sound board */ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY + PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START_TAG("DSW1") /* CPU board */ + PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x01, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 4C_3C ) ) + PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) ) + PORT_DIPNAME( 0x38, 0x38, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x08, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x18, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 4C_3C ) ) + PORT_DIPSETTING( 0x38, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x30, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x28, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 1C_4C ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Cocktail ) ) + PORT_DIPNAME( 0x80, 0x80, "Test (255 lives)" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( locomotn ) + PORT_START_TAG("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) + + PORT_START_TAG("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START_TAG("DSW0") /* Sound board */ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x30, "3" ) + PORT_DIPSETTING( 0x20, "4" ) + PORT_DIPSETTING( 0x10, "5" ) + PORT_DIPSETTING( 0x00, "255" ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Cocktail ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, "Intermissions" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) + PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START_TAG("DSW1") /* CPU board */ + PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0a, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 3C_2C ) ) + PORT_DIPSETTING( 0x08, DEF_STR( 4C_3C ) ) + PORT_DIPSETTING( 0x0f, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0c, DEF_STR( 3C_4C ) ) + PORT_DIPSETTING( 0x0e, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x07, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x06, DEF_STR( 2C_5C ) ) + PORT_DIPSETTING( 0x0b, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x03, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0d, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x05, DEF_STR( 1C_6C ) ) + PORT_DIPSETTING( 0x09, DEF_STR( 1C_7C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x40, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0xa0, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 3C_2C ) ) + PORT_DIPSETTING( 0x80, DEF_STR( 4C_3C ) ) + PORT_DIPSETTING( 0xf0, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0xc0, DEF_STR( 3C_4C ) ) + PORT_DIPSETTING( 0xe0, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x70, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x60, DEF_STR( 2C_5C ) ) + PORT_DIPSETTING( 0xb0, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x30, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0xd0, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x50, DEF_STR( 1C_6C ) ) + PORT_DIPSETTING( 0x90, DEF_STR( 1C_7C ) ) + PORT_DIPSETTING( 0x00, "Disabled" ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( tactcian ) + PORT_START_TAG("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) + + PORT_START_TAG("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START_TAG("DSW0") /* Sound board */ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x00, "3" ) + PORT_DIPSETTING( 0x10, "4" ) + PORT_DIPSETTING( 0x20, "5" ) + PORT_DIPSETTING( 0x30, "255" ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Cocktail ) ) + PORT_DIPNAME( 0x06, 0x00, DEF_STR( Coinage ) ) // Mode 1 + PORT_DIPSETTING( 0x06, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ) ) + /* + PORT_DIPNAME( 0x06, 0x00, DEF_STR( Coinage ) ) // Mode 2 + PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x04, "A 2C/1C B 1C/3C" ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x06, "A 1C/1C B 1C/6C" ) + */ + PORT_DIPNAME( 0x01, 0x00, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING( 0x00, "10k, 80k then every 100k" ) + PORT_DIPSETTING( 0x01, "20k, 80k then every 100k" ) + + PORT_START_TAG("DSW1") /* CPU board */ + PORT_DIPNAME( 0x01, 0x00, "Coin Mode" ) + PORT_DIPSETTING( 0x00, "Mode 1" ) + PORT_DIPSETTING( 0x01, "Mode 2" ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x08, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( commsega ) + PORT_START_TAG("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) + + PORT_START_TAG("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START_TAG("DSW0") /* (sound board) */ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) // "Infinite Lives" - See notes + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x06, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x01, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x03, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) ) + + PORT_START_TAG("DSW1") /* (CPU board) */ + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x03, "3" ) + PORT_DIPSETTING( 0x02, "4" ) + PORT_DIPSETTING( 0x01, "5" ) + PORT_DIPSETTING( 0x00, "6" ) + PORT_DIPNAME( 0x1c, 0x1c, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 4C_1C ) ) // Bonus Life : 50000 points + PORT_DIPSETTING( 0x14, DEF_STR( 3C_1C ) ) // Bonus Life : 50000 points + PORT_DIPSETTING( 0x18, DEF_STR( 2C_1C ) ) // Bonus Life : 30000 points + PORT_DIPSETTING( 0x1c, DEF_STR( 1C_1C ) ) // Bonus Life : 30000 points + PORT_DIPSETTING( 0x04, DEF_STR( 2C_3C ) ) // Bonus Life : 50000 points + PORT_DIPSETTING( 0x0c, DEF_STR( 1C_2C ) ) // Bonus Life : 30000 points + PORT_DIPSETTING( 0x08, DEF_STR( 1C_3C ) ) // Bonus Life : 30000 points + PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) ) // Bonus Life : 50000 points + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Difficulty ) ) // Check code at 0x1fc5 + PORT_DIPSETTING( 0x40, DEF_STR( Easy ) ) // 16 flying enemies to kill + PORT_DIPSETTING( 0x00, DEF_STR( Hard ) ) // 24 flying enemies to kill + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Cocktail ) ) +INPUT_PORTS_END + + + +static const gfx_layout rallyx_charlayout = +{ + 8,8, + RGN_FRAC(1,1), + 2, + { 0, 4 }, + { 8*8+0, 8*8+1, 8*8+2, 8*8+3, 0, 1, 2, 3 }, + { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, + 16*8 +}; + +static const gfx_layout jungler_charlayout = +{ + 8,8, + RGN_FRAC(1,1), + 2, + { 4, 0 }, + { 8*8+0, 8*8+1, 8*8+2, 8*8+3, 0, 1, 2, 3 }, + { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, + 16*8 +}; + +static const gfx_layout rallyx_spritelayout = +{ + 16,16, + RGN_FRAC(1,1), + 2, + { 0, 4 }, + { 8*8+0, 8*8+1, 8*8+2, 8*8+3, 16*8+0, 16*8+1, 16*8+2, 16*8+3, + 24*8+0, 24*8+1, 24*8+2, 24*8+3, 0, 1, 2, 3 }, + { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, + 32*8, 33*8, 34*8, 35*8, 36*8, 37*8, 38*8, 39*8 }, + 64*8 +}; + +static const gfx_layout jungler_spritelayout = +{ + 16,16, + RGN_FRAC(1,1), + 2, + { 4, 0 }, + { 8*8, 8*8+1, 8*8+2, 8*8+3, 0, 1, 2, 3, + 24*8+0, 24*8+1, 24*8+2, 24*8+3, 16*8+0, 16*8+1, 16*8+2, 16*8+3 }, + { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, + 32*8, 33*8, 34*8, 35*8, 36*8, 37*8, 38*8, 39*8 }, + 64*8 +}; + +static const gfx_layout dotlayout = +{ + 4,4, + 8, + 2, + { 6, 7 }, + { 0*8, 1*8, 2*8, 3*8 }, + { 0*32, 1*32, 2*32, 3*32 }, + 16*8 +}; + +static GFXDECODE_START( rallyx ) + GFXDECODE_ENTRY( REGION_GFX1, 0, rallyx_charlayout, 0, 64 ) + GFXDECODE_ENTRY( REGION_GFX1, 0, rallyx_spritelayout, 0, 64 ) + GFXDECODE_ENTRY( REGION_GFX2, 0, dotlayout, 64*4, 1 ) +GFXDECODE_END + +static GFXDECODE_START( jungler ) + GFXDECODE_ENTRY( REGION_GFX1, 0, jungler_charlayout, 0, 64 ) + GFXDECODE_ENTRY( REGION_GFX1, 0, jungler_spritelayout, 0, 64 ) + GFXDECODE_ENTRY( REGION_GFX2, 0, dotlayout, 64*4, 1 ) +GFXDECODE_END + + +static struct namco_interface namco_interface = +{ + 3, /* number of voices */ + REGION_SOUND1 /* memory region */ +}; + +static const char *rallyx_sample_names[] = +{ + "*rallyx", + "bang.wav", + 0 /* end of array */ +}; + +static struct Samplesinterface samples_interface = +{ + 1, /* 1 channel */ + rallyx_sample_names +}; + + + +static MACHINE_DRIVER_START( rallyx ) + + /* basic machine hardware */ + MDRV_CPU_ADD(Z80, 18432000/6) /* 3.072 MHz */ + MDRV_CPU_PROGRAM_MAP(rallyx_map,0) + MDRV_CPU_IO_MAP(0,writeport) + MDRV_CPU_VBLANK_INT(irq0_line_assert,1) + + MDRV_SCREEN_REFRESH_RATE(60.606060) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_HAS_SHADOWS) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(36*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 2*8, 30*8-1) + MDRV_GFXDECODE(rallyx) + MDRV_PALETTE_LENGTH(32) + MDRV_COLORTABLE_LENGTH(64*4+4) + + MDRV_PALETTE_INIT(rallyx) + MDRV_VIDEO_START(rallyx) + MDRV_VIDEO_UPDATE(rallyx) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(NAMCO, 18432000/6/32) + MDRV_SOUND_CONFIG(namco_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + + MDRV_SOUND_ADD(SAMPLES, 0) + MDRV_SOUND_CONFIG(samples_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) +MACHINE_DRIVER_END + + +static MACHINE_DRIVER_START( tactcian ) + + /* basic machine hardware */ + MDRV_CPU_ADD(Z80, 18432000/6) /* 3.072 MHz */ + MDRV_CPU_PROGRAM_MAP(locomotn_map,0) + MDRV_CPU_VBLANK_INT(nmi_line_pulse,1) + + MDRV_CPU_ADD(Z80, 14318180/8) /* 1.789772727 MHz */ + /* audio CPU */ + MDRV_CPU_PROGRAM_MAP(locomotn_sound_readmem,locomotn_sound_writemem) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION /* frames per second, vblank duration */) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_HAS_SHADOWS) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(36*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 2*8, 30*8-1) + MDRV_GFXDECODE(jungler) + MDRV_PALETTE_LENGTH(32+64) + MDRV_COLORTABLE_LENGTH(64*4+4) + + MDRV_PALETTE_INIT(rallyx) + MDRV_VIDEO_START(rallyx) + MDRV_VIDEO_UPDATE(rallyx) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(AY8910, 14318180/8) + MDRV_SOUND_CONFIG(timeplt_ay8910_interface) + MDRV_SOUND_ROUTE(0, "filter.0.0", 0.60) + MDRV_SOUND_ROUTE(1, "filter.0.1", 0.60) + MDRV_SOUND_ROUTE(2, "filter.0.2", 0.60) + + MDRV_SOUND_ADD(AY8910, 14318180/8) + MDRV_SOUND_ROUTE(0, "filter.1.0", 0.60) + MDRV_SOUND_ROUTE(1, "filter.1.1", 0.60) + MDRV_SOUND_ROUTE(2, "filter.1.2", 0.60) + + MDRV_SOUND_ADD_TAG("filter.0.0", FILTER_RC, 0) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + MDRV_SOUND_ADD_TAG("filter.0.1", FILTER_RC, 0) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + MDRV_SOUND_ADD_TAG("filter.0.2", FILTER_RC, 0) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + + MDRV_SOUND_ADD_TAG("filter.1.0", FILTER_RC, 0) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + MDRV_SOUND_ADD_TAG("filter.1.1", FILTER_RC, 0) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + MDRV_SOUND_ADD_TAG("filter.1.2", FILTER_RC, 0) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) +MACHINE_DRIVER_END + + +static MACHINE_DRIVER_START( locomotn ) + + /* basic machine hardware */ + MDRV_IMPORT_FROM(tactcian) + + /* video hardware */ + MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) +MACHINE_DRIVER_END + + + +/*************************************************************************** + + Game driver(s) + +***************************************************************************/ + +ROM_START( rallyx ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + ROM_LOAD( "1b", 0x0000, 0x1000, CRC(5882700d) SHA1(b6029e9730f1694894fe8b729ac0ba8d6712dea9) ) + ROM_LOAD( "rallyxn.1e", 0x1000, 0x1000, CRC(ed1eba2b) SHA1(82d3a4b34b0ff5cfdb8ca7c18ad5c63d943b8484) ) + ROM_LOAD( "rallyxn.1h", 0x2000, 0x1000, CRC(4f98dd1c) SHA1(8a20fadcea76802d1c412ba62086abb846ad54a8) ) + ROM_LOAD( "rallyxn.1k", 0x3000, 0x1000, CRC(9aacccf0) SHA1(9b22079972c0f9970d62d62751db4783a87796d5) ) + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "8e", 0x0000, 0x1000, CRC(277c1de5) SHA1(30bc57263e8dad870c501c76bce6f42d69ab9e00) ) + + ROM_REGION( 0x0100, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "im5623.8m", 0x0000, 0x0100, CRC(3c16f62c) SHA1(7a3800be410e306cf85753b9953ffc5575afbcd6) ) /* dots */ + + ROM_REGION( 0x0160, REGION_PROMS, 0 ) + ROM_LOAD( "m3-7603.11n", 0x0000, 0x0020, CRC(c7865434) SHA1(70c1c9610ba6f1ead77f347e7132958958bccb31) ) /* palette */ + ROM_LOAD( "im5623.8p", 0x0020, 0x0100, CRC(834d4fda) SHA1(617864d3df0917a513e8255ad8d96ae7a04da5a1) ) /* lookup table */ + ROM_LOAD( "r-2.4n", 0x0120, 0x0020, CRC(8f574815) SHA1(4f84162db9d58b64742c67dc689eb665b9862fb3) ) /* video layout (not used) */ + ROM_LOAD( "r-3.7k", 0x0140, 0x0020, CRC(b8861096) SHA1(26fad384ed7a1a1e0ba719b5578e2dbb09334a25) ) /* video timing (not used) */ + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) /* sound proms */ + ROM_LOAD( "im5623.3p", 0x0000, 0x0100, CRC(4bad7017) SHA1(3e6da9d798f5e07fa18d6ce7d0b148be98c766d5) ) + ROM_LOAD( "im5623.2m", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ +ROM_END + +ROM_START( rallyxm ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + ROM_LOAD( "1b", 0x0000, 0x1000, CRC(5882700d) SHA1(b6029e9730f1694894fe8b729ac0ba8d6712dea9) ) + ROM_LOAD( "1e", 0x1000, 0x1000, CRC(786585ec) SHA1(8aa75f10d695f4b3483c4bf7030b733318fd3bf3) ) + ROM_LOAD( "1h", 0x2000, 0x1000, CRC(110d7dcd) SHA1(23e0855c2c9300f2068711d160fcdfaedd07832f) ) + ROM_LOAD( "1k", 0x3000, 0x1000, CRC(473ab447) SHA1(f0a37ccc48c97c53672f754ca2ac37dc0dc91a9f) ) + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "8e", 0x0000, 0x1000, CRC(277c1de5) SHA1(30bc57263e8dad870c501c76bce6f42d69ab9e00) ) + + ROM_REGION( 0x0100, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "im5623.8m", 0x0000, 0x0100, CRC(3c16f62c) SHA1(7a3800be410e306cf85753b9953ffc5575afbcd6) ) /* dots */ + + ROM_REGION( 0x0160, REGION_PROMS, 0 ) + ROM_LOAD( "m3-7603.11n", 0x0000, 0x0020, CRC(c7865434) SHA1(70c1c9610ba6f1ead77f347e7132958958bccb31) ) /* palette */ + ROM_LOAD( "im5623.8p", 0x0020, 0x0100, CRC(834d4fda) SHA1(617864d3df0917a513e8255ad8d96ae7a04da5a1) ) /* lookup table */ + ROM_LOAD( "r-2.4n", 0x0120, 0x0020, CRC(8f574815) SHA1(4f84162db9d58b64742c67dc689eb665b9862fb3) ) /* video layout (not used) */ + ROM_LOAD( "r-3.7k", 0x0140, 0x0020, CRC(b8861096) SHA1(26fad384ed7a1a1e0ba719b5578e2dbb09334a25) ) /* video timing (not used) */ + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) /* sound proms */ + ROM_LOAD( "im5623.3p", 0x0000, 0x0100, CRC(4bad7017) SHA1(3e6da9d798f5e07fa18d6ce7d0b148be98c766d5) ) + ROM_LOAD( "im5623.2m", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ +ROM_END + +ROM_START( nrallyx ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + ROM_LOAD( "nrallyx.1b", 0x0000, 0x1000, CRC(9404c8d6) SHA1(ee7e45c22a2fbf72d3ac5ac26ab1111a22623fc5) ) + ROM_LOAD( "nrallyx.1e", 0x1000, 0x1000, CRC(ac01bf3f) SHA1(8e1a7cce92ef709d18727db6ee7f89936f4b8df8) ) + ROM_LOAD( "nrallyx.1h", 0x2000, 0x1000, CRC(aeba29b5) SHA1(2a6e4568729b83c430bf70e43c4146ad6a556b1b) ) + ROM_LOAD( "nrallyx.1k", 0x3000, 0x1000, CRC(78f17da7) SHA1(1e035746a10f91e898166a58093d45bdb158ae47) ) + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "nrallyx.8e", 0x0000, 0x1000, CRC(ca7a174a) SHA1(dc553df18c45ba399661122be75b71d6cb54d6a2) ) + + ROM_REGION( 0x0100, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "im5623.8m", 0x0000, 0x0100, CRC(3c16f62c) SHA1(7a3800be410e306cf85753b9953ffc5575afbcd6) ) /* dots */ + + ROM_REGION( 0x0160, REGION_PROMS, 0 ) + ROM_LOAD( "nrallyx.pr1", 0x0000, 0x0020, CRC(a0a49017) SHA1(494c920a157e9f876d533c1b0146275a366c4989) ) /* palette */ + ROM_LOAD( "nrallyx.pr2", 0x0020, 0x0100, CRC(b2b7ca15) SHA1(e604d58f2f20ebf042f28b01e74eddeacf5baba9) ) /* lookup table */ + ROM_LOAD( "r-2.4n", 0x0120, 0x0020, CRC(8f574815) SHA1(4f84162db9d58b64742c67dc689eb665b9862fb3) ) /* video layout (not used) */ + ROM_LOAD( "r-3.7k", 0x0140, 0x0020, CRC(b8861096) SHA1(26fad384ed7a1a1e0ba719b5578e2dbb09334a25) ) /* video timing (not used) */ + + ROM_REGION( 0x0200, REGION_SOUND1, 0 ) /* sound proms */ + ROM_LOAD( "nrallyx.spr", 0x0000, 0x0100, CRC(b75c4e87) SHA1(450f79a5ae09e34f7624d37769815baf93c0028e) ) + ROM_LOAD( "im5623.2m", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */ +ROM_END + + +ROM_START( jungler ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + ROM_LOAD( "jungr1", 0x0000, 0x1000, CRC(5bd6ad15) SHA1(608de86e19c6726bb7d21e7dc0e936f00121a3f4) ) + ROM_LOAD( "jungr2", 0x1000, 0x1000, CRC(dc99f1e3) SHA1(942405f6c7d816139e36289126fe883a6a9a0a08) ) + ROM_LOAD( "jungr3", 0x2000, 0x1000, CRC(3dcc03da) SHA1(2c328a46511c4c9eec6515b9316a586de6503152) ) + ROM_LOAD( "jungr4", 0x3000, 0x1000, CRC(f92e9940) SHA1(d72a4d0a0ab7c9a1dcbb7925eb8530052640a234) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) + ROM_LOAD( "1b", 0x0000, 0x1000, CRC(f86999c3) SHA1(4660bd7826219b1bad7d9178918823196d4fd8d6) ) + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "5k", 0x0000, 0x0800, CRC(924262bf) SHA1(593f59630b3bd369aef0819992106b4e6e6a241f) ) + ROM_LOAD( "5m", 0x0800, 0x0800, CRC(131a08ac) SHA1(167a0710a2a153f7f7c6839d2340e5aa725ef039) ) + + ROM_REGION( 0x0100, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "82s129.10g", 0x0000, 0x0100, CRC(c59c51b7) SHA1(e8ac60fed9ba16c61a4c3c09e27f8c3f4e254014) ) /* dots */ + + ROM_REGION( 0x0160, REGION_PROMS, 0 ) + ROM_LOAD( "18s030.8b", 0x0000, 0x0020, CRC(55a7e6d1) SHA1(f9e4ff3b165235db2fd8dab94c43bc686c3ad29b) ) /* palette */ + ROM_LOAD( "tbp24s10.9d", 0x0020, 0x0100, CRC(d223f7b8) SHA1(87b62f09d4eda09c16d99d1554017d18e52b5886) ) /* loookup table */ + ROM_LOAD( "18s030.7a", 0x0120, 0x0020, CRC(8f574815) SHA1(4f84162db9d58b64742c67dc689eb665b9862fb3) ) /* video layout (not used) */ + ROM_LOAD( "6331-1.10a", 0x0140, 0x0020, CRC(b8861096) SHA1(26fad384ed7a1a1e0ba719b5578e2dbb09334a25) ) /* video timing (not used) */ +ROM_END + +ROM_START( junglers ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + ROM_LOAD( "5c", 0x0000, 0x1000, CRC(edd71b28) SHA1(6bdd85bc1c24ca57573252fd636e05759164de8a) ) + ROM_LOAD( "5a", 0x1000, 0x1000, CRC(61ea4d46) SHA1(575ffe9fc7d5777c8f2d2b449623c353f42a4249) ) + ROM_LOAD( "4d", 0x2000, 0x1000, CRC(557c7925) SHA1(84d8eb2fdb7ee9098805be9f457a37f51e4bc3b8) ) + ROM_LOAD( "4c", 0x3000, 0x1000, CRC(51aac9a5) SHA1(2c8a24b4ce8cec96c6e09332f3f63bd7d25ae4c6) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) + ROM_LOAD( "1b", 0x0000, 0x1000, CRC(f86999c3) SHA1(4660bd7826219b1bad7d9178918823196d4fd8d6) ) + + ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "5k", 0x0000, 0x0800, CRC(924262bf) SHA1(593f59630b3bd369aef0819992106b4e6e6a241f) ) + ROM_LOAD( "5m", 0x0800, 0x0800, CRC(131a08ac) SHA1(167a0710a2a153f7f7c6839d2340e5aa725ef039) ) + + ROM_REGION( 0x0100, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "82s129.10g", 0x0000, 0x0100, CRC(c59c51b7) SHA1(e8ac60fed9ba16c61a4c3c09e27f8c3f4e254014) ) /* dots */ + + ROM_REGION( 0x0160, REGION_PROMS, 0 ) + ROM_LOAD( "18s030.8b", 0x0000, 0x0020, CRC(55a7e6d1) SHA1(f9e4ff3b165235db2fd8dab94c43bc686c3ad29b) ) /* palette */ + ROM_LOAD( "tbp24s10.9d", 0x0020, 0x0100, CRC(d223f7b8) SHA1(87b62f09d4eda09c16d99d1554017d18e52b5886) ) /* loookup table */ + ROM_LOAD( "18s030.7a", 0x0120, 0x0020, CRC(8f574815) SHA1(4f84162db9d58b64742c67dc689eb665b9862fb3) ) /* video layout (not used) */ + ROM_LOAD( "6331-1.10a", 0x0140, 0x0020, CRC(b8861096) SHA1(26fad384ed7a1a1e0ba719b5578e2dbb09334a25) ) /* video timing (not used) */ +ROM_END + +ROM_START( tactcian ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + ROM_LOAD( "tacticia.001", 0x0000, 0x1000, CRC(99163e39) SHA1(0a863f358a0bb065a9e2c41fcf4c20d370001dfe) ) + ROM_LOAD( "tacticia.002", 0x1000, 0x1000, CRC(6d3e8a69) SHA1(2b4b3f2b7401064540f59070ef6742d1f44ca839) ) + ROM_LOAD( "tacticia.003", 0x2000, 0x1000, CRC(0f71d0fa) SHA1(cb55243853b8b33034af7a6438f9a7c85a774d71) ) + ROM_LOAD( "tacticia.004", 0x3000, 0x1000, CRC(5e15f3b3) SHA1(01979f64b281a958f0a4effe2be21bf0e0a812bf) ) + ROM_LOAD( "tacticia.005", 0x4000, 0x1000, CRC(76456106) SHA1(580428f3c8cf442ee5c0f56db973644229aa8093) ) + ROM_LOAD( "tacticia.006", 0x5000, 0x1000, CRC(b33ca9ea) SHA1(0299c1cb9a3c6368bbbacb60c6f5c6854035a7bf) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) + ROM_LOAD( "tacticia.s2", 0x0000, 0x1000, CRC(97d145a7) SHA1(7aee9004287590a25e153d45b95dfaac89fbe996) ) + ROM_LOAD( "tacticia.s1", 0x1000, 0x1000, CRC(067f781b) SHA1(640bc7813c239e497644e53a080d81366fcd04df) ) + + ROM_REGION( 0x2000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "tacticia.c1", 0x0000, 0x1000, CRC(5d3ee965) SHA1(654c033291f3d139fb94f7aacbc2d1917856deb6) ) + ROM_LOAD( "tacticia.c2", 0x1000, 0x1000, CRC(e8c59c4f) SHA1(e4881f2e2e08bb8af37cc679c4e2367528ac4804) ) + + ROM_REGION( 0x0100, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "tact6301.004", 0x0000, 0x0100, CRC(88b0b511) SHA1(785eded1ba761cdb59db579eb8a786516ff58152) ) /* dots */ // tac.a7 + + ROM_REGION( 0x0160, REGION_PROMS, 0 ) + ROM_LOAD( "tact6331.002", 0x0000, 0x0020, CRC(b7ef83b7) SHA1(5ffab25c2dc5be0856a43a93711d39c4aec6660b) ) /* palette */ + ROM_LOAD( "tact6301.003", 0x0020, 0x0100, CRC(a92796f2) SHA1(0faab2dc0f868f4023a34ecfcf972d1c86a224a0) ) /* loookup table */ // tac.b4 + ROM_LOAD( "tact6331.001", 0x0120, 0x0020, CRC(8f574815) SHA1(4f84162db9d58b64742c67dc689eb665b9862fb3) ) /* video layout (not used) */ +// ROM_LOAD( "10a.bpr", 0x0140, 0x0020, CRC(b8861096) SHA1(26fad384ed7a1a1e0ba719b5578e2dbb09334a25) ) /* video timing (not used) */ +ROM_END + +ROM_START( tactcan2 ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + ROM_LOAD( "tan1", 0x0000, 0x1000, CRC(ddf38b75) SHA1(bad66fd6ae0ab3b91989fca14a8696ed855dc852) ) + ROM_LOAD( "tan2", 0x1000, 0x1000, CRC(f065ee2e) SHA1(f2362c471981af3348465f3c8a5ffb38058432a5) ) + ROM_LOAD( "tan3", 0x2000, 0x1000, CRC(2dba64fe) SHA1(8d312a6db99d2248fef2bbc590ceba333b0fde8b) ) + ROM_LOAD( "tan4", 0x3000, 0x1000, CRC(2ba07847) SHA1(3cd7cd0621ed930cb5955fc2ffe3239f6e176321) ) + ROM_LOAD( "tan5", 0x4000, 0x1000, CRC(1dae4c61) SHA1(70283b8412b0725f1c2acc281625c582a4fae39d) ) + ROM_LOAD( "tan6", 0x5000, 0x1000, CRC(2b36a18d) SHA1(bea8f36ec98975438ab267509bd9d1d1eb605945) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) + /* sound ROMs were missing - using the ones from the other set */ + ROM_LOAD( "tacticia.s2", 0x0000, 0x1000, CRC(97d145a7) SHA1(7aee9004287590a25e153d45b95dfaac89fbe996) ) + ROM_LOAD( "tacticia.s1", 0x1000, 0x1000, CRC(067f781b) SHA1(640bc7813c239e497644e53a080d81366fcd04df) ) + + ROM_REGION( 0x2000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "c1", 0x0000, 0x1000, CRC(5399471f) SHA1(66aea0df982ccbd6caaa24c258b2ba364bc1ecfd) ) + ROM_LOAD( "c2", 0x1000, 0x1000, CRC(8e8861e8) SHA1(38728418b09df06356c1e45a26cf438b93517ce5) ) + + ROM_REGION( 0x0100, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "tact6301.004", 0x0000, 0x0100, CRC(88b0b511) SHA1(785eded1ba761cdb59db579eb8a786516ff58152) ) /* dots */ // tac.a7 + + ROM_REGION( 0x0160, REGION_PROMS, 0 ) + ROM_LOAD( "tact6331.002", 0x0000, 0x0020, CRC(b7ef83b7) SHA1(5ffab25c2dc5be0856a43a93711d39c4aec6660b) ) /* palette */ + ROM_LOAD( "tact6301.003", 0x0020, 0x0100, CRC(a92796f2) SHA1(0faab2dc0f868f4023a34ecfcf972d1c86a224a0) ) /* loookup table */ // tac.b4 + ROM_LOAD( "tact6331.001", 0x0120, 0x0020, CRC(8f574815) SHA1(4f84162db9d58b64742c67dc689eb665b9862fb3) ) /* video layout (not used) */ +// ROM_LOAD( "10a.bpr", 0x0140, 0x0020, CRC(b8861096) SHA1(26fad384ed7a1a1e0ba719b5578e2dbb09334a25) ) /* video timing (not used) */ +ROM_END + +ROM_START( locomotn ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + ROM_LOAD( "1a.cpu", 0x0000, 0x1000, CRC(b43e689a) SHA1(7f1a0fa1ea9ff95a9d51b23ea00792ba22024282) ) + ROM_LOAD( "2a.cpu", 0x1000, 0x1000, CRC(529c823d) SHA1(714ae0af254646eb6ebc5f47422246832e89ccfb) ) + ROM_LOAD( "3.cpu", 0x2000, 0x1000, CRC(c9dbfbd1) SHA1(10ec7403053ef52d0ce4aa6eab3e82a3ea5e57ff) ) + ROM_LOAD( "4.cpu", 0x3000, 0x1000, CRC(caf6431c) SHA1(f013d8846fad9f64367b69febeb7512029a639c0) ) + ROM_LOAD( "5.cpu", 0x4000, 0x1000, CRC(64cf8dd6) SHA1(8fa1b5c4a7f136cb74833425a565fa558eeee083) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) + ROM_LOAD( "1b_s1.bin", 0x0000, 0x1000, CRC(a1105714) SHA1(6e2e264748ab90bc5e8e8167f17ff91677ef6ae7) ) + + ROM_REGION( 0x2000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "5l_c1.bin", 0x0000, 0x1000, CRC(5732eda9) SHA1(451de30946a9c8198c5ec83cc5c50e3ac2f9f56b) ) + ROM_LOAD( "c2.cpu", 0x1000, 0x1000, CRC(c3035300) SHA1(ddb1d658a28b973b60e2ce72fd7662537e147860) ) + + ROM_REGION( 0x0100, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "10g.bpr", 0x0000, 0x0100, CRC(2ef89356) SHA1(5ed33386bab5d583358709c92f21ad9ad1a1bce9) ) /* dots */ + + ROM_REGION( 0x0160, REGION_PROMS, 0 ) + ROM_LOAD( "8b.bpr", 0x0000, 0x0020, CRC(75b05da0) SHA1(aee98f5389e42332f30a6882ee22ff23f37e0573) ) /* palette */ + ROM_LOAD( "9d.bpr", 0x0020, 0x0100, CRC(aa6cf063) SHA1(08c1c9ab03eb168954b0170d40e95eed81022acd) ) /* loookup table */ + ROM_LOAD( "7a.bpr", 0x0120, 0x0020, CRC(48c8f094) SHA1(61592209720fddc8991751edf08b6950388af42e) ) /* video layout (not used) */ + ROM_LOAD( "10a.bpr", 0x0140, 0x0020, CRC(b8861096) SHA1(26fad384ed7a1a1e0ba719b5578e2dbb09334a25) ) /* video timing (not used) */ +ROM_END + +ROM_START( gutangtn ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + ROM_LOAD( "3d_1.bin", 0x0000, 0x1000, CRC(e9757395) SHA1(78e2f8988ed39d2ecfe1f874be370f603d5eecc1) ) + ROM_LOAD( "3e_2.bin", 0x1000, 0x1000, CRC(11d21d2e) SHA1(fd17dd481bb7bb39234fa7e9946b1cb4fa18109e) ) + ROM_LOAD( "3f_3.bin", 0x2000, 0x1000, CRC(4d80f895) SHA1(7d83f4ee34226636012a84f46af01991a28b96f6) ) + ROM_LOAD( "3h_4.bin", 0x3000, 0x1000, CRC(aa258ddf) SHA1(0f01ac0d72d8bb5a55c91a6fba3e55ed1c038b86) ) + ROM_LOAD( "3j_5.bin", 0x4000, 0x1000, CRC(52aec87e) SHA1(6516724c4e570972f070f6dab5b066ea92f56be0) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) + ROM_LOAD( "1b_s1.bin", 0x0000, 0x1000, CRC(a1105714) SHA1(6e2e264748ab90bc5e8e8167f17ff91677ef6ae7) ) + + ROM_REGION( 0x2000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "5l_c1.bin", 0x0000, 0x1000, CRC(5732eda9) SHA1(451de30946a9c8198c5ec83cc5c50e3ac2f9f56b) ) + ROM_LOAD( "5m_c2.bin", 0x1000, 0x1000, CRC(51c542fd) SHA1(1437f8cba15811361b2c5b46085587ea3598fc88) ) + + ROM_REGION( 0x0100, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "10g.bpr", 0x0000, 0x0100, CRC(2ef89356) SHA1(5ed33386bab5d583358709c92f21ad9ad1a1bce9) ) /* dots */ + + ROM_REGION( 0x0160, REGION_PROMS, 0 ) + ROM_LOAD( "8b.bpr", 0x0000, 0x0020, CRC(75b05da0) SHA1(aee98f5389e42332f30a6882ee22ff23f37e0573) ) /* palette */ + ROM_LOAD( "9d.bpr", 0x0020, 0x0100, CRC(aa6cf063) SHA1(08c1c9ab03eb168954b0170d40e95eed81022acd) ) /* loookup table */ + ROM_LOAD( "7a.bpr", 0x0120, 0x0020, CRC(48c8f094) SHA1(61592209720fddc8991751edf08b6950388af42e) ) /* video layout (not used) */ + ROM_LOAD( "10a.bpr", 0x0140, 0x0020, CRC(b8861096) SHA1(26fad384ed7a1a1e0ba719b5578e2dbb09334a25) ) /* video timing (not used) */ +ROM_END + +ROM_START( cottong ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + ROM_LOAD( "c1", 0x0000, 0x1000, CRC(2c256fe6) SHA1(115594c616497eec998e4e3255ec6ab6299346fa) ) + ROM_LOAD( "c2", 0x1000, 0x1000, CRC(1de5e6a0) SHA1(8bb3408a510662ff3b9b7201d2d06fe70685bf7f) ) + ROM_LOAD( "c3", 0x2000, 0x1000, CRC(01f909fe) SHA1(c80295e9f91ce25bfd28e72823b20ee6f6524a5c) ) + ROM_LOAD( "c4", 0x3000, 0x1000, CRC(a89eb3e3) SHA1(058928ade909faba06f177750f914cf1dabaefc3) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) + ROM_LOAD( "c7", 0x0000, 0x1000, CRC(3d83f6d3) SHA1(e10ed6b6ce7280697c1bc9dbe6c6e6018e1d8be4) ) + ROM_LOAD( "c8", 0x1000, 0x1000, CRC(323e1937) SHA1(75499d6c8a9032fac090a13cd4f36bd350f52dab) ) + + ROM_REGION( 0x2000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "c5", 0x0000, 0x1000, CRC(992d079c) SHA1(b5acd30f2e8700cc4cd852b190bd1f4163b137e8) ) + ROM_LOAD( "c6", 0x1000, 0x1000, CRC(0149ef46) SHA1(58f684a9b7b9410236b3c54ea6c0fa9853a078c5) ) + + ROM_REGION( 0x0100, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "5.bpr", 0x0000, 0x0100, CRC(21fb583f) SHA1(b8c65fbdd5d8b70bf51341cd60fc2efeaab8bb82) ) /* dots */ + + ROM_REGION( 0x0160, REGION_PROMS, 0 ) + ROM_LOAD( "2.bpr", 0x0000, 0x0020, CRC(26f42e6f) SHA1(f51578216a5d588c4d0143ce7a23d695a15a3914) ) /* palette */ + ROM_LOAD( "3.bpr", 0x0020, 0x0100, CRC(4aecc0c8) SHA1(3c1086a598d84b4bcb277556b716fd18c76c4364) ) /* loookup table */ + ROM_LOAD( "7a.bpr", 0x0120, 0x0020, CRC(48c8f094) SHA1(61592209720fddc8991751edf08b6950388af42e) ) /* video layout (not used) */ + ROM_LOAD( "10a.bpr", 0x0140, 0x0020, CRC(b8861096) SHA1(26fad384ed7a1a1e0ba719b5578e2dbb09334a25) ) /* video timing (not used) */ +ROM_END + +ROM_START( commsega ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + ROM_LOAD( "csega1", 0x0000, 0x1000, CRC(92de3405) SHA1(81ef4274b13f92d6274a0a037d7dc77ba0f67a1b) ) + ROM_LOAD( "csega2", 0x1000, 0x1000, CRC(f14e2f9a) SHA1(c1a7ec1c306e07bac0bbf19b60f756650f63ae29) ) + ROM_LOAD( "csega3", 0x2000, 0x1000, CRC(941dbf48) SHA1(01d2d64fb662af423aa04507ba97997772130c54) ) + ROM_LOAD( "csega4", 0x3000, 0x1000, CRC(e0ac69b4) SHA1(3a52b2a6204b7310cfe321c582352b437de16660) ) + ROM_LOAD( "csega5", 0x4000, 0x1000, CRC(bc56ebd0) SHA1(a178cd5ba381b107e720e18f3549247477037998) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) + ROM_LOAD( "csega8", 0x0000, 0x1000, CRC(588b4210) SHA1(43bac1bdac721567e4b5d56e9e4488165872bd6a) ) + + ROM_REGION( 0x2000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "csega7", 0x0000, 0x1000, CRC(e8e374f9) SHA1(442cc6b7e7d5b9472a5c16d6f78db0c03e651e98) ) + ROM_LOAD( "csega6", 0x1000, 0x1000, CRC(cf07fd5e) SHA1(4fe351c3d093f8f5fcf95e3e921a06e44d14d2a7) ) + + ROM_REGION( 0x0100, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "gg3.bpr", 0x0000, 0x0100, CRC(ae7fd962) SHA1(118359cffb2ad3fdf09456a484aa730cb1b85a5d) ) /* dots */ + + ROM_REGION( 0x0160, REGION_PROMS, 0 ) + ROM_LOAD( "gg1.bpr", 0x0000, 0x0020, CRC(f69e585a) SHA1(248740b154732b6bc6f772d4bb19d654798c3739) ) /* palette */ + ROM_LOAD( "gg2.bpr", 0x0020, 0x0100, CRC(0b756e30) SHA1(8890e305547df8df108af0f89074fb1c8bed8e6c) ) /* loookup table */ + ROM_LOAD( "gg0.bpr", 0x0120, 0x0020, CRC(48c8f094) SHA1(61592209720fddc8991751edf08b6950388af42e) ) /* video layout (not used) */ + ROM_LOAD( "tt3.bpr", 0x0140, 0x0020, CRC(b8861096) SHA1(26fad384ed7a1a1e0ba719b5578e2dbb09334a25) ) /* video timing (not used) */ +ROM_END + + + +GAME( 1980, rallyx, 0, rallyx, rallyx, rallyx, ROT0, "Namco", "Rally X", 0 ) +GAME( 1980, rallyxm, rallyx, rallyx, rallyx, rallyx, ROT0, "[Namco] (Midway license)", "Rally X (Midway)", 0 ) +GAME( 1981, nrallyx, 0, rallyx, nrallyx, rallyx, ROT0, "Namco", "New Rally X", 0 ) + +GAME( 1981, jungler, 0, tactcian, jungler, jungler, ROT90, "Konami", "Jungler", 0 ) +GAME( 1981, junglers, jungler, tactcian, jungler, jungler, ROT90, "[Konami] (Stern license)", "Jungler (Stern)", 0 ) +GAME( 1982, tactcian, 0, tactcian, tactcian, tactcian, ROT90, "[Konami] (Sega license)", "Tactician (set 1)", 0 ) +GAME( 1981, tactcan2, tactcian, tactcian, tactcian, tactcian, ROT90, "[Konami] (Sega license)", "Tactician (set 2)", 0 ) +GAME( 1982, locomotn, 0, locomotn, locomotn, locomotn, ROT90, "Konami (Centuri license)", "Loco-Motion", 0 ) +GAME( 1982, gutangtn, locomotn, locomotn, locomotn, locomotn, ROT90, "Konami (Sega license)", "Guttang Gottong", 0 ) +GAME( 1982, cottong, locomotn, locomotn, locomotn, locomotn, ROT90, "bootleg", "Cotocoto Cottong", 0 ) +GAME( 1983, commsega, 0, locomotn, commsega, commsega, ROT90, "Sega", "Commando (Sega)", GAME_IMPERFECT_SOUND ) |