From e8f1e4f0cde2fc730ec2d44037de95dd246624c9 Mon Sep 17 00:00:00 2001 From: dinkc64 <12570148+dinkc64@users.noreply.github.com> Date: Fri, 15 Dec 2017 04:39:55 +0000 Subject: [PATCH] megasys1: add in your face, buffer sprites in frame --- src/burn/drv/pre90s/d_megasys1.cpp | 146 ++++++++++++++++++++++++++--- 1 file changed, 135 insertions(+), 11 deletions(-) diff --git a/src/burn/drv/pre90s/d_megasys1.cpp b/src/burn/drv/pre90s/d_megasys1.cpp index b0e02ea11..e5976bf17 100644 --- a/src/burn/drv/pre90s/d_megasys1.cpp +++ b/src/burn/drv/pre90s/d_megasys1.cpp @@ -1413,6 +1413,53 @@ static struct BurnDIPInfo PeekabooDIPList[]= STDDIPINFO(Peekaboo) +static struct BurnDIPInfo InyourfaDIPList[]= +{ + {0x12, 0xff, 0xff, 0xff, NULL }, + {0x13, 0xff, 0xff, 0xff, NULL }, + + {0 , 0xfe, 0 , 4, "Game Time" }, + {0x12, 0x01, 0x03, 0x02, "00:50" }, + {0x12, 0x01, 0x03, 0x01, "01:00" }, + {0x12, 0x01, 0x03, 0x03, "01:10" }, + {0x12, 0x01, 0x03, 0x00, "01:20" }, + + {0 , 0xfe, 0 , 2, "Flip Screen" }, + {0x12, 0x01, 0x80, 0x80, "Off" }, + {0x12, 0x01, 0x80, 0x00, "On" }, + + {0 , 0xfe, 0 , 8, "Coin A" }, + {0x13, 0x01, 0x07, 0x04, "3 Coins 1 Credits" }, + {0x13, 0x01, 0x07, 0x02, "2 Coins 1 Credits" }, + {0x13, 0x01, 0x07, 0x07, "1 Coin 1 Credits" }, + {0x13, 0x01, 0x07, 0x03, "1 Coin 2 Credits" }, + {0x13, 0x01, 0x07, 0x05, "1 Coin 3 Credits" }, + {0x13, 0x01, 0x07, 0x01, "1 Coin 4 Credits" }, + {0x13, 0x01, 0x07, 0x06, "1 Coin 5 Credits" }, + {0x13, 0x01, 0x07, 0x00, "Free Play" }, + + {0 , 0xfe, 0 , 8, "Coin B" }, + {0x13, 0x01, 0x38, 0x00, "4 Coins 1 Credits" }, + {0x13, 0x01, 0x38, 0x20, "3 Coins 1 Credits" }, + {0x13, 0x01, 0x38, 0x10, "2 Coins 1 Credits" }, + {0x13, 0x01, 0x38, 0x38, "1 Coin 1 Credits" }, + {0x13, 0x01, 0x38, 0x18, "1 Coin 2 Credits" }, + {0x13, 0x01, 0x38, 0x28, "1 Coin 3 Credits" }, + {0x13, 0x01, 0x38, 0x08, "1 Coin 4 Credits" }, + {0x13, 0x01, 0x38, 0x30, "1 Coin 5 Credits" }, + + {0 , 0xfe, 0 , 2, "Demo Sounds" }, + {0x13, 0x01, 0x40, 0x40, "On" }, + {0x13, 0x01, 0x40, 0x00, "Off" }, + + {0 , 0xfe, 0 , 2, "Freeze Screen (Cheat)"}, + {0x13, 0x01, 0x80, 0x80, "Off" }, + {0x13, 0x01, 0x80, 0x00, "On" }, +}; + +STDDIPINFO(Inyourfa) + + static UINT8 __fastcall mcu_prot_read_byte(UINT32 address) { return Drv68KROM0[(address & 0x3ffff) ^ 1]; @@ -1574,7 +1621,6 @@ static void update_video_regs(INT32 offset) if (system_select == 0) { // system Z ZetReset(); } else { - SekClose(); SekOpen(1); SekReset(); @@ -1590,7 +1636,7 @@ static void update_video_regs(INT32 offset) soundlatch = data; if (system_select == 0) { // system Z - ZetSetIRQLine(0, CPU_IRQSTATUS_AUTO); + ZetSetIRQLine(0, CPU_IRQSTATUS_HOLD); } else { SekClose(); SekOpen(1); @@ -2347,11 +2393,6 @@ static INT32 MemIndex() DrvPrioBitmap = Next; Next += 256 * 256; - DrvSprBuf0 = Next; Next += 0x002000; - DrvObjBuf0 = Next; Next += 0x002000; - DrvSprBuf1 = Next; Next += 0x002000; - DrvObjBuf1 = Next; Next += 0x002000; - DrvPalette = (UINT32*)Next; Next += 0x0400 * sizeof(UINT32); AllRam = Next; @@ -2372,6 +2413,11 @@ static INT32 MemIndex() DrvSprRAM = Drv68KRAM0 + 0x8000; + DrvSprBuf0 = Next; Next += 0x002000; + DrvObjBuf0 = Next; Next += 0x002000; + DrvSprBuf1 = Next; Next += 0x002000; + DrvObjBuf1 = Next; Next += 0x002000; + RamEnd = Next; MemEnd = Next; @@ -3226,12 +3272,15 @@ static INT32 DrvDraw() BurnTransferCopy(DrvPalette); + return 0; +} + +static void DrvBufferSprites() +{ memcpy (DrvSprBuf1, DrvSprBuf0, 0x2000); memcpy (DrvObjBuf1, DrvObjBuf0, 0x2000); memcpy (DrvSprBuf0, DrvSprRAM , 0x2000); memcpy (DrvObjBuf0, DrvObjRAM , 0x2000); - - return 0; } static INT32 System1ZFrame() @@ -3284,6 +3333,8 @@ static INT32 System1ZFrame() DrvDraw(); } + DrvBufferSprites(); + return 0; } @@ -3305,7 +3356,7 @@ static INT32 System1AFrame() } INT32 nSegment; - INT32 nInterleave = 256; + INT32 nInterleave = 262; INT32 nSoundBufferPos = 0; INT32 nCyclesTotal[2] = { ((tshingen) ? 8000000 : 6000000) / 60, 7000000 / 60 }; INT32 nCyclesDone[2] = { 0, 0 }; @@ -3315,7 +3366,7 @@ static INT32 System1AFrame() SekOpen(0); nSegment = (nCyclesTotal[0] * (i + 1)) / nInterleave; nCyclesDone[0] += SekRun(nSegment - nCyclesDone[0]); - if (i == 0) SekSetIRQLine(1, CPU_IRQSTATUS_AUTO); + if (i == 16) SekSetIRQLine(1, CPU_IRQSTATUS_AUTO); if (i == 128) SekSetIRQLine(3, CPU_IRQSTATUS_AUTO); if (i == 240) SekSetIRQLine(2, CPU_IRQSTATUS_AUTO); SekClose(); @@ -3358,6 +3409,8 @@ static INT32 System1AFrame() DrvDraw(); } + DrvBufferSprites(); + return 0; } @@ -3432,6 +3485,8 @@ static INT32 System1BFrame() DrvDraw(); } + DrvBufferSprites(); + return 0; } @@ -3506,6 +3561,8 @@ static INT32 System1CFrame() DrvDraw(); } + DrvBufferSprites(); + return 0; } @@ -3539,6 +3596,8 @@ static INT32 System1DFrame() DrvDraw(); } + DrvBufferSprites(); + return 0; } @@ -5931,3 +5990,68 @@ struct BurnDriver BurnDrvPeekaboou = { peekabooInit, DrvExit, System1DFrame, DrvDraw, DrvScan, &DrvRecalc, 0x400, 256, 224, 4, 3 }; + +// In Your Face (World, prototype) + +static struct BurnRomInfo inyourfaRomDesc[] = { + { "02.27C1001", 0x020000, 0xae77e5b7, 1 | BRF_PRG | BRF_ESS }, // 0 68k #0 Code + { "01.27C1001", 0x020000, 0xe5ea92ef, 1 | BRF_PRG | BRF_ESS }, // 1 + { "03.27C512", 0x010000, 0xa1efe9be, 1 | BRF_PRG | BRF_ESS }, // 2 + { "04.27C512", 0x010000, 0xf786cf3e, 1 | BRF_PRG | BRF_ESS }, // 3 + + { "05.27C512", 0x010000, 0x1737ed64, 2 | BRF_PRG | BRF_ESS }, // 4 68k #1 Code + { "06.27C512", 0x010000, 0x9f12bcb9, 2 | BRF_PRG | BRF_ESS }, // 5 + + { "m50747", 0x001000, 0x00000000, 0 | BRF_NODUMP }, // 6 MCU Code + + { "11.27C1001", 0x020000, 0x451a1428, 3 | BRF_GRA }, // 7 Tilemap #0 Tiles + { "12.27C1001", 0x020000, 0x9ead7432, 3 | BRF_GRA }, // 8 + { "13.27C1001", 0x020000, 0x7e39842a, 3 | BRF_GRA }, // 9 + { "14.27C1001", 0x020000, 0xa91a3569, 3 | BRF_GRA }, // 10 + + { "15.27C1001", 0x020000, 0x420081b6, 4 | BRF_GRA }, // 11 Tilemap #1 Tiles + { "16.27C1001", 0x020000, 0x87b1a582, 4 | BRF_GRA }, // 12 + { "17.27C1001", 0x020000, 0x00857146, 4 | BRF_GRA }, // 13 + + { "19.27C1001", 0x020000, 0xb82c94ec, 5 | BRF_GRA }, // 14 Tilemap #2 Tiles + + { "20.27C1001", 0x020000, 0x4a322d18, 6 | BRF_GRA }, // 15 Sprites + { "21.27C1001", 0x020000, 0x7bb4b35d, 6 | BRF_GRA }, // 16 + { "22.27C1001", 0x020000, 0x1dc040d2, 6 | BRF_GRA }, // 17 + { "23.27C1001", 0x020000, 0x50478530, 6 | BRF_GRA }, // 18 + + { "09.27C1001", 0x020000, 0x27f4bfb4, 7 | BRF_SND }, // 19 OKI #0 Samples + { "10.27C1001", 0x020000, 0xcf5430ff, 7 | BRF_SND }, // 20 + + { "07.27C1001", 0x020000, 0xdc254c7c, 8 | BRF_SND }, // 21 OKI #1 Samples + { "08.27C1001", 0x020000, 0xcadd4731, 8 | BRF_SND }, // 22 + + { "prom.14m", 0x000200, 0x1341ba02, 9 | BRF_GRA }, // 23 Priority PROM +}; + +STD_ROM_PICK(inyourfa) +STD_ROM_FN(inyourfa) + +static INT32 inyourfaInit() +{ + INT32 nRet = SystemInit(0xA, phantasm_rom_decode); + + if (nRet == 0) + { + //memset (DrvGfxROM[1] + 0xc0000, 0xf, 0x40000); + + //install_mcu_protection(mcu_config_type2, 0x2f000); // necessary? + } + + return nRet; +} + +struct BurnDriver BurnDrvInyourfa = { + "inyourfa", NULL, NULL, NULL, "1991", + "In Your Face (World, prototype)\0", NULL, "Jaleco", "Mega System 1", + NULL, NULL, NULL, NULL, + BDF_GAME_WORKING | BDF_PROTOTYPE, 2, HARDWARE_MISC_POST90S, GBF_SPORTSMISC, 0, + NULL, inyourfaRomInfo, inyourfaRomName, NULL, NULL, CommonInputInfo, InyourfaDIPInfo, + inyourfaInit, DrvExit, System1AFrame, DrvDraw, DrvScan, &DrvRecalc, 0x400, + 256, 224, 4, 3 +};