summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/lsasquad.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/lsasquad.c')
-rw-r--r--src/mame/drivers/lsasquad.c806
1 files changed, 806 insertions, 0 deletions
diff --git a/src/mame/drivers/lsasquad.c b/src/mame/drivers/lsasquad.c
new file mode 100644
index 00000000000..0c6fe3d6d00
--- /dev/null
+++ b/src/mame/drivers/lsasquad.c
@@ -0,0 +1,806 @@
+/***************************************************************************
+
+Land Sea Air Squad / Storming Party (c) 1986 Taito
+
+driver by Nicola Salmoria
+
+TODO:
+- I think storming is supposed to be a bootleg without mcu, so I should verify
+ if it works with the mcu not hooked up.
+- Wrong sprite/tilemap priority. Sprites can appear above and below the middle
+ layer, it's not clear how this is selected since there are no free attribute
+ bits.
+ The priority seems to involve split transparency on the tilemap and also
+ priority on sprites (so that people pass below doors but airplanes above).
+ It is confirmed that priority is controlled by PROM a64-06.9 (grounding A9
+ makes sprites disappear).
+- Scrollram not entirely understood - it's most likely wrong, but more than
+ enough to run this particular game.
+- The video driver is pretty slow and could be optimized using temporary bitmaps
+ (or tilemaps), however I haven't done that because the video circuitry is not
+ entirely understood and if other games are found running on this hardware, they
+ might not like the optimizations.
+- Unknown writes to YM2203 output ports (filters?)
+
+TS 2006.05.28:
+--------------
+Added 'Daikaijuu no Gyakushuu'
+- more sprite ram
+- a bit different sound hardware (diff. communciation with sub cpu, no NMI)
+- same video board as LSA Squad, but different features are used
+- 68705P5 MCU internal ROM dump is missing. Protection is simulated.
+ (more details -> /machine/daikaiju.c)
+
+
+
+Difficulty level Damage from..
+ Bullet Enemy plane
+A (easy) 1 2
+B (medium) 2 3
+C (hard) 2 5
+D (hardest) 3 6
+
+Rank A and B are described as normal. In rank C, some enemies shoot
+more bullets. In rank D, all enemies shoot more bullets.
+
+---------------------------------------------------------------------------
+
+Daikaiju no Gyakushu
+Taito, 1986
+
+(Info from a Japanese friend...)
+The Japanese letters on the title screen say "Daikaizyuu no Gyakusyuu"
+Pronunciation is like "Dai-Kai-ju-no-Ghi-yaku-shu"
+The correct spelling is "Daikaiju no Gyakushu"
+
+PCB Layout
+----------
+
+J1100064A
+K1100152A
+CPU PCB
+(sticker) M4300046A
+|--------------------------------------------------------------|
+| MB3731 YM3014 PC010SA A74_09.IC24 |
+|H 4556 PC010SA A74_08.IC23 |-|
+| LM3900 A74_07.IC22 | |
+| VOL PC040DA | |
+|-| YM2203 PC040DA | |
+ | PC040DA | |
+|-| YM2149 A74_06.IC9| |
+| | |
+| Z80A |-|
+| |
+|G A74_04.IC44 |
+| |
+| 6116 |
+| Z80B |-|
+| A74_05.IC35 | |
+|-| A74_01.IC4| |
+ | PC030CM | |
+|-| PAL16L8 A74_02.IC3| |
+| (A64-18) | |
+| A74_03.IC2| |
+| |-|
+| DSWB DSWA TL7700 6264 |
+|--------------------------------------------------------------|
+Notes:
+ Z80A clock - 3.000MHz [24/8]
+ Z80B clock - 6.000MHz [24/4]
+ YM2203 clock - 3.000MHz [24/8]
+ YM2149 clock - 3.000MHz [24/8]
+ PC030CM - Taito custom ceramic I/O module (SIL20)
+ PC010SA - Taito custom ceramic sound DAC module (SIL14)
+ PC040DA - Taito custom ceramic video DAC module (SIL19)
+ TL7700 - Texas Instruments TL7700 Voltage Supervisor/Reset IC (DIP8)
+ 6264 - Mitsubishi M5M5165P-10 8k x8 SRAM (DIP28)
+ 6116 - Sony CXK5816P-12L 2k x8 SRAM (DIP24)
+ MB3731 - Fujitsu MB3731 audio amp IC (SIL12)
+ G - 22-way edge connector
+ H - 12 pin Taito power connector (gnd,gnd,gnd,gnd,5,5,5,-5,12,key,12,12)
+ A74_05.IC35 - Motorola 68705P5S Micro-controller, clock 3.000MHz [24/8] (protected, DIP28)
+ VSync - 60Hz
+
+ ROMs
+ ----
+ A74_06/07/08/09 - MMI 63S441 1k x4 Bipolar PROM (DIP18)
+ A74_01/02/03/04 - Fujitsu 27C256 EPROM (DIP28)
+
+
+
+Bottom board
+------------
+J1100065A
+K1100153A
+VIDEO BOARD
+|--------------------------------------------------------------|
+| A74_10.IC27 A74_11.IC40 6116 6116 |
+| A74_12.IC28 A74_12.IC41 6116 6116 |-|
+| | |
+| | |
+|-| 2018 | |
+ | | |
+|-| | |
+| 2018 24MHz | |
+| |-|
+| |
+|T |
+| |
+| 2018 |
+| 2018 |-|
+|-| | |
+ | | |
+|-| | |
+| | |
+| | |
+| A74_14.IC2 A74_15.IC25 | |
+| A74_16.IC3 A74_17.IC26 |-|
+| 2018 |
+|--------------------------------------------------------------|
+Notes:
+ 2018 - Toshiba TMM2018 or Sony CXK5813 2k x8 SRAM (NDIP28)
+ 6116 - Hitachi HM6116LP-3 2k x8 SRAM (DIP24)
+ T - 18-way edge connector
+ All A74_x - Fujitsu 27C256 EPROM (DIP28)
+
+
+***************************************************************************/
+
+#include "driver.h"
+#include "cpu/m6805/m6805.h"
+#include "sound/ay8910.h"
+#include "sound/2203intf.h"
+
+/* in video/lsasquad.c */
+extern UINT8 *lsasquad_scrollram;
+VIDEO_UPDATE( lsasquad );
+VIDEO_UPDATE( daikaiju );
+
+/* in machine/lsasquad.c */
+extern int lsasquad_invertcoin;
+WRITE8_HANDLER( lsasquad_sh_nmi_disable_w );
+WRITE8_HANDLER( lsasquad_sh_nmi_enable_w );
+WRITE8_HANDLER( lsasquad_sound_command_w );
+READ8_HANDLER( lsasquad_sh_sound_command_r );
+WRITE8_HANDLER( lsasquad_sh_result_w );
+READ8_HANDLER( lsasquad_sound_result_r );
+READ8_HANDLER( lsasquad_sound_status_r );
+
+READ8_HANDLER( lsasquad_68705_portA_r );
+WRITE8_HANDLER( lsasquad_68705_portA_w );
+WRITE8_HANDLER( lsasquad_68705_ddrA_w );
+READ8_HANDLER( lsasquad_68705_portB_r );
+WRITE8_HANDLER( lsasquad_68705_portB_w );
+WRITE8_HANDLER( lsasquad_68705_ddrB_w );
+WRITE8_HANDLER( lsasquad_mcu_w );
+READ8_HANDLER( lsasquad_mcu_r );
+READ8_HANDLER( lsasquad_mcu_status_r );
+
+READ8_HANDLER( daikaiju_mcu_r);
+WRITE8_HANDLER( daikaiju_mcu_w);
+READ8_HANDLER( daikaiju_mcu_status_r);
+
+READ8_HANDLER( daikaiju_sound_status_r );
+READ8_HANDLER( daikaiju_sh_sound_command_r );
+
+MACHINE_RESET(daikaiju);
+
+static WRITE8_HANDLER( lsasquad_bankswitch_w )
+{
+ UINT8 *ROM = memory_region(REGION_CPU1);
+
+ /* bits 0-2 select ROM bank */
+ memory_set_bankptr(1,&ROM[0x10000 + 0x2000 * (data & 7)]);
+
+ /* bit 3 is zeroed on startup, maybe reset sound CPU */
+
+ /* bit 4 flips screen */
+ flip_screen_set(data & 0x10);
+
+ /* other bits unknown */
+}
+
+static ADDRESS_MAP_START( readmem, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x7fff) AM_READ(MRA8_ROM)
+ AM_RANGE(0x8000, 0x9fff) AM_READ(MRA8_BANK1)
+ AM_RANGE(0xa000, 0xe5ff) AM_READ(MRA8_RAM)
+ AM_RANGE(0xe800, 0xe800) AM_READ(input_port_0_r) /* DSWA */
+ AM_RANGE(0xe801, 0xe801) AM_READ(input_port_1_r) /* DSWB */
+ AM_RANGE(0xe802, 0xe802) AM_READ(input_port_2_r) /* DSWC */
+ AM_RANGE(0xe803, 0xe803) AM_READ(lsasquad_mcu_status_r) /* COIN + 68705 status */
+ AM_RANGE(0xe804, 0xe804) AM_READ(input_port_4_r) /* IN0 */
+ AM_RANGE(0xe805, 0xe805) AM_READ(input_port_5_r) /* IN1 */
+ AM_RANGE(0xe806, 0xe806) AM_READ(input_port_6_r) /* START */
+ AM_RANGE(0xe807, 0xe807) AM_READ(input_port_7_r) /* SERVICE/TILT */
+ AM_RANGE(0xec00, 0xec00) AM_READ(lsasquad_sound_result_r)
+ AM_RANGE(0xec01, 0xec01) AM_READ(lsasquad_sound_status_r)
+ AM_RANGE(0xee00, 0xee00) AM_READ(lsasquad_mcu_r)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( writemem, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x9fff) AM_WRITE(MWA8_ROM)
+ AM_RANGE(0xa000, 0xbfff) AM_WRITE(MWA8_RAM) /* SRAM */
+ AM_RANGE(0xc000, 0xdfff) AM_WRITE(MWA8_RAM) AM_BASE(&videoram) AM_SIZE(&videoram_size) /* SCREEN RAM */
+ AM_RANGE(0xe000, 0xe3ff) AM_WRITE(MWA8_RAM) AM_BASE(&lsasquad_scrollram) /* SCROLL RAM */
+ AM_RANGE(0xe400, 0xe5ff) AM_WRITE(MWA8_RAM) AM_BASE(&spriteram) AM_SIZE(&spriteram_size) /* OBJECT RAM */
+ AM_RANGE(0xea00, 0xea00) AM_WRITE(lsasquad_bankswitch_w)
+ AM_RANGE(0xec00, 0xec00) AM_WRITE(lsasquad_sound_command_w)
+ AM_RANGE(0xee00, 0xee00) AM_WRITE(lsasquad_mcu_w)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( sound_readmem, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x7fff) AM_READ(MRA8_ROM)
+ AM_RANGE(0x8000, 0x87ff) AM_READ(MRA8_RAM)
+ AM_RANGE(0xa000, 0xa000) AM_READ(YM2203_status_port_0_r)
+ AM_RANGE(0xa001, 0xa001) AM_READ(YM2203_read_port_0_r)
+ AM_RANGE(0xd000, 0xd000) AM_READ(lsasquad_sh_sound_command_r)
+ AM_RANGE(0xd800, 0xd800) AM_READ(lsasquad_sound_status_r)
+ AM_RANGE(0xe000, 0xefff) AM_READ(MRA8_ROM) /* space for diagnostic ROM? */
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( sound_writemem, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x7fff) AM_WRITE(MWA8_ROM)
+ AM_RANGE(0x8000, 0x87ff) AM_WRITE(MWA8_RAM)
+ AM_RANGE(0xa000, 0xa000) AM_WRITE(YM2203_control_port_0_w)
+ AM_RANGE(0xa001, 0xa001) AM_WRITE(YM2203_write_port_0_w)
+ AM_RANGE(0xc000, 0xc000) AM_WRITE(AY8910_control_port_0_w)
+ AM_RANGE(0xc001, 0xc001) AM_WRITE(AY8910_write_port_0_w)
+ AM_RANGE(0xd000, 0xd000) AM_WRITE(lsasquad_sh_result_w)
+ AM_RANGE(0xd400, 0xd400) AM_WRITE(lsasquad_sh_nmi_disable_w)
+ AM_RANGE(0xd800, 0xd800) AM_WRITE(lsasquad_sh_nmi_enable_w)
+ AM_RANGE(0xe000, 0xefff) AM_WRITE(MWA8_ROM) /* space for diagnostic ROM? */
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( m68705_readmem, ADDRESS_SPACE_PROGRAM, 8 )
+ ADDRESS_MAP_FLAGS( AMEF_ABITS(11) )
+ AM_RANGE(0x0000, 0x0000) AM_READ(lsasquad_68705_portA_r)
+ AM_RANGE(0x0001, 0x0001) AM_READ(lsasquad_68705_portB_r)
+ AM_RANGE(0x0002, 0x0002) AM_READ(lsasquad_mcu_status_r)
+ AM_RANGE(0x0010, 0x007f) AM_READ(MRA8_RAM)
+ AM_RANGE(0x0080, 0x07ff) AM_READ(MRA8_ROM)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( m68705_writemem, ADDRESS_SPACE_PROGRAM, 8 )
+ ADDRESS_MAP_FLAGS( AMEF_ABITS(11) )
+ AM_RANGE(0x0000, 0x0000) AM_WRITE(lsasquad_68705_portA_w)
+ AM_RANGE(0x0001, 0x0001) AM_WRITE(lsasquad_68705_portB_w)
+ AM_RANGE(0x0004, 0x0004) AM_WRITE(lsasquad_68705_ddrA_w)
+ AM_RANGE(0x0005, 0x0005) AM_WRITE(lsasquad_68705_ddrB_w)
+ AM_RANGE(0x0010, 0x007f) AM_WRITE(MWA8_RAM)
+ AM_RANGE(0x0080, 0x07ff) AM_WRITE(MWA8_ROM)
+ADDRESS_MAP_END
+
+
+
+static INPUT_PORTS_START( lsasquad )
+ PORT_START_TAG("DSWA")
+ PORT_DIPNAME( 0x01, 0x00, DEF_STR( Cabinet ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( Cocktail ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_SERVICE( 0x04, IP_ACTIVE_LOW )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( On ) )
+ PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coin_A ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x30, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 2C_3C ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( 1C_2C ) )
+ PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coin_B ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0xc0, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 2C_3C ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( 1C_2C ) )
+
+ PORT_START_TAG("DSWB")
+ PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( Medium ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
+ PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) )
+ PORT_DIPSETTING( 0x08, "50000 100000" )
+ PORT_DIPSETTING( 0x0c, "80000 150000" )
+ PORT_DIPSETTING( 0x04, "100000 200000" )
+ PORT_DIPSETTING( 0x00, "150000 300000" )
+ PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x00, "1" )
+ PORT_DIPSETTING( 0x30, "3" )
+ PORT_DIPSETTING( 0x10, "4" )
+ PORT_DIPSETTING( 0x20, "5" )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Allow_Continue ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Language ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( English ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Japanese ) )
+
+ PORT_START_TAG("DSWC")
+ PORT_DIPNAME( 0x01, 0x01, "Freeze" )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, "Invulnerability (Cheat)")
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+ PORT_START_TAG("MCU?")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* 68705 ready to receive cmd */
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* 0 = 68705 has sent result */
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN1 )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN2 )
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) 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_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) 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_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN3")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_TILT )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+INPUT_PORTS_END
+
+/* DAIKAIJU */
+
+static ADDRESS_MAP_START( mem_daikaiju, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM
+ AM_RANGE(0x8000, 0x9fff) AM_READ(MRA8_BANK1)
+ AM_RANGE(0xa000, 0xbfff) AM_RAM /* SRAM */
+ AM_RANGE(0xc000, 0xdfff) AM_RAM AM_BASE(&videoram) AM_SIZE(&videoram_size) /* SCREEN RAM */
+ AM_RANGE(0xe000, 0xe3ff) AM_RAM AM_BASE(&lsasquad_scrollram) /* SCROLL RAM */
+ AM_RANGE(0xe400, 0xe7ff) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size) /* OBJECT RAM */
+ AM_RANGE(0xe800, 0xe800) AM_READ(input_port_0_r) /* DSWA */
+ AM_RANGE(0xe801, 0xe801) AM_READ(input_port_1_r) /* DSWB */
+ AM_RANGE(0xe803, 0xe803) AM_READ(daikaiju_mcu_status_r) /* COIN + 68705 status */
+ AM_RANGE(0xe804, 0xe804) AM_READ(input_port_4_r) /* IN0 */
+ AM_RANGE(0xe805, 0xe805) AM_READ(input_port_5_r) /* IN1 */
+ AM_RANGE(0xe806, 0xe806) AM_READ(input_port_6_r) /* START */
+ AM_RANGE(0xe807, 0xe807) AM_READ(input_port_7_r) /* SERVICE/TILT */
+ AM_RANGE(0xea00, 0xea00) AM_WRITE(lsasquad_bankswitch_w)
+ AM_RANGE(0xec00, 0xec00) AM_WRITE(lsasquad_sound_command_w)
+ AM_RANGE(0xec01, 0xec01) AM_READ(lsasquad_sound_status_r)
+ AM_RANGE(0xee00, 0xee00) AM_READWRITE(daikaiju_mcu_r, daikaiju_mcu_w)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( sound_mem_daikaiju, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM
+ AM_RANGE(0x8000, 0x87ff) AM_RAM
+ AM_RANGE(0xa000, 0xa000) AM_READWRITE(YM2203_status_port_0_r, YM2203_control_port_0_w)
+ AM_RANGE(0xa001, 0xa001) AM_READWRITE(YM2203_read_port_0_r, YM2203_write_port_0_w)
+ AM_RANGE(0xc000, 0xc000) AM_WRITE(AY8910_control_port_0_w)
+ AM_RANGE(0xc001, 0xc001) AM_WRITE(AY8910_write_port_0_w)
+ AM_RANGE(0xd000, 0xd000) AM_READ(daikaiju_sh_sound_command_r)
+ AM_RANGE(0xd400, 0xd400) AM_WRITENOP
+ AM_RANGE(0xd800, 0xd800) AM_READ(daikaiju_sound_status_r) AM_WRITENOP
+ AM_RANGE(0xdc00, 0xdc00) AM_WRITENOP
+ AM_RANGE(0xe000, 0xefff) AM_ROM /* space for diagnostic ROM? */
+ADDRESS_MAP_END
+
+static INPUT_PORTS_START( daikaiju )
+ PORT_START_TAG("DSWA")
+ PORT_DIPNAME( 0x01, 0x00, DEF_STR( Cabinet ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( Cocktail ) )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( On ) )
+ PORT_SERVICE( 0x04, IP_ACTIVE_LOW ) //test mode
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( On ) )
+ PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coin_A ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x30, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 2C_3C ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( 1C_2C ) )
+ PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coin_B ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0xc0, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 2C_3C ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( 1C_2C ) )
+
+ PORT_START_TAG("DSWB")
+ PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) // detailed description at the top of file
+ PORT_DIPSETTING( 0x01, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( Medium ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
+ PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) )
+ PORT_DIPSETTING( 0x08, "100000" )
+ PORT_DIPSETTING( 0x0c, "30000" )
+ PORT_DIPSETTING( 0x04, "50000" )
+ PORT_DIPSETTING( 0x00, DEF_STR( None ) )
+ PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x00, "Infinite (Cheat)" )
+ PORT_DIPSETTING( 0x30, "3" )
+ PORT_DIPSETTING( 0x10, "5" )
+ PORT_DIPSETTING( 0x20, "4" )
+ PORT_DIPNAME( 0x40, 0x40, "Invulnerability (Cheat)")
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, "Freeze" ) //stop mode
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+ PORT_START_TAG("DSWC")
+ //unused
+
+
+ PORT_START_TAG("MCU?")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* 68705 ready to receive cmd */
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* 0 = 68705 has sent result */
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN1 )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN2 )
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) 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_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) 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_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN3")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_TILT )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+INPUT_PORTS_END
+
+
+static const gfx_layout charlayout =
+{
+ 8,8,
+ RGN_FRAC(1,2),
+ 4,
+ { RGN_FRAC(1,2)+0, RGN_FRAC(1,2)+4, 0, 4 },
+ { 3, 2, 1, 0, 8+3, 8+2, 8+1, 8+0 },
+ { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
+ 16*8
+};
+
+static const gfx_layout spritelayout =
+{
+ 16,16,
+ RGN_FRAC(1,2),
+ 4,
+ { RGN_FRAC(1,2)+0, RGN_FRAC(1,2)+4, 0, 4 },
+ { 3, 2, 1, 0, 8+3, 8+2, 8+1, 8+0,
+ 16*8+3, 16*8+2, 16*8+1, 16*8+0, 16*8+8+3, 16*8+8+2, 16*8+8+1, 16*8+8+0 },
+ { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
+ 16*16, 17*16, 18*16, 19*16, 20*16, 21*16, 22*16, 23*16 },
+ 64*8
+};
+
+static GFXDECODE_START( lsasquad )
+ GFXDECODE_ENTRY( REGION_GFX1, 0, charlayout, 0, 16 )
+ GFXDECODE_ENTRY( REGION_GFX2, 0, spritelayout, 256, 16 )
+GFXDECODE_END
+
+
+
+static void irqhandler(int irq)
+{
+ cpunum_set_input_line(1,0,irq ? ASSERT_LINE : CLEAR_LINE);
+}
+
+static WRITE8_HANDLER( unk )
+{
+
+}
+
+
+static struct YM2203interface ym2203_interface =
+{
+ 0,
+ 0,
+ unk,
+ unk,
+ irqhandler
+};
+
+
+static MACHINE_DRIVER_START( lsasquad )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(Z80, 6000000) /* 6 MHz? */
+ MDRV_CPU_PROGRAM_MAP(readmem,writemem)
+ MDRV_CPU_VBLANK_INT(irq0_line_hold,1)
+
+ MDRV_CPU_ADD(Z80, 4000000)
+ /* audio CPU */ /* 4 MHz? */
+ MDRV_CPU_PROGRAM_MAP(sound_readmem,sound_writemem)
+ /* IRQs are triggered by the YM2203 */
+ MDRV_CPU_ADD(M68705,4000000/M68705_CLOCK_DIVIDER) /* ? */
+ MDRV_CPU_PROGRAM_MAP(m68705_readmem,m68705_writemem)
+
+ MDRV_SCREEN_REFRESH_RATE(60)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+ MDRV_INTERLEAVE(500) /* 500 CPU slices per frame - an high value to ensure proper */
+ /* synchronization of the CPUs */
+ /* main<->sound synchronization depends on this */
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(32*8, 32*8)
+ MDRV_SCREEN_VISIBLE_AREA(0, 32*8-1, 2*8, 30*8-1)
+ MDRV_GFXDECODE(lsasquad)
+ MDRV_PALETTE_LENGTH(512)
+
+ MDRV_PALETTE_INIT(RRRR_GGGG_BBBB)
+ MDRV_VIDEO_UPDATE(lsasquad)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_MONO("mono")
+
+ MDRV_SOUND_ADD(AY8910, 3000000)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
+
+ MDRV_SOUND_ADD(YM2203, 3000000)
+ MDRV_SOUND_CONFIG(ym2203_interface)
+ MDRV_SOUND_ROUTE(0, "mono", 0.20)
+ MDRV_SOUND_ROUTE(1, "mono", 0.20)
+ MDRV_SOUND_ROUTE(2, "mono", 0.20)
+ MDRV_SOUND_ROUTE(3, "mono", 1.0)
+MACHINE_DRIVER_END
+
+static MACHINE_DRIVER_START( daikaiju )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(Z80, 6000000)
+ MDRV_CPU_PROGRAM_MAP(mem_daikaiju, 0)
+ MDRV_CPU_VBLANK_INT(irq0_line_hold,1)
+
+ MDRV_CPU_ADD(Z80, 3000000)
+ /* audio CPU */
+ MDRV_CPU_PROGRAM_MAP(sound_mem_daikaiju, 0)
+ /* IRQs are triggered by the YM2203 */
+
+ MDRV_SCREEN_REFRESH_RATE(60)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+ MDRV_INTERLEAVE(500) /* 500 CPU slices per frame - an high value to ensure proper */
+ /* synchronization of the CPUs */
+ /* main<->sound synchronization depends on this */
+
+ MDRV_MACHINE_RESET(daikaiju)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(32*8, 32*8)
+ MDRV_SCREEN_VISIBLE_AREA(0, 32*8-1, 2*8, 30*8-1)
+ MDRV_GFXDECODE(lsasquad)
+ MDRV_PALETTE_LENGTH(512)
+
+ MDRV_PALETTE_INIT(RRRR_GGGG_BBBB)
+ MDRV_VIDEO_UPDATE(daikaiju)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_MONO("mono")
+
+ MDRV_SOUND_ADD(AY8910, 3000000)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
+
+ MDRV_SOUND_ADD(YM2203, 3000000)
+ MDRV_SOUND_CONFIG(ym2203_interface)
+ MDRV_SOUND_ROUTE(0, "mono", 0.20)
+ MDRV_SOUND_ROUTE(1, "mono", 0.20)
+ MDRV_SOUND_ROUTE(2, "mono", 0.20)
+ MDRV_SOUND_ROUTE(3, "mono", 1.0)
+MACHINE_DRIVER_END
+
+
+/***************************************************************************
+
+ Game driver(s)
+
+***************************************************************************/
+
+ROM_START( lsasquad )
+ ROM_REGION( 0x20000, REGION_CPU1, 0 )
+ ROM_LOAD( "a64-21.4", 0x00000, 0x8000, CRC(5ff6b017) SHA1(96cc74edba1208bb8e82f93d2d3a88ea24922dc0) )
+ /* ROMs banked at 8000-9fff */
+ ROM_LOAD( "a64-20.3", 0x10000, 0x8000, CRC(7f8b4979) SHA1(975b1a678e1f7d7b5789565063177593639645ce) )
+ ROM_LOAD( "a64-19.2", 0x18000, 0x8000, CRC(ba31d34a) SHA1(e2c515ae8146a37534b19403c03fc5a8719f115f) )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */
+ ROM_LOAD( "a64-04.44", 0x0000, 0x8000, CRC(c238406a) SHA1(bb8f9d952c4568edb375328a1f9f6681a1bb5907) )
+
+ ROM_REGION( 0x0800, REGION_CPU3, 0 ) /* 2k for the microcontroller */
+ ROM_LOAD( "a64-05.35", 0x0000, 0x0800, CRC(572677b9) SHA1(e098d5d842bcc81221ba56652a7019505d8be082) )
+
+ ROM_REGION( 0x20000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT )
+ ROM_LOAD( "a64-10.27", 0x00000, 0x8000, CRC(bb4f1b37) SHA1(ce8dc962a3d04a624e36b57dc678e7ca7726ba1d) )
+ ROM_LOAD( "a64-22.28", 0x08000, 0x8000, CRC(58e03b89) SHA1(ccec83bcd7cb2be3ba46e9fbc7952349fa8faadf) )
+ ROM_LOAD( "a64-11.40", 0x10000, 0x8000, CRC(a3bbc0b3) SHA1(f565d323575af3c2e95412c50130e88954fc238c) )
+ ROM_LOAD( "a64-23.41", 0x18000, 0x8000, CRC(377a538b) SHA1(1174838309a331ffec7b60d6ceaa98a02fdbe210) )
+
+ ROM_REGION( 0x20000, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_INVERT )
+ ROM_LOAD( "a64-14.2", 0x00000, 0x8000, CRC(a72e2041) SHA1(c537d1620fe8562aef39a0279b35139eb0668bf9) )
+ ROM_LOAD( "a64-16.3", 0x08000, 0x8000, CRC(05206333) SHA1(a7463279446de9d633ea18f1e1eb5f610d982a37) )
+ ROM_LOAD( "a64-15.25", 0x10000, 0x8000, CRC(01ed5851) SHA1(6034376d30d1d17fe9aab07cb40009c4f3c03690) )
+ ROM_LOAD( "a64-17.26", 0x18000, 0x8000, CRC(6eaf3735) SHA1(a91fd7c9a6f2f58d311e40edc29d1e4f97746146) )
+
+ ROM_REGION( 0x0a00, REGION_PROMS, 0 )
+ ROM_LOAD( "a64-07.22", 0x0000, 0x0400, CRC(82802bbb) SHA1(4f54c9364a12809898eabd1eb13d16a6c9f0f532) ) /* red (bottom half unused) */
+ ROM_LOAD( "a64-08.23", 0x0200, 0x0400, CRC(aa9e1dbd) SHA1(be7dfabf5306747fa3d5f1f735d0064673f19c91) ) /* green (bottom half unused) */
+ ROM_LOAD( "a64-09.24", 0x0400, 0x0400, CRC(dca86295) SHA1(a6f6af60caaad9f49d72a8c2ff1e6115471f8c63) ) /* blue (bottom half unused) */
+ ROM_LOAD( "a64-06.9", 0x0600, 0x0400, CRC(7ced30ba) SHA1(f22de13d4fd49b7b2ffd06032eb5e14fbdeec91c) ) /* priority */
+
+ ROM_REGION( 0x0200, REGION_PLDS, ROMREGION_DISPOSE )
+ ROM_LOAD( "pal16l8a.14", 0x0000, 0x0104, CRC(a7cc157d) SHA1(f06f750636d59a610e0b0eda8cb791780ebc57a5) )
+ROM_END
+
+ROM_START( storming )
+ ROM_REGION( 0x20000, REGION_CPU1, 0 )
+ ROM_LOAD( "stpartyj.001", 0x00000, 0x8000, CRC(07e6bc61) SHA1(6989a1401868dd93c9466cfd1636ac48a734a5d4) )
+ /* ROMs banked at 8000-9fff */
+ ROM_LOAD( "stpartyj.002", 0x10000, 0x8000, CRC(1c7fe5d5) SHA1(15c09e3301d8ce55e59fe90db9f50ee19584ab7b) )
+ ROM_LOAD( "stpartyj.003", 0x18000, 0x8000, CRC(159f23a6) SHA1(2cb4ed78e54dc2acbbfc2d4cfb2d29ff604aa9ae) )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */
+ ROM_LOAD( "a64-04.44", 0x0000, 0x8000, CRC(c238406a) SHA1(bb8f9d952c4568edb375328a1f9f6681a1bb5907) )
+
+ ROM_REGION( 0x0800, REGION_CPU3, 0 ) /* 2k for the microcontroller */
+ ROM_LOAD( "a64-05.35", 0x0000, 0x0800, CRC(572677b9) SHA1(e098d5d842bcc81221ba56652a7019505d8be082) )
+
+ ROM_REGION( 0x20000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT )
+ ROM_LOAD( "a64-10.27", 0x00000, 0x8000, CRC(bb4f1b37) SHA1(ce8dc962a3d04a624e36b57dc678e7ca7726ba1d) )
+ ROM_LOAD( "stpartyj.009", 0x08000, 0x8000, CRC(8ee2443b) SHA1(855d8189efcfc796daa6b36f86d2872cc48adfde) )
+ ROM_LOAD( "a64-11.40", 0x10000, 0x8000, CRC(a3bbc0b3) SHA1(f565d323575af3c2e95412c50130e88954fc238c) )
+ ROM_LOAD( "stpartyj.011", 0x18000, 0x8000, CRC(f342d42f) SHA1(ef9367ad9763f4b38e0f12805c1eee7c430758c2) )
+
+ ROM_REGION( 0x20000, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_INVERT )
+ ROM_LOAD( "a64-14.2", 0x00000, 0x8000, CRC(a72e2041) SHA1(c537d1620fe8562aef39a0279b35139eb0668bf9) )
+ ROM_LOAD( "a64-16.3", 0x08000, 0x8000, CRC(05206333) SHA1(a7463279446de9d633ea18f1e1eb5f610d982a37) )
+ ROM_LOAD( "a64-15.25", 0x10000, 0x8000, CRC(01ed5851) SHA1(6034376d30d1d17fe9aab07cb40009c4f3c03690) )
+ ROM_LOAD( "a64-17.26", 0x18000, 0x8000, CRC(6eaf3735) SHA1(a91fd7c9a6f2f58d311e40edc29d1e4f97746146) )
+
+ ROM_REGION( 0x0a00, REGION_PROMS, 0 )
+ ROM_LOAD( "a64-07.22", 0x0000, 0x0400, CRC(82802bbb) SHA1(4f54c9364a12809898eabd1eb13d16a6c9f0f532) ) /* red (bottom half unused) */
+ ROM_LOAD( "a64-08.23", 0x0200, 0x0400, CRC(aa9e1dbd) SHA1(be7dfabf5306747fa3d5f1f735d0064673f19c91) ) /* green (bottom half unused) */
+ ROM_LOAD( "a64-09.24", 0x0400, 0x0400, CRC(dca86295) SHA1(a6f6af60caaad9f49d72a8c2ff1e6115471f8c63) ) /* blue (bottom half unused) */
+ ROM_LOAD( "a64-06.9", 0x0600, 0x0400, CRC(7ced30ba) SHA1(f22de13d4fd49b7b2ffd06032eb5e14fbdeec91c) ) /* priority */
+
+ ROM_REGION( 0x0200, REGION_PLDS, ROMREGION_DISPOSE )
+ ROM_LOAD( "pal16l8a.14", 0x0000, 0x0104, CRC(a7cc157d) SHA1(f06f750636d59a610e0b0eda8cb791780ebc57a5) )
+ROM_END
+
+ROM_START( daikaiju )
+ ROM_REGION( 0x20000, REGION_CPU1, 0 )
+ ROM_LOAD( "a74_01-1.ic4", 0x00000, 0x8000, CRC(89c13d7f) SHA1(2eaec80d7aa360b700387df00b37a692acc50d74) )
+ /* ROMs banked at 8000-9fff */
+ ROM_LOAD( "a74_02.ic3", 0x10000, 0x8000, CRC(8ddf6131) SHA1(b5b23550e7ee52554bc1f045ed6f42e254a05bf4) )
+ ROM_LOAD( "a74_03.ic2", 0x18000, 0x8000, CRC(3911ffed) SHA1(ba6dbd74d37ef26621a02baf3479e2764d10d2ba) )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the second CPU */
+ ROM_LOAD( "a74_04.ic44", 0x0000, 0x8000, CRC(98a6a703) SHA1(0c169a7a5f8b26606f67ee7f14bd487951536ac5) )
+
+ ROM_REGION( 0x0800, REGION_CPU3, 0 )
+ ROM_LOAD( "a74_05.ic35", 0x0000, 0x0800, NO_DUMP )
+
+ ROM_REGION( 0x20000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT )
+ ROM_LOAD( "a74_10.ic27", 0x00000, 0x8000, CRC(3123158e) SHA1(cdebf63c283c5c042596b0a13361fd01245e9c42) )
+ ROM_LOAD( "a74_12.ic28", 0x08000, 0x8000, CRC(8a4e6c3a) SHA1(85b5c8630fe9d4faea6787f80a66ee41da64e64b) )
+ ROM_LOAD( "a74_11.ic40", 0x10000, 0x8000, CRC(6432ae38) SHA1(5514c5259c5ced393b1c39436025dd13c0c61d82) )
+ ROM_LOAD( "a74_13.ic41", 0x18000, 0x8000, CRC(1a1be4bb) SHA1(cbe647b2291db6432ea2cb61b8108cc089adb3c7) )
+
+ ROM_REGION( 0x20000, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_INVERT )
+ ROM_LOAD( "a74_14.ic2", 0x00000, 0x8000, CRC(c28e9c35) SHA1(e9c697a91e5281ab08a43169004c235ada9391db) )
+ ROM_LOAD( "a74_16.ic3", 0x08000, 0x8000, CRC(4b1c7921) SHA1(37e26a9007bfdf71af021fb218ea2b16f91d9c37) )
+ ROM_LOAD( "a74_16.ic25", 0x10000, 0x8000, CRC(ef4d1945) SHA1(6b5e898e486d5786fc5d151f1fcca0015829365d) )
+ ROM_LOAD( "a74_17.ic26", 0x18000, 0x8000, CRC(d1077878) SHA1(e69893db6b63d5a5192b521d61a86f60b7029b7e) )
+
+ ROM_REGION( 0x0a00, REGION_PROMS, 0 )
+ ROM_LOAD( "a74_07.ic22", 0x0000, 0x0400, CRC(66132341) SHA1(8c6723dfc4f856ef27998411a98c40783d13ac41) ) /* red (bottom half unused) */
+ ROM_LOAD( "a74_08.ic23", 0x0200, 0x0400, CRC(fb3f0273) SHA1(591577c94865e2e6465e0016350450a19000e52d) ) /* green (bottom half unused) */
+ ROM_LOAD( "a74_09.ic24", 0x0400, 0x0400, CRC(bed6709d) SHA1(ba5435728d6b7847bc86878f6122ce1f86982f0a) ) /* blue (bottom half unused) */
+ ROM_LOAD( "a74_06.ic9", 0x0600, 0x0400, CRC(cad554e7) SHA1(7890d948bfef198309df810f8401d224224a73a1) ) /* priority */
+ROM_END
+
+static void init_common(void)
+{
+ UINT8 *ROM = memory_region(REGION_CPU1);
+
+ /* an instruction at $7FFF straddles the bank switch boundary at
+ $8000 into rom bank #0 and then continues into the bank so
+ copy this bank as the CPU bank switching won't catch it */
+ memcpy(&ROM[0x08000], &ROM[0x10000], 0x2000);
+}
+
+/* coin inputs are inverted in storming */
+static DRIVER_INIT( lsasquad ) { lsasquad_invertcoin = 0x00; init_common(); }
+static DRIVER_INIT( storming ) { lsasquad_invertcoin = 0x0c; init_common(); }
+static DRIVER_INIT( daikaiju ) { init_common(); }
+
+
+GAME( 1986, lsasquad, 0, lsasquad, lsasquad, lsasquad, ROT270, "Taito", "Land Sea Air Squad / Riku Kai Kuu Saizensen", GAME_IMPERFECT_GRAPHICS )
+GAME( 1986, storming, lsasquad, lsasquad, lsasquad, storming, ROT270, "Taito", "Storming Party / Riku Kai Kuu Saizensen", GAME_IMPERFECT_GRAPHICS )
+GAME( 1986, daikaiju, 0, daikaiju, daikaiju, daikaiju, ROT270, "Taito", "Daikaiju no Gyakushu", GAME_IMPERFECT_GRAPHICS | GAME_UNEMULATED_PROTECTION)
+