From 268d66a97c348118bb9a329876ccddf3d4aa1215 Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Thu, 12 Feb 2009 18:43:50 +0000 Subject: [PATCH] Decrypted Skill Fruit Bonus program rom [Olivier Galibert] --- src/mame/drivers/sfbonus.c | 104 ++++++++++++++++++++++++++++++++++--- src/mame/mamedriv.c | 3 +- 2 files changed, 99 insertions(+), 8 deletions(-) diff --git a/src/mame/drivers/sfbonus.c b/src/mame/drivers/sfbonus.c index caabf3d229a..175e6c39f13 100644 --- a/src/mame/drivers/sfbonus.c +++ b/src/mame/drivers/sfbonus.c @@ -4,12 +4,52 @@ */ #include "driver.h" -#include "cpu/m68000/m68000.h" +#include "cpu/z80/z80.h" #include "sound/okim6295.h" -static ADDRESS_MAP_START( sfbonus_map, ADDRESS_SPACE_PROGRAM, 16 ) - AM_RANGE(0x000000, 0x07ffff) AM_ROM +static WRITE8_HANDLER( paletteram_io_w ) +{ + static int pal_offs,r,g,b,internal_pal_offs; + + switch(offset) + { + case 0: + pal_offs = data; + break; + case 2: + internal_pal_offs = 0; + break; + case 1: + switch(internal_pal_offs) + { + case 0: + r = ((data & 0x3f) << 2) | ((data & 0x30) >> 4); + internal_pal_offs++; + break; + case 1: + g = ((data & 0x3f) << 2) | ((data & 0x30) >> 4); + internal_pal_offs++; + break; + case 2: + b = ((data & 0x3f) << 2) | ((data & 0x30) >> 4); + palette_set_color(space->machine, pal_offs, MAKE_RGB(r, g, b)); + internal_pal_offs = 0; + pal_offs++; + break; + } + + break; + } +} + +static ADDRESS_MAP_START( sfbonus_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0xefff) AM_ROM //writes to 0-7fff? + AM_RANGE(0xf000, 0xffff) AM_RAM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( sfbonus_io, ADDRESS_SPACE_IO, 8 ) + AM_RANGE(0x0c00, 0x0c03) AM_WRITE( paletteram_io_w ) ADDRESS_MAP_END VIDEO_START(sfbonus) @@ -45,8 +85,10 @@ GFXDECODE_END static MACHINE_DRIVER_START( sfbonus ) - MDRV_CPU_ADD("main", M68000, 16000000) // unknown CPU + MDRV_CPU_ADD("main", Z80, 16000000) // unknown CPU MDRV_CPU_PROGRAM_MAP(0,sfbonus_map) + MDRV_CPU_IO_MAP(0,sfbonus_io) + MDRV_CPU_VBLANK_INT("main",irq0_line_hold) MDRV_GFXDECODE(sfbonus) @@ -71,8 +113,7 @@ MACHINE_DRIVER_END ROM_START( sfbonus ) ROM_REGION( 0x80000, "main", 0 ) /* 68000 Code */ - ROM_LOAD16_BYTE( "skfb16.bin", 0x00001, 0x40000, CRC(bfd53646) SHA1(bd58f8c6d5386649a6fc0f4bac46d1b6cd6248b1) ) - ROM_LOAD16_BYTE( "skfb17.bin", 0x00000, 0x40000, CRC(e28ede82) SHA1(f320c4c9c30ec280ee2437d1ad4d2b6270580916) ) + ROM_LOAD( "skfb16.bin", 0x00000, 0x40000, CRC(bfd53646) SHA1(bd58f8c6d5386649a6fc0f4bac46d1b6cd6248b1) ) ROM_REGION( 0x040000, "oki", 0 ) /* Samples */ ROM_LOAD( "skfbrom2.bin", 0x00000, 0x20000, CRC(3823a36e) SHA1(4136e380b63546b9490033ad26d776f326eb9290) ) @@ -92,4 +133,53 @@ ROM_START( sfbonus ) ROM_LOAD16_BYTE( "skfbrom6a.bin", 0x00001, 0x80000, CRC(b9a39e5a) SHA1(cb875db25d8bccf48542bd6dbecc474b1205563b) ) ROM_END -GAME( 199?, sfbonus, 0, sfbonus, sfbonus, 0, ROT0, "Amcoe", "Skill Fruit Bonus", GAME_NOT_WORKING|GAME_NO_SOUND ) +ROM_START( sfbonusa ) + ROM_REGION( 0x80000, "main", 0 ) /* 68000 Code */ + ROM_LOAD( "skfb17.bin", 0x00000, 0x40000, CRC(e28ede82) SHA1(f320c4c9c30ec280ee2437d1ad4d2b6270580916) ) + + ROM_REGION( 0x040000, "oki", 0 ) /* Samples */ + ROM_LOAD( "skfbrom2.bin", 0x00000, 0x20000, CRC(3823a36e) SHA1(4136e380b63546b9490033ad26d776f326eb9290) ) + + ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "skfbrom3.bin", 0x00000, 0x80000, CRC(36119517) SHA1(241bb256ab3ba595dcb0c81fd2e60ed35dd7c197) ) + ROM_LOAD16_BYTE( "skfbrom4.bin", 0x00001, 0x80000, CRC(a655bac1) SHA1(0faea01c09409f9182f08370dcc0b466a799f17f) ) + + ROM_REGION( 0x100000, "gfx2", 0 ) + ROM_LOAD16_BYTE( "skfbrom5.bin", 0x00000, 0x80000, CRC(752e6e3b) SHA1(46c3a1bbbf1a2afe36fa5333b6e74459e17e9bae) ) + ROM_LOAD16_BYTE( "skfbrom6.bin", 0x00001, 0x80000, CRC(30df6b6a) SHA1(7a180fa8ee64b9efb0321baffad72f0a9485d568) ) + + ROM_REGION( 0x100000, "gfx3", 0 ) + // these are the same as gfx 2 up to a point, after which they change + // maybe different tiles for odd / even tilemap columns, like cps1.c + ROM_LOAD16_BYTE( "skfbrom5a.bin", 0x00000, 0x80000, CRC(ed07a635) SHA1(a31ee06d8cb78c43affa9d899e9cec87a0875934) ) + ROM_LOAD16_BYTE( "skfbrom6a.bin", 0x00001, 0x80000, CRC(b9a39e5a) SHA1(cb875db25d8bccf48542bd6dbecc474b1205563b) ) +ROM_END + +static DRIVER_INIT( sfbonus ) +{ + int i; + UINT8 *ROM = memory_region(machine, "main"); + + for(i=0;i<0x40000;i++) + { + UINT8 x = ROM[i]; + + switch(i & 7) + { + case 0: x = BITSWAP8(x^0x2a, 1,3,7,6,5,2,0,4); break; + case 1: x = BITSWAP8(x^0xe4, 3,7,6,5,2,0,4,1); break; + case 2: x = BITSWAP8(x^0x2d, 4,1,3,7,6,5,2,0); break; + case 3: x = BITSWAP8(x^0xba, 4,3,0,2,1,7,6,5); break; + case 4: x = BITSWAP8(x^0x30, 2,1,7,6,5,0,3,4); break; + case 5: x = BITSWAP8(x^0xf1, 2,7,6,5,1,3,4,0); break; + case 6: x = BITSWAP8(x^0x3d, 2,1,4,7,6,5,3,0); break; + case 7: x = BITSWAP8(x^0xba, 4,3,0,1,2,7,6,5); break; + } + + ROM[i] = x; + } +} + +GAME( 199?, sfbonus, 0, sfbonus, sfbonus, sfbonus, ROT0, "Amcoe", "Skill Fruit Bonus", GAME_NOT_WORKING|GAME_NO_SOUND ) +GAME( 199?, sfbonusa, sfbonus, sfbonus, sfbonus, sfbonus, ROT0, "Amcoe", "Skill Fruit Bonus", GAME_NOT_WORKING|GAME_NO_SOUND ) + diff --git a/src/mame/mamedriv.c b/src/mame/mamedriv.c index 8c15bb8af53..ee070c9bb7b 100644 --- a/src/mame/mamedriv.c +++ b/src/mame/mamedriv.c @@ -8600,7 +8600,7 @@ Other Sun games DRIVER( nc96txt ) /* (c) 2000 Amcoe */ DRIVER( nfb96 ) /* (c) 1996 Amcoe */ DRIVER( nfb96a ) /* (c) 1996 Amcoe */ - DRIVER( nfb96b ) /* (c) 1996 Amcoe */ + DRIVER( nfb96b ) /* (c) 1996 Amcoe */ DRIVER( nfb96c ) /* (c) 1996 Amcoe */ DRIVER( nfb96txt ) /* (c) 2000 Amcoe */ DRIVER( nfb96se ) /* bootleg */ @@ -8610,6 +8610,7 @@ Other Sun games DRIVER( carb2003 ) /* bootleg */ DRIVER( sfbonus ) /* (c) 199? Amcoe */ + DRIVER( sfbonusa ) /* (c) 199? Amcoe */ DRIVER( ladylinr ) /* (c) 198? TAB Austria */ DRIVER( kkojnoli ) /* 198? south korean hack */ DRIVER( mtonic ) /* 198? (c) Tonic */