Actually, let's do it this way.

This commit is contained in:
iq_132 2014-11-04 06:42:39 +00:00
parent 45253b95af
commit e123d5dbb8
1 changed files with 12 additions and 75 deletions

View File

@ -748,9 +748,14 @@ static void drgw2_patch()
{
pgm_decrypt_dw2();
*((UINT16*)(PGM68KROM + 0x031098)) = BURN_ENDIAN_SWAP_INT16(0x4e93);
*((UINT16*)(PGM68KROM + 0x03113e)) = BURN_ENDIAN_SWAP_INT16(0x4e93);
*((UINT16*)(PGM68KROM + 0x0311ce)) = BURN_ENDIAN_SWAP_INT16(0x4e93);
UINT16 *mem16 = (UINT16*)PGM68KROM;
// This is not a hack! The protection chip actually applies patches at three specific locations.
for (INT32 i = 0; i < 0x80000/2; i++) {
if (mem16[i] == 0x4e90 && mem16[i+1] == 0x207c && (mem16[i+2] & 0xfff8) == 0x0010) {
mem16[i] = 0x4e93;
}
}
}
static INT32 drgw2Init()
@ -787,30 +792,13 @@ static struct BurnRomInfo drgw2cRomDesc[] = {
STDROMPICKEXT(drgw2c, drgw2c, pgm)
STD_ROM_FN(drgw2c)
static void drgw2100c_patch()
{
pgm_decrypt_dw2();
*((UINT16*)(PGM68KROM + 0x0303bc)) = BURN_ENDIAN_SWAP_INT16(0x4e93);
*((UINT16*)(PGM68KROM + 0x030462)) = BURN_ENDIAN_SWAP_INT16(0x4e93);
*((UINT16*)(PGM68KROM + 0x0304F2)) = BURN_ENDIAN_SWAP_INT16(0x4e93);
}
static INT32 drgw2100cInit()
{
pPgmInitCallback = drgw2100c_patch;
pPgmProtCallback = install_protection_asic25_asic12_dw2;
return pgmInit();
}
struct BurnDriver BurnDrvDrgw2c = {
"drgw2c", "drgw2", "pgm", NULL, "1997",
"Zhong Guo Long II (V100C, China)\0", NULL, "IGS", "PolyGameMaster",
L"\u4E2D\u570B\u9F8D II (V100C, China)\0", NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE, 4, HARDWARE_IGS_PGM, GBF_PUZZLE, 0,
NULL, drgw2cRomInfo, drgw2cRomName, NULL, NULL, pgmInputInfo, pgmDIPInfo,
drgw2100cInit, pgmExit, pgmFrame, pgmDraw, pgmScan, &nPgmPalRecalc, 0x900,
drgw2Init, pgmExit, pgmFrame, pgmDraw, pgmScan, &nPgmPalRecalc, 0x900,
448, 224, 4, 3
};
@ -830,30 +818,13 @@ static struct BurnRomInfo drgw2jRomDesc[] = {
STDROMPICKEXT(drgw2j, drgw2j, pgm)
STD_ROM_FN(drgw2j)
static void drgw2100j_patch()
{
pgm_decrypt_dw2();
*((UINT16*)(PGM68KROM + 0x0302C0)) = BURN_ENDIAN_SWAP_INT16(0x4e93);
*((UINT16*)(PGM68KROM + 0x030366)) = BURN_ENDIAN_SWAP_INT16(0x4e93);
*((UINT16*)(PGM68KROM + 0x0303F6)) = BURN_ENDIAN_SWAP_INT16(0x4e93);
}
static INT32 drgw2100jInit()
{
pPgmInitCallback = drgw2100j_patch;
pPgmProtCallback = install_protection_asic25_asic12_dw2;
return pgmInit();
}
struct BurnDriver BurnDrvDrgw2j = {
"drgw2j", "drgw2", "pgm", NULL, "1997",
"Chuugokuryuu II (V100J, Japan)\0", NULL, "IGS", "PolyGameMaster",
L"\u4E2D\u570B\u9F8D II (V100J, Japan)\0", NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE, 4, HARDWARE_IGS_PGM, GBF_PUZZLE, 0,
NULL, drgw2jRomInfo, drgw2jRomName, NULL, NULL, pgmInputInfo, pgmDIPInfo,
drgw2100jInit, pgmExit, pgmFrame, pgmDraw, pgmScan, &nPgmPalRecalc, 0x900,
drgw2Init, pgmExit, pgmFrame, pgmDraw, pgmScan, &nPgmPalRecalc, 0x900,
448, 224, 4, 3
};
@ -873,30 +844,13 @@ static struct BurnRomInfo drgw2xRomDesc[] = {
STDROMPICKEXT(drgw2x, drgw2x, pgm)
STD_ROM_FN(drgw2x)
static void drgw2100x_patch()
{
pgm_decrypt_dw2();
*((UINT16*)(PGM68KROM + 0x031084)) = BURN_ENDIAN_SWAP_INT16(0x4e93);
*((UINT16*)(PGM68KROM + 0x03112A)) = BURN_ENDIAN_SWAP_INT16(0x4e93);
*((UINT16*)(PGM68KROM + 0x0311BA)) = BURN_ENDIAN_SWAP_INT16(0x4e93);
}
static INT32 drgw2100xInit()
{
pPgmInitCallback = drgw2100x_patch;
pPgmProtCallback = install_protection_asic25_asic12_dw2;
return pgmInit();
}
struct BurnDriver BurnDrvDrgw2x = {
"dw2v100x", "drgw2", "pgm", NULL, "1997",
"Dragon World II (V100X, World)\0", NULL, "IGS", "PolyGameMaster",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE, 4, HARDWARE_IGS_PGM, GBF_PUZZLE, 0,
NULL, drgw2xRomInfo, drgw2xRomName, NULL, NULL, pgmInputInfo, pgmDIPInfo,
drgw2100xInit, pgmExit, pgmFrame, pgmDraw, pgmScan, &nPgmPalRecalc, 0x900,
drgw2Init, pgmExit, pgmFrame, pgmDraw, pgmScan, &nPgmPalRecalc, 0x900,
448, 224, 4, 3
};
@ -916,30 +870,13 @@ static struct BurnRomInfo drgw2hkRomDesc[] = {
STDROMPICKEXT(drgw2hk, drgw2hk, pgm)
STD_ROM_FN(drgw2hk)
static void drgw2100h_patch()
{
pgm_decrypt_dw2();
*((UINT16*)(PGM68KROM + 0x02f520)) = BURN_ENDIAN_SWAP_INT16(0x4e93);
*((UINT16*)(PGM68KROM + 0x02f5c6)) = BURN_ENDIAN_SWAP_INT16(0x4e93);
*((UINT16*)(PGM68KROM + 0x02f656)) = BURN_ENDIAN_SWAP_INT16(0x4e93);
}
static INT32 drgw2100hInit()
{
pPgmInitCallback = drgw2100h_patch;
pPgmProtCallback = install_protection_asic25_asic12_dw2;
return pgmInit();
}
struct BurnDriver BurnDrvDrgw2hk = {
"drgw2hk", "drgw2", "pgm", NULL, "1997",
"Dragon World II (V100H, Hong Kong)\0", NULL, "IGS", "PolyGameMaster",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE, 4, HARDWARE_IGS_PGM, GBF_PUZZLE, 0,
NULL, drgw2hkRomInfo, drgw2hkRomName, NULL, NULL, pgmInputInfo, pgmDIPInfo,
drgw2100hInit, pgmExit, pgmFrame, pgmDraw, pgmScan, &nPgmPalRecalc, 0x900,
drgw2Init, pgmExit, pgmFrame, pgmDraw, pgmScan, &nPgmPalRecalc, 0x900,
448, 224, 4, 3
};