Joystick

Aus C64-Wiki
Wechseln zu: Navigation, Suche

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

Inhaltsverzeichnis

[Bearbeiten] Allgemeines

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 können sogar vier Spieler gleichzeitig an einem Spiel teilnehmen.


[Bearbeiten] Hardware

  • 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.

[Bearbeiten] Schaltplan

Joystick Schaltplan.gif

[Bearbeiten] Weitere Feuerknöpfe

  • 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.

[Bearbeiten] Sonstiges

Die Controller eines Sega Master Systems funktionieren problemlos am C64. Allerdings dürfen Mega Drive und Genesis Controller nicht an einen Commodore angesteckt werden, da diese den hochempfindlichen CIA2 kurzschließen und damit einen Defekt u.a. am seriellen Bus (zum Diskettenlaufwerk) erzeugen können.

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

Viele Spiele benutzen die Leertaste bzw. SPACE-Taste für bestimmte Aktionen. Gleichzeitig können viele Spiele nicht zwischen SPACE e 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.

[Bearbeiten] Programmierung

[Bearbeiten] Assembler

Beispielprogramme einer Joystick-Abfrage:

[Bearbeiten] BASIC

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)

[Bearbeiten] Beispielprogramme

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

[Bearbeiten] Digitaljoysticks am PC

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.

[Bearbeiten] Bildergalerie

Commodore:

Competition Pro:

Quickshot:

In anderen Sprachen