void Reload (void) { if (!GetFileToBoot ()) { // run sm, priiloader on the nand is required *(vu32*)0x8132FFFB = 0x50756E65; DCFlushRange((void*)0x8132FFFB,4); SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); } struct __argv arg; memset (&arg, 0, sizeof(struct __argv)); memmove(ARGS_ADDR, &arg, sizeof(arg)); DCFlushRange(ARGS_ADDR, sizeof(arg) + arg.length); memcpy(BOOTER_ADDR, booter_dol, booter_dol_size); DCFlushRange(BOOTER_ADDR, booter_dol_size); entrypoint exeEntryPoint; exeEntryPoint = (entrypoint) BOOTER_ADDR; /* cleaning up and load dol */ SYS_ResetSystem(SYS_SHUTDOWN, 0, 0); _CPU_ISR_Disable (cookie); __exception_closeall (); exeEntryPoint (); _CPU_ISR_Restore (cookie); exit (0); }
bool BootExecFile (void) { green_fix (); /* cleaning up and load dol */ SYS_ResetSystem(SYS_SHUTDOWN, 0, 0); _CPU_ISR_Disable (cookie); __exception_closeall (); exeEntryPoint (); _CPU_ISR_Restore (cookie); return true; }
int BootHomebrewFromMem() { loadStub(); if (Set_Stub_Split(0x00010001,"UNEO")<0) Set_Stub_Split(0x00010001,"ULNR"); entrypoint entry; u32 cpu_isr; if (!innetbuffer) { SDCard_deInit(); USBDevice_deInit(); SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); } struct __argv args; int ret = valid_elf_image(innetbuffer); if (ret == 1) entry = (entrypoint) load_elf_image(innetbuffer); else entry = (entrypoint) load_dol(innetbuffer, &args); free(innetbuffer); if (!entry) { SDCard_deInit(); SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); } SDCard_deInit(); WPAD_Flush(0); WPAD_Disconnect(0); WPAD_Shutdown(); SYS_ResetSystem(SYS_SHUTDOWN, 0, 0); _CPU_ISR_Disable (cpu_isr); __exception_closeall(); entry(); _CPU_ISR_Restore (cpu_isr); return 0; }
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 BootHomebrew(char * path) { loadStub(); if (Set_Stub_Split(0x00010001,"UNEO")<0) Set_Stub_Split(0x00010001,"ULNR"); void *buffer = NULL; u32 filesize = 0; entrypoint entry; u32 cpu_isr; FILE * file = fopen(path, "rb"); if (!file) SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); fseek (file, 0, SEEK_END); filesize = ftell(file); rewind(file); buffer = malloc(filesize); if (fread (buffer, 1, filesize, file) != filesize) { fclose (file); free(buffer); SDCard_deInit(); USBDevice_deInit(); SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); } fclose (file); struct __argv args; bzero(&args, sizeof(args)); args.argvMagic = ARGV_MAGIC; args.length = strlen(path) + 2; args.commandLine = (char*)malloc(args.length); if (!args.commandLine) SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); strcpy(args.commandLine, path); args.commandLine[args.length - 1] = '\0'; args.argc = 1; args.argv = &args.commandLine; args.endARGV = args.argv + 1; int ret = valid_elf_image(buffer); if (ret == 1) entry = (entrypoint) load_elf_image(buffer); else entry = (entrypoint) load_dol(buffer, &args); free(buffer); SDCard_deInit(); USBDevice_deInit(); if (!entry) { SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); } WPAD_Flush(0); WPAD_Disconnect(0); WPAD_Shutdown(); SYS_ResetSystem(SYS_SHUTDOWN, 0, 0); _CPU_ISR_Disable (cpu_isr); __exception_closeall(); entry(); _CPU_ISR_Restore (cpu_isr); 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; }
//--------------------------------------------------------------------------------- int main(int argc, char **argv) { IOS_ReloadIOS(56); InitVideo (); printd ("---------------------------------------------------------------------------"); printd (" neekbooter "VER" by stfour"); printd (" (part of postLoader project)"); printd ("---------------------------------------------------------------------------"); u32 idx = -1; u32 status = 0; u32 hi, lo; u32 back2real; if (neek_PLNandInfo (0, &idx, &status, &lo, &hi, &back2real) == false) { printd ("no boot information..."); Reload (); } printd ("idx = %d", idx); printd ("status = %d", status); if (status == PLNANDSTATUS_NONE) { status = PLNANDSTATUS_BOOTING; neek_PLNandInfo (1, &idx, &status, &lo, &hi, &back2real); if (!hi && !lo) { printd ("booting disk"); // Copy the di image memcpy(EXECUTE_ADDR, di_dol, di_dol_size); DCFlushRange((void *) EXECUTE_ADDR, di_dol_size); // Load the booter memcpy(BOOTER_ADDR, booter_dol, booter_dol_size); DCFlushRange(BOOTER_ADDR, booter_dol_size); memset(ARGS_ADDR, 0, sizeof(struct __argv)); DCFlushRange(ARGS_ADDR, sizeof(struct __argv)); printd ("stating di"); entrypoint hbboot_ep = (entrypoint) BOOTER_ADDR; // bootit ! u32 level; SYS_ResetSystem(SYS_SHUTDOWN, 0, 0); _CPU_ISR_Disable(level); __exception_closeall(); hbboot_ep(); _CPU_ISR_Restore(level); } else { printd ("booting channel"); WII_Initialize(); WII_LaunchTitle((u64)(TITLE_ID (hi, lo))); exit(0); // Use exit() to exit a program, do not use 'return' from main() /* s_nandbooter nb ATTRIBUTE_ALIGN(32); u8 *tfb = ((u8 *) 0x93200000); memset (&nb, 0, sizeof (s_nandbooter)); nb.channel.language = -1; nb.channel.titleId = TITLE_ID (hi, lo); nb.channel.bootMode = 1; // Copy the triiforce image memcpy(EXECUTE_ADDR, nandbooter_dol, nandbooter_dol_size); DCFlushRange((void *) EXECUTE_ADDR, nandbooter_dol_size); // Load the booter memcpy(BOOTER_ADDR, booter_dol, booter_dol_size); DCFlushRange(BOOTER_ADDR, booter_dol_size); memset(ARGS_ADDR, 0, sizeof(struct __argv)); DCFlushRange(ARGS_ADDR, sizeof(struct __argv)); memcpy (tfb, &nb, sizeof(s_nandbooter)); printd ("stating nandbooter"); entrypoint hbboot_ep = (entrypoint) BOOTER_ADDR; u32 level; SYS_ResetSystem(SYS_SHUTDOWN, 0, 0); _CPU_ISR_Disable(level); __exception_closeall(); hbboot_ep(); _CPU_ISR_Restore(level); */ } } else if (status == PLNANDSTATUS_BOOTING) { status = PLNANDSTATUS_BOOTED; neek_PLNandInfo (1, &idx, &status, &lo, &hi, &back2real); if (!hi && !lo) { if (back2real) { printd ("returning to realnand"); RestoreSneekFolder (); SYS_ResetSystem(SYS_RESTART,0,0); } else { printd ("restoring old nanndindex"); neek_GetNandConfig (); // Go back to previous nand nandConfig->NandSel = idx; neek_WriteNandConfig (); neek_PLNandInfoRemove (); SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); } } else { // restore sneek files RestoreSneekFolder (); SYS_ResetSystem(SYS_RESTART,0,0); } } exit (0); }
int BootHomebrew() { char* abuf; size_t asize; if(homebrewsize == 0) return -1; entrypoint entry; u32 cpu_isr; arg_init(); if (wiiload_args) { abuf = temp_arg; asize = strlen(abuf); while (asize != 0) { xprintf("argument = %s\n",abuf); arg_add(abuf); abuf+=asize; abuf+=1; asize = strlen(abuf); } } else { arg_add(filepath.c_str()); // argv[0] = filepath while(parser(Settings.forwarder_arg, "<arg>", "</arg>") != "") { arg_add(parser(Settings.forwarder_arg, "<arg>", "</arg>").c_str()); Settings.forwarder_arg.erase(0, Settings.forwarder_arg.find("</arg>") +1); } } if ( valid_elf_image(homebrewbuffer) == 1 ) entry = (entrypoint) load_elf_image(homebrewbuffer); else entry = (entrypoint) load_dol(homebrewbuffer, &args); if (!entry) return -1; //ExitApp(); //we can't use check_uneek_fs //as we already shut down the uneek_fs system //so it will always return false if (in_neek == false) { xprintf("Booting Homebrew"); if(wiiload) { xprintf(" via wiiload\n"); if(Options.wiiload_ahb == 2) { xprintf("with HW_AHBPROT\n"); Patch_ahbprot(); } if(Options.wiiload_ahb != 0) { xprintf("with IOS reload\n"); IOS_ReloadIOS(Options.wiiload_ios); } else xprintf("without reloading IOS\n"); } else { xprintf(" from storage device\n"); if(Settings.force_reload == "HW_AHBPROT") { xprintf("with HW_AHBPROT\n"); Patch_ahbprot(); } if(Settings.force_reload != "NORELOAD") { xprintf("with IOS reload\n"); IOS_ReloadIOS(SelectedIOS()); } else xprintf("without IOS reload\n"); } } wiiload_args = 0; /*this will also be called when wiiloading an application will need to check if it's expected behavour? */ /* if(!wiiload_args) { if(SelectedIOS() != IOS_GetVersion() || Settings.force_reload != "") { //keep ahbprot rights in new ios Patch_ahbprot(); IOS_ReloadIOS(SelectedIOS()); } } wiiload_args = 0; */ SYS_ResetSystem(SYS_SHUTDOWN, 0, 0); _CPU_ISR_Disable (cpu_isr); __exception_closeall(); entry(); _CPU_ISR_Restore (cpu_isr); return 0; }
s32 Disc_BootPartition(u64 offset, u8 videoselected, u8 cheat, u8 vipatch, u8 patchcountrystring, u32 rtrn) { entry_point p_entry; s32 ret; /* Open specified partition */ ret = WDVD_OpenPartition(offset, tmd_buffer); if (ret < 0) return ret; char gameid[8]; memset(gameid, 0, 8); memcpy(gameid, (char*)Disc_ID, 6); //kill the SD SDCard_deInit(); /* Disconnect Wiimote */ WPAD_Flush(0); WPAD_Disconnect(0); WPAD_Shutdown(); // Load Disc IOS u32 disc_ios = tmd_buffer[0x18B]; if (disc_ios != IOS_GetVersion()) { WDVD_ClosePartition(); WDVD_Close(); ret = IOS_ReloadIOS(disc_ios); if (ret < 0) { gprintf("Disc IOS %u could not be loaded! (ret = %d)", disc_ios, ret); return ret; } Disc_Init(); Disc_Open(); WDVD_OpenPartition(offset, tmd_buffer); } /* Setup low memory */ __Disc_SetLowMem(); /* Run apploader */ ret = Apploader_Run(&p_entry, cheat, videoselected, vipatch, patchcountrystring, rtrn); if (ret < 0) return ret; bool cheatloaded = false; if (cheat == 1) { /* OCARINA STUFF - FISHEARS*/ cheatloaded = ocarina_do_code() == 1; cheatloaded = true; } /* Set an appropiate video mode */ __Disc_SetVMode(videoselected); /* Set time */ __Disc_SetTime(); // Anti-green screen fix VIDEO_SetBlack(TRUE); VIDEO_Flush(); VIDEO_WaitVSync(); gprintf("\n\nUSB Loader GX is done.\n\n"); /* Shutdown IOS subsystems */ // fix for PeppaPig (from NeoGamma) extern void __exception_closeall(); IRQ_Disable(); __IOS_ShutdownSubsystems(); __exception_closeall(); appentrypoint = (u32) p_entry; if (cheat == 1 && cheatloaded) { __asm__( "lis %r3, appentrypoint@h\n" "ori %r3, %r3, appentrypoint@l\n" "lwz %r3, 0(%r3)\n" "mtlr %r3\n" "lis %r3, 0x8000\n" "ori %r3, %r3, 0x18A8\n" "mtctr %r3\n" "bctr\n" ); } else { __asm__( "lis %r3, appentrypoint@h\n" "ori %r3, %r3, appentrypoint@l\n" "lwz %r3, 0(%r3)\n" "mtlr %r3\n" "blr\n" ); } return 0; }
//--------------------------------------------------------------------------------- int main(int argc, char **argv) { //--------------------------------------------------------------------------------- #ifdef DEBUG init_video_and_wpad(); printf("::: Configurable USB Loader - Forwarder Universal [SD/USB] by Narolez :::\n\n"); #endif // create a buffer for the elf/dol content void* myBuffer; // read elf/dol from given path: FILE* inputFile; // try loading from SD inputFile = tryOpenDolFromSD(); // dol file on SD not found if(inputFile == NULL) { // try loading from USB inputFile = tryOpenDolFromUSB(); } // dol file on SD or USB not found if(inputFile == NULL) { init_video_and_wpad(); printf("\nError: Couldn't open file!\n"); printf("Press any button to reboot Wii...\n"); press_button_to_reboot(); } #ifdef DEBUG printf("\n[+] Loading %s to buffer ... ", filename); #endif int pos = ftell(inputFile); fseek(inputFile, 0, SEEK_END); int size = ftell(inputFile); fseek(inputFile, pos, SEEK_SET); //return to previous position myBuffer = malloc(size); fread( myBuffer, 1, size, inputFile); fclose(inputFile); #ifdef DEBUG printf("OK!\n"); #endif release_storage(); #ifdef DEBUG printf("\n[+] Running ... "); #endif //Check if valid elf file: s32 res; res = valid_elf_image(myBuffer); if(res == 1) { //elf ok! -> Load entry point of elf file: void (*ep)(); ep = (void(*)())load_elf_image(myBuffer); // code from geckoloader u32 level; __IOS_ShutdownSubsystems (); //printf("IOS_ShutdownSubsystems() done\n"); _CPU_ISR_Disable (level); //printf("_CPU_ISR_Disable() done\n"); __exception_closeall (); //printf("__exception_closeall() done. Jumping to ep now...\n"); ep(); _CPU_ISR_Restore (level); } else { //Elf not valid, load dol: //Stuff for arguments struct __argv argv; bzero(&argv, sizeof(argv)); argv.argvMagic = ARGV_MAGIC; argv.length = strlen(filename) + 2; argv.commandLine = malloc(argv.length); if (!argv.commandLine) { init_video_and_wpad(); printf("Error creating arguments, could not allocate memory for commandLine\n"); printf("Press any button to reboot Wii...\n"); press_button_to_reboot(); } strcpy(argv.commandLine, filename); argv.commandLine[argv.length - 1] = '\x00'; argv.argc = 1; argv.argv = &argv.commandLine; argv.endARGV = argv.argv + 1; run_dol(myBuffer, &argv); } #ifdef DEBUG printf("HAVE FUN!"); #endif return 0; }