From 80120a2e2185d816d7ded3dd81b1e3c342f5736c Mon Sep 17 00:00:00 2001 From: Barry Harris <44396066+barry65536@users.noreply.github.com> Date: Wed, 8 May 2013 13:37:43 +0000 Subject: [PATCH] Add bootleg of 3 Wonders (Barry, JacKc, ANY) --- src/burn/drv/capcom/cps.cpp | 55 +++++++++++++++++++++++++++++++ src/burn/drv/capcom/cps.h | 1 + src/burn/drv/capcom/d_cps1.cpp | 60 +++++++++++++++++++++++++++++++++- 3 files changed, 115 insertions(+), 1 deletion(-) diff --git a/src/burn/drv/capcom/cps.cpp b/src/burn/drv/capcom/cps.cpp index 0c56dae39..5a0d83ccd 100644 --- a/src/burn/drv/capcom/cps.cpp +++ b/src/burn/drv/capcom/cps.cpp @@ -632,6 +632,47 @@ static INT32 CpsLoadOneSf2stt(UINT8* Tile, INT32 nNum, INT32 nWord, INT32 nShift return 0; } +static INT32 CpsLoadOneWonder3b(UINT8* Tile, INT32 nNum, INT32 nWord, INT32 nShift) +{ + UINT8 *Rom = NULL; INT32 nRomLen=0; + UINT8 *pt = NULL, *pr = NULL; + INT32 i; + + LoadUp(&Rom, &nRomLen, nNum); + if (Rom == NULL) { + return 1; + } + + nRomLen &= ~1; // make sure even + + for (i = 0, pt = Tile, pr = Rom; i < (nRomLen >> 1); pt += 8) { + UINT32 Pix; // Eight pixels + UINT8 b; + b = *pr++; i++; Pix = SepTable[b]; + if (nWord) { + b = *pr++; i++; Pix |= SepTable[b] << 1; + } + + Pix <<= nShift; + *((UINT32 *)pt) |= Pix; + } + + for (i = 0, pt = Tile + 0x200000, pr = Rom + 0x40000; i < (nRomLen >> 1); pt += 8) { + UINT32 Pix; // Eight pixels + UINT8 b; + b = *pr++; i++; Pix = SepTable[b]; + if (nWord) { + b = *pr++; i++; Pix |= SepTable[b] << 1; + } + + Pix <<= nShift; + *((UINT32 *)pt) |= Pix; + } + + BurnFree(Rom); + return 0; +} + static INT32 CpsLoadSf2ceuab3Tiles(UINT8* Tile, INT32 nNum) { UINT8 *Rom = (UINT8*)BurnMalloc(0x200000 * sizeof(UINT8)); @@ -1188,6 +1229,20 @@ INT32 CpsLoadTilesKodb(INT32 nStart) return 0; } +INT32 CpsLoadTilesWonder3b(INT32 nStart) +{ + CpsLoadOneWonder3b(CpsGfx + 0x000000, nStart + 0, 0, 0); + CpsLoadOneWonder3b(CpsGfx + 0x000000, nStart + 1, 0, 2); + CpsLoadOneWonder3b(CpsGfx + 0x000004, nStart + 2, 0, 0); + CpsLoadOneWonder3b(CpsGfx + 0x000004, nStart + 3, 0, 2); + CpsLoadOneWonder3b(CpsGfx + 0x000000, nStart + 4, 0, 1); + CpsLoadOneWonder3b(CpsGfx + 0x000000, nStart + 5, 0, 3); + CpsLoadOneWonder3b(CpsGfx + 0x000004, nStart + 6, 0, 1); + CpsLoadOneWonder3b(CpsGfx + 0x000004, nStart + 7, 0, 3); + + return 0; +} + INT32 CpsLoadStars(UINT8* pStar, INT32 nStart) { UINT8* pTemp[2] = { NULL, NULL}; diff --git a/src/burn/drv/capcom/cps.h b/src/burn/drv/capcom/cps.h index c67f8ffbc..c433b24d2 100644 --- a/src/burn/drv/capcom/cps.h +++ b/src/burn/drv/capcom/cps.h @@ -56,6 +56,7 @@ INT32 CpsLoadTilesCaptcommb(INT32 nStart); INT32 CpsLoadTilesDinopic(INT32 nStart); INT32 CpsLoadTilesSlampic(INT32 nStart); INT32 CpsLoadTilesKodb(INT32 nStart); +INT32 CpsLoadTilesWonder3b(INT32 nStart); INT32 CpsLoadStars(UINT8 *pStar, INT32 nStart); INT32 CpsLoadStarsByte(UINT8 *pStar, INT32 nStart); INT32 CpsLoadStarsForgottnAlt(UINT8 *pStar, INT32 nStart); diff --git a/src/burn/drv/capcom/d_cps1.cpp b/src/burn/drv/capcom/d_cps1.cpp index 6310fc2d5..1c0af1cd4 100644 --- a/src/burn/drv/capcom/d_cps1.cpp +++ b/src/burn/drv/capcom/d_cps1.cpp @@ -4186,6 +4186,33 @@ static struct BurnRomInfo Wonder3hRomDesc[] = { STD_ROM_PICK(Wonder3h) STD_ROM_FN(Wonder3h) +static struct BurnRomInfo Wonder3bRomDesc[] = { + { "274001.4", 0x080000, 0x47887cf3, BRF_ESS | BRF_PRG | CPS1_68K_PROGRAM_BYTESWAP }, + { "274001.3", 0x080000, 0xe79eacb3, BRF_ESS | BRF_PRG | CPS1_68K_PROGRAM_BYTESWAP }, + + { "274001.12", 0x080000, 0x47cf8dfb, BRF_GRA | CPS1_TILES }, + { "274001.10", 0x080000, 0xa0d27605, BRF_GRA | CPS1_TILES }, + { "274001.11", 0x080000, 0x8112bbb4, BRF_GRA | CPS1_TILES }, + { "274001.9", 0x080000, 0xcb73759d, BRF_GRA | CPS1_TILES }, + { "274001.8", 0x080000, 0x3bc2ef5e, BRF_GRA | CPS1_TILES }, + { "274001.6", 0x080000, 0x312d790c, BRF_GRA | CPS1_TILES }, + { "274001.7", 0x080000, 0x58307167, BRF_GRA | CPS1_TILES }, + { "274001.5", 0x080000, 0x3f765ae8, BRF_GRA | CPS1_TILES }, + + { "27512.2", 0x010000, 0xabfca165, BRF_PRG | CPS1_Z80_PROGRAM }, + + { "27020.1", 0x040000, 0x3c4348cf, BRF_SND | CPS1_OKIM6295_SAMPLES }, + + A_BOARD_PLDS + + { "rt24b.1a", 0x000117, 0x54b85159, BRF_OPT }, // b-board PLDs + { "iob1.11e", 0x000117, 0x3abc0700, BRF_OPT }, + { "ioc1.ic1", 0x000117, 0x0d182081, BRF_OPT }, // c-board PLDs +}; + +STD_ROM_PICK(Wonder3b) +STD_ROM_FN(Wonder3b) + static struct BurnRomInfo CaptcommRomDesc[] = { { "cce_23f.8f", 0x080000, 0x42c814c5, BRF_ESS | BRF_PRG | CPS1_68K_PROGRAM_NO_BYTESWAP }, { "cc_22f.7f", 0x080000, 0x0fd34195, BRF_ESS | BRF_PRG | CPS1_68K_PROGRAM_NO_BYTESWAP }, @@ -11653,6 +11680,7 @@ static const struct GameConfig ConfigTable[] = { "3wondersu" , CPS_B_21_BT1, mapper_RT24B , 0, NULL }, { "wonder3" , CPS_B_21_BT1, mapper_RT22B , 0, NULL }, { "3wondersh" , CPS_B_02 , mapper_RT24B , 0, NULL }, + { "3wondersb" , CPS_B_21_BT1, mapper_RT24B , 0, NULL }, { "captcomm" , CPS_B_21_BT3, mapper_CC63B , 0, NULL }, { "captcommr1" , CPS_B_21_BT3, mapper_CC63B , 0, NULL }, { "captcommu" , CPS_B_21_BT3, mapper_CC63B , 0, NULL }, @@ -12300,6 +12328,26 @@ static INT32 CpsBootlegSpriteRamScanCallback(INT32 nAction, INT32*) return 0; } +static INT32 Wonder3bInit() +{ + bCpsUpdatePalEveryFrame = 1; + Cps1GfxLoadCallbackFunction = CpsLoadTilesWonder3b; + + CpsLayer1XOffs = 4; + CpsLayer2XOffs = 6; + CpsLayer3XOffs = 10; + + INT32 nRet = DrvInit(); + + // the game doesn't write these anywhere - does the hardware have them stored somewhere? + *((UINT16*)(CpsReg + 0x04)) = BURN_ENDIAN_SWAP_INT16(0x90c0); // scroll2 address + *((UINT16*)(CpsReg + 0x06)) = BURN_ENDIAN_SWAP_INT16(0x9100); // scroll3 address + *((UINT16*)(CpsReg + 0x0a)) = BURN_ENDIAN_SWAP_INT16(0x9140); // palette address + *((UINT16*)(CpsReg + nCpsPalCtrlReg)) = BURN_ENDIAN_SWAP_INT16(0x003f); // palette control + + return nRet; +} + static INT32 CaptcommbInit() { CpsLayer1XOffs = -8; @@ -15592,7 +15640,7 @@ struct BurnDriver BurnDrvCpsWonder3 = { struct BurnDriver BurnDrvCps3wondersh = { "3wondersh", "3wonders", NULL, NULL, "1991", - "Three Wonders (bootleg, wonder 3 910520 etc)\0", NULL, "Capcom", "CPS1", + "Three Wonders (bootleg set 1, wonder 3 910520 etc)\0", NULL, "Capcom", "CPS1", NULL, NULL, NULL, NULL, BDF_GAME_WORKING | BDF_CLONE | BDF_BOOTLEG, 2, HARDWARE_CAPCOM_CPS1, GBF_MINIGAMES, 0, NULL, Wonder3hRomInfo, Wonder3hRomName, NULL, NULL, ThreeWondersInputInfo, ThreeWondersDIPInfo, @@ -15600,6 +15648,16 @@ struct BurnDriver BurnDrvCps3wondersh = { &CpsRecalcPal, 0x1000, 384, 224, 4, 3 }; +struct BurnDriver BurnDrvCps3wondersb = { + "3wondersb", "3wonders", NULL, NULL, "1991", + "Three Wonders (bootleg set 2, wonder 3 910520 etc)\0", NULL, "Capcom", "CPS1", + NULL, NULL, NULL, NULL, + BDF_GAME_WORKING | BDF_CLONE | BDF_BOOTLEG, 2, HARDWARE_CAPCOM_CPS1, GBF_MINIGAMES, 0, + NULL, Wonder3bRomInfo, Wonder3bRomName, NULL, NULL, ThreeWondersInputInfo, ThreeWondersDIPInfo, + Wonder3bInit, DrvExit, Cps1Frame, CpsRedraw, CpsAreaScan, + &CpsRecalcPal, 0x1000, 384, 224, 4, 3 +}; + struct BurnDriver BurnDrvCpsCaptcomm = { "captcomm", NULL, NULL, NULL, "1991", "Captain Commando (911202 other country)\0", NULL, "Capcom", "CPS1",