Joystick

Aus C64-Wiki
Zur Navigation springenZur Suche springen

Ein Joystick (englisch: Joy - Freude, Stick - Stab; zu deutsch Steuerknüppel) ist ein Eingabegerät, welches vor allem bei Computerspielen Verwendung findet.

Allgemeines[Bearbeiten | Quelltext bearbeiten]

Grundbestandteile sind ein meist auf einer Konsole befindlicher Griff, der sich in alle Richtungen bewegen lässt, sowie ein oder mehrere Feuerknöpfe. Der Griff ist bei einigen Modellen einem Flugzeugsteuerknüppel nachempfunden und besitzt einen mit dem Zeigefinger zu bedienenden Trigger (wie der Abzug einer Pistole). Andere Joysticks haben einen ergonomisch geformten oder an einen Schaltknauf erinnernden Griff.

Es gibt auch Joysticks mit Autofire-Funktion (automatisches Dauerfeuer), also einer eingebauten Elektronik, die dem Spieler das ständige und schnelle Drücken auf den Feuerknopf abnimmt. Das ist sehr praktisch bei Ballerspielen oder Shootern, um die Gegner leichter zu eliminieren. Die Autofire-Funktion wird entweder durch Einrasten eines Knopfes oder durch Verschieben eines Schalters aktiviert.

Der Joystick hat sich bei Commodore-Heimcomputern, insbesondere beim C16/64/116/128 und VC 20, gegenüber der Maus durchgesetzt. Während der VC 20 nur einen Anschluss für den Joystick besitzt, sind beim C64 zwei Anschlussmöglichkeiten vorhanden. Mit einem 4 Spieler Joystick-Adapter oder spezielle Joystick-Adapter können sogar vier Spieler gleichzeitig an einem Spiel teilnehmen. Weiterhin waren auch einige Hard- oder Softwarehersteller einfallsreich und boten zusätzliche Spezial-Joysticks und -Geräte an, die ebenfalls am Joystick-Port angeschlossen werden konnten.

Hardware[Bearbeiten | Quelltext bearbeiten]

  • Joysticks werden an den 9-poligen Controlport angeschlossen.
  • Für jede der vier Richtungen und für Feuer gibt es jeweils einen Taster.
  • Diese fünf Steuerleitungen sind im C64 mit dem CIA verbunden.
  • Wenn keine Joystick-Betätigung gegeben ist, dann liegt wegen des internen Pullup-Widerstands High-Potential (1) am Eingang des CIA.
  • Durch Drücken eines Tasters wird der Eingang auf Masse bzw. GND (0) gezogen.

Schaltplan[Bearbeiten | Quelltext bearbeiten]

Joystick Schaltplan.gif

Achtung: die Farben der Leitungen sind nicht genormt und können unterschiedlich sein. Bitte beim Basteln immer nachmessen!

Weitere Feuerknöpfe[Bearbeiten | Quelltext bearbeiten]

  • Der Joystick Cheetah Annihilator, der dem C64GS beilag, besitzt einen zweiten unabhängigen Feuerknopf. Dieser ist zwischen Pin 7 (+5 V) und 9 (PotX) geschaltet und damit kompatibel mit der rechten Taste einer Mouse 1350.
  • Ein dritter Feuerknopf kann zwischen Pin 7 (+5 V) und 5 (PotY) geschaltet werden.

Mod: Feuer für SPACE-Taste[Bearbeiten | Quelltext bearbeiten]

Viele Spiele benutzen die Leertaste bzw. SPACE-Taste für bestimmte Aktionen. Gleichzeitig können viele Spiele nicht zwischen SPACE  und Feuerknopf von Joyport 1 unterscheiden. Hat der Joystick einen zweiten Feuerknopf (dessen Funktion mit dem ersten identisch ist), bietet sich eine Modifikation an: Der Joystick bekommt ein zweites Anschlusskabel, das an Joyport 1 angeschlossen wird; der zweite Feuerknopf wird mit Pin 8 (GND) und Pin 6 (Feuer) verbunden, die restlichen Leitungen bleiben frei. Dadurch lässt sich mit dem zweiten Feuerknopf dann (in den meisten Spielen) die jeweilige SPACE-Tasten-Aktion auslösen.

Programmierung[Bearbeiten | Quelltext bearbeiten]

Assembler[Bearbeiten | Quelltext bearbeiten]

Beispielprogramme einer Joystick-Abfrage in Assembler:

BASIC[Bearbeiten | Quelltext bearbeiten]

Für die Abfrage des Eingabegeräts Joystick sind im C64 die Speicheradressen 56321 (für Port 1) und 56320 (für Port 2) zuständig. Ausgelesen wird dann der jeweilige Port mit dem BASIC-Befehl PEEK.

10 PRINT PEEK(56320): GOTO 10
RUN

Abbruch mit RUN/STOP  möglich.

Um Probleme zu vermeiden, sollte bei Joystick-Abfragen vorzugsweise Port2 verwendet werden. Probleme, die sich aus der gemeinsamen Benutzung der CIA-Leitungen für Tastatur und Joystick ergeben, sind an Port 2 im Zusammenspiel mit dem Keyscan des KERNALs weniger sichtbar (siehe Tastaturprobleme). Es kann vor der Joystick-Abfrage im Programm die Tastatur mit POKE 56322,224 abgeschaltet werden und nach der Abfrage mit POKE 56322,255 wieder eingeschaltet werden. Im Eingabemodus kann die Tastaturreaktivierung auch durch ein RUN/STOP +RESTORE  erfolgen.

Position Icon 56321 Port 1 56320 Port 2 56321 Port 1
Feuer gedrückt
56320 Port 2
Feuer gedrückt
mitte (keine Bewegung) Joystick nicht betätigen 255 ($ff) 127 ($7f) 239 ($ef) 111 ($6f)
oben Joystick nach vorne 254 ($fe) 126 ($7e) 238 ($ee) 110 ($6e)
unten Joystick zurück 253 ($fd) 125 ($7d) 237 ($ed) 109 ($6d)
links Joystick nach links 251 ($fb) 123 ($7b) 235 ($eb) 107 ($6b)
rechts Joystick nach rechts 247 ($f7) 119 ($77) 231 ($e7) 103 ($67)
oben links Joystick links-vor 250 ($fa) 122 ($7a) 234 ($ea) 106 ($6a)
oben rechts Joystick rechts-vor 246 ($f6) 118 ($76) 230 ($e6) 102 ($66)
unten links Joystick links-zurück 249 ($f9) 121 ($79) 233 ($e9) 105 ($69)
unten rechts Joystick rechts-zurück 245 ($f5) 117 ($75) 229 ($e5) 101 ($65)

Beispielprogramme[Bearbeiten | Quelltext bearbeiten]

Beispielprogramm 1

Dieses Beispielprogramm stellt einen Positionszeiger in Form eines Pfeils (Cursor) dar und wird gesteuert mit dem Joystick an Port 2.

10 S=2: X=150: Y=150: V=53248
15 FOR Z=832 TO 853: POKE Z,0: NEXT Z
20 FOR Z=832 TO 853 STEP 3: READ J: POKE Z,J: NEXT Z
25 POKE V+21,1: POKE V+39,2: POKE V+33,0
30 POKE 2040,13: PRINT CHR$(147)

40 PRINT CHR$(19): PRINT " X:";X;CHR$(157);" ","Y:";Y;CHR$(157);" "

50 J=PEEK(56320): IF J=111 THEN END
51 IF J=126 THEN Y=Y-S
52 IF J=118 THEN X=X+S: Y=Y-S
53 IF J=119 THEN X=X+S
54 IF J=117 THEN X=X+S: Y=Y+S
55 IF J=125 THEN Y=Y+S
56 IF J=121 THEN X=X-S: Y=Y+S
57 IF J=123 THEN X=X-S
58 IF J=122 THEN X=X-S: Y=Y-S

70 IF X>252 THEN X=16
75 IF X<16 THEN X=252
80 IF Y>254 THEN Y=46
85 IF Y<46 THEN Y=254

90 POKE V,X:POKE V+1,Y: GOTO 40
95 DATA 240, 224, 224, 144, 8, 4, 2, 1 


Programmdokumentation:

  • Zeile 10: Variablen initialisieren: S = Schrittweite des Pfeils, X und Y = Positionsangabe des Pfeils, V = Speicherstartadresse des VIC II.
  • Zeile 15: Sprite-Daten auf 0 setzen.
  • Zeile 20: Sprite-Daten (Zeiger) aus DATA-Zeilen einlesen.
  • Zeile 25: Sprite einschalten und Sprite-Farbe setzen.
  • Zeile 30: Sprite-Zeiger setzen und Bildschirm löschen.
  • Zeile 40: Koordinaten am Bildschirm ausgeben.
  • Zeile 50: Joystick-Wert von Ports 2 holen. Ein Druck auf den Feuerknopf beendet das Programm.
  • Zeile 51-58: Alle acht Richtungen auswerten und die X/Y-Variablen des Pfeils anpassen.
  • Zeile 70-85: Koordinatenkorrektur, falls außerhalb des gültigen Bereiches, um die BASIC-Fehlermeldung ?ILLEGAL QUANTITY ERROR zu vermeiden.
  • Zeile 90: Der Pfeil wird entsprechend der X- und Y-Variable am Bildschirm neu positioniert und die Abfrageschleife mit Zeile 40 erneut beginnen.
  • Zeile 95: Sprite-Daten des Pfeils, die in Zeile 20 eingelesen werden.


Durch bitweises Auswerten der Joystick-Stellung kann das Programm verkürzt werden, indem die Zeilen 51-58 durch die folgenden ersetzt werden.

51 IF (J AND 1)=0 THEN Y=Y-S
52 IF (J AND 2)=0 THEN Y=Y+S
53 IF (J AND 4)=0 THEN X=X-S
54 IF (J AND 8)=0 THEN X=X+S

Beispielprogramm 2

Dieses Beispielprogramm liest beide Joystick-Ports aus und zeigt die jeweilige Joystick-Hebelstellung und gedrückten Feuerknopf an (Prinzip: Bit-Test).

10 J=NOT PEEK(56321)
15 B=NOT PEEK(56320)
20 PRINT CHR$(147);"JOYSTICKTEST 2012"
30 IF (J AND1) THEN PRINT "1-V ";
35 IF (B AND1) THEN PRINT "2-V ";
40 IF (J AND2) THEN PRINT "1-Z ";
45 IF (B AND2) THEN PRINT "2-Z ";
50 IF (J AND4) THEN PRINT "1-L ";
55 IF (B AND4) THEN PRINT "2-L ";
60 IF (J AND8) THEN PRINT "1-R ";
65 IF (B AND8) THEN PRINT "2-R ";
70 IF (J AND16)THEN PRINT "1-F ";
75 IF (B AND16)THEN PRINT "2-F ";
80 GOTO 10

Digitaljoysticks am PC[Bearbeiten | Quelltext bearbeiten]

Bei der Nutzung von Emulatoren am PC ist es praktisch, auch die guten alten C64-Digitaljoysticks nutzen zu können. Über Adapter wie z.B. den CJoy oder Gregs USB-Joystick-Adapter lassen sich diese Joysticks auch an aktuelle Rechner mit USB-Schnittstelle anschließen.
Vorsicht: Es gibt auch neue Digitaljoysticks direkt mit USB-Anschluss - z.B. der Competition Pro USB ist aber nicht mit dem Original zu vergleichen und reagiert insbesondere relativ langsam. Die Adaptervariante ist klar vorzuziehen.

Joyweiler ist ein Eigenbauprojekt, welches Anschluss an USB und an den 9-poligen Controlport findet, sowie einstellbares Dauerfeuer anbietet. Als Referenzhardware wurde ein hochqualitativer Sanwa-Arcadestick[1] benutzt, aber das Projekt ist auch einfach an sonstige Hardware anpassbar.

Sonstiges[Bearbeiten | Quelltext bearbeiten]

Die Controller eines Sega Master Systems funktionieren problemlos am C64. Allerdings dürfen Mega Drive und Genesis Controller nicht an einen Commodore angesteckt werden. Der Grund dafür ist, dass die Ausgangsleitungen dieser Gamepads die Signalleitungen nicht nur auf Masse ziehen (Open Collector), sondern u.U. auch 5 Volt auf die Leitungen legen, was zu Kurzschlüssen führt, falls gleichzeitig die Tastatur benutzt wird oder die CIA2-Leitungen auf Ausgang geschaltet werden.[2]

Bildergalerie[Bearbeiten | Quelltext bearbeiten]

Commodore:

Competition Pro:

Quickshot:

Weblinks[Bearbeiten | Quelltext bearbeiten]

WP-W11.png Wikipedia: Joystick

Quellen[Bearbeiten | Quelltext bearbeiten]