diff --git a/SDL/src/main/wii/SDL_wii_main.c b/SDL/src/main/wii/SDL_wii_main.c index e98bafa..f49c125 100644 --- a/SDL/src/main/wii/SDL_wii_main.c +++ b/SDL/src/main/wii/SDL_wii_main.c @@ -45,14 +45,61 @@ void Terminate() if (ShutdownRequested) ShutdownWii(); else if (ResetRequested) RestartHomebrewChannel(); } -#endif +static bool FindIOS(u32 ios) +{ + s32 ret; + u32 n; + + u64 *titles = NULL; + u32 num_titles=0; + + ret = ES_GetNumTitles(&num_titles); + if (ret < 0) + return false; + + if(num_titles < 1) + return false; + + titles = (u64 *)memalign(32, num_titles * sizeof(u64) + 32); + if (!titles) + return false; + + ret = ES_GetTitles(titles, num_titles); + if (ret < 0) + { + free(titles); + return false; + } + + for(n=0; n < num_titles; n++) + { + if((titles[n] & 0xFFFFFFFF)==ios) + { + free(titles); + return true; + } + } + free(titles); + return false; +} +#endif /* Do initialisation which has to be done first for the console to work */ /* Entry point */ int main(int argc, char *argv[]) { #ifdef HW_RVL + u32 version = IOS_GetVersion(); + + if(version != 58) + { + if(FindIOS(58)) + IOS_ReloadIOS(58); + else if((version < 61 || version >= 200) && FindIOS(61)) + IOS_ReloadIOS(61); + } + // Wii Power/Reset buttons WPAD_Init(); WPAD_SetPowerButtonCallback((WPADShutdownCallback)ShutdownCB);