Add loading routine for Contrae, make other load routines a bit more understandable and flexible.

This commit is contained in:
iq_132 2015-05-12 02:59:56 +00:00
parent 6ca267a54d
commit 65cfdea1dd
1 changed files with 215 additions and 151 deletions

View File

@ -76,7 +76,6 @@ static struct BurnInputInfo DrvInputList[] =
STDINPUTINFO(Drv) STDINPUTINFO(Drv)
static struct BurnDIPInfo DrvDIPList[]= static struct BurnDIPInfo DrvDIPList[]=
{ {
{0x12, 0xff, 0xff, 0xff, NULL }, {0x12, 0xff, 0xff, 0xff, NULL },
@ -408,20 +407,19 @@ static INT32 DrvColorTableInit()
static INT32 DrvDoReset() static INT32 DrvDoReset()
{ {
DrvReset = 0;
memset (AllRam, 0, RamEnd - AllRam); memset (AllRam, 0, RamEnd - AllRam);
memset (K007121_ctrlram, 0, 2 * 8); memset (K007121_ctrlram, 0, 2 * 8);
memset (K007121_flipscreen, 0, 2 * sizeof(INT32)); memset (K007121_flipscreen, 0, 2 * sizeof(INT32));
for (INT32 i = 0; i < 2; i++) { M6809Open(0);
M6809Open(i);
M6809Reset(); M6809Reset();
M6809Close(); M6809Close();
}
M6809Open(1);
M6809Reset();
BurnYM2151Reset(); BurnYM2151Reset();
M6809Close();
trigger_sound_irq = 0; trigger_sound_irq = 0;
soundlatch = 0; soundlatch = 0;
@ -432,14 +430,10 @@ static INT32 DrvDoReset()
static void DrvYM2151IrqHandler(INT32 Irq) static void DrvYM2151IrqHandler(INT32 Irq)
{ {
if (Irq) { M6809SetIRQLine(M6809_FIRQ_LINE, ((Irq) ? CPU_IRQSTATUS_ACK : CPU_IRQSTATUS_NONE));
M6809SetIRQLine(M6809_FIRQ_LINE, CPU_IRQSTATUS_ACK);
} else {
M6809SetIRQLine(M6809_FIRQ_LINE, CPU_IRQSTATUS_NONE);
}
} }
static INT32 DrvInit() static INT32 CommonInit(INT32 (*pRomLoad)())
{ {
AllMem = NULL; AllMem = NULL;
MemIndex(); MemIndex();
@ -449,32 +443,8 @@ static INT32 DrvInit()
MemIndex(); MemIndex();
{ {
if (BurnLoadRom(DrvM6809ROM0 + 0x00000, 0, 1)) return 1; if (pRomLoad) {
memcpy (DrvM6809ROM0 + 0x20000, DrvM6809ROM0, 0x08000); if (pRomLoad()) return 1;
if (BurnLoadRom(DrvM6809ROM0 + 0x10000, 1, 1)) return 1;
if (BurnLoadRom(DrvM6809ROM1 + 0x08000, 2, 1)) return 1;
if (BurnDrvGetFlags() & BDF_BOOTLEG)
{
for (INT32 i = 0; i < 8; i++) {
if (BurnLoadRom(DrvGfxROM0 + i * 0x10000, 3 + i, 1)) return 1;
if (BurnLoadRom(DrvGfxROM1 + i * 0x10000, 11 + i, 1)) return 1;
}
for (INT32 i = 0; i < 4; i++) {
if (BurnLoadRom(DrvPROMs + i * 0x100, i + 18, 1)) return 1;
}
} else {
if (BurnLoadRom(DrvGfxROM0 + 0, 3, 2)) return 1;
if (BurnLoadRom(DrvGfxROM0 + 1, 4, 2)) return 1;
if (BurnLoadRom(DrvGfxROM1 + 0, 5, 2)) return 1;
if (BurnLoadRom(DrvGfxROM1 + 1, 6, 2)) return 1;
for (INT32 i = 0; i < 4; i++) {
if (BurnLoadRom(DrvPROMs + i * 0x100, i + 7, 1)) return 1;
}
} }
DrvGfxExpand(DrvGfxROM0); DrvGfxExpand(DrvGfxROM0);
@ -520,6 +490,100 @@ static INT32 DrvInit()
return 0; return 0;
} }
static INT32 CommonRomLoad()
{
if (BurnLoadRom(DrvM6809ROM0 + 0x00000, 0, 1)) return 1;
memcpy (DrvM6809ROM0 + 0x20000, DrvM6809ROM0, 0x08000);
if (BurnLoadRom(DrvM6809ROM0 + 0x10000, 1, 1)) return 1;
if (BurnLoadRom(DrvM6809ROM1 + 0x08000, 2, 1)) return 1;
if (BurnLoadRom(DrvGfxROM0 + 0x000000, 3, 2)) return 1;
if (BurnLoadRom(DrvGfxROM0 + 0x000001, 4, 2)) return 1;
if (BurnLoadRom(DrvGfxROM1 + 0x000000, 5, 2)) return 1;
if (BurnLoadRom(DrvGfxROM1 + 0x000001, 6, 2)) return 1;
if (BurnLoadRom(DrvPROMs + 0x000000, 7, 1)) return 1;
if (BurnLoadRom(DrvPROMs + 0x000100, 8, 1)) return 1;
if (BurnLoadRom(DrvPROMs + 0x000200, 9, 1)) return 1;
if (BurnLoadRom(DrvPROMs + 0x000300, 10, 1)) return 1;
return 0;
}
static INT32 BootlegRomLoad()
{
if (BurnLoadRom(DrvM6809ROM0 + 0x00000, 0, 1)) return 1;
memcpy (DrvM6809ROM0 + 0x20000, DrvM6809ROM0, 0x08000);
if (BurnLoadRom(DrvM6809ROM0 + 0x10000, 1, 1)) return 1;
if (BurnLoadRom(DrvM6809ROM1 + 0x08000, 2, 1)) return 1;
if (BurnLoadRom(DrvGfxROM0 + 0x00000, 3, 1)) return 1;
if (BurnLoadRom(DrvGfxROM0 + 0x10000, 4, 1)) return 1;
if (BurnLoadRom(DrvGfxROM0 + 0x20000, 5, 1)) return 1;
if (BurnLoadRom(DrvGfxROM0 + 0x30000, 6, 1)) return 1;
if (BurnLoadRom(DrvGfxROM0 + 0x40000, 7, 1)) return 1;
if (BurnLoadRom(DrvGfxROM0 + 0x50000, 8, 1)) return 1;
if (BurnLoadRom(DrvGfxROM0 + 0x60000, 9, 1)) return 1;
if (BurnLoadRom(DrvGfxROM0 + 0x70000, 10, 1)) return 1;
if (BurnLoadRom(DrvGfxROM1 + 0x00000, 11, 1)) return 1;
if (BurnLoadRom(DrvGfxROM1 + 0x10000, 12, 1)) return 1;
if (BurnLoadRom(DrvGfxROM1 + 0x20000, 13, 1)) return 1;
if (BurnLoadRom(DrvGfxROM1 + 0x30000, 14, 1)) return 1;
if (BurnLoadRom(DrvGfxROM1 + 0x40000, 15, 1)) return 1;
if (BurnLoadRom(DrvGfxROM1 + 0x50000, 16, 1)) return 1;
if (BurnLoadRom(DrvGfxROM1 + 0x60000, 17, 1)) return 1;
// 70000-7ffff empty
if (BurnLoadRom(DrvPROMs + 0x000000, 18, 1)) return 1;
if (BurnLoadRom(DrvPROMs + 0x000100, 19, 1)) return 1;
if (BurnLoadRom(DrvPROMs + 0x000200, 20, 1)) return 1;
if (BurnLoadRom(DrvPROMs + 0x000300, 21, 1)) return 1;
return 0;
}
static INT32 ContraeRomLoad()
{
if (BurnLoadRom(DrvM6809ROM0 + 0x00000, 0, 1)) return 1;
memcpy (DrvM6809ROM0 + 0x20000, DrvM6809ROM0, 0x08000);
if (BurnLoadRom(DrvM6809ROM0 + 0x10000, 1, 1)) return 1;
if (BurnLoadRom(DrvM6809ROM1 + 0x08000, 2, 1)) return 1;
if (BurnLoadRom(DrvGfxROM0 + 0x000000, 3, 2)) return 1;
if (BurnLoadRom(DrvGfxROM0 + 0x020000, 4, 2)) return 1;
if (BurnLoadRom(DrvGfxROM0 + 0x040000, 5, 2)) return 1;
if (BurnLoadRom(DrvGfxROM0 + 0x060000, 6, 2)) return 1;
if (BurnLoadRom(DrvGfxROM0 + 0x000001, 7, 2)) return 1;
if (BurnLoadRom(DrvGfxROM0 + 0x020001, 8, 2)) return 1;
if (BurnLoadRom(DrvGfxROM0 + 0x040001, 9, 2)) return 1;
if (BurnLoadRom(DrvGfxROM0 + 0x060001, 10, 2)) return 1;
if (BurnLoadRom(DrvGfxROM1 + 0x000000, 11, 2)) return 1;
if (BurnLoadRom(DrvGfxROM1 + 0x020000, 12, 2)) return 1;
if (BurnLoadRom(DrvGfxROM1 + 0x040000, 13, 2)) return 1;
if (BurnLoadRom(DrvGfxROM1 + 0x060000, 14, 2)) return 1;
if (BurnLoadRom(DrvGfxROM1 + 0x000001, 15, 2)) return 1;
if (BurnLoadRom(DrvGfxROM1 + 0x020001, 16, 2)) return 1;
if (BurnLoadRom(DrvGfxROM1 + 0x040001, 17, 2)) return 1;
if (BurnLoadRom(DrvGfxROM1 + 0x060001, 18, 2)) return 1;
if (BurnLoadRom(DrvPROMs + 0x000000, 19, 1)) return 1;
if (BurnLoadRom(DrvPROMs + 0x000100, 20, 1)) return 1;
if (BurnLoadRom(DrvPROMs + 0x000200, 21, 1)) return 1;
if (BurnLoadRom(DrvPROMs + 0x000300, 22, 1)) return 1;
return 0;
}
static INT32 DrvInit() { return CommonInit(CommonRomLoad); }
static INT32 BootInit() { return CommonInit(BootlegRomLoad); }
static INT32 ContraeInit() { return CommonInit(ContraeRomLoad); }
static INT32 DrvExit() static INT32 DrvExit()
{ {
GenericTilesExit(); GenericTilesExit();
@ -1061,9 +1125,9 @@ struct BurnDriver BurnDrvContrae = {
"contrae", "contra", NULL, NULL, "1987", "contrae", "contra", NULL, NULL, "1987",
"Contra (US / Asia, set 3)\0", NULL, "Konami", "GX633", "Contra (US / Asia, set 3)\0", NULL, "Konami", "GX633",
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
BDF_CLONE | BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED, 2, HARDWARE_PREFIX_KONAMI, GBF_SHOOT, 0, BDF_GAME_WORKING | BDF_CLONE | BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED, 2, HARDWARE_PREFIX_KONAMI, GBF_SHOOT, 0,
NULL, contraeRomInfo, contraeRomName, NULL, NULL, DrvInputInfo, DrvDIPInfo, NULL, contraeRomInfo, contraeRomName, NULL, NULL, DrvInputInfo, DrvDIPInfo,
DrvInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x1000, ContraeInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x1000,
224, 280, 3, 4 224, 280, 3, 4
}; };
@ -1254,7 +1318,7 @@ struct BurnDriver BurnDrvContrab = {
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE | BDF_BOOTLEG | BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED, 2, HARDWARE_PREFIX_KONAMI, GBF_SHOOT, 0, BDF_GAME_WORKING | BDF_CLONE | BDF_BOOTLEG | BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED, 2, HARDWARE_PREFIX_KONAMI, GBF_SHOOT, 0,
NULL, contrabRomInfo, contrabRomName, NULL, NULL, DrvInputInfo, DrvDIPInfo, NULL, contrabRomInfo, contrabRomName, NULL, NULL, DrvInputInfo, DrvDIPInfo,
DrvInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x1000, BootInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x1000,
224, 280, 3, 4 224, 280, 3, 4
}; };
@ -1297,9 +1361,9 @@ struct BurnDriver BurnDrvContrabj = {
"contrabj", "contra", NULL, NULL, "1987", "contrabj", "contra", NULL, NULL, "1987",
"Contra (Japan bootleg, set 1)\0", NULL, "Konami", "GX633", "Contra (Japan bootleg, set 1)\0", NULL, "Konami", "GX633",
L"\u9B42\u6597\u7F85 \u30B3\u30F3\u30C8\u30E9 (Japan bootleg, set 1)\0Contra\0", NULL, NULL, NULL, L"\u9B42\u6597\u7F85 \u30B3\u30F3\u30C8\u30E9 (Japan bootleg, set 1)\0Contra\0", NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE | BDF_BOOTLEG | BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED, 2, HARDWARE_PREFIX_KONAMI, GBF_MISC, 0, BDF_GAME_WORKING | BDF_CLONE | BDF_BOOTLEG | BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED, 2, HARDWARE_PREFIX_KONAMI, GBF_SHOOT, 0,
NULL, contrabjRomInfo, contrabjRomName, NULL, NULL, DrvInputInfo, DrvDIPInfo, NULL, contrabjRomInfo, contrabjRomName, NULL, NULL, DrvInputInfo, DrvDIPInfo,
DrvInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x1000, BootInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x1000,
224, 280, 3, 4 224, 280, 3, 4
}; };
@ -1342,9 +1406,9 @@ struct BurnDriver BurnDrvContrabj1 = {
"contrabj1", "contra", NULL, NULL, "1987", "contrabj1", "contra", NULL, NULL, "1987",
"Contra (Japan bootleg, set 2)\0", NULL, "Konami", "GX633", "Contra (Japan bootleg, set 2)\0", NULL, "Konami", "GX633",
L"\u9B42\u6597\u7F85 \u30B3\u30F3\u30C8\u30E9 (Japan bootleg, set 2)\0Contra\0", NULL, NULL, NULL, L"\u9B42\u6597\u7F85 \u30B3\u30F3\u30C8\u30E9 (Japan bootleg, set 2)\0Contra\0", NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE | BDF_BOOTLEG | BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED, 2, HARDWARE_PREFIX_KONAMI, GBF_MISC, 0, BDF_GAME_WORKING | BDF_CLONE | BDF_BOOTLEG | BDF_ORIENTATION_VERTICAL | BDF_ORIENTATION_FLIPPED, 2, HARDWARE_PREFIX_KONAMI, GBF_SHOOT, 0,
NULL, contrabj1RomInfo, contrabj1RomName, NULL, NULL, DrvInputInfo, DrvDIPInfo, NULL, contrabj1RomInfo, contrabj1RomName, NULL, NULL, DrvInputInfo, DrvDIPInfo,
DrvInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x1000, BootInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x1000,
224, 280, 3, 4 224, 280, 3, 4
}; };