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.

early prototype

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.

Example:
0000000000000000
00100101
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

0000010100000000This page isn't finished up to now, but you can already download the full sources.

Doom
Originally ported by lantus, i have modified the Doom source to support the Interface.
Be sure to check out the video here.

nothing to see

Master System Emulator
As it's an interface for Master System gamepads, a supporting Master System emulator is necessary.
Yoshihiro, 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.

yet no video

Super Nintendo Emulator
I started implementing support into the Snes9X port for the PSP.

The images and content on this webpage may not be duplicated, linked to, or used without my expressed written permission.
To obtain this permission, contact me by email at Klesk@fraglab.at. 31909 people have viewed this page.