Joystick
Aus C64-Wiki
Ein Joystick (englisch: Joy - Freude, Stick - Stab; zu deutsch Steuerknüppel) ist ein Eingabegerät, welches vor allem bei Computerspielen Verwendung findet. Grundbestandteile sind ein meist auf einer Konsole befindlicher Griff, der sich in alle Richtungen bewegen lässt, sowie ein oder mehrere Feuerknöpfe.
Bei einigen Modellen gibt es hardwareseitig eine Autofire-Funktion, die praktisch bei Ballerspielen oder Shootern genutzt werden kann, um die Gegner zu eliminieren. Die Autofire-Funktion wird entweder durch Einrasten eines Knopfes oder durch Verschieben eines Schalters (de)aktiviert.
Bei einigen Modellen ist der Griff einem Flugzeugsteuerknüppel nachempfunden und besitzt einen mit dem Zeigefinger zu bedienenden Trigger (wie der Abzug einer Pistole).
Einige Joysticks haben einen ergonomisch geformten, andere einen an einen Schaltknauf erinnernden Griff.
Beliebte Joysticks sind der Competition Pro und die Quickshot-Reihe.
Der Joystick hat sich bei Commodore-Heimcomputer, insbesondere beim C16/64/116/128 und VC 20, gegenüber der Maus durchgesetzt.
Inhaltsverzeichnis |
[Bearbeiten] Hardware
Joysticks werden an den 9poligen Controlport angeschlossen. Für die vier Richtungen und Feuer gibt es jeweils einen Schalter, der die entsprechende Steuerleitung auf Masse legt. Beim C64 laufen diese Leitungen zum CIA und liegen per Pullup normalerweise auf High-Potential. Die 5V-Leitung wird bei Joysticks nur für zusätzliche Schaltungen wie z.B. Autofire benötigt.
[Bearbeiten] Programmierung
[Bearbeiten] Assembler
Ein Beispielprogramm für eine Joystickabfrage in Assembler findet man bei der Erklärung des Assembler-Befehls LSR.
[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
Da einige Tasten der Tastatur mit den Joystickeingängen Gemeinsamkeiten besitzen (siehe Tastatur#Probleme), sollte vor der Joystickabfrage die Tastatur mit POKE 56322,224 abgeschaltet werden und nach der Abfrage mit POKE 56322,255 wieder angeschaltet werden. Im Eingabemodus kann die Tastaturaktivierung auch durch ein <RUN/STOP>+<RESTORE> erfolgen.
| Position | 56321 Port 1 | 56320 Port 2 | 56321 Port 1 Feuer gedrückt | 56320 Port 2 Feuer gedrückt |
|---|---|---|---|---|
| mitte (keine Bewegung) | 255 | 127 | 239 | 111 |
| oben | 254 | 126 | 238 | 110 |
| unten | 253 | 125 | 237 | 109 |
| links | 251 | 123 | 235 | 107 |
| rechts | 247 | 119 | 231 | 103 |
| oben links | 250 | 122 | 234 | 106 |
| oben rechts | 246 | 118 | 230 | 102 |
| unten links | 249 | 121 | 233 | 105 |
| unten rechts | 245 | 117 | 229 | 101 |
[Bearbeiten] Beispielprogramm
Dieses Beispielprogramm stellt einen Positionszeiger in Form eines Pfeils dar und wird gesteuert mit dem Joystick in Port 2.
10 S=2: X=150: Y=150: V=53248: GOTO 100 15 J=PEEK(56320): IF J=127 THEN 15 20 IF J=111 THEN POKE 56322,255:END 25 IF J=123 THEN X=X-S 30 IF J=119 THEN X=X+S 35 IF J=125 THEN Y=Y+S 40 IF J=126 THEN Y=Y-S 45 IF J=122 THEN Y=Y-S 50 IF J=118 THEN Y=Y-S 55 IF J=117 THEN Y=Y-S 60 IF J=121 THEN Y=Y-S 65 IF X=>252 THEN X=10 70 IF X=<10 THEN X=252 75 IF Y>254 THEN Y=44 80 IF Y<44 THEN Y=254 85 PRINT CHR$(147);CHR$(158);CHR$(17);"X-POS:";X;" Y-POS";Y 90 POKE V,X:POKE V+1,Y: GOTO 15 100 FOR Z=832 TO 853 : POKE Z,0: NEXT Z 105 FOR Z=832 TO 853 STEP 3: READ J: POKE Z,J: NEXT Z 110 POKE V+21,1: POKE V+39,7: POKE V+33,0: POKE V+29,1 115 POKE 56322,224: POKE 2040,13: GOTO 85 120 DATA 240, 224, 224, 144, 8, 4, 2, 1
Programmdokumentation:
- In Zeile 10 werden die Variablen gesetzt, sowie zur Zeile 100 gesprungen:
- S für Schrittweite des Pfeils
- X und Y für die Postionsangabe des Pfeils
- V für die Speicheradresse des VIC II
- In Zeile 15 erfolgt die Joystickabfrage des Ports 2, die dann in den Zeilen 20 bis 60 ausgewertet und entsprechend die Pfeilposition um die Schrittweite verändert wird. Bei Drücken des Feuerknopfs wird die Tastaturabfrage wieder eingeschaltet und das Programm beendet.
- Die Zeilen 65 bis 80 dienen der Korrektur der Schrittweite, damit nicht die BASIC-Fehlermeldung ?ILLEGAL QUANTITY ERROR erscheint.
- In Zeile 85 erfolgt die Ausgabe der aktuellen X- und Y-Position des Pfeils.
- Der Pfeil wird in Zeile 90 an die X- und Y-Position des Bildschirms gesetzt und es wird zurück zu Zeile 15 gesprungen.
- Der Sprite-Pfeil wird in Zeile 100 aus den DATA-Zeilen ausgelesen und in den Kassettenpuffer geschrieben.
- In den Zeilen 105 bis 110 wird der Sprite-Pfeil aktiviert, die Tastatureingabe gesperrt und es erfolgt ein Sprung zur Joystickabfrage in Zeile 15
[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] Autor(en)
Telespielator (Idee)