mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-12-22 09:51:55 +01:00
* Added QuadForce version detection up to v4.1
* Added QuadForce USB Support * Optimized DM/DML/QF detection code
This commit is contained in:
parent
304c0ef5ec
commit
96b36741d4
@ -2,8 +2,8 @@
|
||||
<app version="1">
|
||||
<name> USB Loader GX</name>
|
||||
<coder>USB Loader GX Team</coder>
|
||||
<version>3.0 r1214</version>
|
||||
<release_date>20130430170233</release_date>
|
||||
<version>3.0 r1215</version>
|
||||
<release_date>20130526121306</release_date>
|
||||
<!-- // remove this line to enable arguments
|
||||
<arguments>
|
||||
<arg>--ios=250</arg>
|
||||
|
@ -239,7 +239,7 @@ u32 GCGames::LoadAllGames(void)
|
||||
//! Display only one game if it is present on both SD and USB.
|
||||
if(memcmp(HeaderList[n].id, sdGCList[i].id, 6) == 0)
|
||||
{
|
||||
if(IosLoader::GetMIOSInfo() == DIOS_MIOS) // DIOS MIOS - Show only the game on USB
|
||||
if(IosLoader::GetMIOSInfo() == DIOS_MIOS || IosLoader::GetMIOSInfo() == QUADFORCE_USB) // DIOS MIOS - Show only the game on USB
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
@ -76,6 +76,9 @@ static const char * DMLVersions[] =
|
||||
"v2.9+", // DML 2.9
|
||||
"v2.9+", // DM 2.9
|
||||
"v2.0", // QuadForce v2.0
|
||||
"v3.0", // QuadForce v3.0
|
||||
"v4.0+", // QuadForce v4.0 SD
|
||||
"v4.1", // QuadForce v4.1 USB
|
||||
};
|
||||
|
||||
|
||||
@ -301,6 +304,8 @@ void WindowCredits()
|
||||
snprintf(GCInfo, sizeof(GCInfo), "DIOS-MIOS Lite %s", DMLVersions[IosLoader::GetDMLVersion()]);
|
||||
else if (currentMIOS == QUADFORCE)
|
||||
snprintf(GCInfo, sizeof(GCInfo), "QuadForce %s", DMLVersions[IosLoader::GetDMLVersion()]);
|
||||
else if (currentMIOS == QUADFORCE_USB)
|
||||
snprintf(GCInfo, sizeof(GCInfo), "QuadForce USB %s", DMLVersions[IosLoader::GetDMLVersion()]);
|
||||
|
||||
// Check if Devolution is available
|
||||
char DEVO_loader_path[100];
|
||||
|
@ -245,18 +245,26 @@ u8 IosLoader::GetMIOSInfo(bool checkedOnBoot)
|
||||
else if((*(u32*)(appfile+i)) == 'Quad' && (*(u32*)(appfile+i+4)) == 'Forc')
|
||||
{
|
||||
currentMIOS = QUADFORCE;
|
||||
if((*(u32*)(appfile+i+8)) == 'e 2.') // QuadForce 2.0
|
||||
{
|
||||
gprintf("QuadForce v2.0 \n");
|
||||
currentDMLVersion = DML_VERSION_QUAD_2_0;
|
||||
}
|
||||
else // QuadForce 0.1
|
||||
{
|
||||
gprintf("QuadForce v0.1 \n");
|
||||
currentDMLVersion = DML_VERSION_QUAD_0_1;
|
||||
}
|
||||
char* QF_version = (char*)(appfile+i+10);
|
||||
gprintf("QuadForce v%.1f \n", atof(QF_version));
|
||||
if(atof(QF_version) >= 4.0) currentDMLVersion = DML_VERSION_QUAD_4_0;
|
||||
else if(atof(QF_version) == 3.0) currentDMLVersion = DML_VERSION_QUAD_3_0;
|
||||
else if(atof(QF_version) == 2.0) currentDMLVersion = DML_VERSION_QUAD_2_0;
|
||||
else currentDMLVersion = DML_VERSION_QUAD_0_1;
|
||||
|
||||
break;
|
||||
}
|
||||
else if((*(u32*)(appfile+i)) == 'GCLo' && (*(u32*)(appfile+i+4)) == 'ader')
|
||||
{
|
||||
// QuadForce USB v4.1 binary doesn't have QF version, checking: GCLoader....Built : %s %s.....May 26 2013.00:15:28
|
||||
if((*(u32*)(appfile+i+32)) == 'May ' && (*(u32*)(appfile+i+44)) == '00:1' && (*(u32*)(appfile+i+48)) == '5:28')
|
||||
{
|
||||
currentMIOS = QUADFORCE_USB;
|
||||
gprintf("QuadForce USB v4.1\n");
|
||||
currentDMLVersion = DML_VERSION_QUAD_4_1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
free(appfile);
|
||||
}
|
||||
@ -279,121 +287,63 @@ u8 IosLoader::GetDMLVersion(char* releaseDate)
|
||||
return currentDMLVersion;
|
||||
}
|
||||
|
||||
struct tm time;
|
||||
|
||||
// Timestamp of DML r52
|
||||
strptime("Mar 7 2012 19:36:06", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_r52_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 1.2
|
||||
strptime("Apr 24 2012 19:44:08", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_1_2_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 1.4b
|
||||
strptime("May 7 2012 21:12:47", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_1_4b_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 1.5
|
||||
strptime("Jun 14 2012 00:05:09", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_1_5_time = mktime(&time);
|
||||
|
||||
// Timestamp of DM 2.0
|
||||
strptime("Jun 23 2012 19:43:21", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dm_2_0_time = mktime(&time);
|
||||
|
||||
// Timestamp of DM 2.1
|
||||
strptime("Jul 17 2012 11:25:35", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dm_2_1_time = mktime(&time);
|
||||
|
||||
// Timestamp of DM 2.2 initial release
|
||||
strptime("Jul 18 2012 16:57:47", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dm_2_2_time = mktime(&time);
|
||||
|
||||
// Timestamp of DM 2.2 update2
|
||||
strptime("Jul 20 2012 14:49:47", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dm_2_2_2_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 2.2 initial release
|
||||
strptime("Aug 6 2012 15:19:17", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_2_2_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 2.2 update1
|
||||
strptime("Aug 13 2012 00:12:46", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_2_2_1_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 2.3 mirror link
|
||||
strptime("Sep 24 2012 13:13:42", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_2_3m_time = mktime(&time);
|
||||
|
||||
// Timestamp of DM 2.3
|
||||
strptime("Sep 24 2012 15:51:54", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dm_2_3_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 2.3 main link
|
||||
strptime("Sep 25 2012 03:03:41", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_2_3_time = mktime(&time);
|
||||
|
||||
// Timestamp of DM 2.4
|
||||
strptime("Oct 21 2012 22:57:12", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dm_2_4_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 2.4
|
||||
strptime("Oct 21 2012 22:57:17", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_2_4_time = mktime(&time);
|
||||
|
||||
// Timestamp of DM 2.5
|
||||
strptime("Nov 9 2012 21:18:52", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dm_2_5_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 2.5
|
||||
strptime("Nov 9 2012 21:18:56", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_2_5_time = mktime(&time);
|
||||
|
||||
// Timestamp of DM 2.6.0
|
||||
strptime("Dec 1 2012 01:52:53", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dm_2_6_0_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 2.6
|
||||
strptime("Dec 1 2012 16:22:29", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_2_6_time = mktime(&time);
|
||||
|
||||
// Timestamp of DM 2.6.1
|
||||
strptime("Dec 1 2012 16:42:34", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dm_2_6_1_time = mktime(&time);
|
||||
|
||||
// Timestamp of DM 2.7
|
||||
strptime("Feb 20 2013 14:54:33", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dm_2_7_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 2.7
|
||||
strptime("Feb 21 2013 03:13:49", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_2_7_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 2.8
|
||||
strptime("Feb 24 2013 13:30:29", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_2_8_time = mktime(&time);
|
||||
|
||||
// Timestamp of DM 2.8
|
||||
strptime("Feb 24 2013 14:17:03", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dm_2_8_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 2.9
|
||||
strptime("Apr 5 2013 18:20:33", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_2_9_time = mktime(&time);
|
||||
|
||||
// Timestamp of DM 2.9
|
||||
strptime("Apr 5 2013 18:29:35", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dm_2_9_time = mktime(&time);
|
||||
|
||||
|
||||
// Current installed version
|
||||
gprintf("built on %s\n", releaseDate);
|
||||
|
||||
struct tm time;
|
||||
strptime(releaseDate, "%b %d %Y %H:%M:%S", &time);
|
||||
time_t unixTime = mktime(&time);
|
||||
|
||||
if(currentMIOS == DIOS_MIOS)
|
||||
{
|
||||
// Timestamp of DM 2.0
|
||||
strptime("Jun 23 2012 19:43:21", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dm_2_0_time = mktime(&time);
|
||||
|
||||
// Timestamp of DM 2.1
|
||||
strptime("Jul 17 2012 11:25:35", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dm_2_1_time = mktime(&time);
|
||||
|
||||
// Timestamp of DM 2.2 initial release
|
||||
strptime("Jul 18 2012 16:57:47", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dm_2_2_time = mktime(&time);
|
||||
|
||||
// Timestamp of DM 2.2 update2
|
||||
strptime("Jul 20 2012 14:49:47", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dm_2_2_2_time = mktime(&time);
|
||||
|
||||
// Timestamp of DM 2.3
|
||||
strptime("Sep 24 2012 15:51:54", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dm_2_3_time = mktime(&time);
|
||||
|
||||
// Timestamp of DM 2.4
|
||||
strptime("Oct 21 2012 22:57:12", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dm_2_4_time = mktime(&time);
|
||||
|
||||
// Timestamp of DM 2.5
|
||||
strptime("Nov 9 2012 21:18:52", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dm_2_5_time = mktime(&time);
|
||||
|
||||
// Timestamp of DM 2.6.0
|
||||
strptime("Dec 1 2012 01:52:53", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dm_2_6_0_time = mktime(&time);
|
||||
|
||||
// Timestamp of DM 2.6.1
|
||||
strptime("Dec 1 2012 16:42:34", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dm_2_6_1_time = mktime(&time);
|
||||
|
||||
// Timestamp of DM 2.7
|
||||
strptime("Feb 20 2013 14:54:33", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dm_2_7_time = mktime(&time);
|
||||
|
||||
// Timestamp of DM 2.8
|
||||
strptime("Feb 24 2013 14:17:03", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dm_2_8_time = mktime(&time);
|
||||
|
||||
// Timestamp of DM 2.9
|
||||
strptime("Apr 5 2013 18:29:35", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dm_2_9_time = mktime(&time);
|
||||
|
||||
if(difftime(unixTime, dm_2_9_time) >= 0) currentDMLVersion = DML_VERSION_DM_2_9;
|
||||
else if(difftime(unixTime, dm_2_8_time) >= 0) currentDMLVersion = DML_VERSION_DM_2_8;
|
||||
else if(difftime(unixTime, dm_2_7_time) >= 0) currentDMLVersion = DML_VERSION_DM_2_7;
|
||||
@ -409,6 +359,61 @@ u8 IosLoader::GetDMLVersion(char* releaseDate)
|
||||
}
|
||||
else if(currentMIOS == DIOS_MIOS_LITE)
|
||||
{
|
||||
// Timestamp of DML r52
|
||||
strptime("Mar 7 2012 19:36:06", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_r52_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 1.2
|
||||
strptime("Apr 24 2012 19:44:08", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_1_2_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 1.4b
|
||||
strptime("May 7 2012 21:12:47", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_1_4b_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 1.5
|
||||
strptime("Jun 14 2012 00:05:09", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_1_5_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 2.2 initial release
|
||||
strptime("Aug 6 2012 15:19:17", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_2_2_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 2.2 update1
|
||||
strptime("Aug 13 2012 00:12:46", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_2_2_1_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 2.3 mirror link
|
||||
strptime("Sep 24 2012 13:13:42", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_2_3m_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 2.3 main link
|
||||
strptime("Sep 25 2012 03:03:41", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_2_3_time = mktime(&time);
|
||||
// Timestamp of DML 2.4
|
||||
strptime("Oct 21 2012 22:57:17", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_2_4_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 2.5
|
||||
strptime("Nov 9 2012 21:18:56", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_2_5_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 2.6
|
||||
strptime("Dec 1 2012 16:22:29", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_2_6_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 2.7
|
||||
strptime("Feb 21 2013 03:13:49", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_2_7_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 2.8
|
||||
strptime("Feb 24 2013 13:30:29", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_2_8_time = mktime(&time);
|
||||
|
||||
// Timestamp of DML 2.9
|
||||
strptime("Apr 5 2013 18:20:33", "%b %d %Y %H:%M:%S", &time);
|
||||
const time_t dml_2_9_time = mktime(&time);
|
||||
|
||||
if(difftime(unixTime, dml_2_9_time) >= 0) currentDMLVersion = DML_VERSION_DML_2_9;
|
||||
else if(difftime(unixTime, dml_2_8_time) >= 0) currentDMLVersion = DML_VERSION_DML_2_8;
|
||||
else if(difftime(unixTime, dml_2_7_time) >= 0) currentDMLVersion = DML_VERSION_DML_2_7;
|
||||
|
@ -12,6 +12,7 @@ enum MiosInfo
|
||||
DIOS_MIOS,
|
||||
DIOS_MIOS_LITE,
|
||||
QUADFORCE,
|
||||
QUADFORCE_USB,
|
||||
};
|
||||
|
||||
enum DMLVersions
|
||||
@ -60,6 +61,9 @@ enum DMLVersions
|
||||
DML_VERSION_DML_2_9, // Apr 5 2013 18:20:33
|
||||
DML_VERSION_DM_2_9, // Apr 5 2013 18:29:35
|
||||
DML_VERSION_QUAD_2_0, // Apr 30 2013 17:31:32
|
||||
DML_VERSION_QUAD_3_0, // May 8 2013 22:21:44
|
||||
DML_VERSION_QUAD_4_0, // May 12 2013 20:22:57
|
||||
DML_VERSION_QUAD_4_1, // May 26 2013 ??:??:?? (USB)
|
||||
DML_VERSION_MAX_VERSION,
|
||||
};
|
||||
|
||||
|
@ -77,7 +77,7 @@ int GameBooter::BootGCMode(struct discHdr *gameHdr)
|
||||
|
||||
// DIOS MIOS (Lite) and QuadForce
|
||||
int currentMIOS = IosLoader::GetMIOSInfo();
|
||||
if(currentMIOS == DIOS_MIOS || currentMIOS == DIOS_MIOS_LITE || currentMIOS == QUADFORCE)
|
||||
if(currentMIOS == DIOS_MIOS || currentMIOS == DIOS_MIOS_LITE || currentMIOS == QUADFORCE || currentMIOS == QUADFORCE_USB)
|
||||
return BootDIOSMIOS(gameHdr);
|
||||
|
||||
// MIOS or Wiigator cMIOS
|
||||
@ -431,7 +431,7 @@ int GameBooter::BootDIOSMIOS(struct discHdr *gameHdr)
|
||||
|
||||
int currentMIOS = IosLoader::GetMIOSInfo();
|
||||
// DIOS MIOS
|
||||
if(currentMIOS == DIOS_MIOS)
|
||||
if(currentMIOS == DIOS_MIOS || currentMIOS == QUADFORCE_USB)
|
||||
{
|
||||
// Check Main GameCube Path location
|
||||
if(strncmp(Settings.GameCubePath, "sd", 2) == 0 || strncmp(DeviceHandler::PathToFSName(Settings.GameCubePath), "FAT", 3) != 0)
|
||||
|
Loading…
Reference in New Issue
Block a user