PS3 IRISMAN v3.47 (Unofficial Update by Alexander) : Now with 4.75 Support

UPDATE (v3.47.1) Alexander released a new updates adding NzV's MAMBA. -- Many IRISMAN fans will be pleased with this update, Although not an official update from Aldostools the original creator of this Iris Manager fork. developer Alexander provides and unofficial update (v3.47) to the multi-purpose homebrew application to provide support for the latest 4.75 (CEX) CFW's[ break]ss[/break]. This update provides Full Mamba Payload Support & also the payload to the Fan Control Utility has been updated for new firmware support.



IRISMAN.png


NEW IRISMAN 3.47.1 (UNOFFICIAL UPDATE by Alexander)
  • Updated new MAMBA of _NzV_
  • Updated patches deank with those of Matsumoto

NEW IRISMAN 3.47 (UNOFFICIAL UPDATE by Alexander)
  • Updated payload for Custom Firmware 4.75 CEX (including payload MAMBA)
  • Support payload 4.75 the Fan Control Utility

IRISMAN 3.46 (UNOFFICIAL UPDATE by Joonie)
  • Updated Payload for 4.70 CEX
  • 4.70 DEX support including MAMBA
  • Fixed fan controller payload: [however, it still has old audio glitching bug when using payload mode since the official IRIS, I personally recommend webMAN instead]
  • Korean language support
  • Fixed auto button swap, all previous IRISMAN used to execute read_settings() before read_from_registry();, which explains why it was not working properly without changing ini file, now it properly detects region setting from registry, and apply that "buttonAssign" setting to IRIS without changing setting.ini, this should make all Asian users happier.


Previous Official Updates

IRISMAN v3.45 (Feb 25/2015)
+ Fixed error 8001003D (thanks Orion for the hint)
+ Fixed incorrect offset for fix 8001003C (thanks to Joonie)
+ Fixed missing 0 in offset of idps spoofer


IRISMAN v3.44 (Feb 24/2015)
+ Added support for cfw 4.70.
+ Added mamba payload for 4.70 by NzV
+ Added prx payload and prxloader 1.09 for 4.70 by NzV
+ Updated sprx_iso with a new Cobra payload that allows to load PSXISO CD with sectors sizes 2048, 2352, 2336, 2448

IRISMAN v3.43 (Feb 6/2015)
+ Fixed regression mounting of ISO.
+ Added support to make BDISO for non PS3 game folders.
+ Added scanning of RetroXMB movies (RXMOV*) stored on hdd0
+ Tweaked button speed for faster browsing of game list


Special thanks to aldostools to his manager and I hope you come back soon on the scene.
The boys MiZiO90, SNK, REIZA72 (Assiduous Beta Tester)

Credits:

  • Estwald & D_Skywalk: Iris Manager
  • Aldostools: IRISMAN (iris manager fork)
  • Alexander: Unofficial (IRISMAN) v3.47 Update




Download: IRISMAN v3.47.1 (UNOFFICIAL) - Mirror
SRC CODE / Mirror


Source: OpenModding

Additional information about IRISMAN can be seen in our PSX-Place.com Forums --> LINK
 
[MENTION=29]Joonie[/MENTION]
ok, it you are right. iris does not work with extracted iso and it does not call for aio patch
 
[MENTION=29]Joonie[/MENTION]
ok, it you are right. iris does not work with extracted iso and it does not call for aio patch

I'm kinda curious about how COBRA detects those specific titles that are in need of this call.. Without COBRA you have to assign this manually via back up managers. But IRIS also needs to manually assign this call via game config.. regardless of COBRA

Code:
int sys_aio_copy_root(char *src, char *dst)
{
	int len;
	
	src = get_secure_user_ptr(src);
	dst = get_secure_user_ptr(dst);
	
	// Begin original function implementation	
	if (!src)
		return EFAULT;
	
	len = strlen(src);
	
	if (len >= 0x420 || len <= 1 || src[0] != '/')
		return EINVAL;
	
	strcpy(dst, src); 
	
	for (int i = 1; i < len; i++)
	{
		if (dst[i] == 0)
			break;
		
		if (dst[i] == '/')
		{
			dst[i] = 0;
			break;
		}
	}
	
	
	if (strlen(dst) >= 0x20)
		return EINVAL;	
	
	// Here begins custom part of the implementation
	if (strcmp(dst, "/dev_bdvd") == 0 && condition_apphome) // if dev_bdvd and jb game mounted 
	{
		// find /dev_bdvd
		for (int i = 0; i < MAX_TABLE_ENTRIES; i++)
		{
			if (map_table[i].oldpath && strcmp(map_table[i].oldpath, "/dev_bdvd") == 0)
			{
				for (int j = 1; j < map_table[i].newpath_len; j++)
				{
					dst[j] = map_table[i].newpath[j];
					
					if (dst[j] == 0)
						break;
					
					if (dst[j] == '/')
					{
						dst[j] = 0;
						break;
					}
				}
				
				#ifdef  DEBUG
				DPRINTF("AIO: root replaced by %s\n", dst);		
				#endif 	
				
				break;
			}
		}
	}			
		
	return 0;
}

Found it
 
Last edited:
I'm kinda curious about how COBRA detects those specific titles that are in need of this call.. Without COBRA you have to assign this manually via back up managers. But IRIS also needs to manually assign this call via game config.. regardless of COBRA

Code:
snip

Found it
so you just have to add apphome remapping, just like webman i assume
 
you found it on stage2/mappath.c?

It might be an idea to implement an auto-detection for games that require BD-MIRROR, Discless etc without having to configure the settings IrisMan (if you are using games by folder) ,without necessarily having to convert them to ISO.

" so you just have to add apphome remapping, just like webman i assume "

It could be a possible solution.
 
so you just have to add apphome remapping, just like webman i assume

I don't like the idea since mmCM/webMAN already do it just fine without remapping

you found it on stage2/mappath.c?

It might be an idea to implement an auto-detection for games that require BD-MIRROR, Discless etc without having to configure the settings IrisMan (if you are using games by folder) ,without necessarily having to convert them to ISO.

" so you just have to add apphome remapping, just like webman i assume "

It could be a possible solution.

Yes. I found that code from mappath..
 
aio is only patched when apphome remapping is detected and webman does remap it. at least this old version i am using. folder games can be started from apphome when using webman.
 
aio is only patched when apphome remapping is detected and webman does remap it. at least this old version i am using. folder games can be started from apphome when using webman.

Thought we were working on IRIS here?

Let me see if this helps

Code:
"	map_path("/app_home", "/dev_usb000", 0);"
 
Last edited:
Thought we were working on IRIS here?

Let me see if this helps

Code:
"	map_path("/app_home", "/dev_usb000", 0);"
i just was stating, that adding this remapping to iris, could maybe help with it making aio cobra patches get applied without using its patched files. i didn't want to go offtopic here.
 
i just was stating, that adding this remapping to iris, could maybe help with it making aio cobra patches get applied without using its patched files. i didn't want to go offtopic here.

The code doesn't seem doing anything.. =_=
 
sorry that i maybe confused you, but i haven't meant this mappath patch. i was talking about the patches webman does, adding to iris
 
I'm not sure

I think it's because IRISMAN is using the syscall 35 to map path and not syscall 8

look in cobra.c

#define SYSCALL8_OPCODE_MAP_PATHS 0x7964
int sys_map_path(char *oldpath, char *newpath);
int sys_map_path(char *oldpath, char *newpath)
{
#if 1
lv2syscall2(35, (u64)oldpath, (u64)newpath);
#else
char *paths[1]={NULL}; char *new_paths[1]={NULL};
paths[0]=oldpath;new_paths[0]=newpath;
lv2syscall4(8, SYSCALL8_OPCODE_MAP_PATHS, (u64)paths, (u64)new_paths, 1);
#endif
return_to_user_prog(s32);
}

If condition_apphome is 1, it means there is a JB game mounted

in map_path you have
map_path(oldpath, newpath, flag) {
...
if (strcmp(oldpath, "/dev_bdvd") == 0)
{
condition_apphome = (newpath != NULL);
}
...
}

aio_root_copy and patches libfs & explore_plugin patches need "condition_apphome" == 1
 
Last edited:
I'm not sure

I think it's because IRISMAN is using the syscall 35 to map path and not syscall 8

look in cobra.c





in map_path you have


aio_root_copy and patches libfs & explore_plugin patches need "condition_apphome" == 1

Thanks for the reply, yeah I tried enabling that apphome offset/patches in explore_plugin but didn't make any differences, besides mmcm/webman work fine without it, those are only needed when you want to run games via apphome but webman/mmcm already do it fine by themselves. I'll check with iris source when I get home

EDIT *

[MENTION=46]haxxxen[/MENTION] [MENTION=34]Zar[/MENTION] [MENTION=89]aldostools[/MENTION] [MENTION=56]Alexander[/MENTION] [MENTION=600]_NzV_[/MENTION] [MENTION=17]Orion[/MENTION]

I think the issue is these calls lacking in IRIS

int cobra_map_game(char *path, char *title_id, int *special_mode);
int cobra_map_paths(char *paths[], char *new_paths[], unsigned int num);

Code:
 * Maps a game in jailbreak directory format.
 *
 * path (in): the path to the directory with the game. If path is NULL, the curent game (if any) will be unmapped instead
 * title_id (in): the title_id of the game. If path is NULL, this value is ignore, otherwise it must be a 9 characters string. E.g. BLUS00001
 * special_mode (out): if special mode has been used, 1 will be returned here. 0 otherwise. If path is NULL, this variable is unused.
 *
 * Return values:
 * 0 -> success
 * EINVAL -> invalid parameter
 * ENOSYS -> Not in cobra
 *
 * Additional info: if path is not NULL, this function maps /dev_bdvd and /app_home to path
 * Additionally, if at the moment of calling this function, there is not a real disc, cobra will mount a dummy iso for the special discless mode.
 * Be sure to umount any iso before calling this function. Otherwise if it cannot mount the iso, the function will still succeed but special discless mode won't be used
 * Please note that this function may internally issue a fake_insert.
 *
 * Note for process spawn: it is possible that when you use the spawn function to direct boot a game, if you detect that there is no disc, you use /app_home/... path
 * to launch EBOOT.BIN. You should check in that case the value of special_mode: if true, you should use /dev_bdvd path instead for better compatibility.
 *
 * [U]When the game is unmapped, this function remaps /app_home to /dev_usb000 instead of deleting the entry[/U]
 */
[B]int cobra_map_game(char *path, char *title_id, int *special_mode[/B]);

Code:
/*
 * Maps several paths to others
 *
 * paths (in): an array with the original paths. If NULL, this function unmaps all paths that were mapped with this function
 * new_paths (in): an array with the new paths. If paths is NULL, this param is ignored, otherwise it cannot be NULL
 * num (in): the number of paths in both arrays. If paths is NULL, this param is ignored
 *
 * Return values (in):
 * 0 -> success
 * EINVAL -> invalid parameter
 * ENOSYS -> not in cobra or prior to cobra 4.2/5.0
 *
 * Additional info: cobra core evaluates the paths in the reverse order they were inserted in the table.
 * Assume that we want to map the following files:
 * /dev_bdvd/USRDIR/Dir1/Data.bin to /dev_hdd0/Data.bin
 * /dev_bdvd/USRDIR/Dir1  to /dev_hdd0/Dir1
 *
 * If you do the following:
 * char *paths[2], *new_paths[2];
 * paths[0] = "/dev_bdvd/USRDIR/Dir1/Data.bin", new_paths[0] = "/dev_hdd0/Data.bin";
 * paths[1] = "/dev_bdvd/USRDIR/Dir1", new_paths[1] = "/dev_hdd0/Dir1";
 * cobra_map_paths(paths, new_paths, 2);
 *
 * If the system tries to access "/dev_bdvd/USRDIR/Dir1/Data.bin", as paths[1] is evaluated first, the path would be
 * mapped to /dev_hdd0/Dir1/Data.bin, that is not the desired action.
 * The correct call would be:
 * paths[0] = "/dev_bdvd/USRDIR/Dir1", new_paths[0] = "/dev_hdd0/Dir1";
 * paths[1] = "/dev_bdvd/USRDIR/Dir1/Data.bin", new_paths[1] = "/dev_hdd0/Data.bin";
 * cobra_map_paths(paths, new_paths, 2);
 *
 * When mapping files of a game in jailbreak format, it is recommended to call this function before cobra_map_game
 * Setting paths to NULL ensures that all entries that were once added to the path table using this function are removed.
 * But those that were added using syscall35 will remain.
 *
 * If path is not NULL, and any of the paths in the "paths" array is NULL, EINVAL is returned.
 * If path is not NULL, and any of the paths in the "new_paths" array is NULL, that specific entry is unmapped instead of mapped.
 */
[B]int cobra_map_paths(char *paths[], char *new_paths[], unsigned int num);[/B]

By the way [MENTION=89]aldostools[/MENTION] your RELOAD.self doesn't mount any folder games at the moment.

It keeps trying to call opcode 9 from iris's own syscall 8

Code:
/dev_hdd0/vsh/task.dat, filesize: 20000
Syscall 8 -> 7020
Syscall 8 -> 7023
Syscall 8 -> 7020
Syscall 8 -> 7022
Storage event: 7  0  101000000000006
Syscall 8 -> 7022
Storage event: 3  ff7100000000  101000000000006
real disc type = ff71
effective disc type = ff71, fake disc type = 0
Disc auth: 5007 d00e9bf0 (process: 01000300_main_vsh.self)
Changed to part file 0
[B][U]Syscall 8 -> 9[/U][/B]
Storage event: 9  0  101000000000006

Code:
uint64_t sys8_path_table(uint64_t addr_table)
{
    [B][U]return syscall8(9ULL, addr_table, 0ULL, 0ULL[/U][/B]);
}

EDIT2
[MENTION=34]Zar[/MENTION]

I think you're close,, the issue seems to be iris calling its own syscall 8 opcodes instead of having cobra do the work..

It keeps calling sys8_path_table ( syscall8(9ULL, addr_table, 0ULL, 0ULL); instead of COBRA's sys_map_paths (SYSCALL8_OPCODE_MAP_PATHS, 0x7964) and aio_copy_root (SYSCALL8_OPCODE_AIO_COPY_ROOT , 0x6637)
 
Last edited:
When the game is unmapped, this function remaps /app_home to /dev_usb000 instead of deleting the entry
This is not related to bd-mirror.
BTW, a little bit OFF topic but i noticied a long time ago that this way to unmap the game are doing some weird behaviour in the XMB. It will show inside the "install package file" folder 2 entry for the same pkg : 1 from dev_usb and 1 from app_home, that's why I removed it (in comment) from MGZ. Also i'm only using syscall 35 to remap JB games because i think if we use syscall 8 we will be "forced" to use the patched lib and i wanted to keep control over it in "game option" of MGZ.

if (!path)
{
ret = sys_map_path("/dev_bdvd", NULL);
if (ret != 0)
return ret;

sys_map_path("/app_home", "/dev_usb000");
return 0;
}

and i'm pretty sure it's related to IRISMAN because estwald used the lib cobra only to mount ISO everything else still the same ;)
 
Last edited:
This is not related to bd-mirror.
BTW, a little bit OFF topic but i noticied a long time ago that this way to unmap the game are doing some weird behaviour in the XMB. It will show inside the "install package file" folder 2 entry for the same pkg : 1 from dev_usb and 1 from app_home, that's why I removed it (in comment) from MGZ. Also i'm only using syscall 35 to remap JB games because i think if we use syscall 8 we will be "forced" to use the patched lib and i wanted to keep control over it in "game option" of MGZ.



and i'm pretty sure it's related to IRISMAN because estwald used the lib cobra only to mount ISO everything else still the same ;)

Yes I've been messing with cobra.c/h and syscall8 in irisman but unfortunately I failed to force using cobra to handle folder rips.. Though added missing opcodes and changed a little bit of sys_map_path and sys_map_paths, i think the major fix should be done in main.c Anyhow estwald seemed wanting the same thing that you did with mgz, but I personally prefer automated stuff :)


Sent from my iPhone using Tapatalk
 
IMO, in one hand, some game won't work with BD-EMU and on the other, some game need the BD-EMU. Also, some game only work with BD-Mirror. For me, the best solution to have something automatic is to have a list of title ID and to use the best config. for the game.
 
I'm not sure

I think it's because IRISMAN is using the syscall 35 to map path and not syscall 8

Yes, IRISMAN is using syscall 35 (like original webMAN) instead of syscall 8 for sys_map_path(). If I switch the function to use syscall 8, it freezes IRISMAN.

Anyway the sys_map_path() is used only in File Manager to allow to map any folder as /dev_bdvd like webMAN... and the feature is a bit hidden, so I doubt it could be the cause :)

IMO the problem is sk1e payload (syscall 8) causing conflict with other Cobra opcodes also in syscall 8.

I have been trying a work around using cobra_map_path() -only when Cobra/Mamba is detected- to mount game folders in the exact way webMAN does.
[MENTION=29]Joonie[/MENTION] yes, the RELOAD.SELF from last night was rushed and was buggy.... today I uploaded a new one that I've tested and seems working... please, check your skype ;)
 
IMO, in one hand, some game won't work with BD-EMU and on the other, some game need the BD-EMU. Also, some game only work with BD-Mirror. For me, the best solution to have something automatic is to have a list of title ID and to use the best config. for the game.

cobra_map_game has a detection to apply aio_copy_root(a.k.a bd-mirror) whenever it's needed, it's not always applied, and so far I haven't seen this failing on games. Unless psnPATCH unhooks this call for the game that's needed.

Code:
int cobra_map_game(char *path, char *title_id, int *special_mode)
{
	int sm = 0;
	int ret;
	unsigned int real_disctype;
/*
	if (!path)
	{
		ret = sys_map_path("/dev_bdvd", NULL);
		if (ret != 0)
			return ret;

		sys_map_path("/app_home", "/dev_usb000");
		return 0;
	}

	if (!title_id || strlen(title_id) != 9)
		return EINVAL;
*/
	sm = 0;

	build_blank_iso(title_id);

	ret = sys_map_path((char*)"/dev_bdvd", path);
	if (ret != 0) return ret;

	if(special_mode)
		sys_map_path((char*)"/app_home", path);
	else
		sys_map_path((char*)"/app_home", NULL);

	sys_map_path((char*)"//dev_bdvd", path);
	//sys_map_path("//app_home", path);

	sys_storage_ext_get_disc_type(&real_disctype, NULL, NULL);

	if (real_disctype == 0)
	{
		cobra_send_fake_disc_eject_event();
		sys_timer_usleep(20000);

		char *files[1];
		char blank_iso[128];

		sprintf(blank_iso, "/dev_hdd0/vsh/task.dat");

		//if (blank_iso)
		{
			files[0] = (char*)blank_iso;

			//sprintf(files[0], "/dev_hdd0/vsh/task.dat");
			ret = sys_storage_ext_mount_ps3_discfile(1, files);
			//free(blank_iso);

			//if (ret == 0)
			{
				cobra_send_fake_disc_insert_event();
				sm = 1;
				sys_timer_usleep(20000);
			}
		}
	}

	if (special_mode) *special_mode = sm;

	return 0;
}

It would be nice if you could share those lists that you have for the games that require bdmirror. :) Thanks for your help always

*EDIT

[MENTION=89]aldostools[/MENTION]
[MENTION=34]Zar[/MENTION]
[MENTION=46]haxxxen[/MENTION]
[MENTION=17]Orion[/MENTION]
[MENTION=56]Alexander[/MENTION]

OK I got it working :) now we need to implement proper unmount for folder rips mounted by cobra_map_game :)

Thanks [MENTION=89]aldostools[/MENTION] again for your awesome work !!
 
Last edited:
cobra_map_game has a detection to apply aio_copy_root(a.k.a bd-mirror) whenever it's needed, it's not always applied

Do you how it's working ? where is it coded ?

It would be nice if you could share those lists that you have for the games that require bdmirror.

I don't have it. I was going to say the game of Mordor but dean already fixed it...
 
I think that as a base to use for games that require the BD MIRROR active, you can use the settings for example for COD Ghost, which issues from the folder, but not by ISO.
We could use the settings of this title for all games that require bd-mirror ( aio_copy_root )
 
Do you how it's working ? where is it coded ?



I don't have it. I was going to say the game of Mordor but dean already fixed it...
[MENTION=89]aldostools[/MENTION] has not finished with implementation. however in webman's code, I think this gives an idea of how it's used

Code:
			char tempID[16];
			char tempstr[4096];
			int fs;
			unsigned pos, str;
			unsigned char *mem = (u8*)tempstr;
			uint64_t msiz = 0;
			int indx=0;
			struct CellFsStat s;

			if(strstr(_path, "/dev_usb") && cellFsStat(_path, &s)==CELL_FS_SUCCEEDED)
			{
				for(u8 f0=0; f0<8; f0++) sys_storage_ext_fake_storage_event(4, 0, ((f0<6)?USB_MASS_STORAGE_1(f0):USB_MASS_STORAGE_2(f0)));
				for(u8 f0=0; f0<8; f0++) sys_storage_ext_fake_storage_event(8, 0, ((f0<6)?USB_MASS_STORAGE_1(f0):USB_MASS_STORAGE_2(f0)));

				sys_timer_sleep(1);

				if(strstr(_path, "/dev_usb00")) indx=_path[10]-0x30;

				sys_storage_ext_fake_storage_event(7, 0, ((indx<6)?USB_MASS_STORAGE_1(indx):USB_MASS_STORAGE_2(indx)));
				sys_storage_ext_fake_storage_event(3, 0, ((indx<6)?USB_MASS_STORAGE_1(indx):USB_MASS_STORAGE_2(indx)));

				sys_timer_sleep(3);

				for(u8 f0=0; f0<8; f0++)
				{
					if(f0!=indx)
					{
						sys_storage_ext_fake_storage_event(7, 0, ((f0<6)?USB_MASS_STORAGE_1(f0):USB_MASS_STORAGE_2(f0)));
						sys_storage_ext_fake_storage_event(3, 0, ((f0<6)?USB_MASS_STORAGE_1(f0):USB_MASS_STORAGE_2(f0)));
					}
				}

				sprintf(tempstr, "Setting primary USB HDD:\r\n     /dev_usb00%i", indx);
				show_msg(tempstr);
			}

			memset(tempID, 0, 16);

			sprintf(tempstr, "%s/PS3_GAME/PARAM.SFO", _path);
			if(cellFsOpen(tempstr, CELL_FS_O_RDONLY, &fs, 0, 0)==CELL_FS_SUCCEEDED)
			{
				cellFsLseek(fs, 0, CELL_FS_SEEK_SET, &msiz);
				cellFsRead(fs, (void *)&tempstr, 4096, &msiz);
				cellFsClose(fs);

				if(msiz>256)
				{
					str= (mem[8]+(mem[9]<<8));
					pos=(mem[0xc]+(mem[0xd]<<8));

					indx=0;

					while(str<4090)
					{
						if(mem[str]==0) break;

						if(!strcmp((char *) &mem[str], "TITLE_ID"))
						{
							strncpy(tempID, (char *) &mem[pos], 4);
							strncpy(tempID+4, (char *) &mem[pos+4], 5);
							break;
						}
						while(mem[str]) str++;str++;
						pos+=(mem[0x1c+indx]+(mem[0x1d+indx]<<8));
						indx+=16;
					}
				}
			}

			sprintf(tempstr, "%s", _path);
			//if(strstr(_path, "/dev_usb0")) sprintf(tempstr, "/dev_usb%s", _path+11);
			int special_mode=0;
			if(tempID[0] && tempID[8]>0x2f)
				cobra_map_game(tempstr, tempID, &special_mode);
			else
				cobra_map_game(tempstr, (char*)"TEST00000", &special_mode);
		}
[MENTION=89]aldostools[/MENTION] stated that implementation of mount/unmount folder rips needed a lot of dependencies I could imagine this being so difficult considering the fact cobra supports various storage paths for folder rips. [dev_hdd0/usb0xx/netx/]

I still have a problem with unmounting games T_T
 
Back
Top