The target of this project is creating a low-cost
interface that allows multiple Gamepads
to be connected to the PSP's infrared port.
As it is in a pretty early (but working) stage, the interface only works with 2 Master System Gamepads.
Plans for the Future are:
- Support for Sega Genesis Gamepads and C64 joysticks
- Support for 4 Gamepads
- Making it more portable
On this page I'll provide the full Schematics and source codes for this project so everyone can build one himself.
I'm also considering making the interface available for purchase as soon as it is fully developed.
The interface consists of an Atmel ATMega8
microcontroller, an IR diode and some resistors.
Basically the microcontroller handles any changes of the Button states of the Gamepads and sends them immediatly to the PSP.
A basic protocol was developed which can handle a 16 Buttons each for a maximum of 4 Gamepads.
The first step to be done for this Project was to send data to the PSP with the IR diode.
Data transmission over infrared is very similar to transmission over the serial port.
Each frame has a start- and a stop-bit, and the standard baud rate of the PSP is set to 9200.
The difference to the standard serial protocol is that bits are determined as short pulses, and the byte to send has to be inverted.
For more accurate timing, a 16 Mhz crystal oscillator was used as clock source (lower frequencies will work too, you just have to recalculate the software delays).
For calculating the delays i used the AVR Delay Generator
The routine for sending Data works like this:
Send start bit
Send the current data bit
Shift right the data byte (goto the step above until the whole byte is sent)
Send the stop bit
These 10 Bits are called Frame.
For a baud rate of 9200 bps, as one Frame contains 10 Bits with only 8 of them containing data, we get a resulting Bandwidth of 920 Bps, the duration of one Frame is therefore 1/920s.
The rest of the timing calculations can be found in the assembler source.
The protocol used for updating the button states is fairly simple.
Each Byte sent contains the adress of a button register stored in the upper 4 Bits, with the register data in the lower 4 Bits.
This results in a total of 16 different 4-Bit Registers, 16 Bit for each gamepad.
<- 2 Bytes containing the button state data for gamepad 1
<- this byte is sent to the PSP
0010 is the adress of the lower 4 Bits in the Upper Byte of the gamepad 1 register
0101 is the data to be written there
<- the result of the decoding operation
This page isn't finished up to now, but you can already download the full sources.
Software that supports PSP-Gamepad:
Originally ported by lantus
, i have modified the Doom source to support the Interface.
Be sure to check out the video here
Master System Emulator
nothing to see
As it's an interface for Master System gamepads, a supporting Master System emulator is necessary.
, who was the first to port one to the PSP will be kind enough to implement support.
It will be possible to play 2-player games like Bubble Bobble with the interface.
Super Nintendo Emulator
yet no video
I started implementing support into the Snes9X port for the PSP.