diff --git a/src/burn/drv/megadrive/d_megadrive.cpp b/src/burn/drv/megadrive/d_megadrive.cpp index a7901589f..67bd306df 100644 --- a/src/burn/drv/megadrive/d_megadrive.cpp +++ b/src/burn/drv/megadrive/d_megadrive.cpp @@ -615,8 +615,8 @@ struct BurnDriver BurnDrvmd_gameto = { // Ghouls'n Ghosts (Euro, USA, Kor, Rev. A) static struct BurnRomInfo md_ghoulsRomDesc[] = { - { "mpr-12605a.ic1", 0x020000, 0xd367c3cc, BRF_PRG | SEGA_MD_ROM_LOAD_NORMAL | SEGA_MD_ROM_OFFS_000000 }, - { "mpr-12606a.ic2", 0x080000, 0xf56444c6, BRF_PRG | SEGA_MD_ROM_LOAD_NORMAL | SEGA_MD_ROM_OFFS_020000 }, + { "mpr-12605a t04.ic1", 0x020000, 0xd367c3cc, BRF_PRG | SEGA_MD_ROM_LOAD16_WORD_SWAP | SEGA_MD_ROM_OFFS_000000 }, + { "mpr-12606a w57.ic2", 0x080000, 0x5291d097, BRF_PRG | SEGA_MD_ROM_LOAD16_WORD_SWAP_CONTINUE_020000_080000 | SEGA_MD_ROM_OFFS_080000 }, }; STD_ROM_PICK(md_ghouls) @@ -634,8 +634,8 @@ struct BurnDriver BurnDrvmd_ghouls = { // Ghouls'n Ghosts (Euro, USA) static struct BurnRomInfo md_ghouls1RomDesc[] = { - { "mpr-12605.ic1", 0x020000, 0x1066c6ab, BRF_PRG | SEGA_MD_ROM_LOAD_NORMAL | SEGA_MD_ROM_OFFS_000000 }, - { "mpr-12606.ic2", 0x080000, 0xceebc56f, BRF_PRG | SEGA_MD_ROM_LOAD_NORMAL | SEGA_MD_ROM_OFFS_020000 }, + { "mpr-12605 t02.ic1", 0x020000, 0x1066c6ab, BRF_PRG | SEGA_MD_ROM_LOAD16_WORD_SWAP | SEGA_MD_ROM_OFFS_000000 }, + { "mpr-12606 r32.ic2", 0x080000, 0xd0be7777, BRF_PRG | SEGA_MD_ROM_LOAD16_WORD_SWAP_CONTINUE_020000_080000 | SEGA_MD_ROM_OFFS_080000 }, }; STD_ROM_PICK(md_ghouls1) diff --git a/src/burn/drv/megadrive/megadrive.cpp b/src/burn/drv/megadrive/megadrive.cpp index de7f42496..169492783 100644 --- a/src/burn/drv/megadrive/megadrive.cpp +++ b/src/burn/drv/megadrive/megadrive.cpp @@ -1372,6 +1372,13 @@ static INT32 MegadriveLoadRoms(bool bLoad) break; } + case SEGA_MD_ROM_LOAD16_WORD_SWAP_CONTINUE_020000_080000: { // ghouls[1] + nRet = BurnLoadRom(RomMain + Offset, i, 1); if (nRet) return 1; + memmove(RomMain + 0x020000, RomMain + 0x100000, 0x60000); // tried memcpy & memmove just incase... + BurnByteswap(RomMain + Offset, 0x140000); + break; + } + case SEGA_MD_ROM_LOAD16_WORD_SWAP_CONTINUE_040000_100000: { nRet = BurnLoadRom(RomMain + Offset, i, 1); if (nRet) return 1; memcpy(RomMain + 0x100000, RomMain + 0x040000, 0x40000); @@ -2208,7 +2215,7 @@ static void SetupCustomCartridgeMappers() } if ((BurnDrvGetHardwareCode() & 0xff) == HARDWARE_SEGA_MEGADRIVE_PCB_KOF99 || - BurnDrvGetHardwareCode() & 0xff) == HARDWARE_SEGA_MEGADRIVE_PCB_POKEMON) { + (BurnDrvGetHardwareCode() & 0xff) == HARDWARE_SEGA_MEGADRIVE_PCB_POKEMON) { SekOpen(0); SekMapHandler(7, 0xa13000, 0xa1303f, SM_READ); SekSetReadByteHandler(7, Kof99A13000ReadByte); diff --git a/src/burn/drv/megadrive/megadrive.h b/src/burn/drv/megadrive/megadrive.h index 1f25c664c..9d8665cf6 100644 --- a/src/burn/drv/megadrive/megadrive.h +++ b/src/burn/drv/megadrive/megadrive.h @@ -2,6 +2,7 @@ #define SEGA_MD_ROM_LOAD16_WORD_SWAP 0x20 #define SEGA_MD_ROM_LOAD16_BYTE 0x30 #define SEGA_MD_ROM_LOAD16_WORD_SWAP_CONTINUE_040000_100000 0x40 +#define SEGA_MD_ROM_LOAD16_WORD_SWAP_CONTINUE_020000_080000 0x50 #define SEGA_MD_ROM_OFFS_000000 0x01 #define SEGA_MD_ROM_OFFS_000001 0x02 #define SEGA_MD_ROM_OFFS_020000 0x03