Small PGM update
This commit is contained in:
parent
b8392a1cb9
commit
748335e924
|
@ -112,7 +112,7 @@ depobj := $(drvobj) \
|
|||
\
|
||||
neo_decrypt.o neo_palette.o neo_run.o neo_sprite.o neo_text.o neo_upd4990a.o neogeo.o \
|
||||
\
|
||||
pgm_crypt.o pgm_draw.o pgm_prot.o pgm_run.o \
|
||||
pgm_crypt.o pgm_draw.o pgm_run.o pgm_asic3.o pgm_asic27a_type1.o pgm_asic27a_type2.o pgm_asic27a_type3.o pgm_asic25.o \
|
||||
\
|
||||
psikyo_palette.o psikyo_sprite.o psikyo_tile.o psikyosh_render.o \
|
||||
\
|
||||
|
|
|
@ -61,14 +61,14 @@ static struct BurnInputInfo pgmInputList[] = {
|
|||
|
||||
{"Dip A", BIT_DIPSWITCH, PgmInput + 6, "dip" },
|
||||
{"Dip B", BIT_DIPSWITCH, PgmInput + 7, "dip" },
|
||||
{"Dip C", BIT_DIPSWITCH, PgmInput + 8, "dip" },
|
||||
{"Dip C", BIT_DIPSWITCH, PgmInput + 8, "dip" },
|
||||
};
|
||||
|
||||
STDINPUTINFO(pgm)
|
||||
|
||||
static struct BurnDIPInfo pgmDIPList[] = {
|
||||
{0x2D, 0xFF, 0xFF, 0x00, NULL },
|
||||
{0x2F, 0xFF, 0x01, 0x01, NULL },
|
||||
{0x2F, 0xFF, 0x01, 0x01, NULL },
|
||||
|
||||
{0, 0xFE, 0, 2, "Test mode" },
|
||||
{0x2D, 0x01, 0x01, 0x00, "Off" },
|
||||
|
@ -101,7 +101,7 @@ STDDIPINFO(pgm)
|
|||
|
||||
static struct BurnDIPInfo jammaDIPList[] = {
|
||||
{0x2D, 0xFF, 0xFF, 0x00, NULL },
|
||||
{0x2F, 0xFF, 0x01, 0x00, NULL },
|
||||
{0x2F, 0xFF, 0x01, 0x00, NULL },
|
||||
|
||||
{0, 0xFE, 0, 2, "Test mode" },
|
||||
{0x2D, 0x01, 0x01, 0x00, "Off" },
|
||||
|
@ -198,7 +198,7 @@ static struct BurnDIPInfo photoy2kDIPList[] = {
|
|||
{0x2E, 0x01, 0x0F, 0x03, "World" },
|
||||
{0x2E, 0x01, 0x0F, 0x04, "Korea" },
|
||||
{0x2E, 0x01, 0x0F, 0x05, "Hong Kong" },
|
||||
{0x2E, 0x01, 0x0F, 0x06, "Singapore / Malaysia" },
|
||||
{0x2E, 0x01, 0x0F, 0x06, "Singapore / Malaysia" },
|
||||
};
|
||||
|
||||
static struct BurnDIPInfo py2k2DIPList[] = {
|
||||
|
@ -211,7 +211,7 @@ static struct BurnDIPInfo py2k2DIPList[] = {
|
|||
{0x2E, 0x01, 0x0F, 0x03, "World" },
|
||||
{0x2E, 0x01, 0x0F, 0x04, "Korea" },
|
||||
{0x2E, 0x01, 0x0F, 0x05, "Hong Kong" },
|
||||
{0x2E, 0x01, 0x0F, 0x06, "Singapore / Malaysia" },
|
||||
{0x2E, 0x01, 0x0F, 0x06, "Singapore / Malaysia" },
|
||||
};
|
||||
|
||||
static struct BurnDIPInfo oldsDIPList[] = {
|
||||
|
@ -300,7 +300,7 @@ static struct BurnDIPInfo martmastDIPList[] = {
|
|||
{0x2E, 0x01, 0x07, 0x03, "Korea" },
|
||||
{0x2E, 0x01, 0x07, 0x04, "Hong Kong" },
|
||||
{0x2E, 0x01, 0x07, 0x05, "World" },
|
||||
{0x2E, 0x01, 0x07, 0x06, "USA" },
|
||||
{0x2E, 0x01, 0x07, 0x06, "USA" },
|
||||
};
|
||||
|
||||
static struct BurnDIPInfo martmastc102DIPList[] = {
|
||||
|
@ -325,7 +325,7 @@ static struct BurnDIPInfo thegladDIPList[] = {
|
|||
{0x2E, 0x01, 0x07, 0x02, "Japan" },
|
||||
{0x2E, 0x01, 0x07, 0x03, "Korea" },
|
||||
{0x2E, 0x01, 0x07, 0x04, "Hong Kong" },
|
||||
{0x2E, 0x01, 0x07, 0x05, "Spanish Territories" },
|
||||
{0x2E, 0x01, 0x07, 0x05, "Spanish Territories" },
|
||||
{0x2E, 0x01, 0x07, 0x06, "World" },
|
||||
};
|
||||
|
||||
|
@ -338,7 +338,7 @@ static struct BurnDIPInfo theglad100DIPList[] = {
|
|||
{0x2E, 0x01, 0x07, 0x02, "Japan" },
|
||||
{0x2E, 0x01, 0x07, 0x03, "Korea" },
|
||||
{0x2E, 0x01, 0x07, 0x04, "Hong Kong" },
|
||||
{0x2E, 0x01, 0x07, 0x05, "Spanish Territories" },
|
||||
{0x2E, 0x01, 0x07, 0x05, "Spanish Territories" },
|
||||
{0x2E, 0x01, 0x07, 0x06, "World" },
|
||||
};
|
||||
|
||||
|
@ -351,7 +351,7 @@ static struct BurnDIPInfo thegladpcbDIPList[] = {
|
|||
{0x2E, 0x01, 0x07, 0x02, "Japan" },
|
||||
{0x2E, 0x01, 0x07, 0x03, "Korea" },
|
||||
{0x2E, 0x01, 0x07, 0x04, "Hong Kong" },
|
||||
{0x2E, 0x01, 0x07, 0x05, "Spanish Territories" },
|
||||
{0x2E, 0x01, 0x07, 0x05, "Spanish Territories" },
|
||||
{0x2E, 0x01, 0x07, 0x06, "World" },
|
||||
};
|
||||
|
||||
|
@ -423,8 +423,8 @@ static struct BurnDIPInfo svgDIPList[] = {
|
|||
{0x2E, 0x01, 0x07, 0x02, "Japan" },
|
||||
{0x2E, 0x01, 0x07, 0x03, "Korea" },
|
||||
{0x2E, 0x01, 0x07, 0x04, "Hong Kong" },
|
||||
{0x2E, 0x01, 0x07, 0x05, "Spanish Territories" },
|
||||
{0x2E, 0x01, 0x07, 0x06, "World" },
|
||||
{0x2E, 0x01, 0x07, 0x05, "Spanish Territories" },
|
||||
{0x2E, 0x01, 0x07, 0x06, "World" },
|
||||
};
|
||||
|
||||
static struct BurnDIPInfo svgtwDIPList[] = {
|
||||
|
@ -436,9 +436,9 @@ static struct BurnDIPInfo svgtwDIPList[] = {
|
|||
{0x2E, 0x01, 0x07, 0x02, "Japan" },
|
||||
{0x2E, 0x01, 0x07, 0x03, "Korea" },
|
||||
{0x2E, 0x01, 0x07, 0x04, "Hong Kong" },
|
||||
{0x2E, 0x01, 0x07, 0x05, "Spanish Territories" },
|
||||
{0x2E, 0x01, 0x07, 0x06, "World" },
|
||||
{0x2E, 0x01, 0x07, 0xff, "Don't Change" },
|
||||
{0x2E, 0x01, 0x07, 0x05, "Spanish Territories" },
|
||||
{0x2E, 0x01, 0x07, 0x06, "World" },
|
||||
{0x2E, 0x01, 0x07, 0xff, "Don't Change" },
|
||||
};
|
||||
|
||||
STDDIPINFOEXT(orlegend, pgm, orlegend )
|
||||
|
@ -447,8 +447,8 @@ STDDIPINFOEXT(orld111t, pgm, orld111t )
|
|||
STDDIPINFOEXT(orld105k, pgm, orld105k )
|
||||
STDDIPINFOEXT(orld112c, pgm, orld112c )
|
||||
STDDIPINFOEXT(kov, pgm, kov )
|
||||
STDDIPINFOEXT(kov100, pgm, kov100 )
|
||||
STDDIPINFOEXT(kov2, pgm, kov2 )
|
||||
STDDIPINFOEXT(kov100, pgm, kov100 )
|
||||
STDDIPINFOEXT(kov2, pgm, kov2 )
|
||||
STDDIPINFOEXT(kovshxas, pgm, kovshxas )
|
||||
STDDIPINFOEXT(killbld, pgm, killbld )
|
||||
STDDIPINFOEXT(killbld104, pgm, killbld104 )
|
||||
|
@ -456,10 +456,10 @@ STDDIPINFOEXT(photoy2k, pgm, photoy2k )
|
|||
STDDIPINFOEXT(py2k2, pgm, py2k2 )
|
||||
STDDIPINFOEXT(puzzli2, pgm, puzzli2 )
|
||||
STDDIPINFOEXT(martmast, pgm, martmast )
|
||||
STDDIPINFOEXT(martmastc102, pgm, martmastc102 )
|
||||
STDDIPINFOEXT(martmastc102, pgm, martmastc102 )
|
||||
STDDIPINFOEXT(olds, pgm, olds )
|
||||
STDDIPINFOEXT(olds100, pgm, olds100 )
|
||||
STDDIPINFOEXT(olds103t, pgm, olds103t )
|
||||
STDDIPINFOEXT(olds103t, pgm, olds103t )
|
||||
STDDIPINFOEXT(ddp2, pgm, ddp2 )
|
||||
STDDIPINFOEXT(ddp2hk, pgm, ddp2hk )
|
||||
STDDIPINFOEXT(ddp2k, pgm, ddp2k )
|
||||
|
@ -469,10 +469,10 @@ STDDIPINFOEXT(ddp2c, pgm, ddp2c )
|
|||
STDDIPINFOEXT(theglad, pgm, theglad )
|
||||
STDDIPINFOEXT(theglad100, pgm, theglad100 )
|
||||
STDDIPINFOEXT(happy6, pgm, happy6 )
|
||||
STDDIPINFOEXT(svg, pgm, svg )
|
||||
STDDIPINFOEXT(svg, pgm, svg )
|
||||
STDDIPINFOEXT(svgtw, pgm, svgtw )
|
||||
STDDIPINFOEXT(dmnfrntpcb, jamma, dmnfrntpcb )
|
||||
STDDIPINFOEXT(thegladpcb, jamma, thegladpcb )
|
||||
STDDIPINFOEXT(dmnfrntpcb, jamma, dmnfrntpcb )
|
||||
STDDIPINFOEXT(thegladpcb, jamma, thegladpcb )
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// BIOS
|
||||
|
@ -993,7 +993,7 @@ static struct BurnRomInfo killbldRomDesc[] = {
|
|||
|
||||
{ "m0300.u1", 0x400000, 0x93159695, 5 | BRF_SND }, // 10 Samples
|
||||
|
||||
{ "kb_u2.rom", 0x010000, 0xde3eae63, 0 | BRF_PRG | BRF_ESS }, // 11 Protection Data
|
||||
{ "kb_u2.rom", 0x010000, 0xde3eae63, 9 | BRF_PRG | BRF_ESS }, // 11 Protection Data
|
||||
};
|
||||
|
||||
STDROMPICKEXT(killbld, killbld, pgm)
|
||||
|
@ -1040,7 +1040,7 @@ static struct BurnRomInfo killbld104RomDesc[] = {
|
|||
|
||||
{ "m0300.u1", 0x400000, 0x93159695, 5 | BRF_SND }, // 13 Samples
|
||||
|
||||
{ "kb_u2_v104.u2", 0x010000, 0xc970f6d5, 0 | BRF_PRG | BRF_ESS }, // 14 Protection Data
|
||||
{ "kb_u2_v104.u2", 0x010000, 0xc970f6d5, 9 | BRF_PRG | BRF_ESS }, // 14 Protection Data
|
||||
};
|
||||
|
||||
STDROMPICKEXT(killbld104, killbld104, pgm)
|
||||
|
@ -1072,7 +1072,7 @@ static struct BurnRomInfo drgw3RomDesc[] = {
|
|||
|
||||
{ "dw3m0400.u1", 0x400000, 0x031eb9ce, 5 | BRF_SND }, // 6 Samples
|
||||
|
||||
{ "dw3_v100.u15", 0x010000, 0x03dc4fdf, 0 | BRF_PRG | BRF_ESS }, // 7 Protection data
|
||||
{ "dw3_v100.u15", 0x010000, 0x03dc4fdf, 9 | BRF_PRG | BRF_ESS }, // 7 Protection data
|
||||
};
|
||||
|
||||
STDROMPICKEXT(drgw3, drgw3, pgm)
|
||||
|
@ -1112,7 +1112,7 @@ static struct BurnRomInfo drgw3105RomDesc[] = {
|
|||
|
||||
{ "dw3m0400.u1", 0x400000, 0x031eb9ce, 5 | BRF_SND }, // 6 Samples
|
||||
|
||||
{ "dw3_v100.u15", 0x010000, 0x03dc4fdf, 0 | BRF_PRG | BRF_ESS }, // 7 Protection data
|
||||
{ "dw3_v100.u15", 0x010000, 0x03dc4fdf, 9 | BRF_PRG | BRF_ESS }, // 7 Protection data
|
||||
};
|
||||
|
||||
STDROMPICKEXT(drgw3105, drgw3105, pgm)
|
||||
|
@ -1144,7 +1144,7 @@ static struct BurnRomInfo drgw3100RomDesc[] = {
|
|||
|
||||
{ "dw3m0400.u1", 0x400000, 0x031eb9ce, 5 | BRF_SND }, // 6 Samples
|
||||
|
||||
{ "dw3_v100.u15", 0x010000, 0x03dc4fdf, 0 | BRF_PRG | BRF_ESS }, // 7 Protection data
|
||||
{ "dw3_v100.u15", 0x010000, 0x03dc4fdf, 9 | BRF_PRG | BRF_ESS }, // 7 Protection data
|
||||
};
|
||||
|
||||
STDROMPICKEXT(drgw3100, drgw3100, pgm)
|
||||
|
@ -1176,7 +1176,7 @@ static struct BurnRomInfo dwexRomDesc[] = {
|
|||
|
||||
{ "ex_m0400.u1", 0x200000, 0x42d54fd5, 5 | BRF_SND }, // 6 Samples
|
||||
|
||||
{ "ex_data.u15", 0x010000, 0x03dc4fdf, 0 | BRF_PRG | BRF_ESS }, // 7 Protection data
|
||||
{ "ex_data.u15", 0x010000, 0x03dc4fdf, 9 | BRF_PRG | BRF_ESS }, // 7 Protection data
|
||||
};
|
||||
|
||||
STDROMPICKEXT(dwex, dwex, pgm)
|
||||
|
@ -1220,9 +1220,7 @@ static struct BurnRomInfo oldsRomDesc[] = {
|
|||
|
||||
{ "m0500.rom", 0x200000, 0x37928cdd, 5 | BRF_SND }, // 18 Samples
|
||||
|
||||
{ "sp_v101.u6", 0x010000, 0x097046bc, 0 | BRF_PRG | BRF_ESS }, // 19 Protection Rom
|
||||
|
||||
// { "ram_dump", 0x004000, 0x280cfb4e, 0 | BRF_PRG | BRF_ESS }, // 20 ram dump
|
||||
{ "sp_v101.u6", 0x010000, 0x097046bc, 9 | BRF_PRG | BRF_ESS }, // 19 Protection Rom
|
||||
};
|
||||
|
||||
STDROMPICKEXT(olds, olds, pgm)
|
||||
|
@ -1273,9 +1271,7 @@ static struct BurnRomInfo olds100RomDesc[] = {
|
|||
|
||||
{ "m0500.rom", 0x200000, 0x37928cdd, 5 | BRF_SND }, // 18 Samples
|
||||
|
||||
{ "kd-u6.512", 0x010000, 0xe7613dda, 0 | BRF_PRG | BRF_ESS }, // 19 Protection Rom
|
||||
|
||||
// { "ram_dump", 0x004000, 0x280cfb4e, 0 | BRF_PRG | BRF_ESS }, // 20 ram dump
|
||||
{ "kd-u6.512", 0x010000, 0xe7613dda, 9 | BRF_PRG | BRF_ESS }, // 19 Protection Rom
|
||||
};
|
||||
|
||||
STDROMPICKEXT(olds100, olds100, pgm)
|
||||
|
@ -1315,9 +1311,7 @@ static struct BurnRomInfo olds100aRomDesc[] = {
|
|||
|
||||
{ "m0500.rom", 0x200000, 0x37928cdd, 5 | BRF_SND }, // 14 Samples
|
||||
|
||||
{ "kd-u6.512", 0x010000, 0xe7613dda, 0 | BRF_PRG | BRF_ESS }, // 15 Protection Rom
|
||||
|
||||
// { "ram_dump", 0x004000, 0x280cfb4e, 0 | BRF_PRG | BRF_ESS }, // 16 ram dump
|
||||
{ "kd-u6.512", 0x010000, 0xe7613dda, 9 | BRF_PRG | BRF_ESS }, // 15 Protection Rom
|
||||
};
|
||||
|
||||
STDROMPICKEXT(olds100a, olds100a, pgm)
|
||||
|
@ -3764,16 +3758,16 @@ struct BurnDriver BurnDrvoldsplus = {
|
|||
// The Killing Blade Plus (V300)
|
||||
|
||||
static struct BurnRomInfo killbldpRomDesc[] = {
|
||||
{ "v300x.u6", 0x080000, 0xb7fb8ec9, 1 | BRF_PRG | BRF_ESS }, // 0 68K Code
|
||||
{ "v300x.u6", 0x080000, 0xb7fb8ec9, 1 | BRF_PRG | BRF_ESS }, // 0 68K Code
|
||||
|
||||
{ "t05701w032.bin", 0x400000, 0x567c714f, 2 | BRF_GRA }, // 1 Tile data
|
||||
{ "t05701w032.bin", 0x400000, 0x567c714f, 2 | BRF_GRA }, // 1 Tile data
|
||||
|
||||
{ "a05701w064.bin", 0x800000, 0x8c0c992c, 3 | BRF_GRA }, // 3 Sprite Color Data
|
||||
{ "a05702w064.bin", 0x800000, 0x7e5b0f27, 3 | BRF_GRA }, // 4
|
||||
{ "a05703w064.bin", 0x800000, 0xaccbdb44, 3 | BRF_GRA }, // 5
|
||||
|
||||
{ "b05701w064.bin", 0x800000, 0xa20cdcef, 4 | BRF_GRA }, // 6 Sprite Masks & Color Indexes
|
||||
{ "b05702w016.bin", 0x200000, 0xfe7457df, 4 | BRF_GRA }, // 7
|
||||
{ "b05702w016.bin", 0x200000, 0xfe7457df, 4 | BRF_GRA }, // 7
|
||||
|
||||
{ "w05701b032.bin", 0x400000, 0x2d3ae593, 5 | BRF_SND }, // 8 Samples
|
||||
|
||||
|
@ -3802,7 +3796,7 @@ INT32 killbldpInit()
|
|||
|
||||
struct BurnDriver BurnDrvKillbldp = {
|
||||
"killbldp", NULL, "pgm", NULL, "2005",
|
||||
"The Killing Blade Plus (V300)\0", "Incomplete Dump", "IGS", "PolyGameMaster",
|
||||
"The Killing Blade Plus (V300)\0", NULL, "IGS", "PolyGameMaster",
|
||||
L"The Killing Blade Plus \0\u50B2\u5251\u72C2\u5200\u00A0\u52A0\u5F3A\u7248 (V300)\0", NULL, NULL, NULL,
|
||||
BDF_GAME_WORKING, 4, HARDWARE_IGS_PGM | HARDWARE_IGS_USE_ARM_CPU, GBF_VSFIGHT, 0,
|
||||
NULL, killbldpRomInfo, killbldpRomName, NULL, NULL, pgmInputInfo, pgmDIPInfo,
|
||||
|
@ -3901,7 +3895,7 @@ static INT32 svgInit()
|
|||
|
||||
struct BurnDriver BurnDrvSvg = {
|
||||
"svg", NULL, "pgm", NULL, "2005",
|
||||
"S.V.G. - Spectral vs Generation (V200, China)\0", "Incomplete Dump", "IGS", "PolyGameMaster",
|
||||
"S.V.G. - Spectral vs Generation (V200, China)\0", NULL, "IGS", "PolyGameMaster",
|
||||
L"S.V.G. - Spectral vs Generation\0\u5723\u9B54\u4E16\u7EAA (V200, China)\0", NULL, NULL, NULL,
|
||||
BDF_GAME_WORKING, 4, HARDWARE_IGS_PGM | HARDWARE_IGS_USE_ARM_CPU, GBF_SCRFIGHT, 0,
|
||||
NULL, svgRomInfo, svgRomName, NULL, NULL, pgmInputInfo, svgDIPInfo,
|
||||
|
@ -3961,7 +3955,7 @@ static INT32 svgtwInit()
|
|||
|
||||
struct BurnDriverD BurnDrvSvgtw = {
|
||||
"svgtw", "svg", "pgm", NULL, "2005",
|
||||
"S.V.G. - Spectral vs Generation (V100, Taiwan)\0", "Incomplete Dump", "IGS", "PolyGameMaster",
|
||||
"S.V.G. - Spectral vs Generation (V100, Taiwan)\0", "Incomplete dump", "IGS", "PolyGameMaster",
|
||||
L"S.V.G. - Spectral vs Generation\0\u5723\u9B54\u4E16\u7EAA (V100, Taiwan)\0", NULL, NULL, NULL,
|
||||
BDF_CLONE, 4, HARDWARE_IGS_PGM | HARDWARE_IGS_USE_ARM_CPU, GBF_SCRFIGHT, 0,
|
||||
NULL, svgtwRomInfo, svgtwRomName, NULL, NULL, pgmInputInfo, svgtwDIPInfo,
|
||||
|
@ -3971,7 +3965,7 @@ struct BurnDriverD BurnDrvSvgtw = {
|
|||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// PCB Versions!
|
||||
// PCB Versions
|
||||
|
||||
|
||||
// DoDonPachi Dai-Ou-Jou (V101, Japan)
|
||||
|
@ -4514,7 +4508,7 @@ STD_ROM_FN(thegladpcb)
|
|||
|
||||
struct BurnDriver BurnDrvThegladpcb = {
|
||||
"thegladpcb", "theglad", NULL, NULL, "2003",
|
||||
"The Gladiator - Road Of The Sword / Shen Jian (V100, Japan, Single PCB Version)\0", "Incomplete Dump", "IGS", "PolyGameMaster",
|
||||
"The Gladiator - Road Of The Sword / Shen Jian (V100, Japan, Single PCB Version)\0", NULL, "IGS", "PolyGameMaster",
|
||||
L"The Gladiator - Road Of The Sword\0\u795E\u5251\u98CE\u4E91\0\u795E\u528D\u98A8\u96F2 (V100, Japan, PCB Version)\0", NULL, NULL, NULL,
|
||||
BDF_GAME_WORKING | BDF_CLONE, 4, HARDWARE_IGS_PGM | HARDWARE_IGS_USE_ARM_CPU, GBF_SCRFIGHT, 0,
|
||||
NULL, thegladpcbRomInfo, thegladpcbRomName, NULL, NULL, pgmInputInfo, thegladpcbDIPInfo,
|
||||
|
@ -4609,7 +4603,7 @@ static INT32 svgpcbInit()
|
|||
|
||||
struct BurnDriver BurnDrvSvgpcb = {
|
||||
"svgpcb", "svg", NULL, NULL, "2005",
|
||||
"S.V.G. - Spectral vs Generation (V100, Japan, Single PCB Version)\0", "Incomplete Dump", "IGS", "PolyGameMaster",
|
||||
"S.V.G. - Spectral vs Generation (V100, Japan, Single PCB Version)\0", NULL, "IGS", "PolyGameMaster",
|
||||
NULL, NULL, NULL, NULL,
|
||||
BDF_GAME_WORKING | BDF_CLONE, 4, HARDWARE_IGS_PGM | HARDWARE_IGS_USE_ARM_CPU, GBF_SCRFIGHT, 0,
|
||||
NULL, svgpcbRomInfo, svgpcbRomName, NULL, NULL, pgmInputInfo, thegladpcbDIPInfo,
|
||||
|
@ -5239,6 +5233,7 @@ struct BurnDriver BurnDrvKovshb = {
|
|||
448, 224, 4, 3
|
||||
};
|
||||
|
||||
|
||||
// Knights of Valour: Luan Shi Quan Huang / Sangoku Senki: Luan Shi Quan Huang (ver. 203CN)
|
||||
|
||||
static struct BurnRomInfo kovlsqhdRomDesc[] = {
|
||||
|
@ -5272,6 +5267,7 @@ struct BurnDriverD BurnDrvkovlsqhd = {
|
|||
448, 224, 4, 3
|
||||
};
|
||||
|
||||
|
||||
// Knights of Valour: Luan Shi Quan Huang / Sangoku Senki: Luan Shi Quan Huang II (ver. 200CN, alt)
|
||||
|
||||
static struct BurnRomInfo kovlsqh2dRomDesc[] = {
|
||||
|
|
|
@ -21,6 +21,7 @@ extern UINT8 *PGMSPRColROM;
|
|||
extern UINT8 *PGMSPRMaskROM;
|
||||
extern UINT8 *PGMARMROM;
|
||||
extern UINT8 *PGMUSER0;
|
||||
extern UINT8 *PGMProtROM;
|
||||
extern UINT8 *PGMARMRAM0;
|
||||
extern UINT8 *PGMARMRAM1;
|
||||
extern UINT8 *PGMARMRAM2;
|
||||
|
|
|
@ -0,0 +1,959 @@
|
|||
/*
|
||||
IGS Asic25 + (Asic12, Asic22, or Asic28) emulation
|
||||
|
||||
Used by:
|
||||
Oriental Legends Special (Asic25 + Asic28)
|
||||
The Killing Blade (Asic25 + Asic22)
|
||||
Dragon World 2 (Asic25 + Asic12)
|
||||
Dragon World 3 (Asic25 + Asic22)
|
||||
*/
|
||||
|
||||
#include "pgm.h"
|
||||
#include "bitswap.h"
|
||||
|
||||
static const UINT8 source_data[0x22][0xec] =
|
||||
{
|
||||
{ 0, }, // Region 0, not used
|
||||
{ // region 1, $14c21a
|
||||
0x67, 0x51, 0xf3, 0x19, 0xa0, 0x09, 0xb1, 0x21, 0xb0, 0xee, 0xe3, 0xf6, 0xbe, 0x81, 0x35, 0xe3,
|
||||
0xfb, 0xe6, 0xef, 0xdf, 0x61, 0x01, 0xfa, 0x22, 0x5d, 0x43, 0x01, 0xa5, 0x3b, 0x17, 0xd4, 0x74,
|
||||
0xf0, 0xf4, 0xf3, 0x43, 0xb5, 0x19, 0x04, 0xd5, 0x84, 0xce, 0x87, 0xfe, 0x35, 0x3e, 0xc4, 0x3c,
|
||||
0xc7, 0x85, 0x2a, 0x33, 0x00, 0x86, 0xd0, 0x4d, 0x65, 0x4b, 0xf9, 0xe9, 0xc0, 0xba, 0xaa, 0x77,
|
||||
0x9e, 0x66, 0xf6, 0x0f, 0x4f, 0x3a, 0xb6, 0xf1, 0x64, 0x9a, 0xe9, 0x25, 0x1a, 0x5f, 0x22, 0xa3,
|
||||
0xa2, 0xbf, 0x4b, 0x77, 0x3f, 0x34, 0xc9, 0x6e, 0xdb, 0x12, 0x5c, 0x33, 0xa5, 0x8b, 0x6c, 0xb1,
|
||||
0x74, 0xc8, 0x40, 0x4e, 0x2f, 0xe7, 0x46, 0xae, 0x99, 0xfc, 0xb0, 0x55, 0x54, 0xdf, 0xa7, 0xa1,
|
||||
0x0f, 0x5e, 0x49, 0xcf, 0x56, 0x3c, 0x90, 0x2b, 0xac, 0x65, 0x6e, 0xdb, 0x58, 0x3e, 0xc9, 0x00,
|
||||
0xae, 0x53, 0x4d, 0x92, 0xfa, 0x40, 0xb2, 0x6b, 0x65, 0x4b, 0x90, 0x8a, 0x0c, 0xe2, 0xa5, 0x9a,
|
||||
0xd0, 0x20, 0x29, 0x55, 0xa4, 0x44, 0xac, 0x51, 0x87, 0x54, 0x53, 0x34, 0x24, 0x4b, 0x81, 0x67,
|
||||
0x34, 0x4c, 0x5f, 0x31, 0x4e, 0xf2, 0xf1, 0x19, 0x18, 0x1c, 0x34, 0x38, 0xe1, 0x81, 0x17, 0xcf,
|
||||
0x24, 0xb9, 0x9a, 0xcb, 0x34, 0x51, 0x50, 0x59, 0x44, 0xb1, 0x0b, 0x50, 0x95, 0x6c, 0x48, 0x7e,
|
||||
0x14, 0xa4, 0xc6, 0xd9, 0xd3, 0xa5, 0xd6, 0xd0, 0xc5, 0x97, 0xf0, 0x45, 0xd0, 0x98, 0x51, 0x91,
|
||||
0x9f, 0xa3, 0x43, 0x51, 0x05, 0x90, 0xee, 0xca, 0x7e, 0x5f, 0x72, 0x53, 0xb1, 0xd3, 0xaf, 0x36,
|
||||
0x08, 0x75, 0xb0, 0x9b, 0xe0, 0x0d, 0x43, 0x88, 0xaa, 0x27, 0x44, 0x11
|
||||
},
|
||||
{ // region 2, $14c126
|
||||
0xf9, 0x19, 0xf3, 0x09, 0xa0, 0x09, 0xb0, 0x21, 0xb0, 0x22, 0xfd, 0x8e, 0xd3, 0xc8, 0x31, 0x67,
|
||||
0xc0, 0x10, 0x3c, 0xc2, 0x03, 0xf2, 0x6a, 0x0a, 0x54, 0x49, 0xca, 0xb5, 0x4b, 0xe0, 0x94, 0xe8,
|
||||
0x8d, 0xc8, 0x90, 0xee, 0x6b, 0x6f, 0xfa, 0x09, 0x76, 0x84, 0x6f, 0x55, 0xd1, 0x94, 0xca, 0x9c,
|
||||
0xe1, 0x22, 0xc6, 0x02, 0xb5, 0x8c, 0xf9, 0x3a, 0x52, 0x10, 0xf0, 0x22, 0xe4, 0x11, 0x15, 0x73,
|
||||
0x5e, 0x9e, 0xde, 0xc4, 0x5a, 0xbd, 0xa3, 0x89, 0xe7, 0x9b, 0x95, 0x5d, 0x75, 0xf6, 0xc3, 0x9f,
|
||||
0xe4, 0xcf, 0x65, 0x73, 0x90, 0xd0, 0x75, 0x56, 0xfa, 0xcc, 0xe4, 0x3e, 0x9c, 0x41, 0x81, 0x62,
|
||||
0xb1, 0xd3, 0x28, 0xbd, 0x6c, 0xed, 0x60, 0x28, 0x27, 0xee, 0xf2, 0xa1, 0xb4, 0x2c, 0x6c, 0xbb,
|
||||
0x42, 0xd7, 0x1d, 0x62, 0xc0, 0x33, 0x7d, 0xf9, 0xe4, 0x5c, 0xe2, 0x41, 0xa4, 0x1c, 0x98, 0xa1,
|
||||
0x87, 0x95, 0xad, 0x61, 0x56, 0x96, 0x40, 0x08, 0x6b, 0xe2, 0x4b, 0x95, 0x7b, 0x1b, 0xd8, 0x64,
|
||||
0xb3, 0xee, 0x9d, 0x79, 0x69, 0xea, 0x5d, 0xcf, 0x01, 0x91, 0xea, 0x3f, 0x70, 0x29, 0xdc, 0xe0,
|
||||
0x08, 0x20, 0xbf, 0x46, 0x90, 0xa8, 0xfc, 0x29, 0x14, 0xd1, 0x0d, 0x20, 0x79, 0xd2, 0x2c, 0xe9,
|
||||
0x52, 0xa6, 0x8c, 0xbd, 0xa3, 0x3e, 0x88, 0x2d, 0xb8, 0x4e, 0xf2, 0x74, 0x50, 0xcc, 0x12, 0xde,
|
||||
0xd3, 0x5a, 0xa4, 0x7b, 0xa2, 0x8d, 0x91, 0x68, 0x12, 0x0c, 0x9c, 0xb9, 0x6d, 0x26, 0x66, 0x60,
|
||||
0xc3, 0x6d, 0xd0, 0x11, 0x33, 0x05, 0x1d, 0xa8, 0xb6, 0x51, 0xe6, 0xe0, 0x58, 0x61, 0x74, 0x37,
|
||||
0xcc, 0x3a, 0x4d, 0x6a, 0x0a, 0x09, 0x71, 0xe3, 0x7e, 0xa5, 0x3b, 0xe9
|
||||
},
|
||||
{ // region 3, $14E5BE
|
||||
0x73, 0x59, 0xf3, 0x09, 0xa0, 0x09, 0xb1, 0x21, 0xb0, 0x55, 0x18, 0x0d, 0xe8, 0x29, 0x2d, 0x04,
|
||||
0x85, 0x39, 0x88, 0xbe, 0x8b, 0xcb, 0xd9, 0x0b, 0x32, 0x36, 0x94, 0xac, 0x74, 0xc3, 0x3b, 0x5d,
|
||||
0x2a, 0x83, 0x46, 0xb3, 0x3a, 0xac, 0xd8, 0x55, 0x68, 0x21, 0x57, 0xab, 0x6e, 0xd1, 0xd0, 0xfc,
|
||||
0xe2, 0xbe, 0x63, 0xd0, 0x6b, 0x79, 0x23, 0x40, 0x58, 0xd4, 0xe7, 0x73, 0x22, 0x67, 0x7f, 0x88,
|
||||
0x05, 0xbd, 0xdf, 0x7a, 0x65, 0x41, 0x90, 0x3a, 0x52, 0x83, 0x28, 0xae, 0xe9, 0x8e, 0x65, 0x82,
|
||||
0x0e, 0xdf, 0x98, 0x88, 0xe1, 0x86, 0x21, 0x3e, 0x1a, 0x87, 0x6d, 0x62, 0x7a, 0xf6, 0xaf, 0x2c,
|
||||
0xd5, 0xc5, 0x10, 0x2d, 0xa9, 0xda, 0x93, 0xa1, 0x9b, 0xc7, 0x35, 0xd4, 0x15, 0x78, 0x18, 0xd5,
|
||||
0x75, 0x6a, 0xd7, 0xdb, 0x12, 0x2a, 0x6a, 0xc8, 0x36, 0x53, 0x57, 0xa6, 0xf0, 0x13, 0x67, 0x43,
|
||||
0x79, 0xf0, 0x0e, 0x49, 0xb1, 0xec, 0xcd, 0xa4, 0x8a, 0x61, 0x06, 0xb9, 0xea, 0x53, 0xf2, 0x47,
|
||||
0x7d, 0xd6, 0xf8, 0x9d, 0x2e, 0xaa, 0x27, 0x35, 0x61, 0xce, 0x9b, 0x63, 0xbc, 0x07, 0x51, 0x5a,
|
||||
0xc2, 0x0d, 0x39, 0x42, 0xd2, 0x5e, 0x21, 0x20, 0x10, 0xa0, 0xe5, 0x08, 0xf7, 0x3d, 0x28, 0x04,
|
||||
0x99, 0x93, 0x97, 0xaf, 0xf9, 0x12, 0xc0, 0x01, 0x2d, 0xea, 0xf3, 0x98, 0x0b, 0x46, 0xc2, 0x26,
|
||||
0x93, 0x10, 0x69, 0x1d, 0x71, 0x8e, 0x33, 0x00, 0x5e, 0x80, 0x2f, 0x47, 0x0a, 0xcc, 0x94, 0x16,
|
||||
0xe7, 0x37, 0x45, 0xd0, 0x61, 0x79, 0x32, 0x86, 0x08, 0x2a, 0x5b, 0x55, 0xfe, 0xee, 0x52, 0x38,
|
||||
0xaa, 0x18, 0xe9, 0x39, 0x1a, 0x1e, 0xb8, 0x26, 0x6b, 0x3d, 0x4b, 0xa9
|
||||
},
|
||||
{ // region 4, $14d500
|
||||
0x06, 0x01, 0xf3, 0x39, 0xa0, 0x09, 0xa0, 0x21, 0xb0, 0x6f, 0x32, 0x8b, 0xfd, 0x89, 0x29, 0xa0,
|
||||
0x4a, 0x62, 0xed, 0xa1, 0x2d, 0xa4, 0x49, 0xf2, 0x10, 0x3c, 0x77, 0xa3, 0x84, 0x8d, 0xfa, 0xd1,
|
||||
0xc6, 0x57, 0xe2, 0x78, 0xef, 0xe9, 0xb6, 0xa1, 0x5a, 0xbd, 0x3f, 0x02, 0x0b, 0x28, 0xd6, 0x76,
|
||||
0xfc, 0x5b, 0x19, 0x9f, 0x21, 0x66, 0x4c, 0x2d, 0x45, 0x99, 0xde, 0xab, 0x46, 0xbd, 0xe9, 0x84,
|
||||
0xc4, 0xdc, 0xc7, 0x30, 0x70, 0xdd, 0x64, 0xea, 0xbc, 0x6b, 0xd3, 0xe6, 0x45, 0x3f, 0x07, 0x7e,
|
||||
0x50, 0xef, 0xb2, 0x84, 0x33, 0x3c, 0xcc, 0x3f, 0x39, 0x5b, 0xf5, 0x6d, 0x71, 0xc5, 0xdd, 0xf5,
|
||||
0xf9, 0xd0, 0xf7, 0x9c, 0xe6, 0xc7, 0xad, 0x1b, 0x29, 0xb9, 0x90, 0x08, 0x75, 0xc4, 0xc3, 0xef,
|
||||
0xa8, 0xfc, 0xab, 0x55, 0x7c, 0x21, 0x57, 0x97, 0x87, 0x4a, 0xcb, 0x0c, 0x56, 0x0a, 0x4f, 0xcb,
|
||||
0x52, 0x33, 0x87, 0x31, 0xf3, 0x43, 0x5b, 0x41, 0x90, 0xf8, 0xc0, 0xdd, 0x5a, 0xa4, 0x26, 0x2a,
|
||||
0x60, 0xa5, 0x6d, 0xda, 0xf2, 0x6a, 0xf0, 0xb3, 0xda, 0x25, 0x33, 0x87, 0x22, 0xe4, 0xac, 0xd3,
|
||||
0x96, 0xe0, 0x99, 0x3e, 0xfb, 0x14, 0x45, 0x17, 0x25, 0x56, 0xbe, 0xef, 0x8f, 0x8e, 0x3d, 0x1e,
|
||||
0xc7, 0x99, 0xa2, 0xa1, 0x50, 0xfe, 0xdf, 0xd4, 0xa1, 0x87, 0xf4, 0xd5, 0xde, 0xa6, 0x8c, 0x6d,
|
||||
0x6c, 0xde, 0x47, 0xbe, 0x59, 0x8f, 0xd4, 0x97, 0xc3, 0xf4, 0xda, 0xbb, 0xa6, 0x73, 0xa9, 0xcb,
|
||||
0xf2, 0x01, 0xb9, 0x90, 0x8f, 0xed, 0x60, 0x64, 0x40, 0x1c, 0xb6, 0xc9, 0xa5, 0x7c, 0x17, 0x52,
|
||||
0x6f, 0xdc, 0x6d, 0x08, 0x2a, 0x1a, 0xe6, 0x68, 0x3f, 0xd4, 0x42, 0x69
|
||||
},
|
||||
{ // region 5, $14bfb2
|
||||
0x7f, 0x41, 0xf3, 0x39, 0xa0, 0x09, 0xa1, 0x21, 0xb0, 0xa2, 0x4c, 0x23, 0x13, 0xe9, 0x25, 0x3d,
|
||||
0x0f, 0x72, 0x3a, 0x9d, 0xb5, 0x96, 0xd1, 0xda, 0x07, 0x29, 0x41, 0x9a, 0xad, 0x70, 0xba, 0x46,
|
||||
0x63, 0x2b, 0x7f, 0x3d, 0xbe, 0x40, 0xad, 0xd4, 0x4c, 0x73, 0x27, 0x58, 0xa7, 0x65, 0xdc, 0xd6,
|
||||
0xfd, 0xde, 0xb5, 0x6e, 0xd6, 0x6c, 0x75, 0x1a, 0x32, 0x45, 0xd5, 0xe3, 0x6a, 0x14, 0x6d, 0x80,
|
||||
0x84, 0x15, 0xaf, 0xcc, 0x7b, 0x61, 0x51, 0x82, 0x40, 0x53, 0x7f, 0x38, 0xa0, 0xd6, 0x8f, 0x61,
|
||||
0x79, 0x19, 0xe5, 0x99, 0x84, 0xd8, 0x78, 0x27, 0x3f, 0x16, 0x97, 0x78, 0x4f, 0x7b, 0x0c, 0xa6,
|
||||
0x37, 0xdb, 0xc6, 0x0c, 0x24, 0xb4, 0xc7, 0x94, 0x9d, 0x92, 0xd2, 0x3b, 0xd5, 0x11, 0x6f, 0x0a,
|
||||
0xdb, 0x76, 0x66, 0xe7, 0xcd, 0x18, 0x2b, 0x66, 0xd8, 0x41, 0x40, 0x58, 0xa2, 0x01, 0x1e, 0x6d,
|
||||
0x44, 0x75, 0xe7, 0x19, 0x4f, 0xb2, 0xe8, 0xc4, 0x96, 0x77, 0x62, 0x02, 0xc9, 0xdc, 0x59, 0xf3,
|
||||
0x43, 0x8d, 0xc8, 0xfe, 0x9e, 0x2a, 0xba, 0x32, 0x3b, 0x62, 0xe3, 0x92, 0x6e, 0xc2, 0x08, 0x4d,
|
||||
0x51, 0xcd, 0xf9, 0x3a, 0x3e, 0xc9, 0x50, 0x27, 0x21, 0x25, 0x97, 0xd7, 0x0e, 0xf8, 0x39, 0x38,
|
||||
0xf5, 0x86, 0x94, 0x93, 0xbf, 0xeb, 0x18, 0xa8, 0xfc, 0x24, 0xf5, 0xf9, 0x99, 0x20, 0x3d, 0xcd,
|
||||
0x2c, 0x94, 0x25, 0x79, 0x28, 0x77, 0x8f, 0x2f, 0x10, 0x69, 0x86, 0x30, 0x43, 0x01, 0xd7, 0x9a,
|
||||
0x17, 0xe3, 0x47, 0x37, 0xbd, 0x62, 0x75, 0x42, 0x78, 0xf4, 0x2b, 0x57, 0x4c, 0x0a, 0xdb, 0x53,
|
||||
0x4d, 0xa1, 0x0a, 0xd6, 0x3a, 0x16, 0x15, 0xaa, 0x2c, 0x6c, 0x39, 0x42
|
||||
},
|
||||
{ // region 6, $14cd82
|
||||
0x12, 0x09, 0xf3, 0x29, 0xa0, 0x09, 0xa0, 0x21, 0xb0, 0xd5, 0x66, 0xa1, 0x28, 0x4a, 0x21, 0xc0,
|
||||
0xd3, 0x9b, 0x86, 0x80, 0x57, 0x6f, 0x41, 0xc2, 0xe4, 0x2f, 0x0b, 0x91, 0xbd, 0x3a, 0x7a, 0xba,
|
||||
0x00, 0xe5, 0x35, 0x02, 0x74, 0x7d, 0x8b, 0x21, 0x57, 0x10, 0x0f, 0xae, 0x44, 0xbb, 0xe2, 0x37,
|
||||
0x18, 0x7b, 0x52, 0x3d, 0x8c, 0x59, 0x9e, 0x20, 0x1f, 0x0a, 0xcc, 0x1c, 0x8e, 0x6a, 0xd7, 0x95,
|
||||
0x2b, 0x34, 0xb0, 0x82, 0x6d, 0xfd, 0x25, 0x33, 0xaa, 0x3b, 0x2b, 0x70, 0x15, 0x87, 0x31, 0x5d,
|
||||
0xbb, 0x29, 0x19, 0x95, 0xd5, 0x8e, 0x24, 0x28, 0x5e, 0xd0, 0x20, 0x83, 0x46, 0x4a, 0x21, 0x70,
|
||||
0x5b, 0xcd, 0xae, 0x7b, 0x61, 0xa1, 0xfa, 0xf4, 0x2b, 0x84, 0x15, 0x6e, 0x36, 0x5d, 0x1b, 0x24,
|
||||
0x0f, 0x09, 0x3a, 0x61, 0x38, 0x0f, 0x18, 0x35, 0x11, 0x38, 0xb4, 0xbd, 0xee, 0xf7, 0xec, 0x0f,
|
||||
0x1d, 0xb7, 0x48, 0x01, 0xaa, 0x09, 0x8f, 0x61, 0xb5, 0x0f, 0x1d, 0x26, 0x39, 0x2e, 0x8c, 0xd6,
|
||||
0x26, 0x5c, 0x3d, 0x23, 0x63, 0xe9, 0x6b, 0x97, 0xb4, 0x9f, 0x7b, 0xb6, 0xba, 0xa0, 0x7c, 0xc6,
|
||||
0x25, 0xa1, 0x73, 0x36, 0x67, 0x7f, 0x74, 0x1e, 0x1d, 0xda, 0x70, 0xbf, 0xa5, 0x63, 0x35, 0x39,
|
||||
0x24, 0x8c, 0x9f, 0x85, 0x16, 0xd8, 0x50, 0x95, 0x71, 0xc0, 0xf6, 0x1e, 0x6d, 0x80, 0xed, 0x15,
|
||||
0xeb, 0x63, 0xe9, 0x1b, 0xf6, 0x78, 0x31, 0xc6, 0x5c, 0xdd, 0x19, 0xbd, 0xdf, 0xa7, 0xec, 0x50,
|
||||
0x22, 0xad, 0xbb, 0xf6, 0xeb, 0xd6, 0xa3, 0x20, 0xc9, 0xe6, 0x9f, 0xcb, 0xf2, 0x97, 0xb9, 0x54,
|
||||
0x12, 0x66, 0xa6, 0xbe, 0x4a, 0x12, 0x43, 0xec, 0x00, 0xea, 0x49, 0x02
|
||||
},
|
||||
{ // region 7, $14ce76
|
||||
0xa4, 0x49, 0xf3, 0x29, 0xa0, 0x09, 0xa1, 0x21, 0xb0, 0xef, 0x80, 0x20, 0x3d, 0xaa, 0x36, 0x5d,
|
||||
0x98, 0xc4, 0xd2, 0x63, 0xdf, 0x61, 0xb0, 0xc3, 0xc2, 0x35, 0xd4, 0x88, 0xe6, 0x1d, 0x3a, 0x2f,
|
||||
0x9c, 0xb9, 0xd1, 0xc6, 0x43, 0xba, 0x69, 0x6d, 0x49, 0xac, 0xdd, 0x05, 0xe0, 0xf8, 0xe8, 0x97,
|
||||
0x19, 0x18, 0x08, 0x0c, 0x42, 0x46, 0xc7, 0x0d, 0x25, 0xce, 0xc3, 0x54, 0xb2, 0xd9, 0x42, 0x91,
|
||||
0xea, 0x53, 0x98, 0x38, 0x78, 0x81, 0x12, 0xca, 0x15, 0x23, 0xbd, 0xc1, 0x70, 0x1f, 0xd2, 0x40,
|
||||
0xfd, 0x39, 0x33, 0xaa, 0x27, 0x2b, 0xe8, 0x10, 0x7d, 0xa4, 0xa8, 0x8e, 0x3d, 0x00, 0x4f, 0x3a,
|
||||
0x7f, 0xd8, 0x96, 0xea, 0x9e, 0x8e, 0x15, 0x6e, 0x9f, 0x76, 0x57, 0xba, 0x7d, 0xc2, 0xdf, 0x57,
|
||||
0x42, 0x82, 0xf4, 0xda, 0x89, 0x06, 0x05, 0x04, 0x62, 0x2f, 0x29, 0x23, 0x54, 0xd5, 0xbb, 0x97,
|
||||
0xf5, 0xf9, 0xc1, 0xcf, 0xec, 0x5f, 0x1d, 0xfd, 0xbb, 0xa6, 0xd7, 0x4a, 0xa8, 0x66, 0xbf, 0xb9,
|
||||
0x09, 0x44, 0xb1, 0x60, 0x28, 0xa9, 0x35, 0x16, 0x15, 0xf5, 0x13, 0xc1, 0x07, 0x7e, 0xd7, 0x40,
|
||||
0xdf, 0x8e, 0xd3, 0x32, 0xa9, 0x35, 0x98, 0x15, 0x32, 0xa9, 0x49, 0xc0, 0x24, 0xb4, 0x4a, 0x53,
|
||||
0x6b, 0x79, 0xaa, 0x77, 0x6c, 0xc5, 0x88, 0x69, 0xe5, 0x5d, 0xde, 0x42, 0x28, 0xf9, 0xb7, 0x5c,
|
||||
0xab, 0x19, 0xc7, 0xbc, 0xc5, 0x60, 0xeb, 0x5e, 0xa8, 0x52, 0xc4, 0x32, 0x7c, 0x35, 0x02, 0x06,
|
||||
0x46, 0x77, 0x30, 0xb6, 0x33, 0x4b, 0xb8, 0xfd, 0x02, 0xd8, 0x14, 0x40, 0x99, 0x25, 0x7e, 0x55,
|
||||
0xd6, 0x44, 0x43, 0x8d, 0x73, 0x0e, 0x71, 0x48, 0xd3, 0x82, 0x40, 0xda
|
||||
},
|
||||
{ 0, }, // unused region 08
|
||||
{ 0, }, // unused region 09
|
||||
{ 0, }, // unused region 0a
|
||||
{ 0, }, // unused region 0b
|
||||
{ 0, }, // unused region 0c
|
||||
{ 0, }, // unused region 0d
|
||||
{ 0, }, // unused region 0e
|
||||
{ 0, }, // unused region 0f
|
||||
{ 0, }, // unused region 10
|
||||
{ 0, }, // unused region 11
|
||||
{ 0, }, // unused region 12
|
||||
{ 0, }, // unused region 13
|
||||
{ 0, }, // unused region 14
|
||||
{ 0, }, // unused region 15
|
||||
{ // region 16, $178772
|
||||
0x5e, 0x09, 0xb3, 0x39, 0x60, 0x71, 0x71, 0x53, 0x11, 0xe5, 0x26, 0x34, 0x4c, 0x8c, 0x90, 0xee,
|
||||
0xed, 0xb5, 0x05, 0x95, 0x9e, 0x6b, 0xdd, 0x87, 0x0e, 0x7b, 0xed, 0x33, 0xaf, 0xc2, 0x62, 0x98,
|
||||
0xec, 0xc8, 0x2c, 0x2b, 0x57, 0x3d, 0x00, 0xbd, 0x12, 0xac, 0xba, 0x64, 0x81, 0x99, 0x16, 0x29,
|
||||
0xb4, 0x63, 0xa8, 0xd9, 0xc9, 0x5f, 0xfe, 0x21, 0xbb, 0xbf, 0x9b, 0xd1, 0x7b, 0x93, 0xc4, 0x82,
|
||||
0xef, 0x2b, 0xe8, 0xa6, 0xdc, 0x68, 0x3a, 0xd9, 0xc9, 0x23, 0xc7, 0x7b, 0x98, 0x5b, 0xe1, 0xc7,
|
||||
0xa3, 0xd4, 0x51, 0x0a, 0x86, 0x30, 0x20, 0x51, 0x6e, 0x04, 0x1c, 0xd4, 0xfb, 0xf5, 0x22, 0x8f,
|
||||
0x16, 0x6f, 0xb9, 0x59, 0x30, 0xcf, 0xab, 0x32, 0x1d, 0x6c, 0x84, 0xab, 0x23, 0x90, 0x94, 0xb1,
|
||||
0xe7, 0x4b, 0x6d, 0xc1, 0x84, 0xba, 0x32, 0x68, 0xa3, 0xf2, 0x47, 0x28, 0xe5, 0xcb, 0xbb, 0x47,
|
||||
0x14, 0x2c, 0xad, 0x4d, 0xa1, 0xd7, 0x18, 0x53, 0xf7, 0x6f, 0x05, 0x81, 0x8f, 0xbb, 0x29, 0xdc,
|
||||
0xbd, 0x17, 0x61, 0x92, 0x9b, 0x1d, 0x4e, 0x7a, 0x83, 0x14, 0x9f, 0x7b, 0x7a, 0x6a, 0xe1, 0x27,
|
||||
0x62, 0x52, 0x7e, 0x82, 0x45, 0xda, 0xed, 0xf1, 0x0a, 0x3b, 0x6c, 0x02, 0x5b, 0x6e, 0x45, 0x4e,
|
||||
0xf2, 0x65, 0x87, 0x1d, 0x80, 0xed, 0x6a, 0xc3, 0x77, 0xcb, 0xe8, 0x8d, 0x5a, 0xb8, 0xda, 0x89,
|
||||
0x88, 0x4b, 0x27, 0xd5, 0x57, 0x29, 0x91, 0x86, 0x12, 0xbb, 0xd3, 0x8c, 0xc7, 0x49, 0x84, 0x9c,
|
||||
0x96, 0x59, 0x30, 0x93, 0x92, 0xeb, 0x59, 0x2b, 0x93, 0x5b, 0x5f, 0xf9, 0x67, 0xac, 0x97, 0x8c,
|
||||
0x04, 0xda, 0x1b, 0x65, 0xd7, 0xef, 0x44, 0xca, 0xc4, 0x87, 0x18, 0x2b
|
||||
},
|
||||
{ // region 17, $178a36
|
||||
0xd7, 0x49, 0xb3, 0x39, 0x60, 0x71, 0x70, 0x53, 0x11, 0x00, 0x27, 0xb2, 0x61, 0xd3, 0x8c, 0x8b,
|
||||
0xb2, 0xde, 0x6a, 0x78, 0x40, 0x5d, 0x4d, 0x88, 0xeb, 0x81, 0xd0, 0x2a, 0xbf, 0x8c, 0x22, 0x0d,
|
||||
0x89, 0x83, 0xc8, 0xef, 0x0d, 0x7a, 0xf6, 0xf0, 0x1d, 0x49, 0xa2, 0xd3, 0x1e, 0xef, 0x1c, 0xa2,
|
||||
0xce, 0x00, 0x5e, 0xa8, 0x7f, 0x4c, 0x41, 0x27, 0xa8, 0x6b, 0x92, 0x0a, 0xb8, 0x03, 0x2f, 0x7e,
|
||||
0xaf, 0x4a, 0xd0, 0x5c, 0xce, 0xeb, 0x0e, 0x8a, 0x4d, 0x0b, 0x73, 0xb3, 0xf3, 0x0c, 0x83, 0xaa,
|
||||
0xe5, 0xe4, 0x84, 0x06, 0xd7, 0xcc, 0xcb, 0x52, 0x8d, 0xbe, 0xa4, 0xdf, 0xd9, 0xab, 0x50, 0x59,
|
||||
0x53, 0x61, 0xa1, 0xc8, 0x6d, 0xbc, 0xde, 0xab, 0xaa, 0x5e, 0xc6, 0xf7, 0x83, 0xdc, 0x40, 0xcb,
|
||||
0x1b, 0xdd, 0x28, 0x3b, 0xee, 0xb1, 0x1f, 0x37, 0xdb, 0xe9, 0xbb, 0x74, 0x4b, 0xc2, 0x8a, 0xe8,
|
||||
0xec, 0x6e, 0x0e, 0x35, 0xe3, 0x2e, 0xbe, 0xef, 0xfd, 0x07, 0xbf, 0x8c, 0xfe, 0xf3, 0x5c, 0xbf,
|
||||
0x87, 0xe5, 0xbc, 0xcf, 0x60, 0xdc, 0x18, 0xf8, 0xfc, 0x51, 0x50, 0x86, 0xc6, 0x48, 0x3d, 0xb9,
|
||||
0x1d, 0x26, 0xf7, 0x7e, 0x87, 0x90, 0x12, 0xe8, 0x06, 0x0a, 0x45, 0xe9, 0xd9, 0xd8, 0x41, 0x68,
|
||||
0x21, 0x52, 0x92, 0x0f, 0xd6, 0xda, 0xa2, 0x97, 0xeb, 0x68, 0xd0, 0xb1, 0x15, 0x19, 0x8b, 0xd0,
|
||||
0x48, 0x1a, 0xeb, 0x90, 0x3f, 0x2a, 0x33, 0x1e, 0x5e, 0x30, 0x66, 0x01, 0x64, 0xef, 0x99, 0x52,
|
||||
0xba, 0x23, 0xbd, 0x53, 0xc0, 0x60, 0x87, 0x09, 0xcb, 0x4d, 0xd3, 0x87, 0x0e, 0x3a, 0x5c, 0x8d,
|
||||
0xc8, 0xb8, 0xb7, 0x34, 0x01, 0xeb, 0x72, 0x0d, 0xb1, 0x1f, 0x0f, 0xea
|
||||
},
|
||||
{ // region 18, $17dac4
|
||||
0x6a, 0x13, 0xb3, 0x09, 0x60, 0x79, 0x61, 0x53, 0x11, 0x33, 0x41, 0x31, 0x76, 0x34, 0x88, 0x0f,
|
||||
0x77, 0x08, 0xb6, 0x74, 0xc8, 0x36, 0xbc, 0x70, 0xe2, 0x87, 0x9a, 0x21, 0xe8, 0x56, 0xe1, 0x9a,
|
||||
0x26, 0x57, 0x7e, 0x9b, 0xdb, 0xb7, 0xd4, 0x3d, 0x0f, 0xfe, 0x8a, 0x2a, 0xba, 0x2d, 0x22, 0x03,
|
||||
0xcf, 0x9c, 0xfa, 0x77, 0x35, 0x39, 0x6a, 0x14, 0xae, 0x30, 0x89, 0x42, 0xdc, 0x59, 0xb2, 0x93,
|
||||
0x6f, 0x82, 0xd1, 0x12, 0xd9, 0x88, 0xfa, 0x3b, 0xb7, 0x0c, 0x1f, 0x05, 0x68, 0xa3, 0x0c, 0xa6,
|
||||
0x0f, 0xf4, 0x9e, 0x1b, 0x29, 0x82, 0x77, 0x3a, 0xac, 0x92, 0x2d, 0x04, 0xd0, 0x61, 0x65, 0x0a,
|
||||
0x77, 0x6c, 0x89, 0x38, 0xaa, 0xa9, 0xf8, 0x0c, 0x1f, 0x37, 0x09, 0x2b, 0xca, 0x29, 0x05, 0xe5,
|
||||
0x4e, 0x57, 0xfb, 0xcd, 0x40, 0xa8, 0x0c, 0x06, 0x2d, 0xe0, 0x30, 0xd9, 0x97, 0xb9, 0x59, 0x8a,
|
||||
0xde, 0xc9, 0x87, 0x1d, 0x3f, 0x84, 0x4c, 0x73, 0x04, 0x85, 0x61, 0xb0, 0x6e, 0x2c, 0x8f, 0xa2,
|
||||
0x6a, 0xcd, 0x31, 0xf3, 0x25, 0x83, 0xe1, 0x5e, 0x5d, 0xa7, 0xe7, 0xaa, 0x13, 0x26, 0xb1, 0x33,
|
||||
0xf0, 0x13, 0x58, 0x7a, 0xb0, 0x46, 0x1d, 0xdf, 0x02, 0xbf, 0x1e, 0xd1, 0x71, 0x43, 0x56, 0x82,
|
||||
0x4f, 0x58, 0x9d, 0x01, 0x2d, 0xc7, 0xda, 0x6b, 0x47, 0x05, 0xd1, 0xd5, 0xe8, 0x92, 0x3c, 0x18,
|
||||
0x21, 0xcf, 0xc9, 0x32, 0x0e, 0x12, 0xed, 0xb5, 0xaa, 0xa4, 0x12, 0x75, 0x01, 0x7d, 0xc7, 0x21,
|
||||
0xde, 0xec, 0x32, 0x13, 0xee, 0xd4, 0x9c, 0xe6, 0x04, 0x3f, 0x48, 0xfb, 0xb4, 0xc7, 0x21, 0x8e,
|
||||
0x8d, 0x7d, 0x54, 0x03, 0x11, 0xe7, 0xb9, 0x4f, 0x85, 0xb6, 0x1f, 0xaa
|
||||
},
|
||||
{ // region 19, $178eee
|
||||
0xe3, 0x53, 0xb3, 0x09, 0x60, 0x79, 0x60, 0x53, 0x11, 0x66, 0x5b, 0xc8, 0x8b, 0x94, 0x84, 0xab,
|
||||
0x3c, 0x18, 0x03, 0x57, 0x6a, 0x0f, 0x45, 0x58, 0xc0, 0x74, 0x64, 0x18, 0xf8, 0x39, 0xa1, 0x0f,
|
||||
0xc2, 0x2b, 0x1b, 0x60, 0xaa, 0x0e, 0xb2, 0x89, 0x01, 0x9b, 0x72, 0x80, 0x57, 0x83, 0x28, 0x63,
|
||||
0xe9, 0x39, 0x97, 0x46, 0xea, 0x3f, 0x93, 0x01, 0x9b, 0xf4, 0x80, 0x93, 0x01, 0xaf, 0x1d, 0x8f,
|
||||
0x16, 0xa1, 0xb9, 0xc7, 0xe4, 0x0c, 0xe7, 0xd2, 0x3b, 0xf3, 0xca, 0x3d, 0xc3, 0x54, 0xad, 0x89,
|
||||
0x51, 0x1e, 0xd1, 0x17, 0x7a, 0x1f, 0x23, 0x22, 0xcb, 0x4d, 0xce, 0x0f, 0xae, 0x30, 0x93, 0xd3,
|
||||
0x9b, 0x77, 0x71, 0xa7, 0xe7, 0x96, 0x2c, 0x85, 0xac, 0x29, 0x4b, 0x5e, 0x2b, 0x75, 0xb0, 0x00,
|
||||
0x81, 0xe9, 0xb6, 0x47, 0xaa, 0x9f, 0xdf, 0xd4, 0x7e, 0xd7, 0xa4, 0x3f, 0xe3, 0xb0, 0x41, 0x2c,
|
||||
0xb7, 0x0c, 0xe7, 0xeb, 0x9a, 0xda, 0xd9, 0x10, 0x23, 0x1d, 0x1c, 0xd4, 0xdd, 0x7d, 0xc2, 0x6c,
|
||||
0x4d, 0x9c, 0xa5, 0x18, 0xd0, 0x43, 0xab, 0xdc, 0xbd, 0xe4, 0x7f, 0xb5, 0x5f, 0x04, 0x0d, 0xac,
|
||||
0xab, 0xe6, 0xb8, 0x76, 0xf2, 0x15, 0x41, 0xef, 0x17, 0x8e, 0xf6, 0xb9, 0xef, 0x94, 0x52, 0x83,
|
||||
0x96, 0x45, 0x8f, 0xf2, 0x9c, 0xb4, 0x13, 0x3f, 0xbb, 0xa1, 0xd2, 0xf9, 0xa3, 0xf2, 0x06, 0x78,
|
||||
0xe0, 0x9e, 0xa7, 0xd3, 0xdc, 0x13, 0x8f, 0x4d, 0xf6, 0x19, 0xbd, 0x03, 0x9d, 0x24, 0xdc, 0xd6,
|
||||
0xe9, 0xcf, 0xa6, 0xd2, 0x1d, 0x49, 0xca, 0xc4, 0x55, 0x18, 0xbc, 0x70, 0x5b, 0x55, 0xfe, 0x8f,
|
||||
0x6b, 0x42, 0xf0, 0xd1, 0x21, 0xe3, 0xe7, 0x91, 0x59, 0x4e, 0x16, 0x83
|
||||
},
|
||||
{ 0, }, // unused region 1a
|
||||
{ 0, }, // unused region 1b
|
||||
{ 0, }, // unused region 1c
|
||||
{ 0, }, // unused region 1d
|
||||
{ 0, }, // unused region 1e
|
||||
{ 0, }, // unused region 1f
|
||||
{ // region 20, $17a322
|
||||
0xb3, 0x10, 0xf3, 0x0b, 0xe0, 0x71, 0x60, 0x53, 0x11, 0x9a, 0x12, 0x70, 0x1f, 0x1e, 0x81, 0xda,
|
||||
0x9d, 0x1f, 0x4b, 0xd6, 0x71, 0x48, 0x83, 0xe1, 0x04, 0x6c, 0x1b, 0xf1, 0xcd, 0x09, 0xdf, 0x3e,
|
||||
0x0b, 0xaa, 0x95, 0xc1, 0x07, 0xec, 0x0f, 0x54, 0xd0, 0x16, 0xb0, 0xdc, 0x86, 0x7b, 0x52, 0x38,
|
||||
0x3c, 0x68, 0x2b, 0xed, 0xe2, 0xeb, 0xb3, 0xc6, 0x48, 0x24, 0x41, 0x36, 0x17, 0x25, 0x1f, 0xa5,
|
||||
0x22, 0xc6, 0x5c, 0xa6, 0x19, 0xef, 0x17, 0x5c, 0x56, 0x4b, 0x4a, 0x2b, 0x75, 0xab, 0xe6, 0x22,
|
||||
0xd5, 0xc0, 0xd3, 0x46, 0xcc, 0xe4, 0xd4, 0xc4, 0x8c, 0x9a, 0x8a, 0x75, 0x24, 0x73, 0xa4, 0x26,
|
||||
0xca, 0x79, 0xaf, 0xb3, 0x94, 0x2a, 0x15, 0xbe, 0x40, 0x7b, 0x4d, 0xf6, 0xb4, 0xa4, 0x7b, 0xcf,
|
||||
0xce, 0xa0, 0x1d, 0xcb, 0x2f, 0x60, 0x28, 0x63, 0x85, 0x98, 0xd3, 0xd2, 0x45, 0x3f, 0x02, 0x65,
|
||||
0xd7, 0xf4, 0xbc, 0x2a, 0xe7, 0x50, 0xd1, 0x3f, 0x7f, 0xf6, 0x05, 0xb8, 0xe9, 0x39, 0x10, 0x6e,
|
||||
0x68, 0xa8, 0x89, 0x60, 0x00, 0x68, 0xfd, 0x20, 0xc4, 0xdc, 0xef, 0x67, 0x75, 0xfb, 0xbe, 0xfe,
|
||||
0x2b, 0x16, 0xa6, 0x5a, 0x77, 0x0d, 0x0c, 0xe2, 0x2d, 0xd1, 0xe4, 0x11, 0xc9, 0x4b, 0x81, 0x3a,
|
||||
0x0c, 0x24, 0xaa, 0x77, 0x2b, 0x2f, 0x83, 0x23, 0xd1, 0xe9, 0xa7, 0x29, 0x0a, 0xf9, 0x26, 0x9d,
|
||||
0x51, 0xc8, 0x6d, 0x71, 0x9d, 0xce, 0x46, 0x72, 0x26, 0x48, 0x3d, 0x64, 0xe5, 0x67, 0xbb, 0x1a,
|
||||
0xb4, 0x6d, 0x21, 0x11, 0x79, 0x78, 0xc2, 0xd5, 0x11, 0x6a, 0xd2, 0xea, 0x03, 0x4d, 0x92, 0xaf,
|
||||
0x18, 0xd5, 0x07, 0x79, 0xaa, 0xf9, 0x44, 0x93, 0x6f, 0x41, 0x22, 0x0d
|
||||
},
|
||||
{ // region 21, $17b3b4
|
||||
0x2d, 0x50, 0xf3, 0x0b, 0xe0, 0x71, 0x61, 0x53, 0x11, 0xb4, 0x2c, 0xee, 0x34, 0x7e, 0x7d, 0x5e,
|
||||
0x62, 0x48, 0x97, 0xd2, 0xf9, 0x3a, 0xf2, 0xc9, 0xfa, 0x59, 0xe4, 0xe8, 0xf6, 0xd2, 0x9f, 0xb2,
|
||||
0xa7, 0x7e, 0x32, 0x86, 0xbc, 0x43, 0xec, 0xa0, 0xc2, 0xcb, 0x98, 0x33, 0x23, 0xd1, 0x58, 0x98,
|
||||
0x56, 0x05, 0xc7, 0xbc, 0x98, 0xd8, 0xdc, 0xb3, 0x35, 0xe8, 0x51, 0x6e, 0x3b, 0x7b, 0x89, 0xba,
|
||||
0xe1, 0xe5, 0x44, 0x5c, 0x24, 0x73, 0x04, 0x0d, 0xd9, 0x33, 0xf5, 0x63, 0xe9, 0x5c, 0x88, 0x05,
|
||||
0x18, 0xd0, 0x07, 0x5b, 0x1e, 0x81, 0x80, 0xac, 0x92, 0x6e, 0x13, 0x80, 0x1b, 0x29, 0xd2, 0xef,
|
||||
0x08, 0x84, 0x97, 0x23, 0xd1, 0x17, 0x2f, 0x38, 0xb4, 0x6d, 0x8f, 0x2a, 0x15, 0xf0, 0x40, 0xe9,
|
||||
0x02, 0x33, 0xd7, 0x5e, 0x99, 0x57, 0x15, 0x32, 0xbd, 0x8f, 0x48, 0x38, 0x91, 0x36, 0xe9, 0x07,
|
||||
0xc9, 0x37, 0x1d, 0x12, 0x2a, 0xbf, 0x5f, 0xdb, 0x85, 0x75, 0xbf, 0xdc, 0x59, 0x8a, 0x43, 0x51,
|
||||
0x4b, 0x77, 0xfd, 0x84, 0xc4, 0x28, 0xc7, 0x85, 0x25, 0x1a, 0x87, 0x8b, 0xc1, 0xd9, 0x1a, 0x78,
|
||||
0xe5, 0x03, 0x20, 0x56, 0xa0, 0xc2, 0x17, 0xf2, 0x29, 0xa0, 0xbd, 0xf8, 0x61, 0x9c, 0x7d, 0x54,
|
||||
0x3a, 0x11, 0xb5, 0x69, 0x9a, 0x1c, 0xbb, 0xf6, 0x2d, 0x86, 0xa8, 0x4d, 0xdd, 0x5a, 0xd6, 0xe4,
|
||||
0x11, 0x7e, 0x4b, 0x13, 0x6c, 0xb6, 0x01, 0x0a, 0x72, 0xbc, 0xe8, 0xf1, 0x82, 0x0e, 0xd0, 0xcf,
|
||||
0xbf, 0x50, 0x95, 0xb7, 0xa7, 0xec, 0xd7, 0xb3, 0x49, 0x5c, 0x47, 0x5f, 0xa9, 0xda, 0x70, 0xb0,
|
||||
0xdc, 0x9a, 0xa3, 0x48, 0xd3, 0xf5, 0x72, 0xd5, 0x43, 0xd8, 0x19, 0xcc
|
||||
}
|
||||
};
|
||||
|
||||
static UINT16 *sharedprotram;
|
||||
|
||||
static UINT32 kb_regs[0x100];
|
||||
static UINT16 kb_prot_hold;
|
||||
static UINT16 kb_prot_hilo;
|
||||
static UINT32 kb_ptr;
|
||||
static UINT8 kb_region;
|
||||
static UINT8 kb_cmd;
|
||||
static UINT8 kb_reg;
|
||||
static UINT8 kb_swap;
|
||||
static UINT8 kb_cmd3;
|
||||
static UINT8 olds_bs;
|
||||
static UINT32 kb_prot_hilo_select;
|
||||
static UINT32 kb_game_id;
|
||||
|
||||
static void IGS022_do_dma(UINT16 src, UINT16 dst, UINT16 size, UINT16 mode)
|
||||
{
|
||||
UINT16 param = mode >> 8;
|
||||
|
||||
bprintf (0, _T("src: %4.4x, dst: %4.4x, size: %4.4x, mode: %4.4x\n"), src,dst,size,mode);
|
||||
|
||||
mode &= 0x7; // what are the other bits?
|
||||
|
||||
if ((mode == 0) || (mode == 1) || (mode == 2) || (mode == 3) || (mode == 4))
|
||||
{
|
||||
UINT16 *PROTROM = (UINT16*)PGMProtROM;
|
||||
for (INT32 x = 0; x < size; x++)
|
||||
{
|
||||
UINT16 dat2 = BURN_ENDIAN_SWAP_INT16(PROTROM[src + x]);
|
||||
|
||||
UINT8 extraoffset = param&0xff;
|
||||
UINT8* dectable = PGMProtROM;
|
||||
UINT8 taboff = ((x*2)+extraoffset) & 0xff;
|
||||
UINT16 extraxor = ((dectable[taboff+0]) << 8) | (dectable[taboff+1] << 0);
|
||||
|
||||
dat2 = ((dat2 & 0x00ff)<<8) | ((dat2 & 0xff00)>>8);
|
||||
|
||||
if (mode==4)
|
||||
{
|
||||
extraxor = 0;
|
||||
if ((x & 0x003) == 0x000) extraxor |= 0x0049; // 'I'
|
||||
if ((x & 0x003) == 0x001) extraxor |= 0x0047; // 'G'
|
||||
if ((x & 0x003) == 0x002) extraxor |= 0x0053; // 'S'
|
||||
if ((x & 0x003) == 0x003) extraxor |= 0x0020; // ' '
|
||||
if ((x & 0x300) == 0x000) extraxor |= 0x4900; // 'I'
|
||||
if ((x & 0x300) == 0x100) extraxor |= 0x4700; // 'G'
|
||||
if ((x & 0x300) == 0x200) extraxor |= 0x5300; // 'S'
|
||||
if ((x & 0x300) == 0x300) extraxor |= 0x2000; // ' '
|
||||
|
||||
// extraxor = (extraxor << 8) | (extraxor >> 8); //
|
||||
}
|
||||
|
||||
// mode==0 plain
|
||||
if (mode==3) dat2 ^= extraxor;
|
||||
if (mode==2) dat2 += extraxor;
|
||||
if (mode==1) dat2 -= extraxor;
|
||||
|
||||
if (mode==4)
|
||||
{
|
||||
dat2 -= extraxor;
|
||||
}
|
||||
|
||||
sharedprotram[dst + x] = BURN_ENDIAN_SWAP_INT16(dat2);
|
||||
}
|
||||
}
|
||||
else if (mode == 5)
|
||||
{
|
||||
UINT16 *PROTROM = (UINT16*)PGMProtROM;
|
||||
|
||||
for (INT32 x = 0; x < size; x++)
|
||||
{
|
||||
UINT16 dat2 = BURN_ENDIAN_SWAP_INT16(PROTROM[src + x]);
|
||||
|
||||
sharedprotram[dst + x] = dat2;
|
||||
}
|
||||
}
|
||||
else if (mode == 6)
|
||||
{
|
||||
UINT16 *PROTROM = (UINT16*)PGMProtROM;
|
||||
for (INT32 x = 0; x < size; x++)
|
||||
{
|
||||
UINT16 dat2 = PROTROM[src + x];
|
||||
|
||||
dat2 = ((dat2 & 0xf000) >> 12)|
|
||||
((dat2 & 0x0f00) >> 4)|
|
||||
((dat2 & 0x00f0) << 4)|
|
||||
((dat2 & 0x000f) << 12);
|
||||
|
||||
sharedprotram[dst + x] = dat2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void IGS022_reset()
|
||||
{
|
||||
INT32 i;
|
||||
UINT16 *PROTROM = (UINT16*)PGMProtROM;
|
||||
UINT16 tmp;
|
||||
|
||||
// fill ram with A5 patern
|
||||
for (i = 0; i < 0x4000/2; i++)
|
||||
sharedprotram[i] = BURN_ENDIAN_SWAP_INT16(0xa55a);
|
||||
|
||||
// the auto-dma
|
||||
UINT16 src = BURN_ENDIAN_SWAP_INT16(PROTROM[0x100 / 2]);
|
||||
UINT32 dst = BURN_ENDIAN_SWAP_INT16(PROTROM[0x102 / 2]);
|
||||
UINT16 size = BURN_ENDIAN_SWAP_INT16(PROTROM[0x104/ 2]);
|
||||
UINT16 mode = BURN_ENDIAN_SWAP_INT16(PROTROM[0x106 / 2]);
|
||||
|
||||
src = ((src & 0xff00) >> 8) | ((src & 0x00ff) << 8);
|
||||
dst = ((dst & 0xff00) >> 8) | ((dst & 0x00ff) << 8);
|
||||
size = ((size & 0xff00) >> 8) | ((size & 0x00ff) << 8);
|
||||
mode &= 0xff;
|
||||
|
||||
src >>= 1;
|
||||
|
||||
IGS022_do_dma(src,dst,size,mode);
|
||||
|
||||
// there is also a version ID? (or is it some kind of checksum) that is stored in the data rom, and gets copied..
|
||||
// Dragon World 3 checks it
|
||||
tmp = BURN_ENDIAN_SWAP_INT16(PROTROM[0x114/2]);
|
||||
tmp = ((tmp & 0xff00) >> 8) | ((tmp & 0x00ff) << 8);
|
||||
sharedprotram[0x2a2/2] = BURN_ENDIAN_SWAP_INT16(tmp);
|
||||
}
|
||||
|
||||
static void IGS022_handle_command()
|
||||
{
|
||||
UINT16 cmd = sharedprotram[0x200/2];
|
||||
|
||||
if (cmd == 0x6d) // Store values to asic ram
|
||||
{
|
||||
UINT32 p1 = (sharedprotram[0x298/2] << 16) | sharedprotram[0x29a/2];
|
||||
UINT32 p2 = (sharedprotram[0x29c/2] << 16) | sharedprotram[0x29e/2];
|
||||
|
||||
if ((p2 & 0xffff) == 0x9) // Set value
|
||||
{
|
||||
INT32 reg = (p2 >> 16) & 0xffff;
|
||||
|
||||
if (reg & 0x300) { // 300?? killbld expects 0x200, drgw3 expects 0x100?
|
||||
kb_regs[reg & 0xff] = p1;
|
||||
}
|
||||
}
|
||||
|
||||
if ((p2 & 0xffff) == 0x6) // Add value
|
||||
{
|
||||
INT32 src1 = (p1 >> 16) & 0xff;
|
||||
INT32 src2 = (p1 >> 0) & 0xff;
|
||||
INT32 dst = (p2 >> 16) & 0xff;
|
||||
|
||||
kb_regs[dst] = kb_regs[src2] - kb_regs[src1];
|
||||
}
|
||||
|
||||
if ((p2 & 0xffff) == 0x1) // Add Imm?
|
||||
{
|
||||
INT32 reg = (p2 >> 16) & 0xff;
|
||||
INT32 imm = (p1 >> 0) & 0xffff;
|
||||
|
||||
kb_regs[reg] += imm;
|
||||
}
|
||||
|
||||
if ((p2 & 0xffff) == 0xa) // Get value
|
||||
{
|
||||
INT32 reg = (p1 >> 16) & 0xFF;
|
||||
|
||||
sharedprotram[0x29c/2] = (kb_regs[reg] >> 16) & 0xffff;
|
||||
sharedprotram[0x29e/2] = kb_regs[reg] & 0xffff;
|
||||
}
|
||||
|
||||
sharedprotram[0x202 / 2] = 0x7c; // this mode complete?
|
||||
}
|
||||
|
||||
// Is this actually what this is suppose to do? Complete guess.
|
||||
if (cmd == 0x12) // copy??
|
||||
{
|
||||
sharedprotram[0x28c / 2] = sharedprotram[0x288 / 2];
|
||||
sharedprotram[0x28e / 2] = sharedprotram[0x28a / 2];
|
||||
|
||||
sharedprotram[0x202 / 2] = 0x23; // this mode complete?
|
||||
}
|
||||
|
||||
// what do these do? write the completion byte for now...
|
||||
if (cmd == 0x45) sharedprotram[0x202 / 2] = 0x56;
|
||||
if (cmd == 0x5a) sharedprotram[0x202 / 2] = 0x4b;
|
||||
if (cmd == 0x2d) sharedprotram[0x202 / 2] = 0x3c;
|
||||
|
||||
if (cmd == 0x4f) // memcpy with encryption / scrambling
|
||||
{
|
||||
UINT16 src = sharedprotram[0x290 / 2] >> 1;
|
||||
UINT32 dst = sharedprotram[0x292 / 2];
|
||||
UINT16 size = sharedprotram[0x294 / 2];
|
||||
UINT16 mode = sharedprotram[0x296 / 2];
|
||||
|
||||
IGS022_do_dma(src,dst,size,mode);
|
||||
|
||||
sharedprotram[0x202 / 2] = 0x5e; // this mode complete?
|
||||
}
|
||||
}
|
||||
|
||||
static UINT32 olds_prot_addr(UINT16 addr)
|
||||
{
|
||||
switch (addr & 0xff)
|
||||
{
|
||||
case 0x0:
|
||||
case 0x5:
|
||||
case 0xa: return 0x402a00 + ((addr >> 8) << 2);
|
||||
case 0x2:
|
||||
case 0x8: return 0x402e00 + ((addr >> 8) << 2);
|
||||
case 0x1: return 0x40307e;
|
||||
case 0x3: return 0x403090;
|
||||
case 0x4: return 0x40309a;
|
||||
case 0x6: return 0x4030a4;
|
||||
case 0x7: return 0x403000;
|
||||
case 0x9: return 0x40306e;
|
||||
case 0xb: return 0x403044;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static UINT32 olds_read_reg(UINT16 addr)
|
||||
{
|
||||
UINT32 protaddr = (olds_prot_addr(addr) - 0x400000) / 2;
|
||||
return sharedprotram[protaddr] << 16 | sharedprotram[protaddr + 1];
|
||||
}
|
||||
|
||||
static void olds_write_reg( UINT16 addr, UINT32 val )
|
||||
{
|
||||
sharedprotram[((olds_prot_addr(addr) - 0x400000) / 2) + 0] = val >> 16;
|
||||
sharedprotram[((olds_prot_addr(addr) - 0x400000) / 2) + 1] = val & 0xffff;
|
||||
}
|
||||
|
||||
static void IGS028_do_dma(UINT16 src, UINT16 dst, UINT16 size, UINT16 mode)
|
||||
{
|
||||
UINT16 param = mode >> 8;
|
||||
UINT16 *PROTROM = (UINT16*)(PGMUSER0 + 0x10000);
|
||||
|
||||
mode &= 0x0f;
|
||||
|
||||
switch (mode & 0x7)
|
||||
{
|
||||
case 0x00: // -= encryption
|
||||
case 0x01: // swap nibbles
|
||||
case 0x02: // ^= encryption
|
||||
case 0x03: // unused?
|
||||
case 0x04: // unused?
|
||||
case 0x05: // swap bytes
|
||||
case 0x06: // += encryption (correct?)
|
||||
case 0x07: // unused?
|
||||
{
|
||||
UINT8 extraoffset = param & 0xff;
|
||||
UINT8 *dectable = (UINT8 *)(PGMProtROM + (0x100 / 2));
|
||||
|
||||
for (INT32 x = 0; x < size; x++)
|
||||
{
|
||||
UINT16 dat2 = PROTROM[src + x];
|
||||
|
||||
int taboff = ((x*2)+extraoffset) & 0xff; // must allow for overflow in instances of odd offsets
|
||||
unsigned short extraxor = ((dectable[taboff + 0]) << 0) | (dectable[taboff + 1] << 8);
|
||||
|
||||
if (mode==0) dat2 -= extraxor;
|
||||
else if (mode==1) dat2 = ((dat2 & 0xf0f0) >> 4)|((dat2 & 0x0f0f) << 4);
|
||||
else if (mode==2) dat2 ^= extraxor;
|
||||
else if (mode==5) dat2 = ((dat2 &0x00ff) << 8) | ((dat2 &0xff00) >> 8);
|
||||
else if (mode==6) dat2 += extraxor;
|
||||
else
|
||||
{
|
||||
UINT16 extraxor2 = 0;
|
||||
if ((x & 0x003) == 0x000) extraxor2 |= 0x0049; // 'I'
|
||||
if ((x & 0x003) == 0x001) extraxor2 |= 0x0047; // 'G'
|
||||
if ((x & 0x003) == 0x002) extraxor2 |= 0x0053; // 'S'
|
||||
if ((x & 0x003) == 0x003) extraxor2 |= 0x0020; // ' '
|
||||
if ((x & 0x300) == 0x000) extraxor2 |= 0x4900; // 'I'
|
||||
if ((x & 0x300) == 0x100) extraxor2 |= 0x4700; // 'G'
|
||||
if ((x & 0x300) == 0x200) extraxor2 |= 0x5300; // 'S'
|
||||
if ((x & 0x300) == 0x300) extraxor2 |= 0x2000; // ' '
|
||||
|
||||
dat2 = 0x4e75; // hack
|
||||
}
|
||||
|
||||
sharedprotram[dst + x] = dat2;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void IGS028_handle()
|
||||
{
|
||||
UINT16 cmd = sharedprotram[0x3026 / 2];
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
case 0x12:
|
||||
{
|
||||
UINT16 mode = sharedprotram[0x303e / 2]; // ?
|
||||
UINT16 src = sharedprotram[0x306a / 2] >> 1; // ?
|
||||
UINT16 dst = sharedprotram[0x3084 / 2] & 0x1fff;
|
||||
UINT16 size = sharedprotram[0x30a2 / 2] & 0x1fff;
|
||||
|
||||
IGS028_do_dma(src, dst, size, mode);
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x64: // incomplete?
|
||||
{
|
||||
UINT16 p1 = sharedprotram[0x3050 / 2];
|
||||
UINT16 p2 = sharedprotram[0x3082 / 2];
|
||||
UINT16 p3 = sharedprotram[0x3054 / 2];
|
||||
UINT16 p4 = sharedprotram[0x3088 / 2];
|
||||
|
||||
if (p2 == 0x02)
|
||||
olds_write_reg(p1, olds_read_reg(p1) + 0x10000);
|
||||
|
||||
switch (p4)
|
||||
{
|
||||
case 0xd:
|
||||
olds_write_reg(p1,olds_read_reg(p3));
|
||||
break;
|
||||
case 0x0:
|
||||
olds_write_reg(p3,(olds_read_reg(p2))^(olds_read_reg(p1)));
|
||||
break;
|
||||
case 0xe:
|
||||
olds_write_reg(p3,olds_read_reg(p3)+0x10000);
|
||||
break;
|
||||
case 0x2:
|
||||
olds_write_reg(p1,(olds_read_reg(p2))+(olds_read_reg(p3)));
|
||||
break;
|
||||
case 0x6:
|
||||
olds_write_reg(p3,(olds_read_reg(p2))&(olds_read_reg(p1)));
|
||||
break;
|
||||
case 0x1:
|
||||
olds_write_reg(p2,olds_read_reg(p1)+0x10000);
|
||||
break;
|
||||
case 0x7:
|
||||
olds_write_reg(p3,olds_read_reg(p1));
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void killbld_protection_calculate_hold(INT32 y, INT32 z)
|
||||
{
|
||||
UINT16 old = kb_prot_hold;
|
||||
|
||||
kb_prot_hold = ((old << 1) | (old >> 15));
|
||||
|
||||
kb_prot_hold ^= 0x2bad;
|
||||
kb_prot_hold ^= BIT(z, y);
|
||||
kb_prot_hold ^= BIT(old, 7) << 0;
|
||||
kb_prot_hold ^= BIT(~old, 13) << 4;
|
||||
kb_prot_hold ^= BIT(old, 3) << 11;
|
||||
|
||||
kb_prot_hold ^= (kb_prot_hilo & ~0x0408) << 1;
|
||||
}
|
||||
|
||||
static void killbld_protection_calculate_hilo()
|
||||
{
|
||||
kb_prot_hilo_select++;
|
||||
|
||||
if (kb_prot_hilo_select > 0xeb) {
|
||||
kb_prot_hilo_select = 0;
|
||||
}
|
||||
|
||||
UINT8 source = source_data[kb_region][kb_prot_hilo_select];
|
||||
|
||||
if (kb_prot_hilo_select & 1)
|
||||
{
|
||||
kb_prot_hilo = (kb_prot_hilo & 0x00ff) | (source << 8);
|
||||
}
|
||||
else
|
||||
{
|
||||
kb_prot_hilo = (kb_prot_hilo & 0xff00) | (source << 0);
|
||||
}
|
||||
}
|
||||
|
||||
static void __fastcall killbld_igs025_prot_write(UINT32 address, UINT16 data)
|
||||
{
|
||||
bprintf (0, _T("PRTW: %5.5x %4.4x\n"), address, data);
|
||||
|
||||
if ((address & 0xf0000f) == 0xd00000) {
|
||||
kb_cmd = data;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (kb_cmd)
|
||||
{
|
||||
case 0x00:
|
||||
kb_reg = data;
|
||||
break;
|
||||
|
||||
case 0x01: // drgw3
|
||||
{
|
||||
if (data == 0x0002) { // Execute command
|
||||
IGS022_handle_command();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x02: // killbld
|
||||
{
|
||||
if (data == 0x0001) { // Execute command
|
||||
IGS022_handle_command();
|
||||
kb_reg++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x03:
|
||||
kb_swap = data;
|
||||
break;
|
||||
|
||||
case 0x04:
|
||||
// kb_ptr = data; // Suspect. Not good for drgw3
|
||||
break;
|
||||
|
||||
case 0x20:
|
||||
case 0x21:
|
||||
case 0x22:
|
||||
case 0x23:
|
||||
case 0x24:
|
||||
case 0x25:
|
||||
case 0x26:
|
||||
case 0x27:
|
||||
kb_ptr++;
|
||||
killbld_protection_calculate_hold(kb_cmd & 0x0f, data & 0xff);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void __fastcall olds_igs025_prot_write(UINT32 address, UINT16 data)
|
||||
{
|
||||
bprintf (0, _T("PRTW: %5.5x %4.4x\n"), address, data);
|
||||
|
||||
if (address == 0xdcb400) {
|
||||
kb_cmd = data;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (kb_cmd)
|
||||
{
|
||||
case 0x00:
|
||||
kb_reg = data;
|
||||
break;
|
||||
|
||||
case 0x02:
|
||||
olds_bs = ((data & 0x03) << 6) | ((data & 0x04) << 3) | ((data & 0x08) << 1);
|
||||
break;
|
||||
|
||||
case 0x03:
|
||||
{
|
||||
IGS028_handle();
|
||||
kb_cmd3 = ((data >> 4) + 1) & 0x3;
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x04:
|
||||
kb_ptr = data;
|
||||
break;
|
||||
|
||||
case 0x20:
|
||||
case 0x21:
|
||||
case 0x22:
|
||||
case 0x23:
|
||||
case 0x24:
|
||||
case 0x25:
|
||||
case 0x26:
|
||||
case 0x27:
|
||||
kb_ptr++;
|
||||
killbld_protection_calculate_hold(kb_cmd & 0x0f, data & 0xff);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void __fastcall drgw2_igs025_prot_write(UINT32 address, UINT16 data)
|
||||
{
|
||||
bprintf (0, _T("PRTW: %5.5x %4.4x\n"), address, data);
|
||||
|
||||
if (address == 0xd80000) {
|
||||
kb_cmd = data;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (kb_cmd)
|
||||
{
|
||||
case 0x20:
|
||||
case 0x21:
|
||||
case 0x22:
|
||||
case 0x23:
|
||||
case 0x24:
|
||||
case 0x25:
|
||||
case 0x26:
|
||||
case 0x27:
|
||||
kb_ptr++;
|
||||
killbld_protection_calculate_hold(kb_cmd & 0x0f, data & 0xff);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static UINT16 __fastcall igs025_prot_read(UINT32 address)
|
||||
{
|
||||
bprintf (0, _T("PRTR: %5.5x\n"), address);
|
||||
|
||||
switch (kb_cmd)
|
||||
{
|
||||
case 0x00:
|
||||
return BITSWAP08((kb_swap + 1) & 0x7f, 0, 1, 2, 3, 4, 5, 6, 7); // drgw3
|
||||
|
||||
case 0x01:
|
||||
return kb_reg & 0x7f;
|
||||
|
||||
case 0x02:
|
||||
return olds_bs | 0x80;
|
||||
|
||||
case 0x03:
|
||||
return kb_cmd3;
|
||||
|
||||
case 0x05:
|
||||
{
|
||||
switch (kb_ptr)
|
||||
{
|
||||
case 1:
|
||||
return 0x3f00 | ((kb_game_id >> 0) & 0xff);
|
||||
|
||||
case 2:
|
||||
return 0x3f00 | ((kb_game_id >> 8) & 0xff);
|
||||
|
||||
case 3:
|
||||
return 0x3f00 | ((kb_game_id >> 16) & 0xff);
|
||||
|
||||
case 4:
|
||||
return 0x3f00 | ((kb_game_id >> 24) & 0xff);
|
||||
|
||||
default: // >= 5
|
||||
return 0x3f00 | BITSWAP08(kb_prot_hold, 5, 2, 9, 7, 10, 13, 12, 15);
|
||||
}
|
||||
}
|
||||
|
||||
case 0x40:
|
||||
killbld_protection_calculate_hilo();
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void common_reset()
|
||||
{
|
||||
kb_region = PgmInput[7];
|
||||
|
||||
kb_prot_hold = 0;
|
||||
kb_prot_hilo = 0;
|
||||
kb_prot_hilo_select = 0;
|
||||
kb_cmd = 0;
|
||||
kb_reg = 0;
|
||||
kb_ptr = 0;
|
||||
kb_swap = 0;
|
||||
olds_bs = 0;
|
||||
kb_cmd3 = 0;
|
||||
|
||||
memset(kb_regs, 0, 0x100 * sizeof(UINT32));
|
||||
}
|
||||
|
||||
static void drgw2_reset()
|
||||
{
|
||||
common_reset();
|
||||
}
|
||||
|
||||
static void killbld_reset()
|
||||
{
|
||||
common_reset();
|
||||
|
||||
kb_game_id = 0x89911400 | kb_region;
|
||||
|
||||
IGS022_reset();
|
||||
}
|
||||
|
||||
static void drgw3_reset()
|
||||
{
|
||||
common_reset();
|
||||
|
||||
kb_game_id = 0x00060000 | kb_region;
|
||||
|
||||
IGS022_reset();
|
||||
}
|
||||
|
||||
static INT32 CommonScan(INT32 nAction, INT32 *)
|
||||
{
|
||||
struct BurnArea ba;
|
||||
|
||||
if (nAction & ACB_MEMORY_RAM) {
|
||||
ba.Data = PGMUSER0;
|
||||
ba.nLen = 0x0004000;
|
||||
ba.nAddress = 0x400000;
|
||||
ba.szName = "ProtRAM";
|
||||
BurnAcb(&ba);
|
||||
|
||||
ba.Data = (UINT8*)kb_regs;
|
||||
ba.nLen = 0x00100 * sizeof(INT32);
|
||||
ba.nAddress = 0xfffffc00;
|
||||
ba.szName = "Protection Registers";
|
||||
BurnAcb(&ba);
|
||||
}
|
||||
|
||||
if (nAction & ACB_DRIVER_DATA) {
|
||||
SCAN_VAR(kb_prot_hold);
|
||||
SCAN_VAR(kb_prot_hilo);
|
||||
SCAN_VAR(kb_ptr);
|
||||
SCAN_VAR(kb_region);
|
||||
SCAN_VAR(kb_cmd);
|
||||
SCAN_VAR(kb_reg);
|
||||
SCAN_VAR(kb_swap);
|
||||
SCAN_VAR(kb_cmd3);
|
||||
SCAN_VAR(olds_bs);
|
||||
SCAN_VAR(kb_prot_hilo_select);
|
||||
SCAN_VAR(kb_game_id);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void olds_reset()
|
||||
{
|
||||
common_reset();
|
||||
|
||||
if (strcmp(BurnDrvGetTextA(DRV_NAME), "drgw2") == 0) kb_region = 6;
|
||||
if (strcmp(BurnDrvGetTextA(DRV_NAME), "dw2v100x") == 0) kb_region = 6;
|
||||
if (strcmp(BurnDrvGetTextA(DRV_NAME), "drgw2c") == 0) kb_region = 5;
|
||||
if (strcmp(BurnDrvGetTextA(DRV_NAME), "drgw2j") == 0) kb_region = 1;
|
||||
|
||||
kb_game_id = 0x00900000 | kb_region;
|
||||
|
||||
sharedprotram[0x1000/2] = 0x4749; // 'IGS.28'
|
||||
sharedprotram[0x1002/2] = 0x2E53;
|
||||
sharedprotram[0x1004/2] = 0x3832;
|
||||
|
||||
sharedprotram[0x3064/2] = 0xB315; // crc?
|
||||
}
|
||||
|
||||
void install_protection_asic25_asic22_killbld()
|
||||
{
|
||||
BurnByteswap(PGMProtROM, 0x10000);
|
||||
|
||||
pPgmScanCallback = CommonScan;
|
||||
pPgmResetCallback = killbld_reset;
|
||||
|
||||
sharedprotram = (UINT16*)PGMUSER0;
|
||||
|
||||
SekOpen(0);
|
||||
SekMapMemory(PGMUSER0, 0x300000, 0x303fff, SM_RAM);
|
||||
SekMapHandler(4, 0xd40000, 0xd40003, SM_READ | SM_WRITE);
|
||||
SekSetReadWordHandler(4, igs025_prot_read);
|
||||
SekSetWriteWordHandler(4, killbld_igs025_prot_write);
|
||||
SekClose();
|
||||
}
|
||||
|
||||
void install_protection_asic25_asic22_drgw3()
|
||||
{
|
||||
BurnByteswap(PGMProtROM, 0x10000);
|
||||
|
||||
pPgmScanCallback = CommonScan;
|
||||
pPgmResetCallback = drgw3_reset;
|
||||
|
||||
sharedprotram = (UINT16*)PGMUSER0;
|
||||
|
||||
SekOpen(0);
|
||||
SekMapMemory(PGMUSER0, 0x300000, 0x303fff, SM_RAM);
|
||||
SekMapHandler(4, 0xda5610, 0xda5613, SM_READ | SM_WRITE);
|
||||
SekSetReadWordHandler(4, igs025_prot_read);
|
||||
SekSetWriteWordHandler(4, killbld_igs025_prot_write);
|
||||
SekClose();
|
||||
}
|
||||
|
||||
void install_protection_asic25_asic12_dw2()
|
||||
{
|
||||
pPgmScanCallback = CommonScan;
|
||||
pPgmResetCallback = drgw2_reset;
|
||||
|
||||
SekOpen(0);
|
||||
SekMapHandler(4, 0xd80000, 0xd80003, SM_READ | SM_WRITE);
|
||||
SekSetReadWordHandler(4, igs025_prot_read);
|
||||
SekSetWriteWordHandler(4, drgw2_igs025_prot_write);
|
||||
SekClose();
|
||||
}
|
||||
|
||||
void install_protection_asic25_asic28_olds()
|
||||
{
|
||||
pPgmScanCallback = CommonScan;
|
||||
pPgmResetCallback = olds_reset;
|
||||
|
||||
sharedprotram = (UINT16*)PGMUSER0;
|
||||
|
||||
SekOpen(0);
|
||||
SekMapMemory(PGMUSER0, 0x400000, 0x403fff, SM_RAM);
|
||||
SekMapHandler(4, 0xdcb400, 0xdcb403, SM_READ | SM_WRITE);
|
||||
SekSetReadWordHandler(4, igs025_prot_read);
|
||||
SekSetWriteWordHandler(4, olds_igs025_prot_write);
|
||||
SekClose();
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,156 @@
|
|||
#include "pgm.h"
|
||||
|
||||
/*
|
||||
IGS Asic27a (type 2) proper emulation
|
||||
|
||||
Used by:
|
||||
Martial Masters
|
||||
Bee Storm - DoDonPachi II
|
||||
Dragon World 2001
|
||||
Dragon World Pretty Chance
|
||||
Knights of Valour 2
|
||||
Knights of Valour 2 Plus - Nine Dragons
|
||||
*/
|
||||
|
||||
static UINT8 asic27a_to_arm = 0;
|
||||
static UINT8 asic27a_to_68k = 0;
|
||||
|
||||
static inline void pgm_cpu_sync()
|
||||
{
|
||||
INT32 nCycles = SekTotalCycles() - Arm7TotalCycles();
|
||||
|
||||
if (nCycles > 100) {
|
||||
Arm7Run(nCycles);
|
||||
}
|
||||
}
|
||||
|
||||
static void __fastcall asic27a_write_byte(UINT32 address, UINT8 data)
|
||||
{
|
||||
if ((address & 0xfffffe) == 0xd10000) { // ddp2
|
||||
pgm_cpu_sync();
|
||||
asic27a_to_arm = data;
|
||||
Arm7SetIRQLine(ARM7_FIRQ_LINE, ARM7_IRQSTATUS_ACK);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void __fastcall asic27a_write_word(UINT32 address, UINT16 data)
|
||||
{
|
||||
if ((address & 0xfffffe) == 0xd10000) {
|
||||
pgm_cpu_sync();
|
||||
asic27a_to_arm = data & 0xff;
|
||||
Arm7SetIRQLine(ARM7_FIRQ_LINE, ARM7_IRQSTATUS_ACK);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static UINT8 __fastcall asic27a_read_byte(UINT32 address)
|
||||
{
|
||||
if ((address & 0xfffffc) == 0xd10000) {
|
||||
pgm_cpu_sync();
|
||||
return asic27a_to_68k;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static UINT16 __fastcall asic27a_read_word(UINT32 address)
|
||||
{
|
||||
if ((address & 0xfffffc) == 0xd10000) {
|
||||
pgm_cpu_sync();
|
||||
return asic27a_to_68k;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void asic27a_arm7_write_byte(UINT32 address, UINT8 data)
|
||||
{
|
||||
switch (address)
|
||||
{
|
||||
case 0x38000000:
|
||||
asic27a_to_68k = data;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static UINT8 asic27a_arm7_read_byte(UINT32 address)
|
||||
{
|
||||
switch (address)
|
||||
{
|
||||
case 0x38000000:
|
||||
Arm7SetIRQLine(ARM7_FIRQ_LINE, ARM7_IRQSTATUS_NONE);
|
||||
return asic27a_to_arm;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static INT32 asic27aScan(INT32 nAction,INT32 *)
|
||||
{
|
||||
struct BurnArea ba;
|
||||
|
||||
if (nAction & ACB_MEMORY_RAM) {
|
||||
ba.Data = PGMARMShareRAM;
|
||||
ba.nLen = 0x0010000;
|
||||
ba.nAddress = 0xd00000;
|
||||
ba.szName = "ARM SHARE RAM";
|
||||
BurnAcb(&ba);
|
||||
|
||||
ba.Data = PGMARMRAM0;
|
||||
ba.nLen = 0x0000400;
|
||||
ba.nAddress = 0;
|
||||
ba.szName = "ARM RAM 0";
|
||||
BurnAcb(&ba);
|
||||
|
||||
ba.Data = PGMARMRAM1;
|
||||
ba.nLen = 0x0010000;
|
||||
ba.nAddress = 0;
|
||||
ba.szName = "ARM RAM 1";
|
||||
BurnAcb(&ba);
|
||||
|
||||
ba.Data = PGMARMRAM2;
|
||||
ba.nLen = 0x0000400;
|
||||
ba.nAddress = 0;
|
||||
ba.szName = "ARM RAM 2";
|
||||
BurnAcb(&ba);
|
||||
}
|
||||
|
||||
if (nAction & ACB_DRIVER_DATA) {
|
||||
Arm7Scan(nAction);
|
||||
|
||||
SCAN_VAR(asic27a_to_arm);
|
||||
SCAN_VAR(asic27a_to_68k);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void install_protection_asic27a_martmast()
|
||||
{
|
||||
nPGMArm7Type = 2;
|
||||
pPgmScanCallback = asic27aScan;
|
||||
|
||||
SekOpen(0);
|
||||
|
||||
SekMapMemory(PGMARMShareRAM, 0xd00000, 0xd0ffff, SM_RAM);
|
||||
|
||||
SekMapHandler(4, 0xd10000, 0xd10003, SM_READ | SM_WRITE);
|
||||
SekSetReadWordHandler(4, asic27a_read_word);
|
||||
SekSetReadByteHandler(4, asic27a_read_byte);
|
||||
SekSetWriteWordHandler(4, asic27a_write_word);
|
||||
SekSetWriteByteHandler(4, asic27a_write_byte);
|
||||
SekClose();
|
||||
|
||||
Arm7Init(0);
|
||||
Arm7Open(0);
|
||||
Arm7MapMemory(PGMARMROM, 0x00000000, 0x00003fff, ARM7_ROM);
|
||||
Arm7MapMemory(PGMUSER0, 0x08000000, 0x08000000+(nPGMExternalARMLen-1), ARM7_ROM);
|
||||
Arm7MapMemory(PGMARMRAM0, 0x10000000, 0x100003ff, ARM7_RAM);
|
||||
Arm7MapMemory(PGMARMRAM1, 0x18000000, 0x1800ffff, ARM7_RAM);
|
||||
Arm7MapMemory(PGMARMShareRAM, 0x48000000, 0x4800ffff, ARM7_RAM);
|
||||
Arm7MapMemory(PGMARMRAM2, 0x50000000, 0x500003ff, ARM7_RAM);
|
||||
Arm7SetWriteByteHandler(asic27a_arm7_write_byte);
|
||||
Arm7SetReadByteHandler(asic27a_arm7_read_byte);
|
||||
Arm7Close();
|
||||
}
|
|
@ -0,0 +1,175 @@
|
|||
#include "pgm.h"
|
||||
|
||||
/*
|
||||
IGS Asic27a (type 3) proper emulation
|
||||
|
||||
Used by:
|
||||
Demon Front
|
||||
The Gladiator
|
||||
The Killing Blade Plus
|
||||
Spectral VS Generation
|
||||
Happy 6in1
|
||||
*/
|
||||
|
||||
static UINT8 svg_ram_sel = 0;
|
||||
static UINT8 *svg_ram[2];
|
||||
static UINT8 asic27a_68k_to_arm = 0;
|
||||
static UINT8 asic27a_arm_to_68k = 0;
|
||||
|
||||
static inline void pgm_cpu_sync()
|
||||
{
|
||||
INT32 nCycles = SekTotalCycles() - Arm7TotalCycles();
|
||||
|
||||
if (nCycles > 100) {
|
||||
Arm7Run(nCycles);
|
||||
}
|
||||
}
|
||||
|
||||
static void svg_set_ram_bank(INT32 data)
|
||||
{
|
||||
svg_ram_sel = data & 1;
|
||||
Arm7MapMemory(svg_ram[svg_ram_sel], 0x38000000, 0x3800ffff, ARM7_RAM);
|
||||
SekMapMemory(svg_ram[svg_ram_sel^1], 0x500000, 0x50ffff, SM_RAM);
|
||||
}
|
||||
|
||||
static void __fastcall svg_write_byte(UINT32 address, UINT8 data)
|
||||
{
|
||||
pgm_cpu_sync();
|
||||
|
||||
switch (address)
|
||||
{
|
||||
case 0x5c0000:
|
||||
Arm7SetIRQLine(ARM7_FIRQ_LINE, ARM7_IRQSTATUS_AUTO);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void __fastcall svg_write_word(UINT32 address, UINT16 data)
|
||||
{
|
||||
pgm_cpu_sync();
|
||||
|
||||
switch (address)
|
||||
{
|
||||
case 0x5c0300:
|
||||
asic27a_68k_to_arm = data; // byte
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static UINT16 __fastcall svg_read_word(UINT32 address)
|
||||
{
|
||||
switch (address)
|
||||
{
|
||||
case 0x5c0300:
|
||||
pgm_cpu_sync();
|
||||
return asic27a_arm_to_68k;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void svg_arm7_write_byte(UINT32 address, UINT8 data)
|
||||
{
|
||||
switch (address)
|
||||
{
|
||||
case 0x40000018:
|
||||
svg_set_ram_bank(data);
|
||||
return;
|
||||
|
||||
case 0x48000000:
|
||||
asic27a_arm_to_68k = data;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static UINT8 svg_arm7_read_byte(UINT32 address)
|
||||
{
|
||||
switch (address)
|
||||
{
|
||||
case 0x48000000:
|
||||
return asic27a_68k_to_arm;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static INT32 svg_asic27aScan(INT32 nAction,INT32 *)
|
||||
{
|
||||
struct BurnArea ba;
|
||||
|
||||
if (nAction & ACB_MEMORY_RAM) {
|
||||
ba.Data = PGMARMShareRAM;
|
||||
ba.nLen = 0x0020000;
|
||||
ba.nAddress = 0x400000;
|
||||
ba.szName = "ARM SHARE RAM #0 (address 500000)";
|
||||
BurnAcb(&ba);
|
||||
|
||||
ba.Data = PGMARMShareRAM2;
|
||||
ba.nLen = 0x0020000;
|
||||
ba.nAddress = 0x500000;
|
||||
ba.szName = "ARM SHARE RAM #1";
|
||||
BurnAcb(&ba);
|
||||
|
||||
ba.Data = PGMARMRAM0;
|
||||
ba.nLen = 0x0000400;
|
||||
ba.nAddress = 0;
|
||||
ba.szName = "ARM RAM 0";
|
||||
BurnAcb(&ba);
|
||||
|
||||
ba.Data = PGMARMRAM1;
|
||||
ba.nLen = 0x0040000;
|
||||
ba.nAddress = 0;
|
||||
ba.szName = "ARM RAM 1";
|
||||
BurnAcb(&ba);
|
||||
|
||||
ba.Data = PGMARMRAM2;
|
||||
ba.nLen = 0x0000400;
|
||||
ba.nAddress = 0;
|
||||
ba.szName = "ARM RAM 2";
|
||||
BurnAcb(&ba);
|
||||
}
|
||||
|
||||
if (nAction & ACB_DRIVER_DATA) {
|
||||
Arm7Scan(nAction);
|
||||
SCAN_VAR(asic27a_68k_to_arm);
|
||||
SCAN_VAR(asic27a_arm_to_68k);
|
||||
|
||||
SCAN_VAR(svg_ram_sel);
|
||||
}
|
||||
|
||||
if (nAction & ACB_WRITE) {
|
||||
svg_set_ram_bank(svg_ram_sel);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void install_protection_asic27a_svg()
|
||||
{
|
||||
nPGMArm7Type = 3;
|
||||
|
||||
pPgmScanCallback = svg_asic27aScan;
|
||||
|
||||
svg_ram_sel = 0;
|
||||
svg_ram[0] = PGMARMShareRAM;
|
||||
svg_ram[1] = PGMARMShareRAM2;
|
||||
|
||||
SekOpen(0);
|
||||
SekMapHandler(5, 0x500000, 0x5fffff, SM_RAM);
|
||||
SekSetReadWordHandler(5, svg_read_word);
|
||||
SekSetWriteWordHandler(5, svg_write_word);
|
||||
SekSetWriteByteHandler(5, svg_write_byte);
|
||||
SekClose();
|
||||
|
||||
Arm7Init(0);
|
||||
Arm7Open(0);
|
||||
Arm7MapMemory(PGMARMROM, 0x00000000, 0x00003fff, ARM7_ROM);
|
||||
Arm7MapMemory(PGMUSER0, 0x08000000, 0x08000000 | (nPGMExternalARMLen-1), ARM7_ROM);
|
||||
Arm7MapMemory(PGMARMRAM0, 0x10000000, 0x100003ff, ARM7_RAM);
|
||||
Arm7MapMemory(PGMARMRAM1, 0x18000000, 0x1803ffff, ARM7_RAM);
|
||||
Arm7MapMemory(svg_ram[1], 0x38000000, 0x3800ffff, ARM7_RAM);
|
||||
Arm7MapMemory(PGMARMRAM2, 0x50000000, 0x500003ff, ARM7_RAM);
|
||||
Arm7SetWriteByteHandler(svg_arm7_write_byte);
|
||||
Arm7SetReadByteHandler(svg_arm7_read_byte);
|
||||
Arm7Close();
|
||||
}
|
|
@ -0,0 +1,172 @@
|
|||
#include "pgm.h"
|
||||
#include "bitswap.h"
|
||||
|
||||
/*
|
||||
IGS Asic3 emulation
|
||||
|
||||
Used by:
|
||||
Oriental Legends
|
||||
*/
|
||||
|
||||
static UINT8 asic3_latch[3];
|
||||
static UINT8 asic3_x;
|
||||
static UINT8 asic3_reg;
|
||||
static UINT16 asic3_hold;
|
||||
static UINT16 asic3_hilo;
|
||||
|
||||
static void asic3_compute_hold(INT32 y, INT32 z)
|
||||
{
|
||||
UINT16 old = asic3_hold;
|
||||
|
||||
asic3_hold = ((old << 1) | (old >> 15));
|
||||
asic3_hold ^= 0x2bad;
|
||||
asic3_hold ^= BIT(z, y);
|
||||
asic3_hold ^= BIT(asic3_x, 2) << 10;
|
||||
asic3_hold ^= BIT(old, 5);
|
||||
|
||||
static INT32 modes[8] = { 1, 1, 3, 2, 4, 4, 4, 4 };
|
||||
|
||||
switch (modes[PgmInput[7] & 7]) // The mode is dependent on the region
|
||||
{
|
||||
case 1:
|
||||
asic3_hold ^= BIT(old, 10) ^ BIT(old, 8) ^ (BIT(asic3_x, 0) << 1) ^ (BIT(asic3_x, 1) << 6) ^ (BIT(asic3_x, 3) << 14);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
asic3_hold ^= BIT(old, 7) ^ BIT(old, 6) ^ (BIT(asic3_x, 0) << 4) ^ (BIT(asic3_x, 1) << 6) ^ (BIT(asic3_x, 3) << 12);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
asic3_hold ^= BIT(old, 10) ^ BIT(old, 8) ^ (BIT(asic3_x, 0) << 4) ^ (BIT(asic3_x, 1) << 6) ^ (BIT(asic3_x, 3) << 12);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
asic3_hold ^= BIT(old, 7) ^ BIT(old, 6) ^ (BIT(asic3_x, 0) << 3) ^ (BIT(asic3_x, 1) << 8) ^ (BIT(asic3_x, 3) << 14);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static UINT16 __fastcall asic3_read_word(UINT32 )
|
||||
{
|
||||
switch (asic3_reg)
|
||||
{
|
||||
case 0x00:
|
||||
return (asic3_latch[0] & 0xf7) | ((PgmInput[7] << 3) & 0x08);
|
||||
|
||||
case 0x01:
|
||||
return (asic3_latch[1]);
|
||||
|
||||
case 0x02:
|
||||
return (asic3_latch[2] & 0x7f) | ((PgmInput[7] << 6) & 0x80);
|
||||
|
||||
case 0x03:
|
||||
return BITSWAP08(asic3_hold, 5,2,9,7,10,13,12,15);
|
||||
|
||||
case 0x20: return 0x49;
|
||||
case 0x21: return 0x47;
|
||||
case 0x22: return 0x53;
|
||||
|
||||
case 0x24: return 0x41;
|
||||
case 0x25: return 0x41;
|
||||
case 0x26: return 0x7f;
|
||||
case 0x27: return 0x41;
|
||||
case 0x28: return 0x41;
|
||||
|
||||
case 0x2a: return 0x3e;
|
||||
case 0x2b: return 0x41;
|
||||
case 0x2c: return 0x49;
|
||||
case 0x2d: return 0xf9;
|
||||
case 0x2e: return 0x0a;
|
||||
|
||||
case 0x30: return 0x26;
|
||||
case 0x31: return 0x49;
|
||||
case 0x32: return 0x49;
|
||||
case 0x33: return 0x49;
|
||||
case 0x34: return 0x32;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __fastcall asic3_write_word(UINT32 address, UINT16 data)
|
||||
{
|
||||
if (address == 0xc04000) {
|
||||
asic3_reg = data;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (asic3_reg)
|
||||
{
|
||||
case 0x00:
|
||||
case 0x01:
|
||||
case 0x02:
|
||||
asic3_latch[asic3_reg] = data << 1;
|
||||
break;
|
||||
|
||||
case 0x40:
|
||||
asic3_hilo = (asic3_hilo << 8) | data;
|
||||
break;
|
||||
|
||||
case 0x48:
|
||||
{
|
||||
asic3_x = 0;
|
||||
if ((asic3_hilo & 0x0090) == 0) asic3_x |= 0x01;
|
||||
if ((asic3_hilo & 0x0006) == 0) asic3_x |= 0x02;
|
||||
if ((asic3_hilo & 0x9000) == 0) asic3_x |= 0x04;
|
||||
if ((asic3_hilo & 0x0a00) == 0) asic3_x |= 0x08;
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x80:
|
||||
case 0x81:
|
||||
case 0x82:
|
||||
case 0x83:
|
||||
case 0x84:
|
||||
case 0x85:
|
||||
case 0x86:
|
||||
case 0x87:
|
||||
asic3_compute_hold(asic3_reg & 0x07, data);
|
||||
break;
|
||||
|
||||
case 0xa0:
|
||||
asic3_hold = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void reset_asic3()
|
||||
{
|
||||
memset (asic3_latch, 0, 3 * sizeof(UINT8));
|
||||
|
||||
asic3_hold = 0;
|
||||
asic3_reg = 0;
|
||||
asic3_x = 0;
|
||||
asic3_hilo = 0;
|
||||
}
|
||||
|
||||
static INT32 asic3Scan(INT32 nAction, INT32 *)
|
||||
{
|
||||
if (nAction & ACB_DRIVER_DATA) {
|
||||
SCAN_VAR(asic3_reg);
|
||||
SCAN_VAR(asic3_latch[0]);
|
||||
SCAN_VAR(asic3_latch[1]);
|
||||
SCAN_VAR(asic3_latch[2]);
|
||||
SCAN_VAR(asic3_x);
|
||||
SCAN_VAR(asic3_hilo);
|
||||
SCAN_VAR(asic3_hold);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void install_protection_asic3_orlegend()
|
||||
{
|
||||
pPgmScanCallback = asic3Scan;
|
||||
pPgmResetCallback = reset_asic3;
|
||||
|
||||
SekOpen(0);
|
||||
SekMapHandler(4, 0xc04000, 0xc0400f, SM_READ | SM_WRITE);
|
||||
SekSetReadWordHandler(4, asic3_read_word);
|
||||
SekSetWriteWordHandler(4, asic3_write_word);
|
||||
SekClose();
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -35,7 +35,7 @@ static UINT8 *Mem = NULL, *MemEnd = NULL;
|
|||
static UINT8 *RamStart, *RamEnd;
|
||||
|
||||
UINT8 *PGM68KBIOS, *PGM68KROM, *PGMTileROM, *PGMTileROMExp, *PGMSPRColROM, *PGMSPRMaskROM, *PGMARMROM;
|
||||
UINT8 *PGMARMRAM0, *PGMUSER0, *PGMARMRAM1, *PGMARMRAM2, *PGMARMShareRAM, *PGMARMShareRAM2;
|
||||
UINT8 *PGMARMRAM0, *PGMUSER0, *PGMARMRAM1, *PGMARMRAM2, *PGMARMShareRAM, *PGMARMShareRAM2, *PGMProtROM;
|
||||
|
||||
UINT8 nPgmPalRecalc = 0;
|
||||
static UINT8 nPgmZ80Work = 0;
|
||||
|
@ -71,6 +71,8 @@ static INT32 pgmMemIndex()
|
|||
|
||||
PGMUSER0 = Next; Next += nPGMExternalARMLen;
|
||||
|
||||
PGMProtROM = PGMUSER0 + 0x10000; // Olds, Killbld, drgw3
|
||||
|
||||
if (BurnDrvGetHardwareCode() & HARDWARE_IGS_USE_ARM_CPU) {
|
||||
PGMARMROM = Next; Next += 0x0004000;
|
||||
}
|
||||
|
@ -220,6 +222,13 @@ static INT32 pgmGetRoms(bool bLoad)
|
|||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((ri.nType & BRF_PRG) && (ri.nType & 0x0f) == 9)
|
||||
{
|
||||
if (bLoad) {
|
||||
BurnLoadRom(PGMProtROM, i, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!bLoad) {
|
||||
|
|
Loading…
Reference in New Issue