Tech-Ecke /DOS/Joystick-Adapter im Eigenbau

Joystick-Adapter im Eigenbau

Unter DOS gibt es meines Wissens nach keine fertige Lösung um einen USB-Joystick oder Gamepad zu betreiben. Hier steht einem lediglich der Gameport (Soundkarte) zu Verfügung. Aber bei Notebooks sucht man diesen leider Vergeblich. Zwar gibt es PCMCIA-Karten mit Gameport, aber diese waren damals schon rar gesät und heute (2023) quasi gar nicht mehr zu bekommen. Eine Alternative bietet hier der Joystick-LPT-Adapter, mit dem sich zumindest digitale Joysticks und Gamepads unter DOS betreiben lassen. Der Adapter ist recht einfach selbst anzufertigen und kann unter DOS mit SNESKey von Benji York und unter Windows (Win9x - XP) mit Parallelport-Joystick-Treiber von Deon van der Westhuysen angesprochen werden.

Diese Seite beinhaltet


LPT-Joystick


SNESKey

SNESKey wurde Mitte bis Ende der 90'er Jahre von Benji York entwickelt und verfolgt in erster Linie, wie der Name schon erahnen lässt den Anschluss von SuperNintendo-Gamepads am DOS-PC. Aber aufgrund der flexiblen Konfiguration lässt sich damit prinzipiell jeder digitale Joystick betreiben. Lediglich die Anzahl der Feuer- bzw. Funktionsknöpfe ist auf 4 begrenzt (4 Richtungen + 4 Knöpfe belegt alle 8 Eingänge des LPT-Ports). Das Projekt ruht seit 1998 und wird wohl auch nicht mehr aufgenommen werden. Nichtsdestotrotz läuft die Betaversion v1.63 von 1998 recht zufriedenstellend und ist für Rechner aus den späten 90'er und anfänglichen 2000'er ja auch durchaus zeitgemäß.
SNESKey emuliert keinen Gameport-Adapter, sondern simuliert für jede Joystickbewegung einen entsprechenden Tastendruck auf dem Keyboard. Da sich quasi alle DOS-Spiele und auch Konsolen-Emulatoren per Tastatur bedienen lassen, ist das ein recht pfiffiger Ansatz, welcher in vielen Fällen gut funktionieren wird.

Schaltplan - ATARI & Commodore:

In der Dokumentation zu SNESKey (im Download enthalten) befinden sich mehrere Beispielschaltpläne, jedoch hatte ich bei der ATARI-2600-Schaltung (gleich mit Commodore) Probleme mit meinem Armada 1750. Im Grunde benötigt der ATARI-Joystick keine positive Spannungsversorgung, da alle 4 Richtungen und der Feuerknopf gegen Masse geschaltet werden. Darum habe ich Pin 2-4 (+5V) auch zunächst weggelassen. Jedoch zeigte mir ein erster Test mittels "GO /X", dass sich der Low-Pegel nicht direkt wieder abbaut. Zum Teil wurden auch Richtungen angezeigt, die ich gar nicht betätigt hatte. Das Problem lag am sehr langsamen Abbau der Restspannung (-5V) im LPT-Controller. Abhilfe schaffte hier je ein 1 MOhm Widerstand gegen +5V. Somit wird die Negativ-Spannung direkt nach dem Loslassen "vernichtet". Je nach Joystick-Aufbau schafft man es alle 4 Richtungen + Feuerknopf gleichzeitig zu betätigen, dabei fällt der Widerstand  gemäß 1/Rges=1/R1+1/R2+1R3... auf 200 kOhm ab. Hier also bitte nicht mit wesentlich kleineren Werten experimentieren, der LPT-Port ist nicht kurzschlussfest und kann dabei schnell das Zeitliche segnen! Meine finale Schaltung für den ATARI- bzw. Commodore-Joystick sieht wie folgt aus:

SNESKey 2600.PDF     


Installation und Konfiguration:

Die Handhabung von SNESKey ist zwar clever und logisch aufgebaut, aber in der Anwendung leider wenig intuitiv. Zur Installation muss zunächst das Zip-Archiv in einen Ordner auf der Festplatte entpackt werden, beispielsweise "C:\SK163B\". Dann muss dieser Ordner in der Autoexec.bat bei "PATH" mit aufgenommen werden. PATH sollte bereits für DOS definiert sein, durch ein Semikolon kann in der gleichen Zeile ein weiterer Ordner festgelegt werden. Das würde bei einem reinen DOS-System dann in etwa so aussehen:

   PATH=C:\DOS;C:\SK163B

Rechner jetzt neu Starten. Im Nächsten Schritt schnappt man sich die "2600.ini" aus dem Ordner "Examples" und kopiert diese in den Ordner des Spiels, welches die Joystickunterstützung bekommen soll. Dann Öffnet man die Ini und trägt bei "ProgPath = " den absoluten Pfad zur Start-Anwendung des Spiels ein. Das Spiel soll mal Aladdin sein und befindet sich im Ordner C:\GAMES\ALADDIN, die Exe zum Starten des Spiels heißt ALADDIN.EXE. Somit würde die Zeile dann so aussehen:

   ProgPath = C:\GAMES\ALADDIN\ALADDIN.EXE

Hinter Up =, Down =, Left =, Right = und Fire = stehen die aktuell definierten Tasten, die entsprechend dem Spiel anzupassen sind. Nach dem Speichern Ini-Datei kann nun das Spiel über die Eingabe "GO", aus dem Spieleordner gestartet werden. "GO" ist eine Batchdatei im SNESKey-Ordner, da dieser in der Autoexec.bat unter Path definiert ist, kann "GO" aus jedem beliebigen Verzeichnis heraus gestartet werden. SNESKey schaut nun in der Ini-Datei im Spieleordner nach, welche Anwendung (Spiel) gestartet werden soll und führt dieses mit Joystickunterstützung aus. Um im Vorfeld zu testen ob der Adapter und der Joystick von SNESKey ordnungsgemäß erkannt werden kann folgendes eingegeben werden:

   GO /x

Daraufhin sollte sich ein Fenster zeigen in dem die aktuelle Joystickposition angezeigt wird. Für alles Weitere bitte die Dokumentation (Ordner Manual) im SNESKey-Ordner zu Rate ziehen.


Download:

  SNESKey_orig.zip (90 kB)

Die Seite vom Autor wurde vom Netz genommen, eine Spiegelung befindet sich hier.



Gehäuse zum Drucken:

Wer einen 3D-Drucker besitzt kann sich hier mein Adaptergehäuse von SUB-D-25-Pol auf SUB-D-9-Pol herunterladen. Es werden noch zwei 2.5x10 mm Kunststoff- bzw. Blech-Schrauben benötigt. Wer sich lieber seinen eigenen Adapter konstruieren möchte kann sich hier gerne bei den SUB-D-Einbaubuchsen bedienen.

  Download (als STL, IGS und STP)


Parallelport Joystick-Treiber (PPJoy) für Windows (Win9x und XP/2k)

Auch wenn man unter Windows, zumindest ab Win98 problemlos einen USB-Joystick oder USB-Adapter verwenden kann, so ist es mit dem Treiber von Deon van der Westhuysen auch möglich einen Joystick über den LPT-Port zu betreiben. Dazu kann man 1:1 den selbst gebastelten SNESKey-Adapter verwenden. Eine Anleitung für die Installation (Word-Datei), sowie eine ausführliche Dokumentation  befindet sich im Download (Ordner "Docs").
Achtung: Um den Adapter von SNESKey verwenden zu können muss bei "Joystick type" der "SNESkey2600" ausgewählt werden, nicht "LPT JoyStick", sonst passen die Richtungen nicht.
Im Umgekehrten Fall, also hat man bereits einen Adapter mit der PPJoy-Belegung aufgebaut, so kann man unter SNESKey, über die "circuits.ini" die Belegung entsprechend anpassen - angenhem flexibel :-)

  Parallelport Joystick.zip



DOSVice Emulator

Nun gut, die Ganze Übung mit SNESKey diente eigentlich nur dem Zweck, einen Joysticksupport für den DOSVice Emulator (v2.1) bereitzustellen. Hätte ich mir allerdings die Einstellungen im Emulator vorher mal etwas genauer angesehen und insbesondere den "TurboGraFX" mal unter die Lupe genommen, dann wäre das Rumalbern mit SNESKey gar nicht notwendig gewesen. Denn Hinter diesem Joystick-Typ verbirgt sich ein ATARI/Commodore kompatibler Joystick, welcher ebenfalls wie SNESKey 2600 einen simplen LPT-Adapter nutzt.
Die Verdrahtung für den TruboGraFX ist dann auch mal wieder eine neue und entspricht weder dem SNESKey 2600, noch dem PPJoy-LPT. Aber SNESKey ist ja sehr flexibel gehalten und auch PPJoy hat den TurboGraFX in der Auswahl, weshalb man dann letztlich doch mit nur einem Adapter auskommt. Hier mal mein Derivat des Adapters:

TurboGraFX.PDF

Auch hier habe ich, wie beim SNESKey 2600-Adapter 1 MOhm Widerstände für die Restspannungsvernichtung eingebracht. Zunächst kann man es mal ohne diese (rot dargestellt) versuchen, ich gehe nicht davon aus, dass dies generell notwendig ist.



Keyboard-Gamepad/Joystick

Hier noch eine Alternative zum LPT-Joystick, das PS/2 Keyboard-Gamepad. Mit diesem Ansatz ist natürlich auch ein 1- oder 2-Button-Joystick problemlos umsetzbar.
Der Aufbau ist denkbar einfach. Man nehme eine PS/2 Tastaturplatine, verbinde die Tasten des Gamepads mit den entsprechenden Anschlüssen auf der Platine und schon ist der Fisch geputzt. Die Methode ist besonders interessant für Retro-Notebooks mit DOS und/oder Win95, die weder einen Gameport, noch USB besitzen. Wobei USB unter DOS generell problematisch, aber nicht komplett unmöglich ist. Einen PS/2 Maus und Tastatur Anschluss besitzen jedoch die meisten alten Notebooks.

Als erstes benötigt man eine PS/2 Tastatur zum schlachten, oder man besorgt sich im Netz lediglich die Platine inkl. PS/2 Kabel. Ich hatte mich für letzteres entschieden und war hier mit 5 EUR dabei.

Das Ganze hat den Vorteil, dass man gleich weiß wie groß die Platine ist und kann schon mal abschätzen ob diese in das Zielobjekt passen wird. Der Nachteil ist jedoch, dass man etwas knobeln muss welche Kontakte geschaltet werden müssen, um einen brauchbaren Tastendruck zu erhalten. Das wird mit Sicherheit bei jeder Platine etwas anders sein, aber am Ende müssen lediglich die beiden richtigen Kontakte mit einander verbunden werden. Hierbei hilft das Tool Keytest7 am ende des Beitrags. Bei meiner Platine komme ich mit 10 Anschlüssen (Kabel) aus, die mir in Kombination insgesamt 12 brauchbare Tasten liefern. Pin 1 und 2 kommen bei mir auf Masse (geteilt in zwei Bereiche) und die Pins 5-12 an die entsprechenden Gamepad-Kontakte, wobei 5,7,9 und 12 doppelt belegt sind. Das erlaubt mir einen SNES-Gamecontroller-Clone mit 12 Tasten zu betreiben.
Die LED's habe ich aus Platzgründen ausgelötet, sind im Gamepad weder zu sehen, noch würde es irgendeinen Sinn ergeben. Auch habe ich vorsichtshalber die Leiterbahnen rund um den vergossenen USB-Controller-Chip mit einem Cutter durchtrennt.

Ich hatte mich für eine USB-Variante als Basis entschieden. Zum einen war es günstiger als eines mit originalem Anschlusskabel und zum anderen hätte ich es wenigstens per USB nutzen können, falls der Umbau misslungen oder nicht möglich gewesen wäre. Auf der Platine befinden sich am jeden Knopf ein freier Leiterbahnenbereich, der für das Abgreifen bestens geeignet ist. Hier habe ich je ein kleines Löchlein gebohrt, um die Kabel von hinten durchführen und verlöten zu können. Alle rot eigekreisten Knopfanschlüsse schalten gegen Masse M1 (Pin 1 am Keyboard) , alle grünen gegen M2 (Pin 2). Um die beiden Massekreise M1 und M2 zu separieren habe ich die Leiterbahn an einer geeigneten Stelle durchtrennt.

Wie man nun die Tasten aufteilt spielt keine Rolle, da eigentlich jedes DOS-Spiel und auch Emulatoren eine freie Tastenbelegung zulassen. Meine Aufteilung sieht wie folgt aus, wird aber von Tastaturplatine zu Tastaturplatine anders aussehen:

Pin Masse Pin Knopf Taste   Pin Masse Pin Knopf Taste
1 5 R   2 5 E
1 6 T        
1 7 F   2 7 D
1 8 G        
1 9 V   2 9 C
1 10 B        
1 11 5        
1 12 4   2 12 3

Nachdem dem Anlöten der Verbindungslitzen kommt die Gamepad-Platine, zusammen mit der Keyboard-Platine zurück ins Gehäuse. An der Keyboard-Platine musste ich etwas rumschnitzen damit sie rein passt, ist mir nicht wirklich gut gelungen aber Deckel drauf und schnell vergessen wie es drunter aussieht :-)

Zum Austesten der Keyboard-Platine habe ich Keytest7 benutzt. Das zeigt einem den aktuellen Tastaturcode der gebrückten Pin-Kombination an. Ich habe darauf geachtet, dass ich die üblichen Steuertasten wie z.B. Cursor, Space, F-Tasten, P nicht verwende. Hat man die Notwendigkeit mehr als 2 Tasten gleichzeitig abfragen zu müssen, so sollte man für die Feuerknöpfe STRG-, Shift- und/oder ALT-Taste verwenden.

Keytest7
Ich würde gerne den Autor des Tools benennen, aber leider weiß ich nicht mehr woher ich es habe und ein Name oder URL ist nicht hinterlegt?

keytest7.zip

Die Option Drucken funktioniert erst ab Netscape V4.0 bzw. I-Explorer 5.0
[Erstellt 07.01.2023]