diff --git a/src/burn/drv/capcom/cps.cpp b/src/burn/drv/capcom/cps.cpp index 25c9a6a59..bb0eb441a 100644 --- a/src/burn/drv/capcom/cps.cpp +++ b/src/burn/drv/capcom/cps.cpp @@ -326,6 +326,34 @@ static INT32 CpsLoadOneBootlegType2(UINT8* Tile, INT32 nNum, INT32 nWord, INT32 } static INT32 CpsLoadOneBootlegType3(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; pt += 4) { + 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 CpsLoadOneBootlegType3Swap(UINT8 *Tile, INT32 nNum, INT32 nWord, INT32 nShift) { UINT8 *Rom = NULL; int nRomLen=0; UINT8 *pt = NULL, *pr = NULL; @@ -347,6 +375,14 @@ static INT32 CpsLoadOneBootlegType3(UINT8 *Tile, INT32 nNum, INT32 nWord, INT32 Pix <<= nShift; *((UINT32 *)pt) |= Pix; + + b = *pr++; i++; Pix = SepTable[b]; + if (nWord) { + b = *pr++; i++; Pix |= SepTable[b] << 1; + } + + Pix <<= (nShift + 1); + *((UINT32 *)pt) |= Pix; } BurnFree(Rom); @@ -599,6 +635,18 @@ INT32 CpsLoadTilesSf2mdt(INT32 nStart) return 0; } +INT32 CpsLoadTilesSf2mdta(INT32 nStart) +{ + CpsLoadOneBootlegType3Swap(CpsGfx + 0x000000, nStart + 0, 0, 0); + CpsLoadOneBootlegType3Swap(CpsGfx + 0x000000, nStart + 1, 0, 2); + CpsLoadOneBootlegType3Swap(CpsGfx + 0x200000, nStart + 2, 0, 0); + CpsLoadOneBootlegType3Swap(CpsGfx + 0x200000, nStart + 3, 0, 2); + CpsLoadOneBootlegType3Swap(CpsGfx + 0x400000, nStart + 4, 0, 0); + CpsLoadOneBootlegType3Swap(CpsGfx + 0x400000, nStart + 5, 0, 2); + + return 0; +} + INT32 CpsLoadTilesFcrash(INT32 nStart) { CpsLoadOneBootlegType3(CpsGfx + 0x000000, nStart + 0, 0, 0); diff --git a/src/burn/drv/capcom/cps.h b/src/burn/drv/capcom/cps.h index dd9232d27..ec766659e 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 CpsLoadTilesSf2mdta(INT32 nStart); INT32 CpsLoadTilesFcrash(INT32 nStart); INT32 CpsLoadTilesCawingbl(INT32 nStart); INT32 CpsLoadStars(UINT8 *pStar, INT32 nStart); diff --git a/src/burn/drv/capcom/d_cps1.cpp b/src/burn/drv/capcom/d_cps1.cpp index ee7f41901..497570123 100644 --- a/src/burn/drv/capcom/d_cps1.cpp +++ b/src/burn/drv/capcom/d_cps1.cpp @@ -8342,6 +8342,26 @@ static struct BurnRomInfo Sf2mdtRomDesc[] = { STD_ROM_PICK(Sf2mdt) STD_ROM_FN(Sf2mdt) +static struct BurnRomInfo Sf2mdtaRomDesc[] = { + { "3.bin", 0x0080000, 0x9f544ef4, BRF_ESS | BRF_PRG | CPS1_68K_PROGRAM_BYTESWAP }, + { "5.bin", 0x0080000, 0xd76d6621, BRF_ESS | BRF_PRG | CPS1_68K_PROGRAM_BYTESWAP }, + { "2.bin", 0x0020000, 0x74844192, BRF_ESS | BRF_PRG | CPS1_68K_PROGRAM_BYTESWAP }, + { "4.bin", 0x0020000, 0xbd98ff15, BRF_ESS | BRF_PRG | CPS1_68K_PROGRAM_BYTESWAP }, + + // is there a bad dump here? some of the sprites have vertical lines, whilst others are fine + { "pf4-sh058.ic89", 0x0100000, 0x40fdf624, BRF_GRA | CPS1_TILES }, + { "pf7-sh072.ic92", 0x0100000, 0xfb78022e, BRF_GRA | CPS1_TILES }, + { "pf5-sh036.ic90", 0x0100000, 0x0a6be48b, BRF_GRA | CPS1_TILES }, + { "pf8-sh074.ic93", 0x0100000, 0x6258c7cf, BRF_GRA | CPS1_TILES }, + { "pf6-sh070.ic88", 0x0100000, 0x9b5b09d7, BRF_GRA | CPS1_TILES }, + { "pf9-sh001.ic91", 0x0100000, 0x9f25090e, BRF_GRA | CPS1_TILES }, + + { "1.ic28", 0x0020000, 0xd5bee9cc, BRF_PRG | CPS1_Z80_PROGRAM }, +}; + +STD_ROM_PICK(Sf2mdta) +STD_ROM_FN(Sf2mdta) + static struct BurnRomInfo Sf2m1RomDesc[] = { { "222e", 0x0080000, 0x1e20d0a3, BRF_ESS | BRF_PRG | CPS1_68K_PROGRAM_BYTESWAP }, { "196e", 0x0080000, 0x88cc38a3, BRF_ESS | BRF_PRG | CPS1_68K_PROGRAM_BYTESWAP }, @@ -10422,6 +10442,7 @@ static const struct GameConfig ConfigTable[] = { "sf2accp2" , CPS_B_21_DEF, mapper_S9263B, 0, NULL }, { "sf2dkot2" , CPS_B_21_DEF, mapper_S9263B, 0, NULL }, { "sf2mdt" , CPS_B_21_DEF, mapper_S9263B, 0, NULL }, + { "sf2mdta" , CPS_B_21_DEF, mapper_S9263B, 0, NULL }, { "sf2m1" , CPS_B_21_DEF, mapper_S9263B, 0, NULL }, { "sf2m2" , CPS_B_21_DEF, mapper_S9263B, 0, NULL }, { "sf2m3" , HACK_B_2 , mapper_S9263B, 0, NULL }, @@ -12071,6 +12092,30 @@ static INT32 Sf2mdtInit() return nRet; } +static INT32 Sf2mdtaInit() +{ + Cps1GfxLoadCallbackFunction = CpsLoadTilesSf2mdta; + + Cps1DisablePSnd = 1; + CpsRunInitCallbackFunction = Sf2mdtSoundInit; + CpsRunResetCallbackFunction = Sf2mdtSoundReset; + CpsRunExitCallbackFunction = Sf2mdtSoundExit; + CpsRunFrameStartCallbackFunction = Sf2mdtSoundFrameStart; + CpsRunFrameEndCallbackFunction = Sf2mdtSoundFrameEnd; + CpsRWSoundCommandCallbackFunction = Sf2mdtSoundCommand; + + INT32 nRet = Sf2ceInit(); + + SekOpen(0); + SekMapMemory(CpsRamFF, 0xfc0000, 0xfcffff, SM_RAM); + SekMapHandler(1, 0x70c000, 0x70cfff, SM_READ); + SekSetReadByteHandler(1, Sf2mdtReadByte); + SekSetReadWordHandler(1, Sf2mdtReadWord); + SekClose(); + + return nRet; +} + void __fastcall Sf2hfjbWriteByte(UINT32 a, UINT8 d) { CpsWritePort(a & 0x1ff, d); @@ -14787,7 +14832,7 @@ struct BurnDriver BurnDrvCpsSf2koryu2 = { struct BurnDriverD BurnDrvCpsSf2mdt = { "sf2mdt", "sf2ce", NULL, NULL, "1992", - "Street Fighter II' - Magic Delta Turbo (bootleg)\0", "Incorrect graphics", "Capcom", "CPS1", + "Street Fighter II' - Magic Delta Turbo (bootleg set 1)\0", "Incorrect graphics", "Capcom", "CPS1", NULL, NULL, NULL, NULL, BDF_CLONE | BDF_BOOTLEG, 2, HARDWARE_CAPCOM_CPS1, GBF_VSFIGHT, FBF_SF, NULL, Sf2mdtRomInfo, Sf2mdtRomName, NULL, NULL, Sf2InputInfo, Sf2DIPInfo, @@ -14795,6 +14840,16 @@ struct BurnDriverD BurnDrvCpsSf2mdt = { &CpsRecalcPal, 0x1000, 384, 224, 4, 3 }; +struct BurnDriverD BurnDrvCpsSf2mdta = { + "sf2mdta", "sf2ce", NULL, NULL, "1992", + "Street Fighter II' - Magic Delta Turbo (bootleg set 2)\0", "Incorrect graphics", "Capcom", "CPS1", + NULL, NULL, NULL, NULL, + BDF_CLONE | BDF_BOOTLEG, 2, HARDWARE_CAPCOM_CPS1, GBF_VSFIGHT, FBF_SF, + NULL, Sf2mdtaRomInfo, Sf2mdtaRomName, NULL, NULL, Sf2InputInfo, Sf2DIPInfo, + Sf2mdtaInit, DrvExit, Cps1Frame, CpsRedraw, CpsAreaScan, + &CpsRecalcPal, 0x1000, 384, 224, 4, 3 +}; + struct BurnDriver BurnDrvCpsSf2m1 = { "sf2m1", "sf2ce", NULL, NULL, "1992", "Street Fighter II' - champion edition (bootleg, M1)\0", NULL, "Capcom", "CPS1",