From 5cc74e55286df1607a9ee910667e5e83975e70c4 Mon Sep 17 00:00:00 2001 From: taoenwen <67533945+taoenwen@users.noreply.github.com> Date: Tue, 8 Jul 2025 02:16:39 +0800 Subject: [PATCH] d_pce: Remove a duplicate game [sljs1976] - Majin Eiyuu Den Wataru (Japan) = Mashin Eiyuuden Wataru (Japan) - PCE add SOCD scenes --- src/burn/drv/pce/d_pce.cpp | 22 +--------------------- src/burn/drv/pce/pce.cpp | 30 ++++++++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/src/burn/drv/pce/d_pce.cpp b/src/burn/drv/pce/d_pce.cpp index ecdaf91d0..f0009e2b7 100644 --- a/src/burn/drv/pce/d_pce.cpp +++ b/src/burn/drv/pce/d_pce.cpp @@ -3595,26 +3595,6 @@ struct BurnDriver BurnDrvpce_mikkokue = { }; -// Majin Eiyuu Den Wataru (Japan) - -static struct BurnRomInfo pce_wataruRomDesc[] = { - { "Majin Eiyuu Den Wataru (Japan)(1988)(Hudson Soft).pce", 0x040000, 0x2f8935aa, BRF_PRG | BRF_ESS }, -}; - -STD_ROM_PICK(pce_wataru) -STD_ROM_FN(pce_wataru) - -struct BurnDriver BurnDrvpce_wataru = { - "pce_wataru", NULL, NULL, NULL, "1988", - "Majin Eiyuu Den Wataru (Japan)\0", NULL, "Hudson Soft", "PC Engine", - NULL, NULL, NULL, NULL, - BDF_GAME_WORKING, 1, HARDWARE_PCENGINE_PCENGINE, GBF_PLATFORM, 0, - PceGetZipName, pce_wataruRomInfo, pce_wataruRomName, NULL, NULL, NULL, NULL, pceInputInfo, pceDIPInfo, - PCEInit, PCEExit, PCEFrame, PCEDraw, PCEScan, - &PCEPaletteRecalc, 0x400, 1024, 240, 4, 3 -}; - - // Makai Hakken Den Shada (Japan) static struct BurnRomInfo pce_makaihakRomDesc[] = { @@ -3747,7 +3727,7 @@ STD_ROM_FN(pce_mashwataru) struct BurnDriver BurnDrvpce_mashwataru = { "pce_mashwataru", NULL, NULL, NULL, "1988", "Mashin Eiyuuden Wataru (Japan)\0", NULL, "Hudson Soft", "PC Engine", - NULL, NULL, NULL, NULL, + L"Mashin Eiyuuden Wataru (Japan)\0\u9b54\u795e\u82f1\u96c4\u4f1d\u30ef\u30bf\u30eb\0", NULL, NULL, NULL, BDF_GAME_WORKING, 1, HARDWARE_PCENGINE_PCENGINE, GBF_PLATFORM | GBF_ADV, 0, PceGetZipName, pce_mashwataruRomInfo, pce_mashwataruRomName, NULL, NULL, NULL, NULL, pceInputInfo, pceDIPInfo, PCEInit, PCEExit, PCEFrame, PCEDraw, PCEScan, diff --git a/src/burn/drv/pce/pce.cpp b/src/burn/drv/pce/pce.cpp index 9583f36cc..26ff9182e 100644 --- a/src/burn/drv/pce/pce.cpp +++ b/src/burn/drv/pce/pce.cpp @@ -1,4 +1,4 @@ -// FB Alpha PC-Engine / TurboGrafx 16 / SuperGrafx driver module +// FB Neo PC-Engine / TurboGrafx 16 / SuperGrafx driver module // Based on MESS driver by Charles MacDonald #include "tiles_generic.h" @@ -34,6 +34,7 @@ static void (*interrupt)(); static void (*hblank)(); static UINT16 PCEInputs[5]; +static ClearOpposite<5, UINT16> clear_opposite; UINT8 PCEReset; UINT8 PCEJoy1[12]; UINT8 PCEJoy2[12]; @@ -418,6 +419,8 @@ static INT32 PCEDoReset() nExtraCycles = 0; + clear_opposite.reset(); + return 0; } @@ -647,16 +650,37 @@ INT32 PCEDraw() static void PCECompileInputs() { - memset (PCEInputs, 0xff, 5 * sizeof(UINT16)); +// memset (PCEInputs, 0xff, 5 * sizeof(UINT16)); + memset(PCEInputs, 0x00, 5 * sizeof(UINT16)); for (INT32 i = 0; i < 12; i++) { +/* PCEInputs[0] ^= (PCEJoy1[i] & 1) << i; PCEInputs[1] ^= (PCEJoy2[i] & 1) << i; PCEInputs[2] ^= (PCEJoy3[i] & 1) << i; PCEInputs[3] ^= (PCEJoy4[i] & 1) << i; PCEInputs[4] ^= (PCEJoy5[i] & 1) << i; +*/ + PCEInputs[0] |= (PCEJoy1[i] & 1) << i; + PCEInputs[1] |= (PCEJoy2[i] & 1) << i; + PCEInputs[2] |= (PCEJoy3[i] & 1) << i; + PCEInputs[3] |= (PCEJoy4[i] & 1) << i; + PCEInputs[4] |= (PCEJoy5[i] & 1) << i; } +#define PCEBITSWAP16(u16) (u16 = (((u16) & ~0xe0) | ((((u16) >> 5) & 1) << 7) | ((((u16) >> 7) & 1) << 6) | ((((u16) >> 6) & 1) << 5))) // msvc ... +#define PECRESTORE16(u16) (u16 = (((u16) & ~0xe0) | ((((u16) >> 7) & 1) << 5) | ((((u16) >> 6) & 1) << 7) | ((((u16) >> 5) & 1) << 6))) // must be u16 = ... + + for (INT32 i = 0; i < 5; i++) { + PCEBITSWAP16(PCEInputs[i]); + clear_opposite.check(i, PCEInputs[i], 0x00c0, 0x0030, nSocd[i]); + PECRESTORE16(PCEInputs[i]); + PCEInputs[i] = ~PCEInputs[i]; + } + +#undef PCEBITSWAP16 +#undef PECRESTORE16 + if ((last_dip ^ PCEDips[2]) & 0x80) { bprintf(0, _T("Sound core switched to: %s\n"), (PCEDips[2] & 0x80) ? _T("HQ") : _T("LQ")); c6280_set_renderer(PCEDips[2] & 0x80); @@ -744,6 +768,8 @@ INT32 PCEScan(INT32 nAction, INT32 *pnMin) SCAN_VAR(nExtraCycles); + clear_opposite.scan(); + if (pce_sf2) { SCAN_VAR(pce_sf2_bank); sf2_bankswitch(pce_sf2_bank);