vitaRescale is an upcoming plugin that will allow you to change PSVITA games resolution in order to get smoother fps or better looking graphics.
To do so, vitaRescale patches some data in the game executable on boot so that it will change renderer and framebuffer settings.
IDA Pro is not linked here since it's not a freeware tool.
Decrypting the eboot.bin
The eboot.bin file is just a standard decrypted SELF executable. To let us use it with IDA Pro, we'll need to strip the SELF header and so get the decrypted ELF file. To do so we'll use unfself.
- Place eboot.bin and unfself.exe in the same directory.
- Open a command line window (cmd) and go into where unfself is located with it.
- Type unfself eboot.bin eboot.elf
Getting ready with IDA Pro
Start IDA Pro 32 Bit and drag the eboot.elf file in it.
You'll get asked how you want to load the file.
Be sure the settings are set the same as this screenshot and press OK:
Getting the address(es)
Now the funny part starts.
We must find the references in the game code where the resolution is set.
Short story long, the easiest way to find some references are to search for the original resolution the game runs at (Can be checked with VITA2PC plugin) and look into the code for some juicy reference.
There will be games having even more resolution values depending on what elements it's drawing (eg. Ridge Racer has a 3D Rendering resolution (720x408) and a Vita framebuffer resolution (960x544).).
In this way we'll for sure get the Vita framebuffer resolution to change getting some difference on screen with the original game.
In this sample, we're going to look into Digimon Story: CyberSleuth.
This game runs at 960x544 resolution natively so let's press ALT+I and let's write 960 in Value to search and let's check Find all occurrences.
We'll get a screen with all the results.
What we're looking to are plain values and or MOV calls. These are the most possible to be our desired resolution.
We can be also sure we're facing resolution value if the value of the screen height is near the width value (in hexadecimal).
In the case of Digimon, we have this:
If we right click on the address we found, we can switch set the view as Double word:
And right clicking again will allow us to set the decimal rappresentation (960 in this case):
Repeating this with the next value will show us this:
Seems we found our address!
Now the last step remaining is to get the relative address depending on the segment it's in.
Near the address we can see the segment number (seg001 -> 1).
Now press Shift + F7 to open the segments subview.
Check the relative segment Start and do a simple subtraction: segment you got - segment start; this will be the address to use in vitaRescale!
In our case it's 0x81507F8C - 0x815007C0 = 0x77CC on segment 1:
That's all folks, hope you get into this and push new addresses to improve vitaRescale more and more!