//硬件初始化 void borad_HarwareInit(void) { //OS_ERR err; //CPU_SR_ALLOC(); delay_init(168); //时钟初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断分组配置 uart_init(115200); //串口初始化 INTX_DISABLE(); //关中断,防止滴答定时器对外设初始化的打扰 LED_Init(); //LED初始化 LCD_Init(); //LCD初始化 POINT_COLOR = RED; LCD_ShowString(30,10,200,16,16,"HardWare: STM32F4"); LCD_ShowString(30,30,200,16,16,"SotfWareSystem:UCOSIII,FATFS"); LCD_ShowString(30,50,200,16,16,"STM32_NC"); LCD_ShowString(30,70,200,16,16,"HuBei University of Technology"); LCD_ShowString(30,90,200,16,16,"2016/1/16"); //SD卡初始化 SDCard_Init(); INTX_ENABLE(); //开中断 }
void Subsystem_Init(void) { /* Initialize Wiimote subsystem */ //Wpad_Init(); /* Mount SDHC */ SDCard_Init(); USBDevice_Init(); }
int Sys_IosReload(int IOS) { s32 ret = -1; //shutdown SD and USB before IOS Reload in DiscWait SDCard_deInit(); USBDevice_deInit(); WPAD_Flush(0); WPAD_Disconnect(0); WPAD_Shutdown(); WDVD_Close(); USBStorage_Deinit(); if (IOS == 249 || IOS == 222 || IOS == 223) { int i; for (i = 0; i < 10; i++) { ret = IOS_ReloadIOS(IOS); if (ret < 0) return ret; if (IOS == 222 || IOS == 223) load_ehc_module(); ret = WBFS_Init(WBFS_DEVICE_USB); if (!(ret < 0)) break; sleep(1); USBStorage_Deinit(); } if (ret>=0) { ret = Disc_Init(); if (ret>=0) { ret = WBFS_Open(); } } else Sys_BackToLoader(); } PAD_Init(); Wpad_Init(); WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR); // WPAD_SetVRes(WPAD_CHAN_ALL, screenwidth, screenheight); //reinitialize SD and USB SDCard_Init(); USBDevice_Init(); return ret; }
int Sys_ChangeIos(int ios) { s32 prevIos = IOS_GetVersion(); SDCard_deInit(); USBDevice_deInit(); WPAD_Flush(0); WPAD_Disconnect(0); WPAD_Shutdown(); WDVD_Close(); USBStorage2_Deinit(); s32 ret = IOS_ReloadIOSsafe(ios); if (ret < 0) { ios = prevIos; } SDCard_Init(); if (ios == 222 || ios == 223) { load_ehc_module(); } USBDevice_Init(); PAD_Init(); Wpad_Init(); WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR); WPAD_SetVRes(WPAD_CHAN_ALL, screenwidth, screenheight); WBFS_Init(WBFS_DEVICE_USB); Disc_Init(); if (Sys_IsHermes()) { WBFS_OpenNamed((char *) &game_partition); } else { WBFS_Open(); } return ret; }
int main(int argc, char **argv) { u32 cookie; FILE *exeFile = NULL; void *exeBuffer = (void *)EXECUTABLE_MEM_ADDR; int exeSize = 0; u32 exeEntryPointAddress = 0; entrypoint exeEntryPoint; /* int videomod */ InitVideo(); /* get imagedata */ u8 * imgdata = GetImageData(); /* fadein of image */ for(int i = 0; i < 255; i = i+10) { if(i>255) i = 255; Background_Show(0, 0, 0, imgdata, 0, 1, 1, i); Menu_Render(); } /* check devices */ SDCard_Init(); USBDevice_Init(); char cfgpath[256]; /* Open dol File and check exist */ sprintf(cfgpath, PATH1); exeFile = fopen (cfgpath ,"rb"); if (exeFile==NULL) { sprintf(cfgpath, PATH2); exeFile = fopen (cfgpath ,"rb"); } if (exeFile==NULL) { sprintf(cfgpath, PATH3); exeFile = fopen (cfgpath ,"rb"); } if (exeFile==NULL) { sprintf(cfgpath, PATH4); exeFile = fopen (cfgpath ,"rb"); } if (PACK2) { if (exeFile==NULL) { sprintf(cfgpath, PATH5); exeFile = fopen (cfgpath ,"rb"); } if (exeFile==NULL) { sprintf(cfgpath, PATH6); exeFile = fopen (cfgpath ,"rb"); } if (exeFile==NULL) { sprintf(cfgpath, PATH7); exeFile = fopen (cfgpath ,"rb"); } if (exeFile==NULL) { sprintf(cfgpath, PATH8); exeFile = fopen (cfgpath ,"rb"); } } if (PACK3) { if (exeFile==NULL) { sprintf(cfgpath, PATH9); exeFile = fopen (cfgpath ,"rb"); } if (exeFile==NULL) { sprintf(cfgpath, PATH10); exeFile = fopen (cfgpath ,"rb"); } if (exeFile==NULL) { sprintf(cfgpath, PATH11); exeFile = fopen (cfgpath ,"rb"); } if (exeFile==NULL) { sprintf(cfgpath, PATH12); exeFile = fopen (cfgpath ,"rb"); } } if (PACK4) { if (exeFile==NULL) { sprintf(cfgpath, PATH13); exeFile = fopen (cfgpath ,"rb"); } if (exeFile==NULL) { sprintf(cfgpath, PATH14); exeFile = fopen (cfgpath ,"rb"); } if (exeFile==NULL) { sprintf(cfgpath, PATH15); exeFile = fopen (cfgpath ,"rb"); } if (exeFile==NULL) { sprintf(cfgpath, PATH16); exeFile = fopen (cfgpath ,"rb"); } } // if nothing found exiting if (exeFile==NULL) { printf("\n\n\t\tCan't find DOL File...\n"); Menu_Render(); sleep(3); fclose (exeFile); SDCard_deInit(); USBDevice_deInit(); StopGX(); SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); } fseek (exeFile, 0, SEEK_END); exeSize = ftell(exeFile); fseek (exeFile, 0, SEEK_SET); if(fread (exeBuffer, 1, exeSize, exeFile) != (unsigned int) exeSize) { printf("\n\n\t\tCan't open DOL File...\n"); Menu_Render(); fclose (exeFile); sleep(3); SDCard_deInit(); USBDevice_deInit(); StopGX(); SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); } fclose (exeFile); /* load entry point */ struct __argv args; bzero(&args, sizeof(args)); args.argvMagic = ARGV_MAGIC; args.length = strlen(cfgpath) + 2; args.commandLine = (char*)malloc(args.length); if (!args.commandLine) SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); strcpy(args.commandLine, cfgpath); args.commandLine[args.length - 1] = '\0'; args.argc = 1; args.argv = &args.commandLine; args.endARGV = args.argv + 1; int ret = valid_elf_image(exeBuffer); if (ret == 1) exeEntryPointAddress = load_elf_image(exeBuffer); else exeEntryPointAddress = load_dol_image(exeBuffer, &args); /* fadeout of image */ for(int i = 255; i > 1; i = i-7) { if(i < 0) i = 0; Background_Show(0, 0, 0, imgdata, 0, 1, 1, i); Menu_Render(); } SDCard_deInit(); USBDevice_deInit(); StopGX(); if (exeEntryPointAddress == 0) { printf("EntryPointAddress failed...\n"); Menu_Render(); sleep(3); fclose (exeFile); SDCard_deInit(); USBDevice_deInit(); StopGX(); SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);; } exeEntryPoint = (entrypoint) exeEntryPointAddress; /* cleaning up and load dol */ SYS_ResetSystem(SYS_SHUTDOWN, 0, 0); _CPU_ISR_Disable (cookie); __exception_closeall (); exeEntryPoint (); _CPU_ISR_Restore (cookie); return 0; }
int main(int argc, char **argv) { u32 cookie; FILE *exeFile = NULL; void *exeBuffer = (void *)EXECUTABLE_MEM_ADDR; u32 exeSize = 0; u32 exeEntryPointAddress = 0; entrypoint exeEntryPoint; __exception_setreload(0); IOS_ReloadIOS(58); /* int videomod */ InitVideo(); /* get imagedata */ u8 * imgdata = GetImageData(); fadein(imgdata); /* check devices */ SDCard_Init(); USBDevice_Init(); char cfgpath[256]; bool result = false; sprintf(cfgpath, "sd:/config/SaveGame_Manager_GX/SaveGame_Manager_GX.cfg"); result = cfg_parsefile(cfgpath, &cfg_set); if(!result) //no cfg-File on SD: try USB: { sprintf(cfgpath, "usb:config/SaveGame_Manager_GX/SaveGame_Manager_GX.cfg"); result = cfg_parsefile(cfgpath, &cfg_set); } if(result) { sprintf(cfgpath, "%sboot.dol", update_path); /* Open dol File and check exist */ exeFile = fopen (cfgpath, "rb"); if (exeFile==NULL) { sprintf(cfgpath, "%sboot.elf", update_path); exeFile = fopen (cfgpath,"rb"); } if (exeFile==NULL) result = false; else result = true; } if(!result) // non cfg-File loaded or update_path not set { /* Open dol File and check exist */ sprintf(cfgpath, "sd:/apps/SaveGame_Manager_GX/boot.dol"); exeFile = fopen (cfgpath ,"rb"); if (exeFile==NULL) { sprintf(cfgpath, "sd:/apps/SaveGame_Manager_GX/boot.elf"); exeFile = fopen (cfgpath ,"rb"); } if (exeFile==NULL) { sprintf(cfgpath, "usb:/apps/SaveGame_Manager_GX/boot.dol"); exeFile = fopen (cfgpath ,"rb"); } if (exeFile==NULL) { sprintf(cfgpath, "usb:/apps/SaveGame_Manager_GX/boot.elf"); exeFile = fopen (cfgpath ,"rb"); } if (exeFile==NULL) { sprintf(cfgpath, "sd:/apps/SaveGameManagerGX/boot.dol"); exeFile = fopen (cfgpath ,"rb"); } if (exeFile==NULL) { sprintf(cfgpath, "sd:/apps/SaveGameManagerGX/boot.elf"); exeFile = fopen (cfgpath ,"rb"); } if (exeFile==NULL) { sprintf(cfgpath, "usb:/apps/SaveGameManagerGX/boot.dol"); exeFile = fopen (cfgpath ,"rb"); } if (exeFile==NULL) { sprintf(cfgpath, "usb:/apps/SaveGameManagerGX/boot.elf"); exeFile = fopen (cfgpath ,"rb"); } // if nothing found exiting if (exeFile==NULL) { fadeout(imgdata); fclose (exeFile); SDCard_deInit(); USBDevice_deInit(); StopGX(); free(imgdata); SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); } } fseek (exeFile, 0, SEEK_END); exeSize = ftell(exeFile); rewind (exeFile); if(fread (exeBuffer, 1, exeSize, exeFile) != exeSize) { fadeout(imgdata); fclose (exeFile); SDCard_deInit(); USBDevice_deInit(); StopGX(); free(imgdata); SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); } fclose (exeFile); /* load entry point */ struct __argv args; bzero(&args, sizeof(args)); args.argvMagic = ARGV_MAGIC; args.length = strlen(cfgpath) + 2; args.commandLine = (char*)malloc(args.length); if (!args.commandLine) SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); strcpy(args.commandLine, cfgpath); args.commandLine[args.length - 1] = '\0'; args.argc = 1; args.argv = &args.commandLine; args.endARGV = args.argv + 1; u8 * appboot_buff = (u8 *) malloc(app_booter_dol_size); if(!appboot_buff) { fadeout(imgdata); SDCard_deInit(); USBDevice_deInit(); StopGX(); free(imgdata); SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); } memcpy(appboot_buff, app_booter_dol, app_booter_dol_size); exeEntryPointAddress = load_dol_image(appboot_buff, &args); if(appboot_buff) free(appboot_buff); fadeout(imgdata); SDCard_deInit(); USBDevice_deInit(); StopGX(); free(imgdata); if (exeEntryPointAddress == 0) { SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); } exeEntryPoint = (entrypoint) exeEntryPointAddress; /* cleaning up and load dol */ SYS_ResetSystem(SYS_SHUTDOWN, 0, 0); _CPU_ISR_Disable (cookie); __exception_closeall (); exeEntryPoint (); _CPU_ISR_Restore (cookie); return 0; }
bool Load_Dol(void **buffer, int* dollen, char * filepath) { int ret; FILE* file; void* dol_buffer; char fullpath[200]; char gameidbuffer6[7]; memset(gameidbuffer6, 0, 7); memcpy(gameidbuffer6, (char*)0x80000000, 6); snprintf(fullpath, 200, "%s/%s.dol", filepath, gameidbuffer6); SDCard_Init(); USBDevice_Init(); file = fopen(fullpath, "rb"); if(file == NULL) { #ifdef DEBTXT_ALTDOL DebTxt(".dol is missing"); #endif fclose(file); SDCard_deInit(); USBDevice_deInit(); return false; } ClearAllocatedMemory(); int filesize; fseek(file, 0, SEEK_END); filesize = ftell(file); fseek(file, 0, SEEK_SET); #ifdef LOUDTEST dol_buffer = (void *) MEM2_START_ADDRESS; //safest #else dol_buffer = CFMalloc(filesize); #endif if (dol_buffer == NULL) { #ifdef DEBTXT_ALTDOL char dbg[80]; DebTxt("Out of memory"); sprintf(dbg,"%s %d", gameidbuffer6, filesize); DebTxt(dbg); #endif fclose(file); SDCard_deInit(); USBDevice_deInit(); return false; } ret = fread( dol_buffer, 1, filesize, file); if(ret != filesize) { #ifdef DEBTXT_ALTDOL DebTxt("Error reading dol header"); #endif #ifndef LOUDTEST CFFree(dol_buffer); #endif fclose(file); SDCard_deInit(); USBDevice_deInit(); return false; } fclose(file); #ifdef DEBTXT_ALTDOL DebTxt("dol header in buffer"); #endif SDCard_deInit(); USBDevice_deInit(); *buffer = dol_buffer; *dollen = filesize; return true; }
int main(int argc, char *argv[]) { setlocale(LC_ALL, "en.UTF-8"); geckoinit = InitGecko(); if (hbcStubAvailable() || geckoinit) { InitTextVideo(); } // DEBUG_Init(GDBSTUB_DEVICE_USB, 1); //_break(); __exception_setreload(5); //auto reset code dump nobody gives us codedump info anyways. gprintf("\n\n------------------"); gprintf("\nUSB Loader GX rev%s",GetRev()); gprintf("\nmain(%d", argc); for (int i=0;i<argc;i++) gprintf(", %s",argv[i]?argv[i]:"<NULL>"); gprintf(")"); // This part is added, because we need a identify patched ios // printf("\n\tReloading into ios 236"); if (IOS_ReloadIOSsafe(236) < 0) { // printf("\n\tIOS 236 not found, reloading into 36"); IOS_ReloadIOSsafe(36); } printf("\n\tStarting up"); MEM2_init(36); // Initialize 36 MB MEM2_takeBigOnes(true); s32 ret; bool startupproblem = false; bool bootDevice_found=false; if (argc >= 1) { if (!strncasecmp(argv[0], "usb:/", 5)) { strcpy(bootDevice, "USB:"); bootDevice_found = true; } else if (!strncasecmp(argv[0], "sd:/", 4)) bootDevice_found = true; } printf("\n\tInitializing controllers"); /** PAD_Init has to be before InitVideo don't move that **/ PAD_Init(); // initialize PAD/WPAD printf("\n\tInitialize USB (wake up)"); USBDevice_Init(); // seems enough to wake up some HDDs if they are in sleep mode when the loader starts (tested with WD MyPassport Essential 2.5") gprintf("\n\tChecking for stub IOS"); ios222rev = getIOSrev(0x00000001000000dell); ios249rev = getIOSrev(0x00000001000000f9ll); //if we don't like either of the cIOS then scram if (!(ios222rev==4 || ios222rev==5 || (ios249rev>=9 && ios249rev<65280))) { InitTextVideo(); printf("\x1b[2J"); if ((ios222rev < 0 && ios222rev != WII_EINSTALL) && (ios249rev < 0 && ios249rev != WII_EINSTALL)) { printf("\n\n\n\tWARNING!"); printf("\n\tUSB Loader GX needs unstubbed cIOS 222 v4 or 249 v9+"); printf("\n\n\tWe cannot determine the versions on your system,\n\tsince you have no patched ios 36 or 236 installed."); printf("\n\tTherefor, if loading of USB Loader GX fails, you\n\tprobably have installed the 4.2 update,"); printf("\n\tand you should go figure out how to get some cios action going on\n\tin your Wii."); printf("\n\n\tThis message will show every time."); sleep(5); } else { printf("\n\n\n\tERROR!"); printf("\n\tUSB Loader GX needs unstubbed cIOS 222 v4 or 249 v9+"); printf("\n\n\tI found \n\t\t222 = %d%s",ios222rev,ios222rev==65280?" (Stubbed by 4.2 update)":""); printf("\n\t\t249 = %d%s",ios249rev,ios249rev==65280?" (Stubbed by 4.2 update)":""); printf("\n\n\tGo figure out how to get some cIOS action going on\n\tin your Wii and come back and see me."); sleep(15); printf("\n\n\tBye"); USBDevice_deInit(); exit(0); } } printf("\n\tReloading ios 249..."); ret = IOS_ReloadIOSsafe(249); printf("%d", ret); if (ret < 0) { printf("\n\tIOS 249 failed, reloading ios 222..."); ret = IOS_ReloadIOSsafe(222); printf("%d", ret); if (ret < 0) { printf("\n\tIOS 222 failed, reloading ios 250..."); ret = IOS_ReloadIOSsafe(250); printf("%d", ret); if(ret < 0) { printf("\n\tIOS 250 failed, reloading ios 223..."); ret = IOS_ReloadIOSsafe(223); printf("%d", ret); if (ret < 0) { printf("\n\tERROR: cIOS could not be loaded!\n"); sleep(5); SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); } } } printf("\n\tInitialize sd card"); SDCard_Init(); printf("\n\tLoad ehc module"); load_ehc_module(); printf("\n\tdeinit sd card"); SDCard_deInit(); } printf("\n\tInit wbfs..."); ret = WBFS_Init(WBFS_DEVICE_USB); printf("%d", ret); if (ret < 0) { printf("\n\tYou have issues with a slow disc, or a difficult disc\n\tReloading 222..."); ret = IOS_ReloadIOSsafe(222); printf("%d", ret); /*if(ret < 0) { // printf("\n\tSleeping for 4 seconds"); // sleep(4); InitVideo(); // Initialise video Menu_Render(); BootUpProblems(); startupproblem = true; ret = 1; }*/ printf("\n\tInitialize sd card"); SDCard_Init(); printf("\n\tLoad ehc module"); load_ehc_module(); printf("\n\tdeinit sd card"); SDCard_deInit(); printf("\n\tInitialize wbfs..."); USBDevice_deInit(); USBDevice_Init(); ret = WBFS_Init(WBFS_DEVICE_USB); printf("%d", ret); if(ret < 0) { // printf("\n\tSleeping for 4 seconds"); // sleep(4); InitVideo(); // Initialise video Menu_Render(); BootUpProblems(); startupproblem = true; ret = 1; } } printf("\n\tInitialize sd card"); SDCard_Init(); // mount SD for loading cfg's //this should have already been done by now in order to WBFS_Init(). printf("\n\tInitialize usb device"); USBDevice_Init(); // and mount USB:/ if (!bootDevice_found) { printf("\n\tSearch for configuration file"); //try USB //left in all the dol and elf files in this check in case this is the first time running the app and they dont have the config if (checkfile((char*) "USB:/config/GXglobal.cfg") || (checkfile((char*) "USB:/apps/usbloader_gx/boot.elf")) || checkfile((char*) "USB:/apps/usbloadergx/boot.dol") || (checkfile((char*) "USB:/apps/usbloadergx/boot.elf")) || checkfile((char*) "USB:/apps/usbloader_gx/boot.dol")) strcpy(bootDevice, "USB:"); printf("\n\tConfiguration file is on %s", bootDevice); } // Try opening and closing the configuration file here // to prevent a crash dump later on - giantpune char GXGlobal_cfg[26]; sprintf(GXGlobal_cfg, "%s/config/GXGlobal.cfg", bootDevice); FILE *fp = fopen(GXGlobal_cfg, "r"); if (fp) { fclose(fp); } gettextCleanUp(); printf("\n\tLoading configuration..."); CFG_Load(); printf("done"); // gprintf("\n\tbootDevice = %s",bootDevice); /* Load Custom IOS */ if ((Settings.cios == ios222 && IOS_GetVersion() != 222) || (Settings.cios == ios223 && IOS_GetVersion() != 223)) { printf("\n\tReloading IOS to config setting (%d)...", Settings.cios == ios222 ? 222 : 223); SDCard_deInit(); // unmount SD for reloading IOS USBDevice_deInit(); // unmount USB for reloading IOS USBStorage2_Deinit(); ret = IOS_ReloadIOSsafe(Settings.cios == ios222 ? 222 : 223); printf("%d", ret); SDCard_Init(); load_ehc_module(); if (ret < 0) { SDCard_deInit(); Settings.cios = ios249; ret = IOS_ReloadIOSsafe(249); // now mount SD:/ //no need to keep mindlessly mounting and unmounting SD card SDCard_Init(); } USBDevice_Init(); // and mount USB:/ WBFS_Init(WBFS_DEVICE_USB); } else if ((Settings.cios == ios249 && IOS_GetVersion() != 249) || (Settings.cios == ios250 && IOS_GetVersion() != 250)) { printf("\n\tReloading IOS to config setting (%d)...", ios249 ? 249 : 250); SDCard_deInit(); // unmount SD for reloading IOS USBDevice_deInit(); // unmount USB for reloading IOS USBStorage2_Deinit(); ret = IOS_ReloadIOSsafe(ios249 ? 249 : 250); printf("%d", ret); if (ret < 0) { Settings.cios = ios222; ret = IOS_ReloadIOSsafe(222); SDCard_Init(); load_ehc_module(); } else SDCard_Init(); // now mount SD:/ //no need to keep mindlessly mounting and unmounting SD card USBDevice_Init(); // and mount USB:/ WBFS_Init(WBFS_DEVICE_USB); } // Partition_GetList(&partitions); if (ret < 0) { printf("\nERROR: cIOS could not be loaded!"); sleep(5); exit(0); //SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); } //gprintf("\n\tcIOS = %u (Rev %u)",IOS_GetVersion(), IOS_GetRevision());//don't need gprintf if sending console shit to gecko, too printf("\n\tcIOS = %u (Rev %u)",IOS_GetVersion(), IOS_GetRevision()); // printf("Sleeping for 5 seconds\n"); // sleep(5); //if a ID was passed via args copy it and try to boot it after the partition is mounted //its not really a headless mode. more like hairless. if (argc > 1 && argv[1]) { if (strlen(argv[1])==6) strncpy(headlessID, argv[1], sizeof(headlessID)); } //! Init the rest of the System Sys_Init(); Wpad_Init(); if(!startupproblem) InitVideo(); InitAudio(); // Initialize audio WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR); WPAD_SetVRes(WPAD_CHAN_ALL, screenwidth, screenheight); // load main font from file, or default to built-in font fontSystem = new FreeTypeGX(); char *fontPath = NULL; asprintf(&fontPath, "%sfont.ttf", CFG.theme_path); fontSystem->loadFont(fontPath, font_ttf, font_ttf_size, 0); fontSystem->setCompatibilityMode(FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_PASSCLR | FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_NONE); free(fontPath); fontClock = new FreeTypeGX(); fontClock->loadFont(NULL, clock_ttf, clock_ttf_size, 0); fontClock->setCompatibilityMode(FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_PASSCLR | FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_NONE); gprintf("\n\tEnd of Main()"); InitGUIThreads(); MainMenu(MENU_CHECK); return 0; }