PSP-Gamepad

Das Ziel dieses Projekts ist es, ein kostengünstiges Interface zu bauen, um mehrere Gamepads an die PSP anzuschließen.
Da das Interface noch in einer sehr frühen Entwicklungsphase ist, unterstützt es erst 2 Master System Gamepads.

Pläne für die Zukunft sind:
Auf dieser Seite werde ich alle Quellcodes und Schaltpläne zur Verfügung stellen, sodass sich jeder selbst ein Interface bauen kann.
Ich ziehe auch in Erwägung, das Interface in kleineren Stückzahlen herzustellen und zu verkaufen sobald es fertig entwickelt ist.
Das Interface besteht aus einem Atmel ATMega8 Mikrocontroller, einer Infrarot-Diode und ein paar Widerständen.
Im Prinzip sendet der Mikrocontroller alle Änderungen der Button-Zustände direkt an die PSP.
Dazu hab ich ein simples Protokoll entwickelt, welches 16 Buttons für je 4 Gamepads verwalten kann.

Der erste Schritt für dieses Projekt war, über Infrarot Daten an die PSP zu schicken.
Datentransfer über Infrarot ist ähnlich zu dem mit der seriellen Schnittstelle (RS232).
Jeder Frame hat ein Start- und ein Stop-Bit, und die Standard-Baud-Rate der PSP ist auf 9200bps eingestellt.
Der Unterschied zu RS232 besteht darin, dass kurze Pulse verwendet werden um Bits anzuzeigen, und darin dass das ganze Byte invertiert wird.


Früher Prototyp
Um ein genaueres Timing bei der Infrarot-Übertragung zu bekommen, hab ich einen 16MHz Quarz verwendet (niedrigere Frequenzen gehn auch, man muss sich nur die Verzögerungsschleifen neu ausrechnen).
Die Verzögerungsschleifen hab ich mit dem nützlichen Tool AVR Delay Generator ausgerechnet.
Die Routine um Ein Bit über IR zu senden funktioniert folgendermaßen:

Start-Bit senden
LSB vom Datenbyte senden
Datenbyte nach rechts shiften (diesen und oberen Befehl wiederholen bis das ganze Byte gesendet ist)
Stop-Bit senden

Diese 10 Bit werden Frame genannt.
Für eine Baud-Rate von 9200 bps, wobei ein Frame 10 Bit, aber nur 8 von ihnen Daten enthalten, bekommen wir eine Bandbreite von 920 Bps, die Dauer eines Frames ist also 1/920 s.
Der Rest der Rechnungen kann in den ASM-Sourcen angesehen werden.

Das Protokoll um die Button-Zustände upzudaten ist recht einfach.
Jedes Byte das an die PSP gesendet wird enthält die Adresse vom Button-Register in den oberen 4 Bit, mit den Daten in den unteren 4 Bit.
Das ermöglicht 16 verschiedene 4Bit-Register, 16 Bit für jedes Gamepad.

Beispiel:
0000000000000000 <- 2 Byte, die die Button-Zustände von Gamepad 1 enthalten
00100101 <- Dieses Byte wird an die PSP geschickt

0010 is the adress of the lower 4 Bits in the Upper Byte of the gamepad 1 register ist die Adresse der unteren 4Bit im oberen Byte des Button Status Registers von Gamepad 1
0101 sind die Daten der hineingeschrieben werden soll.

0000010100000000 <- Resultat des Dekodierens

Diese Seite ist noch in Arbeit, aber ihr könnt berets alle Quellcodes runterladen.
Software, die PSP-Gamepad unterstützt:
Doom
Ich habe die Source vom PSP-Port von Doom (geportet von lantus) modifiziert, um mein Interface zu unterstützen
Schaut auch das Video hier an.


nichts zu sehen
Master System Emulator
Da es ein Interface für Master System Gamepads ist, muss natürlich auch Unterstützung in den Master System Emulator eingebaut werden.
Yoshihiro, der den ersten Master System Emulator for die PSP geportet hat, wird so freundlich sein und Unterstützung implementieren.
Es wird möglich sein, 2-Spieler Spiele mit dem Interface auf einer PSP zu spielen.


noch kein Video
Super Nintendo Emulator
Ich habe damit angefangen, unterstützung in den SNES Emulator zu implementieren.

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.