From 754b2f1526b5bb9b244f2a2bf9b3af3a1f44d17c Mon Sep 17 00:00:00 2001 From: Tomasz Slanina Date: Wed, 3 Feb 2010 12:08:38 +0000 Subject: [PATCH] New games added or promoted from NOT_WORKING status --------------------------------------------------- Ghost Chaser Densei (SNES bootleg) [Tomasz Slanina, XingXing] --- src/mame/drivers/snesb.c | 172 ++++++++++++++++++++++++++++++++++++++- src/mame/mamedriv.c | 2 + 2 files changed, 173 insertions(+), 1 deletion(-) diff --git a/src/mame/drivers/snesb.c b/src/mame/drivers/snesb.c index a4bb9b2b75d..ea9cde7a6ff 100644 --- a/src/mame/drivers/snesb.c +++ b/src/mame/drivers/snesb.c @@ -9,6 +9,7 @@ - Final Fight 2 - Sonic Blast Man 2 - Iron (bootleg of Iron Commando) + - Ghost Chaser Densei Not dumped: - Final Fight 3 @@ -20,7 +21,6 @@ TODO: - kiinstb - fix gfx glitches, missing texts - Final Fight 2 PCB layout: ------------------------ @@ -245,6 +245,18 @@ static READ8_HANDLER(iron_770079_r) } +/* Denseib */ + +static READ8_HANDLER(denseib_770071_r) +{ + return input_port_read(space->machine, "DSW1"); +} + +static READ8_HANDLER(denseib_770079_r) +{ + return input_port_read(space->machine, "COIN"); +} + static ADDRESS_MAP_START( snesb_map, ADDRESS_SPACE_PROGRAM, 8) @@ -740,6 +752,117 @@ static INPUT_PORTS_START( iron ) INPUT_PORTS_END +static INPUT_PORTS_START( denseib ) + PORT_START("PAD1L") /* IN 0 : Joypad 1 - L */ + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P1 Button A") PORT_PLAYER(1) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("P1 Button X") PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("P1 Button L") PORT_PLAYER(1) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("P1 Button R") PORT_PLAYER(1) + PORT_START("PAD1H") /* IN 1 : Joypad 1 - H */ + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P1 Button B") PORT_PLAYER(1) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P1 Button Y") PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_NAME("P1 Select") + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START1 ) PORT_NAME("P1 Start") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + + PORT_START("PAD2L") /* IN 2 : Joypad 2 - L */ + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P2 Button A") PORT_PLAYER(2) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("P2 Button X") PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("P2 Button L") PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("P2 Button R") PORT_PLAYER(2) + PORT_START("PAD2H") /* IN 3 : Joypad 2 - H */ + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P2 Button B") PORT_PLAYER(2) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P2 Button Y") PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SERVICE2 ) PORT_NAME("P2 Select") + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START2 ) PORT_NAME("P2 Start") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + + PORT_START("PAD3L") /* IN 4 : Joypad 3 - L */ + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P3 Button A") PORT_PLAYER(3) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("P3 Button X") PORT_PLAYER(3) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("P3 Button L") PORT_PLAYER(3) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("P3 Button R") PORT_PLAYER(3) + PORT_START("PAD3H") /* IN 5 : Joypad 3 - H */ + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P3 Button B") PORT_PLAYER(3) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P3 Button Y") PORT_PLAYER(3) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SERVICE3 ) PORT_NAME("P3 Select") + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START3 ) PORT_NAME("P3 Start") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(3) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(3) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3) + + PORT_START("PAD4L") /* IN 6 : Joypad 4 - L */ + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P4 Button A") PORT_PLAYER(4) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("P4 Button X") PORT_PLAYER(4) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("P4 Button L") PORT_PLAYER(4) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("P4 Button R") PORT_PLAYER(4) + PORT_START("PAD4H") /* IN 7 : Joypad 4 - H */ + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P4 Button B") PORT_PLAYER(4) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P4 Button Y") PORT_PLAYER(4) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SERVICE4 ) PORT_NAME("P4 Select") + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START4 ) PORT_NAME("P4 Start") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(4) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(4) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(4) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(4) + + PORT_START("INTERNAL") /* IN 8 : Internal switches */ + PORT_DIPNAME( 0x1, 0x1, "Enforce 32 sprites/line" ) + PORT_DIPSETTING( 0x0, DEF_STR( No ) ) + PORT_DIPSETTING( 0x1, DEF_STR( Yes ) ) + +#ifdef MAME_DEBUG + PORT_START("DEBUG1") /* IN 9 : debug switches */ + PORT_DIPNAME( 0x3, 0x0, "Browse tiles" ) + PORT_DIPSETTING( 0x0, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x1, "2bpl" ) + PORT_DIPSETTING( 0x2, "4bpl" ) + PORT_DIPSETTING( 0x3, "8bpl" ) + PORT_DIPNAME( 0xc, 0x0, "Browse maps" ) + PORT_DIPSETTING( 0x0, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x4, "2bpl" ) + PORT_DIPSETTING( 0x8, "4bpl" ) + PORT_DIPSETTING( 0xc, "8bpl" ) + + PORT_START("DEBUG2") /* IN 10 : debug switches */ + PORT_BIT( 0x1, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_NAME("Toggle BG 1") PORT_PLAYER(2) + PORT_BIT( 0x2, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_NAME("Toggle BG 2") PORT_PLAYER(2) + PORT_BIT( 0x4, IP_ACTIVE_HIGH, IPT_BUTTON9 ) PORT_NAME("Toggle BG 3") PORT_PLAYER(2) + PORT_BIT( 0x8, IP_ACTIVE_HIGH, IPT_BUTTON10 ) PORT_NAME("Toggle BG 4") PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_NAME("Toggle Objects") PORT_PLAYER(3) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_NAME("Toggle Main/Sub") PORT_PLAYER(3) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON9 ) PORT_NAME("Toggle Back col") PORT_PLAYER(3) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON10 ) PORT_NAME("Toggle Windows") PORT_PLAYER(3) + + PORT_START("DEBUG3") /* IN 11 : debug input */ + PORT_BIT( 0x1, IP_ACTIVE_HIGH, IPT_BUTTON9 ) PORT_NAME("Pal prev") + PORT_BIT( 0x2, IP_ACTIVE_HIGH, IPT_BUTTON10 ) PORT_NAME("Pal next") + PORT_BIT( 0x4, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_NAME("Toggle Transparency") PORT_PLAYER(4) +#endif + + PORT_START("DSW1") /* IN 12 : dip-switches */ + PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "SW1:1" ) + PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW1:2" ) + PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "SW1:3" ) + PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW1:4" ) + PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "SW1:5" ) + PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW1:6" ) + PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW1:7" ) + PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW1:8" ) + + PORT_START("COIN") /* IN 14 : coins */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) + +INPUT_PORTS_END + static MACHINE_DRIVER_START( kinstb ) /* basic machine hardware */ @@ -938,6 +1061,38 @@ static DRIVER_INIT( endless ) DRIVER_INIT_CALL(snes); } +static DRIVER_INIT( denseib ) +{ + + UINT8 *rom = memory_region(machine, "user3"); + + INT32 i; + for(i=0;i<0x200000;i++) + { + rom[i]=rom[i]^0xff; + switch(i>>16) + { + case 0x00: rom[i]=BITSWAP8(rom[i],1,7,0,6,3,4,5,2); break; + case 0x01: rom[i]=BITSWAP8(rom[i],3,4,7,2,0,6,5,1); break; + case 0x02: rom[i]=BITSWAP8(rom[i],5,4,2,1,7,0,6,3); break; + case 0x03: rom[i]=BITSWAP8(rom[i],0,1,3,7,2,6,5,4); break; + + default: rom[i]=BITSWAP8(rom[i],4,5,1,0,2,3,7,6); break; + } + } + + /* boot vector */ + rom[0xfffc]=0x40; + rom[0xfffd]=0xf7; + + /* extra inputs */ + memory_install_read8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x770071, 0x770071, 0, 0, denseib_770071_r); + memory_install_read8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x770079, 0x770079, 0, 0, denseib_770079_r); + + + DRIVER_INIT_CALL(snes_hirom); +} + ROM_START( kinstb ) ROM_REGION( 0x400000, "user3", 0 ) @@ -1034,8 +1189,23 @@ ROM_START( sblast2b ) ROM_END +ROM_START( denseib ) + ROM_REGION( 0x200000, "user3", ROMREGION_ERASEFF ) + ROM_LOAD( "dj.u14", 0x000000, 0x0080000, CRC(487ded13) SHA1(624edce30fe2f2d750bcb49c609ceb511b2279b1) ) + ROM_LOAD( "dj.u15", 0x080000, 0x0080000, CRC(5932a440) SHA1(6048372268a097b08d9f56ad30f083267d798165) ) + ROM_LOAD( "dj.u16", 0x100000, 0x0080000, CRC(7cb71fd7) SHA1(7673e9dcaabe804e2d637e67eabca1683dad4245) ) + ROM_LOAD( "dj.u17", 0x180000, 0x0080000, CRC(de29dd89) SHA1(441aefbc7ee64515ee66431ef504e76dc8dc5ca3) ) + + ROM_REGION(0x100, "user5", 0) + ROM_LOAD("spc700.rom", 0, 0x40, CRC(44bb3a40) SHA1(97e352553e94242ae823547cd853eecda55c20f0) ) + + ROM_REGION(0x800, "user6", ROMREGION_ERASEFF) +ROM_END + + GAME( 199?, kinstb, 0, kinstb, kinstb, kinstb, ROT0, "bootleg", "Killer Instinct (SNES bootleg)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) GAME( 1996, ffight2b, 0, kinstb, ffight2b, ffight2b, ROT0, "bootleg", "Final Fight 2 (SNES bootleg)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) GAME( 1997, sblast2b, 0, kinstb, sblast2b, sblast2b, ROT0, "bootleg", "Sonic Blast Man 2 Special Turbo (SNES bootleg)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS) GAME( 1996, iron, 0, kinstb, iron, iron, ROT0, "bootleg", "Iron (SNES bootleg)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) +GAME( 1996, denseib, 0, kinstb, denseib, denseib, ROT0, "bootleg", "Ghost Chaser Densei (SNES bootleg)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) GAME( 1996, endless, 0, kinstb, iron, endless, ROT0, "bootleg", "Gundam Wing: Endless Duel (SNES bootleg)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) diff --git a/src/mame/mamedriv.c b/src/mame/mamedriv.c index 7c3885f7070..8f568724ed5 100644 --- a/src/mame/mamedriv.c +++ b/src/mame/mamedriv.c @@ -1210,6 +1210,8 @@ const game_driver * const drivers[] = DRIVER( sblast2b ) /* bootleg */ DRIVER( iron ) /* bootleg */ DRIVER( endless ) /* bootleg */ + DRIVER( denseib ) /* bootleg */ + /* Midway 8080 b/w games */ DRIVER( seawolf ) /* 596 [1976] */