Reserve all 128, PARAM.SFO should have param_max_len and param_len to 0x80 and be null padded. The entry bytes will be stored with in database (DB doesn't make checks on strings, endocing, etc it simply copies the bytes). The trick is that when the XMB reads the data from db it will get all the 128 bytes and try to parse it in a string. It should stop at the first null byte since that serves as terminator. All the app has to do is write the bytes of the updated title and a null byte.
I tryed it but doesnt works sadly :/
1) I installed PSP_Remaster_Launcher_Fixed_3D.pkg.651.v2.00.pkg, then i installed Priority_ON_for_PSP_Launcher.pkg.656.v0.01.pkg (both downloaded from brewology, both apps are installed in the same path)
2) I prepared an SFO with both the "max length" and "used lenght" of the TITLE = 0x80
3) Then i used a filemanager to overwrite it
4) Reboot the PS3 into recovery menu and "rebuild database"
And the TITLE in the database did not store the bytes reserved by the 0x80
I think what happens is the "database manteinance" plugin caught the error even before the TITLE is stored :/
So i guess the only way to reserve the bytes in the database is by adding some 0x20 bytes after the name in the PARAM.SFO ...not tested but im guessing this should work
-----------------------
Now something interesting i noticed, the TITLE is stored multiple times in the database (32 times in my db)
But i think i know why is made this way partially (and is a bit retarded, hold on to the chair)
Inside a PARAM.SFO can be stored 1 TITLE and 20 TITLE_xx (where the xx represents a language code)
https://www.psdevwiki.com/ps3/PARAM.SFO#TITLE
All this strings are stored together, preceded by a value of 4 bytes lenght, aligned to 4 bytes boundary individually, and all them concatenated, as example (in just showing 3 repetitions in this example):
Code:
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
000382D0 0C 20 26 1E 80 50 53 50 20 4C . &.€PSP L
000382E0 61 75 6E 63 68 65 72 00 00 00 00 0C 20 26 1E 80 auncher..... &.€
000382F0 50 53 50 20 4C 61 75 6E 63 68 65 72 00 00 00 00 PSP Launcher....
00038300 0C 20 26 1E 80 50 53 50 20 4C 61 75 6E 63 68 65 . &.€PSP Launche
00038310 72 00 00 00 00 0C r.....
Here the unknown value is 0x0C20261E80 it seems to change if you rebuild database
*The first byte of the unkown value (0x0C) doesnt changes if you rebuild database, it seems to be the lenght of the string

*The other 4... dunno, but probably a timestamp ?
The point is... all this area can be mapped by using: unknown_value + string + padding alignment
repeat that search pattern 21 times and you have the whole area
-------------
After this area appears some shit (that doesnt follows what i explained), in one of the test this area had 0x3B size, in other test 0x5B bytes, no idea what is it, but it has variable size
And then the TITLE repeats another 11 more times

I cant imagine what is the purpose of this "additional" TITLE... but my understanding is are different of what i explained... so maybe is not needed to patch them... dunno