PS3 [IDEA] Enabling Individual Gameboots for each emulator/system/homebrew

DeViL303

Developer
PSX-Place Supporter
Just had this idea, So decided to make a thread.

I realized with just a couple of 1 byte "on the fly" patches to custom_render_plugin.sprx, we can have different gameboots show up for each system type, or even for each homebrew.

How I achieved this is by adding separate pages and animation scripts to custom_render_plugin.rco. I also added the 5 images.


So normally there is just this one page in the rco for gameboots:
upload_2021-2-23_16-49-18.png


There is also just one gameboot animation script like this:
upload_2021-2-23_17-24-2.png


What I did was add new pages for each system like this, as you can see each one has its own logo referenced for that system, in this example I added pages for PS1, PS2, PSP, PSN and ROMs.
upload_2021-2-23_17-22-37.png



Then I also added new animation scripts for each system like this, as you can see each one references its own custom logo. I added one of each to match each logo.
upload_2021-2-23_16-55-5.png


So this rco will work completely normally on normal CFW or OFW, you will notice no changes. BUT if you apply a couple of small patches to these areas in custom_render_plugin.sprx then you can get each logo and animation to show up

upload_2021-2-23_17-3-46.png

upload_2021-2-23_17-4-21.png


If we want to use multiple audio files too, then we need to apply a small patch to the path for those too. I was thinking maybe a 1 byte patch here:

upload_2021-2-23_17-6-26.png



So is there any way to have these small patches applied automatically depending on what type of game is booted?

If I give these slightly different names we would only be talking about 3 x 1byte patches for the logos, and 2 1 byte patches for the audio.

Adding these 5 extra gameboots only added 20kb to the rco, so in theory we could have different custom gameboots for every homebrew if we wanted.

Would this be a possible to patch with back up managers like webMAN MOD or maybe it needs Cobra or a custom plugin. Any one have any thoughts or ideas?

I have tested this, and it works if I manually swap the sprx, obviously that requires a reboot. So this would need to be patched in RAM or something like that.

Something like:
  • If content ID = PSP launcher then apply this patch
  • If content ID = PS2 launcher then apply this other patch
  • etc
  • etc
 
Last edited:
@DeViL303 Maybe sony intended to do that, but at some point they ditched it and implement it directly on the emulator like the PS2 and PS1 logos?

I said that because we had the entries coldboot1 up to coldboot5 and on modern firmwares gameboot1 up to gameboot5, also do you know that the otherboot is used now on DVD/BD discs? i made two gameboots, one for the games and another for video discs, maybe we can patch the otherboot to another more useful content or try to find out the use of the other gameboot2 and etc...

Qi0DCqZ.png


hUBWKcL.png


the only issue is that the objects overlaps themselves from each gameboot to the other, so in each of them the object from the other one needs to be hidden
 
Last edited:
I think my way is better, we can fairly easily call a different animation script on the fly, but modifying lines inside an animation script on the fly would be much harder or maybe impossible.

The thing is if we have the ps3 gameboot enabled then it shows before PS2 and PSP games too when using the launchers. Using my method above we could even have a different gameboot for specific apps, so for example Retroarch could show its own logo when it boot etc.

Other common apps or homebrew could have their own gameboots added too. Adding these 5 gameboots was only 20kb, so at only 4kb per gameboot we could add loads, one for every homebrew if we wanted.
 
Maybe the remap of the resource files is the easier way to get the random animation/sound.
The problem is that the rco is already cached when we change it and we only see the change after the 2 gameboot.

Thre is another way to redirect the files patching VSH.self in memory.
upload_2021-2-23_14-43-19.png


If we find the address where custom_render_plugin is loaded, maybe we could patch the sprx in memory.
But I haven't done that with sprx, only with self
 
If we find the address where custom_render_plugin is loaded, maybe we could patch the sprx in memory.
But I haven't done that with sprx, only with self
I can do a full dump, and then find the exact locations of each custom_render_plugin.sprx string that would need patching if that helps.

If it is possible for this to work, I think using the content ID would be the best way. So if the animations script names, and page/plane names are exactly the same as the content ID this should make it simpler.

Quick example of how it could look in the rco. note that the plane name only has space for 7 characters in the sprx, so in this example I just used the first 7 characters of the content ID for the plane names, I think this would work ok in practice. Homebrew content IDs are generally unique anyway, and even if there are some conflicts, the worst that would happen is the wrong gameboot would show.

On second thoughts, using the LAST 7 characters would be better and have less chance of having conflicts.

upload_2021-2-23_19-15-20.png



upload_2021-2-23_19-12-31.png
 
Last edited:
If it is possible to do this, We would need some kind of list of supported Content IDs stored somewhere too, obviously we can not add every content ID of every game ever made to the rco, so it would need to have a list of apps/games that support this stored somewhere, if the content ID is on the list, then apply the content id patches to the sprx in ram..

Not sure if this helps, but I did a full dump, and this is where the custom_render_plugin.sprx is in RAM.

I had my system set to show the ps1 gameboot from my modded rco when I did this dump. Normally it would look like the images in the first post.

upload_2021-2-23_20-46-31.png


@aldostools I am not sure if applying patches at specific offsets would work though, like I have to assume that the positions will be slightly different depending on what CFW the user is on, and also if other files are modded then these positions will be slightly different. Maybe RAM patches like this are normally done by searching an area for strings rather than hardcoded offsets?

It would be a nice new feature to have custom gameboots for every homebrew app if it was possible.

P.S. If I wanted to patch this area of RAM with wMM, what would the syntax be for a web command? Can you give me an example of patching one byte , then I can do some tests myself.
 
Last edited:
If it is possible to do this, We would need some kind of list of supported Content IDs stored somewhere too, obviously we can not add every content ID of every game ever made to the rco, so it would need to have a list of apps/games that support this stored somewhere, if the content ID is on the list, then apply the content id patches to the sprx in ram..

Not sure if this helps, but I did a full dump, and this is where the custom_render_plugin.sprx is in RAM.

I had my system set to show the ps1 gameboot from my modded rco when I did this dump. Normally it would look like the images in the first post.

View attachment 31565

@aldostools I am not sure if applying patches at specific offsets would work though, like I have to assume that the positions will be slightly different depending on what CFW the user is on, and also if other files are modded then these positions will be slightly different. Maybe RAM patches like this are normally done by searching an area for strings rather than hardcoded offsets?



It would be a nice new feature to have custom gameboots for every homebrew app if it was possible.

P.S. If I wanted to patch this area of RAM with wMM, what would the syntax be for a web command? Can you give me an example of patching one byte , then I can do some tests myself.

Try this 0/getmem.ps3mapi?proc=16777984&addr=d3dc80

upload_2021-2-23_22-51-14.png


In the text area at the bottom of the screen you can enter the new hex codes.

This screen shows a link for [Dump process]. This function will be available soon.
It allows to dump large blocks of memory for a process (VSH or EBOOT)

Use LEFT/RIGHT keys on the PC to browse the memory manually.

Make sure the address starts in the position where you want to apply the patch.
upload_2021-2-23_23-5-46.png
 
Last edited:
I'm having no luck with that, looks like its in a different place on my system. This just shows me nulls 0/getmem.ps3mapi?proc=16777984&addr=d3dc80

I guess it's cos I am on different CFW or something. If its going to be in different places for everyone this will not work.

I also had it show up in a different place once in my own dumps. So not sure what is going on tbh.

upload_2021-2-24_13-28-15.png


upload_2021-2-24_13-27-48.png




I do not really understand this bit: proc=16777984 , Is there a way I can use the address from the full dump instead? like getmem.ps3mapi?addr=0327D9E0
 
Last edited:
This is what I wanted most. I would like xmb to recognize which app or game is going to start and activate the boot as configured. in the case of games for ps1 and ps2 it would only be necessary to disable the boot because the boot with logo is already included in the ISO itself. I hope you can. good luck to the committed and especially @ DeViL303 for starting this mod.

Enviado de meu SM-J600GT usando o Tapatalk
 
I'm having no luck with that, looks like its in a different place on my system. This just shows me nulls 0/getmem.ps3mapi?proc=16777984&addr=d3dc80

I guess it's cos I am on different CFW or something. If its going to be in different places for everyone this will not work.

I also had it show up in a different place once in my own dumps. So not sure what is going on tbh.

I do not really understand this bit: proc=16777984 , Is there a way I can use the address from the full dump instead? like getmem.ps3mapi?addr=0327D9E0

Try doing it manually, first enter to /getmem.ps3mapi

Attach the process 01000300_main_vsh.self and press Get button.

It will open the url with the process id like /getmem.ps3mapi?proc=16777984&addr=10000&len=128

If you use the latest build available online you will have the option to dump the process. It will open the URL:
/getmem.ps3mapi?proc=16777984&addr=10000&len=128&dump=400000

It will dump 4MB of the memory are by default (400000 = 0x400000 = 4,194,304 bytes = 4MB) into /dev_hdd0/mem_dump.bin
If you need to dump 8MB, use dump=800000
If you need to dump 16MB, use dump=1000000

From the PC if you click on the Find link it will prompt for a search value and it will search for the offset in the next 8MB starting from the address specified in addr= or you can enter manually the web command in the PS3. You can search text or binary (hex codes)
/getmem.ps3mapi?proc=16777984&addr=C00000&find=Canyon
/getmem.ps3mapi?proc=16777984&addr=C00000&find=4C696E6573000000584D42

Notice that the search range is currently capped to 8MB, so you need to set the starting address to a closer address (C00000), otherwise it will search only 8MB and return the starting address if the code is not found.

If we manage to apply the patch manually successfully, it can be automated easily since the process id for VSH can be obtained using PS3MAPI and the relative offsets can be searched using the search feature.

**These are new debugging features and they could be improved in future updates if we need additional functions.**
 
This is what I wanted most. I would like xmb to recognize which app or game is going to start and activate the boot as configured. in the case of games for ps1 and ps2 it would only be necessary to disable the boot because the boot with logo is already included in the ISO itself. I hope you can. good luck to the committed and especially @ DeViL303 for starting this mod.

Enviado de meu SM-J600GT usando o Tapatalk
Yeah, if we can do this then disabling the gameboot completely for certain content IDs would not be an issue.

Although I kinda see the gameboot as a bit different to the logo shown when a game is loading up. The advantage to the gameboot done this way is that its easily customizable and its animated. Also it takes a second or 2 to boot an app anyway, so might as well show something here rather than just a black screen.


Here is a quick example of a how it might look with custom gameboots and sounds. For extra authenticity we can have it also play a real system sounds too.


Note: This video was made by swapping the sprx.


@aldostools nice one, I will try what you said with the new version.
 
Try doing it manually, first enter to /getmem.ps3mapi

Attach the process 01000300_main_vsh.self and press Get button.

It will open the url with the process id like /getmem.ps3mapi?proc=16777984&addr=10000&len=128

If you use the latest build available online you will have the option to dump the process. It will open the URL:
/getmem.ps3mapi?proc=16777984&addr=10000&len=128&dump=400000

It will dump 4MB of the memory are by default (400000 = 0x400000 = 4,194,304 bytes = 4MB) into /dev_hdd0/mem_dump.bin
If you need to dump 8MB, use dump=800000
If you need to dump 16MB, use dump=1000000

From the PC if you click on the Find link it will prompt for a search value and it will search for the offset in the next 8MB starting from the address specified in addr= or you can enter manually the web command in the PS3. You can search text or binary (hex codes)
/getmem.ps3mapi?proc=16777984&addr=C00000&find=Canyon
/getmem.ps3mapi?proc=16777984&addr=C00000&find=4C696E6573000000584D42


Notice that the search range is currently capped to 8MB, so you need to set the starting address to a closer address (C00000), otherwise it will search only 8MB and return the starting address if the code is not found.

If we manage to apply the patch manually successfully, it can be automated easily since the process id for VSH can be obtained using PS3MAPI and the relative offsets can be searched using the search feature.

**These are new debugging features and they could be improved in future updates if we need additional functions.**
It works. Those new features you added are really nice. Took me a while to figure it out but wow, this opens up loads of possibilities for me when it comes to on the fly patches.

So I patched RAM to use the ps1 gameboot logo and sound when the sprx was initially set to the normal gameboot. I did it with 3 individual patches. I tried patching the whole section in one big patch at first but I don't think it allows that. The 3 small patches worked perfect anyway.

Do you want me to get a set of 16 byte patches together for each gameboot so you can try apply them automatically? It will actually be 4x16byte patches in total per emulator. In my test I had not done the gameboot_multi.ac3 cos my setup is stereo.
 
Last edited:
@aldostools On second thoughts, For the gameboot audio, a remap to hdd would probably be better? Anyway, I think I should change the naming of the gameboot audio to be more intuitive.

something like
  • ps1_boot_stereo.ac3
  • ps1_boot_multi.ac3
  • ps2_boot_stereo.ac3
  • ps2_boot_multi.ac3
  • psp_boot_stereo.ac3
  • psp_boot_multi.ac3
  • rom_boot_stereo.ac3
  • rom_boot_multi.ac3
The animations I think are named ok.

If you have any ideas or want to change anything work away, you know best.

upload_2021-2-24_20-22-39.png



Here are the 2 animation patches for each system.

PS1
  • Patch 1 = 3F000000000000007073315F5F67616D
  • Patch 2 = 7073316C6F676F007073315F5F67616D
PS2
  • Patch 1 = 3F000000000000007073325F5F67616D
  • Patch 2 = 7073326C6F676F007073325F5F67616D
PSP
  • Patch 1 = 3F000000000000007073705F5F67616D
  • Patch 2 = 7073706C6F676F007073705F5F67616D
ROM
  • Patch 1 = 3F00000000000000726F6D5F5F67616D
  • Patch 2 = 726F6D6C6F676F00726F6D5F5F67616D
 
Yeah, if we can do this then disabling the gameboot completely for certain content IDs would not be an issue.

Although I kinda see the gameboot as a bit different to the logo shown when a game is loading up. The advantage to the gameboot done this way is that its easily customizable and its animated. Also it takes a second or 2 to boot an app anyway, so might as well show something here rather than just a black screen.


Here is a quick example of a how it might look with custom gameboots and sounds. For extra authenticity we can have it also play a real system sounds too.


Note: This video was made by swapping the sprx.


@aldostools nice one, I will try what you said with the new version.
It's very cool! but how would be the boot of the ps2 and ps1 that is within the iso of every game? does it appear right after?

Enviado de meu SM-J600GT usando o Tapatalk
 
I was testing your files, and I found some issues with your method. Two of them are severe.

I mapped your custom_render_plugin.rco to /dev_flash/vsh/resource/custom_render_plugin.rco
and custom_render_plugin_ps1.sprx to /dev_flash/vsh/module/custom_render_plugin.sprx

The first issue is that as we're on XMB, custom_render_plugin is already loaded in memory.
If I execute RELOADXMB the animation doesn't show in the first try. It shows fine after the initial reload.

This is the same issue that I had using /gameboot.ps3 that was remapping the .rco and .ac3 in folders.

The second issue is that if I try to change the theme, only remapping the .rco and .sprx, the console freezes.

The third issue is that when I patch the animation in memory and launch a game or application, the console freezes too.

This picture shows ps1__gameboot patched as ps2__gameboot.
upload_2021-2-24_18-16-51.png


I have fixed a few issues in /getmem.ps3mapi and added the option to search with wildcard characters, find the Nth occurrence of a text, and find non-aligned text (by default the search looks for aligned data).

Example:
/getmem.ps3mapi?proc=16777984&addr=800000&rep=8&step=1&find=*************_plugin

If need to search asterisks use &exact or enter the hex code.
/getmem.ps3mapi?proc=16777984&addr=800000&exact&find=*************
 

Attachments

I think you must have misunderstood, the rco should go on flash and just be a permanent patch in CFW IMO, it does not affect anything unless it is called upon, it only adds 20kb, I was not trying remapping sprxs or rcos at all due to the issues that has.

The sprx patch in RAM worked fine here. I will do some more testing.

Actually, that rco i used as a base might have the ps3 gameboot enabled by default. I can sort that so its just like the OFW rco unless RAM is patched.
 
Last edited:
The way I thought this would work is that webMAN MOD would detect the size of the rco, and if the rco is the size of the modded rco with animations added, then webman mod would assume the user wanted those animations and sounds called upon. Then it would patch RAM based on the game type mounted last.

It's my fault for not explaining it fully. I will do some more testing but I would say your issues were due to doing remapping. After doing more testing I will write out a step by step of what I did exactly. I will also add dvd and bluray logos too complete the set.
 
Last edited:
@aldostools On second thoughts, For the gameboot audio, a remap to hdd would probably be better? Anyway, I think I should change the naming of the gameboot audio to be more intuitive.

something like
  • ps1_boot_stereo.ac3
  • ps1_boot_multi.ac3
  • ps2_boot_stereo.ac3
  • ps2_boot_multi.ac3
  • psp_boot_stereo.ac3
  • psp_boot_multi.ac3
  • rom_boot_stereo.ac3
  • rom_boot_multi.ac3
The animations I think are named ok.

If you have any ideas or want to change anything work away, you know best.

View attachment 31590


Here are the 2 animation patches for each system.

PS1
  • Patch 1 = 3F000000000000007073315F5F67616D
  • Patch 2 = 7073316C6F676F007073315F5F67616D
PS2
  • Patch 1 = 3F000000000000007073325F5F67616D
  • Patch 2 = 7073326C6F676F007073325F5F67616D
PSP
  • Patch 1 = 3F000000000000007073705F5F67616D
  • Patch 2 = 7073706C6F676F007073705F5F67616D
ROM
  • Patch 1 = 3F00000000000000726F6D5F5F67616D
  • Patch 2 = 726F6D6C6F676F00726F6D5F5F67616D


@DeViL303 How about using it for DVD/BDs too? using otherboot ( the way i'm doing) does not allows to use different audio, so making one for movies would be nice supporting another sound.


  • media_disc_boot_stereo.ac3....
 
Back
Top