![]() |
![]() |
Unter DOS gibt es meines Wissens nach keine fertige Lösung, um einen USB-Joystick oder ein Gamepad zu betreiben. Hier steht einem lediglich der Gameport (Soundkarte) zur 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 sind 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 dem Parallelport-Joystick-Treiber von Deon van der Westhuysen angesprochen werden.
SNESKey wurde Mitte bis Ende der 90er Jahre von Benji York entwickelt und
verfolgt in erster Linie, wie der Name schon erahnen lässt**,** den Anschluss
von Super-Nintendo-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 belegen alle 8 Eingänge des LPT-Ports). Das Projekt ruht seit 1998 und
wird wohl auch nicht mehr aufgenommen werden. Nichtsdestotrotz läuft die
Beta-Version v1.63 von 1998 recht zufriedenstellend und ist für Rechner aus den
späten 90er und den anfänglichen 2000er Jahren 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, der in vielen Fällen gut funktionieren wird.
Schaltplan - ATARI & Commodore:
Vorweg: Möchte man den Adapter z. B. auch beim VICE-Emulator ohne SNESKey
einsetzen, so empfiehlt es sich, statt des SNESKey-2600-Adapters den TurboGrafx-Adapter
zu bauen. Dieser läuft dann auch durch
Anpassen der "Circuit.ini"
problemlos mit SNESKey.
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 + 1/R3... 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:
![]() |
![]() |
|
|
|
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" mitaufgenommen 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, unter dem Namen "SNESKEY.ini",
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 der 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 diese 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.
Hinweis:
In der SNESKEY.INI (Installationsverzeichnis) lässt sich unter "KeySimMethod"
die Tastendrucksimulierung "old", "new" und "neueste" einstellen. Beim Atari
2600 Emulator PCAE v2.5 (DOS) musste ich hier auf meinem Armada 1750 (DOS 7.1)
von "neueste" auf "old" setzen. Eventuell lohnt es sich also, hier mal
reinzuschauen, falls die Simulation nicht funktionieren möchte.
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)
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 eins zu eins 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 wenn man bereits einen
Adapter mit der PPJoy-Belegung aufgebaut hat, so kann man unter SNESKey über die
"circuits.ini" die Belegung entsprechend anpassen – angenehm flexibel :-)
Parallelport Joystick.zip
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 TurboGraFX 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:
![]() |
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.
Um den TurboGraFX-Adapter unter SNESKey korrekt nutzen zu können, muss die "Circuits.ini"
bei [2600] wie folgt angepasst werden:
[2600]
Up = 13
Down = 12
Left = 10
Right = 11
Fire = 15
![]() |
Hier noch eine Alternative zum LPT-Joystick: das PS/2 Keyboard-Gamepad. Mit
diesem Ansatz ist natürlich auch ein Ein- oder Zwei-Button-Joystick problemlos
umsetzbar.
Der Aufbau ist denkbar einfach. Man nimmt eine PS/2
Tastaturplatine, verbindet 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 Tastaturanschluss
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 miteinander 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 LEDs habe ich aus Platzgründen ausgelötet, sie 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 eine 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 befindet sich an
jedem 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 eingekreisten
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 |
Nach 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 reinpasst, 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
ich weiß nicht mehr
woher ich es habe und ein Name oder eine URL ist leider nicht hinterlegt?
keytest7.zip
![]()