diff --git a/src/burn/drv/capcom/cps.cpp b/src/burn/drv/capcom/cps.cpp index 451eadfe3..b15fe9167 100644 --- a/src/burn/drv/capcom/cps.cpp +++ b/src/burn/drv/capcom/cps.cpp @@ -701,6 +701,86 @@ static INT32 CpsLoadOneWonder3b(UINT8* Tile, INT32 nNum, INT32 nWord, INT32 nShi return 0; } +static INT32 CpsLoadPunisherbTiles(UINT8* Tile, INT32 nNum) +{ + UINT8 *Rom = (UINT8*)BurnMalloc(0x400000 * sizeof(UINT8)); + UINT8 *pt = NULL, *pr = NULL; + INT32 i, j; + + if (Rom == NULL) { + return 1; + } + + if (BurnLoadRom(Rom + 0x000000, nNum + 0, 2)) { + BurnFree(Rom); + return 1; + } + + if (BurnLoadRom(Rom + 0x000001, nNum + 1, 2)) { + BurnFree(Rom); + return 1; + } + + if (BurnLoadRom(Rom + 0x100000, nNum + 2, 2)) { + BurnFree(Rom); + return 1; + } + + if (BurnLoadRom(Rom + 0x100001, nNum + 3, 2)) { + BurnFree(Rom); + return 1; + } + + if (BurnLoadRom(Rom + 0x200000, nNum + 4, 2)) { + BurnFree(Rom); + return 1; + } + + if (BurnLoadRom(Rom + 0x200001, nNum + 5, 2)) { + BurnFree(Rom); + return 1; + } + + if (BurnLoadRom(Rom + 0x300000, nNum + 6, 2)) { + BurnFree(Rom); + return 1; + } + + if (BurnLoadRom(Rom + 0x300001, nNum + 7, 2)) { + BurnFree(Rom); + return 1; + } + + INT32 TileOffset[4] = { 0x000000, 0x200000, 0x000004, 0x200004 }; + + for (j = 0; j < 4; j++) { + for (i = 0, pt = Tile + TileOffset[j], pr = Rom + (0x80000 * j); i < 0x80000; pt += 8) { + UINT32 Pix; // Eight pixels + UINT8 b; + b = *pr++; i++; Pix = SepTable[b]; + b = *pr++; i++; Pix |= SepTable[b] << 1; + + Pix <<= 0; + *((UINT32 *)pt) |= Pix; + } + + for (i = 0, pt = Tile + TileOffset[j], pr = Rom + 0x200000 + (0x80000 * j); i < 0x80000; pt += 8) { + UINT32 Pix; // Eight pixels + UINT8 b; + b = *pr++; i++; Pix = SepTable[b]; + b = *pr++; i++; Pix |= SepTable[b] << 1; + + Pix <<= 2; + *((UINT32 *)pt) |= Pix; + } + } + + + + BurnFree(Rom); + return 0; +} + static INT32 CpsLoadSf2ceuab3Tiles(UINT8* Tile, INT32 nNum) { UINT8 *Rom = (UINT8*)BurnMalloc(0x200000 * sizeof(UINT8)); @@ -1329,6 +1409,13 @@ INT32 CpsLoadTilesPang3r1a(INT32 nStart) return 0; } +INT32 CpsLoadTilesPunisherb(INT32 nStart) +{ + CpsLoadPunisherbTiles(CpsGfx, nStart); + + 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 c871ec394..61b644ad1 100644 --- a/src/burn/drv/capcom/cps.h +++ b/src/burn/drv/capcom/cps.h @@ -60,6 +60,7 @@ INT32 CpsLoadTilesSlampic(INT32 nStart); INT32 CpsLoadTilesKodb(INT32 nStart); INT32 CpsLoadTilesWonder3b(INT32 nStart); INT32 CpsLoadTilesPang3r1a(INT32 nStart); +INT32 CpsLoadTilesPunisherb(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 fd60c64da..00ad51a80 100644 --- a/src/burn/drv/capcom/d_cps1.cpp +++ b/src/burn/drv/capcom/d_cps1.cpp @@ -14657,7 +14657,7 @@ static INT32 Punipic3Init() static INT32 PunisherbInit() { - Cps1GfxLoadCallbackFunction = CpsLoadTilesWonder3b; + Cps1GfxLoadCallbackFunction = CpsLoadTilesPunisherb; return TwelveMhzInit(); }