From bb7d965b8905ca4ce12ba23fed3deecce8bfc7d3 Mon Sep 17 00:00:00 2001 From: davidhay Date: Fri, 14 Nov 2008 22:30:05 +0000 Subject: [PATCH] new clone from Ross Myers --------- Puzzle Bobble 2 (Ver 2.3O 1995/07/31) [Ross Myers] ---- note At the moment the Taito F3 driver is pretty broken, it has been since the 68000 core changes in the last u update. For this clone to boot I've had to add a patch, it's checking something, can somebody find out what? Seems odd. I've also removed all speedups in the driver, the 68020 games are fast enough on modern hardware that the speedups aren't really worthwhile. --- src/mame/drivers/taito_f3.c | 139 ++++++++++++++---------------------- src/mame/mamedriv.c | 1 + 2 files changed, 54 insertions(+), 86 deletions(-) diff --git a/src/mame/drivers/taito_f3.c b/src/mame/drivers/taito_f3.c index e9e776d1d49..e2273cce5ea 100644 --- a/src/mame/drivers/taito_f3.c +++ b/src/mame/drivers/taito_f3.c @@ -2509,7 +2509,40 @@ ROM_START( quizhuhu ) ROM_LOAD16_BYTE("e08-09.41", 0xc00000, 0x200000, CRC(200b26ee) SHA1(c689d0a1c1f5d71e0af3d94073b29d3619187c5f) ) // D0 D1 -std- ROM_END + ROM_START( pbobble2 ) + ROM_REGION(0x200000, "main", ROMREGION_ERASE00) /* 68020 code */ + ROM_LOAD32_BYTE("e10-22.bin", 0x000002, 0x40000, CRC(7b12105d) SHA1(b69379c5a79c365ed6e62e7ae478e4bbb4edfcb1) ) + ROM_LOAD32_BYTE("e10-23.bin", 0x000001, 0x40000, CRC(56a66435) SHA1(ba9d405416090f3482c6ed610e7eb77b43459ff1) ) + ROM_LOAD32_BYTE("e10-24.bin", 0x000000, 0x40000, CRC(f9d0794b) SHA1(320eee7790bf9a5141ad7b0ebfdec47e8f85a1c2) ) + ROM_LOAD32_BYTE("e10-25.bin", 0x000003, 0x40000, CRC(ff0407d3) SHA1(4616bb9132f78c4f0212afbcc8d528934f822f44) ) + + ROM_REGION(0x400000, "gfx1" , ROMREGION_DISPOSE) /* Sprites */ + ROM_LOAD16_BYTE("e10-02.rom", 0x000000, 0x100000, CRC(c0564490) SHA1(cbe9f880192c08f4d1db21d5ba14073b97e5f1d3) ) + ROM_LOAD16_BYTE("e10-01.rom", 0x000001, 0x100000, CRC(8c26ff49) SHA1(cbb514c061106003d2ae2b6c43958b24feaad656) ) + ROM_FILL ( 0x200000, 0x200000, 0 ) + + ROM_REGION(0x400000, "gfx2" , ROMREGION_DISPOSE) /* Tiles */ + ROM_LOAD16_BYTE("e10-07.rom", 0x000000, 0x100000, CRC(dcb3c29b) SHA1(b80c3a8ce53d696c57675e654c9927ef8687759e) ) + ROM_LOAD16_BYTE("e10-06.rom", 0x000001, 0x100000, CRC(1b0f20e2) SHA1(66b44d059c2896abac2f0e7fc932489dee440ba0) ) + ROM_LOAD ("e10-05.rom", 0x300000, 0x100000, CRC(81266151) SHA1(aa3b144f32995425db97efce440e234a3c7a6715) ) + ROM_FILL ( 0x200000, 0x100000, 0 ) + + ROM_REGION(0x180000, "audio", 0) /* 68000 sound CPU */ + ROM_LOAD16_BYTE("e10-12.32", 0x100000, 0x40000, CRC(b92dc8ad) SHA1(0c1428d313507b1ae5a2af3b2fbaaa5650135e1e) ) + ROM_LOAD16_BYTE("e10-13.33", 0x100001, 0x40000, CRC(87842c13) SHA1(d15b47c7430e677ae172f86fd5be595e4fe72e42) ) + + ROM_REGION16_BE(0x800000, "ensoniq.0" , ROMREGION_ERASE00 ) // V2: 4 banks, only 2 populated + ROM_LOAD16_BYTE("e10-04.rom", 0x000000, 0x200000, CRC(5c0862a6) SHA1(f916f63b8629239e3221e1e231e1b39962ef38ba) ) // C8 C9 CA CB + ROM_LOAD16_BYTE("e10-03.rom", 0x400000, 0x200000, CRC(46d68ac8) SHA1(ad014e9f0d458308014959ca6823077f581ab088) ) // CC CD CE CF + + ROM_REGION(0x2000, "extra", 0) + ROM_LOAD("e10-21.bin", 0x000000, 0x117, CRC(458499b7) SHA1(0c49aaf75539587d1f5367b3dc72799003824544) ) +// ROM_LOAD("e10-21.jed", 0x000000, 0xc2b, CRC(8e9fa5d6) SHA1(5fb120d80f7ceee96a2fad863cf61a1f0b02877f) ) +ROM_END + + +ROM_START( pbobbl2o ) ROM_REGION(0x200000, "main", 0) /* 68020 code */ ROM_LOAD32_BYTE("e10-11.20", 0x000000, 0x40000, CRC(b82f81da) SHA1(2cd0fb321c853497058545525f430b52c0788fb1) ) ROM_LOAD32_BYTE("e10-10.19", 0x000001, 0x40000, CRC(f432267a) SHA1(f9778fc627773e4e254faa0ce10e68407251ce95) ) @@ -3462,62 +3495,6 @@ static void tile_decode(running_machine *machine) } } -#define F3_IRQ_SPEEDUP_1_R(GAME, counter, mem_addr, mask) \ -static READ32_HANDLER( irq_speedup_r_##GAME ) \ -{ \ - if (cpu_get_pc(space->cpu)==counter && (f3_ram[mem_addr]&mask)!=0) \ - cpu_spinuntil_int(space->cpu); \ - return f3_ram[mem_addr]; \ -} - -#define F3_IRQ_SPEEDUP_2_R(GAME, counter, mem_addr, mask) \ -static READ32_HANDLER( irq_speedup_r_##GAME ) \ -{ \ - if (cpu_get_pc(space->cpu)==counter && (f3_ram[mem_addr]&mask)==0) \ - cpu_spinuntil_int(space->cpu); \ - return f3_ram[mem_addr]; \ -} - -#define F3_IRQ_SPEEDUP_3_R(GAME, counter, mem_addr, stack) \ -static READ32_HANDLER( irq_speedup_r_##GAME ) \ -{ \ - int ptr; \ - if ((cpu_get_sp(space->cpu)&2)==0) ptr=f3_ram[(cpu_get_sp(space->cpu)&0x1ffff)/4]; \ - else ptr=(((f3_ram[(cpu_get_sp(space->cpu)&0x1ffff)/4])&0x1ffff)<<16) | \ - (f3_ram[((cpu_get_sp(space->cpu)&0x1ffff)/4)+1]>>16); \ - if (cpu_get_pc(space->cpu)==counter && ptr==stack) \ - cpu_spinuntil_int(space->cpu); \ - return f3_ram[mem_addr]; \ -} - -F3_IRQ_SPEEDUP_2_R(arabianm, 0x238, 0x8124/4, 0xff000000 ) -F3_IRQ_SPEEDUP_1_R(gseeker, 0x43ac, 0xad94/4, 0xffff0000 ) -F3_IRQ_SPEEDUP_1_R(gunlock, 0x646, 0x0004/4, 0xffffffff ) -F3_IRQ_SPEEDUP_2_R(cupfinal, 0x254, 0x8114/4, 0x0000ff00 ) -F3_IRQ_SPEEDUP_2_R(scfinals, 0x25a, 0x8114/4, 0x0000ff00 ) -F3_IRQ_SPEEDUP_1_R(lightbr, 0xe0b02, 0x0130/4, 0x000000ff ) -F3_IRQ_SPEEDUP_2_R(kaiserkn, 0x256, 0x8110/4, 0xff000000 ) -F3_IRQ_SPEEDUP_1_R(spcinvdj, 0x60b4e, 0x0230/4, 0x000000ff ) -F3_IRQ_SPEEDUP_2_R(pwrgoal, 0x234, 0x8114/4, 0x0000ff00 ) -F3_IRQ_SPEEDUP_2_R(spcinv95, 0x25a, 0x8114/4, 0x0000ff00 ) -F3_IRQ_SPEEDUP_2_R(ktiger2, 0x5ba, 0x0570/4, 0x0000ffff ) -F3_IRQ_SPEEDUP_1_R(bubsymph, 0xe9a3e, 0x0134/4, 0x000000ff ) -F3_IRQ_SPEEDUP_1_R(bubblem, 0x100a62, 0x0134/4, 0x000000ff ) -F3_IRQ_SPEEDUP_2_R(cleopatr, 0x254, 0x8114/4, 0x0000ff00 ) -F3_IRQ_SPEEDUP_3_R(pbobble2, 0x2c2c, 0x4a50/4, 0x00002900 ) -F3_IRQ_SPEEDUP_3_R(pbobbl2x, 0x2c4c, 0x5c58/4, 0x00002920 ) -F3_IRQ_SPEEDUP_3_R(pbobble3, 0xf22, 0x5af4/4, 0x0000159e ) -F3_IRQ_SPEEDUP_3_R(pbobble4, 0xf8a, 0x58f4/4, 0x000015ee ) -F3_IRQ_SPEEDUP_3_R(gekirido, 0x1da8, 0x6bb0/4, 0x00001a90 ) -F3_IRQ_SPEEDUP_3_R(dariusg, 0x1d8e, 0x6ba8/4, 0x00001a76 ) -F3_IRQ_SPEEDUP_2_R(puchicar, 0x9dc, 0x24d8/4, 0x80000000 ) -F3_IRQ_SPEEDUP_2_R(popnpop, 0x9bc, 0x1cf8/4, 0x00008000 ) -F3_IRQ_SPEEDUP_2_R(arkretrn, 0x960, 0x2154/4, 0x0000ffff ) -F3_IRQ_SPEEDUP_3_R(landmakr, 0x146c, 0x0824/4, 0x00001178 ) -F3_IRQ_SPEEDUP_3_R(eaction2, 0x133c, 0x07a0/4, 0x00001048 ) -F3_IRQ_SPEEDUP_1_R(twinqix, 0xe9a52, 0x0134/4, 0x000000ff ) -F3_IRQ_SPEEDUP_2_R(kirameki, 0x12fc6, 0x0414/4, 0x0000ff00 ) - static DRIVER_INIT( ringrage ) { f3_game=RINGRAGE; @@ -3526,7 +3503,6 @@ static DRIVER_INIT( ringrage ) static DRIVER_INIT( arabianm ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x408124, 0x408127, 0, 0, irq_speedup_r_arabianm ); f3_game=ARABIANM; tile_decode(machine); } @@ -3539,28 +3515,24 @@ static DRIVER_INIT( ridingf ) static DRIVER_INIT( gseeker ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x40ad94, 0x40ad97, 0, 0, irq_speedup_r_gseeker ); f3_game=GSEEKER; tile_decode(machine); } static DRIVER_INIT( gunlock ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400004, 0x400007, 0, 0, irq_speedup_r_gunlock ); f3_game=GUNLOCK; tile_decode(machine); } static DRIVER_INIT( elvactr ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x4007a0, 0x4007a3, 0, 0, irq_speedup_r_eaction2 ); f3_game=EACTION2; tile_decode(machine); } static DRIVER_INIT( cupfinal ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x408114, 0x408117, 0, 0, irq_speedup_r_cupfinal ); f3_game=SCFINALS; tile_decode(machine); } @@ -3581,35 +3553,30 @@ static DRIVER_INIT( scfinals ) /* Rom checksum error */ RAM[0xdd0/4]=0x4e750000; - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x408114, 0x408117, 0, 0, irq_speedup_r_scfinals ); f3_game=SCFINALS; tile_decode(machine); } static DRIVER_INIT( lightbr ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400130, 0x400133, 0, 0, irq_speedup_r_lightbr ); f3_game=LIGHTBR; tile_decode(machine); } static DRIVER_INIT( kaiserkn ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x408110, 0x408113, 0, 0, irq_speedup_r_kaiserkn ); f3_game=KAISERKN; tile_decode(machine); } static DRIVER_INIT( dariusg ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x406ba8, 0x406bab, 0, 0, irq_speedup_r_dariusg ); f3_game=DARIUSG; tile_decode(machine); } static DRIVER_INIT( spcinvdj ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400230, 0x400233, 0, 0, irq_speedup_r_spcinvdj ); f3_game=SPCINVDX; tile_decode(machine); } @@ -3622,28 +3589,24 @@ static DRIVER_INIT( qtheater ) static DRIVER_INIT( spcinv95 ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x408114, 0x408117, 0, 0, irq_speedup_r_spcinv95 ); f3_game=SPCINV95; tile_decode(machine); } static DRIVER_INIT( gekirido ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x406bb0, 0x406bb3, 0, 0, irq_speedup_r_gekirido ); f3_game=GEKIRIDO; tile_decode(machine); } static DRIVER_INIT( ktiger2 ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400570, 0x400573, 0, 0, irq_speedup_r_ktiger2 ); f3_game=KTIGER2; tile_decode(machine); } static DRIVER_INIT( bubsymph ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400134, 0x400137, 0, 0, irq_speedup_r_bubsymph ); f3_game=BUBSYMPH; tile_decode(machine); } @@ -3674,7 +3637,6 @@ static WRITE32_HANDLER( bubsympb_oki_w ) static DRIVER_INIT( bubsympb ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400134, 0x400137, 0, 0, irq_speedup_r_bubsymph ); f3_game=BUBSYMPH; //tile_decode(machine); @@ -3704,28 +3666,24 @@ static DRIVER_INIT( bubsympb ) static DRIVER_INIT( bubblem ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400134, 0x400137, 0, 0, irq_speedup_r_bubblem ); f3_game=BUBBLEM; tile_decode(machine); } static DRIVER_INIT( cleopatr ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x408114, 0x408117, 0, 0, irq_speedup_r_cleopatr ); f3_game=CLEOPATR; tile_decode(machine); } static DRIVER_INIT( popnpop ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x401cf8, 0x401cfb, 0, 0, irq_speedup_r_popnpop ); f3_game=POPNPOP; tile_decode(machine); } static DRIVER_INIT( landmakr ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400824, 0x400827, 0, 0, irq_speedup_r_landmakr ); f3_game=LANDMAKR; tile_decode(machine); } @@ -3741,21 +3699,18 @@ static DRIVER_INIT( landmkrp ) RAM[0x1ffff8/4]=0xffffffff; /* From 0xffffff03 */ RAM[0x1ffffc/4]=0xffff0003; /* From 0xffff00ff */ - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400824, 0x400827, 0, 0, irq_speedup_r_landmakr ); f3_game=LANDMAKR; tile_decode(machine); } static DRIVER_INIT( pbobble3 ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x405af4, 0x405af7, 0, 0, irq_speedup_r_pbobble3 ); f3_game=PBOBBLE3; tile_decode(machine); } static DRIVER_INIT( pbobble4 ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x4058f4, 0x4058f7, 0, 0, irq_speedup_r_pbobble4 ); f3_game=PBOBBLE4; tile_decode(machine); } @@ -3768,49 +3723,60 @@ static DRIVER_INIT( quizhuhu ) static DRIVER_INIT( pbobble2 ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x404a50, 0x404a53, 0, 0, irq_speedup_r_pbobble2 ); f3_game=PBOBBLE2; tile_decode(machine); } +static DRIVER_INIT( pbobbl2p ) +{ + // has 040092: beq $30000; (2+) + // which eventually causes the game to crash + // -- protection check?? or some kind of checksum fail? + + UINT32 *ROM = (UINT32 *)memory_region(machine, "main"); + + /* protection? */ + ROM[0x40090/4]=0x00004e71|(ROM[0x40090/4]&0xffff0000); + ROM[0x40094/4]=0x4e714e71; + + f3_game=PBOBBLE2; + tile_decode(machine); +} + + + static DRIVER_INIT( pbobbl2x ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x405c58, 0x405c5b, 0, 0, irq_speedup_r_pbobbl2x ); f3_game=PBOBBLE2; tile_decode(machine); } static DRIVER_INIT( hthero95 ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x408114, 0x408117, 0, 0, irq_speedup_r_pwrgoal ); f3_game=HTHERO95; tile_decode(machine); } static DRIVER_INIT( kirameki ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400414, 0x400417, 0, 0, irq_speedup_r_kirameki ); f3_game=KIRAMEKI; tile_decode(machine); } static DRIVER_INIT( puchicar ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x4024d8, 0x4024db, 0, 0, irq_speedup_r_puchicar ); f3_game=PUCHICAR; tile_decode(machine); } static DRIVER_INIT( twinqix ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400134, 0x400137, 0, 0, irq_speedup_r_twinqix ); f3_game=TWINQIX; tile_decode(machine); } static DRIVER_INIT( arkretrn ) { - memory_install_read32_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x402154, 0x402157, 0, 0, irq_speedup_r_arkretrn ); f3_game=ARKRETRN; tile_decode(machine); } @@ -3894,7 +3860,8 @@ GAME( 1995, spcnv95u, spcinv95, f3_224a, f3, spcinv95, ROT270, "Taito America Co GAME( 1995, akkanvdr, spcinv95, f3_224a, f3, spcinv95, ROT270, "Taito Corporation", "Akkanbeder (Ver 2.5J 1995/06/14)", 0 ) GAME( 1995, twinqix, 0, f3_224a, f3, twinqix, ROT0, "Taito America Corporation", "Twin Qix (Ver 1.0A 1995/01/17) (Prototype)", 0 ) GAME( 1995, quizhuhu, 0, f3, f3, quizhuhu, ROT0, "Taito Corporation", "Moriguchi Hiroko no Quiz de Hyuu!Hyuu! (Ver 2.2J 1995/05/25)", 0 ) -GAME( 1995, pbobble2, 0, f3, f3, pbobble2, ROT0, "Taito Corporation Japan", "Puzzle Bobble 2 (Ver 2.2O 1995/07/20)", 0 ) +GAME( 1995, pbobble2, 0, f3, f3, pbobbl2p, ROT0, "Taito Corporation Japan", "Puzzle Bobble 2 (Ver 2.3O 1995/07/31)", 0 ) +GAME( 1995, pbobbl2o, pbobble2, f3, f3, pbobble2, ROT0, "Taito Corporation Japan", "Puzzle Bobble 2 (Ver 2.2O 1995/07/20)", 0 ) GAME( 1995, pbobbl2j, pbobble2, f3, f3, pbobble2, ROT0, "Taito Corporation", "Puzzle Bobble 2 (Ver 2.2J 1995/07/20)", 0 ) GAME( 1995, pbobbl2u, pbobble2, f3, f3, pbobble2, ROT0, "Taito America Corporation", "Bust-A-Move Again (Ver 2.3A 1995/07/31)", 0 ) GAME( 1995, pbobbl2x, pbobble2, f3, f3, pbobbl2x, ROT0, "Taito Corporation", "Puzzle Bobble 2X (Ver 2.2J 1995/11/11)", 0 ) diff --git a/src/mame/mamedriv.c b/src/mame/mamedriv.c index 845bc29c41b..e3abb2c8b98 100644 --- a/src/mame/mamedriv.c +++ b/src/mame/mamedriv.c @@ -1996,6 +1996,7 @@ const game_driver * const drivers[] = DRIVER( twinqix ) /* ??? (c) 1995 Taito America Corporation (US) */ DRIVER( quizhuhu ) /* E08 (c) 1995 Taito Corporation (Japan) */ DRIVER( pbobble2 ) /* E10 (c) 1995 Taito Corporation Japan (World) */ + DRIVER( pbobbl2o ) /* E10 (c) 1995 Taito Corporation Japan (World) */ DRIVER( pbobbl2j ) /* E10 (c) 1995 Taito Corporation (Japan) */ DRIVER( pbobbl2u ) /* E10 (c) 1995 Taito America Corporation (US) */ DRIVER( pbobbl2x ) /* E10 (c) 1995 Taito Corporation (Japan) */