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)
static struct BurnDIPInfo DrvDIPList[]=
{
{0x12, 0xff, 0xff, 0xff, NULL },
@ -408,20 +407,19 @@ static INT32 DrvColorTableInit()
static INT32 DrvDoReset()
{
DrvReset = 0;
memset (AllRam, 0, RamEnd - AllRam);
memset (K007121_ctrlram, 0, 2 * 8);
memset (K007121_flipscreen, 0, 2 * sizeof(INT32));
for (INT32 i = 0; i < 2; i++) {
M6809Open(i);
M6809Open(0);
M6809Reset();
M6809Close();
}
M6809Open(1);
M6809Reset();
BurnYM2151Reset();
M6809Close();
trigger_sound_irq = 0;
soundlatch = 0;
@ -432,14 +430,10 @@ static INT32 DrvDoReset()
static void DrvYM2151IrqHandler(INT32 Irq)
{
if (Irq) {
M6809SetIRQLine(M6809_FIRQ_LINE, CPU_IRQSTATUS_ACK);
} else {
M6809SetIRQLine(M6809_FIRQ_LINE, CPU_IRQSTATUS_NONE);
}
M6809SetIRQLine(M6809_FIRQ_LINE, ((Irq) ? CPU_IRQSTATUS_ACK : CPU_IRQSTATUS_NONE));
}
static INT32 DrvInit()
static INT32 CommonInit(INT32 (*pRomLoad)())
{
AllMem = NULL;
MemIndex();
@ -449,32 +443,8 @@ static INT32 DrvInit()
MemIndex();
{
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 (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;
}
if (pRomLoad) {
if (pRomLoad()) return 1;
}
DrvGfxExpand(DrvGfxROM0);
@ -520,6 +490,100 @@ static INT32 DrvInit()
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()
{
GenericTilesExit();
@ -1061,9 +1125,9 @@ struct BurnDriver BurnDrvContrae = {
"contrae", "contra", NULL, NULL, "1987",
"Contra (US / Asia, set 3)\0", NULL, "Konami", "GX633",
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,
DrvInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x1000,
ContraeInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x1000,
224, 280, 3, 4
};
@ -1254,7 +1318,7 @@ struct BurnDriver BurnDrvContrab = {
NULL, NULL, NULL, NULL,
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,
DrvInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x1000,
BootInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x1000,
224, 280, 3, 4
};
@ -1297,9 +1361,9 @@ struct BurnDriver BurnDrvContrabj = {
"contrabj", "contra", NULL, NULL, "1987",
"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,
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,
DrvInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x1000,
BootInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x1000,
224, 280, 3, 4
};
@ -1342,9 +1406,9 @@ struct BurnDriver BurnDrvContrabj1 = {
"contrabj1", "contra", NULL, NULL, "1987",
"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,
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,
DrvInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x1000,
BootInit, DrvExit, DrvFrame, DrvDraw, DrvScan, &DrvRecalc, 0x1000,
224, 280, 3, 4
};