/* * Load IRX modules into IOP RAM. */ int load_modules(const config_t *config) { const char **modv = _modules; int i = 0, ret; while (modv[i] != NULL) { ret = SifLoadModule(modv[i], 0, NULL); if (ret < 0) { fprintf(stderr, "%s: failed to load module: %s (%i)\n", __FUNCTION__, modv[i], ret); return -1; } i++; } if (config_get_bool(config, SET_USB_SUPPORT)) { SifExecModuleBuffer(_usbd_irx_start, _usbd_irx_size, 0, NULL, &ret); if (ret < 0) { fprintf(stderr, "%s: failed to load module usbd.irx (%i)\n", __FUNCTION__, ret); } SifExecModuleBuffer(_usb_mass_irx_start, _usb_mass_irx_size, 0, NULL, &ret); if (ret < 0) { fprintf(stderr, "%s: failed to load module usb_mass.irx (%i)\n", __FUNCTION__, ret); } } return 0; }
/* Load the embedded USB mouse driver and then initialize the mouse */ int PS2_InitMouse(_THIS) { int ret; printf("[PS2] Init USB Mouse\n"); // the mouse driver is embedded in the library.... SifExecModuleBuffer(ps2mouse_irx_start, ps2mouse_irx_size, 0, NULL, &ret); if (ret < 0) { SDL_SetError("[PS2] Failed to load module: PS2MOUSE.IRX\n"); if(PS2_InitPad() == 0) { mouseState = PAD_AVAILABLE; printf("[PS2] Init PAD Mouse emulation done\n"); return 0; } mouseState = MOUSE_NOT_AVAILABLE; printf("[PS2] No mouse or pad available\n"); return -1; } else { // Initialize the mouse if(PS2MouseInit() < 0) { SDL_SetError("[PS2] PS2MouseInit failed\n"); if (PS2_InitPad() > 0) { mouseState = PAD_AVAILABLE; printf("[PS2] Init PAD Mouse emulation done\n"); } else { printf("[PS2] Init USB Mouse and Pad emulation failed\n"); mouseState = MOUSE_NOT_AVAILABLE; return -1; } } else { mouseState = MOUSE_AVAILABLE; printf("[PS2] Init USB Mouse done\n"); } } return 0; }
int dnsInit( const char *dns_addr ) { u32 a; int nSizeArg, nRet, irx_ret; a = inet_addr( dns_addr ); if( a == INADDR_NONE ) { printf("dnsInit : %s is not a valid address!\n", dns_addr); return 0; } // load dns.irx nSizeArg = strlen(dns_addr) + 1; nRet = SifExecModuleBuffer( &dns_irx, size_dns_irx, nSizeArg, dns_addr, &irx_ret ); if( nRet < 0 ) { printf("dnsInit : Failed to initialize dns irx module!\n"); return 0; } return 1; }
bool_t LoadIRX(anynode* AnyNode,const char* Name,size_t ParamCount,const char* Param) { int ret; fourcc_t Data; //tchar_t Path[MAXPATH]; size_t ParamSize=0; const char* s = Param; for (;ParamCount>0;--ParamCount) { ParamSize += strlen(s)+1; s += strlen(s)+1; } /* // try external file if (GetResourcePath(AnyNode,0,Path,TSIZEOF(Path))==ERR_NONE) { tchar_t Tmp[MAXPATH]; tcscat_s(Path,TSIZEOF(Path),Name); if (SifExecModuleFile(CdromPath(Path,Tmp,TSIZEOF(Tmp)), ParamSize, Param, &ret)>=0) return ret>=0; } */ // try core-c resource Data = NodeEnumClassStr(AnyNode,NULL,RESOURCEDATA_ID,NODE_NAME,Name); if (Data) { size_t size = (size_t)NodeClass_Meta(NodeContext_FindClass(AnyNode,Data),RESOURCEDATA_SIZE,META_PARAM_CUSTOM); void* ptr = (void*)NodeClass_Meta(NodeContext_FindClass(AnyNode,Data),RESOURCEDATA_PTR,META_PARAM_CUSTOM); if (ptr && size) { SifExecModuleBuffer(ptr, size, ParamSize, Param, &ret); return ret>=0; } } return 0; }
static int load_modules () { const char *STEP_OK = "*"; const char *FAILED = "failed to load with"; int ret, ipcfg_ret = 0; size_t i; const char *IPCONFIG_DAT_PATHS[] = { "mc0:/BIDATA-SYSTEM/IPCONFIG.DAT", /* japan */ "mc0:/BADATA-SYSTEM/IPCONFIG.DAT", /* us */ "mc0:/BEDATA-SYSTEM/IPCONFIG.DAT", /* europe */ "mc0:/SYS-CONF/IPCONFIG.DAT", /* old location */ NULL }; #if defined (LOAD_MRBROWN_PATCHES) sbv_patch_enable_lmb (); sbv_patch_disable_prefix_check (); scr_printf (STEP_OK); #endif #if defined (LOAD_SIOMAN_AND_MC) ret = SifLoadModule ("rom0:SIO2MAN", 0, NULL); if (ret > 0) scr_printf (STEP_OK); else { scr_printf ("\nrom0:SIO2MAN %s %d\n", FAILED, ret); return (-1); } ret = SifLoadModule ("rom0:MCMAN", 0, NULL); if (ret > 0) scr_printf (STEP_OK); else { scr_printf ("\nrom0:MCMAN %s %d\n", FAILED, ret); return (-1); } ret = SifLoadModule ("rom0:MCSERV", 0, NULL); if (ret > 0) scr_printf (STEP_OK); else { scr_printf ("\nrom0:MCSERV %s %d\n", FAILED, ret); return (-1); } #endif SifExecModuleBuffer (&iomanx_irx, size_iomanx_irx, 0, NULL, &ret); if (ret == 0) scr_printf (STEP_OK); else { scr_printf ("IOMANX.IRX %s %d\n", FAILED, ret); return (-1); } SifExecModuleBuffer (&ps2dev9_irx, size_ps2dev9_irx, 0, NULL, &ret); if (ret == 0) scr_printf (STEP_OK); else { scr_printf ("PS2DEV9.IRX %s %d\n", FAILED, ret); return (-1); } SifExecModuleBuffer (&ps2atad_irx, size_ps2atad_irx, 0, NULL, &ret); if (ret == 0) scr_printf (STEP_OK); else { scr_printf ("PS2ATAD.IRX %s %d\n", FAILED, ret); return (-1); } SifExecModuleBuffer (&ps2ip_irx, size_ps2ip_irx, 0, NULL, &ret); if (ret == 0) scr_printf (STEP_OK); else { scr_printf ("PS2IP.IRX %s %d\n", FAILED, ret); return (-1); } ipcfg_ret = -1; for (i = 0; ipcfg_ret != 0 && IPCONFIG_DAT_PATHS[i] != NULL; ++i) { ipcfg_ret = setup_ip (IPCONFIG_DAT_PATHS[i], if_conf, &if_conf_len); } SifExecModuleBuffer (&ps2smap_irx, size_ps2smap_irx, if_conf_len, if_conf, &ret); if (ret == 0) scr_printf (STEP_OK); else { scr_printf ("PS2SMAP.IRX %s %d\n", FAILED, ret); return (-1); } scr_printf ("\n"); switch (ipcfg_ret) { case 0: scr_printf ("\nusing %s\n", IPCONFIG_DAT_PATHS[i - 1]); break; case -1: scr_printf ("\nuse one of the following locations to set IP address:\n"); for (i = 0; IPCONFIG_DAT_PATHS[i] != NULL; ++i) scr_printf (" %s\n", IPCONFIG_DAT_PATHS[i]); break; case -2: scr_printf ("\nusing %s\n", IPCONFIG_DAT_PATHS[i - 1]); scr_printf ("\ninvalid configuration file format; use:\n" "ip_address network_mask gateway_ip\n" "separated by a single space; for example:" "192.168.0.10 255.255.255.0 192.168.0.1\n\n"); break; } scr_printf ("Playstation 2 IP address: %s\n", if_conf); return (0); }
static void frontend_ps2_init(void *data) { char cwd[FILENAME_MAX]; int bootDeviceID; SifInitRpc(0); #if !defined(DEBUG) /* Comment this line if you don't wanna debug the output */ while(!SifIopReset(NULL, 0)){}; #endif while(!SifIopSync()){}; SifInitRpc(0); sbv_patch_enable_lmb(); /* I/O Files */ SifExecModuleBuffer(&iomanX_irx, size_iomanX_irx, 0, NULL, NULL); SifExecModuleBuffer(&fileXio_irx, size_fileXio_irx, 0, NULL, NULL); SifExecModuleBuffer(&freesio2_irx, size_freesio2_irx, 0, NULL, NULL); /* Memory Card */ SifExecModuleBuffer(&mcman_irx, size_mcman_irx, 0, NULL, NULL); SifExecModuleBuffer(&mcserv_irx, size_mcserv_irx, 0, NULL, NULL); /* Controllers */ SifExecModuleBuffer(&freemtap_irx, size_freemtap_irx, 0, NULL, NULL); SifExecModuleBuffer(&freepad_irx, size_freepad_irx, 0, NULL, NULL); /* USB */ SifExecModuleBuffer(&usbd_irx, size_usbd_irx, 0, NULL, NULL); SifExecModuleBuffer(&usbhdfsd_irx, size_usbhdfsd_irx, 0, NULL, NULL); /* Audio */ SifExecModuleBuffer(&freesd_irx, size_freesd_irx, 0, NULL, NULL); SifExecModuleBuffer(&audsrv_irx, size_audsrv_irx, 0, NULL, NULL); /* CDVD */ SifExecModuleBuffer(&cdvd_irx, size_cdvd_irx, 0, NULL, NULL); if (mcInit(MC_TYPE_XMC)) { RARCH_ERR("mcInit library not initalizated\n"); } /* Initializes audsrv library */ if (audsrv_init()) { RARCH_ERR("audsrv library not initalizated\n"); } /* Initializes pad libraries Must be init with 0 as parameter*/ if (mtapInit() != 1) { RARCH_ERR("mtapInit library not initalizated\n"); } if (padInit(0) != 1) { RARCH_ERR("padInit library not initalizated\n"); } if (mtapPortOpen(0) != 1) { RARCH_ERR("mtapPortOpen library not initalizated\n"); } /* Initializes CDVD library */ /* SCECdINoD init without check for a disc. Reduces risk of a lockup if the drive is in a erroneous state. */ sceCdInit(SCECdINoD); if (CDVD_Init() != 1) { RARCH_ERR("CDVD_Init library not initalizated\n"); } _init_ps2_io(); /* Prepare device */ getcwd(cwd, sizeof(cwd)); bootDeviceID=getBootDeviceID(cwd); waitUntilDeviceIsReady(bootDeviceID); #if defined(HAVE_FILE_LOGGER) retro_main_log_file_init("retroarch.log"); verbosity_enable(); #endif }
void InitPS2() { int i, sometime; static char hddarg[] = "-o" "\0" "4" "\0" "-n" "\0" "20"; static char pfsarg[] = "-m" "\0" "4" "\0" "-o" "\0" "10" "\0" "-n" "\0" "40"; SifInitRpc(0); // Reset IOP borrowed from uLaunchelf while (!SifIopReset(NULL, 0)){}; while (!SifIopSync()){}; SifInitRpc(0); sbv_patch_enable_lmb(); SifExecModuleBuffer(&iomanX_irx, size_iomanX_irx, 0, NULL, NULL); SifExecModuleBuffer(&fileXio_irx, size_fileXio_irx, 0, NULL, NULL); SifExecModuleBuffer(&freesio2_irx, size_freesio2_irx, 0, NULL, NULL); /* SifLoadModule("rom0:XSIO2MAN", 0, NULL); SifLoadModule("rom0:XMCMAN", 0, NULL); SifLoadModule("rom0:XMCSERV", 0, NULL); SifLoadModule("rom0:XMTAPMAN", 0, NULL); SifLoadModule("rom0:XPADMAN", 0, NULL); */ SifExecModuleBuffer(&mcman_irx, size_mcman_irx, 0, NULL, NULL); SifExecModuleBuffer(&mcserv_irx, size_mcserv_irx, 0, NULL, NULL); SifExecModuleBuffer(&freemtap_irx, size_freemtap_irx, 0, NULL, NULL); SifExecModuleBuffer(&freepad_irx, size_freepad_irx, 0, NULL, NULL); #ifdef SOUND_ON SifExecModuleBuffer(&freesd_irx, size_freesd_irx, 0, NULL, NULL); SifExecModuleBuffer(&audsrv_irx, size_audsrv_irx, 0, NULL, NULL); #endif SifExecModuleBuffer(&SMSUTILS_irx, size_SMSUTILS_irx, 0, NULL, NULL); SifExecModuleBuffer(&usbd_irx, size_usbd_irx, 0, NULL, NULL); SifExecModuleBuffer(&usbhdfsd_irx, size_usbhdfsd_irx, 0, NULL, NULL); for (i = 0; i < 3; i++) { // Taken from ulaunchelf sometime = 0x01000000; while (sometime--) asm("nop\nnop\nnop\nnop"); } SifExecModuleBuffer(&poweroff_irx, size_poweroff_irx, 0, NULL, NULL); SifExecModuleBuffer(&ps2dev9_irx, size_ps2dev9_irx, 0, NULL, NULL); SifExecModuleBuffer(&ps2atad_irx, size_ps2atad_irx, 0, NULL, NULL); SifExecModuleBuffer(&ps2hdd_irx, size_ps2hdd_irx, sizeof(hddarg), hddarg, NULL); SifExecModuleBuffer(&ps2fs_irx, size_ps2fs_irx, sizeof(pfsarg), pfsarg, NULL); mcInit(MC_TYPE_XMC); #ifdef CDSUPPORT SifExecModuleBuffer(&cdvd_irx, size_cdvd_irx, 0, NULL, NULL); cdInit(CDVD_INIT_INIT); CDVD_Init(); #endif #ifdef SOUND_ON audsrv_init(); #endif mtapInit(); padInit(0); mtapPortOpen(0); }
int init_load_irx(char *gz, int gz_size, module_t *modules, int num) { int i; int ret; char *tar; int tar_size; char *module; int module_size; smod_mod_info_t mod_t; tar_size = gzip_get_size(gz,gz_size); tar = malloc(tar_size); if ((ret = gzip_uncompress(gz,tar)) != Z_OK) { free(tar); return ret; } if (tar == NULL) { return -1; } for(i = 0; i < num; i++) { if(!smod_get_mod_by_name(modules[i].name, &mod_t)) { if (get_file_from_tar(tar,tar_size,modules[i].module, &module, &module_size) < 0) { #ifdef DEBUG printf("Failed to find module: %s\n", modules[i].module); #endif modules[i].result = -1; free(tar); return -1; } if (SifExecModuleBuffer(module, module_size,modules[i].arglen, modules[i].args, &modules[i].result) < 0) { #ifdef DEBUG printf("Failed to load module: %s\n", modules[i].module); #endif modules[i].result = -2; free(tar); return -2; } if (modules[i].result) { #ifdef DEBUG printf("Failed to start module: %s\n", modules[i].module); #endif free(tar); return -3; } } else { #ifdef DEBUG printf("Possible module conflict\n"); #endif free(tar); return -4; } } free(tar); return 0; }
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; }