diff options
Diffstat (limited to 'src/mame/drivers/cabal.c')
-rw-r--r-- | src/mame/drivers/cabal.c | 863 |
1 files changed, 863 insertions, 0 deletions
diff --git a/src/mame/drivers/cabal.c b/src/mame/drivers/cabal.c new file mode 100644 index 00000000000..5e2fe23fb74 --- /dev/null +++ b/src/mame/drivers/cabal.c @@ -0,0 +1,863 @@ +/****************************************************************** + +Cabal (c)1998 Tad + +driver by Carlos A. Lozano Baides + +68000 + Z80 + +The original uses 2xYM3931 for sound +The bootleg uses YM2151 + 2xZ80 used as ADPCM players + +Coin inputs are handled by the sound CPU, so they don't work with sound +disabled. Use the service switch instead. + + +MEMORY MAP +0x00000 - 0x3ffff ROM +0x40000 - 0x4ffff RAM +[of which: 0x43800 - 0x43fff VRAM (Sprites)] +0x60000 - 0x607ff VRAM (Tiles) +0x80000 - 0x803ff VRAM (Background) +0xa0000 - 0xa000f Input Ports +0xc0040 - 0xc0040 Watchdog?? +0xc0080 - 0xc0080 Screen Flip (+ others?) +0xe0000 - 0xe07ff COLORRAM (----BBBBGGGGRRRR) +0xe8000 - 0xe800f Communication with sound CPU (also coins) + +VRAM (Background) +0x80000 - 0x801ff (16x16 of 16x16 tiles, 2 bytes per tile) +0x80200 - 0x803ff unused foreground layer?? + +VRAM (Text) +0x60000 - 0x607ff (32x32 of 8x8 tiles, 2 bytes per tile) + +VRAM (Sprites) +0x43800 - 0x43bff (128 sprites, 8 bytes every sprite) + +COLORRAM (Colors) +0xe0000 - 0xe07ff (1024 colors, ----BBBBGGGGRRRR) + +******************************************************************/ + +#include "driver.h" +#include "streams.h" +#include "cpu/z80/z80.h" +#include "audio/seibu.h" +#include "sound/2151intf.h" +#include "sound/msm5205.h" + +extern VIDEO_START( cabal ); +extern VIDEO_UPDATE( cabal ); +WRITE16_HANDLER( cabal_flipscreen_w ); +WRITE16_HANDLER( cabal_background_videoram16_w ); +WRITE16_HANDLER( cabal_text_videoram16_w ); + + +static int cabal_sound_command1, cabal_sound_command2; + +static MACHINE_RESET( cabalbl ) +{ + cabal_sound_command1 = cabal_sound_command2 = 0xff; +} + + +/******************************************************************************************/ + +static WRITE16_HANDLER( cabalbl_sndcmd_w ) +{ + switch (offset) + { + case 0x0: + cabal_sound_command1 = data; + break; + + case 0x1: /* ?? */ + cabal_sound_command2 = data & 0xff; + break; + } +} + + + +static int last[4]; + +static WRITE16_HANDLER( track_reset_w ) +{ + int i; + + for (i = 0;i < 4;i++) + last[i] = readinputport(3+i); +} + +static READ16_HANDLER( track_r ) +{ + switch (offset) + { + default: + case 0: return (( readinputport(3) - last[0]) & 0x00ff) | (((readinputport(5) - last[2]) & 0x00ff) << 8); /* X lo */ + case 1: return (((readinputport(3) - last[0]) & 0xff00) >> 8) | (( readinputport(5) - last[2]) & 0xff00); /* X hi */ + case 2: return (( readinputport(4) - last[1]) & 0x00ff) | (((readinputport(6) - last[3]) & 0x00ff) << 8); /* Y lo */ + case 3: return (((readinputport(4) - last[1]) & 0xff00) >> 8) | (( readinputport(6) - last[3]) & 0xff00); /* Y hi */ + } +} + + +static WRITE16_HANDLER( cabal_sound_irq_trigger_word_w ) +{ + seibu_main_word_w(4,data,mem_mask); + + /* spin for a while to let the Z80 read the command, otherwise coins "stick" */ + cpu_spinuntil_time(ATTOTIME_IN_USEC(50)); +} + +static WRITE16_HANDLER( cabalbl_sound_irq_trigger_word_w ) +{ + cpunum_set_input_line( 1, INPUT_LINE_NMI, PULSE_LINE ); +} + + + +static ADDRESS_MAP_START( readmem_cpu, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x00000, 0x3ffff) AM_READ(MRA16_ROM) + AM_RANGE(0x40000, 0x437ff) AM_READ(MRA16_RAM) + AM_RANGE(0x43800, 0x43fff) AM_READ(MRA16_RAM) + AM_RANGE(0x44000, 0x4ffff) AM_READ(MRA16_RAM) + AM_RANGE(0x60000, 0x607ff) AM_READ(MRA16_RAM) + AM_RANGE(0x80000, 0x801ff) AM_READ(MRA16_RAM) + AM_RANGE(0x80200, 0x803ff) AM_READ(MRA16_RAM) + AM_RANGE(0xa0000, 0xa0001) AM_READ(input_port_0_word_r) + AM_RANGE(0xa0008, 0xa000f) AM_READ(track_r) + AM_RANGE(0xa0010, 0xa0011) AM_READ(input_port_1_word_r) + AM_RANGE(0xe0000, 0xe07ff) AM_READ(MRA16_RAM) + AM_RANGE(0xe8000, 0xe800d) AM_READ(seibu_main_word_r) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( writemem_cpu, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x00000, 0x3ffff) AM_WRITE(MWA16_ROM) + AM_RANGE(0x40000, 0x437ff) AM_WRITE(MWA16_RAM) + AM_RANGE(0x43800, 0x43fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) + AM_RANGE(0x44000, 0x4ffff) AM_WRITE(MWA16_RAM) + AM_RANGE(0x60000, 0x607ff) AM_WRITE(cabal_text_videoram16_w) AM_BASE(&colorram16) + AM_RANGE(0x80000, 0x801ff) AM_WRITE(cabal_background_videoram16_w) AM_BASE(&videoram16) AM_SIZE(&videoram_size) + AM_RANGE(0x80200, 0x803ff) AM_WRITE(MWA16_RAM) + AM_RANGE(0xc0000, 0xc0001) AM_WRITE(track_reset_w) + AM_RANGE(0xc0040, 0xc0041) AM_WRITE(MWA16_NOP) /* ??? */ + AM_RANGE(0xc0080, 0xc0081) AM_WRITE(cabal_flipscreen_w) + AM_RANGE(0xe0000, 0xe07ff) AM_WRITE(paletteram16_xxxxBBBBGGGGRRRR_word_w) AM_BASE(&paletteram16) + AM_RANGE(0xe8008, 0xe8009) AM_WRITE(cabal_sound_irq_trigger_word_w) // fix coin insertion + AM_RANGE(0xe8000, 0xe800d) AM_WRITE(seibu_main_word_w) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( cabalbl_readmem_cpu, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x00000, 0x3ffff) AM_READ(MRA16_ROM) + AM_RANGE(0x40000, 0x437ff) AM_READ(MRA16_RAM) + AM_RANGE(0x43800, 0x43fff) AM_READ(MRA16_RAM) + AM_RANGE(0x44000, 0x4ffff) AM_READ(MRA16_RAM) + AM_RANGE(0x60000, 0x607ff) AM_READ(MRA16_RAM) + AM_RANGE(0x80000, 0x801ff) AM_READ(MRA16_RAM) + AM_RANGE(0x80200, 0x803ff) AM_READ(MRA16_RAM) + AM_RANGE(0xa0000, 0xa0001) AM_READ(input_port_0_word_r) + AM_RANGE(0xa0008, 0xa0009) AM_READ(input_port_1_word_r) + AM_RANGE(0xa0010, 0xa0011) AM_READ(input_port_2_word_r) + AM_RANGE(0xe0000, 0xe07ff) AM_READ(MRA16_RAM) + AM_RANGE(0xe8004, 0xe8005) AM_READ(soundlatch2_word_r) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( cabalbl_writemem_cpu, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x00000, 0x3ffff) AM_WRITE(MWA16_ROM) + AM_RANGE(0x40000, 0x437ff) AM_WRITE(MWA16_RAM) + AM_RANGE(0x43800, 0x43fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) + AM_RANGE(0x44000, 0x4ffff) AM_WRITE(MWA16_RAM) + AM_RANGE(0x60000, 0x607ff) AM_WRITE(cabal_text_videoram16_w) AM_BASE(&colorram16) + AM_RANGE(0x80000, 0x801ff) AM_WRITE(cabal_background_videoram16_w) AM_BASE(&videoram16) AM_SIZE(&videoram_size) + AM_RANGE(0x80200, 0x803ff) AM_WRITE(MWA16_RAM) + AM_RANGE(0xc0040, 0xc0041) AM_WRITE(MWA16_NOP) /* ??? */ + AM_RANGE(0xc0080, 0xc0081) AM_WRITE(cabal_flipscreen_w) + AM_RANGE(0xe0000, 0xe07ff) AM_WRITE(paletteram16_xxxxBBBBGGGGRRRR_word_w) AM_BASE(&paletteram16) + AM_RANGE(0xe8000, 0xe8003) AM_WRITE(cabalbl_sndcmd_w) + AM_RANGE(0xe8008, 0xe8009) AM_WRITE(cabalbl_sound_irq_trigger_word_w) +ADDRESS_MAP_END + +/*********************************************************************/ + + +static READ8_HANDLER( cabalbl_snd2_r ) +{ + return cabal_sound_command2; +} + +static READ8_HANDLER( cabalbl_snd1_r ) +{ + return cabal_sound_command1; +} + +static WRITE8_HANDLER( cabalbl_coin_w ) +{ + coin_counter_w(0, data & 1); + coin_counter_w(1, data & 2); + + //data & 0x40? video enable? +} + +static ADDRESS_MAP_START( readmem_sound, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x1fff) AM_READ(MRA8_ROM) + AM_RANGE(0x2000, 0x27ff) AM_READ(MRA8_RAM) + AM_RANGE(0x4009, 0x4009) AM_READ(YM2151_status_port_0_r) + AM_RANGE(0x4010, 0x4011) AM_READ(seibu_soundlatch_r) + AM_RANGE(0x4012, 0x4012) AM_READ(seibu_main_data_pending_r) + AM_RANGE(0x4013, 0x4013) AM_READ(input_port_2_r) + AM_RANGE(0x8000, 0xffff) AM_READ(MRA8_ROM) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( writemem_sound, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x1fff) AM_WRITE(MWA8_ROM) + AM_RANGE(0x2000, 0x27ff) AM_WRITE(MWA8_RAM) + AM_RANGE(0x4001, 0x4001) AM_WRITE(seibu_irq_clear_w) + AM_RANGE(0x4002, 0x4002) AM_WRITE(seibu_rst10_ack_w) + AM_RANGE(0x4003, 0x4003) AM_WRITE(seibu_rst18_ack_w) + AM_RANGE(0x4005, 0x4006) AM_WRITE(seibu_adpcm_adr_1_w) + AM_RANGE(0x401a, 0x401a) AM_WRITE(seibu_adpcm_ctl_1_w) + AM_RANGE(0x4008, 0x4008) AM_WRITE(YM2151_register_port_0_w) + AM_RANGE(0x4009, 0x4009) AM_WRITE(YM2151_data_port_0_w) + AM_RANGE(0x4018, 0x4019) AM_WRITE(seibu_main_data_w) + AM_RANGE(0x401b, 0x401b) AM_WRITE(seibu_coin_w) + AM_RANGE(0x6005, 0x6006) AM_WRITE(seibu_adpcm_adr_2_w) + AM_RANGE(0x601a, 0x601a) AM_WRITE(seibu_adpcm_ctl_2_w) + AM_RANGE(0x8000, 0xffff) AM_WRITE(MWA8_ROM) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( cabalbl_readmem_sound, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x1fff) AM_READ(MRA8_ROM) + AM_RANGE(0x2000, 0x2fff) AM_READ(MRA8_RAM) + AM_RANGE(0x4008, 0x4008) AM_READ(cabalbl_snd2_r) + AM_RANGE(0x400a, 0x400a) AM_READ(cabalbl_snd1_r) + AM_RANGE(0x4006, 0x4006) AM_READ(input_port_3_r) + AM_RANGE(0x400f, 0x400f) AM_READ(YM2151_status_port_0_r) + AM_RANGE(0x8000, 0xffff) AM_READ(MRA8_ROM) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( cabalbl_writemem_sound, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x1fff) AM_WRITE(MWA8_ROM) + AM_RANGE(0x2000, 0x2fff) AM_WRITE(MWA8_RAM) + AM_RANGE(0x4000, 0x4000) AM_WRITE(soundlatch3_w) + AM_RANGE(0x4002, 0x4002) AM_WRITE(soundlatch4_w) + AM_RANGE(0x4004, 0x4004) AM_WRITE(cabalbl_coin_w) + AM_RANGE(0x400c, 0x400c) AM_WRITE(soundlatch2_w) + AM_RANGE(0x400e, 0x400e) AM_WRITE(YM2151_register_port_0_w) + AM_RANGE(0x400f, 0x400f) AM_WRITE(YM2151_data_port_0_w) + AM_RANGE(0x6000, 0x6000) AM_WRITE(MWA8_NOP) /* ??? */ + AM_RANGE(0x8000, 0xffff) AM_WRITE(MWA8_ROM) +ADDRESS_MAP_END + +/* the bootleg has 2x z80 sample players */ + +static WRITE8_HANDLER( cabalbl_adpcm_0_w ) +{ + MSM5205_reset_w(0,(data>>7)&1); + /* ?? bit 6?? */ + MSM5205_data_w(0,data); + MSM5205_vclk_w(0,1); + MSM5205_vclk_w(0,0); +} + +static WRITE8_HANDLER( cabalbl_adpcm_1_w ) +{ + MSM5205_reset_w(1,(data>>7)&1); + /* ?? bit 6?? */ + MSM5205_data_w(1,data); + MSM5205_vclk_w(1,1); + MSM5205_vclk_w(1,0); +} + +static ADDRESS_MAP_START( cabalbl_talk1_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0xffff) AM_ROM AM_WRITENOP +ADDRESS_MAP_END + +static ADDRESS_MAP_START( cabalbl_talk1_portmap, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE(0x00, 0x00) AM_READ(soundlatch3_r) + AM_RANGE(0x01, 0x01) AM_WRITE(cabalbl_adpcm_0_w) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( cabalbl_talk2_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0xffff) AM_ROM AM_WRITENOP +ADDRESS_MAP_END + +static ADDRESS_MAP_START( cabalbl_talk2_portmap, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE(0x00, 0x00) AM_READ(soundlatch4_r) + AM_RANGE(0x01, 0x01) AM_WRITE(cabalbl_adpcm_1_w) +ADDRESS_MAP_END + +/***************************************************************************/ + +#define CABALDSW\ + PORT_START_TAG("DSW")\ +/* Coin Mode 1 doesn't seem quite right, all 'fractional' coinage values seem to be 4C_1C, but it could be me */\ + PORT_DIPNAME( 0x000f, 0x000f, DEF_STR( Coinage ) ) PORT_CONDITION("DSW",0x0010,PORTCOND_NOTEQUALS,0x00)\ + PORT_DIPSETTING( 0x000a, DEF_STR( 6C_1C ) ) PORT_CONDITION("DSW",0x0010,PORTCOND_NOTEQUALS,0x00)\ + PORT_DIPSETTING( 0x000b, DEF_STR( 5C_1C ) ) PORT_CONDITION("DSW",0x0010,PORTCOND_NOTEQUALS,0x00)\ + PORT_DIPSETTING( 0x000c, DEF_STR( 4C_1C ) ) PORT_CONDITION("DSW",0x0010,PORTCOND_NOTEQUALS,0x00)\ + PORT_DIPSETTING( 0x000d, DEF_STR( 3C_1C ) ) PORT_CONDITION("DSW",0x0010,PORTCOND_NOTEQUALS,0x00)\ + PORT_DIPSETTING( 0x0001, DEF_STR( 8C_3C ) ) PORT_CONDITION("DSW",0x0010,PORTCOND_NOTEQUALS,0x00)\ + PORT_DIPSETTING( 0x000e, DEF_STR( 2C_1C ) ) PORT_CONDITION("DSW",0x0010,PORTCOND_NOTEQUALS,0x00)\ + PORT_DIPSETTING( 0x0002, DEF_STR( 5C_3C ) ) PORT_CONDITION("DSW",0x0010,PORTCOND_NOTEQUALS,0x00)\ + PORT_DIPSETTING( 0x0003, DEF_STR( 3C_2C ) ) PORT_CONDITION("DSW",0x0010,PORTCOND_NOTEQUALS,0x00)\ + PORT_DIPSETTING( 0x000f, DEF_STR( 1C_1C ) ) PORT_CONDITION("DSW",0x0010,PORTCOND_NOTEQUALS,0x00)\ + PORT_DIPSETTING( 0x0004, DEF_STR( 2C_3C ) ) PORT_CONDITION("DSW",0x0010,PORTCOND_NOTEQUALS,0x00)\ + PORT_DIPSETTING( 0x0009, DEF_STR( 1C_2C ) ) PORT_CONDITION("DSW",0x0010,PORTCOND_NOTEQUALS,0x00)\ + PORT_DIPSETTING( 0x0008, DEF_STR( 1C_3C ) ) PORT_CONDITION("DSW",0x0010,PORTCOND_NOTEQUALS,0x00)\ + PORT_DIPSETTING( 0x0007, DEF_STR( 1C_4C ) ) PORT_CONDITION("DSW",0x0010,PORTCOND_NOTEQUALS,0x00)\ + PORT_DIPSETTING( 0x0006, DEF_STR( 1C_5C ) ) PORT_CONDITION("DSW",0x0010,PORTCOND_NOTEQUALS,0x00)\ + PORT_DIPSETTING( 0x0005, DEF_STR( 1C_6C ) ) PORT_CONDITION("DSW",0x0010,PORTCOND_NOTEQUALS,0x00)\ + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )PORT_CONDITION("DSW",0x0010,PORTCOND_NOTEQUALS,0x00)\ + PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Coin_A )) PORT_CONDITION("DSW",0x0010,PORTCOND_EQUALS,0x00)\ + PORT_DIPSETTING( 0x0000, DEF_STR( 5C_1C ) ) PORT_CONDITION("DSW",0x0010,PORTCOND_EQUALS,0x00)\ + PORT_DIPSETTING( 0x0001, DEF_STR( 3C_1C ) ) PORT_CONDITION("DSW",0x0010,PORTCOND_EQUALS,0x00)\ + PORT_DIPSETTING( 0x0002, DEF_STR( 2C_1C ) ) PORT_CONDITION("DSW",0x0010,PORTCOND_EQUALS,0x00)\ + PORT_DIPSETTING( 0x0003, DEF_STR( 1C_1C ) ) PORT_CONDITION("DSW",0x0010,PORTCOND_EQUALS,0x00)\ + PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Coin_B )) PORT_CONDITION("DSW",0x0010,PORTCOND_EQUALS,0x00)\ + PORT_DIPSETTING( 0x000c, DEF_STR( 1C_2C ) ) PORT_CONDITION("DSW",0x0010,PORTCOND_EQUALS,0x00)\ + PORT_DIPSETTING( 0x0008, DEF_STR( 1C_3C ) ) PORT_CONDITION("DSW",0x0010,PORTCOND_EQUALS,0x00)\ + PORT_DIPSETTING( 0x0004, DEF_STR( 1C_5C ) ) PORT_CONDITION("DSW",0x0010,PORTCOND_EQUALS,0x00)\ + PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) ) PORT_CONDITION("DSW",0x0010,PORTCOND_EQUALS,0x00)\ + PORT_DIPNAME( 0x0010, 0x0010, "Coin Mode" )\ + PORT_DIPSETTING( 0x0010, "Mode 1" )\ + PORT_DIPSETTING( 0x0000, "Mode 2" )\ + PORT_DIPNAME( 0x0020, 0x0020, "Invert Buttons" )\ + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )\ + PORT_DIPSETTING( 0x0000, DEF_STR( On ) )\ + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Flip_Screen ) )\ + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )\ + PORT_DIPSETTING( 0x0000, DEF_STR( On ) )\ + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Trackball ) )\ + PORT_DIPSETTING( 0x0080, "Small" )\ + PORT_DIPSETTING( 0x0000, "Large" )\ + PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Lives ) )\ + PORT_DIPSETTING( 0x0200, "2" )\ + PORT_DIPSETTING( 0x0300, "3" )\ + PORT_DIPSETTING( 0x0100, "5" )\ + PORT_DIPSETTING( 0x0000, "121 (Cheat)")\ + PORT_DIPNAME( 0x0c00, 0x0c00, DEF_STR( Bonus_Life ) )\ + PORT_DIPSETTING( 0x0c00, "20k 50k" )\ + PORT_DIPSETTING( 0x0800, "30k 100k" )\ + PORT_DIPSETTING( 0x0400, "50k 150k" )\ + PORT_DIPSETTING( 0x0000, "70K" )\ + PORT_DIPNAME( 0x3000, 0x2000, DEF_STR( Difficulty ) )\ + PORT_DIPSETTING( 0x3000, DEF_STR( Easy ) )\ + PORT_DIPSETTING( 0x2000, DEF_STR( Normal ) )\ + PORT_DIPSETTING( 0x1000, DEF_STR( Hard ) )\ + PORT_DIPSETTING( 0x0000, DEF_STR( Very_Hard ) )\ + PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )\ + PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )\ + PORT_DIPSETTING( 0x0000, DEF_STR( On ) )\ + PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Demo_Sounds ) )\ + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )\ + PORT_DIPSETTING( 0x8000, DEF_STR( On ) ) + +static INPUT_PORTS_START( cabalt ) + CABALDSW + + PORT_START_TAG("IN0") + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x0ff0, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START_TAG("IN1") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(4) /* read through sound cpu */ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(4) /* read through sound cpu */ + + PORT_START_TAG("IN2") + PORT_BIT( 0x0fff, 0x0000, IPT_TRACKBALL_X ) PORT_SENSITIVITY(100) PORT_KEYDELTA(30) PORT_PLAYER(1) + + PORT_START_TAG("IN3") + PORT_BIT( 0x0fff, 0x0000, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(100) PORT_KEYDELTA(30) PORT_REVERSE PORT_PLAYER(1) + + PORT_START_TAG("IN4") + PORT_BIT( 0x0fff, 0x0000, IPT_TRACKBALL_X ) PORT_SENSITIVITY(100) PORT_KEYDELTA(30) PORT_PLAYER(2) + + PORT_START_TAG("IN5") + PORT_BIT( 0x0fff, 0x0000, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(100) PORT_KEYDELTA(30) PORT_PLAYER(2) +INPUT_PORTS_END + + + +static INPUT_PORTS_START( cabalj ) + CABALDSW + + /* Since the Trackball version was produced first, and it doesn't use + the third button, Pin 24 of the JAMMA connector ('JAMMA button 3') + has no trace on the pcb. To work around this design issue the + manufacturer had to use pin 15 which is usually the test / service + button + */ + PORT_START_TAG("IN0") + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x0ff0, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) /* the 3rd button connects to the service switch */ + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START_TAG("IN1") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(4) /* read through sound cpu */ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(4) /* read through sound cpu */ + PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + /* The joystick version has a PCB marked "Joystick sub" containing a 74ls245. It plugs in the + sockets of the two D4701AC */ + PORT_START_TAG("IN2") + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN3") + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN4") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + + PORT_START_TAG("IN5") + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN ) +INPUT_PORTS_END + +static INPUT_PORTS_START( cabalbl ) + CABALDSW + + PORT_START_TAG("IN0") + PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + + PORT_START_TAG("IN1") + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x00f0, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0f00, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START_TAG("IN2") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(4) /* read through sound cpu */ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(4) /* read through sound cpu */ +INPUT_PORTS_END + +static const gfx_layout text_layout = +{ + 8,8, + RGN_FRAC(1,1), + 2, + { 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 tile_layout = +{ + 16,16, + RGN_FRAC(1,1), + 4, + { 8, 12, 0, 4 }, + { 3, 2, 1, 0, 16+3, 16+2, 16+1, 16+0, + 32*16+3, 32*16+2, 32*16+1, 32*16+0, 33*16+3, 33*16+2, 33*16+1, 33*16+0 }, + { 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 }, + 64*16 +}; + +static const gfx_layout sprite_layout = +{ + 16,16, + RGN_FRAC(1,1), + 4, + { 8, 12, 0, 4 }, + { 3, 2, 1, 0, 16+3, 16+2, 16+1, 16+0, + 32+3, 32+2, 32+1, 32+0, 48+3, 48+2, 48+1, 48+0 }, + { 30*32, 28*32, 26*32, 24*32, 22*32, 20*32, 18*32, 16*32, + 14*32, 12*32, 10*32, 8*32, 6*32, 4*32, 2*32, 0*32 }, + 64*16 +}; + + + +static GFXDECODE_START( cabal ) + GFXDECODE_ENTRY( REGION_GFX1, 0x000000, text_layout, 0, 1024/4 ) + GFXDECODE_ENTRY( REGION_GFX2, 0x000000, tile_layout, 32*16, 16 ) + GFXDECODE_ENTRY( REGION_GFX3, 0x000000, sprite_layout, 16*16, 16 ) +GFXDECODE_END + + +static struct YM2151interface ym2151_interface = +{ + seibu_ym3812_irqhandler +}; + +static void irqhandler(int irq) +{ + cpunum_set_input_line(1,0,irq ? ASSERT_LINE : CLEAR_LINE); +} + +static struct YM2151interface cabalbl_ym2151_interface = +{ + irqhandler +}; + +SEIBU_SOUND_SYSTEM_ADPCM_HARDWARE + +static struct MSM5205interface msm5205_interface_1 = +{ + 0, + MSM5205_SEX_4B +}; + +static struct MSM5205interface msm5205_interface_2 = +{ + 0, + MSM5205_SEX_4B +}; + +static MACHINE_DRIVER_START( cabal ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 12000000) /* 12 MHz */ + MDRV_CPU_PROGRAM_MAP(readmem_cpu,writemem_cpu) + MDRV_CPU_VBLANK_INT(irq1_line_hold,1) + + MDRV_CPU_ADD(Z80, 4000000) + /* audio CPU */ /* 4 MHz */ + MDRV_CPU_PROGRAM_MAP(readmem_sound,writemem_sound) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) + + MDRV_MACHINE_RESET(seibu_sound_1) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(256, 256) + MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) + MDRV_GFXDECODE(cabal) + MDRV_PALETTE_LENGTH(1024) + + MDRV_VIDEO_START(cabal) + MDRV_VIDEO_UPDATE(cabal) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(YM2151, 3579580) + MDRV_SOUND_CONFIG(ym2151_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS,"mono", 0.80) + + MDRV_SOUND_ADD(CUSTOM, 8000) + MDRV_SOUND_CONFIG(adpcm_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS,"mono", 0.40) + + + MDRV_SOUND_ADD(CUSTOM, 8000) + MDRV_SOUND_CONFIG(adpcm_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS,"mono", 0.40) +MACHINE_DRIVER_END + + +/* the bootleg has different sound hardware (2 extra Z80s for ADPCM playback) */ +static MACHINE_DRIVER_START( cabalbl ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 12000000) /* 12 MHz */ + MDRV_CPU_PROGRAM_MAP(cabalbl_readmem_cpu,cabalbl_writemem_cpu) + MDRV_CPU_VBLANK_INT(irq1_line_hold,1) + + MDRV_CPU_ADD(Z80, 4000000) + MDRV_CPU_PROGRAM_MAP(cabalbl_readmem_sound,cabalbl_writemem_sound) + + /* there are 2x z80s for the ADPCM */ + MDRV_CPU_ADD(Z80, 4000000) + MDRV_CPU_PROGRAM_MAP(cabalbl_talk1_map,0) + MDRV_CPU_IO_MAP(cabalbl_talk1_portmap,0) + MDRV_CPU_PERIODIC_INT(irq0_line_hold,8000) + + MDRV_CPU_ADD(Z80, 4000000) + MDRV_CPU_PROGRAM_MAP(cabalbl_talk2_map,0) + MDRV_CPU_IO_MAP(cabalbl_talk2_portmap,0) + MDRV_CPU_PERIODIC_INT(irq0_line_hold,8000) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) + MDRV_INTERLEAVE(10) + + MDRV_MACHINE_RESET(cabalbl) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(256, 256) + MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) + MDRV_GFXDECODE(cabal) + MDRV_PALETTE_LENGTH(1024) + + MDRV_VIDEO_START(cabal) + MDRV_VIDEO_UPDATE(cabal) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(YM2151, 3579580) + MDRV_SOUND_CONFIG(cabalbl_ym2151_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS,"mono", 0.80) + + MDRV_SOUND_ADD(MSM5205, 384000) + MDRV_SOUND_CONFIG(msm5205_interface_1) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60) + + MDRV_SOUND_ADD(MSM5205, 384000) + MDRV_SOUND_CONFIG(msm5205_interface_2) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60) +MACHINE_DRIVER_END + +ROM_START( cabal ) + ROM_REGION( 0x50000, REGION_CPU1, 0 ) /* 64k for cpu code */ + ROM_LOAD16_BYTE( "13.7h", 0x00000, 0x10000, CRC(00abbe0c) SHA1(bacf17444abfb4f56248ff56e37b0aa2b1a3800d) ) + ROM_LOAD16_BYTE( "11.6h", 0x00001, 0x10000, CRC(44736281) SHA1(1d6da95ef96d9c02aea70791e1cb87b70097d5ed) ) + ROM_LOAD16_BYTE( "12.7j", 0x20000, 0x10000, CRC(d763a47c) SHA1(146d8082a404b6eddaf2dc9ba41a997949c17f8a) ) + ROM_LOAD16_BYTE( "10.6j", 0x20001, 0x10000, CRC(96d5e8af) SHA1(ed7d854f08e87db5ae6cf526eafa029dfd2bfb9f) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for sound cpu code */ + ROM_LOAD( "4-3n", 0x0000, 0x2000, CRC(4038eff2) SHA1(0bcafc1b78c3bef9a0e9b822c482ea4a942fd180) ) + ROM_LOAD( "3-3p", 0x8000, 0x8000, CRC(d9defcbf) SHA1(f26b10b1dbe5aa6446f70fd18e5f1379455578ec) ) + + ROM_REGION( 0x4000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "5-6s", 0x00000, 0x04000, CRC(6a76955a) SHA1(733cb4b862b5dac97c2641b58f2362471e62fcf2) ) /* characters */ + + /* The Joystick versions use a sub-board instead of the mask roms + the content is the same as the mask roms */ + ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD16_BYTE( "bg_rom1.bin", 0x00000, 0x10000, CRC(1023319b) ) + ROM_LOAD16_BYTE( "bg_rom2.bin", 0x00001, 0x10000, CRC(3b6d2b09) ) + ROM_LOAD16_BYTE( "bg_rom3.bin", 0x20000, 0x10000, CRC(420b0801) ) + ROM_LOAD16_BYTE( "bg_rom4.bin", 0x20001, 0x10000, CRC(77bc7a60) ) + ROM_LOAD16_BYTE( "bg_rom5.bin", 0x40000, 0x10000, CRC(543fcb37) ) + ROM_LOAD16_BYTE( "bg_rom6.bin", 0x40001, 0x10000, CRC(0bc50075) ) + ROM_LOAD16_BYTE( "bg_rom7.bin", 0x60000, 0x10000, CRC(d28d921e) ) + ROM_LOAD16_BYTE( "bg_rom8.bin", 0x60001, 0x10000, CRC(67e4fe47) ) + + ROM_REGION( 0x80000, REGION_GFX3, ROMREGION_DISPOSE ) + ROM_LOAD16_BYTE( "sp_rom1.bin", 0x00000, 0x10000, CRC(34d3cac8) ) + ROM_LOAD16_BYTE( "sp_rom2.bin", 0x00001, 0x10000, CRC(4e49c28e) ) + ROM_LOAD16_BYTE( "sp_rom3.bin", 0x20000, 0x10000, CRC(7065e840) ) + ROM_LOAD16_BYTE( "sp_rom4.bin", 0x20001, 0x10000, CRC(6a0e739d) ) + ROM_LOAD16_BYTE( "sp_rom5.bin", 0x40000, 0x10000, CRC(0e1ec30e) ) + ROM_LOAD16_BYTE( "sp_rom6.bin", 0x40001, 0x10000, CRC(581a50c1) ) + ROM_LOAD16_BYTE( "sp_rom7.bin", 0x60000, 0x10000, CRC(55c44764) ) + ROM_LOAD16_BYTE( "sp_rom8.bin", 0x60001, 0x10000, CRC(702735c9) ) + + ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "2-1s", 0x00000, 0x10000, CRC(850406b4) SHA1(23ac1650c6d6f35607a5264b3aa89868401a645a) ) + ROM_LOAD( "1-1u", 0x10000, 0x10000, CRC(8b3e0789) SHA1(b1450db1b1bada237c90930623e4def321099f13) ) +ROM_END + +ROM_START( cabala ) + ROM_REGION( 0x50000, REGION_CPU1, 0 ) /* 64k for cpu code */ + ROM_LOAD16_BYTE( "epr-a-9.7h", 0x00000, 0x10000, CRC(00abbe0c) SHA1(bacf17444abfb4f56248ff56e37b0aa2b1a3800d) ) + ROM_LOAD16_BYTE( "epr-a-7.6h", 0x00001, 0x10000, CRC(c89608db) SHA1(a56e77526227af5b693eea9ef74da0d9d57cc55c) ) + ROM_LOAD16_BYTE( "epr-a-8.7k", 0x20000, 0x08000, CRC(fe84788a) SHA1(29c49ebbe62357c27befcdcc4c19841a8bf32b2d) ) + ROM_RELOAD(0x30000,0x08000) + ROM_LOAD16_BYTE( "epr-a-6.6k", 0x20001, 0x08000, CRC(81eb1355) SHA1(bbf926d40164d78319e982da0e8fb8ec4d4f8b87) ) + ROM_RELOAD(0x30001,0x08000) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for sound cpu code */ + ROM_LOAD( "epr-a-4.3n", 0x0000, 0x2000, CRC(4038eff2) SHA1(0bcafc1b78c3bef9a0e9b822c482ea4a942fd180) ) + ROM_LOAD( "epr-a-3.3p", 0x8000, 0x4000, CRC(c0097c55) SHA1(874f813c1b466dab2d15a707e340b9bdb200246c) ) + + ROM_REGION( 0x8000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "epr-a-5.6s", 0x00000, 0x08000, CRC(189033fd) SHA1(814f0cbc5f72345c04922d6d7c986f99d57335fa) ) /* characters */ + + ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "tad-2.7s", 0x00000, 0x80000, CRC(13ca7ae1) SHA1(b26bb4876a6518e3809e0fa4d442616508b3e7e8) ) /* tiles */ + + ROM_REGION( 0x80000, REGION_GFX3, ROMREGION_DISPOSE ) + ROM_LOAD( "tad-1.5e", 0x00000, 0x80000, CRC(8324a7fe) SHA1(aed4470df35ec18e65e35bddc9c217a5019fdcbf) ) /* sprites */ + + ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "epr-a-2.1s", 0x00000, 0x10000, CRC(850406b4) SHA1(23ac1650c6d6f35607a5264b3aa89868401a645a) ) + ROM_LOAD( "epr-a-1.1u", 0x10000, 0x10000, CRC(8b3e0789) SHA1(b1450db1b1bada237c90930623e4def321099f13) ) +ROM_END + +ROM_START( cabalus ) + ROM_REGION( 0x50000, REGION_CPU1, 0 ) /* 64k for cpu code */ + ROM_LOAD16_BYTE( "h7_512.bin", 0x00000, 0x10000, CRC(8fe16fb4) SHA1(fedb2d0c6c21516f68cfa99093772fe8fa862389) ) + ROM_LOAD16_BYTE( "h6_512.bin", 0x00001, 0x10000, CRC(6968101c) SHA1(d65005ac235dae5c32bbcd182cb365e8fa067fe7) ) + ROM_LOAD16_BYTE( "k7_512.bin", 0x20000, 0x10000, CRC(562031a2) SHA1(ed5ef50a66c7797a7f345e479162cf83d6777f7c) ) + ROM_LOAD16_BYTE( "k6_512.bin", 0x20001, 0x10000, CRC(4fda2856) SHA1(a213cb7443cdccbad3f2610e8d42b2e149cbedb9) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for sound cpu code */ + ROM_LOAD( "4-3n", 0x0000, 0x2000, CRC(4038eff2) SHA1(0bcafc1b78c3bef9a0e9b822c482ea4a942fd180) ) + ROM_LOAD( "3-3p", 0x8000, 0x8000, CRC(d9defcbf) SHA1(f26b10b1dbe5aa6446f70fd18e5f1379455578ec) ) + + ROM_REGION( 0x4000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "t6_128.bin", 0x00000, 0x04000, CRC(1ccee214) SHA1(7c842bc1c6002ec90693160fd5407345092420bb) ) /* characters */ + + ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "tad-2.7s", 0x00000, 0x80000, CRC(13ca7ae1) SHA1(b26bb4876a6518e3809e0fa4d442616508b3e7e8) ) /* tiles */ + + ROM_REGION( 0x80000, REGION_GFX3, ROMREGION_DISPOSE ) + ROM_LOAD( "tad-1.5e", 0x00000, 0x80000, CRC(8324a7fe) SHA1(aed4470df35ec18e65e35bddc9c217a5019fdcbf) ) /* sprites */ + + ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* Samples? */ + ROM_LOAD( "2-1s", 0x00000, 0x10000, CRC(850406b4) SHA1(23ac1650c6d6f35607a5264b3aa89868401a645a) ) + ROM_LOAD( "1-1u", 0x10000, 0x10000, CRC(8b3e0789) SHA1(b1450db1b1bada237c90930623e4def321099f13) ) + + ROM_REGION( 0x0200, REGION_PROMS, 0 ) /* unknown */ + ROM_LOAD( "prom05.8e", 0x0000, 0x0100, CRC(a94b18c2) SHA1(e7db4c1efc9e313e36eef3f53ae5b2e573a38920) ) + ROM_LOAD( "prom10.4j", 0x0100, 0x0100, CRC(261c93bc) SHA1(942470198143d584d3766f28587d1879abd912c1) ) +ROM_END + +ROM_START( cabalus2 ) + ROM_REGION( 0x50000, REGION_CPU1, 0 ) /* 64k for cpu code */ + ROM_LOAD16_BYTE( "9-7h", 0x00000, 0x10000, CRC(ebbb9484) SHA1(2c77d5b4acdc37720dc7ccab526862981bf8da51) ) + ROM_LOAD16_BYTE( "7-6h", 0x00001, 0x10000, CRC(51aeb49e) SHA1(df38dc58d8c6fa3d35904bf34e29111e7bd523ad) ) + ROM_LOAD16_BYTE( "8-7k", 0x20000, 0x10000, CRC(4c24ed9a) SHA1(f0fc25c3e7dc8ac71fdad3e91ab618cd7a037123) ) + ROM_LOAD16_BYTE( "6-6k", 0x20001, 0x10000, CRC(681620e8) SHA1(c9eacfb55059986dbecc2fae1339069a852f917b) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for sound cpu code */ + ROM_LOAD( "4-3n", 0x0000, 0x2000, CRC(4038eff2) SHA1(0bcafc1b78c3bef9a0e9b822c482ea4a942fd180) ) + ROM_LOAD( "3-3p", 0x8000, 0x8000, CRC(d9defcbf) SHA1(f26b10b1dbe5aa6446f70fd18e5f1379455578ec) ) + + ROM_REGION( 0x4000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "5-6s", 0x00000, 0x04000, CRC(6a76955a) SHA1(733cb4b862b5dac97c2641b58f2362471e62fcf2) ) /* characters */ + + ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "tad-2.7s", 0x00000, 0x80000, CRC(13ca7ae1) SHA1(b26bb4876a6518e3809e0fa4d442616508b3e7e8) ) /* tiles */ + + ROM_REGION( 0x80000, REGION_GFX3, ROMREGION_DISPOSE ) + ROM_LOAD( "tad-1.5e", 0x00000, 0x80000, CRC(8324a7fe) SHA1(aed4470df35ec18e65e35bddc9c217a5019fdcbf) ) /* sprites */ + + ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* Samples? */ + ROM_LOAD( "2-1s", 0x00000, 0x10000, CRC(850406b4) SHA1(23ac1650c6d6f35607a5264b3aa89868401a645a) ) + ROM_LOAD( "1-1u", 0x10000, 0x10000, CRC(8b3e0789) SHA1(b1450db1b1bada237c90930623e4def321099f13) ) + + ROM_REGION( 0x0200, REGION_PROMS, 0 ) /* unknown */ + ROM_LOAD( "prom05.8e", 0x0000, 0x0100, CRC(a94b18c2) SHA1(e7db4c1efc9e313e36eef3f53ae5b2e573a38920) ) + ROM_LOAD( "prom10.4j", 0x0100, 0x0100, CRC(261c93bc) SHA1(942470198143d584d3766f28587d1879abd912c1) ) +ROM_END + +/* + +cabal - tad corporation ? - (clone) + +2 boards + +1st board + +(prg) +1 x 68000 +from cabal_21 to cabal_24 + +(snd) +1 x z80 +1 x ym2151 +cabal_11 + +(gfx ?) +from cabal_12 to cabal_19 + +(?) +2 x z80 +cabal_09 and cabal_10 + +(?) +cabal_20 (near the snd area) + +2nd board + +(gfx) +from cabal_01 to cabal_08 + +Note: The bootleg has *3* Z80s + +*/ + +ROM_START( cabalbl ) + ROM_REGION( 0x50000, REGION_CPU1, 0 ) /* 64k for cpu code */ + ROM_LOAD16_BYTE( "cabal_24.bin", 0x00000, 0x10000, CRC(00abbe0c) SHA1(bacf17444abfb4f56248ff56e37b0aa2b1a3800d) ) + ROM_LOAD16_BYTE( "cabal_22.bin", 0x00001, 0x10000, CRC(78c4af27) SHA1(31049d1ec76d76284682de7a0592f63d97019240) ) + ROM_LOAD16_BYTE( "cabal_23.bin", 0x20000, 0x10000, CRC(d763a47c) SHA1(146d8082a404b6eddaf2dc9ba41a997949c17f8a) ) + ROM_LOAD16_BYTE( "cabal_21.bin", 0x20001, 0x10000, CRC(96d5e8af) SHA1(ed7d854f08e87db5ae6cf526eafa029dfd2bfb9f) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for sound cpu code */ + ROM_LOAD( "cabal_11.bin", 0x0000, 0x10000, CRC(d308a543) SHA1(4f45db42512f83266001daee55d06f49e7908e35) ) + + ROM_REGION( 0x8000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "cabal_20.bin", 0x00000, 0x08000, CRC(189033fd) SHA1(814f0cbc5f72345c04922d6d7c986f99d57335fa) ) /* characters */ + + /* The bootleg versions use a sub-board instead of the mask roms + the content is the same as the mask roms */ + ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD16_BYTE( "cabal_15.bin", 0x00000, 0x10000, CRC(1023319b) ) + ROM_LOAD16_BYTE( "cabal_17.bin", 0x00001, 0x10000, CRC(3b6d2b09) ) + ROM_LOAD16_BYTE( "cabal_14.bin", 0x20000, 0x10000, CRC(420b0801) ) + ROM_LOAD16_BYTE( "cabal_16.bin", 0x20001, 0x10000, CRC(77bc7a60) ) + ROM_LOAD16_BYTE( "cabal_12.bin", 0x40000, 0x10000, CRC(543fcb37) ) + ROM_LOAD16_BYTE( "cabal_18.bin", 0x40001, 0x10000, CRC(0bc50075) ) + ROM_LOAD16_BYTE( "cabal_13.bin", 0x60000, 0x10000, CRC(d28d921e) ) + ROM_LOAD16_BYTE( "cabal_19.bin", 0x60001, 0x10000, CRC(67e4fe47) ) + + ROM_REGION( 0x80000, REGION_GFX3, ROMREGION_DISPOSE ) + ROM_LOAD16_BYTE( "cabal_04.bin", 0x00000, 0x10000, CRC(34d3cac8) ) + ROM_LOAD16_BYTE( "cabal_05.bin", 0x00001, 0x10000, CRC(4e49c28e) ) + ROM_LOAD16_BYTE( "cabal_03.bin", 0x20000, 0x10000, CRC(7065e840) ) + ROM_LOAD16_BYTE( "cabal_06.bin", 0x20001, 0x10000, CRC(6a0e739d) ) + ROM_LOAD16_BYTE( "cabal_02.bin", 0x40000, 0x10000, CRC(0e1ec30e) ) + ROM_LOAD16_BYTE( "cabal_07.bin", 0x40001, 0x10000, CRC(581a50c1) ) + ROM_LOAD16_BYTE( "cabal_01.bin", 0x60000, 0x10000, CRC(55c44764) ) + ROM_LOAD16_BYTE( "cabal_08.bin", 0x60001, 0x10000, CRC(702735c9) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) + ROM_LOAD( "cabal_09.bin", 0x00000, 0x10000, CRC(4ffa7fe3) SHA1(381d8e765a7b94678fb3308965c748bbe9f8e247) ) /* Z80 code/adpcm data */ + + ROM_REGION( 0x10000, REGION_CPU4, 0 ) + ROM_LOAD( "cabal_10.bin", 0x00000, 0x10000, CRC(958789b6) SHA1(344c3ee8a1e272b56499e5c0415bb714aec0ddcf) ) /* Z80 code/adpcm data */ +ROM_END + + + +static DRIVER_INIT( cabal ) +{ + seibu_sound_decrypt(REGION_CPU2,0x2000); + seibu_adpcm_decrypt(REGION_SOUND1); +} + + +GAME( 1988, cabal, 0, cabal, cabalj, cabal, ROT0, "Tad Corporation", "Cabal (World, Joystick version)", 0 ) +GAME( 1989, cabala, cabal, cabal, cabalj, cabal, ROT0, "Tad Corporation (Alpha Trading license)", "Cabal (Alpha Trading)", 0 ) // korea? +GAME( 1988, cabalbl, cabal, cabalbl, cabalbl, 0, ROT0, "[Tad Corporation] (Red Corporation bootleg)", "Cabal (bootleg of Joystick version)", GAME_IMPERFECT_SOUND ) + +GAME( 1988, cabalus, cabal, cabal, cabalt, cabal, ROT0, "Tad (Fabtek license)", "Cabal (US set 1, Trackball version)", 0 ) +GAME( 1988, cabalus2,cabal, cabal, cabalt, cabal, ROT0, "Tad (Fabtek license)", "Cabal (US set 2, Trackball version)", 0 ) |