-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Developer Information
If you are wondering about websites and documents in order to gather information about certain parts of the PlayStation 3 here is a nice list to start with. Probably more things should be added here, but for now it is a good compilation of useful sources. If what your are looking for isn't below, remember that Google is your friend. If it's not, remember that other RPCS3 developers are your friends too. Ask them!
Best wishes and happy coding!
- Cell Broadband Engine Architecture (Version 1.02 / October 11, 2007)
- Cell Broadband Engine Programming Handbook (Version 1.12 / April 3, 2009)
- Cell Broadband Engine Registers (Version 1.5 / April 2, 2007)
- SPU Application Binary Interface Specification (Version 1.9 / July 18, 2008)
- SPU Assembly Language Specification (Version 1.7 / July 18, 2008)
- SPU Instruction Set Architecture (Version 1.2 / January 27, 2007)
- RSX Commands: http://www.psdevwiki.com/ps3/RSXFIFOCommands (Partially incomplete)
- Ask other developers.
- http://www.psdevwiki.com/ps3/
- Module SysCalls: Ask other developers.
- lv2 SysCalls: http://www.psdevwiki.com/ps3/LV2_Functions_and_Syscalls (A bit incomplete)
- lv2 SysCalls: Ask other developers.
####OE bit
Some instructions contain an optional OE
(overflow excpetion) flag. We currently do not implement those versions of the instructions. For example we emulate add
, addze
, subfme
but not addo
, addzeo
, subfmo
which are just the prior operations with the OE
flag set.
This flag writes to the OV
and SO
(overflow and summary overflow) bits of the XER (Fixed-Point Exception Register) register. The reason why it's not implemented is that the GCC code emitter does not use these instructions and so we haven't found any PS3 software that uses it.
If we find some software that has some handwritten assembly that use those instructions we'll need to implement it (or just for completeness). A good reference for XER bits can be found in PowerPC Microprocessor Family: The Programmer's Reference Guide chapter 1.3 and other linked references.
For the implementation of the interpreter it would probably be best to refrain from x86 assembly or compiler intrinsics like __readeflags
to determine a overflow. Probably something from the answers to this SO question is what we should consider.
####Misc (Some of this information can be deleted, or at least it should be properly organized).
-
sizeof(char)
= 1 (= 8 bits) -
sizeof(short)
= 2 -
sizeof(int)
= 4 -
sizeof(long)
= 4 -
sizeof(long long)
= 8 -
sizeof(size_t)
= 4 -
sizeof(sys_memory_container_t)
= 4 -
sizeof(void*)
= 4
Reading from invalid addresses / Trying to execute code from invalid addresses (e.g. stack) / Trying to write to invalid addresses (e.g. functions) makes the application exit on real PS3s.