summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/rastan.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/rastan.c')
-rw-r--r--src/mame/drivers/rastan.c576
1 files changed, 576 insertions, 0 deletions
diff --git a/src/mame/drivers/rastan.c b/src/mame/drivers/rastan.c
new file mode 100644
index 00000000000..ab2b6b64fc9
--- /dev/null
+++ b/src/mame/drivers/rastan.c
@@ -0,0 +1,576 @@
+/***************************************************************************
+
+Rastan
+
+driver by Jarek Burczynski
+
+
+custom ICs
+----------
+PC040DA x3 video DAC
+PC050 coin I/O
+PC060HS main/sub CPU communication
+PC080 tilemap generator
+PC090 sprite generator
+
+
+memory map
+----------
+68000:
+
+The address decoding is done by two PALs (IC11 and IC12) which haven't been
+read, so the memory map is inferred by program behaviour
+
+Address Dir Data Name Description
+------------------------ --- ---------------- --------- -----------------------
+0000000xxxxxxxxxxxxxxxx- R xxxxxxxxxxxxxxxx ROM0 program ROM
+0000001xxxxxxxxxxxxxxxx- R xxxxxxxxxxxxxxxx ROM1 program ROM
+0000010xxxxxxxxxxxxxxxx- R xxxxxxxxxxxxxxxx ROM2 program ROM
+000100--11xxxxxxxxxxxxxx R/W xxxxxxxxxxxxxxxx WLRAM/WURAM work RAM
+001000------xxxxxxxxxxx- R/W xxxxxxxxxxxxxxxx CLCS palette RAM
+0011100-------------000- R --------xxxxxxxx IN PORT player 1 inputs
+0011100-------------001- R --------xxxxxxxx IN PORT player 2 inputs
+0011100-------------010- R --------xxxxxxxx IN PORT extra inputs
+0011100-------------011- R --------xxxxxxxx IN PORT coin inputs
+0011100-------------100- R --------xxxxxxxx IN PORT dip SW1
+0011100-------------101- R --------xxxxxxxx IN PORT dip SW2
+0011100-------------110- R ---------------- n.c.
+0011100-------------111- R ---------------- n.c.
+0011100----------------- W --------xxx----- OUT8-10 sprite palette bank
+0011100----------------- W -----------x---- n.c.
+0011100----------------- W ------------xxxx PC050 (coin counters, coin lockout)
+0011101----------------- R ---------------- n.c.
+0011101----------------- W --------------x- M INT [1]
+0011101----------------- W ---------------x SUB RESET [1]
+0011110----------------- R ---------------- n.c.
+0011110----------------- W ---------------- watchdog reset
+0011111---------------x- R/W ------------xxxx SNRD/SNWR PC060HS
+0011 EXT [1]
+11000xxxxxxxxxxxxxxxxxxx R/W xxxxxxxxxxxxxxxx SCN PC080 PGA
+11010000---xxxxxxxxxxxxx R/W xxxxxxxxxxxxxxxx OBJ PC090 PGA
+
+[1] Not used, goes to external connector, maybe provision for an MCU?
+
+
+Z80:
+
+Address Dir Data Name Description
+---------------- --- -------- --------- -----------------------
+00xxxxxxxxxxxxxx R xxxxxxxx program ROM
+01xxxxxxxxxxxxxx R xxxxxxxx program ROM (banked)
+1000xxxxxxxxxxxx R/W xxxxxxxx SRAM work RAM
+1001-----------x R/W xxxxxxxx YM2151 YM2151 [1]
+1010-----------x R/W ----xxxx PC6 PC060HS
+1011------------ W xxxxxxxx V-ST-ADRS MSM5205 start address (bits 15-8)
+1100------------ W -------- START-VCE MSM5205 start
+1101------------ W -------- STOP-VCE MSM5205 stop
+1110------------ n.c.
+1111------------ n.c.
+
+[1] Schematics also show a YM3526 that can replace the YM2151
+
+
+Notes:
+- For sound communication, we are using code in audio/taitosnd.c, which
+ claims to be for the TC0140SYT chip. That chip is not present in Rastan,
+ the communication is handled by PC060HS, which I guess is compatible.
+
+TODO:
+- Unknown writes to 0x350008.
+
+
+Stephh's notes (based on the game M68000 code and some tests) :
+
+1) 'rastan' and 'rastanu'
+
+ - Region stored at 0x05fffe.w
+ - Sets :
+ * 'rastan' : region = 0x0001
+ * 'rastanu' : region = 0x0000
+ - These 2 games are 100% the same, only region differs !
+ The US version has the copyright message twice in ROM though
+ - Coinage relies on the region (code at 0x05ffa2) :
+ * 0x0001 (World) uses TAITO_COINAGE_WORLD
+ * other uses TAITO_COINAGE_JAPAN_OLD
+ - Game name : "RASTAN"
+ - No notice screen
+ - In "demo mode", you get a scrolling screen with what the various items do
+ - No begining screen when you start a new game
+ - Same "YOU ARE A BRAVE FIGHTER ..." message between levels
+ - No message after beating level 6 boss
+ - No copyright message on scrolling credits screen
+ - Game ends after round 6
+ - There was sort of debug address at 0x05ff9e.w in ROM area :
+ * bits 0 to 2 determine the level (0 to 5)
+ * bits 3 and 5 determine where you start at the level !
+ . OFF & OFF : part 1
+ . OFF & ON : part 2
+ . ON & OFF : part 3 (boss)
+ . ON & ON : IMPOSSIBLE !
+ * bit 4 doesn't seem to have any effect
+ * bit 6 is the invulnerability flag (stored at 0x10c040.w = $40,A5)
+ surprisingly, it doesn't work when you fall in the water
+ * bit 7 is the infinite energy flag (stored at 0x10c044.w = $44,A5)
+ Be aware that the bits are active low !
+
+
+2) 'rastanu2'
+
+ - Region stored at 0x05fffe.w
+ - Sets :
+ * 'rastanu2' : region = 0xffff
+ - Game uses TAITO_COINAGE_JAPAN_OLD
+ - Game name : "RASTAN"
+ - There was sort of debug address at 0x05fffc.w in ROM area
+ See 'rastan' comments to know what the different bits do
+ - Same other notes as for 'rastan'
+
+
+3) 'rastsaga'
+
+ - Region stored at 0x05fffe.w
+ - Sets :
+ * 'rastsaga' : region = 0xffff
+ - Game uses TAITO_COINAGE_JAPAN_OLD
+ - Game name : "RASTAN SAGA"
+ - Notice screen
+ - In "demo mode", you get no scrolling screen with what the various items do
+ - Begining screen when you start a new game
+ - Different messages between levels
+ - There was sort of debug address at 0x05fffc.w in ROM area
+ See 'rastan' comments to know what the different bits do
+ - Message after beating level 6 boss
+ - Copyright message on scrolling credits screen
+ - There was sort of debug address at 0x05fffc.w in ROM area
+ See 'rastan' comments to know what the different bits do
+ - Different way to handle coins insertion ? See additional code at 0x039f00
+ - Same other notes as for 'rastan'
+
+
+4) 'rastsag1'
+
+ - Region stored at 0x05fffe.w
+ - Sets :
+ * 'rastsaga' : region = 0xffff
+ - Game uses TAITO_COINAGE_JAPAN_OLD
+ - Game name : "RASTAN SAGA"
+ - Same other notes as for 'rastsaga'
+
+***************************************************************************/
+
+#include "driver.h"
+#include "taitoipt.h"
+#include "video/taitoic.h"
+#include "audio/taitosnd.h"
+#include "sound/2151intf.h"
+#include "sound/msm5205.h"
+
+
+WRITE16_HANDLER( rastan_spritectrl_w );
+
+VIDEO_START( rastan );
+VIDEO_UPDATE( rastan );
+
+
+static WRITE8_HANDLER( rastan_bankswitch_w )
+{
+ int offs;
+
+ data &= 3;
+ if (data == 0) offs = 0x0000;
+ else offs = (data-1) * 0x4000 + 0x10000;
+
+ memory_set_bankptr( 1, memory_region(REGION_CPU2) + offs );
+}
+
+
+static int adpcm_pos;
+
+static void rastan_msm5205_vck(int chip)
+{
+ static int adpcm_data = -1;
+
+ if (adpcm_data != -1)
+ {
+ MSM5205_data_w(0, adpcm_data & 0x0f);
+ adpcm_data = -1;
+ }
+ else
+ {
+ adpcm_data = memory_region(REGION_SOUND1)[adpcm_pos];
+ adpcm_pos = (adpcm_pos + 1) & 0xffff;
+ MSM5205_data_w(0, adpcm_data >> 4);
+ }
+}
+
+static WRITE8_HANDLER( rastan_msm5205_address_w )
+{
+ adpcm_pos = (adpcm_pos & 0x00ff) | (data << 8);
+}
+
+static WRITE8_HANDLER( rastan_msm5205_start_w )
+{
+ MSM5205_reset_w(0, 0);
+}
+
+static WRITE8_HANDLER( rastan_msm5205_stop_w )
+{
+ MSM5205_reset_w(0, 1);
+ adpcm_pos &= 0xff00;
+}
+
+
+
+static ADDRESS_MAP_START( rastan_map, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x05ffff) AM_ROM
+ AM_RANGE(0x10c000, 0x10ffff) AM_RAM
+ AM_RANGE(0x200000, 0x200fff) AM_READWRITE(MRA16_RAM, paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE(&paletteram16)
+ AM_RANGE(0x350008, 0x350009) AM_WRITE(MWA16_NOP) /* 0 only (often) ? */
+ AM_RANGE(0x380000, 0x380001) AM_WRITE(rastan_spritectrl_w) /* sprite palette bank, coin counters & lockout */
+ AM_RANGE(0x390000, 0x390001) AM_READ(input_port_0_word_r)
+ AM_RANGE(0x390002, 0x390003) AM_READ(input_port_1_word_r)
+ AM_RANGE(0x390004, 0x390005) AM_READ(input_port_2_word_r)
+ AM_RANGE(0x390006, 0x390007) AM_READ(input_port_3_word_r)
+ AM_RANGE(0x390008, 0x390009) AM_READ(input_port_4_word_r)
+ AM_RANGE(0x39000a, 0x39000b) AM_READ(input_port_5_word_r)
+ AM_RANGE(0x3c0000, 0x3c0001) AM_WRITE(watchdog_reset16_w)
+ AM_RANGE(0x3e0000, 0x3e0001) AM_READWRITE(MRA16_NOP, taitosound_port16_lsb_w)
+ AM_RANGE(0x3e0002, 0x3e0003) AM_READWRITE(taitosound_comm16_lsb_r, taitosound_comm16_lsb_w)
+ AM_RANGE(0xc00000, 0xc0ffff) AM_READWRITE(PC080SN_word_0_r, PC080SN_word_0_w)
+ AM_RANGE(0xc20000, 0xc20003) AM_WRITE(PC080SN_yscroll_word_0_w)
+ AM_RANGE(0xc40000, 0xc40003) AM_WRITE(PC080SN_xscroll_word_0_w)
+ AM_RANGE(0xc50000, 0xc50003) AM_WRITE(PC080SN_ctrl_word_0_w)
+ AM_RANGE(0xd00000, 0xd03fff) AM_READWRITE(PC090OJ_word_0_r, PC090OJ_word_0_w) /* sprite ram */
+ADDRESS_MAP_END
+
+
+static ADDRESS_MAP_START( rastan_s_map, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x3fff) AM_ROM
+ AM_RANGE(0x4000, 0x7fff) AM_ROMBANK(1)
+ AM_RANGE(0x8000, 0x8fff) AM_RAM
+ AM_RANGE(0x9000, 0x9000) AM_WRITE(YM2151_register_port_0_w)
+ AM_RANGE(0x9001, 0x9001) AM_READWRITE(YM2151_status_port_0_r, YM2151_data_port_0_w)
+ AM_RANGE(0xa000, 0xa000) AM_WRITE(taitosound_slave_port_w)
+ AM_RANGE(0xa001, 0xa001) AM_READWRITE(taitosound_slave_comm_r, taitosound_slave_comm_w)
+ AM_RANGE(0xb000, 0xb000) AM_WRITE(rastan_msm5205_address_w)
+ AM_RANGE(0xc000, 0xc000) AM_WRITE(rastan_msm5205_start_w)
+ AM_RANGE(0xd000, 0xd000) AM_WRITE(rastan_msm5205_stop_w)
+ADDRESS_MAP_END
+
+
+
+static INPUT_PORTS_START( rastan )
+ PORT_START_TAG("IN0")
+ TAITO_JOY_UDLR_2_BUTTONS( 1 )
+
+ PORT_START_TAG("IN1")
+ TAITO_JOY_UDLR_2_BUTTONS( 2 )
+
+ 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_HIGH, IPT_SPECIAL ) // from PC050 (coin A gets locked if 0)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) // from PC050 (coin B gets locked if 0)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SPECIAL ) // from PC050 (above 2 bits not checked when 0)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN3")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_TILT )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN1 )
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN2 )
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+ /* 0x390008 -> 0x10c018 ($18,A5) */
+ 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_DIPUNUSED( 0x08, IP_ACTIVE_LOW )
+ TAITO_COINAGE_WORLD
+
+ /* 0x39000a -> 0x10c01c ($1c,A5) */
+ PORT_START_TAG("DSWB")
+ TAITO_DIFFICULTY
+ PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) ) /* table at 0x059f2e */
+ PORT_DIPSETTING( 0x0c, "100k 200k 400k 600k 800k" )
+ PORT_DIPSETTING( 0x08, "150k 300k 600k 900k 1200k" )
+ PORT_DIPSETTING( 0x04, "200k 400k 800k 1200k 1600k" )
+ PORT_DIPSETTING( 0x00, "250k 500k 1000k 1500k 2000k" )
+ PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x30, "3" )
+ PORT_DIPSETTING( 0x20, "4" )
+ PORT_DIPSETTING( 0x10, "5" )
+ PORT_DIPSETTING( 0x00, "6" )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Allow_Continue ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( Yes ) )
+ PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( rastsaga )
+ PORT_INCLUDE( rastan )
+
+ PORT_MODIFY("DSWA")
+ TAITO_COINAGE_JAPAN_OLD
+INPUT_PORTS_END
+
+
+
+static const gfx_layout tilelayout =
+{
+ 8,8,
+ RGN_FRAC(1,2),
+ 4,
+ { 0, 1, 2, 3 },
+ { 0, 4, RGN_FRAC(1,2)+0 ,RGN_FRAC(1,2)+4, 8+0, 8+4, RGN_FRAC(1,2)+8+0, RGN_FRAC(1,2)+8+4 },
+ { 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,
+ { 0, 1, 2, 3 },
+ { 0, 4, RGN_FRAC(1,2)+0 ,RGN_FRAC(1,2)+4, 8+0, 8+4, RGN_FRAC(1,2)+8+0, RGN_FRAC(1,2)+8+4,
+ 16+0, 16+4, RGN_FRAC(1,2)+16+0, RGN_FRAC(1,2)+16+4, 24+0, 24+4, RGN_FRAC(1,2)+24+0, RGN_FRAC(1,2)+24+4 },
+ { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32,
+ 8*32, 9*32, 10*32, 11*32, 12*32, 13*32, 14*32, 15*32 },
+ 32*16
+};
+
+static GFXDECODE_START( rastan )
+ GFXDECODE_ENTRY( REGION_GFX1, 0, tilelayout, 0, 0x80 )
+ GFXDECODE_ENTRY( REGION_GFX2, 0, spritelayout, 0, 0x80 )
+GFXDECODE_END
+
+
+
+/* handler called by the YM2151 emulator when the internal timers cause an IRQ */
+static void irqhandler(int irq)
+{
+ cpunum_set_input_line(1,0,irq ? ASSERT_LINE : CLEAR_LINE);
+}
+
+static struct YM2151interface ym2151_interface =
+{
+ irqhandler,
+ rastan_bankswitch_w
+};
+
+static struct MSM5205interface msm5205_interface =
+{
+ rastan_msm5205_vck, /* VCK function */
+ MSM5205_S48_4B /* 8 kHz */
+};
+
+
+
+static MACHINE_DRIVER_START( rastan )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(M68000, 8000000) /* 8 MHz */
+ MDRV_CPU_PROGRAM_MAP(rastan_map,0)
+ MDRV_CPU_VBLANK_INT(irq5_line_hold,1)
+
+ MDRV_CPU_ADD(Z80, 4000000) /* 4 MHz */
+ MDRV_CPU_PROGRAM_MAP(rastan_s_map,0)
+
+ MDRV_SCREEN_REFRESH_RATE(60)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+ MDRV_INTERLEAVE(10) /* 10 CPU slices per frame - enough for the sound CPU to read all commands */
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(40*8, 32*8)
+ MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1)
+ MDRV_GFXDECODE(rastan)
+ MDRV_PALETTE_LENGTH(8192)
+
+ MDRV_VIDEO_START(rastan)
+ MDRV_VIDEO_UPDATE(rastan)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_MONO("mono")
+
+ MDRV_SOUND_ADD(YM2151, 4000000)
+ MDRV_SOUND_CONFIG(ym2151_interface)
+ MDRV_SOUND_ROUTE(0, "mono", 0.50)
+ MDRV_SOUND_ROUTE(1, "mono", 0.50)
+
+ MDRV_SOUND_ADD(MSM5205, 384000)
+ MDRV_SOUND_CONFIG(msm5205_interface)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
+MACHINE_DRIVER_END
+
+
+
+/***************************************************************************
+
+ Game driver(s)
+
+***************************************************************************/
+
+ROM_START( rastan )
+ ROM_REGION( 0x60000, REGION_CPU1, 0 ) /* 6*64k for 68000 code */
+ ROM_LOAD16_BYTE( "b04-35.19", 0x00000, 0x10000, CRC(1c91dbb1) SHA1(17fc55e8546cc0b847aebd67fb4570a1e9f128f3) )
+ ROM_LOAD16_BYTE( "b04-37.07", 0x00001, 0x10000, CRC(ecf20bdd) SHA1(92e46b1edef40a19be17091c09daba598d77bca8) )
+ ROM_LOAD16_BYTE( "b04-40.20", 0x20000, 0x10000, CRC(0930d4b3) SHA1(c269b3856040ed9409de99cca48f22a2f355fc4c) )
+ ROM_LOAD16_BYTE( "b04-39.08", 0x20001, 0x10000, CRC(d95ade5e) SHA1(f47557dcfa9d3137e2a3838e45858fc21471cc91) )
+ ROM_LOAD16_BYTE( "b04-42.21", 0x40000, 0x10000, CRC(1857a7cb) SHA1(7d967d04ade648c6ddb19aad9e184b6e272856da) )
+ ROM_LOAD16_BYTE( "b04-43.09", 0x40001, 0x10000, CRC(c34b9152) SHA1(6ed9247ad455bc3b71d78b541591b269969830cb) )
+
+ ROM_REGION( 0x1c000, REGION_CPU2, 0 )
+ ROM_LOAD( "b04-19.49", 0x00000, 0x4000, CRC(ee81fdd8) SHA1(fa59dac2583a7d2979550dffc6f9c6c2bd67bfd5) )
+ ROM_CONTINUE( 0x10000, 0xc000 )
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "b04-01.40", 0x00000, 0x20000, CRC(cd30de19) SHA1(f8d158d38cd07a24cb5ddefd4ce90beec706924d) )
+ ROM_LOAD( "b04-03.39", 0x20000, 0x20000, CRC(ab67e064) SHA1(5c49f0ff9221cba9f2bb8da86eb4448c73012410) )
+ ROM_LOAD( "b04-02.67", 0x40000, 0x20000, CRC(54040fec) SHA1(a2bea2ce1cebd25b33be41723299ca0512d95f9e) )
+ ROM_LOAD( "b04-04.66", 0x60000, 0x20000, CRC(94737e93) SHA1(3df7f085fe6468bda11fab2e86252df6f74f7a99) )
+
+ ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "b04-05.15", 0x00000, 0x20000, CRC(c22d94ac) SHA1(04f69f9af7ac4242e95dba32988afa3616d75a92) )
+ ROM_LOAD( "b04-07.14", 0x20000, 0x20000, CRC(b5632a51) SHA1(da6ebe6afe245443a76b33714213549356c0c5c3) )
+ ROM_LOAD( "b04-06.28", 0x40000, 0x20000, CRC(002ccf39) SHA1(fdc29f39198f9b488e298ee89b0eeb3417527733) )
+ ROM_LOAD( "b04-08.27", 0x60000, 0x20000, CRC(feafca05) SHA1(9de9ff1fcf037e5ab25c181b678245041238d6ae) )
+
+ ROM_REGION( 0x10000, REGION_SOUND1, 0 ) /* 64k for the samples */
+ ROM_LOAD( "b04-20.76", 0x0000, 0x10000, CRC(fd1a34cc) SHA1(b1682959521fa295769207b75cf7d839e9ec95fd) ) /* samples are 4bit ADPCM */
+ROM_END
+
+ROM_START( rastanu )
+ ROM_REGION( 0x60000, REGION_CPU1, 0 ) /* 6*64k for 68000 code */
+ ROM_LOAD16_BYTE( "b04-35.19", 0x00000, 0x10000, CRC(1c91dbb1) SHA1(17fc55e8546cc0b847aebd67fb4570a1e9f128f3) )
+ ROM_LOAD16_BYTE( "b04-37.07", 0x00001, 0x10000, CRC(ecf20bdd) SHA1(92e46b1edef40a19be17091c09daba598d77bca8) )
+ ROM_LOAD16_BYTE( "b04-45.20", 0x20000, 0x10000, CRC(362812dd) SHA1(f7df037ef423d931ca780b34813d4e9e4db67054) )
+ ROM_LOAD16_BYTE( "b04-44.08", 0x20001, 0x10000, CRC(51cc5508) SHA1(2bd266351a4d1b94c8c3a489e4d267695d93db5e) )
+ ROM_LOAD16_BYTE( "b04-42.21", 0x40000, 0x10000, CRC(1857a7cb) SHA1(7d967d04ade648c6ddb19aad9e184b6e272856da) )
+ ROM_LOAD16_BYTE( "b04-41-1.09", 0x40001, 0x10000, CRC(bd403269) SHA1(14aee828d5efb65370a5e453c8fd1c7b3e718074) )
+
+ ROM_REGION( 0x1c000, REGION_CPU2, 0 )
+ ROM_LOAD( "b04-19.49", 0x00000, 0x4000, CRC(ee81fdd8) SHA1(fa59dac2583a7d2979550dffc6f9c6c2bd67bfd5) )
+ ROM_CONTINUE( 0x10000, 0xc000 )
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "b04-01.40", 0x00000, 0x20000, CRC(cd30de19) SHA1(f8d158d38cd07a24cb5ddefd4ce90beec706924d) )
+ ROM_LOAD( "b04-03.39", 0x20000, 0x20000, CRC(ab67e064) SHA1(5c49f0ff9221cba9f2bb8da86eb4448c73012410) )
+ ROM_LOAD( "b04-02.67", 0x40000, 0x20000, CRC(54040fec) SHA1(a2bea2ce1cebd25b33be41723299ca0512d95f9e) )
+ ROM_LOAD( "b04-04.66", 0x60000, 0x20000, CRC(94737e93) SHA1(3df7f085fe6468bda11fab2e86252df6f74f7a99) )
+
+ ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "b04-05.15", 0x00000, 0x20000, CRC(c22d94ac) SHA1(04f69f9af7ac4242e95dba32988afa3616d75a92) )
+ ROM_LOAD( "b04-07.14", 0x20000, 0x20000, CRC(b5632a51) SHA1(da6ebe6afe245443a76b33714213549356c0c5c3) )
+ ROM_LOAD( "b04-06.28", 0x40000, 0x20000, CRC(002ccf39) SHA1(fdc29f39198f9b488e298ee89b0eeb3417527733) )
+ ROM_LOAD( "b04-08.27", 0x60000, 0x20000, CRC(feafca05) SHA1(9de9ff1fcf037e5ab25c181b678245041238d6ae) )
+
+ ROM_REGION( 0x10000, REGION_SOUND1, 0 ) /* MSM5205 samples */
+ ROM_LOAD( "b04-20.76", 0x0000, 0x10000, CRC(fd1a34cc) SHA1(b1682959521fa295769207b75cf7d839e9ec95fd) )
+ROM_END
+
+ROM_START( rastanu2 )
+ ROM_REGION( 0x60000, REGION_CPU1, 0 ) /* 6*64k for 68000 code */
+ ROM_LOAD16_BYTE( "rs19_38.bin", 0x00000, 0x10000, CRC(a38ac909) SHA1(66d792fee03c6bd87d15060b9d5cae74137c5ebd) )
+ ROM_LOAD16_BYTE( "b04-21.7", 0x00001, 0x10000, CRC(7c8dde9a) SHA1(0cfc3b4f3bc7b940a6c07267ac95e4aae25801ea) )
+ ROM_LOAD16_BYTE( "b04-23.20", 0x20000, 0x10000, CRC(254b3dce) SHA1(5126cd5268abaa78dfdcd2ca70621c093c79be67) )
+ ROM_LOAD16_BYTE( "b04-22.8", 0x20001, 0x10000, CRC(98e8edcf) SHA1(cc89ef36da6d21192efc19c3bbb215b1635b7ef3) )
+ ROM_LOAD16_BYTE( "b04-25.21", 0x40000, 0x10000, CRC(d1e5adee) SHA1(eafc275a0023aecb2efaff14cd890915fa162624) )
+ ROM_LOAD16_BYTE( "b04-24.9", 0x40001, 0x10000, CRC(a3dcc106) SHA1(3a8854530b08864a1f7f46c427e49ceec8297806) )
+
+ ROM_REGION( 0x1c000, REGION_CPU2, 0 )
+ ROM_LOAD( "b04-19.49", 0x00000, 0x4000, CRC(ee81fdd8) SHA1(fa59dac2583a7d2979550dffc6f9c6c2bd67bfd5) )
+ ROM_CONTINUE( 0x10000, 0xc000 )
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "b04-01.40", 0x00000, 0x20000, CRC(cd30de19) SHA1(f8d158d38cd07a24cb5ddefd4ce90beec706924d) )
+ ROM_LOAD( "b04-03.39", 0x20000, 0x20000, CRC(ab67e064) SHA1(5c49f0ff9221cba9f2bb8da86eb4448c73012410) )
+ ROM_LOAD( "b04-02.67", 0x40000, 0x20000, CRC(54040fec) SHA1(a2bea2ce1cebd25b33be41723299ca0512d95f9e) )
+ ROM_LOAD( "b04-04.66", 0x60000, 0x20000, CRC(94737e93) SHA1(3df7f085fe6468bda11fab2e86252df6f74f7a99) )
+
+ ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "b04-05.15", 0x00000, 0x20000, CRC(c22d94ac) SHA1(04f69f9af7ac4242e95dba32988afa3616d75a92) )
+ ROM_LOAD( "b04-07.14", 0x20000, 0x20000, CRC(b5632a51) SHA1(da6ebe6afe245443a76b33714213549356c0c5c3) )
+ ROM_LOAD( "b04-06.28", 0x40000, 0x20000, CRC(002ccf39) SHA1(fdc29f39198f9b488e298ee89b0eeb3417527733) )
+ ROM_LOAD( "b04-08.27", 0x60000, 0x20000, CRC(feafca05) SHA1(9de9ff1fcf037e5ab25c181b678245041238d6ae) )
+
+ ROM_REGION( 0x10000, REGION_SOUND1, 0 ) /* MSM5205 samples */
+ ROM_LOAD( "b04-20.76", 0x0000, 0x10000, CRC(fd1a34cc) SHA1(b1682959521fa295769207b75cf7d839e9ec95fd) )
+ROM_END
+
+ROM_START( rastsaga )
+ ROM_REGION( 0x60000, REGION_CPU1, 0 ) /* 6*64k for 68000 code */
+ ROM_LOAD16_BYTE( "b04-38.19", 0x00000, 0x10000, CRC(a38ac909) SHA1(66d792fee03c6bd87d15060b9d5cae74137c5ebd) )
+ ROM_LOAD16_BYTE( "b04-37.7", 0x00001, 0x10000, CRC(bad60872) SHA1(e020f79b3ac3d2abccfcd5d135d2dc49e1335c7d) )
+ ROM_LOAD16_BYTE( "b04-40.20", 0x20000, 0x10000, CRC(6bcf70dc) SHA1(3e369548ac01981c503150b44c2747e6c2cec12a) )
+ ROM_LOAD16_BYTE( "b04-39.8", 0x20001, 0x10000, CRC(8838ecc5) SHA1(42b43ab77969bbacdf178fbe73a0a27652ccb297) )
+ ROM_LOAD16_BYTE( "b04-42.21", 0x40000, 0x10000, CRC(b626c439) SHA1(976e820edc4ba107c5b579edaaee1e354e85fb67) )
+ ROM_LOAD16_BYTE( "b04-43.9", 0x40001, 0x10000, CRC(c928a516) SHA1(fe87fdf2d1b7ba93e1986460eb6af648b58f42e4) )
+
+ ROM_REGION( 0x1c000, REGION_CPU2, 0 )
+ ROM_LOAD( "b04-19.49", 0x00000, 0x4000, CRC(ee81fdd8) SHA1(fa59dac2583a7d2979550dffc6f9c6c2bd67bfd5) )
+ ROM_CONTINUE( 0x10000, 0xc000 )
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "b04-01.40", 0x00000, 0x20000, CRC(cd30de19) SHA1(f8d158d38cd07a24cb5ddefd4ce90beec706924d) )
+ ROM_LOAD( "b04-03.39", 0x20000, 0x20000, CRC(ab67e064) SHA1(5c49f0ff9221cba9f2bb8da86eb4448c73012410) )
+ ROM_LOAD( "b04-02.67", 0x40000, 0x20000, CRC(54040fec) SHA1(a2bea2ce1cebd25b33be41723299ca0512d95f9e) )
+ ROM_LOAD( "b04-04.66", 0x60000, 0x20000, CRC(94737e93) SHA1(3df7f085fe6468bda11fab2e86252df6f74f7a99) )
+
+ ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "b04-05.15", 0x00000, 0x20000, CRC(c22d94ac) SHA1(04f69f9af7ac4242e95dba32988afa3616d75a92) )
+ ROM_LOAD( "b04-07.14", 0x20000, 0x20000, CRC(b5632a51) SHA1(da6ebe6afe245443a76b33714213549356c0c5c3) )
+ ROM_LOAD( "b04-06.28", 0x40000, 0x20000, CRC(002ccf39) SHA1(fdc29f39198f9b488e298ee89b0eeb3417527733) )
+ ROM_LOAD( "b04-08.27", 0x60000, 0x20000, CRC(feafca05) SHA1(9de9ff1fcf037e5ab25c181b678245041238d6ae) )
+
+ ROM_REGION( 0x10000, REGION_SOUND1, 0 ) /* MSM5205 samples */
+ ROM_LOAD( "b04-20.76", 0x0000, 0x10000, CRC(fd1a34cc) SHA1(b1682959521fa295769207b75cf7d839e9ec95fd) )
+ROM_END
+
+ROM_START( rastsag1 )
+ ROM_REGION( 0x60000, REGION_CPU1, 0 ) /* 6*64k for 68000 code */
+ ROM_LOAD16_BYTE( "b04-14.19", 0x00000, 0x10000, CRC(a38ac909) SHA1(66d792fee03c6bd87d15060b9d5cae74137c5ebd) )
+ ROM_LOAD16_BYTE( "b04-13.7", 0x00001, 0x10000, CRC(bad60872) SHA1(e020f79b3ac3d2abccfcd5d135d2dc49e1335c7d) )
+ ROM_LOAD16_BYTE( "b04-16-1.20", 0x20000, 0x10000, CRC(00b59e60) SHA1(545ab3eb9ef25c532dda5a9eec087665ba0cecc1) )
+ ROM_LOAD16_BYTE( "b04-15-1.8", 0x20001, 0x10000, CRC(ff9e018a) SHA1(37048eecec799f29564517fae9525ef0e3d9d9e5) )
+ ROM_LOAD16_BYTE( "b04-18-1.21", 0x40000, 0x10000, CRC(b626c439) SHA1(976e820edc4ba107c5b579edaaee1e354e85fb67) )
+ ROM_LOAD16_BYTE( "b04-17-1.9", 0x40001, 0x10000, CRC(c928a516) SHA1(fe87fdf2d1b7ba93e1986460eb6af648b58f42e4) )
+
+ ROM_REGION( 0x1c000, REGION_CPU2, 0 )
+ ROM_LOAD( "b04-19.49", 0x00000, 0x4000, CRC(ee81fdd8) SHA1(fa59dac2583a7d2979550dffc6f9c6c2bd67bfd5) )
+ ROM_CONTINUE( 0x10000, 0xc000 )
+
+ ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "b04-01.40", 0x00000, 0x20000, CRC(cd30de19) SHA1(f8d158d38cd07a24cb5ddefd4ce90beec706924d) )
+ ROM_LOAD( "b04-03.39", 0x20000, 0x20000, CRC(ab67e064) SHA1(5c49f0ff9221cba9f2bb8da86eb4448c73012410) )
+ ROM_LOAD( "b04-02.67", 0x40000, 0x20000, CRC(54040fec) SHA1(a2bea2ce1cebd25b33be41723299ca0512d95f9e) )
+ ROM_LOAD( "b04-04.66", 0x60000, 0x20000, CRC(94737e93) SHA1(3df7f085fe6468bda11fab2e86252df6f74f7a99) )
+
+ ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "b04-05.15", 0x00000, 0x20000, CRC(c22d94ac) SHA1(04f69f9af7ac4242e95dba32988afa3616d75a92) )
+ ROM_LOAD( "b04-07.14", 0x20000, 0x20000, CRC(b5632a51) SHA1(da6ebe6afe245443a76b33714213549356c0c5c3) )
+ ROM_LOAD( "b04-06.28", 0x40000, 0x20000, CRC(002ccf39) SHA1(fdc29f39198f9b488e298ee89b0eeb3417527733) )
+ ROM_LOAD( "b04-08.27", 0x60000, 0x20000, CRC(feafca05) SHA1(9de9ff1fcf037e5ab25c181b678245041238d6ae) )
+
+ ROM_REGION( 0x10000, REGION_SOUND1, 0 ) /* MSM5205 samples */
+ ROM_LOAD( "b04-20.76", 0x0000, 0x10000, CRC(fd1a34cc) SHA1(b1682959521fa295769207b75cf7d839e9ec95fd) )
+ROM_END
+
+
+GAME( 1987, rastan, 0, rastan, rastan, 0, ROT0, "Taito Corporation Japan", "Rastan (World)", 0)
+GAME( 1987, rastanu, rastan, rastan, rastsaga, 0, ROT0, "Taito America Corporation", "Rastan (US, set 1)", 0)
+GAME( 1987, rastanu2, rastan, rastan, rastsaga, 0, ROT0, "Taito America Corporation", "Rastan (US, set 2)", 0)
+GAME( 1987, rastsaga, rastan, rastan, rastsaga, 0, ROT0, "Taito Corporation", "Rastan Saga (Japan)", 0)
+GAME( 1987, rastsag1, rastan, rastan, rastsaga, 0, ROT0, "Taito Corporation", "Rastan Saga (Japan Rev 1)", 0)