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-07-26 00:12:17 +02:00
|
|
|
vid.waitMessage(0.1f);
|
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(" \nWelcome to %s (%s-r%s)!\nThis 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-22 20:39:34 +02:00
|
|
|
mainMenu->terror("errboot1", L"No cIOS found!\ncIOS d2x 249 base 56 and 250 base 57 are enough for all your games.");
|
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
|
|
|
}
|