diff options
Diffstat (limited to 'src/mame/drivers/metlclsh.c')
-rw-r--r-- | src/mame/drivers/metlclsh.c | 460 |
1 files changed, 460 insertions, 0 deletions
diff --git a/src/mame/drivers/metlclsh.c b/src/mame/drivers/metlclsh.c new file mode 100644 index 00000000000..d7a6212c284 --- /dev/null +++ b/src/mame/drivers/metlclsh.c @@ -0,0 +1,460 @@ +/*************************************************************************** + + -= Metal Clash =- + + driver by Luca Elia, based on brkthru.c by Phil Stroffolino + + +CPUs : 2 x 6809 +Sound : YM2203 + YM3526 +Video : TC15G008AP + TC15G032CY (TOSHIBA) + +--------------------------------------------------------------------------- +Year + Game Boards +--------------------------------------------------------------------------- +85 Metal Clash DE-0212-1 & DE-0213-1 +--------------------------------------------------------------------------- + +Notes: + +- Similar hardware to that in brkthru.c +- Screenshots here: www.ne.jp/asahi/cc-sakura/akkun/bekkan/metal.html + +To Do: + +metlclsh: +- Clocks are all unknown +- Text on the title screen has wrong colors the first time around + (unitialized foreground palette 1, will be initialized shortly) +- The background tilemap ram is bankswitched with other (not understood) ram +- There are a few unknown writes + +***************************************************************************/ + +#include "driver.h" +#include "cpu/m6809/m6809.h" +#include "sound/2203intf.h" +#include "sound/3812intf.h" + +/* Variables defined in video: */ + +extern UINT8 *metlclsh_bgram, *metlclsh_fgram, *metlclsh_scrollx; + +/* Functions defined in video: */ + +WRITE8_HANDLER( metlclsh_bgram_w ); +WRITE8_HANDLER( metlclsh_fgram_w ); +WRITE8_HANDLER( metlclsh_gfxbank_w ); +WRITE8_HANDLER( metlclsh_rambank_w ); + +VIDEO_START( metlclsh ); +VIDEO_UPDATE( metlclsh ); + +/*************************************************************************** + + Memory Maps - CPU #1 + +***************************************************************************/ + +static UINT8 *sharedram; + +static READ8_HANDLER ( sharedram_r ) { return sharedram[offset]; } +static WRITE8_HANDLER( sharedram_w ) { sharedram[offset] = data; } + +static WRITE8_HANDLER( metlclsh_cause_irq ) +{ + cpunum_set_input_line(1,M6809_IRQ_LINE,ASSERT_LINE); +} + +static WRITE8_HANDLER( metlclsh_ack_nmi ) +{ + cpunum_set_input_line(0,INPUT_LINE_NMI,CLEAR_LINE); +} + +static ADDRESS_MAP_START( metlclsh_readmem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x7fff) AM_READ(MRA8_ROM ) + AM_RANGE(0x8000, 0x9fff) AM_READ(sharedram_r ) + AM_RANGE(0xa000, 0xbfff) AM_READ(MRA8_ROM ) + AM_RANGE(0xc000, 0xc000) AM_READ(input_port_0_r ) + AM_RANGE(0xc001, 0xc001) AM_READ(input_port_1_r ) + AM_RANGE(0xc002, 0xc002) AM_READ(input_port_2_r ) + AM_RANGE(0xc003, 0xc003) AM_READ(input_port_3_r ) +// AM_RANGE(0xc800, 0xc82f) AM_READ(MRA8_RAM ) // not actually read +// AM_RANGE(0xcc00, 0xcc2f) AM_READ(MRA8_RAM ) // "" + AM_RANGE(0xd000, 0xd000) AM_READ(YM2203_status_port_0_r ) +// AM_RANGE(0xd800, 0xdfff) AM_READ(MRA8_RAM ) // not actually read + AM_RANGE(0xe800, 0xe9ff) AM_READ(MRA8_RAM ) + AM_RANGE(0xfff0, 0xffff) AM_READ(MRA8_ROM ) // Reset/IRQ vectors +ADDRESS_MAP_END + +static ADDRESS_MAP_START( metlclsh_writemem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x7fff) AM_WRITE(MWA8_ROM ) + AM_RANGE(0x8000, 0x9fff) AM_WRITE(sharedram_w) AM_BASE(&sharedram ) + AM_RANGE(0xa000, 0xbfff) AM_WRITE(MWA8_ROM ) + AM_RANGE(0xc080, 0xc080) AM_WRITE(MWA8_NOP ) // ? 0 + AM_RANGE(0xc0c2, 0xc0c2) AM_WRITE(metlclsh_cause_irq ) // cause irq on cpu #2 + AM_RANGE(0xc0c3, 0xc0c3) AM_WRITE(metlclsh_ack_nmi ) // nmi ack + AM_RANGE(0xc800, 0xc82f) AM_WRITE(paletteram_xxxxBBBBGGGGRRRR_split1_w) AM_BASE(&paletteram ) + AM_RANGE(0xcc00, 0xcc2f) AM_WRITE(paletteram_xxxxBBBBGGGGRRRR_split2_w) AM_BASE(&paletteram_2 ) + AM_RANGE(0xd000, 0xd000) AM_WRITE(YM2203_control_port_0_w ) + AM_RANGE(0xd001, 0xd001) AM_WRITE(YM2203_write_port_0_w ) + AM_RANGE(0xe000, 0xe000) AM_WRITE(YM3526_control_port_0_w ) + AM_RANGE(0xe001, 0xe001) AM_WRITE(YM3526_write_port_0_w ) + AM_RANGE(0xe800, 0xe9ff) AM_WRITE(MWA8_RAM) AM_BASE(&spriteram) AM_SIZE(&spriteram_size ) + AM_RANGE(0xd800, 0xdfff) AM_WRITE(metlclsh_fgram_w) AM_BASE(&metlclsh_fgram ) + AM_RANGE(0xfff0, 0xffff) AM_WRITE(MWA8_ROM ) +ADDRESS_MAP_END + + +/*************************************************************************** + + Memory Maps - CPU #2 + +***************************************************************************/ + +static WRITE8_HANDLER( metlclsh_cause_nmi2 ) +{ + cpunum_set_input_line(0,INPUT_LINE_NMI,ASSERT_LINE); +} + +static WRITE8_HANDLER( metlclsh_ack_irq2 ) +{ + cpunum_set_input_line(1,M6809_IRQ_LINE,CLEAR_LINE); +} + +static WRITE8_HANDLER( metlclsh_ack_nmi2 ) +{ + cpunum_set_input_line(1,INPUT_LINE_NMI,CLEAR_LINE); +} + +static WRITE8_HANDLER( metlclsh_flipscreen_w ) +{ + flip_screen_set(data & 1); +} + +static ADDRESS_MAP_START( metlclsh_readmem2, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x7fff) AM_READ(MRA8_ROM ) + AM_RANGE(0x8000, 0x9fff) AM_READ(sharedram_r ) + AM_RANGE(0xc000, 0xc000) AM_READ(input_port_0_r ) + AM_RANGE(0xc001, 0xc001) AM_READ(input_port_1_r ) + AM_RANGE(0xc002, 0xc002) AM_READ(input_port_2_r ) + AM_RANGE(0xc003, 0xc003) AM_READ(input_port_3_r ) + AM_RANGE(0xd000, 0xd7ff) AM_READ(MRA8_BANK1 ) + AM_RANGE(0xfff0, 0xffff) AM_READ(MRA8_ROM ) // Reset/IRQ vectors +ADDRESS_MAP_END + +static ADDRESS_MAP_START( metlclsh_writemem2, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x7fff) AM_WRITE(MWA8_ROM ) + AM_RANGE(0x8000, 0x9fff) AM_WRITE(sharedram_w ) + AM_RANGE(0xc000, 0xc000) AM_WRITE(metlclsh_gfxbank_w ) // bg tiles bank + AM_RANGE(0xc0c0, 0xc0c0) AM_WRITE(metlclsh_cause_nmi2 ) // cause nmi on cpu #1 + AM_RANGE(0xc0c1, 0xc0c1) AM_WRITE(metlclsh_ack_irq2 ) // irq ack + AM_RANGE(0xd000, 0xd7ff) AM_WRITE(metlclsh_bgram_w) AM_BASE(&metlclsh_bgram ) // this is banked + AM_RANGE(0xe417, 0xe417) AM_WRITE(metlclsh_ack_nmi2 ) // nmi ack + AM_RANGE(0xe301, 0xe301) AM_WRITE(metlclsh_flipscreen_w ) // 0/1 + AM_RANGE(0xe401, 0xe401) AM_WRITE(metlclsh_rambank_w ) + AM_RANGE(0xe402, 0xe403) AM_WRITE(MWA8_RAM) AM_BASE(&metlclsh_scrollx ) +// AM_RANGE(0xe404, 0xe404) AM_WRITE(MWA8_NOP ) // ? 0 +// AM_RANGE(0xe410, 0xe410) AM_WRITE(MWA8_NOP ) // ? 0 on startup only + AM_RANGE(0xfff0, 0xffff) AM_WRITE(MWA8_ROM ) +ADDRESS_MAP_END + + +/*************************************************************************** + + Input Ports + +***************************************************************************/ + +static INPUT_PORTS_START( metlclsh ) + PORT_START_TAG("IN0") /* c000 */ + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) ) + 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( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, "Infinite Energy (Cheat)") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Infinite Lives (Cheat)") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START_TAG("IN1") /* c001 */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) + + PORT_START_TAG("IN2") /* c002 */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_COCKTAIL + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(1) + + PORT_START_TAG("IN3") /* c003 */ + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x00, "2" ) + PORT_DIPSETTING( 0x01, "3" ) + PORT_DIPNAME( 0x02, 0x02, "Enemies Speed" ) + PORT_DIPSETTING( 0x02, DEF_STR( Low ) ) + PORT_DIPSETTING( 0x00, DEF_STR( High ) ) + PORT_DIPNAME( 0x04, 0x04, "Enemies Energy" ) + PORT_DIPSETTING( 0x04, DEF_STR( Low ) ) + PORT_DIPSETTING( 0x00, DEF_STR( High ) ) + PORT_DIPNAME( 0x08, 0x08, "Time" ) + PORT_DIPSETTING( 0x00, "75" ) + PORT_DIPSETTING( 0x08, "90" ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // cpu2 will clr c040 on startup forever + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_IMPULSE(1) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_VBLANK ) +INPUT_PORTS_END + + +/*************************************************************************** + + Graphics Layouts + +***************************************************************************/ + +static const gfx_layout spritelayout = +{ + 16,16, + RGN_FRAC(1,3), + 3, + { RGN_FRAC(2,3), RGN_FRAC(1,3), RGN_FRAC(0,3) }, + { STEP8(8*8*2,1), STEP8(8*8*0,1) }, + { STEP8(8*8*0,8), STEP8(8*8*1,8) }, + 16*16 +}; + +static const gfx_layout tilelayout16 = +{ + 16,16, + RGN_FRAC(1,4), + 3, + { RGN_FRAC(2,4), RGN_FRAC(1,4), RGN_FRAC(0,4) }, + { STEP8(8*8*0+7,-1), STEP8(8*8*2+7,-1) }, + { STEP8(8*8*0,8), STEP8(8*8*1,8) }, + 16*16 +}; + +static const gfx_layout tilelayout8 = +{ + 8,8, + RGN_FRAC(1,2), + 2, + { 0, 4 }, + { STEP4(RGN_FRAC(1,2),1), STEP4(0,1) }, + { STEP8(0,8) }, + 8*8 +}; + +static GFXDECODE_START( metlclsh ) + GFXDECODE_ENTRY( REGION_GFX1, 0, spritelayout, 0x00, 2 ) // [0] Sprites + GFXDECODE_ENTRY( REGION_GFX2, 0, tilelayout16, 0x10, 1 ) // [1] Background + GFXDECODE_ENTRY( REGION_GFX3, 0, tilelayout8, 0x20, 4 ) // [2] Foreground +GFXDECODE_END + + +/*************************************************************************** + + Machine Drivers + +***************************************************************************/ + +static void metlclsh_irqhandler(int linestate) +{ + cpunum_set_input_line(0,M6809_IRQ_LINE,linestate); +} + +static struct YM3526interface ym3526_interface = +{ + metlclsh_irqhandler +}; + +static INTERRUPT_GEN( metlclsh_interrupt2 ) +{ + if (cpu_getiloops() == 0) + return; + /* generate NMI on coin insertion */ + if ((~readinputport(2) & 0xc0) || (~readinputport(3) & 0x40)) + cpunum_set_input_line(1, INPUT_LINE_NMI, ASSERT_LINE); +} + +static MACHINE_RESET( metlclsh ) +{ + flip_screen_set(0); +} + +static MACHINE_DRIVER_START( metlclsh ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M6809, 1500000) // ? + MDRV_CPU_PROGRAM_MAP(metlclsh_readmem, metlclsh_writemem) + // IRQ by YM3526, NMI by cpu #2 + + MDRV_CPU_ADD(M6809, 1500000) // ? + MDRV_CPU_PROGRAM_MAP(metlclsh_readmem2, metlclsh_writemem2) + MDRV_CPU_VBLANK_INT(metlclsh_interrupt2,2) + // IRQ by cpu #1, NMI by coins insertion + + MDRV_SCREEN_REFRESH_RATE(58) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) // we're using IPT_VBLANK + + MDRV_MACHINE_RESET(metlclsh) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(32*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 30*8-1) + MDRV_GFXDECODE(metlclsh) + MDRV_PALETTE_LENGTH(3 * 16) + + MDRV_VIDEO_START(metlclsh) + MDRV_VIDEO_UPDATE(metlclsh) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(YM2203, 1500000) + MDRV_SOUND_ROUTE(0, "mono", 0.10) + MDRV_SOUND_ROUTE(1, "mono", 0.10) + MDRV_SOUND_ROUTE(2, "mono", 0.10) + MDRV_SOUND_ROUTE(3, "mono", 0.50) + + MDRV_SOUND_ADD(YM3526, 3000000) + MDRV_SOUND_CONFIG(ym3526_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) +MACHINE_DRIVER_END + + +/*************************************************************************** + + ROMs Loading + +***************************************************************************/ + +/*************************************************************************** + +METAL CLASH[DATA EAST] JAPAN (c)1985 +ROM Type:2764,27256 + +Name Size Location +-------------------------------- +CS00.BIN 2764 C11 cpu +CS01.BIN 27256 C12 cpu +CS02.BIN 27256 C14 cpu +CS03.BIN 27256 C15 cpu +CS04.BIN 27256 C17 cpu +CS05.BIN 27256 H7 sound + +CS06.BIN 27256 D9 Video +CS07.BIN 27256 D10 Video +CS08.BIN 27256 D12 Video + +TTL-PROM 82S123(Color Table,8bit x 32Byte). +0000:3A 78 79 71 75 74 76 32 +0008:3A 3D 29 21 25 14 16 12 +0010:00 00 00 00 00 00 00 00 +0018:00 00 00 00 00 00 00 00 + +This ROM work at DE-0212-1 & DE-0213-1 + +cpu :6809(MAIN),6809(SOUND) +sound :YM2203,YM3526 +custom:TC15G008AP,TC15G032CY(TOSHIBA) +color :82S123 + +DIP-SW +SW1 +1 Coin CHARGE SELECT 1 +2 Coin CHARGE SELECT 1 +3 Coin CHARGE SELECT 2 +4 Coin CHARGE SELECT 2 +5 DON't CHANGE(for SERVICE ??) +6 ATTRACT SOUND +7 My ROBOT Infinity +8 My ROBOT LEFT not Decriment + +SW2 +1 My ROBOT LEFT 2/3 +2 EMENY SPEED EASY/DIFFICULT +3 EMENY ENERGY EASY/DIFFICULT +4 TIME LONG/DIFFICULT +5 SCREEN CHANGE NORMAL/FLIP +6 none ?? +7 none ?? +8 DON't CHANGE(for SERVICE ??) + +"DARWIN 4078" use TC15G032CY too. + +***************************************************************************/ + +ROM_START( metlclsh ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + ROM_LOAD( "cs04.bin", 0x00000, 0x8000, CRC(c2cc79a6) SHA1(0f586d4145afabbb45ea4865ed7a6590b14a2ab0) ) + ROM_LOAD( "cs00.bin", 0x0a000, 0x2000, CRC(af0f2998) SHA1(09dd2516406168660d5cd3a36be1e5f0adbcdb8a) ) + ROM_COPY( REGION_CPU1, 0x7ff0, 0xfff0, 0x10 ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) + ROM_LOAD( "cs03.bin", 0x00000, 0x8000, CRC(51c4720c) SHA1(7fd93bdcf029e7d2509b73b32f61fddf85f3453f) ) + ROM_COPY( REGION_CPU2, 0x7ff0, 0xfff0, 0x10 ) + + ROM_REGION( 0x18000, REGION_GFX1, ROMREGION_DISPOSE ) // Sprites + ROM_LOAD( "cs06.bin", 0x00000, 0x8000, CRC(9f61403f) SHA1(0ebb1cb9d4983746b6b32ec948e7b9efd90783d1) ) + ROM_LOAD( "cs07.bin", 0x08000, 0x8000, CRC(d0610ea5) SHA1(3dfa16cbe93a4c08993111f78a8dd22c874fdd28) ) + ROM_LOAD( "cs08.bin", 0x10000, 0x8000, CRC(a8b02125) SHA1(145a22b2910b2fbfb28925f58968ee2bdeae1dda) ) + + ROM_REGION( 0x10000, REGION_GFX2, ROMREGION_DISPOSE ) // Background + ROM_LOAD( "cs01.bin", 0x00000, 0x1000, CRC(9c72343d) SHA1(c5618be7874ab6c930b0e68935c93f1958a1916d) ) + ROM_CONTINUE( 0x04000, 0x1000 ) + ROM_CONTINUE( 0x08000, 0x1000 ) + ROM_CONTINUE( 0x0c000, 0x1000 ) + ROM_CONTINUE( 0x01000, 0x1000 ) + ROM_CONTINUE( 0x05000, 0x1000 ) + ROM_CONTINUE( 0x09000, 0x1000 ) + ROM_CONTINUE( 0x0d000, 0x1000 ) + ROM_LOAD( "cs02.bin", 0x02000, 0x1000, CRC(3674673e) SHA1(8ba8864cefcb79afe5fe6821005a9d19742756e9) ) + ROM_CONTINUE( 0x06000, 0x1000 ) + ROM_CONTINUE( 0x0a000, 0x1000 ) + ROM_CONTINUE( 0x0e000, 0x1000 ) + ROM_CONTINUE( 0x03000, 0x1000 ) + ROM_CONTINUE( 0x07000, 0x1000 ) + ROM_CONTINUE( 0x0b000, 0x1000 ) + ROM_CONTINUE( 0x0f000, 0x1000 ) + + ROM_REGION( 0x04000, REGION_GFX3, ROMREGION_DISPOSE ) // Foreground + ROM_LOAD( "cs05.bin", 0x00000, 0x4000, CRC(f90c9c6b) SHA1(ca8e497e9c388078343dd1303beef6ee38748d6a) ) + ROM_CONTINUE( 0x00000, 0x4000 ) // first half is empty + + ROM_REGION( 0x020, REGION_PROMS, 0 ) // ? + ROM_LOAD( "82s123.prm", 0x0000, 0x20, CRC(6844cc88) SHA1(89d23367aa6ff541205416e82781fe938dfeeb52) ) +ROM_END + +GAME( 1985, metlclsh, 0, metlclsh, metlclsh, 0, ROT0, "Data East", "Metal Clash (Japan)", 0 ) + |