diff options
Diffstat (limited to 'src/mame/drivers/esd16.c')
-rw-r--r-- | src/mame/drivers/esd16.c | 980 |
1 files changed, 980 insertions, 0 deletions
diff --git a/src/mame/drivers/esd16.c b/src/mame/drivers/esd16.c new file mode 100644 index 00000000000..3181208c4c5 --- /dev/null +++ b/src/mame/drivers/esd16.c @@ -0,0 +1,980 @@ +/*************************************************************************** + + -= ESD 16 Bit Games =- + + driver by Luca Elia (l.elia@tin.it) + additions by David Haywood + + +Main CPU : M68000 +Video Chips : 2 x ACTEL A40MX04 (84 Pin Square Socketed) + +Sound CPU : Z80 +Sound Chips : M6295 (AD-65) + YM3812 (U6612) + YM3014 (U6614) + +--------------------------------------------------------------------------- +Year + Game PCB Notes +--------------------------------------------------------------------------- +98 Multi Champ ESD 11-09-98 +99 Multi Champ Deluxe ESD 08-26-1999 +00 Head Panic ESD 08-26-1999 (with Fuuki) +00 Tang Tang ESD (no date is marked on PCB) +--------------------------------------------------------------------------- + +Head Panic +- Maybe the sprite code can be merged again, haven't checked yet. +- Nude / Bikini pics don't show in-game, even when set in test mode? + +--------------------------------------------------------------------------- + +***************************************************************************/ + +#include "driver.h" +#include "machine/eeprom.h" +#include "sound/okim6295.h" +#include "sound/3812intf.h" + +/* Variables defined in video: */ + +extern UINT16 *esd16_vram_0, *esd16_scroll_0; +extern UINT16 *esd16_vram_1, *esd16_scroll_1; +extern UINT16 *head_layersize; +extern tilemap *esdtilemap_1_16x16; + +/* Functions defined in video: */ + +WRITE16_HANDLER( esd16_vram_0_w ); +WRITE16_HANDLER( esd16_vram_1_w ); +WRITE16_HANDLER( esd16_tilemap0_color_w ); + +VIDEO_START( esd16 ); +VIDEO_UPDATE( esd16 ); +VIDEO_UPDATE( hedpanic ); + + +static UINT16 *headpanic_platform_x; +static UINT16 *headpanic_platform_y; + +/*************************************************************************** + + + Memory Maps - Main CPU + + +***************************************************************************/ + +static WRITE16_HANDLER( esd16_spriteram_w ) { COMBINE_DATA(&spriteram16[offset]); } + +static WRITE16_HANDLER( esd16_sound_command_w ) +{ + if (ACCESSING_LSB) + { + soundlatch_w(0,data & 0xff); + cpunum_set_input_line(1,0,ASSERT_LINE); // Generate an IRQ + cpu_spinuntil_time(ATTOTIME_IN_USEC(50)); // Allow the other CPU to reply + } +} + +/* + Lines starting with an empty comment in the following MemoryReadAddress + arrays are there for debug (e.g. the game does not read from those ranges + AFAIK) +*/ + +static ADDRESS_MAP_START( multchmp_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0x100000, 0x10ffff) AM_READ(MRA16_RAM ) // RAM + AM_RANGE(0x200000, 0x2005ff) AM_READ(MRA16_RAM ) // Palette +/**/AM_RANGE(0x300000, 0x3007ff) AM_READ(MRA16_RAM ) // Sprites +/**/AM_RANGE(0x400000, 0x403fff) AM_READ(MRA16_RAM ) // Layers +/**/AM_RANGE(0x420000, 0x423fff) AM_READ(MRA16_RAM ) // +/**/AM_RANGE(0x500000, 0x500003) AM_READ(MRA16_RAM ) // Scroll +/**/AM_RANGE(0x500004, 0x500007) AM_READ(MRA16_RAM ) // +/**/AM_RANGE(0x500008, 0x50000b) AM_READ(MRA16_RAM ) // +/**/AM_RANGE(0x50000c, 0x50000f) AM_READ(MRA16_RAM ) // + AM_RANGE(0x600002, 0x600003) AM_READ(input_port_0_word_r ) // Inputs + AM_RANGE(0x600004, 0x600005) AM_READ(input_port_1_word_r ) // + AM_RANGE(0x600006, 0x600007) AM_READ(input_port_2_word_r ) // + AM_RANGE(0x700008, 0x70000b) AM_READ(MRA16_NOP ) // ? Only read once +ADDRESS_MAP_END + +static ADDRESS_MAP_START( multchmp_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0x100000, 0x10ffff) AM_WRITE(MWA16_RAM ) // RAM + AM_RANGE(0x200000, 0x2005ff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16 ) // Palette + AM_RANGE(0x300000, 0x3007ff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Sprites + AM_RANGE(0x300800, 0x300807) AM_WRITE(esd16_spriteram_w ) // Sprites (Mirrored) + AM_RANGE(0x400000, 0x403fff) AM_WRITE(esd16_vram_0_w) AM_BASE(&esd16_vram_0 ) // Layers + AM_RANGE(0x420000, 0x423fff) AM_WRITE(esd16_vram_1_w) AM_BASE(&esd16_vram_1 ) // Scroll + AM_RANGE(0x500000, 0x500003) AM_WRITE(MWA16_RAM) AM_BASE(&esd16_scroll_0 ) // + AM_RANGE(0x500004, 0x500007) AM_WRITE(MWA16_RAM) AM_BASE(&esd16_scroll_1 ) // + AM_RANGE(0x500008, 0x50000b) AM_WRITE(MWA16_RAM ) // ? 0 + AM_RANGE(0x50000c, 0x50000f) AM_WRITE(MWA16_RAM ) // ? 0 + AM_RANGE(0x600000, 0x600001) AM_WRITE(MWA16_NOP ) // IRQ Ack + AM_RANGE(0x600008, 0x600009) AM_WRITE(esd16_tilemap0_color_w ) // Flip Screen + Tileamp0 palette banking + AM_RANGE(0x60000a, 0x60000b) AM_WRITE(MWA16_NOP ) // ? 2 + AM_RANGE(0x60000c, 0x60000d) AM_WRITE(esd16_sound_command_w ) // To Sound CPU +ADDRESS_MAP_END + +static WRITE16_HANDLER(hedpanic_platform_w) +{ + int offsets = headpanic_platform_x[0]+0x40* headpanic_platform_y[0]; + + esd16_vram_1[offsets] = data; + + tilemap_mark_tile_dirty(esdtilemap_1_16x16,offsets); +} + + +static READ16_HANDLER( esd_eeprom_r ) +{ + if (ACCESSING_MSB) + { + return ((EEPROM_read_bit() & 0x01) << 15); + } + +// logerror("(0x%06x) unk EEPROM read: %04x\n", activecpu_get_pc(), mem_mask); + return 0; +} + +static WRITE16_HANDLER( esd_eeprom_w ) +{ + if (ACCESSING_MSB) + { + // data line + EEPROM_write_bit((data & 0x0400) >> 6); + + // clock line asserted. + EEPROM_set_clock_line((data & 0x0200) ? ASSERT_LINE : CLEAR_LINE ); + + // reset line asserted: reset. + EEPROM_set_cs_line((data & 0x0100) ? CLEAR_LINE : ASSERT_LINE ); + } + +// logerror("(0x%06x) Unk EEPROM write: %04x %04x\n", activecpu_get_pc(), data, mem_mask); +} + +static ADDRESS_MAP_START( hedpanic_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0x100000, 0x10ffff) AM_READ(MRA16_RAM) + AM_RANGE(0x800000, 0x800fff) AM_READ(MRA16_RAM) + AM_RANGE(0xc00002, 0xc00003) AM_READ(input_port_0_word_r ) // Inputs + AM_RANGE(0xc00004, 0xc00005) AM_READ(input_port_1_word_r ) // + AM_RANGE(0xc00006, 0xc00007) AM_READ(esd_eeprom_r ) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( hedpanic_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0x100000, 0x10ffff) AM_WRITE(MWA16_RAM) + AM_RANGE(0x800000, 0x800fff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16) + AM_RANGE(0x900000, 0x9007ff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Sprites + AM_RANGE(0x900800, 0x900807) AM_WRITE(esd16_spriteram_w ) // Sprites (Mirrored) + AM_RANGE(0xa00000, 0xa03fff) AM_WRITE(esd16_vram_0_w) AM_BASE(&esd16_vram_0 ) // Layers + AM_RANGE(0xa20000, 0xa23fff) AM_WRITE(esd16_vram_1_w) AM_BASE(&esd16_vram_1 ) // + AM_RANGE(0xa24000, 0xa27fff) AM_WRITE(esd16_vram_1_w) AM_BASE(&esd16_vram_1 ) // mirror? + AM_RANGE(0xb00000, 0xb00003) AM_WRITE(MWA16_RAM) AM_BASE(&esd16_scroll_0 ) // Scroll + AM_RANGE(0xb00004, 0xb00007) AM_WRITE(MWA16_RAM) AM_BASE(&esd16_scroll_1 ) // + AM_RANGE(0xb00008, 0xb00009) AM_WRITE(MWA16_RAM) AM_BASE(&headpanic_platform_x) + AM_RANGE(0xb0000a, 0xb0000b) AM_WRITE(MWA16_RAM) AM_BASE(&headpanic_platform_y) + AM_RANGE(0xb0000c, 0xb0000d) AM_WRITE(MWA16_NOP) // ?? + AM_RANGE(0xb0000e, 0xb0000f) AM_WRITE(MWA16_RAM) AM_BASE(&head_layersize) // ?? + AM_RANGE(0xc00000, 0xc00001) AM_WRITE(MWA16_NOP) // IRQ Ack + AM_RANGE(0xc00008, 0xc00009) AM_WRITE(esd16_tilemap0_color_w) // Flip Screen + Tileamp0 palette banking + AM_RANGE(0xc0000a, 0xc0000b) AM_WRITE(MWA16_NOP) // ? 2 not checked + AM_RANGE(0xc0000c, 0xc0000d) AM_WRITE(esd16_sound_command_w ) // To Sound CPU // ok + AM_RANGE(0xc0000e, 0xc0000f) AM_WRITE(esd_eeprom_w) + AM_RANGE(0xd00008, 0xd00009) AM_WRITE(hedpanic_platform_w) +ADDRESS_MAP_END + +/* Multi Champ Deluxe, like Head Panic but different addresses */ + +static ADDRESS_MAP_START( mchampdx_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0x200000, 0x20ffff) AM_READ(MRA16_RAM) + AM_RANGE(0x400000, 0x400fff) AM_READ(MRA16_RAM) + AM_RANGE(0x500002, 0x500003) AM_READ(input_port_0_word_r ) // Inputs + AM_RANGE(0x500004, 0x500005) AM_READ(input_port_1_word_r ) // + AM_RANGE(0x500006, 0x500007) AM_READ(esd_eeprom_r ) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( mchampdx_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0x200000, 0x20ffff) AM_WRITE(MWA16_RAM) + AM_RANGE(0x300000, 0x303fff) AM_WRITE(esd16_vram_0_w) AM_BASE(&esd16_vram_0 ) // Layers + AM_RANGE(0x320000, 0x323fff) AM_WRITE(esd16_vram_1_w) AM_BASE(&esd16_vram_1 ) // + AM_RANGE(0x324000, 0x327fff) AM_WRITE(esd16_vram_1_w) AM_BASE(&esd16_vram_1 ) // mirror? + AM_RANGE(0x400000, 0x400fff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16) + AM_RANGE(0x500000, 0x500001) AM_WRITE(MWA16_NOP) // IRQ Ack + AM_RANGE(0x500008, 0x500009) AM_WRITE(esd16_tilemap0_color_w) // Flip Screen + Tileamp0 palette banking + AM_RANGE(0x50000a, 0x50000b) AM_WRITE(MWA16_NOP) // ? 2 not checked + AM_RANGE(0x50000c, 0x50000d) AM_WRITE(esd16_sound_command_w ) // To Sound CPU // ok + AM_RANGE(0x50000e, 0x50000f) AM_WRITE(esd_eeprom_w) + AM_RANGE(0x600000, 0x6007ff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Sprites + AM_RANGE(0x600800, 0x600807) AM_WRITE(esd16_spriteram_w ) // Sprites (Mirrored) + AM_RANGE(0x700000, 0x700003) AM_WRITE(MWA16_RAM) AM_BASE(&esd16_scroll_0 ) // Scroll + AM_RANGE(0x700004, 0x700007) AM_WRITE(MWA16_RAM) AM_BASE(&esd16_scroll_1 ) // + AM_RANGE(0x700008, 0x700009) AM_WRITE(MWA16_RAM) AM_BASE(&headpanic_platform_x) // not used in mchampdx? + AM_RANGE(0x70000a, 0x70000b) AM_WRITE(MWA16_RAM) AM_BASE(&headpanic_platform_y) // not used in mchampdx? + AM_RANGE(0x70000c, 0x70000d) AM_WRITE(MWA16_NOP) // ?? + AM_RANGE(0x70000e, 0x70000f) AM_WRITE(MWA16_RAM) AM_BASE(&head_layersize) // ?? + AM_RANGE(0xd00008, 0xd00009) AM_WRITE(hedpanic_platform_w) // not used in mchampdx? +ADDRESS_MAP_END + +/* Tang Tang - like the others but again with different addresses */ + +static ADDRESS_MAP_START( tangtang_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_READ(MRA16_ROM ) // ROM + AM_RANGE(0x100000, 0x100fff) AM_READ(MRA16_RAM) + AM_RANGE(0x500002, 0x500003) AM_READ(input_port_0_word_r ) // Inputs + AM_RANGE(0x500004, 0x500005) AM_READ(input_port_1_word_r ) // + AM_RANGE(0x500006, 0x500007) AM_READ(esd_eeprom_r ) + AM_RANGE(0x700000, 0x70ffff) AM_READ(MRA16_RAM) // main ram +ADDRESS_MAP_END + +static ADDRESS_MAP_START( tangtang_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_WRITE(MWA16_ROM ) // ROM + AM_RANGE(0x100000, 0x100fff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16) + AM_RANGE(0x200000, 0x2007ff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Sprites + AM_RANGE(0x200800, 0x200807) AM_WRITE(esd16_spriteram_w ) // Sprites (Mirrored) + AM_RANGE(0x300000, 0x303fff) AM_WRITE(esd16_vram_0_w) AM_BASE(&esd16_vram_0 ) // Layers + AM_RANGE(0x320000, 0x323fff) AM_WRITE(esd16_vram_1_w) AM_BASE(&esd16_vram_1 ) // + AM_RANGE(0x324000, 0x327fff) AM_WRITE(esd16_vram_1_w) AM_BASE(&esd16_vram_1 ) // mirror? + AM_RANGE(0x400000, 0x400003) AM_WRITE(MWA16_RAM) AM_BASE(&esd16_scroll_0 ) // Scroll + AM_RANGE(0x400004, 0x400007) AM_WRITE(MWA16_RAM) AM_BASE(&esd16_scroll_1 ) // + AM_RANGE(0x400008, 0x400009) AM_WRITE(MWA16_RAM) AM_BASE(&headpanic_platform_x) // not used in mchampdx? + AM_RANGE(0x40000a, 0x40000b) AM_WRITE(MWA16_RAM) AM_BASE(&headpanic_platform_y) // not used in mchampdx? + AM_RANGE(0x40000c, 0x40000d) AM_WRITE(MWA16_NOP) // ?? + AM_RANGE(0x40000e, 0x40000f) AM_WRITE(MWA16_RAM) AM_BASE(&head_layersize) // ?? + AM_RANGE(0x500000, 0x500001) AM_WRITE(MWA16_NOP) // IRQ Ack + AM_RANGE(0x500008, 0x500009) AM_WRITE(esd16_tilemap0_color_w) // Flip Screen + Tileamp0 palette banking + AM_RANGE(0x50000a, 0x50000b) AM_WRITE(MWA16_NOP) // ? 2 not checked + AM_RANGE(0x50000c, 0x50000d) AM_WRITE(esd16_sound_command_w ) // To Sound CPU // ok + AM_RANGE(0x50000e, 0x50000f) AM_WRITE(esd_eeprom_w) + AM_RANGE(0x600008, 0x600009) AM_WRITE(hedpanic_platform_w) + AM_RANGE(0x700000, 0x70ffff) AM_WRITE(MWA16_RAM) +ADDRESS_MAP_END + +/*************************************************************************** + + + Memory Maps - Sound CPU + + +***************************************************************************/ + +static WRITE8_HANDLER( esd16_sound_rombank_w ) +{ + int bank = data & 0xf; + if (data != bank) logerror("CPU #1 - PC %04X: unknown bank bits: %02X\n",activecpu_get_pc(),data); + if (bank >= 3) bank += 1; + memory_set_bankptr(1, memory_region(REGION_CPU2) + 0x4000 * bank); +} + +static ADDRESS_MAP_START( multchmp_sound_readmem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x7fff) AM_READ(MRA8_ROM ) // ROM + AM_RANGE(0x8000, 0xbfff) AM_READ(MRA8_BANK1 ) // Banked ROM + AM_RANGE(0xf800, 0xffff) AM_READ(MRA8_RAM ) // RAM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( multchmp_sound_writemem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x7fff) AM_WRITE(MWA8_ROM ) // ROM + AM_RANGE(0x8000, 0xbfff) AM_WRITE(MWA8_ROM ) // Banked ROM + AM_RANGE(0xf800, 0xffff) AM_WRITE(MWA8_RAM ) // RAM +ADDRESS_MAP_END + +static READ8_HANDLER( esd16_sound_command_r ) +{ + /* Clear IRQ only after reading the command, or some get lost */ + cpunum_set_input_line(1,0,CLEAR_LINE); + return soundlatch_r(0); +} + +static ADDRESS_MAP_START( multchmp_sound_readport, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE(0x02, 0x02) AM_READ(OKIM6295_status_0_r ) // M6295 + AM_RANGE(0x03, 0x03) AM_READ(esd16_sound_command_r ) // From Main CPU + AM_RANGE(0x06, 0x06) AM_READ(MRA8_NOP ) // ? At the start +ADDRESS_MAP_END + +static ADDRESS_MAP_START( multchmp_sound_writeport, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE(0x00, 0x00) AM_WRITE(YM3812_control_port_0_w ) // YM3812 + AM_RANGE(0x01, 0x01) AM_WRITE(YM3812_write_port_0_w ) + AM_RANGE(0x02, 0x02) AM_WRITE(OKIM6295_data_0_w ) // M6295 + AM_RANGE(0x04, 0x04) AM_WRITE(MWA8_NOP ) // ? $00, $30 + AM_RANGE(0x05, 0x05) AM_WRITE(esd16_sound_rombank_w ) // ROM Bank + AM_RANGE(0x06, 0x06) AM_WRITE(MWA8_NOP ) // ? 1 (End of NMI routine) +ADDRESS_MAP_END + + +/*************************************************************************** + + + Input Ports + + +***************************************************************************/ + +static INPUT_PORTS_START( multchmp ) + PORT_START_TAG("IN0") // $600002.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // Resets the test mode + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN1") // $600005.b + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN2") // $600006.w + PORT_SERVICE( 0x0001, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x0002, 0x0002, "Coinage Type" ) // Not Supported + PORT_DIPSETTING( 0x0002, "1" ) +// PORT_DIPSETTING( 0x0000, "2" ) + PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0030, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( 1C_2C ) ) + PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00c0, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( 1C_2C ) ) + +// PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Difficulty" ) ) CRASH CPP?? + PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0300, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x0c00, 0x0c00, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0000, "2" ) + PORT_DIPSETTING( 0x0c00, "3" ) + PORT_DIPSETTING( 0x0800, "4" ) + PORT_DIPSETTING( 0x0400, "5" ) + PORT_DIPNAME( 0x1000, 0x1000, "Selectable Games" ) + PORT_DIPSETTING( 0x1000, "3" ) + PORT_DIPSETTING( 0x0000, "4" ) + PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Free_Play ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x4000, "Unknown 2-6" ) // unused + PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x8000, "Unknown 2-7" ) // unused + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( hedpanic ) + PORT_START_TAG("IN0") // $600002.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN1") // $600005.b + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_SERVICE_NO_TOGGLE( 0x0040, IP_ACTIVE_LOW) + PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) +INPUT_PORTS_END + +/*************************************************************************** + + + Graphics Layouts + + +***************************************************************************/ + +/* 16x16x5, made of four 8x8 tiles */ +static const gfx_layout layout_16x16x5 = +{ + 16,16, + RGN_FRAC(1,5), + 5, + { RGN_FRAC(4,5),RGN_FRAC(3,5),RGN_FRAC(2,5),RGN_FRAC(1,5), RGN_FRAC(0,5) }, + { STEP8(0+7,-1), STEP8(8*16+7,-1) }, + { STEP16(0,8) }, + 16*16 +}; + +/* 8x8x8 */ +static const gfx_layout layout_8x8x8 = +{ + 8,8, + RGN_FRAC(1,4), + 8, + { STEP8(0,1) }, + { RGN_FRAC(3,4)+0*8,RGN_FRAC(2,4)+0*8,RGN_FRAC(1,4)+0*8,RGN_FRAC(0,4)+0*8, + RGN_FRAC(3,4)+1*8,RGN_FRAC(2,4)+1*8,RGN_FRAC(1,4)+1*8,RGN_FRAC(0,4)+1*8 }, + { STEP8(0,2*8) }, + 8*8*2, +}; + +static GFXDECODE_START( esd16 ) + GFXDECODE_ENTRY( REGION_GFX1, 0, layout_16x16x5, 0x200, 8 ) // [0] Sprites + GFXDECODE_ENTRY( REGION_GFX2, 0, layout_8x8x8, 0x000, 2 ) // [1] Layers + GFXDECODE_ENTRY( REGION_GFX1, 0, layout_16x16x5, 0x200, 8 ) // [0] Sprites +GFXDECODE_END + +static const gfx_layout hedpanic_layout_8x8x8 = +{ + 8,8, + RGN_FRAC(1,1), + 8, + { 0,1,2,3,4,5,6,7 }, + { 0*8,2*8,1*8,3*8,4*8,6*8,5*8,7*8 }, + { 0*64,1*64,2*64,3*64,4*64,5*64,6*64,7*64 }, + 64*8, +}; + +static const gfx_layout hedpanic_layout_16x16x8 = +{ + 16,16, + RGN_FRAC(1,1), + 8, + { 0,1,2,3,4,5,6,7 }, + { 0*8,2*8,1*8,3*8,4*8,6*8,5*8,7*8, + 64*8+0*8,64*8+2*8,64*8+1*8,64*8+3*8,64*8+4*8,64*8+6*8,64*8+5*8,64*8+7*8 }, + { 0*64,1*64,2*64,3*64,4*64,5*64,6*64,7*64, + 128*8+0*64,128*8+1*64,128*8+2*64,128*8+3*64,128*8+4*64,128*8+5*64,128*8+6*64,128*8+7*64 + }, + 256*8, +}; + + +static const gfx_layout hedpanic_sprite_16x16x5 = +{ + 16,16, + RGN_FRAC(1,3), + 5, + { RGN_FRAC(2,3), RGN_FRAC(0,3), RGN_FRAC(0,3)+8, RGN_FRAC(1,3),RGN_FRAC(1,3)+8 }, + { 7,6,5,4,3,2,1,0, 256+7,256+6,256+5,256+4,256+3,256+2,256+1,256+0 }, + { 0*16,1*16,2*16,3*16,4*16,5*16,6*16,7*16,8*16,9*16,10*16,11*16,12*16,13*16,14*16,15*16 }, + 16*32, +}; + + +static GFXDECODE_START( hedpanic ) + GFXDECODE_ENTRY( REGION_GFX1, 0, hedpanic_sprite_16x16x5, 0x200, 8 ) // [0] Sprites + GFXDECODE_ENTRY( REGION_GFX2, 0, hedpanic_layout_8x8x8, 0x000, 4 ) // [1] Layers + GFXDECODE_ENTRY( REGION_GFX2, 0, hedpanic_layout_16x16x8, 0x000, 4 ) // [2] Layers +GFXDECODE_END + +static GFXDECODE_START( tangtang ) + GFXDECODE_ENTRY( REGION_GFX1, 0, layout_16x16x5, 0x200, 8 ) // [0] Sprites + GFXDECODE_ENTRY( REGION_GFX2, 0, hedpanic_layout_8x8x8, 0x000, 4 ) // [1] Layers + GFXDECODE_ENTRY( REGION_GFX2, 0, hedpanic_layout_16x16x8, 0x000, 4 ) // [2] Layers +GFXDECODE_END + +/*************************************************************************** + + + Machine Drivers + + +***************************************************************************/ + +static MACHINE_DRIVER_START( multchmp ) + + /* basic machine hardware */ + MDRV_CPU_ADD_TAG("main",M68000, 16000000) + MDRV_CPU_PROGRAM_MAP(multchmp_readmem,multchmp_writemem) + MDRV_CPU_VBLANK_INT(irq6_line_hold,1) + + MDRV_CPU_ADD(Z80, 4000000) + /* audio CPU */ /* ? */ + MDRV_CPU_PROGRAM_MAP(multchmp_sound_readmem,multchmp_sound_writemem) + MDRV_CPU_IO_MAP(multchmp_sound_readport,multchmp_sound_writeport) + MDRV_CPU_VBLANK_INT(nmi_line_pulse,32) /* IRQ By Main CPU */ + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(0x140, 0x100) + MDRV_SCREEN_VISIBLE_AREA(0, 0x140-1, 0+8, 0x100-8-1) + MDRV_GFXDECODE(esd16) + MDRV_PALETTE_LENGTH(768) + + MDRV_VIDEO_START(esd16) + MDRV_VIDEO_UPDATE(esd16) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(YM3812, 4000000) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) + + MDRV_SOUND_ADD(OKIM6295, 1056000) + MDRV_SOUND_CONFIG(okim6295_interface_region_1_pin7high) // clock frequency & pin 7 not verified + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( hedpanic ) + + /* basic machine hardware */ + MDRV_IMPORT_FROM(multchmp) + + MDRV_CPU_MODIFY("main") + MDRV_CPU_PROGRAM_MAP(hedpanic_readmem,hedpanic_writemem) + + MDRV_NVRAM_HANDLER(93C46) + + MDRV_PALETTE_LENGTH(0x1000/2) + + MDRV_GFXDECODE(hedpanic) + MDRV_VIDEO_UPDATE(hedpanic) + +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( mchampdx ) + + /* basic machine hardware */ + MDRV_IMPORT_FROM(hedpanic) + + MDRV_CPU_MODIFY("main") + MDRV_CPU_PROGRAM_MAP(mchampdx_readmem,mchampdx_writemem) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( tangtang ) + + /* basic machine hardware */ + MDRV_IMPORT_FROM(hedpanic) + + MDRV_CPU_MODIFY("main") + MDRV_CPU_PROGRAM_MAP(tangtang_readmem,tangtang_writemem) + + MDRV_GFXDECODE(tangtang) +MACHINE_DRIVER_END + +/*************************************************************************** + + + ROMs Loading + + +***************************************************************************/ + +/*************************************************************************** + + Multi Champ +PCB Layout +---------- + +ESD 11-09-98 ++-----------------------------------------+ +| YM3812 6116 su10 fu27| +|VOL YM3014 su06 M6295 fu32| +| PAL Z80 fu26| +| 6116 fu30| +|J 6116 Actel fu28| +|A DSWA DSWB 76C256 A40MX04 fu31| +|M 76C256 fu29| +|M cu03 76C256 6116 Actel PAL fu33| +|A cu02 76C256 6116 A40MX04 PAL ju07| +| 68000 6116 ju03| +| PAL 6116 PAL ju04| +| PAL 6116 PAL ju05| +|16MHz 14MHz 6116 PAL ju06| ++-----------------------------------------+ + +(C) ESD 1998, 1999 +PCB No. ESD 11-09-98 (Probably the manufacture date) +CPU: MC68HC000FN16 (68000, 68 pin PLCC socketed) +SND: Z80 (Z0840006PSC), U6614/U6612 (YM3014/YM3812), AD-65 (OKI M6295) +OSC: 16.000MHz, 14.000MHz +RAM: 4 x 62256, 9 x 6116 +DIPS: 2 x 8 position +Dip info is in Japanese! I will scan and make it available on my site for translation. + +Other Chips: 2 x Actel A40MX04-F FPGA (PLCC84) +8 PAL's (not dumped) + +ROMS: + +MULTCHMP.U02 \ Main Program MX27C2000 +MULTCHMP.U03 / MX27C2000 +MULTCHMP.U06 -- Sound Program 27C010 +MULTCHMP.U10 -- ADPCM Samples 27C010 +MULTCHMP.U27 -\ 27C4001 +MULTCHMP.U28 \ 27C4001 +MULTCHMP.U29 | 27C4001 +MULTCHMP.U30 + Backgrounds 27C4001 +MULTCHMP.U31 | 27C4001 +MULTCHMP.U32 | 27C4001 +MULTCHMP.U33 / 27C4001 +MULTCHMP.U34 -/ 27C4001 +MULTCHMP.U35 -\ MX27C2000 +MULTCHMP.U36 \ MX27C2000 +MULTCHMP.U37 +- Sprites MX27C2000 +MULTCHMP.U38 / MX27C2000 +MULTCHMP.U39 -/ MX27C2000 + +***************************************************************************/ + +ROM_START( multchmp ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "esd2.cu02", 0x000000, 0x040000, CRC(2d1b098a) SHA1(c2f3991f02c611c258219da2c61cad22c9a21f7d) ) + ROM_LOAD16_BYTE( "esd1.cu03", 0x000001, 0x040000, CRC(10974063) SHA1(854b38b4d4cb529e9928aae4212c86a220615e04) ) + + ROM_REGION( 0x24000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "esd3.su06", 0x00000, 0x0c000, CRC(7c178bd7) SHA1(8754d3c70d9b2bf369a5ce0cce4cc0696ed22750) ) + ROM_CONTINUE( 0x10000, 0x14000 ) + + ROM_REGION( 0x140000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites, 16x16x5 */ + ROM_LOAD( "esd14.ju03", 0x000000, 0x040000, CRC(a6122225) SHA1(cbcf2b31c4c011daba21f0ae5fd3be63c9a87c00) ) + ROM_LOAD( "esd15.ju04", 0x040000, 0x040000, CRC(88b7a97c) SHA1(0a57ec8f6a44c8e3aa3ef35499a415d6a2b7eb16) ) + ROM_LOAD( "esd16.ju05", 0x080000, 0x040000, CRC(e670a6da) SHA1(47cbe45b6d5d0ca70d0c6787d589dde5d14fdba4) ) + ROM_LOAD( "esd17.ju06", 0x0c0000, 0x040000, CRC(a69d4399) SHA1(06ae6c07cc6b7313e2e2aa3b994f7532d6994e1b) ) + ROM_LOAD( "esd13.ju07", 0x100000, 0x040000, CRC(22071594) SHA1(c79102b250780d1da8c290d065d61fbbfa193366) ) + + ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layers, 16x16x8 */ + ROM_LOAD( "esd5.fu27", 0x000000, 0x080000, CRC(299f32c2) SHA1(274752444f6ddba16eeefc02c3e78525c079b3d8) ) + ROM_LOAD( "esd6.fu32", 0x080000, 0x080000, CRC(e2689bb2) SHA1(1da9b1f7335d5c2d1c2f8353fccf91c0109d2e9d) ) + ROM_LOAD( "esd11.fu29", 0x100000, 0x080000, CRC(9bafd8ee) SHA1(db18be05431d4b6d4207e19fa4ed8701621aaa19) ) + ROM_LOAD( "esd12.fu33", 0x180000, 0x080000, CRC(c6b86001) SHA1(11a63b56df30ab7b85ce4568d2a24e96a125735a) ) + ROM_LOAD( "esd7.fu26", 0x200000, 0x080000, CRC(a783a003) SHA1(1ff61a049485c5b599c458a8bf7f48027d14f8e0) ) + ROM_LOAD( "esd8.fu30", 0x280000, 0x080000, CRC(22861af2) SHA1(1e74e85517cb8fd5fb4bda6e9d9d54046e31f653) ) + ROM_LOAD( "esd9.fu28", 0x300000, 0x080000, CRC(6652c04a) SHA1(178e1d42847506d869ef79db2f7e10df05e9ef76) ) + ROM_LOAD( "esd10.fu31", 0x380000, 0x080000, CRC(d815974b) SHA1(3e528a5df79fa7dc0f38b0ee7f2f3a0ebc97a369) ) + + ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "esd4.su10", 0x00000, 0x20000, CRC(6e741fcd) SHA1(742e0952916c00f67dd9f8d01e721a9a538d2fc4) ) +ROM_END + +ROM_START( multchmk ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "multchmp.u02", 0x000000, 0x040000, CRC(7da8c0df) SHA1(763a3240554a02d8a9a0b13b6bfcd384825a6c57) ) + ROM_LOAD16_BYTE( "multchmp.u03", 0x000001, 0x040000, CRC(5dc62799) SHA1(ff7882985efc20309c3f901a622f1beffa0c47be) ) + + ROM_REGION( 0x24000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "esd3.su06", 0x00000, 0x0c000, CRC(7c178bd7) SHA1(8754d3c70d9b2bf369a5ce0cce4cc0696ed22750) ) + ROM_CONTINUE( 0x10000, 0x14000 ) + + ROM_REGION( 0x140000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites, 16x16x5 */ + ROM_LOAD( "multchmp.u36", 0x000000, 0x040000, CRC(d8f06fa8) SHA1(f76912f93f99578529612a7f01d82ac7229a8e41) ) + ROM_LOAD( "multchmp.u37", 0x040000, 0x040000, CRC(b1ae7f08) SHA1(37dd9d4cef8b9e1d09d7b46a9794fb2b777c9a01) ) + ROM_LOAD( "multchmp.u38", 0x080000, 0x040000, CRC(88e252e8) SHA1(07d898379798c6be42b636762b0af61b9111a480) ) + ROM_LOAD( "multchmp.u39", 0x0c0000, 0x040000, CRC(51f01067) SHA1(d5ebbc7d358b63724d2f24da8b2ce4a202be37a5) ) + ROM_LOAD( "multchmp.u35", 0x100000, 0x040000, CRC(9d1590a6) SHA1(35f634dbf0df06ec62359c7bae43c7f5d14b0ab2) ) + + ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layers, 16x16x8 */ + ROM_LOAD( "multchmp.u27", 0x000000, 0x080000, CRC(dc42704e) SHA1(58a04a47ffc6d6ae0e4d49e466b1c58b37ad741a) ) + ROM_LOAD( "multchmp.u28", 0x080000, 0x080000, CRC(449991fa) SHA1(fd93e420a04cb8bea5421aa9cbe079bd3e7d4924) ) + ROM_LOAD( "multchmp.u33", 0x100000, 0x080000, CRC(e4c0ec96) SHA1(74152108e4d05f4aff9d38919f212fcb8c87cef3) ) + ROM_LOAD( "multchmp.u34", 0x180000, 0x080000, CRC(bffaaccc) SHA1(d9ab248e2c7c639666e3717cfc5d8c8468a1bde2) ) + ROM_LOAD( "multchmp.u29", 0x200000, 0x080000, CRC(01bd1399) SHA1(b717ccffe0af92a42a0879736d34d3ad71840233) ) + ROM_LOAD( "multchmp.u30", 0x280000, 0x080000, CRC(c6b4cc18) SHA1(d9097b85584272cfe4989a40d622ef1feeee6775) ) + ROM_LOAD( "multchmp.u31", 0x300000, 0x080000, CRC(b1e4e9e3) SHA1(1a7393e9073b028b4170393b3788ad8cb86c0c78) ) + ROM_LOAD( "multchmp.u32", 0x380000, 0x080000, CRC(f05cb5b4) SHA1(1b33e60942238e39d61ae59e9317b99e83595ab1) ) + + ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "esd4.su10", 0x00000, 0x20000, CRC(6e741fcd) SHA1(742e0952916c00f67dd9f8d01e721a9a538d2fc4) ) +ROM_END + +/* + +Multi Champ Deluxe +------------------ + +PCB Layout +---------- + +ESD 08-26-1999 +|-----------------------------------------| +| 3014 3812 6116 6295 ESD4.SU10 * | +|VOL ESD3.SU06 Z80 ROM.JU01| +| PAL * | +| 6116 | +| 6116 PAL 6116 ROM.JU02| +| 6116 |-------| * | +|J PAL | ESD | * | +|A PAL |CRTC99 |ESD5.JU07 | +|M PAL | | * | +|M PAL |-------| | +|A 68000 ESD1.CU03 | +| ESD2.CU02 |-------| | +| |ACTEL | 6116 | +| 93C46 |A40MX04| 6116 | +| MCM6206 | | 6116 | +| MCM6206 |-------| 6116 | +| 16MHz PAL MCM6206 | +| 14MHz PAL MCM6206 ROM.FU35 ROM.FU34 | +|-----------------------------------------| + +Notes: + 68000 clock 16.000MHz + Z80 clock 4.000MHz + M6295 clock 1.000MHz. Sample rate 1000000/132 + YM3812 clock 4.000MHz + HSync - 15.625kHz + VSync - 60Hz + MCM6206 - 32k x8 SRAM (SOJ28) + 6116 - 2k x8 SRAM (SOP28) + A40MX04 - Actel A40MX04-F FPGA (PLCC84) + CRTC99 - ESD CRTC99 Graphics Controller (QFP240) + + * : Board has positions for 6x standard 32 pin EPROMs but only position ESD5 is populated + with an EPROM. In between the unpopulated positions are 2x smt pads. These are populated + with 2x 16M SOP44 smt Mask ROMs. + +*/ + + +ROM_START( mchampdx ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "ver0106_esd2.cu02", 0x000000, 0x040000, CRC(ea98b3fd) SHA1(107ee8adea246141fd6fa9209541ce0a7ed1e24c) ) + ROM_LOAD16_BYTE( "ver0106_esd1.cu03", 0x000001, 0x040000, CRC(c6e4546b) SHA1(af9a8edffe94d035f92b36b1cd145c2a5ee66f48) ) + + ROM_REGION( 0x84000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "ver0106_desd3.su06", 0x00000, 0x0c000, CRC(1b22568c) SHA1(5458e1a798357a6785f8ea1fe9da37768cd4761d) ) + ROM_CONTINUE( 0x10000, 0x34000 ) + + /* this has additional copyright sprites in the flash roms for the (c)2000 message.. */ + ROM_REGION( 0x600000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites, 16x16x5 */ + ROM_LOAD( "ver0106_ju01.bin", 0x200000, 0x200000, CRC(55841d90) SHA1(52ba3ee9393dcddf28e2d20a50151bc739faaaa4) ) + ROM_LOAD( "ver0106_ju02.bin", 0x000000, 0x200000, CRC(b27a4977) SHA1(b7f94bb04d0046538b3938335e6b0cce330ad79c) ) + /* expand this to take up 0x200000 bytes too so we can decode it */ + ROM_LOAD16_BYTE( "ver0106_esd5.ju07", 0x400000, 0x040000, CRC(7a3ac887) SHA1(3c759f9bed396bbaf6bd7298a8bd2bd76df3aa6f) ) + ROM_FILL( 0x500000, 0x100000, 0 ) + + ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layers, 16x16x8 */ + ROM_LOAD16_BYTE( "rom.fu35", 0x000000, 0x200000, CRC(ba46f3dc) SHA1(4ac7695bdf4237654481f7f74f8650d70a51e691) ) + ROM_LOAD16_BYTE( "rom.fu34", 0x000001, 0x200000, CRC(2895cf09) SHA1(88756fcd589af1986c3881d4080f086afc11b498) ) + + ROM_REGION( 0x80000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "ver0106_esd4.su10", 0x00000, 0x40000, CRC(ac8ae009) SHA1(2c1c30cc4b3e34a5f14d7dfb6f6e18ff21f526f5) ) +ROM_END + +ROM_START( mchampda ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "esd2.cu02", 0x000000, 0x040000, CRC(4cca802c) SHA1(5e6e81febbb56b7c4630b530e546e7ab59c6c6c1) ) + ROM_LOAD16_BYTE( "esd1.cu03", 0x000001, 0x040000, CRC(0af1cd0a) SHA1(d2befcb596d83d523317d17b4c1c71f99de0d33e) ) + + ROM_REGION( 0x84000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "esd3.su06", 0x00000, 0x0c000, CRC(2c0c8813) SHA1(ad6b881af4a629a948dcb3c99cea73c20ba1faf4) ) + ROM_CONTINUE( 0x10000, 0x74000 ) + + ROM_REGION( 0x600000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites, 16x16x5 */ + ROM_LOAD( "rom.ju01", 0x200000, 0x200000, CRC(1a749fc2) SHA1(feff4b26ee28244b4d092798a176e33e09d5df2c) ) + ROM_LOAD( "rom.ju02", 0x000000, 0x200000, CRC(7e87e332) SHA1(f90aa00a64a940846d99053c7aa023e3fd5d070b) ) + /* expand this to take up 0x200000 bytes too so we can decode it */ + ROM_LOAD16_BYTE( "esd5.ju07", 0x400000, 0x080000, CRC(6cc871cc) SHA1(710b9695c864e4234686993b88d24590d60e1cb9) ) + ROM_FILL( 0x500000, 0x100000, 0 ) + + ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layers, 16x16x8 */ + ROM_LOAD16_BYTE( "rom.fu35", 0x000000, 0x200000, CRC(ba46f3dc) SHA1(4ac7695bdf4237654481f7f74f8650d70a51e691) ) + ROM_LOAD16_BYTE( "rom.fu34", 0x000001, 0x200000, CRC(2895cf09) SHA1(88756fcd589af1986c3881d4080f086afc11b498) ) + + ROM_REGION( 0x80000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "esd4.su10", 0x00000, 0x80000, CRC(14c4a30d) SHA1(d8eb2f08d5293f729cbec1897e3b92b675cc2814) ) +ROM_END + + + +/* Tang Tang + +Tang Tang (ESD) +------------------------ + +PCB Layout +---------- + +ESD made in Korea +|-----------------------------------------| +| U6614 U6612 6116 AD65 ESD4.SU10 | +|VOL ESD3.SU06 Z80 ROM.JU04| +| PAL | +| 6116 ROM.JU05| +| 6116 PAL 6116 | +| 6116 |-------| ROM.JU06| +|J PAL | ESD | | +|A PAL |CRTC99 | ROM.JU07| +|M PAL | 0016 | | +|M PAL |-------| ROM.JU08| +|A 68000 ESD1.CU03 | +| ESD2.CU02 |-------| | +| |ACTEL | 6116 | +| |A40MX04| 6116 | +| MCM6206 | 0008 | 6116 | +| MCM6206 |-------| 6116 | +| 16MHz PAL MCM6206 | +| 14MHz PAL MCM6206 ROM.FU35 ROM.FU34 | +|-----------------------------------------| + +Notes: + 68000 (MC68HC000FN16-2E60R-QQJU9508) + Z80 (Z84C00006FEC-Z80CPU-9618Z3) + OKI6295 label AD65 (sound) + YM3014 label U6614 (sound) + YM3812 label U6612 (sound) + MCM6206 - 32k x8 SRAM (SOJ28) + 6116 - 2k x8 SRAM (SOP28) + A40MX04 - Actel A40MX04-F FPGA (PLCC84) + CRTC99 - ESD CRTC99 Graphics Controller (QFP240) + ESD1-2 - 27C2001 + ESD3-4 - 27C2000 + JU04-8 - MX27C2000PC + FU34,FU35 - MX29F1610MC +1x connector JAMMA +1x trimmer (volume) +2x pushbutton + + * : Board has positions for 6x standard 32 pin EPROMs but only 5 positions are populated + with an EPROM. + +*/ + +ROM_START( tangtang ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "esd2.cu02", 0x000000, 0x040000, CRC(b6dd6e3d) SHA1(44d2663827c45267eb154c873f3bd2e9e2bf3d3f) ) + ROM_LOAD16_BYTE( "esd1.cu03", 0x000001, 0x040000, CRC(b6c0f2f4) SHA1(68ad76e7e380c728dda200a852729e034d9c9f4c) ) + + ROM_REGION( 0x84000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "esd3.su06", 0x00000, 0x0c000, CRC(d48ecc5c) SHA1(5015dd775980542eb29a08bffe1a09ea87d56272) ) + ROM_CONTINUE( 0x10000, 0x34000 ) + + ROM_REGION( 0x140000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites, 16x16x5 */ + ROM_LOAD( "xju04.bin", 0x000000, 0x040000, CRC(f999b9d7) SHA1(9e4d0e68cdc429c7563b8ad51c072d68ffed09dc) ) + ROM_LOAD( "xju05.bin", 0x040000, 0x040000, CRC(679302cf) SHA1(911c2f7e0e809ee28e4f2364788fd51d2bcef24e) ) + ROM_LOAD( "xju06.bin", 0x080000, 0x040000, CRC(01f59ff7) SHA1(a62a2d5c2d107f67fecfc08fdb5d801ee39c3875) ) + ROM_LOAD( "xju07.bin", 0x0c0000, 0x040000, CRC(556acac3) SHA1(10e919e63b434da80fb261db1d8967cb11e95e00) ) + ROM_LOAD( "xju08.bin", 0x100000, 0x040000, CRC(ecc2d8c7) SHA1(1aabdf7204fcdff8d46cb50de8b097e3775dddf3) ) + + ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layers, 16x16x8 */ + ROM_LOAD16_BYTE( "fu35.bin", 0x000000, 0x200000, CRC(84f3f833) SHA1(f84e41d93dc47a58ada800b921a7e5902b7631cd) ) + ROM_LOAD16_BYTE( "fu34.bin", 0x000001, 0x200000, CRC(bf91f543) SHA1(7c149fed8b8044850cd6b798622a91c45336cd47) ) + + ROM_REGION( 0x80000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "esd4.su10", 0x00000, 0x20000, CRC(f2dfb02d) SHA1(04001488697aad3e5b2d15c9f5a81dc2b7d0952c) ) +ROM_END + +/*************************************************************************** + +PCB Layout (Head Panic) +---------- + +ESD 08-26-1999 + + 3014 3812 6116 6295 ESD4 + ESD3 Z80 * + 6116 6116 ESD6 * + 6116 6116 ESD7 * + ESD_CRTC99 * + (LARGE QFP) ESD5 * + ESD1 * + ESD2 + 68000 6116 + MCM6206 ACTEL 6116 + 93C46 MCM6206 A40MX04 6116 + 16MHz MCM6206 6116 + 14MHz MCM6206 ESD8 % ESD9 + + +Notes: + HSync: 15.625kHz + VSync: 60Hz + MCM6206 is 32kx8 SRAM + 6116 is 8kx8 SRAM + * : Board has positions for 6x standard 32 pin EPROMs but only position ESD5 is populated + with an EPROM. In between the unpopulated positions are 2x smt pads. These are populated + with 2x 16M SOP44 smt Mask ROMs. + % : ROMs ESD8 and ESD9 are also 16M SOP44 smt Mask ROMs, though these are dedicated smt + locations (i.e. no option for EPROMs at this location) + +***************************************************************************/ + + +ROM_START( hedpanic ) + ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "esd2", 0x000000, 0x040000, CRC(8cccc691) SHA1(d6a5dd6c21a67638b9023182f77780282b9b04e5) ) + ROM_LOAD16_BYTE( "esd1", 0x000001, 0x040000, CRC(d8574925) SHA1(bd4990778b90a49aa6b10f8cf6709ce2424f546a) ) + + ROM_REGION( 0x84000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "esd3", 0x00000, 0x0c000, CRC(c668d443) SHA1(fa66a5dc5cb10e6ccc3fbdd7790091d912767001) ) // 0x040000 of data repeated 2x + ROM_CONTINUE( 0x10000, 0x74000 ) + + ROM_REGION( 0x600000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites, 16x16x5 */ + ROM_LOAD( "esd6", 0x200000, 0x200000, CRC(5858372c) SHA1(dc96112587df681d53cf7449bd39477919978325) ) + ROM_LOAD( "esd7", 0x000000, 0x200000, CRC(055d525f) SHA1(85ad474691f96e47311a1904015d1c92d3b2d607) ) + /* expand this to take up 0x200000 bytes too so we can decode it */ + ROM_LOAD16_BYTE( "esd5", 0x400000, 0x080000, CRC(bd785921) SHA1(c8bcb38d5aa6f5a27f0dedf7efd1d6737d59b4ca) ) + ROM_FILL( 0x500000, 0x100000, 0 ) + + ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layers, 16x16x8 */ + ROM_LOAD16_BYTE( "esd8", 0x000000, 0x200000, CRC(23aceb4f) SHA1(35d9ebc33b9e1515e47750cfcdfc0bf8bf44b71d) ) + ROM_LOAD16_BYTE( "esd9", 0x000001, 0x200000, CRC(76b46cd2) SHA1(679cbf50ae5935e8848868081ecef4ec66424f6c) ) + + ROM_REGION( 0x80000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "esd4", 0x000000, 0x080000, CRC(5692fe92) SHA1(4423039cb437ab36d198b212ef394bf1704be404) ) // 0x020000 of data repeated 4x +ROM_END + +/*************************************************************************** + + + Game Drivers + + +***************************************************************************/ + +/* ESD 11-09-98 */ +GAME( 1999, multchmp, 0, multchmp, multchmp, 0, ROT0, "ESD", "Multi Champ (World)", 0 ) +GAME( 1998, multchmk, multchmp, multchmp, multchmp, 0, ROT0, "ESD", "Multi Champ (Korea)", 0 ) + +/* ESD 08-26-1999 */ +GAME( 2000, mchampdx, 0, mchampdx, hedpanic, 0, ROT0, "ESD", "Multi Champ Deluxe (ver. 0106, 06/01/2000)", 0 ) // 06/01/2000 ? +GAME( 1999, mchampda, mchampdx, mchampdx, hedpanic, 0, ROT0, "ESD", "Multi Champ Deluxe (ver. 1126, 26/11/1999)", 0 ) // 26/11/1999 ? +GAME( 2000, hedpanic, 0, hedpanic, hedpanic, 0, ROT0, "ESD / Fuuki", "Head Panic (ver. 0315, 15/03/2000)", 0 ) // 15/03/2000 ? + +/* ESD */ +GAME( 2000, tangtang, 0, tangtang, hedpanic, 0, ROT0, "ESD", "Tang Tang (ver. 0526, 26/05/2000)", 0 ) // 26/05/2000 ? |