From da0316d5a6cdbe61b257515f4802cc6a9ba9b179 Mon Sep 17 00:00:00 2001 From: SBH <49251833+RoseGunsDays@users.noreply.github.com> Date: Mon, 16 Feb 2026 14:29:45 -0700 Subject: [PATCH] Added support for MJ4 Evolution Rev. B --- docs/guide.md | 1 + src/lindbergh/config.h | 1 + src/lindbergh/gameData.c | 3 ++- src/lindbergh/lindbergh.c | 1 + src/lindbergh/patch.c | 40 ++++++++++++++++++++++++++++++++++++++ src/lindbergh/resolution.c | 7 +++++++ 6 files changed, 52 insertions(+), 1 deletion(-) diff --git a/docs/guide.md b/docs/guide.md index dbfd7db..dd8c266 100644 --- a/docs/guide.md +++ b/docs/guide.md @@ -40,6 +40,7 @@ The follow list of games are supported. It is worth noting that there are multip | SEGA Network Taisen Mahjong MJ4 Rev F | SBPN | DVP-0049F | ✓ | ✓ | ✓ | ✓ | | SEGA Network Taisen Mahjong MJ4 Rev G | SBPN | DVP-0049G | ✓ | ✓ | ✓ | ✓ | | SEGA Network Taisen Mahjong MJ4 Evolution | SBTA | DVP-0081 | ✓ | ✓ | ✓ | ✓ | +| SEGA Network Taisen Mahjong MJ4 Evolution Rev B | SBTA | DVP-0081B | ✓ | ✓ | ✓ | ✓ | | Outrun 2 SP SDX | SBMB | DVP-0015 | ✓ | ✓ | ✓ | ✓ | | Outrun 2 SP SDX Rev A | SBMB | DVP-0015A | ✓ | ✓ | ✓ | ✓ | | Primeval Hunt | SBPP | DVP-0048 | ✓ | ✓ | ✓ | ✓ | diff --git a/src/lindbergh/config.h b/src/lindbergh/config.h index e085e9c..5be1187 100644 --- a/src/lindbergh/config.h +++ b/src/lindbergh/config.h @@ -41,6 +41,7 @@ #define MJ4_REVF 0x220ac11 // DVP-0049F #define MJ4_REVG 0x57813a7 // DVP-0049G #define MJ4_EVO 0xb785a0e9 // DVP-0081 +#define MJ4_EVO_REVB 0x7f11d214 // DVP-0081B #define OUTRUN_2_SP_SDX 0x92c196d5 // DVP-0015 #define OUTRUN_2_SP_SDX_REVA 0x4debd5f0 // DVP-0015A #define OUTRUN_2_SP_SDX_REVA_TEST 0x6b2d5c46 // DVP-0015A diff --git a/src/lindbergh/gameData.c b/src/lindbergh/gameData.c index e5a7482..8b5d441 100644 --- a/src/lindbergh/gameData.c +++ b/src/lindbergh/gameData.c @@ -32,7 +32,8 @@ static const GameData gameData[] = { {LETS_GO_JUNGLE, "Let's Go Jungle! Lost on the Island of Spice!", "lgj", "DVP-0011", "SBLU", "2006", "1360x768", WORKING, SEGA_TYPE_3, SHOOTING, 1360, 768, GROUP_LGJ, 0, 0, 0, 0, 0, 0, YELLOW}, {LETS_GO_JUNGLE_REVA, "Let's Go Jungle! Lost on the Island of Spice! Rev A", "lgj-rev-a", "DVP-0011A", "SBLU", "2006", "1360x768", WORKING, SEGA_TYPE_3, SHOOTING, 1360, 768, GROUP_LGJ, 0, 0, 0, 0, 0, 0, YELLOW}, {LETS_GO_JUNGLE_SPECIAL, "Let's Go Jungle! Special!", "lgj-sp", "DVP-0036", "SBNR", "2007", "1024x768", WORKING, SEGA_TYPE_3, SHOOTING, 1024, 768, GROUP_LGJ, 1, 0, 0, 0, 0, 0, YELLOW}, - {MJ4_EVO, "SEGA Network Taisen Mahjong MJ4 Evolution", "mj4-evo", "DVP-0081", "SBTA", "2008", "1024x768", WORKING, SEGA_TYPE_3, MAHJONG, 1024, 768, GROUP_MJ4, 0, 0, 0, 0, 0, 1, YELLOW}, + {MJ4_EVO, "SEGA Network Taisen Mahjong MJ4 Evolution", "mj4-evo", "DVP-0081", "SBTA", "2010", "1024x768", WORKING, SEGA_TYPE_3, MAHJONG, 1024, 768, GROUP_MJ4, 0, 0, 0, 0, 0, 1, YELLOW}, + {MJ4_EVO_REVB, "SEGA Network Taisen Mahjong MJ4 Evolution Rev B", "mj4-evo-rev-b", "DVP-0081B", "SBTA", "2010", "1024x768", WORKING, SEGA_TYPE_3, MAHJONG, 1024, 768, GROUP_MJ4, 0, 0, 0, 0, 0, 1, YELLOW}, {MJ4_REVA, "SEGA Network Taisen Mahjong MJ4 Rev A", "mj4-rev-a", "DVP-0049A", "SBPN", "2007", "1024x768", WORKING, SEGA_TYPE_3, MAHJONG, 1024, 768, GROUP_MJ4, 0, 0, 0, 0, 0, 1, YELLOW}, {MJ4_REVF, "SEGA Network Taisen Mahjong MJ4 Rev F", "mj4-rev-f", "DVP-0049F", "SBPN", "2007", "1024x768", WORKING, SEGA_TYPE_3, MAHJONG, 1024, 768, GROUP_MJ4, 0, 0, 0, 0, 0, 1, YELLOW}, {MJ4_REVG, "SEGA Network Taisen Mahjong MJ4 Rev G", "mj4-rev-g", "DVP-0049G", "SBPN", "2007", "1024x768", WORKING, SEGA_TYPE_3, MAHJONG, 1024, 768, GROUP_MJ4, 0, 0, 0, 0, 0, 1, YELLOW}, diff --git a/src/lindbergh/lindbergh.c b/src/lindbergh/lindbergh.c index b3ad71d..bc27331 100644 --- a/src/lindbergh/lindbergh.c +++ b/src/lindbergh/lindbergh.c @@ -110,6 +110,7 @@ uint32_t cleanElfCRC32[] = { 0xDCC1f8E7, // DVP-0078 | ramboM.elf 0x05647A8E, // DVP-0079 | hummer_Master.elf 0x0AD7CF0F, // DVP-0081 | mj4 + 0xEE2D5861, // DVP-0081B | mj4 0x4442EA15, // DVP-0083 | hummer_Master.elf 0x8DF6BBF9, // DVP-0084 | id5.elf 0x2AF8004E, // DVP-0084A | id5.elf diff --git a/src/lindbergh/patch.c b/src/lindbergh/patch.c index bf4f048..5b021ae 100644 --- a/src/lindbergh/patch.c +++ b/src/lindbergh/patch.c @@ -1950,6 +1950,46 @@ int initPatch() } } break; + case MJ4_EVO_REVB: + { + detourFunction(0x08841fbd, amDongleInit); + detourFunction(0x08840849, amDongleIsAvailable); + detourFunction(0x08840866, amDongleIsDevelop); + detourFunction(0x0884136a, amDongleUpdate); + + // Fixes and patches to bypss network check + amDipswContextAddr = (void *)0x0af9513c; // Address of amDipswContext + detourFunction(0x088405dc, amDipswInit); + detourFunction(0x08840660, amDipswExit); + detourFunction(0x088406d5, amDipswGetData); + detourFunction(0x0884074b, amDipswSetLed); + + patchMemoryFromString(0x080ea0f5, "909090909090"); + detourFunction(0x080e327c, stubRetZero); // skip checks + detourFunction(0x080ee51e, stubRetZero); + patchMemoryFromString(0x080ea0e3, "75"); + patchMemoryFromString(0x08c065b8, "00"); + + patchMemoryFromString(0x080eac5c, "01"); + patchMemoryFromString(0x08c64e00, "ffffffff"); + patchMemoryFromString(0x080e9346, "90909090909090909090"); + patchMemoryFromString(0x080eaca6, "90909090909090909090"); + + patchMemoryFromString(0x0885d08d, "2e2f72616d2f746f2e74787400"); // Patch /home/disk2 folder + patchMemoryFromString(0x0885d0a4, "2e2f72616d2f66726f6d2e74787400"); // Patch /home/disk2 folder + patchMemoryFromString(0x0885d0bd, "2e2f72616d2f2e746d7000"); // Patch /home/disk2 folder + patchMemoryFromString(0x0885d10d, "2e2f72616d00"); // Patch /home/disk2 folder + patchMemoryFromString(0x0885d11d, "2e2f666f6f3100"); // Patch /home/disk2 folder + patchMemoryFromString(0x0885d12e, "2e2f666f6f3200"); // Patch /home/disk2 folder + patchMemoryFromString(0x08860885, "2e2f72616d2f746d7000"); // Patch /home/disk2 folder + patchMemoryFromString(0x08863fef, "2e2f00"); // Patch /home/disk2 folder + + if (GPUVendor != NVIDIA_GPU) + { + detourFunction(0x08051314, gl_ProgramStringARB); + } + } + break; case MJ4_REVA: { setVariable(0x0a250914, 2); diff --git a/src/lindbergh/resolution.c b/src/lindbergh/resolution.c index f81f4b9..94b5fd0 100644 --- a/src/lindbergh/resolution.c +++ b/src/lindbergh/resolution.c @@ -2560,6 +2560,13 @@ int initResolutionPatches() patchMemoryFromString(0x08053b24, "b803000000"); // Skips resolution set by the Dip Switches. } break; + case MJ4_EVO_REVB: + { + patchMemoryFromString(0x08052961, "01"); // Enable Anti Alias + patchMemoryFromString(0x0805295a, "03"); // Force 1024x768 + patchMemoryFromString(0x08053b24, "b803000000"); // Skips resolution set by the Dip Switches. + } + break; case OUTRUN_2_SP_SDX: { if (gWidth <= 800 && gHeight <= 480)