From f764b0eb19b248e325e074f752f6e2536504dd60 Mon Sep 17 00:00:00 2001 From: Extrems Date: Wed, 19 Feb 2025 10:26:25 -0500 Subject: [PATCH] - Detect WODE using ExtCFG disc ID. --- cube/swiss/include/swiss.h | 1 + cube/swiss/source/devices/wode/deviceHandler-WODE.c | 8 +++++++- cube/swiss/source/main.c | 10 ++++++++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/cube/swiss/include/swiss.h b/cube/swiss/include/swiss.h index 6e3ac0ae..7fa62af6 100644 --- a/cube/swiss/include/swiss.h +++ b/cube/swiss/include/swiss.h @@ -40,6 +40,7 @@ extern file_handle curDir; extern char IPLInfo[256] __attribute__((aligned(32))); extern dvdcmdblk commandBlock; extern dvddrvinfo driveInfo; +extern dvddiskid *DVDDiskID; extern DiskHeader GCMDisk; extern s32 DVD_LowGetCoverStatus(void); diff --git a/cube/swiss/source/devices/wode/deviceHandler-WODE.c b/cube/swiss/source/devices/wode/deviceHandler-WODE.c index 95b4c9b0..08e5a09d 100644 --- a/cube/swiss/source/devices/wode/deviceHandler-WODE.c +++ b/cube/swiss/source/devices/wode/deviceHandler-WODE.c @@ -251,9 +251,15 @@ s32 deviceHandler_WODE_closeFile(file_handle* file) { return 0; } +static const dvddiskid WODEExtCFG = { + .gamename = "GWDP", + .company = "CF", + .magic = DVD_MAGIC +}; + bool deviceHandler_WODE_test() { while(DVD_LowGetCoverStatus() == 0); - return swissSettings.hasDVDDrive && driveInfo.rel_date == 0x20080714; + return swissSettings.hasDVDDrive && !memcmp(DVDDiskID, &WODEExtCFG, sizeof(dvddiskid)); } u32 deviceHandler_WODE_emulated() { diff --git a/cube/swiss/source/main.c b/cube/swiss/source/main.c index 6bd79b71..e9ca82b8 100644 --- a/cube/swiss/source/main.c +++ b/cube/swiss/source/main.c @@ -40,6 +40,7 @@ dvdcmdblk commandBlock; dvddrvinfo driveInfo __attribute__((aligned(32))); +dvddiskid *DVDDiskID = (dvddiskid*)0x80000000; SwissSettings swissSettings; static void driveInfoCallback(s32 result, dvdcmdblk *block) { @@ -84,7 +85,12 @@ void Initialise(void) void __SYS_PreInit(void) { - DCZeroRange((void *)0x80000000, 0x3100); + u32 start = 0x80000000, end = 0x80003100; + + if (DVDDiskID->magic == DVD_MAGIC) + start += sizeof(dvddiskid); + + DCZeroRange((void *)start, end - start); switch (((vu16 *)0xCC004000)[20] & 7) { case 0: @@ -109,7 +115,7 @@ void __SYS_PreInit(void) else *(u32 *)0x8000002C = SYS_CONSOLE_DEVELOPMENT_HW1; - *(u32 *)0x8000002C += ((vu32*)0xCC003000)[11] >> 28; + *(u32 *)0x8000002C += ((vu32 *)0xCC003000)[11] >> 28; *(u32 *)0x800000F0 = 0x1800000; *(u32 *)0x800000F8 = TB_BUS_CLOCK;