2012-01-21 21:57:41 +01:00
# include "video.hpp"
# include "menu/menu.hpp"
# include "loader/disc.h"
# include "loader/alt_ios.h"
# include "loader/sys.h"
# include "loader/wbfs.h"
# include "text.hpp"
# include <ogc/system.h>
# include <unistd.h>
# include "DeviceHandler.hpp"
# include "homebrew.h"
# include "gecko.h"
# include "wifi_gecko.h"
2012-07-16 16:05:57 +02:00
# include "cios.h"
2012-01-21 21:57:41 +01:00
# include "nand.hpp"
2012-02-18 16:29:22 +01:00
# include "defines.h"
# include "svnrev.h"
2012-01-21 21:57:41 +01:00
CMenu * mainMenu ;
2012-05-13 17:13:33 +02:00
extern " C "
{
extern void __exception_setreload ( int t ) ;
2012-07-07 21:09:56 +02:00
void ShowError ( const wstringEx & error ) { mainMenu - > error ( error ) ; }
void HideWaitMessage ( ) { mainMenu - > _hideWaitMessage ( ) ; }
2012-05-13 17:13:33 +02:00
}
2012-01-21 21:57:41 +01:00
int main ( int argc , char * * argv )
{
__exception_setreload ( 5 ) ;
2012-06-14 17:27:57 +02:00
geckoinit = InitGecko ( ) ;
2012-01-21 21:57:41 +01:00
2012-05-13 17:13:33 +02:00
// Init video
2012-01-21 21:57:41 +01:00
CVideo vid ;
2012-05-13 17:13:33 +02:00
vid . init ( ) ;
2012-05-16 16:48:01 +02:00
2012-07-06 14:12:03 +02:00
MEM2_init ( 47 ) ; //Should be safe to use
2012-05-13 17:13:33 +02:00
vid . waitMessage ( 0.2f ) ;
2012-01-21 21:57:41 +01:00
2012-06-14 17:27:57 +02:00
AllocSDGeckoBuffer ( ) ;
2012-06-07 18:02:23 +02:00
gprintf ( " \n Welcome to %s (%s-r%s)! \n This is the debug output. \n " , APP_NAME , APP_VERSION , SVN_REV ) ;
2012-01-21 21:57:41 +01:00
char * gameid = NULL ;
2012-04-08 17:54:34 +02:00
bool Emulator_boot = false ;
2012-01-21 21:57:41 +01:00
for ( int i = 0 ; i < argc ; i + + )
{
if ( argv [ i ] ! = NULL & & strcasestr ( argv [ i ] , " ios= " ) ! = NULL & & strlen ( argv [ i ] ) > 4 )
{
while ( argv [ i ] [ 0 ] & & ! isdigit ( argv [ i ] [ 0 ] ) ) argv [ i ] + + ;
if ( atoi ( argv [ i ] ) < 254 & & atoi ( argv [ i ] ) > 0 )
mainIOS = atoi ( argv [ i ] ) ;
}
else if ( strlen ( argv [ i ] ) = = 6 )
{
gameid = argv [ i ] ;
for ( int i = 0 ; i < 5 ; i + + )
if ( ! isalnum ( gameid [ i ] ) )
gameid = NULL ;
}
2012-04-08 17:54:34 +02:00
else if ( argv [ i ] ! = NULL & & strcasestr ( argv [ i ] , " EMULATOR_MAGIC " ) ! = NULL )
Emulator_boot = true ;
2012-01-21 21:57:41 +01:00
}
2012-07-14 18:19:41 +02:00
# ifndef DOLPHIN
2012-01-21 21:57:41 +01:00
// Load Custom IOS
2012-07-07 21:09:56 +02:00
gprintf ( " Loading cIOS: %d \n " , mainIOS ) ;
2012-01-21 21:57:41 +01:00
bool iosOK = loadIOS ( mainIOS , false ) ;
2012-05-13 17:13:33 +02:00
2012-01-21 21:57:41 +01:00
u8 mainIOSBase = 0 ;
2012-07-16 16:05:57 +02:00
D2X ( mainIOS , & mainIOSBase ) ;
if ( ! mainIOSBase )
mainIOSBase = get_ios_base ( ) ;
iosOK = iosOK & & mainIOSBase > 0 ;
2012-05-14 04:21:03 +02:00
gprintf ( " Loaded cIOS: %u has base %u \n " , mainIOS , mainIOSBase ) ;
2012-07-14 18:19:41 +02:00
# else
bool iosOK = true ;
# endif
2012-05-13 17:13:33 +02:00
2012-01-21 21:57:41 +01:00
// Init
Sys_Init ( ) ;
Sys_ExitTo ( EXIT_TO_HBC ) ;
2012-05-13 17:13:33 +02:00
2012-07-07 21:09:56 +02:00
int ret = 1 ;
2012-05-13 17:13:33 +02:00
2012-07-07 21:09:56 +02:00
while ( ret = = 1 )
2012-01-21 21:57:41 +01:00
{
2012-07-07 21:09:56 +02:00
Open_Inputs ( ) ; //(re)init wiimote
2012-07-14 18:19:41 +02:00
# ifndef DOLPHIN
2012-07-18 16:09:28 +02:00
const DISC_INTERFACE * handle = DeviceHandler : : GetUSB0Interface ( ) ;
2012-07-07 21:09:56 +02:00
bool deviceAvailable = false ;
2012-01-21 21:57:41 +01:00
u8 timeout = 0 ;
2012-07-18 16:09:28 +02:00
DeviceHandler : : Instance ( ) - > MountSD ( ) ;
2012-01-21 21:57:41 +01:00
while ( ! deviceAvailable & & timeout + + ! = 20 )
{
2012-07-18 16:09:28 +02:00
deviceAvailable = ( handle - > startup ( ) & & handle - > isInserted ( ) ) ;
if ( deviceAvailable )
break ;
usleep ( 50000 ) ;
}
DeviceHandler : : Instance ( ) - > MountAllUSB ( ) ;
2012-04-29 17:42:35 +02:00
if ( DeviceHandler : : Instance ( ) - > IsInserted ( SD ) )
deviceAvailable = true ;
2012-07-14 18:19:41 +02:00
# else
bool deviceAvailable = true ;
DeviceHandler : : Instance ( ) - > MountAll ( ) ;
sleep ( 1 ) ;
# endif
2012-01-21 21:57:41 +01:00
bool dipOK = Disc_Init ( ) > = 0 ;
2012-07-07 21:09:56 +02:00
mainMenu = new CMenu ( vid ) ;
mainMenu - > init ( ) ;
2012-04-08 17:54:34 +02:00
2012-07-07 21:09:56 +02:00
if ( ! iosOK )
2012-01-21 21:57:41 +01:00
{
2012-07-07 21:09:56 +02:00
mainMenu - > terror ( " errboot1 " , L " d2x cIOSs rev6 or later are required! \n cIOSs 249 base 56 and 250 base 57 are enough for all your games. \n More cIOSs could make wiiflow unstable! " ) ;
2012-07-07 00:38:21 +02:00
break ;
}
2012-07-07 21:09:56 +02:00
else if ( ! deviceAvailable )
2012-07-07 00:38:21 +02:00
{
2012-07-07 21:09:56 +02:00
mainMenu - > terror ( " errboot2 " , L " Could not find a device to save configuration files on! " ) ;
2012-01-21 21:57:41 +01:00
break ;
}
2012-07-07 21:09:56 +02:00
else if ( ! dipOK )
2012-01-21 21:57:41 +01:00
{
2012-07-07 21:09:56 +02:00
mainMenu - > terror ( " errboot3 " , L " Could not initialize the DIP module! " ) ;
2012-01-21 21:57:41 +01:00
break ;
}
2012-07-07 21:09:56 +02:00
else if ( gameid ! = NULL & & strlen ( gameid ) = = 6 )
mainMenu - > directlaunch ( gameid ) ;
2012-01-21 21:57:41 +01:00
else
{
2012-07-07 21:09:56 +02:00
if ( Emulator_boot )
mainMenu - > m_Emulator_boot = true ;
ret = mainMenu - > main ( ) ;
2012-01-21 21:57:41 +01:00
}
2012-07-07 21:09:56 +02:00
}
2012-07-11 16:59:09 +02:00
mainMenu - > cleanup ( ) ;
2012-07-14 18:19:41 +02:00
# ifndef DOLPHIN
2012-07-08 16:56:07 +02:00
ISFS_Deinitialize ( ) ;
2012-07-14 18:19:41 +02:00
# endif
2012-01-21 21:57:41 +01:00
Sys_Exit ( ) ;
2012-07-06 21:59:45 +02:00
exit ( 1 ) ;
2012-01-21 21:57:41 +01:00
return 0 ;
2012-07-06 21:59:45 +02:00
}