summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/exprraid.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/exprraid.cpp')
-rw-r--r--src/mame/drivers/exprraid.cpp876
1 files changed, 0 insertions, 876 deletions
diff --git a/src/mame/drivers/exprraid.cpp b/src/mame/drivers/exprraid.cpp
deleted file mode 100644
index 86bef728304..00000000000
--- a/src/mame/drivers/exprraid.cpp
+++ /dev/null
@@ -1,876 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Ernesto Corvi
-/***************************************************************************
-
-Express Raider - (c) 1986 Data East Corporation / Data East USA
-
-Ernesto Corvi
-ernesto@imagina.com
-
-Memory Map:
-Main CPU: ( DECO CPU-16 )
-0000-05ff RAM
-0600-07ff Sprites
-0800-0bff Videoram
-0c00-0fff Colorram
-1800-1800 DSW 0
-1801-1801 Controls
-1802-1802 Coins
-1803-1803 DSW 1
-2100-2100 Sound latch write
-2800-2801 Protection
-3800-3800 VBlank ( bootleg 2 only )
-4000-ffff ROM
-ffc0-ffc0 VBlank ( bootleg 3 only )
-
-Sound Cpu: ( 6809 )
-0000-1fff RAM
-2000-2001 YM2203
-4000-4001 YM3526
-6000-6000 Sound latch read
-8000-ffff ROM
-
-NOTES:
-The main 6502 cpu is a custom one. The differences with a regular 6502 is as follows:
-- Extra opcode ( $4b00 ), which i think reads an external port. VBlank irq is on bit 1 ( 0x02 ).
-- Reset, IRQ and NMI vectors are moved.
-
-Also, there was some protection circuitry which is now emulated.
-
-(Note (15/jun/09): CPU is actually a DECO CPU-16, used mostly by the liberate.c games -AS)
-
-The bootleg version patched the rom to get rid of the extra opcode ( bootlegs
-used a regular 6502 ), the vectors hardcoded in place, and also had the
-protection cracked.
-
-The background tiles had a very ugly encoding. It was so ugly that our
-decode gfx routine will not be able to decode it without some little help.
-So thats why exprraid_gfx_expand() is there. Many thanks to Phil
-Stroffolino, who figured out the encoding.
-
-NOTES ON THE BOOTLEGS:
-
-1st bootleg set expects to read vblank status from 0x3800, country warning
-sign has been defaced by the bootleggers
-
-2nd bootleg set expects to read vblank status from 0xFFC0, country warning
-sign is intact, however Credit is spelt incorrectly.
-
-
-Stephh's notes (based on the games M6502 code and some tests) :
-
-1) 'exprrada'
-
- - "@ 1986 DATA EAST CORPORATION" + no code to display the Warning screen (World)
- - Same way to code number of enemies in "shoot" stages as in 'exprraidu'
- (code at 5ce4) and same ingame bug :
-
- 5CF4: AD 03 18 lda $1803
- 5CF7: 49 FF eor #$FF
- 5CF9: 4A lsr a
- 5CFA: 4A lsr a
- 5CFB: 4A lsr a
- 5CFC: 29 06 and #$06
-
- Correct code shall be :
-
- 5CFC: 29 03 and #$03
-
- You'll notice by looking at the tables that there are sometimes
- more enemies than in 'exprraidu'.
- - Time for each wagon on "shoot" stage is determined by the level
- (see code at 0x6834 where location 0x0e is level number-1).
- This time is also supposed to be determined by "Difficulty"
- settings (DSW1 bits 3 and 4).
- There is however an ingame bug that reads DSW1 bits 4 and 5 :
-
- 683B: AD 03 18 lda $1803
- 683E: 49 FF eor #$FF
- 6840: 4A lsr a
- 6841: 4A lsr a
- 6842: 4A lsr a
- 6843: 4A lsr a
- 6844: 29 03 and #$03
-
- So Time is also determined by "Demo Sound" setting because of
- extra "lsr a" instruction at 0x6843 !
- Correct code shall be :
-
- 6843: EA nop
-
- Fortunately, table at 0x685f is filled with 0x30 so you'll
- always have 30 seconds to "clear" the wagon (which is more
- than the time you have in 'exprraid').
- For the locomotive, time is always set to 0x20 = 20 seconds
- (which is again more than the time you have in 'exprraid').
- - "Bonus lives" routine starts at 0xe49b.
- - Coinage related stuff starts at 0xe78e.
- Coinage tables :
- * 0xe7dc : COIN1 - 0xe7e4 : COIN2 (Mode 1)
- * 0xe7ec : COIN1 - 0xe7f4 : COIN2 (Mode 2)
- - At the beginning of each level, you have text in lower case
- which doesn't give you any hints to pass the level nor advice.
- - In this version, you always have 5 wagons for the "shoot" stages.
- - Continue play is always available but score is reset to 0.
-
-2) 'exprraidu'
-
- - "@ 1986 DATA EAST USA, INC." (US)
- - Number of enemies on "shoot" stages is determined by the level
- (see code at 0x5d21 where location 0x0e is level number-1).
- Note that time tables are coded backwards (locomotive first,
- then 5th wagon, then 4th wagon ... up to 1st wagon).
- This number of enemies is also supposed to be determined
- by "Difficulty" settings (DSW1 bits 3 and 4).
- There is however an ingame bug that reads DSW1 bits 4 and 5 :
-
- 5D2F: AD 03 18 lda $1803
- 5D32: 49 FF eor #$FF
- 5D34: 4A lsr a
- 5D35: 4A lsr a
- 5D36: 4A lsr a
- 5D37: 29 06 and #$06
-
- So number of enemies is also determined by "Demo Sound" setting !
- Correct code shall be :
-
- 5D37: 29 03 and #$03
-
- - Time for each wagon on "shoot" stage is determined by the level
- (see code at 0x6873 where location 0x0e is level number-1).
- Note that time tables are coded backwards (locomotive first,
- then 5th wagon, then 4th wagon ... up to 1st wagon).
- - In the US manual, "bonus lives" settings are told be either
- "Every 50000" or "50000/80000".
- However, when you look at code at 0xe4a1, you'll notice that
- settings shall be "50000 only" and "50000/80000".
- - "Coin Mode" as well "Mode 2 Coinage" settings (DSW0 bits 0 to 4)
- are undocumented in the US manual.
- "Coin Mode" is tested though via code at 0xe7c5.
- Coinage tables :
- * 0xe7e2 : COIN1 - 0xe7ea : COIN2 (Mode 1)
- * 0xe7f2 : COIN1 - 0xe7fa : COIN2 (Mode 2)
- - "Force Coinage" (DSW1 bit 6) setting is undocumented in the US manual.
- It is tested though via code at 0xe794.
- When this Dip Switch is set to "On", pressing COIN1 or COIN2 always
- adds 1 credit regardless of the "Coinage" and "Coin Mode" settings.
- - At the beginning of each level, you have text in upper case
- which gives you some hints to pass the level or some advice.
- - In this version, due to extra code at 0xfd80, you only have 4 wagons
- for the "shoot" stages instead of 5.
- - Continue play is always available and score is NOT reset to 0.
-
-3) 'wexpress'
-
- - "@ 1986 DATA EAST CORPORATION" + extra code to display the Warning screen (Japan)
- - This version is heavily based on 'exprrad'
- so all comments also fit for this set. The main difference is
- The other difference is that you can NOT continue a game.
- - "Bonus lives" routine starts at 0xe4e5.
- - Coinage related stuff starts at 0xe7d8.
- - Coinage tables :
- * 0xe826 : COIN1 - 0xe82e : COIN2 (Mode 1)
- * 0xe836 : COIN1 - 0xe83e : COIN2 (Mode 2)
-
-4) 'wexpressb1'
-
- - "@ 1986 DATA EAST CORPORATION" + no code to display the Warning screen (World)
- - This version is based on 'exprrad' so all comments also fit
- for this set. The main difference is that reads from 0x2800
- and 0x2801 (protection) are either discarded (jumps are noped
- or patched) or changed to read what shall be the correct value
- (reads from 0x2801 occur almost all the time).
- So IMO this set looks like a World bootleg .
-
-5) 'wexpressb2'
-
- - "@ 1986 DATA EAST CORPORATION" + extra code to display the Warning screen (Japan)
- - Modified Warning screen
- - This version is based on 'wexpress'
- so all comments also fit for this set. The main difference is
- the way protection is bypassed (in a different way than 'wexpressb1'
- as reads from 0x2801 only occur when a life is lost).
-
-6) 'wexpressb3'
-
- - "@ 1986 DATA EAST CORPORATION" + extra code to display the Warning screen (Japan)
- - Original Warning screen
- - "CREDIT" misspelled to "CRDDIT".
- - This version is based on 'wexpress'
- so all comments also fit for this set. The main difference is
- the way protection is bypassed (in a different way than 'wexpressb1'
- but also in a different way than 'wexpressb2' as reads from 0x2801
- occur when you lose a life but also on "shoot" stages).
-
-
-***************************************************************************/
-
-#include "emu.h"
-#include "includes/exprraid.h"
-
-#include "cpu/m6502/deco16.h"
-#include "cpu/m6502/m6502.h"
-#include "cpu/m6809/m6809.h"
-#include "sound/2203intf.h"
-#include "sound/3526intf.h"
-#include "screen.h"
-#include "speaker.h"
-
-
-/*****************************************************************************************/
-/* Emulate DECO 291 protection (for original express raider, code is cracked on the bootleg)*/
-/*****************************************************************************************/
-
-READ8_MEMBER(exprraid_state::exprraid_prot_data_r)
-{
- return m_prot_value;
-}
-
-READ8_MEMBER(exprraid_state::exprraid_prot_status_r)
-{
- /*
- 76543210
- .......x ?
- ......x. Device data available
- .....x.. CPU data available (cleared by device)
- */
-
- return 0x02;
-}
-
-WRITE8_MEMBER(exprraid_state::exprraid_prot_data_w)
-{
- switch (data)
- {
- case 0x20:
- // Written when CPU times out waiting for status
- break;
-
- case 0x60:
- // ?
- break;
-
- case 0x80:
- ++m_prot_value;
- break;
-
- case 0x90:
- m_prot_value = 0;
- break;
-
- default:
- logerror("Unknown protection write: %x at %s\n", data, machine().describe_context());
- }
-}
-
-WRITE8_MEMBER(exprraid_state::exprraid_int_clear_w)
-{
- m_maincpu->set_input_line(DECO16_IRQ_LINE, CLEAR_LINE);
-}
-
-READ8_MEMBER(exprraid_state::vblank_r)
-{
- return ioport("IN0")->read();
-}
-
-
-void exprraid_state::master_map(address_map &map)
-{
- map(0x0000, 0x05ff).ram().share("main_ram");
- map(0x0600, 0x07ff).ram().share("spriteram");
- map(0x0800, 0x0bff).ram().w(FUNC(exprraid_state::exprraid_videoram_w)).share("videoram");
- map(0x0c00, 0x0fff).ram().w(FUNC(exprraid_state::exprraid_colorram_w)).share("colorram");
- map(0x1800, 0x1800).portr("DSW0"); /* DSW 0 */
- map(0x1801, 0x1801).portr("IN1"); /* Controls */
- map(0x1802, 0x1802).portr("IN2"); /* Coins */
- map(0x1803, 0x1803).portr("DSW1"); /* DSW 1 */
- map(0x2000, 0x2000).w(FUNC(exprraid_state::exprraid_int_clear_w));
- map(0x2001, 0x2001).w(m_soundlatch, FUNC(generic_latch_8_device::write));
- map(0x2002, 0x2002).w(FUNC(exprraid_state::exprraid_flipscreen_w));
- map(0x2003, 0x2003).nopw(); // DMA SWAP - Allow writes to video and sprite RAM
- map(0x2800, 0x2800).r(FUNC(exprraid_state::exprraid_prot_data_r));
- map(0x2801, 0x2801).r(FUNC(exprraid_state::exprraid_prot_status_r));
- map(0x2800, 0x2803).w(FUNC(exprraid_state::exprraid_bgselect_w));
- map(0x2804, 0x2804).w(FUNC(exprraid_state::exprraid_scrolly_w));
- map(0x2805, 0x2806).w(FUNC(exprraid_state::exprraid_scrollx_w));
- map(0x2807, 0x2807).w(FUNC(exprraid_state::exprraid_prot_data_w));
- map(0x4000, 0xffff).rom();
-}
-
-void exprraid_state::master_io_map(address_map &map)
-{
- map(0x01, 0x01).portr("IN0");
-}
-
-void exprraid_state::slave_map(address_map &map)
-{
- map(0x0000, 0x1fff).ram();
- map(0x2000, 0x2001).rw("ym1", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
- map(0x4000, 0x4001).rw("ym2", FUNC(ym3526_device::read), FUNC(ym3526_device::write));
- map(0x6000, 0x6000).r(m_soundlatch, FUNC(generic_latch_8_device::read));
- map(0x8000, 0xffff).rom();
-}
-
-
-INPUT_CHANGED_MEMBER(exprraid_state::coin_inserted_deco16)
-{
- if (oldval && !newval)
- m_maincpu->set_input_line(DECO16_IRQ_LINE, ASSERT_LINE);
-}
-
-INPUT_CHANGED_MEMBER(exprraid_state::coin_inserted_nmi)
-{
- m_maincpu->set_input_line(INPUT_LINE_NMI, oldval ? ASSERT_LINE : CLEAR_LINE);
-}
-
-static INPUT_PORTS_START( exprraid )
- PORT_START("IN0") /* 0x3800 */
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
-
- PORT_START("DSW0") /* 0x1800 */
- PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2")
- PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_CONDITION("DSW0",0x10,EQUALS,0x10)
- PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_CONDITION("DSW0",0x10,EQUALS,0x10)
- PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_CONDITION("DSW0",0x10,EQUALS,0x10)
- PORT_DIPSETTING( 0x03, DEF_STR( 1C_2C ) ) PORT_CONDITION("DSW0",0x10,EQUALS,0x00)
- PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) PORT_CONDITION("DSW0",0x10,EQUALS,0x10)
- PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) ) PORT_CONDITION("DSW0",0x10,EQUALS,0x00)
- PORT_DIPSETTING( 0x01, DEF_STR( 1C_4C ) ) PORT_CONDITION("DSW0",0x10,EQUALS,0x00)
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_6C ) ) PORT_CONDITION("DSW0",0x10,EQUALS,0x00)
- PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4")
- PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) PORT_CONDITION("DSW0",0x10,EQUALS,0x00)
- PORT_DIPSETTING( 0x04, DEF_STR( 3C_1C ) ) PORT_CONDITION("DSW0",0x10,EQUALS,0x00)
- PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_CONDITION("DSW0",0x10,EQUALS,0x10)
- PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) ) PORT_CONDITION("DSW0",0x10,EQUALS,0x00)
- PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) PORT_CONDITION("DSW0",0x10,EQUALS,0x10)
- PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) PORT_CONDITION("DSW0",0x10,EQUALS,0x00)
- PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) PORT_CONDITION("DSW0",0x10,EQUALS,0x10)
- PORT_DIPSETTING( 0x04, DEF_STR( 1C_3C ) ) PORT_CONDITION("DSW0",0x10,EQUALS,0x10)
- PORT_DIPNAME( 0x10, 0x10, "Coin Mode" ) PORT_DIPLOCATION("SW1:5") /* see notes */
- PORT_DIPSETTING( 0x10, "Mode 1" )
- PORT_DIPSETTING( 0x00, "Mode 2" )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:6")
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:5")
- PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
- PORT_DIPSETTING( 0x40, DEF_STR( Cocktail ) )
- PORT_DIPUNUSED_DIPLOC( 0x80, IP_ACTIVE_LOW, "SW1:8" )
-
- PORT_START("IN1") /* 0x1801 */
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
-
- PORT_START("IN2") /* 0x1802 */
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, exprraid_state, coin_inserted_deco16, 0)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, exprraid_state, coin_inserted_deco16, 0)
-
- PORT_START("DSW1") /* 0x1803 */
- PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2")
- PORT_DIPSETTING( 0x01, "1" )
- PORT_DIPSETTING( 0x03, "3" )
- PORT_DIPSETTING( 0x02, "5" )
- PORT_DIPSETTING( 0x00, DEF_STR( Infinite ) )
- PORT_DIPNAME( 0x04, 0x04, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:3") /* see notes */
- PORT_DIPSETTING( 0x00, "50k 80k" )
- PORT_DIPSETTING( 0x04, "50k only" )
- PORT_DIPNAME( 0x18, 0x18, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:4,5") /* see notes */
- PORT_DIPSETTING( 0x18, DEF_STR( Easy ) )
- PORT_DIPSETTING( 0x10, DEF_STR( Normal ) )
- PORT_DIPSETTING( 0x08, DEF_STR( Hard ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Very_Hard ) )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:6") /* see notes */
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x20, DEF_STR( On ) )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, exprraid_state, coin_inserted_deco16, 0)
- PORT_DIPUNUSED_DIPLOC( 0x80, IP_ACTIVE_LOW, "SW1:8" )
-INPUT_PORTS_END
-
-static INPUT_PORTS_START( exprboot )
- PORT_INCLUDE( exprraid )
- PORT_MODIFY("IN2") /* 0x1802 */
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, exprraid_state, coin_inserted_nmi, 0)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, exprraid_state, coin_inserted_nmi, 0)
-INPUT_PORTS_END
-
-
-static const gfx_layout charlayout =
-{
- 8,8, /* 8*8 characters */
- 1024, /* 1024 characters */
- 2, /* 2 bits per pixel */
- { 0, 4 }, /* the bitplanes are packed in the same byte */
- { (0x2000*8)+0, (0x2000*8)+1, (0x2000*8)+2, (0x2000*8)+3, 0, 1, 2, 3 },
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
- 8*8 /* every char takes 8 consecutive bytes */
-};
-
-static const gfx_layout spritelayout =
-{
- 16,16, /* 16*16 sprites */
- 2048, /* 2048 sprites */
- 3, /* 3 bits per pixel */
- { 2*2048*32*8, 2048*32*8, 0 }, /* the bitplanes are separated */
- { 128+0, 128+1, 128+2, 128+3, 128+4, 128+5, 128+6, 128+7, 0, 1, 2, 3, 4, 5, 6, 7 },
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
- 32*8 /* every char takes 32 consecutive bytes */
-};
-
-static const gfx_layout tile1 =
-{
- 16,16, /* 16*16 tiles */
- 128, /* 128 tiles */
- 3, /* 3 bits per pixel */
- { 4, 0x10000*8+0, 0x10000*8+4 },
- { 0, 1, 2, 3, 1024*32*2,1024*32*2+1,1024*32*2+2,1024*32*2+3,
- 128+0,128+1,128+2,128+3,128+1024*32*2,128+1024*32*2+1,128+1024*32*2+2,128+1024*32*2+3 }, /* BOGUS */
- { 0*8,1*8,2*8,3*8,4*8,5*8,6*8,7*8,
- 64+0*8,64+1*8,64+2*8,64+3*8,64+4*8,64+5*8,64+6*8,64+7*8 },
- 32*8
-};
-
-static const gfx_layout tile2 =
-{
- 16,16, /* 16*16 tiles */
- 128, /* 128 tiles */
- 3, /* 3 bits per pixel */
- { 0, 0x11000*8+0, 0x11000*8+4 },
- { 0, 1, 2, 3, 1024*32*2,1024*32*2+1,1024*32*2+2,1024*32*2+3,
- 128+0,128+1,128+2,128+3,128+1024*32*2,128+1024*32*2+1,128+1024*32*2+2,128+1024*32*2+3 }, /* BOGUS */
- { 0*8,1*8,2*8,3*8,4*8,5*8,6*8,7*8,
- 64+0*8,64+1*8,64+2*8,64+3*8,64+4*8,64+5*8,64+6*8,64+7*8 },
- 32*8
-};
-
-
-static GFXDECODE_START( gfx_exprraid )
- GFXDECODE_ENTRY( "gfx1", 0x00000, charlayout, 128, 2 ) /* characters */
- GFXDECODE_ENTRY( "gfx2", 0x00000, spritelayout, 64, 8 ) /* sprites */
- GFXDECODE_ENTRY( "gfx3", 0x00000, tile1, 0, 4 ) /* background tiles */
- GFXDECODE_ENTRY( "gfx3", 0x00000, tile2, 0, 4 )
- GFXDECODE_ENTRY( "gfx3", 0x04000, tile1, 0, 4 )
- GFXDECODE_ENTRY( "gfx3", 0x04000, tile2, 0, 4 )
- GFXDECODE_ENTRY( "gfx3", 0x08000, tile1, 0, 4 )
- GFXDECODE_ENTRY( "gfx3", 0x08000, tile2, 0, 4 )
- GFXDECODE_ENTRY( "gfx3", 0x0c000, tile1, 0, 4 )
- GFXDECODE_ENTRY( "gfx3", 0x0c000, tile2, 0, 4 )
-GFXDECODE_END
-
-
-/* handler called by the 3812 emulator when the internal timers cause an IRQ */
-WRITE_LINE_MEMBER(exprraid_state::irqhandler)
-{
- m_slave->set_input_line_and_vector(0, state, 0xff); // M6809
-}
-
-void exprraid_state::machine_start()
-{
- save_item(NAME(m_prot_value));
- save_item(NAME(m_bg_index));
-}
-
-void exprraid_state::machine_reset()
-{
- m_bg_index[0] = 0;
- m_bg_index[1] = 0;
- m_bg_index[2] = 0;
- m_bg_index[3] = 0;
-}
-
-
-void exprraid_state::exprraid(machine_config &config)
-{
- /* basic machine hardware */
- DECO16(config, m_maincpu, XTAL(12'000'000) / 8);
- m_maincpu->set_addrmap(AS_PROGRAM, &exprraid_state::master_map);
- m_maincpu->set_addrmap(AS_IO, &exprraid_state::master_io_map);
-
- MC6809(config, m_slave, XTAL(12'000'000) / 2); // MC68B09P
- m_slave->set_addrmap(AS_PROGRAM, &exprraid_state::slave_map);
- /* IRQs are caused by the YM3526 */
-
- config.set_maximum_quantum(attotime::from_hz(12000));
-
- /* video hardware */
- screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
-// screen.set_refresh_hz(60);
-// screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
-// screen.set_size(32*8, 32*8);
-// screen.set_visarea(0*8, 32*8-1, 1*8, 31*8-1);
- screen.set_raw(XTAL(12'000'000)/2, 384, 0, 256, 262, 8, 256-8); /* not accurate */
- screen.set_screen_update(FUNC(exprraid_state::screen_update_exprraid));
- screen.set_palette(m_palette);
-
- GFXDECODE(config, m_gfxdecode, m_palette, gfx_exprraid);
- PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 256);
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
-
- GENERIC_LATCH_8(config, m_soundlatch);
- m_soundlatch->data_pending_callback().set_inputline(m_slave, INPUT_LINE_NMI);
-
- ym2203_device &ym1(YM2203(config, "ym1", XTAL(12'000'000) / 8));
- ym1.add_route(ALL_OUTPUTS, "mono", 0.30);
-
- ym3526_device &ym2(YM3526(config, "ym2", XTAL(12'000'000) / 4));
- ym2.irq_handler().set(FUNC(exprraid_state::irqhandler));
- ym2.add_route(ALL_OUTPUTS, "mono", 0.60);
-}
-
-void exprraid_state::exprboot(machine_config &config)
-{
- exprraid(config);
-
- M6502(config.replace(), m_maincpu, 1500000); /* 1.5 MHz ??? */
- m_maincpu->set_addrmap(AS_PROGRAM, &exprraid_state::master_map);
-}
-
-
-/***************************************************************************
-
- Game driver(s)
-
-***************************************************************************/
-
-ROM_START( exprraid )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "cz01-2e.16b", 0x4000, 0x4000, CRC(a0ae6756) SHA1(7f7ec1efddbb62e9d201c6013bca8ab72c3f75f6) )
- ROM_LOAD( "cz00-4e.15a", 0x8000, 0x8000, CRC(910f6ccc) SHA1(1dbf164a7add9335d90ee07b6db9a162a28e407b) )
-
- ROM_REGION( 0x10000, "slave", 0 ) /* 64k for the sub cpu */
- ROM_LOAD( "cz02-1.2a", 0x8000, 0x8000, CRC(552e6112) SHA1(f8412a63cab0aa47321d602f69bf534426c6aa5d) )
-
- ROM_REGION( 0x04000, "gfx1", 0 )
- ROM_LOAD( "cz07.5b", 0x00000, 0x4000, CRC(686bac23) SHA1(b6c96ed40e90a8ba32c2e78a65f9589d387b0254) ) /* characters */
-
- ROM_REGION( 0x30000, "gfx2", 0 )
- ROM_LOAD( "cz09.16h", 0x00000, 0x8000, CRC(1ed250d1) SHA1(c98b0440e4319308e683e857bbfeb6a150c76ff3) ) /* sprites */
- ROM_LOAD( "cz08.14h", 0x08000, 0x8000, CRC(2293fc61) SHA1(bf81db375f5424396559dcf0e04d34a52f6a020a) )
- ROM_LOAD( "cz13.16k", 0x10000, 0x8000, CRC(7c3bfd00) SHA1(87b48e09aaeacf78f3260df893b0922e25d10a5d) )
- ROM_LOAD( "cz12.14k", 0x18000, 0x8000, CRC(ea2294c8) SHA1(bc996351921e68e6237cee2d29fee882931ce0ea) )
- ROM_LOAD( "cz11.13k", 0x20000, 0x8000, CRC(b7418335) SHA1(e9d08ee651b9221c371e2629a757bceca7b6192b) )
- ROM_LOAD( "cz10.11k", 0x28000, 0x8000, CRC(2f611978) SHA1(fb60be573184d2af1dfdd543e68eeec53f2788f2) )
-
- ROM_REGION( 0x20000, "gfx3", 0 )
- ROM_LOAD( "cz04.8e", 0x00000, 0x8000, CRC(643a1bd3) SHA1(b23631d96cb413808f65f3ebe8fe6539b6140606) ) /* tiles */
- /* Save 0x08000-0x0ffff to expand the previous so we can decode the thing */
- ROM_LOAD( "cz05.8f", 0x10000, 0x8000, CRC(c44570bf) SHA1(3e9b8b6b36c7f5ae016dba3987ea19a29bd5ee5b) ) /* tiles */
- ROM_LOAD( "cz06.8h", 0x18000, 0x8000, CRC(b9bb448b) SHA1(84974b1f3a5b58cd427d874f805a6dd9244c1101) ) /* tiles */
-
- ROM_REGION( 0x8000, "gfx4", 0 ) /* background tilemaps */
- ROM_LOAD( "cz03.12d", 0x0000, 0x8000, CRC(6ce11971) SHA1(16bfa69b3ad02253e81c8110c9b840be03952790) )
-
- ROM_REGION( 0x0400, "proms", 0 ) /* All 4 proms are Fujitsu MB7114 or compatible */
- ROM_LOAD( "cy-17.5b", 0x0000, 0x0100, CRC(da31dfbc) SHA1(ac476440864f538918f7bef2e1db82fd19195f89) ) /* red */
- ROM_LOAD( "cy-16.6b", 0x0100, 0x0100, CRC(51f25b4c) SHA1(bfcca57613fbb22919e00db1f6a8c7ca50faa60b) ) /* green */
- ROM_LOAD( "cy-15.7b", 0x0200, 0x0100, CRC(a6168d7f) SHA1(0c7b31adcd764ce2631c3fb5c1a968b01f65e741) ) /* blue */
- ROM_LOAD( "cy-14.9b", 0x0300, 0x0100, CRC(52aad300) SHA1(ff09772b930afa87e28d0628ef85a589a3d149c9) ) /* ??? */
-
- ROM_REGION( 0x0400, "plds", 0 )
- ROM_LOAD( "pal16r4a.5c", 0x0000, 0x0104, CRC(d66aaa87) SHA1(dc29b473238ed6a9de2076c79644b613a9ba6924) )
- ROM_LOAD( "pal16r4a.5e", 0x0200, 0x0104, CRC(9a8766a7) SHA1(5f84ad9e633daeb14531ef527827ef3d9b269437) )
-ROM_END
-
-ROM_START( exprraidu )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "cz01-5a.16b", 0x4000, 0x4000, CRC(dc8f9fba) SHA1(cae6af54fc0081d606b6884e8873aed356a37ba9) )
- ROM_LOAD( "cz00-5.15a", 0x8000, 0x8000, CRC(a81290bc) SHA1(ddb0acda6124427bee691f9926c41fda27ed816e) )
-
- ROM_REGION( 0x10000, "slave", 0 ) /* 64k for the sub cpu */
- ROM_LOAD( "cz02-1.2a", 0x8000, 0x8000, CRC(552e6112) SHA1(f8412a63cab0aa47321d602f69bf534426c6aa5d) )
-
- ROM_REGION( 0x04000, "gfx1", 0 )
- ROM_LOAD( "cz07.5b", 0x00000, 0x4000, CRC(686bac23) SHA1(b6c96ed40e90a8ba32c2e78a65f9589d387b0254) ) /* characters */
-
- ROM_REGION( 0x30000, "gfx2", 0 )
- ROM_LOAD( "cz09.16h", 0x00000, 0x8000, CRC(1ed250d1) SHA1(c98b0440e4319308e683e857bbfeb6a150c76ff3) ) /* sprites */
- ROM_LOAD( "cz08.14h", 0x08000, 0x8000, CRC(2293fc61) SHA1(bf81db375f5424396559dcf0e04d34a52f6a020a) )
- ROM_LOAD( "cz13.16k", 0x10000, 0x8000, CRC(7c3bfd00) SHA1(87b48e09aaeacf78f3260df893b0922e25d10a5d) )
- ROM_LOAD( "cz12.14k", 0x18000, 0x8000, CRC(ea2294c8) SHA1(bc996351921e68e6237cee2d29fee882931ce0ea) )
- ROM_LOAD( "cz11.13k", 0x20000, 0x8000, CRC(b7418335) SHA1(e9d08ee651b9221c371e2629a757bceca7b6192b) )
- ROM_LOAD( "cz10.11k", 0x28000, 0x8000, CRC(2f611978) SHA1(fb60be573184d2af1dfdd543e68eeec53f2788f2) )
-
- ROM_REGION( 0x20000, "gfx3", 0 )
- ROM_LOAD( "cz04.8e", 0x00000, 0x8000, CRC(643a1bd3) SHA1(b23631d96cb413808f65f3ebe8fe6539b6140606) ) /* tiles */
- /* Save 0x08000-0x0ffff to expand the previous so we can decode the thing */
- ROM_LOAD( "cz05.8f", 0x10000, 0x8000, CRC(c44570bf) SHA1(3e9b8b6b36c7f5ae016dba3987ea19a29bd5ee5b) ) /* tiles */
- ROM_LOAD( "cz06.8h", 0x18000, 0x8000, CRC(b9bb448b) SHA1(84974b1f3a5b58cd427d874f805a6dd9244c1101) ) /* tiles */
-
- ROM_REGION( 0x8000, "gfx4", 0 ) /* background tilemaps */
- ROM_LOAD( "cz03.12d", 0x0000, 0x8000, CRC(6ce11971) SHA1(16bfa69b3ad02253e81c8110c9b840be03952790) )
-
- ROM_REGION( 0x0400, "proms", 0 ) /* All 4 proms are Fujitsu MB7114 or compatible */
- ROM_LOAD( "cy-17.5b", 0x0000, 0x0100, CRC(da31dfbc) SHA1(ac476440864f538918f7bef2e1db82fd19195f89) ) /* red */
- ROM_LOAD( "cy-16.6b", 0x0100, 0x0100, CRC(51f25b4c) SHA1(bfcca57613fbb22919e00db1f6a8c7ca50faa60b) ) /* green */
- ROM_LOAD( "cy-15.7b", 0x0200, 0x0100, CRC(a6168d7f) SHA1(0c7b31adcd764ce2631c3fb5c1a968b01f65e741) ) /* blue */
- ROM_LOAD( "cy-14.9b", 0x0300, 0x0100, CRC(52aad300) SHA1(ff09772b930afa87e28d0628ef85a589a3d149c9) ) /* ??? */
-
- ROM_REGION( 0x0400, "plds", 0 )
- ROM_LOAD( "pal16r4a.5c", 0x0000, 0x0104, CRC(d66aaa87) SHA1(dc29b473238ed6a9de2076c79644b613a9ba6924) )
- ROM_LOAD( "pal16r4a.5e", 0x0200, 0x0104, CRC(9a8766a7) SHA1(5f84ad9e633daeb14531ef527827ef3d9b269437) )
-ROM_END
-
-ROM_START( exprraidi ) /* PCB manufactured in Italy by Gecas under Data East license (custom ICs are all DECO original) */
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "cz01-2e.16b", 0x4000, 0x4000, CRC(a0ae6756) SHA1(7f7ec1efddbb62e9d201c6013bca8ab72c3f75f6) )
- ROM_LOAD( "exraidi6.15a", 0x8000, 0x8000, CRC(a3d98118) SHA1(d35f0fcabef045afcec5119f95ae6da2cae547db) )
-
- ROM_REGION( 0x10000, "slave", 0 ) /* 64k for the sub cpu */
- ROM_LOAD( "cz02-1.2a", 0x8000, 0x8000, CRC(552e6112) SHA1(f8412a63cab0aa47321d602f69bf534426c6aa5d) )
-
- ROM_REGION( 0x04000, "gfx1", 0 )
- ROM_LOAD( "cz07.5b", 0x00000, 0x4000, CRC(686bac23) SHA1(b6c96ed40e90a8ba32c2e78a65f9589d387b0254) ) /* characters */
-
- ROM_REGION( 0x30000, "gfx2", 0 )
- ROM_LOAD( "cz09.16h", 0x00000, 0x8000, CRC(1ed250d1) SHA1(c98b0440e4319308e683e857bbfeb6a150c76ff3) ) /* sprites */
- ROM_LOAD( "cz08.14h", 0x08000, 0x8000, CRC(2293fc61) SHA1(bf81db375f5424396559dcf0e04d34a52f6a020a) )
- ROM_LOAD( "cz13.16k", 0x10000, 0x8000, CRC(7c3bfd00) SHA1(87b48e09aaeacf78f3260df893b0922e25d10a5d) )
- ROM_LOAD( "cz12.14k", 0x18000, 0x8000, CRC(ea2294c8) SHA1(bc996351921e68e6237cee2d29fee882931ce0ea) )
- ROM_LOAD( "cz11.13k", 0x20000, 0x8000, CRC(b7418335) SHA1(e9d08ee651b9221c371e2629a757bceca7b6192b) )
- ROM_LOAD( "cz10.11k", 0x28000, 0x8000, CRC(2f611978) SHA1(fb60be573184d2af1dfdd543e68eeec53f2788f2) )
-
- ROM_REGION( 0x20000, "gfx3", 0 )
- ROM_LOAD( "cz04.8e", 0x00000, 0x8000, CRC(643a1bd3) SHA1(b23631d96cb413808f65f3ebe8fe6539b6140606) ) /* tiles */
- /* Save 0x08000-0x0ffff to expand the previous so we can decode the thing */
- ROM_LOAD( "cz05.8f", 0x10000, 0x8000, CRC(c44570bf) SHA1(3e9b8b6b36c7f5ae016dba3987ea19a29bd5ee5b) ) /* tiles */
- ROM_LOAD( "cz06.8h", 0x18000, 0x8000, CRC(b9bb448b) SHA1(84974b1f3a5b58cd427d874f805a6dd9244c1101) ) /* tiles */
-
- ROM_REGION( 0x8000, "gfx4", 0 ) /* background tilemaps */
- ROM_LOAD( "cz03.12d", 0x0000, 0x8000, CRC(6ce11971) SHA1(16bfa69b3ad02253e81c8110c9b840be03952790) )
-
- ROM_REGION( 0x0400, "proms", 0 ) /* All 4 proms are Fujitsu MB7114 or compatible */
- ROM_LOAD( "cy-17.5b", 0x0000, 0x0100, CRC(da31dfbc) SHA1(ac476440864f538918f7bef2e1db82fd19195f89) ) /* red */
- ROM_LOAD( "cy-16.6b", 0x0100, 0x0100, CRC(51f25b4c) SHA1(bfcca57613fbb22919e00db1f6a8c7ca50faa60b) ) /* green */
- ROM_LOAD( "cy-15.7b", 0x0200, 0x0100, CRC(a6168d7f) SHA1(0c7b31adcd764ce2631c3fb5c1a968b01f65e741) ) /* blue */
- ROM_LOAD( "cy-14.9b", 0x0300, 0x0100, CRC(52aad300) SHA1(ff09772b930afa87e28d0628ef85a589a3d149c9) ) /* ??? */
-
- ROM_REGION( 0x0400, "plds", 0 )
- ROM_LOAD( "pal16r4a.5c", 0x0000, 0x0104, CRC(d66aaa87) SHA1(dc29b473238ed6a9de2076c79644b613a9ba6924) )
- ROM_LOAD( "pal16r4a.5e", 0x0200, 0x0104, CRC(9a8766a7) SHA1(5f84ad9e633daeb14531ef527827ef3d9b269437) )
-ROM_END
-
-ROM_START( wexpress )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "cy01-2.16b", 0x4000, 0x4000, CRC(a0ae6756) SHA1(7f7ec1efddbb62e9d201c6013bca8ab72c3f75f6) )
- ROM_LOAD( "cy00-4.15a", 0x8000, 0x8000, CRC(c66d4dd3) SHA1(3c354e7379b3c3e709039ee2f3dbad7edddfc517) )
-
- ROM_REGION( 0x10000, "slave", 0 ) /* 64k for the sub cpu */
- ROM_LOAD( "cy02-1.2a", 0x8000, 0x8000, CRC(552e6112) SHA1(f8412a63cab0aa47321d602f69bf534426c6aa5d) )
-
- ROM_REGION( 0x04000, "gfx1", 0 )
- ROM_LOAD( "cz07.5b", 0x00000, 0x4000, CRC(686bac23) SHA1(b6c96ed40e90a8ba32c2e78a65f9589d387b0254) ) /* characters */
-
- ROM_REGION( 0x30000, "gfx2", 0 )
- ROM_LOAD( "cz09.16h", 0x00000, 0x8000, CRC(1ed250d1) SHA1(c98b0440e4319308e683e857bbfeb6a150c76ff3) ) /* sprites */
- ROM_LOAD( "cz08.14h", 0x08000, 0x8000, CRC(2293fc61) SHA1(bf81db375f5424396559dcf0e04d34a52f6a020a) )
- ROM_LOAD( "cz13.16k", 0x10000, 0x8000, CRC(7c3bfd00) SHA1(87b48e09aaeacf78f3260df893b0922e25d10a5d) )
- ROM_LOAD( "cz12.14k", 0x18000, 0x8000, CRC(ea2294c8) SHA1(bc996351921e68e6237cee2d29fee882931ce0ea) )
- ROM_LOAD( "cz11.13k", 0x20000, 0x8000, CRC(b7418335) SHA1(e9d08ee651b9221c371e2629a757bceca7b6192b) )
- ROM_LOAD( "cz10.11k", 0x28000, 0x8000, CRC(2f611978) SHA1(fb60be573184d2af1dfdd543e68eeec53f2788f2) )
-
- ROM_REGION( 0x20000, "gfx3", 0 )
- ROM_LOAD( "cy04.8e", 0x00000, 0x8000, CRC(f2e93ff0) SHA1(2e631966e1fa0b2699aa782b589d36801072ba03) ) /* tiles */
- /* Save 0x08000-0x0ffff to expand the previous so we can decode the thing */
- ROM_LOAD( "cy05.8f", 0x10000, 0x8000, CRC(c44570bf) SHA1(3e9b8b6b36c7f5ae016dba3987ea19a29bd5ee5b) ) /* tiles */
- ROM_LOAD( "cy06.8h", 0x18000, 0x8000, CRC(c3a56de5) SHA1(aefc516c6c69b12291c0bda03729910181a91a17) ) /* tiles */
-
- ROM_REGION( 0x8000, "gfx4", 0 ) /* background tilemaps */
- ROM_LOAD( "cy03.12d", 0x0000, 0x8000, CRC(242e3e64) SHA1(4fa8e93ef055bfdbe3bd619c53bf2448e1b832f0) )
-
- ROM_REGION( 0x0400, "proms", 0 ) /* All 4 proms are Fujitsu MB7114 or compatible */
- ROM_LOAD( "cy-17.5b", 0x0000, 0x0100, CRC(da31dfbc) SHA1(ac476440864f538918f7bef2e1db82fd19195f89) ) /* red */
- ROM_LOAD( "cy-16.6b", 0x0100, 0x0100, CRC(51f25b4c) SHA1(bfcca57613fbb22919e00db1f6a8c7ca50faa60b) ) /* green */
- ROM_LOAD( "cy-15.7b", 0x0200, 0x0100, CRC(a6168d7f) SHA1(0c7b31adcd764ce2631c3fb5c1a968b01f65e741) ) /* blue */
- ROM_LOAD( "cy-14.9b", 0x0300, 0x0100, CRC(52aad300) SHA1(ff09772b930afa87e28d0628ef85a589a3d149c9) ) /* ??? */
-
- ROM_REGION( 0x0400, "plds", 0 )
- ROM_LOAD( "pal16r4a.5c", 0x0000, 0x0104, CRC(d66aaa87) SHA1(dc29b473238ed6a9de2076c79644b613a9ba6924) )
- ROM_LOAD( "pal16r4a.5e", 0x0200, 0x0104, CRC(9a8766a7) SHA1(5f84ad9e633daeb14531ef527827ef3d9b269437) )
-ROM_END
-
-ROM_START( wexpressb1 )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "2.16b", 0x4000, 0x4000, CRC(ea5e5a8f) SHA1(fa92bcb6b97c2966cd330b309eba73f9c059f14e) )
- ROM_LOAD( "1.15a", 0x8000, 0x8000, CRC(a7daae12) SHA1(a97f4bc05a3ec096d8c717bdf096f4b0e59dc2c2) )
-
- ROM_REGION( 0x10000, "slave", 0 ) /* 64k for the sub cpu */
- ROM_LOAD( "cy02-1.2a", 0x8000, 0x8000, CRC(552e6112) SHA1(f8412a63cab0aa47321d602f69bf534426c6aa5d) )
-
- ROM_REGION( 0x04000, "gfx1", 0 )
- ROM_LOAD( "cz07.5b", 0x00000, 0x4000, CRC(686bac23) SHA1(b6c96ed40e90a8ba32c2e78a65f9589d387b0254) ) /* characters */
-
- ROM_REGION( 0x30000, "gfx2", 0 )
- ROM_LOAD( "cz09.16h", 0x00000, 0x8000, CRC(1ed250d1) SHA1(c98b0440e4319308e683e857bbfeb6a150c76ff3) ) /* sprites */
- ROM_LOAD( "cz08.14h", 0x08000, 0x8000, CRC(2293fc61) SHA1(bf81db375f5424396559dcf0e04d34a52f6a020a) )
- ROM_LOAD( "cz13.16k", 0x10000, 0x8000, CRC(7c3bfd00) SHA1(87b48e09aaeacf78f3260df893b0922e25d10a5d) )
- ROM_LOAD( "cz12.14k", 0x18000, 0x8000, CRC(ea2294c8) SHA1(bc996351921e68e6237cee2d29fee882931ce0ea) )
- ROM_LOAD( "cz11.13k", 0x20000, 0x8000, CRC(b7418335) SHA1(e9d08ee651b9221c371e2629a757bceca7b6192b) )
- ROM_LOAD( "cz10.11k", 0x28000, 0x8000, CRC(2f611978) SHA1(fb60be573184d2af1dfdd543e68eeec53f2788f2) )
-
- ROM_REGION( 0x20000, "gfx3", 0 )
- ROM_LOAD( "cy04.8e", 0x00000, 0x8000, CRC(f2e93ff0) SHA1(2e631966e1fa0b2699aa782b589d36801072ba03) ) /* tiles */
- /* Save 0x08000-0x0ffff to expand the previous so we can decode the thing */
- ROM_LOAD( "cy05.8f", 0x10000, 0x8000, CRC(c44570bf) SHA1(3e9b8b6b36c7f5ae016dba3987ea19a29bd5ee5b) ) /* tiles */
- ROM_LOAD( "cy06.8h", 0x18000, 0x8000, CRC(c3a56de5) SHA1(aefc516c6c69b12291c0bda03729910181a91a17) ) /* tiles */
-
- ROM_REGION( 0x8000, "gfx4", 0 ) /* background tilemaps */
- ROM_LOAD( "cy03.12d", 0x0000, 0x8000, CRC(242e3e64) SHA1(4fa8e93ef055bfdbe3bd619c53bf2448e1b832f0) )
-
- ROM_REGION( 0x0400, "proms", 0 ) /* All 4 proms are Fujitsu MB7114 or compatible */
- ROM_LOAD( "cy-17.5b", 0x0000, 0x0100, CRC(da31dfbc) SHA1(ac476440864f538918f7bef2e1db82fd19195f89) ) /* red */
- ROM_LOAD( "cy-16.6b", 0x0100, 0x0100, CRC(51f25b4c) SHA1(bfcca57613fbb22919e00db1f6a8c7ca50faa60b) ) /* green */
- ROM_LOAD( "cy-15.7b", 0x0200, 0x0100, CRC(a6168d7f) SHA1(0c7b31adcd764ce2631c3fb5c1a968b01f65e741) ) /* blue */
- ROM_LOAD( "cy-14.9b", 0x0300, 0x0100, CRC(52aad300) SHA1(ff09772b930afa87e28d0628ef85a589a3d149c9) ) /* ??? */
-
- ROM_REGION( 0x0400, "plds", 0 )
- ROM_LOAD( "pal16r4a.5c", 0x0000, 0x0104, CRC(d66aaa87) SHA1(dc29b473238ed6a9de2076c79644b613a9ba6924) )
- ROM_LOAD( "pal16r4a.5e", 0x0200, 0x0104, CRC(9a8766a7) SHA1(5f84ad9e633daeb14531ef527827ef3d9b269437) )
-ROM_END
-
-ROM_START( wexpressb2 )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "wexpress.3", 0x4000, 0x4000, CRC(b4dd0fa4) SHA1(8d17eb28ae92486c67859871ea2bef8f50f39dbd) )
- ROM_LOAD( "wexpress.1", 0x8000, 0x8000, CRC(e8466596) SHA1(dbbd3b84d0f017292595fc19f7412b984851221a) )
-
- ROM_REGION( 0x10000, "slave", 0 ) /* 64k for the sub cpu */
- ROM_LOAD( "cy02-1.2a", 0x8000, 0x8000, CRC(552e6112) SHA1(f8412a63cab0aa47321d602f69bf534426c6aa5d) )
-
- ROM_REGION( 0x04000, "gfx1", 0 )
- ROM_LOAD( "cz07.5b", 0x00000, 0x4000, CRC(686bac23) SHA1(b6c96ed40e90a8ba32c2e78a65f9589d387b0254) ) /* characters */
-
- ROM_REGION( 0x30000, "gfx2", 0 )
- ROM_LOAD( "cz09.16h", 0x00000, 0x8000, CRC(1ed250d1) SHA1(c98b0440e4319308e683e857bbfeb6a150c76ff3) ) /* sprites */
- ROM_LOAD( "cz08.14h", 0x08000, 0x8000, CRC(2293fc61) SHA1(bf81db375f5424396559dcf0e04d34a52f6a020a) )
- ROM_LOAD( "cz13.16k", 0x10000, 0x8000, CRC(7c3bfd00) SHA1(87b48e09aaeacf78f3260df893b0922e25d10a5d) )
- ROM_LOAD( "cz12.14k", 0x18000, 0x8000, CRC(ea2294c8) SHA1(bc996351921e68e6237cee2d29fee882931ce0ea) )
- ROM_LOAD( "cz11.13k", 0x20000, 0x8000, CRC(b7418335) SHA1(e9d08ee651b9221c371e2629a757bceca7b6192b) )
- ROM_LOAD( "cz10.11k", 0x28000, 0x8000, CRC(2f611978) SHA1(fb60be573184d2af1dfdd543e68eeec53f2788f2) )
-
- ROM_REGION( 0x20000, "gfx3", 0 )
- ROM_LOAD( "cy04.8e", 0x00000, 0x8000, CRC(f2e93ff0) SHA1(2e631966e1fa0b2699aa782b589d36801072ba03) ) /* tiles */
- /* Save 0x08000-0x0ffff to expand the previous so we can decode the thing */
- ROM_LOAD( "cy05.8f", 0x10000, 0x8000, CRC(c44570bf) SHA1(3e9b8b6b36c7f5ae016dba3987ea19a29bd5ee5b) ) /* tiles */
- ROM_LOAD( "cy06.8h", 0x18000, 0x8000, CRC(c3a56de5) SHA1(aefc516c6c69b12291c0bda03729910181a91a17) ) /* tiles */
-
- ROM_REGION( 0x8000, "gfx4", 0 ) /* background tilemaps */
- ROM_LOAD( "cy03.12d", 0x0000, 0x8000, CRC(242e3e64) SHA1(4fa8e93ef055bfdbe3bd619c53bf2448e1b832f0) )
-
- ROM_REGION( 0x0400, "proms", 0 ) /* All 4 proms are Fujitsu MB7114 or compatible */
- ROM_LOAD( "cy-17.5b", 0x0000, 0x0100, CRC(da31dfbc) SHA1(ac476440864f538918f7bef2e1db82fd19195f89) ) /* red */
- ROM_LOAD( "cy-16.6b", 0x0100, 0x0100, CRC(51f25b4c) SHA1(bfcca57613fbb22919e00db1f6a8c7ca50faa60b) ) /* green */
- ROM_LOAD( "cy-15.7b", 0x0200, 0x0100, CRC(a6168d7f) SHA1(0c7b31adcd764ce2631c3fb5c1a968b01f65e741) ) /* blue */
- ROM_LOAD( "cy-14.9b", 0x0300, 0x0100, CRC(52aad300) SHA1(ff09772b930afa87e28d0628ef85a589a3d149c9) ) /* ??? */
-ROM_END
-
-ROM_START( wexpressb3 )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "s2.16b", 0x4000, 0x4000, CRC(40d70fcb) SHA1(1327d39f872a39e020972952e5756ca59c55f9d0) )
- ROM_LOAD( "s1.15a", 0x8000, 0x8000, CRC(7c573824) SHA1(f5e4d4f0866c08c88d012a77e8aa2e74a779f986) )
-
- ROM_REGION( 0x10000, "slave", 0 ) /* 64k for the sub cpu */
- ROM_LOAD( "cy02-1.2a", 0x8000, 0x8000, CRC(552e6112) SHA1(f8412a63cab0aa47321d602f69bf534426c6aa5d) )
-
- ROM_REGION( 0x04000, "gfx1", 0 )
- ROM_LOAD( "cz07.5b", 0x00000, 0x4000, CRC(686bac23) SHA1(b6c96ed40e90a8ba32c2e78a65f9589d387b0254) ) /* characters */
-
- ROM_REGION( 0x30000, "gfx2", 0 )
- ROM_LOAD( "cz09.16h", 0x00000, 0x8000, CRC(1ed250d1) SHA1(c98b0440e4319308e683e857bbfeb6a150c76ff3) ) /* sprites */
- ROM_LOAD( "cz08.14h", 0x08000, 0x8000, CRC(2293fc61) SHA1(bf81db375f5424396559dcf0e04d34a52f6a020a) )
- ROM_LOAD( "cz13.16k", 0x10000, 0x8000, CRC(7c3bfd00) SHA1(87b48e09aaeacf78f3260df893b0922e25d10a5d) )
- ROM_LOAD( "cz12.14k", 0x18000, 0x8000, CRC(ea2294c8) SHA1(bc996351921e68e6237cee2d29fee882931ce0ea) )
- ROM_LOAD( "cz11.13k", 0x20000, 0x8000, CRC(b7418335) SHA1(e9d08ee651b9221c371e2629a757bceca7b6192b) )
- ROM_LOAD( "cz10.11k", 0x28000, 0x8000, CRC(2f611978) SHA1(fb60be573184d2af1dfdd543e68eeec53f2788f2) )
-
- ROM_REGION( 0x20000, "gfx3", 0 )
- ROM_LOAD( "cy04.8e", 0x00000, 0x8000, CRC(f2e93ff0) SHA1(2e631966e1fa0b2699aa782b589d36801072ba03) ) /* tiles */
- /* Save 0x08000-0x0ffff to expand the previous so we can decode the thing */
- ROM_LOAD( "cy05.8f", 0x10000, 0x8000, CRC(c44570bf) SHA1(3e9b8b6b36c7f5ae016dba3987ea19a29bd5ee5b) ) /* tiles */
- ROM_LOAD( "cy06.8h", 0x18000, 0x8000, CRC(c3a56de5) SHA1(aefc516c6c69b12291c0bda03729910181a91a17) ) /* tiles */
-
- ROM_REGION( 0x8000, "gfx4", 0 ) /* background tilemaps */
- ROM_LOAD( "3.12d", 0x0000, 0x8000, CRC(242e3e64) SHA1(4fa8e93ef055bfdbe3bd619c53bf2448e1b832f0) )
-
- ROM_REGION( 0x0400, "proms", 0 ) /* Proms Weren't Present In This Set, Using the One from the Other */
- ROM_LOAD( "cy-17.5b", 0x0000, 0x0100, CRC(da31dfbc) SHA1(ac476440864f538918f7bef2e1db82fd19195f89) ) /* red */
- ROM_LOAD( "cy-16.6b", 0x0100, 0x0100, CRC(51f25b4c) SHA1(bfcca57613fbb22919e00db1f6a8c7ca50faa60b) ) /* green */
- ROM_LOAD( "cy-15.7b", 0x0200, 0x0100, CRC(a6168d7f) SHA1(0c7b31adcd764ce2631c3fb5c1a968b01f65e741) ) /* blue */
- ROM_LOAD( "cy-14.9b", 0x0300, 0x0100, CRC(52aad300) SHA1(ff09772b930afa87e28d0628ef85a589a3d149c9) ) /* ??? */
-ROM_END
-
-
-void exprraid_state::exprraid_gfx_expand()
-{
- /* Expand the background rom so we can use regular decode routines */
-
- uint8_t *gfx = memregion("gfx3")->base();
- int offs = 0x10000 - 0x1000;
- int i;
-
-
- for ( i = 0x8000 - 0x1000; i >= 0; i-= 0x1000 )
- {
- memcpy(&(gfx[offs]), &(gfx[i]), 0x1000);
-
- offs -= 0x1000;
-
- memcpy(&(gfx[offs]), &(gfx[i]), 0x1000);
-
- offs -= 0x1000;
- }
-}
-
-void exprraid_state::init_wexpressb()
-{
- uint8_t *rom = memregion("maincpu")->base();
-
- /* HACK: this set uses M6502 irq vectors but DECO CPU-16 opcodes??? */
- rom[0xfff7] = rom[0xfffa];
- rom[0xfff6] = rom[0xfffb];
-
- rom[0xfff1] = rom[0xfffc];
- rom[0xfff0] = rom[0xfffd];
-
- rom[0xfff3] = rom[0xfffe];
- rom[0xfff2] = rom[0xffff];
-
- exprraid_gfx_expand();
-}
-
-void exprraid_state::init_exprraid()
-{
- exprraid_gfx_expand();
-}
-
-void exprraid_state::init_wexpressb2()
-{
- m_maincpu->space(AS_PROGRAM).install_read_handler(0x3800, 0x3800, read8_delegate(*this, FUNC(exprraid_state::vblank_r)));
- exprraid_gfx_expand();
-}
-
-void exprraid_state::init_wexpressb3()
-{
- m_maincpu->space(AS_PROGRAM).install_read_handler(0xffc0, 0xffc0, read8_delegate(*this, FUNC(exprraid_state::vblank_r)));
- exprraid_gfx_expand();
-}
-
-
-GAME( 1986, exprraid, 0, exprraid, exprraid, exprraid_state, init_exprraid, ROT0, "Data East Corporation", "Express Raider (World, Rev 4)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, exprraidu, exprraid, exprraid, exprraid, exprraid_state, init_exprraid, ROT0, "Data East USA", "Express Raider (US, rev 5)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, exprraidi, exprraid, exprraid, exprraid, exprraid_state, init_exprraid, ROT0, "Data East Corporation", "Express Raider (Italy)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, wexpress, exprraid, exprraid, exprraid, exprraid_state, init_exprraid, ROT0, "Data East Corporation", "Western Express (Japan, rev 4)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, wexpressb1, exprraid, exprraid, exprraid, exprraid_state, init_wexpressb, ROT0, "bootleg", "Western Express (bootleg set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, wexpressb2, exprraid, exprboot, exprboot, exprraid_state, init_wexpressb2, ROT0, "bootleg", "Western Express (bootleg set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, wexpressb3, exprraid, exprboot, exprboot, exprraid_state, init_wexpressb3, ROT0, "bootleg", "Western Express (bootleg set 3)", MACHINE_SUPPORTS_SAVE )