Whilst I’ve only built a limited range of hardware so far - I’ve done a fair amount of research on what is and is not possible when it comes to interfacing to the Playstation. The main issue surrounds the analogue thumb joysticks. From my investigations there are several options which could work:
1) Direct replacement of the analogue thumb sticks. This is the obvious thing to do and initially I didn’t think there was much scope as PC gameport sticks use 100K potentiometers (pots) and Sony analogue controllers use 10K pots.
However I have found a way to rewire some types of PC gameport sticks so they can be connected directly to a Playstation analogue controller. Click HERE for further details.
2) Hardwired interface. Using a combination of resistors and transistors a very crude hardwired interface could be made. In its simplest terms this would act much like one of my existing Atari 9 pin interfaces - but instead using the analogue controller sticks. In use - if the PC stick was pushed left - the interface would fool the analogue controller into believing the analogue thumb stick had been pushed left 50%. The same would be true for the other directions. With a simple system like this - you get direction - but not proportional control.
The 50% on value could of course be adjusted to whatever you like - and indeed the interface could be expanded to provide a couple or 3 levels of movement (say 25%, 50% and 75%) but this would start getting complicated.
I don't think option 2 is a very useful solution - but I may well build one as its easy to do and is the first proper step towards a proper PC gameport interface.
3) By far the best option is using a microprocessor. Its certainly the most complicated - but by using embedded controllers such as the PIC chips much of the hard work has been done for you.
One of the more obvious choices is the 16F877 as this also includes analogue to digital converters. However this would require rewiring the PC gameport joysticks as they need to work as voltage dividers not variable resistors.
Actually I'm planning to use the cheaper 16F628 (under £3 / $5 US here) and couple this with a couple of extremely cheap 555 timer chips to provide a crude analogue to digital converter. Using 555 timer chips is exactly what the original gameport interface on the PC did - so its completely compatible with existing gameport joysticks which would not have to be modified in any way.
These PIC microprocessors do require a programming device (can be made for about £10 / $15 US or bought for under £30 / $50) and you would have to write the software to implement the solution. This can be done in assembly but also other free higher level languages such as JAL exist. There are loads of web sites covering the PIC chips and a quick search on google will provide lots of reading.
Having decided on the use of a microprocessor there are several options to get the data into the Playstation:
A) Directly. Here the microprocessor completely implements the analogue controller protocol eliminating the need for a sacrificial Playstation controller in the first place. All you would need is the cable/plug from one. Having said this - its lots of hard work and probably not necessary.
B) Via a hardwired interface as in option (2) above. With the microprocessor doing the hard work you might be able to implement 16 or even 32 levels of movement on the stick. Still no good if the game requires a fine degree of control (and what game doesn't ;-) but much better than a simple hardwired interface.
C) Via a digital potentiometer. These are chips which mimic mechanical potentiometers and are easily driven from microprocessors. They are often used for the remote control of volume on sound systems. Anyway for our purposes they would provide around 255 levels of movement which would be fine enough for pretty much any Playstation game.
D) Via a digital to analogue converter. This could be a separate chip - but it may well be possible to use PWM (the 16F628 has this built in) to produce a corresponding voltage to the position of the joystick pot. I need to do some more testing - but as the Playstation thumbsticks use voltage and not resistance - it shouldn’t really matter how this voltage is generated.
It would also be possible to implement A,B,C or D using some other spare computer. This way all the hard work of interfacing the PC joysticks would be done for you. Your interface would then connect to the printer/parallel port - and you could use the programming language of your choice to transfer the values from the joysticks to the Playstation. Main problem with this is the inconvenience of having to have a PC running every time you want to play a Playstation game. This actually is quite a sensible option for me as I have a Playstation 1 running into my main PC via a video digitiser card. This lets me play Playstation 1 games on my big SVGA PC monitor. As the PC is already running I could interface it to the Playstation and use the Saitek Cyborg Evo Force joystick on the PC. I could even translate the Playstation's 'rumble' into force feedback on the PC stick.
As you can see these are mostly just ideas at this stage. I hope to be able to try some more of them out and maybe they might give you some ideas of how to solve your interfacing problems.