int main (int argc, char *argv []) { SifInitRpc (0); init_scr (); scr_printf (APP_NAME "-" VERSION "\n"); /* decide whether to load TCP/IP or it is already loaded */ SifExitIopHeap (); SifLoadFileExit (); SifExitRpc (); SifIopReset (NULL /* "rom0:UDNL rom0:EELOADCNF" */, 0); while (SifIopSync ()) ; SifInitRpc (0); if (load_modules () == 0) { scr_printf ("Ready\n"); } else scr_printf ("Failed to load\n"); /* our job is done; IOP would handle the rest */ SleepThread (); return (0); }
void Reset() { SifIopReset("rom0:UDNL rom0:EELOADCNF",0); while (SifIopSync()) ; fioExit(); SifExitIopHeap(); SifLoadFileExit(); SifExitRpc(); SifExitCmd(); EI; SifInitRpc(0); FlushCache(0); FlushCache(2); }
int main(int argc, char *argv[]) { #ifdef PS2SDL_ENABLE_MTAP smod_mod_info_t info; if(smod_get_mod_by_name("sio2man",&info)!=0) { printf("PS2SDL: sio2man detected, resetting iop\n"); cdInit(CDVD_INIT_EXIT); SifExitIopHeap(); SifLoadFileExit(); SifExitRpc(); SifIopReset("rom0:UDNL rom0:EELOADCNF", 0); while (SifIopSync()) ; } #endif SifInitRpc(0); return(SDL_main(argc, argv)); }
///////////////////////////////////////////////////////////////////// // reboot IOP ///////////////////////////////////////////////////////////////////// void CD_Reset(int mode) { if(mode==1) SifIopReset("rom0:UDNL rom0:EELOADCNF",0); // normal else {fioOpen("cdrom0:\\SYSTEM.CNF;1",1); // hacking in the night... `_Ž. Prepare SifIopReset("rom0:UDNL cdrom0:\\SYSTEM.CNF;1", 0); // three point!! } while (SifIopSync()) ; fioExit(); SifExitIopHeap(); SifLoadFileExit(); SifExitRpc(); SifExitCmd(); EI(); SifInitRpc(0); FlushCache(0); FlushCache(2); }
int loadLoaderModules(int debug_mode, int disable_cdrom) { static int load_dvd_config = -1; static int load_netsurf_config = -1; static int load_usb_config = -1; int i; int rv; int lrv = -1; if (debug_mode == 1) { /* Network is used by ps2link and can't be used by Linux. */ network_support = 0; } #ifdef RESET_IOP if (debug_mode == -1) { graphic_setStatusMessage("Flushing cache"); FlushCache(0); graphic_setStatusMessage("Exit IOP Heap"); SifExitIopHeap(); graphic_setStatusMessage("Exit LoadFile"); SifLoadFileExit(); graphic_setStatusMessage("Exit FIO"); fioExit(); graphic_setStatusMessage("Exit RPC"); SifExitRpc(); graphic_setStatusMessage("Stop DMA"); SifStopDma(); graphic_setStatusMessage("PreReset Init RPC"); SifInitRpc(0); graphic_setStatusMessage("Reseting IOP"); while(!SifIopReset(s_pUDNL, 0)); graphic_setStatusMessage("IOP Sync"); while (!SifIopSync()); graphic_setStatusMessage("Initialize RPC"); SifInitRpc(0); } #endif graphic_setStatusMessage("Patching enable LMB"); sbv_patch_enable_lmb(); graphic_setStatusMessage("Patching disable prefix check"); sbv_patch_disable_prefix_check(); /* CDVDMAN is loaded by IopReset and NVRAM can be read. */ graphic_setStatusMessage("Read NVRAM from CDVD"); if (!disable_cdrom) { nvram_init(); } eromdrvSupport = 0; /* FIXME: eedebug handler seems to crash the ee graphic_setStatusMessage("Add eedebug handler"); addEEDebugHandler(); */ graphic_setStatusMessage("Loading modules"); for (i = 0; i < moduleLoaderNumberOfModules; i++) { const rom_entry_t *romfile; if (moduleList[i].debug_mode != 0) { if (moduleList[i].debug_mode != debug_mode) { continue; } } /* Load configuration when necessary modules are loaded. */ if (moduleList[i].loadCfg) { checkForMusicSupport(); setDefaultConfiguration(NULL); lrv = loadConfiguration(CONFIG_FILE); changeMode(); /* Load configuration on startup and not on IOP reset. */ moduleList[i].loadCfg = 0; } graphic_setStatusMessage(moduleList[i].path); kprintf("Loading module (%s)\n", moduleList[i].path); if (!network_support) { if (moduleList[i].network) { continue; } } if (moduleList[i].ps2smap) { moduleList[i].args = getPS2MAPParameter(&moduleList[i].argLen); } if (moduleList[i].dns) { moduleList[i].args = getPS2DNS(&moduleList[i].argLen); } if (moduleList[i].checkMc) { static char file[256]; /* Try to load module from MC if available. */ snprintf(file, sizeof(file), CONFIG_DIR "/%s", moduleList[i].path); rv = SifLoadModule(file, moduleList[i].argLen, moduleList[i].args); } else { rv = -1; } if (rv < 0) { if ((moduleList[i].sms_mod == 0) || (isDVDVSupported())) { if (moduleList[i].eromdrv < 0) { /* Try to detect EROM driver only the first time. */ moduleList[i].eromdrv = 1; if (disable_cdrom) { continue; } rv = open("rom1:EROMDRV", O_RDONLY); if (rv >=0 ) { eromdrvpath[12] = 0; /* This is an old fat PS2 (working with SCPH-50004 and SCPH-39004). */ close(rv); } else { const u8 *nvm; nvm = get_nvram(); if (nvm_errors == 0) { /* NVM layout seems to be correct. */ eromdrvpath[12] = nvm[NVM_REAL_REGION]; rv = open(eromdrvpath, O_RDONLY); if (rv >=0 ) { /* Region code seems to be correct. */ close(rv); } else { error_printf("The region code stored in the NVRAM S%02x T%02x F%02x R%02x " "can't be detected by version string %s (%s).", nvm[0x180], nvm[0x181], nvm[NVM_FAKE_REGION], nvm[NVM_REAL_REGION], ps2_rom_version); continue; } } else { error_printf("%d errors when reading NVRAM. Please set path " "to EROMDRV and reload modules.", nvm_errors); continue; } } } if (moduleList[i].eromdrv != 0) { moduleList[i].args = get_eromdrvpath(); moduleList[i].argLen = strlen(moduleList[i].args) + 1; } romfile = rom_getFile(moduleList[i].path); if (romfile != NULL) { int ret; ret = SifExecModuleBuffer((void *) romfile->start, romfile->size, moduleList[i].argLen, moduleList[i].args, &rv); if (ret < 0) { rv = ret; } } else { rv = SifLoadModule(moduleList[i].path, moduleList[i].argLen, moduleList[i].args); } if (rv < 0) { if (moduleList[i].eromdrv != 0) { kprintf("Failed to load module \"%s\".\n", get_eromdrvpath()); } else { kprintf("Failed to load module \"%s\".\n", moduleList[i].path); } if (moduleList[i].ps2smap && !isSlimPSTwo()) { network_support = 0; } else { if (moduleList[i].eromdrv != 0) { error_printf("Failed to load module \"%s\".", get_eromdrvpath()); } else { error_printf("Failed to load module \"%s\".", moduleList[i].path); } } } else { if (moduleList[i].eromdrv != 0) { eromdrvSupport = -1; } } } } } graphic_setStatusMessage(NULL); printAllModules(); fileXioInit(); if (load_netsurf_config) { load_netsurf_config = 0; if (lrv != 0) { graphic_setStatusMessage("Check for NetSurf config"); lrv = loadConfiguration(PS2NS_CONFIG_FILE); graphic_setStatusMessage(NULL); } } if (load_usb_config) { load_usb_config = 0; if (lrv != 0) { graphic_setStatusMessage("Check for USB config"); lrv = loadConfiguration(USB_CONFIG_FILE); graphic_setStatusMessage(NULL); } } if (load_dvd_config && isDVDVSupported()) { load_dvd_config = 0; graphic_setStatusMessage("Init DVD driver"); CDDA_Init(); CDVD_Init(); if (lrv != 0) { DiskType type; graphic_setStatusMessage("Load config from DVD"); type = CDDA_DiskType(); if (type == DiskType_DVDV) { CDVD_SetDVDV(1); } else { CDVD_SetDVDV(0); } kprintf("kloader disc type %u\n", type); switch (type) { case DiskType_CD: case DiskType_DVD: case DiskType_DVDV: /* Load configuration from disc. */ lrv = loadConfiguration(DVD_CONFIG_FILE); changeMode(); #if 0 if (lrv != 0) { error_printf("Failed to load config from \"%s\", using default configuration.", DVD_CONFIG_FILE); } #endif break; default: kprintf("kloader unsupported disc type %u\n", type); break; } /* Stop CD when finished. */ CDVD_Stop(); CDVD_FlushCache(); } graphic_setStatusMessage(NULL); } snprintf(hardware_information, sizeof(hardware_information), "%s with DVD-R %s, %s sound support and %s network adapter", isSlimPSTwo() ? "slim PSTwo" : "fat PS2", disable_cdrom ? "disabled" : (isDVDVSupported() ? "support" : "problem"), (libsd_version <= 0x104) ? "direct" : "indirect", network_support ? "with" : "without"); return 0; }