Add loading routine for Contrae, make other load routines a bit more understandable and flexible.
This commit is contained in:
parent
6ca267a54d
commit
65cfdea1dd
|
@ -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
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue