December 30, 2013 // 9:30 pm
- Following up on his previous
updates, PlayStation 3 developer 3141card
has shared a PS3 XMB Blitting POC Plugin alongside a demo video of it in action below.
To quote: I found a way for blitting information on the XMB screen, it is not perfect atm and work only in main XMB, not ingame. I found some bitmap-data in main ram, and poke other RGBA values on this place.
I make a simple framebuffer, print text in him and poke him on the screen. The example have only a blue background and white text, but more complex things are possible, inclusive nice interactive GUIs.
Here is the sprx+source, it is very simple, not perfect only a quickly written test app... I test it only on rebug 4.46, after booting hold R2 and press Start, it will only work after bootup!!! Not after leaving a Game or App.
Copy PIC1.PNG from download (blitting_xmb_test_PIC1_PNG.rar) in e.g. multiman dir. In XMB go on multiman and press select. Simple example, draw only one frame if select was pressed.
Furthermore, it is a stupid method, but if no better way arises... in principle:
IO module is running all the time the ps3 is running.
IO module awaits input from many devices, not only pad, also Kb and mouse.
The system (XMB, in Game XMB), hombrew like multiman and also in background running prx, need a struct for handle the input.
This is a ram dump from my rebug 4.46C ps3. At offset 0x10389F4 is the pad-data struct.
[Register or Login to view code]
00 00 = DIGITAL2 (if O is pressed = 00 20, see psl1ght header files for pad to understand the flags)
The point, if you are in game and press O on your pad, to set this value in the pad-data struct of the running game to 00 20 or use a in backround running plugin to set this value with poke to 00 20 if you press a special Keyboard button, it is the same.
Analogstick (00 82 00 82 00 80 00 80) 2 Mouse is a little bit more tricky, but also possible.
If you have rebug 4.46C running, here (linked above) is a simple ram viewer prx, based on the blit into PIC1.PNG. Look at offset 0x8000000001038800 and 0x8000000001038A00 for the pad-data struct, press e.g. O and you see the altered values...
I use it only on 4.46C with Users prx loader. Work only in XMB, is not stable, only some playing for me, not a release !
- Go in games column on the app with the special PIC1.PNG, press select to toggle the hex-viewer on/off.
- Use R1 and L1 to go one sector up or down,
- Hold R2 and use R1 und L1 to go 1 KB up or down,
- Hold L2 and use R1 und L1 to go 1 MB up or down.
EDIT: fixed a stupid copy-past error in source code of prx
Blitting in XMB Background PNG Example (see video and files above):
The background png must be 1920x1080 and set 100% (no scaling!) Select button start/stop blitting, work only in XMB, kk
Its a simple example, no event checks, blitting stop not automatically! Use select to stop blitting before you start a app/game or shutdown the PS3, Otherwise your PS3 crashes.
: May 5, 2014: Two freezing bugs fixed.. new sprx+src (linked above) and please notice, its a example, a concept, not really an app.
Will not work, it need the background png (say png, mean the ARGB area in local memory for the bg) to see the blitting area.
I have tried several things, but nothing stop fast enough, the prob are the short time to write a finished frame in local mem. In XMB there are 0x0FE00000 (254MB) accessible, the bg area begins at 0x00C80000, the raw ARGB data 0x200 later. If a eboot.bin starts, only 0x00500000 (5MB) are now accessible, so r/w offset 0x00C80200 and higher = freeze. say it again, blitting is stupid
time to look at gcm...
Hhmm, found a more cooperative mutex, now blitting stop automatically by game/app start or shutdown. I also lock now the gcm_lwmutex during r/w processes to local mem.
I use furthermore 4.46 CEX rebug + User's prx-loader for testing a prx, keep that in mind if use other MFW's.. same link as before (write no change log or make revisions, is not a app and simple source code say all, if someone will use the method)
Another change, skip the mutex stuff and stop blitting now each time the X button is pressed, that stop blitting also if you go on trophies or a sub-menu under setting, don't like it but better than a freeze.
I don't know how the power-button can be checked, so if you shutdown over power-button during blitting, PS3 will freeze.