int main(int argc, char **argv) { s32 ret; /* Initialize subsystems */ Sys_Init(); /* Set video mode */ Video_SetMode(); /* Initialize ISFS */ ISFS_Initialize(); /* Read config */ Config_Read(); /* Config menu */ ret = SYS_ResetButtonDown(); if (ret) Menu(); /* Draw loading image */ if(loaderCfg.showSplash) Gui_DrawLoading(); /* Execute application */ Loader_Execute(); /* Draw error image */ Gui_DrawError(); /* Sleep */ sleep(RESTART_SECONDS); /* Load System Menu */ Sys_LoadMenu(); return 0; }
int main(void) { int ret; void *frame_buffer = NULL; GXRModeObj *rmode = NULL; /* The game's boot loader is statically loaded at 0x81200000, so we'd better * not start mallocing there! */ SYS_SetArena1Hi((void *)0x81200000); /* initialise all subsystems */ if (!Event_Init(&main_event_fat_loaded)) goto exit_error; if (!Apploader_Init()) goto exit_error; if (!Module_Init()) goto exit_error; if (!Search_Init()) goto exit_error; /* main thread is UI, so set thread prior to UI */ LWP_SetThreadPriority(LWP_GetSelf(), THREAD_PRIO_UI); /* configure the video */ VIDEO_Init(); rmode = VIDEO_GetPreferredMode(NULL); frame_buffer = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode)); if (!frame_buffer) goto exit_error; console_init( frame_buffer, 20, 20, rmode->fbWidth, rmode->xfbHeight, rmode->fbWidth * VI_DISPLAY_PIX_SZ); /* spawn lots of worker threads to do stuff */ if (!Apploader_RunBackground()) goto exit_error; if (!Module_RunBackground()) goto exit_error; if (!Search_RunBackground()) goto exit_error; VIDEO_Configure(rmode); VIDEO_SetNextFramebuffer(frame_buffer); VIDEO_SetBlack(false); VIDEO_Flush(); VIDEO_WaitVSync(); if (rmode->viTVMode & VI_NON_INTERLACE) VIDEO_WaitVSync(); /* display the welcome message */ printf("\x1b[2;0H"); printf("BrainSlug Wii v%x.%02x.%04x" #ifndef NDEBUG " DEBUG build" #endif "\n", BSLUG_VERSION_MAJOR(BSLUG_LOADER_VERSION), BSLUG_VERSION_MINOR(BSLUG_LOADER_VERSION), BSLUG_VERSION_REVISION(BSLUG_LOADER_VERSION)); printf(" by Chadderz\n\n"); if (!__io_wiisd.startup() || !__io_wiisd.isInserted()) { printf("Please insert an SD card.\n\n"); do { __io_wiisd.shutdown(); } while (!__io_wiisd.startup() || !__io_wiisd.isInserted()); } __io_wiisd.shutdown(); if (!fatMountSimple("sd", &__io_wiisd)) { fprintf(stderr, "Could not mount SD card.\n"); goto exit_error; } Event_Trigger(&main_event_fat_loaded); printf("Waiting for game disk...\n"); Event_Wait(&apploader_event_disk_id); printf("Game ID: %.4s\n", os0->disc.gamename); printf("Loading modules...\n"); Event_Wait(&module_event_list_loaded); if (module_list_count == 0) { printf("No valid modules found!\n"); } else { size_t module; printf( "%u module%s found.\n", module_list_count, module_list_count > 1 ? "s" : ""); for (module = 0; module < module_list_count; module++) { printf( "\t%s %s by %s (", module_list[module]->name, module_list[module]->version, module_list[module]->author); Main_PrintSize(module_list[module]->size); puts(")."); } Main_PrintSize(module_list_size); puts(" total."); } Event_Wait(&apploader_event_complete); Event_Wait(&module_event_complete); fatUnmount("sd"); __io_wiisd.shutdown(); if (module_has_error) { printf("\nPress RESET to exit.\n"); goto exit_error; } if (apploader_game_entry_fn == NULL) { fprintf(stderr, "Error... entry point is NULL.\n"); } else { if (module_has_info || search_has_info) { printf("\nPress RESET to launch game.\n"); while (!SYS_ResetButtonDown()) VIDEO_WaitVSync(); while (SYS_ResetButtonDown()) VIDEO_WaitVSync(); } SYS_ResetSystem(SYS_SHUTDOWN, 0, 0); apploader_game_entry_fn(); } ret = 0; goto exit; exit_error: ret = -1; exit: while (!SYS_ResetButtonDown()) VIDEO_WaitVSync(); while (SYS_ResetButtonDown()) VIDEO_WaitVSync(); VIDEO_SetBlack(true); VIDEO_Flush(); VIDEO_WaitVSync(); free(frame_buffer); exit(ret); return ret; }