#include "driver.h"
#include "state.h"
#include "vidhrdw/generic.h"
#include "vidhrdw/taitoic.h"
#include "sndhrdw/taitosnd.h"
VIDEO_START( rainbow );
VIDEO_START( jumping );
VIDEO_UPDATE( rainbow );
VIDEO_UPDATE( jumping );
WRITE16_HANDLER( jumping_spritectrl_w );
WRITE16_HANDLER( rainbow_spritectrl_w );
WRITE16_HANDLER( rainbow_cchip_ram_w );
WRITE16_HANDLER( rainbow_cchip_ctrl_w );
WRITE16_HANDLER( rainbow_cchip_bank_w );
READ16_HANDLER( rainbow_cchip_ram_r );
READ16_HANDLER( rainbow_cchip_ctrl_r );
void rainbow_cchip_init(int version);
static int jumping_latch = 0;
static WRITE16_HANDLER( jumping_sound_w )
{
if (ACCESSING_LSB)
{
jumping_latch = data & 0xff;
cpu_set_irq_line(1,0,HOLD_LINE);
}
}
static MEMORY_READ16_START( rainbow_readmem )
{ 0x000000, 0x07ffff, MRA16_ROM },
{ 0x10c000, 0x10ffff, MRA16_RAM },
{ 0x200000, 0x200fff, MRA16_RAM },
{ 0x201000, 0x203fff, MRA16_RAM },
{ 0x390000, 0x390003, input_port_0_word_r },
{ 0x3b0000, 0x3b0003, input_port_1_word_r },
{ 0x3e0000, 0x3e0001, MRA16_NOP },
{ 0x3e0002, 0x3e0003, taitosound_comm16_lsb_r },
{ 0x800000, 0x8007ff, rainbow_cchip_ram_r },
{ 0x800802, 0x800803, rainbow_cchip_ctrl_r },
{ 0xc00000, 0xc0ffff, PC080SN_word_0_r },
{ 0xd00000, 0xd03fff, PC090OJ_word_0_r },
MEMORY_END
static MEMORY_WRITE16_START( rainbow_writemem )
{ 0x000000, 0x07ffff, MWA16_ROM },
{ 0x10c000, 0x10ffff, MWA16_RAM },
{ 0x200000, 0x200fff, paletteram16_xBBBBBGGGGGRRRRR_word_w, &paletteram16 },
{ 0x201000, 0x203fff, MWA16_RAM },
{ 0x3a0000, 0x3a0001, rainbow_spritectrl_w },
{ 0x3c0000, 0x3c0003, MWA16_NOP },
{ 0x3e0000, 0x3e0001, taitosound_port16_lsb_w },
{ 0x3e0002, 0x3e0003, taitosound_comm16_lsb_w },
{ 0x800000, 0x8007ff, rainbow_cchip_ram_w },
{ 0x800802, 0x800803, rainbow_cchip_ctrl_w },
{ 0x800c00, 0x800c01, rainbow_cchip_bank_w },
{ 0xc00000, 0xc0ffff, PC080SN_word_0_w },
{ 0xc20000, 0xc20003, PC080SN_yscroll_word_0_w },
{ 0xc40000, 0xc40003, PC080SN_xscroll_word_0_w },
{ 0xc50000, 0xc50003, PC080SN_ctrl_word_0_w },
{ 0xd00000, 0xd03fff, PC090OJ_word_0_w },
MEMORY_END
static MEMORY_READ16_START( jumping_readmem )
{ 0x000000, 0x09ffff, MRA16_ROM },
{ 0x10c000, 0x10ffff, MRA16_RAM },
{ 0x200000, 0x200fff, MRA16_RAM },
{ 0x201000, 0x203fff, MRA16_RAM },
{ 0x400000, 0x400001, input_port_0_word_r },
{ 0x400002, 0x400003, input_port_1_word_r },
{ 0x401000, 0x401001, input_port_2_word_r },
{ 0x401002, 0x401003, input_port_3_word_r },
{ 0x420000, 0x420001, MRA16_NOP },
{ 0x440000, 0x4407ff, MRA16_RAM },
{ 0xc00000, 0xc0ffff, PC080SN_word_0_r },
{ 0xd00000, 0xd01fff, MRA16_RAM },
MEMORY_END
static MEMORY_WRITE16_START( jumping_writemem )
{ 0x000000, 0x09ffff, MWA16_ROM },
{ 0x10c000, 0x10ffff, MWA16_RAM },
{ 0x200000, 0x200fff, paletteram16_xxxxBBBBGGGGRRRR_word_w , &paletteram16 },
{ 0x201000, 0x203fff, MWA16_RAM },
{ 0x3a0000, 0x3a0001, jumping_spritectrl_w },
{ 0x3c0000, 0x3c0001, MWA16_NOP },
{ 0x400006, 0x400007, jumping_sound_w },
{ 0x430000, 0x430003, PC080SN_yscroll_word_0_w },
{ 0x440000, 0x4407ff, MWA16_RAM, &spriteram16, &spriteram_size },
{ 0x800000, 0x80ffff, MWA16_NOP },
{ 0xc00000, 0xc0ffff, PC080SN_word_0_w },
{ 0xc20000, 0xc20003, MWA16_NOP },
{ 0xc40000, 0xc40003, PC080SN_xscroll_word_0_w },
{ 0xd00000, 0xd01fff, MWA16_RAM },
MEMORY_END
static WRITE_HANDLER( bankswitch_w )
{
cpu_setbank(5, memory_region(REGION_CPU2) + ((data - 1) & 3) * 0x4000 + 0x10000);
}
static READ_HANDLER( jumping_latch_r )
{
return jumping_latch;
}
static MEMORY_READ_START( rainbow_s_readmem )
{ 0x0000, 0x3fff, MRA_ROM },
{ 0x4000, 0x7fff, MRA_BANK5 },
{ 0x8000, 0x8fff, MRA_RAM },
{ 0x9001, 0x9001, YM2151_status_port_0_r },
{ 0x9002, 0x9100, MRA_RAM },
{ 0xa001, 0xa001, taitosound_slave_comm_r },
MEMORY_END
static MEMORY_WRITE_START( rainbow_s_writemem )
{ 0x0000, 0x7fff, MWA_ROM },
{ 0x8000, 0x8fff, MWA_RAM },
{ 0x9000, 0x9000, YM2151_register_port_0_w },
{ 0x9001, 0x9001, YM2151_data_port_0_w },
{ 0xa000, 0xa000, taitosound_slave_port_w },
{ 0xa001, 0xa001, taitosound_slave_comm_w },
MEMORY_END
static MEMORY_READ_START( jumping_sound_readmem )
{ 0x0000, 0x7fff, MRA_ROM },
{ 0x8000, 0x8fff, MRA_RAM },
{ 0xb000, 0xb000, YM2203_status_port_0_r },
{ 0xb400, 0xb400, YM2203_status_port_1_r },
{ 0xb800, 0xb800, jumping_latch_r },
{ 0xc000, 0xffff, MRA_ROM },
MEMORY_END
static MEMORY_WRITE_START( jumping_sound_writemem )
{ 0x0000, 0x7fff, MWA_ROM },
{ 0x8000, 0x8fff, MWA_RAM },
{ 0xb000, 0xb000, YM2203_control_port_0_w },
{ 0xb001, 0xb001, YM2203_write_port_0_w },
{ 0xb400, 0xb400, YM2203_control_port_1_w },
{ 0xb401, 0xb401, YM2203_write_port_1_w },
{ 0xbc00, 0xbc00, MWA_NOP },
MEMORY_END
INPUT_PORTS_START( rainbow )
PORT_START
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( 0x00, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x10, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x20, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x30, DEF_STR( 1C_1C ) )
PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coin_B ) )
PORT_DIPSETTING( 0xc0, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x80, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x40, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_6C ) )
PORT_START
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) )
PORT_DIPSETTING( 0x02, "Easy" )
PORT_DIPSETTING( 0x03, "Medium" )
PORT_DIPSETTING( 0x01, "Hard" )
PORT_DIPSETTING( 0x00, "Hardest" )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Bonus_Life ) )
PORT_DIPSETTING( 0x00, "None" )
PORT_DIPSETTING( 0x04, "100k,1000k" )
PORT_DIPNAME( 0x08, 0x08, "Complete Bonus" )
PORT_DIPSETTING( 0x00, "100K Points" )
PORT_DIPSETTING( 0x08, "1 Up" )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) )
PORT_DIPSETTING( 0x10, "1" )
PORT_DIPSETTING( 0x00, "2" )
PORT_DIPSETTING( 0x30, "3" )
PORT_DIPSETTING( 0x20, "4" )
PORT_DIPNAME( 0x40, 0x00, "Language" )
PORT_DIPSETTING( 0x00, "English" )
PORT_DIPSETTING( 0x40, "Japanese" )
PORT_DIPNAME( 0x80, 0x00, "Coin Type" )
PORT_DIPSETTING( 0x00, "Type 1" )
PORT_DIPSETTING( 0x80, "Type 2" )
PORT_START
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_START
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_START
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_TILT )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_2WAY )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_2WAY )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_START
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_2WAY | IPF_PLAYER2 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_2WAY | IPF_PLAYER2 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
INPUT_PORTS_END
INPUT_PORTS_START( jumping )
PORT_START
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
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, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
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( 0x00, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x10, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x20, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x30, DEF_STR( 1C_1C ) )
PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coin_B ) )
PORT_DIPSETTING( 0xc0, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x80, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x40, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_6C ) )
PORT_START
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) )
PORT_DIPSETTING( 0x02, "Easy" )
PORT_DIPSETTING( 0x03, "Medium" )
PORT_DIPSETTING( 0x01, "Hard" )
PORT_DIPSETTING( 0x00, "Hardest" )
PORT_DIPNAME( 0x04, 0x00, DEF_STR( Bonus_Life ) )
PORT_DIPSETTING( 0x04, "100k,1000k" )
PORT_DIPSETTING( 0x00, "None" )
PORT_DIPNAME( 0x08, 0x00, "Complete Bonus" )
PORT_DIPSETTING( 0x08, "1 Up" )
PORT_DIPSETTING( 0x00, "None" )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) )
PORT_DIPSETTING( 0x10, "1" )
PORT_DIPSETTING( 0x00, "2" )
PORT_DIPSETTING( 0x30, "3" )
PORT_DIPSETTING( 0x20, "4" )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x00, "Coin Type" )
PORT_DIPSETTING( 0x00, "Type 1" )
PORT_DIPSETTING( 0x80, "Type 2" )
PORT_START
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_START2 )
PORT_START
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_2WAY )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_2WAY )
INPUT_PORTS_END
static struct GfxLayout tilelayout =
{
8,8,
RGN_FRAC(1,1),
4,
{ 0, 1, 2, 3 },
{ 8, 12, 0, 4, 24, 28, 16, 20 },
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
32*8
};
static struct GfxLayout spritelayout =
{
16,16,
RGN_FRAC(1,1),
4,
{ 0, 1, 2, 3 },
{ 8, 12, 0, 4, 24, 28, 16, 20, 40, 44, 32, 36, 56, 60, 48, 52 },
{ 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64,
8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64 },
128*8
};
static struct GfxDecodeInfo rainbow_gfxdecodeinfo[] =
{
{ REGION_GFX2, 0x000000, &spritelayout, 0, 0x80 },
{ REGION_GFX1, 0x000000, &tilelayout, 0, 0x80 },
{ -1 }
};
static struct GfxLayout jumping_tilelayout =
{
8,8,
16384,
4,
{ 0, 0x20000*8, 0x40000*8, 0x60000*8 },
{ 0, 1, 2, 3, 4, 5, 6, 7 },
{ 0, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
8*8
};
static struct GfxLayout jumping_spritelayout =
{
16,16,
5120,
4,
{ 0x78000*8,0x50000*8,0x28000*8,0 },
{ 0, 1, 2, 3, 4, 5, 6, 7, 8*16+0, 8*16+1, 8*16+2, 8*16+3, 8*16+4, 8*16+5, 8*16+6, 8*16+7 },
{ 0, 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
};
static struct GfxDecodeInfo jumping_gfxdecodeinfo[] =
{
{ REGION_GFX2, 0, &jumping_spritelayout, 0, 0x80 },
{ REGION_GFX1, 0, &jumping_tilelayout, 0, 0x80 },
{ -1 }
};
static void irqhandler(int irq)
{
cpu_set_irq_line(1,0,irq ? ASSERT_LINE : CLEAR_LINE);
}
static struct YM2151interface ym2151_interface =
{
1,
4000000,
{ YM3012_VOL(50,MIXER_PAN_LEFT,50,MIXER_PAN_RIGHT) },
{ irqhandler },
{ bankswitch_w }
};
static struct YM2203interface ym2203_interface =
{
2,
3579545,
{ YM2203_VOL(30,30), YM2203_VOL(30,30) },
{ 0 },
{ 0 },
{ 0 },
{ 0 },
{ 0 }
};
static MACHINE_DRIVER_START( rainbow )
MDRV_CPU_ADD(M68000, 8000000)
MDRV_CPU_MEMORY(rainbow_readmem,rainbow_writemem)
MDRV_CPU_VBLANK_INT(irq4_line_hold,1)
MDRV_CPU_ADD(Z80, 4000000)
MDRV_CPU_MEMORY(rainbow_s_readmem,rainbow_s_writemem)
MDRV_FRAMES_PER_SECOND(60)
MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
MDRV_INTERLEAVE(10)
MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
MDRV_SCREEN_SIZE(40*8, 32*8)
MDRV_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1)
MDRV_GFXDECODE(rainbow_gfxdecodeinfo)
MDRV_PALETTE_LENGTH(8192)
MDRV_VIDEO_START(rainbow)
MDRV_VIDEO_UPDATE(rainbow)
MDRV_SOUND_ADD(YM2151, ym2151_interface)
MACHINE_DRIVER_END
static MACHINE_DRIVER_START( jumping )
MDRV_CPU_ADD(M68000, 8000000)
MDRV_CPU_MEMORY(jumping_readmem,jumping_writemem)
MDRV_CPU_VBLANK_INT(irq4_line_hold,1)
MDRV_CPU_ADD(Z80, 4000000)
MDRV_CPU_MEMORY(jumping_sound_readmem,jumping_sound_writemem)
MDRV_FRAMES_PER_SECOND(60)
MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
MDRV_INTERLEAVE(10)
MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
MDRV_SCREEN_SIZE(40*8, 32*8)
MDRV_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1)
MDRV_GFXDECODE(jumping_gfxdecodeinfo)
MDRV_PALETTE_LENGTH(8192)
MDRV_VIDEO_START(jumping)
MDRV_VIDEO_UPDATE(jumping)
MDRV_SOUND_ADD(YM2203, ym2203_interface)
MACHINE_DRIVER_END
ROM_START( rainbow )
ROM_REGION( 0x80000, REGION_CPU1, 0 )
ROM_LOAD16_BYTE( "b22-10-1.19", 0x00000, 0x10000, CRC(e34a50ca) SHA1(17a92cd7182db1e18000b1ae689758fcfd70fe16) )
ROM_LOAD16_BYTE( "b22-11-1.20", 0x00001, 0x10000, CRC(6a31a093) SHA1(1e99ae47811c0d3774d138dab02ac50bc1b92173) )
ROM_LOAD16_BYTE( "b22-08-1.21", 0x20000, 0x10000, CRC(15d6e17a) SHA1(7b0339180239e75adf1437aee276b652a1bfee51) )
ROM_LOAD16_BYTE( "b22-09-1.22", 0x20001, 0x10000, CRC(454e66bc) SHA1(54d57dee90da04101f4b1473770b38001d63230f) )
ROM_LOAD16_BYTE( "b22-03.23", 0x40000, 0x20000, CRC(3ebb0fb8) SHA1(1b41b305623d121255eb70cb992e4d9da13abd82) )
ROM_LOAD16_BYTE( "b22-04.24", 0x40001, 0x20000, CRC(91625e7f) SHA1(765afd973d9b82bb496b04beca284bf2769d6e6f) )
ROM_REGION( 0x1c000, REGION_CPU2, 0 )
ROM_LOAD( "b22-14.43", 0x00000, 0x4000, CRC(113c1a5b) SHA1(effa2adf54a6be78b2d4baf3a47529342fb0d895) )
ROM_CONTINUE( 0x10000, 0xc000 )
ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE )
ROM_LOAD( "b22-01.2", 0x00000, 0x80000, CRC(b76c9168) SHA1(e924be0c8294b930488bb04583784254a840a52e) )
ROM_REGION( 0xa0000, REGION_GFX2, ROMREGION_DISPOSE )
ROM_LOAD( "b22-01.5", 0x00000, 0x80000, CRC(1b87ecf0) SHA1(37a463184f4064fe0565367236e289d57639614c) )
ROM_LOAD16_BYTE( "b22-12.7", 0x80000, 0x10000, CRC(67a76dc6) SHA1(626ee684eb3ea859c695ffe03344ccaa442da4af) )
ROM_LOAD16_BYTE( "b22-13.6", 0x80001, 0x10000, CRC(2fda099f) SHA1(a1e27a4497f6733608be924d69d965b19f725b99) )
ROM_END
ROM_START( rainbowo )
ROM_REGION( 0x80000, REGION_CPU1, 0 )
ROM_LOAD16_BYTE( "b22-10.19", 0x00000, 0x10000, CRC(3b013495) SHA1(fc89f401a80b9bde174df8a257bb7fad4937c838) )
ROM_LOAD16_BYTE( "b22-11.20", 0x00001, 0x10000, CRC(80041a3d) SHA1(619d71a2bef5fd898a15d37d8016850f832428c3) )
ROM_LOAD16_BYTE( "b22-08.21", 0x20000, 0x10000, CRC(962fb845) SHA1(1c5581e697902ee5cde0fb841ef05eade04a901b) )
ROM_LOAD16_BYTE( "b22-09.22", 0x20001, 0x10000, CRC(f43efa27) SHA1(f92bcdbe9bbc1c200946c10605846bb406d8e963) )
ROM_LOAD16_BYTE( "b22-03.23", 0x40000, 0x20000, CRC(3ebb0fb8) SHA1(1b41b305623d121255eb70cb992e4d9da13abd82) )
ROM_LOAD16_BYTE( "b22-04.24", 0x40001, 0x20000, CRC(91625e7f) SHA1(765afd973d9b82bb496b04beca284bf2769d6e6f) )
ROM_REGION( 0x1c000, REGION_CPU2, 0 )
ROM_LOAD( "b22-14.43", 0x00000, 0x4000, CRC(113c1a5b) SHA1(effa2adf54a6be78b2d4baf3a47529342fb0d895) )
ROM_CONTINUE( 0x10000, 0xc000 )
ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE )
ROM_LOAD( "b22-01.2", 0x00000, 0x80000, CRC(b76c9168) SHA1(e924be0c8294b930488bb04583784254a840a52e) )
ROM_REGION( 0xa0000, REGION_GFX2, ROMREGION_DISPOSE )
ROM_LOAD( "b22-01.5", 0x00000, 0x80000, CRC(1b87ecf0) SHA1(37a463184f4064fe0565367236e289d57639614c) )
ROM_LOAD16_BYTE( "b22-12.7", 0x80000, 0x10000, CRC(67a76dc6) SHA1(626ee684eb3ea859c695ffe03344ccaa442da4af) )
ROM_LOAD16_BYTE( "b22-13.6", 0x80001, 0x10000, CRC(2fda099f) SHA1(a1e27a4497f6733608be924d69d965b19f725b99) )
ROM_END
ROM_START( rainbowe )
ROM_REGION( 0x80000, REGION_CPU1, 0 )
ROM_LOAD16_BYTE( "b39-01.19", 0x00000, 0x10000, CRC(50690880) SHA1(88cd8739eaa6e4e5988be225c31d2a6605173d39) )
ROM_LOAD16_BYTE( "b39-02.20", 0x00001, 0x10000, CRC(4dead71f) SHA1(03e9df33fc8fc64d6eeb1c3a763acac00b10c071) )
ROM_LOAD16_BYTE( "b39-03.21", 0x20000, 0x10000, CRC(4a4cb785) SHA1(6ba7de3901a001cbb31713664ccb68b943a5578f) )
ROM_LOAD16_BYTE( "b39-04.22", 0x20001, 0x10000, CRC(4caa53bd) SHA1(302c668b77de41ffef96a3ca9d94877b4affc466) )
ROM_LOAD16_BYTE( "b22-03.23", 0x40000, 0x20000, CRC(3ebb0fb8) SHA1(1b41b305623d121255eb70cb992e4d9da13abd82) )
ROM_LOAD16_BYTE( "b22-04.24", 0x40001, 0x20000, CRC(91625e7f) SHA1(765afd973d9b82bb496b04beca284bf2769d6e6f) )
ROM_REGION( 0x1c000, REGION_CPU2, 0 )
ROM_LOAD( "b22-14.43", 0x00000, 0x4000, CRC(113c1a5b) SHA1(effa2adf54a6be78b2d4baf3a47529342fb0d895) )
ROM_CONTINUE( 0x10000, 0xc000 )
ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE )
ROM_LOAD( "b22-01.2", 0x00000, 0x80000, CRC(b76c9168) SHA1(e924be0c8294b930488bb04583784254a840a52e) )
ROM_REGION( 0xa0000, REGION_GFX2, ROMREGION_DISPOSE )
ROM_LOAD( "b22-01.5", 0x00000, 0x80000, CRC(1b87ecf0) SHA1(37a463184f4064fe0565367236e289d57639614c) )
ROM_LOAD16_BYTE( "b22-12.7", 0x80000, 0x10000, CRC(67a76dc6) SHA1(626ee684eb3ea859c695ffe03344ccaa442da4af) )
ROM_LOAD16_BYTE( "b22-13.6", 0x80001, 0x10000, CRC(2fda099f) SHA1(a1e27a4497f6733608be924d69d965b19f725b99) )
ROM_END
ROM_START( jumping )
ROM_REGION( 0xa0000, REGION_CPU1, 0 )
ROM_LOAD16_BYTE( "jb1_h4", 0x00000, 0x10000, CRC(3fab6b31) SHA1(57803478949cb62f7eab2ef9be08b13aa2237dbc) )
ROM_LOAD16_BYTE( "jb1_h8", 0x00001, 0x10000, CRC(8c878827) SHA1(4a54a217b7c442305c3ce9298aa36ae225382444) )
ROM_LOAD16_BYTE( "jb1_i4", 0x20000, 0x10000, CRC(443492cf) SHA1(fc3809d784d611df4fd446ca2443eebdf4f0bfd7) )
ROM_LOAD16_BYTE( "jb1_i8", 0x20001, 0x10000, CRC(ed33bae1) SHA1(24ade29f3fdd45aa772ccf9c046294baa6eae7a2) )
ROM_LOAD16_BYTE( "b22-03.23", 0x40000, 0x20000, CRC(3ebb0fb8) SHA1(1b41b305623d121255eb70cb992e4d9da13abd82) )
ROM_LOAD16_BYTE( "b22-04.24", 0x40001, 0x20000, CRC(91625e7f) SHA1(765afd973d9b82bb496b04beca284bf2769d6e6f) )
ROM_LOAD16_BYTE( "jb1_f89", 0x80001, 0x10000, CRC(0810d327) SHA1(fe91ac02e617bde413dc8a20b7cbcaf3e20aeb28) )
ROM_REGION( 0x14000, REGION_CPU2, 0 )
ROM_LOAD( "jb1_cd67", 0x00000, 0x8000, CRC(8527c00e) SHA1(86e3824caca39aca4ca4df63bb4474adacfc4c53) )
ROM_CONTINUE( 0x10000, 0x4000 )
ROM_CONTINUE( 0x0c000, 0x4000 )
ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE )
ROM_LOAD( "jb2_ic8", 0x00000, 0x10000, CRC(65b76309) SHA1(1e345726e137f4c56d4bf239651c986fd53a16c3) )
ROM_LOAD( "jb2_ic7", 0x10000, 0x10000, CRC(43a94283) SHA1(d6a05cbc7b996a8e7f1520563f6fada9a59021a4) )
ROM_LOAD( "jb2_ic10", 0x20000, 0x10000, CRC(e61933fb) SHA1(02bc0e1a7a3ce9e15fb83b28ce8fafb0b8d80ebd) )
ROM_LOAD( "jb2_ic9", 0x30000, 0x10000, CRC(ed031eb2) SHA1(905be4d890ff7bb8a4d8ad85b2a11483fb4d67eb) )
ROM_LOAD( "jb2_ic12", 0x40000, 0x10000, CRC(312700ca) SHA1(c79edc9c25f364d0afd79aaa21cfe2fe46044314) )
ROM_LOAD( "jb2_ic11", 0x50000, 0x10000, CRC(de3b0b88) SHA1(14b8871821e4c0abbb9967c5aa282cf4e67884fe) )
ROM_LOAD( "jb2_ic14", 0x60000, 0x10000, CRC(9fdc6c8e) SHA1(ff4e1a98dc982bce2f9d235cac62c7166f477f64) )
ROM_LOAD( "jb2_ic13", 0x70000, 0x10000, CRC(06226492) SHA1(834280ec49e61a0c9c6b6fe2033e1b20bd1bffbf) )
ROM_REGION( 0xa0000, REGION_GFX2, ROMREGION_DISPOSE )
ROM_LOAD( "jb2_ic62", 0x00000, 0x10000, CRC(8548db6c) SHA1(675cd301259d5ed16098a38ac58b27b5ccd91264) )
ROM_LOAD( "jb2_ic61", 0x10000, 0x10000, CRC(37c5923b) SHA1(c83ef45564c56ef62d7019aecbd79dccc671deee) )
ROM_LOAD( "jb2_ic60", 0x20000, 0x08000, CRC(662a2f1e) SHA1(1c5e8b1f0623e64faf9cd60f9653fc5957191a9b) )
ROM_LOAD( "jb2_ic78", 0x28000, 0x10000, CRC(925865e1) SHA1(457de50bc03e8b949ac7d46ae4188201e87574a8) )
ROM_LOAD( "jb2_ic77", 0x38000, 0x10000, CRC(b09695d1) SHA1(e6d315f9befb7b47f42668d573a1102e52d78aea) )
ROM_LOAD( "jb2_ic76", 0x48000, 0x08000, CRC(41937743) SHA1(890c832a7cf87e6fe749d4824b02d57e10872bdf) )
ROM_LOAD( "jb2_ic93", 0x50000, 0x10000, CRC(f644eeab) SHA1(9d45e9dfb08e8c90b4b10f5dc383fa4732161a81) )
ROM_LOAD( "jb2_ic92", 0x60000, 0x10000, CRC(3fbccd33) SHA1(137880a564573db1f9e6de5c730af6709ca301f3) )
ROM_LOAD( "jb2_ic91", 0x70000, 0x08000, CRC(d886c014) SHA1(9327c332c98a81451e9e0624344d2601ef06e490) )
ROM_LOAD( "jb2_i121", 0x78000, 0x10000, CRC(93df1e4d) SHA1(b100d265b973254ec9cd44b6c32f62b4bac3b732) )
ROM_LOAD( "jb2_i120", 0x88000, 0x10000, CRC(7c4e893b) SHA1(eceecb38554157ee24d228a2c722dad750a6a07d) )
ROM_LOAD( "jb2_i119", 0x98000, 0x08000, CRC(7e1d58d8) SHA1(d586a018c3ec3e6e6a39992170d324361e03c68a) )
ROM_END
static DRIVER_INIT( rainbow )
{
rainbow_cchip_init(0);
}
static DRIVER_INIT( rainbowe )
{
rainbow_cchip_init(1);
}
static DRIVER_INIT( jumping )
{
int i;
for (i = 0;i < memory_region_length(REGION_GFX2);i++)
memory_region(REGION_GFX2)[i] ^= 0xff;
state_save_register_int("jumping", 0, "sound", &jumping_latch);
}
GAME( 1987, rainbow, 0, rainbow, rainbow, rainbow, ROT0, "Taito Corporation", "Rainbow Islands (new version)" )
GAME( 1987, rainbowo, rainbow, rainbow, rainbow, rainbow, ROT0, "Taito Corporation", "Rainbow Islands (old version)" )
GAME( 1988, rainbowe, rainbow, rainbow, rainbow, rainbowe, ROT0, "Taito Corporation", "Rainbow Islands (Extra)" )
GAME( 1989, jumping, rainbow, jumping, jumping, jumping, ROT0, "bootleg", "Jumping" )