From ecaf416adcde06f9db087029e4bb3cdcd462b073 Mon Sep 17 00:00:00 2001 From: Barry Harris <44396066+barry65536@users.noreply.github.com> Date: Tue, 10 Apr 2012 10:30:53 +0000 Subject: [PATCH] Make a start on fcrash --- src/burn/drv/capcom/cps.cpp | 22 ++++++ src/burn/drv/capcom/cps.h | 1 + src/burn/drv/capcom/d_cps1.cpp | 131 +++++++++++++++++++++++++++++++++ 3 files changed, 154 insertions(+) diff --git a/src/burn/drv/capcom/cps.cpp b/src/burn/drv/capcom/cps.cpp index 82872d177..783f6699e 100644 --- a/src/burn/drv/capcom/cps.cpp +++ b/src/burn/drv/capcom/cps.cpp @@ -599,6 +599,28 @@ INT32 CpsLoadTilesSf2mdt(INT32 nStart) return 0; } +INT32 CpsLoadTilesFcrash(INT32 nStart) +{ + CpsLoadOneBootlegType3(CpsGfx + 0x000000, nStart + 0, 0, 0); + CpsLoadOneBootlegType3(CpsGfx + 0x000000, nStart + 1, 0, 1); + CpsLoadOneBootlegType3(CpsGfx + 0x000000, nStart + 2, 0, 2); + CpsLoadOneBootlegType3(CpsGfx + 0x000000, nStart + 3, 0, 3); + CpsLoadOneBootlegType3(CpsGfx + 0x080000, nStart + 4, 0, 0); + CpsLoadOneBootlegType3(CpsGfx + 0x080000, nStart + 5, 0, 1); + CpsLoadOneBootlegType3(CpsGfx + 0x080000, nStart + 6, 0, 2); + CpsLoadOneBootlegType3(CpsGfx + 0x080000, nStart + 7, 0, 3); + CpsLoadOneBootlegType3(CpsGfx + 0x100000, nStart + 8, 0, 0); + CpsLoadOneBootlegType3(CpsGfx + 0x100000, nStart + 9, 0, 1); + CpsLoadOneBootlegType3(CpsGfx + 0x100000, nStart + 10, 0, 2); + CpsLoadOneBootlegType3(CpsGfx + 0x100000, nStart + 11, 0, 3); + CpsLoadOneBootlegType3(CpsGfx + 0x180000, nStart + 12, 0, 0); + CpsLoadOneBootlegType3(CpsGfx + 0x180000, nStart + 13, 0, 1); + CpsLoadOneBootlegType3(CpsGfx + 0x180000, nStart + 14, 0, 2); + CpsLoadOneBootlegType3(CpsGfx + 0x180000, nStart + 15, 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 a9736bb98..8914d568e 100644 --- a/src/burn/drv/capcom/cps.h +++ b/src/burn/drv/capcom/cps.h @@ -44,6 +44,7 @@ INT32 CpsLoadTilesPunipic2(UINT8 *Tile, INT32 nStart); INT32 CpsLoadTilesSf2ebbl(UINT8 *Tile, INT32 nStart); INT32 CpsLoadTilesSf2koryu(INT32 nStart); INT32 CpsLoadTilesSf2mdt(INT32 nStart); +INT32 CpsLoadTilesFcrash(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 e2304b525..db588f7b8 100644 --- a/src/burn/drv/capcom/d_cps1.cpp +++ b/src/burn/drv/capcom/d_cps1.cpp @@ -4882,6 +4882,39 @@ static struct BurnRomInfo FfightjhRomDesc[] = { STD_ROM_PICK(Ffightjh) STD_ROM_FN(Ffightjh) +static struct BurnRomInfo FcrashRomDesc[] = { + { "9.bin", 0x020000, 0xc6854c91, BRF_ESS | BRF_PRG | CPS1_68K_PROGRAM_BYTESWAP }, + { "5.bin", 0x020000, 0x77f7c2b3, BRF_ESS | BRF_PRG | CPS1_68K_PROGRAM_BYTESWAP }, + { "8.bin", 0x020000, 0x1895b3df, BRF_ESS | BRF_PRG | CPS1_68K_PROGRAM_BYTESWAP }, + { "4.bin", 0x020000, 0xbbd411ee, BRF_ESS | BRF_PRG | CPS1_68K_PROGRAM_BYTESWAP }, + { "7.bin", 0x020000, 0x5b23ebf2, BRF_ESS | BRF_PRG | CPS1_68K_PROGRAM_BYTESWAP }, + { "3.bin", 0x020000, 0xaba2aebe, BRF_ESS | BRF_PRG | CPS1_68K_PROGRAM_BYTESWAP }, + { "6.bin", 0x020000, 0xd4bf37f6, BRF_ESS | BRF_PRG | CPS1_68K_PROGRAM_BYTESWAP }, + { "2.bin", 0x020000, 0x07ac8f43, BRF_ESS | BRF_PRG | CPS1_68K_PROGRAM_BYTESWAP }, + + { "18.bin", 0x020000, 0xf1eee6d9, BRF_GRA | CPS1_TILES }, + { "20.bin", 0x020000, 0x675f4537, BRF_GRA | CPS1_TILES }, + { "22.bin", 0x020000, 0xdb8a32ac, BRF_GRA | CPS1_TILES }, + { "24.bin", 0x020000, 0xf4113e57, BRF_GRA | CPS1_TILES }, + { "10.bin", 0x020000, 0xd478853e, BRF_GRA | CPS1_TILES }, + { "12.bin", 0x020000, 0x25055642, BRF_GRA | CPS1_TILES }, + { "14.bin", 0x020000, 0xb77d0328, BRF_GRA | CPS1_TILES }, + { "16.bin", 0x020000, 0xea111a79, BRF_GRA | CPS1_TILES }, + { "19.bin", 0x020000, 0xb3aa1f48, BRF_GRA | CPS1_TILES }, + { "21.bin", 0x020000, 0x04d175c9, BRF_GRA | CPS1_TILES }, + { "23.bin", 0x020000, 0xe592ba4f, BRF_GRA | CPS1_TILES }, + { "25.bin", 0x020000, 0xb89a740f, BRF_GRA | CPS1_TILES }, + { "11.bin", 0x020000, 0xd4457a60, BRF_GRA | CPS1_TILES }, + { "13.bin", 0x020000, 0x3b26a37d, BRF_GRA | CPS1_TILES }, + { "15.bin", 0x020000, 0x6d837e09, BRF_GRA | CPS1_TILES }, + { "17.bin", 0x020000, 0xc59a4d6c, BRF_GRA | CPS1_TILES }, + + { "1.bin", 0x020000, 0x5b276c14, BRF_PRG | CPS1_Z80_PROGRAM }, +}; + +STD_ROM_PICK(Fcrash) +STD_ROM_FN(Fcrash) + static struct BurnRomInfo ForgottnRomDesc[] = { { "lw11.12f", 0x020000, 0x73e920b7, BRF_ESS | BRF_PRG | CPS1_68K_PROGRAM_BYTESWAP }, { "lw15.12h", 0x020000, 0x50d7012d, BRF_ESS | BRF_PRG | CPS1_68K_PROGRAM_BYTESWAP }, @@ -10335,6 +10368,7 @@ static const struct GameConfig ConfigTable[] = { "ffightj1" , CPS_B_01 , mapper_S224B , 0, NULL }, { "ffightj2" , CPS_B_02 , mapper_S224B , 0, NULL }, { "ffightjh" , CPS_B_01 , mapper_S224B , 0, NULL }, + { "fcrash" , HACK_B_3 , mapper_S224B , 0, NULL }, { "forgottn" , CPS_B_01 , mapper_LW621 , 1, NULL }, { "forgottnu" , CPS_B_01 , mapper_LW621 , 1, NULL }, { "forgottnu1" , CPS_B_01 , mapper_LWCHR , 1, NULL }, @@ -11045,6 +11079,93 @@ static INT32 DinohuntInit() return nRet; } +UINT8 __fastcall FcrashInputReadByte(UINT32 a) +{ + switch (a) { + case 0x880000: { + return ~Inp000; + } + + case 0x880008: { + return ~Inp018; + } + + case 0x88000a: { + return ~Cpi01A; + } + + case 0x88000c: { + return ~Cpi01C; + } + + case 0x88000e: { + return ~Cpi01E; + } + + default: { + bprintf(PRINT_NORMAL, _T("Input Read Byte %x\n"), a); + } + } + + return 0; +} + +UINT16 __fastcall FcrashInputReadWord(UINT32 a) +{ + switch (a) { + case 0x880000: { + return (~Inp000 << 8) | ~Inp001; + } + + default: { + bprintf(PRINT_NORMAL, _T("Input Read Word %x\n"), a); + } + } + + return 0; +} + +void __fastcall FcrashInputWriteByte(UINT32 a, UINT8 d) +{ + switch (a) { + default: { + bprintf(PRINT_NORMAL, _T("Input Write Byte %x, %x\n"), a, d); + } + } +} + +void __fastcall FcrashInputWriteWord(UINT32 a, UINT16 d) +{ + switch (a) { + default: { + bprintf(PRINT_NORMAL, _T("Input Write word %x, %x\n"), a, d); + } + } +} + +static INT32 FcrashInit() +{ + Cps1DisablePSnd = 1; + bCpsUpdatePalEveryFrame = 1; + CpsLayer1XOffs = -0x3f; + CpsLayer2XOffs = -0x3c; + CpsLayer3XOffs = 0xffc0; + + Cps1GfxLoadCallbackFunction = CpsLoadTilesFcrash; + + INT32 nRet = DrvInit(); + + SekOpen(0); + SekMapHandler(1, 0x880000, 0x89ffff, SM_READ | SM_WRITE); + SekSetReadByteHandler(1, FcrashInputReadByte); + SekSetReadWordHandler(1, FcrashInputReadWord); + SekSetWriteByteHandler(1, FcrashInputWriteByte); + SekSetWriteWordHandler(1, FcrashInputWriteWord); + SekClose(); + + return nRet; +} + static INT32 ForgottnInit() { INT32 nRet = 0; @@ -12732,6 +12853,16 @@ struct BurnDriver BurnDrvCpsFfightjh = { &CpsRecalcPal, 0x1000, 384, 224, 4, 3 }; +struct BurnDriver BurnDrvCpsFcrash = { + "fcrash", "ffight", NULL, NULL, "1990", + "Final Crash (bootleg)\0", NULL, "Playmark", "CPS1", + NULL, NULL, NULL, NULL, + BDF_GAME_WORKING | BDF_CLONE | BDF_BOOTLEG, 2, HARDWARE_CAPCOM_CPS1, GBF_SCRFIGHT, 0, + NULL, FcrashRomInfo, FcrashRomName, NULL, NULL, FfightInputInfo, FfightDIPInfo, + FcrashInit, DrvExit, Cps1Frame, CpsRedraw, CpsAreaScan, + &CpsRecalcPal, 0x1000, 384, 224, 4, 3 +}; + struct BurnDriver BurnDrvCpsForgottn = { "forgottn", NULL, NULL, NULL, "1988", "Forgotten Worlds (World)\0", NULL, "Capcom", "CPS1",