The protocol itself is quite simple. It's a byte based, multi-slave, single-master, full duplex SPI system with some seemingly randomly chosen magic numbers. However, the various playstations are REMARKABLY picky about protocol violations at times, and the original playstation, PSOne, PS2, and slim PS2 all seem to have slightly different things they will either tolerate or outright reject. If you want to talk to a controller, rather than the playstation, there's a whole different set of subtle protocol violations (which are surprisingly easy to make without realizing it) which will be tolerated or cause strange failure modes.
It took me a couple months playing around with various units and an oscilloscope to get my firmware working between all the major devices.