From 8c5e1a15a816557bd502ca49e22d5697d8aa0b05 Mon Sep 17 00:00:00 2001 From: Yasuhiro Ogawa Date: Mon, 22 Jun 2009 14:10:21 +0000 Subject: [PATCH] Added genuine Japanese version of lupin3 [Hau, Team Japump] Added support for cocktail mode. Previous version is renamed to lupin3a (it seems to be official modification from invaders board) --- src/mame/audio/8080bw.c | 2 +- src/mame/drivers/8080bw.c | 73 +++++++++++++++++++++++++++++++++++--- src/mame/includes/8080bw.h | 1 + src/mame/mamedriv.c | 1 + src/mame/video/8080bw.c | 7 ++++ 5 files changed, 78 insertions(+), 6 deletions(-) diff --git a/src/mame/audio/8080bw.c b/src/mame/audio/8080bw.c index 3b7ad8b47a1..80c97fde9b8 100644 --- a/src/mame/audio/8080bw.c +++ b/src/mame/audio/8080bw.c @@ -1057,7 +1057,7 @@ WRITE8_HANDLER( lupin3_sh_port_2_w ) if (rising_bits & 0x08) sample_start(samples, 3, 0, 0); /* start intermission, end game */ //if (rising_bits & 0x10) sample_start(samples, 3, 9, 0); /* Dog barking */ - c8080bw_flip_screen_w(space, data & 0x20); + lupin3_flip_screen_w(space, data & 0x60); port_2_last_extra = data; } diff --git a/src/mame/drivers/8080bw.c b/src/mame/drivers/8080bw.c index 3d4774abd69..937918bb5bd 100644 --- a/src/mame/drivers/8080bw.c +++ b/src/mame/drivers/8080bw.c @@ -1070,12 +1070,48 @@ static ADDRESS_MAP_START( lupin3_io_map, ADDRESS_SPACE_IO, 8 ) AM_RANGE(0x03, 0x03) AM_READWRITE(mb14241_0_shift_result_r, lupin3_sh_port_1_w) AM_RANGE(0x04, 0x04) AM_WRITE(mb14241_0_shift_data_w) AM_RANGE(0x05, 0x05) AM_WRITE(lupin3_sh_port_2_w) + AM_RANGE(0x06, 0x06) AM_WRITE(watchdog_reset_w) ADDRESS_MAP_END static INPUT_PORTS_START( lupin3 ) PORT_INCLUDE( invrvnge ) + PORT_MODIFY("IN0") + PORT_BIT( 0x03, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_TILT ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_COCKTAIL + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL + + PORT_MODIFY("IN1") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_4WAY + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_4WAY + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_4WAY + + PORT_MODIFY("IN2") + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:3") + PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Cocktail ) ) + PORT_DIPNAME( 0x08, 0x00, "Bags To Collect" ) PORT_DIPLOCATION("SW1:4") + PORT_DIPSETTING( 0x08, "2" ) + PORT_DIPSETTING( 0x00, "8" ) + PORT_DIPUNUSED_DIPLOC( 0x10, 0x00, "SW1:5" ) + PORT_DIPUNUSED_DIPLOC( 0x20, 0x00, "SW1:6" ) + PORT_DIPUNUSED_DIPLOC( 0x40, 0x00, "SW1:7" ) + PORT_DIPNAME(0x80, 0x00, "Invulnerability (Cheat)") PORT_DIPLOCATION("SW1:8") + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( lupin3a ) + PORT_INCLUDE( invrvnge ) + PORT_MODIFY("IN0") //PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* selects color mode (dynamic vs. static) */ //PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* something has to do with sound */ @@ -1109,14 +1145,26 @@ static INPUT_PORTS_START( lupin3 ) PORT_DIPNAME(0x80, 0x00, "Invulnerability (Cheat)") PORT_DIPLOCATION("SW1:8") PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x80, DEF_STR( On ) ) - - /* Dummy port for cocktail mode (not used) */ - PORT_MODIFY(CABINET_PORT_TAG) - PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) INPUT_PORTS_END static MACHINE_DRIVER_START( lupin3 ) + /* basic machine hardware */ + MDRV_IMPORT_FROM(mw8080bw_root) + MDRV_CPU_MODIFY("maincpu") + MDRV_CPU_IO_MAP(lupin3_io_map) + MDRV_MACHINE_START(extra_8080bw) + + /* video hardware */ + MDRV_VIDEO_UPDATE(indianbt) + + /* sound hardware */ + MDRV_IMPORT_FROM(invaders_samples_audio) + +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( lupin3a ) + /* basic machine hardware */ MDRV_IMPORT_FROM(mw8080bw_root) MDRV_CPU_MODIFY("maincpu") @@ -2435,6 +2483,20 @@ ROM_START( schasrcv ) ROM_END ROM_START( lupin3 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "lp01.36", 0x0000, 0x0800, CRC(fd506ee8) SHA1(67ce62f24892f0eddf3e47913dff541f41493a17) ) + ROM_LOAD( "lp02.35", 0x0800, 0x0800, CRC(ec4225f8) SHA1(cd7360b3b339e5050075b498226070914fb7a031) ) + ROM_LOAD( "lp03.34", 0x1000, 0x0800, CRC(9307d377) SHA1(081f6c63ff2dcc549e44ab5ff5f5ddf99d544640) ) + ROM_LOAD( "lp04.33", 0x1800, 0x0800, CRC(e41e8b2b) SHA1(e67eaa8aeaf13f706afc17074fbbde3ad2cc9548) ) + ROM_LOAD( "lp05.32", 0x4000, 0x0800, CRC(f5c2faf4) SHA1(8d056f8c630e4659c02dd5da759dd497e4734292) ) + ROM_LOAD( "lp06.31", 0x4800, 0x0800, CRC(66289ab2) SHA1(fc9b4a7b7a08d43f34beaf1a8e68ed0ff6148534) ) + + ROM_REGION( 0x0800, "proms", 0 ) /* color map */ + ROM_LOAD( "lp08.1", 0x0000, 0x0400, CRC(33dbd03a) SHA1(1e0ae1cad1e9a90642886ae2ef726d3f383dd6cf) ) + ROM_LOAD( "lp09.2", 0x0400, 0x0400, CRC(9eaee652) SHA1(a4d2d8282ba825f3a8c0cc9bca16e1d36a0d0796) ) +ROM_END + +ROM_START( lupin3a ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "lp12.bin", 0x0000, 0x0800, CRC(68a7f47a) SHA1(dce99b3810331d7603fa468f1dea984e571f709b) ) ROM_LOAD( "lp13.bin", 0x0800, 0x0800, CRC(cae9a17b) SHA1(a333ba7db45325996e3254ab36162bb7577e8a38) ) @@ -2652,7 +2714,8 @@ GAME( 1979, cosmo, 0, cosmo, cosmo, 0, ROT90, "TDS & Mints", "C GAME( 1979, schaser, 0, schaser, schaser, 0, ROT270, "Taito", "Space Chaser", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_COLORS ) GAME( 1979, schasrcv, schaser, schasrcv, schasrcv, 0, ROT270, "Taito", "Space Chaser (CV version)", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_COLORS ) GAME( 1979, sflush, 0, sflush, sflush, 0, ROT270, "Taito", "Straight Flush",GAME_SUPPORTS_SAVE | GAME_NO_SOUND | GAME_IMPERFECT_COLORS | GAME_NO_COCKTAIL) -GAME( 1980, lupin3, 0, lupin3, lupin3, 0, ROT270, "Taito", "Lupin III", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_SOUND | GAME_NO_COCKTAIL ) +GAME( 1980, lupin3, 0, lupin3, lupin3, 0, ROT270, "Taito", "Lupin III (set 1)", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_SOUND ) +GAME( 1980, lupin3a, lupin3, lupin3a, lupin3a, 0, ROT270, "Taito", "Lupin III (set 2)", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_SOUND ) GAME( 1980, polaris, 0, polaris, polaris, 0, ROT270, "Taito", "Polaris (set 1)", GAME_SUPPORTS_SAVE ) GAME( 1980, polarisa, polaris, polaris, polaris, 0, ROT270, "Taito", "Polaris (set 2)", GAME_SUPPORTS_SAVE ) GAME( 1980, ballbomb, 0, ballbomb, ballbomb, 0, ROT270, "Taito", "Balloon Bomber", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) /* missing clouds */ diff --git a/src/mame/includes/8080bw.h b/src/mame/includes/8080bw.h index 4716f228aba..d8b2f36f244 100644 --- a/src/mame/includes/8080bw.h +++ b/src/mame/includes/8080bw.h @@ -76,6 +76,7 @@ extern UINT8 *c8080bw_colorram; MACHINE_START( extra_8080bw_vh ); void c8080bw_flip_screen_w(const address_space *space, int data); +void lupin3_flip_screen_w(const address_space *space, int data); void c8080bw_screen_red_w(int data); void schaser_background_control_w(int data); diff --git a/src/mame/mamedriv.c b/src/mame/mamedriv.c index 7c51222561f..bd82f34ef16 100644 --- a/src/mame/mamedriv.c +++ b/src/mame/mamedriv.c @@ -1216,6 +1216,7 @@ const game_driver * const drivers[] = DRIVER( schaser ) /* RT Taito */ DRIVER( schasrcv ) /* RT Taito */ DRIVER( lupin3 ) /* LP (c) 1980 Taito */ + DRIVER( lupin3a ) /* LP (c) 1980 Taito */ DRIVER( intruder ) /* (c) 1980 GamePlan (Taito) */ DRIVER( spclaser ) /* (c) 1980 GamePlan (Taito) */ DRIVER( laser ) /* (c) 1980 Leisure Time Electronics Inc. */ diff --git a/src/mame/video/8080bw.c b/src/mame/video/8080bw.c index 4612cca3970..18204fdb708 100644 --- a/src/mame/video/8080bw.c +++ b/src/mame/video/8080bw.c @@ -41,6 +41,13 @@ void c8080bw_flip_screen_w(const address_space *space, int data) } +void lupin3_flip_screen_w(const address_space *space, int data) +{ + color_map = data & 0x40; + c8080bw_flip_screen = (data & 0x20) && (input_port_read(space->machine, "IN2") & 0x04); +} + + void c8080bw_screen_red_w(int data) { screen_red = data;