Joystick-Abfrage in Theorie und Praxis
Wenn der Joystickanschluß für Sie »ein Buch mit sieben Siegeln« ist, so wird Ihnen dieser Artikel für den VC 20 weiterhelfen. Doch auch die »Profis« werden einige wichtige Informationen finden.
Ein Joystick besteht aus vier Schaltern, die im rechten Winkel zueinander angeordnet sind. Der Handgriff erlaubt neun abfragbare Positionen:
- eine Position mit allen Schaltern offen: Griff in Ruhe
- vier Positionen mit je einem Schalter geschlossen: Griff in Nord, Süd, Ost, West
- vier Positionen mit zwei Schaltern geschlossen: Griff in Nordost, Südost, Südwest, Nordwest
Ein zusätzlicher »Feuerknopf« hat einen eigenen Schalter.
Grafisch sieht das so aus:
Jeder der fünf Schalter ist mit je einer Leitung von zwei speziellen integrierten Bausteinen mit dem Namen »VIA 6522« (Versatile Interface Adapter) verbunden. Diese sind, wie der Name andeutet, programmierbare Adapter für die Ein- und Ausgabe (also auch für den Joystick).
Leider sind die fünf Schalter etwas ungleichmäßig auf die beiden VIAs verteilt:
- Schalter 0, 1, 2 und der Feuer-Schalter 4 verwenden VIA 1
- Schalter 3 verwendet VIA
Der Kontakt des Joysticks mit den VIAs und damit mit dem VC 20 wird durch zum Teil Ihnen schon bekannte Registerzellen geregelt, welche folgende Adressen haben:
- Ein-/Ausgabe-Register A des VIA 1: 37137
- Ein-/Ausgabe-Register B des VIA 2: 37152
Der Vollständigkeit halber sei erwähnt, daß jeder VIA noch ein zweites E/A-Register hat, nämlich:
- E/A-Register B des VIA 1: 37136
- E/A-Register A des VIA 2: 37153
Für den Joystick brauchen wir diese jedoch nicht.
Die einzelnen Leitungsanschlüsse der Joystick-Schalter sind:
- Schalter 0 … Bit 2 von 37137
- Schalter 1 … Bit 3 von 37137
- Schalter 2 … Bit 4 von 37137
- Schalter 4 … Bit 5 von 37137
- Schalter 3 … Bit 7 von 37152
Ich habe gesagt, daß 37137 und 37152 Ein- und Ausgaberegister sind, das heißt wir können sie in beiden Richtungen benützen.
Die Entscheidung darüber liegt in je einem zugeordneten »Daten-Richtungs-Register«.
- Dem E/A-Register 37137 ist das DR-Register 37139 zugeordnet.
- Dem E/A-Register 37152 ist das DR-Register 37154 zugeordnet.
Dieses Arrangement erlaubt, jede einzelne Leitung eines E/A-Registers separat auf Ein- oder Ausgabe zu schalten, völlig unabhängig voneinander.
Das geht so:
Sobald in einem Bit des DR-Registers eine 1 steht, ist die entsprechende Leitung des E/A-Registers auf Ausgabe geschaltet, bei einer 0 auf Eingabe.
Im Bild unten habe ich die notwendigen Bitmuster in die beiden DR-Register eingezeichnet.
Im Register 37139, an dem ja vier Schalter hängen, wäre die hineinzuPOKEnde Zahl 195. Da aber während der Joystick-Abfrage dieses Register für nichts anderes verwendet wird, setzen wir ruhig das ganze Register auf 0.
10 POKE 37139,0
Beim Register 37154 ist die Lage anders, da das zugehörige E/A-Register 37152 zur Tastaturabfrage verwendet wird. Da müssen wir die Auswahl der Leitung schon genau machen.
20 POKE 37154,127
Während der Joystick-Abfrage funktionieren die Tasten in der Spalte 127 der 8 x 8-Matrix nicht.
Zeile 10 und 20 »initialisieren« die Joystick-Abfrage.
Ein Experimentier-Programm zum Testen, was jetzt bei der Bewegung des Joysticks stattfindet, ist ganz einfach:
30 PRINT PEEK(37137);PEEK(37152)
40 GOTO 30
Am Ende empfiehlt es sich, die volle Tastatur wieder einzuschalten mit
POKE 37154,255
In einem Programm können Sie also einfach die Werte in den beiden Adressen der Zeile 30 (mit IF … THEN) abfragen.
Zur Vermeidung von eventuellen Störungen durch die Mehrfachfunktionen der Register ist es aber empfehlenswert, die einzelnen Bits direkt abzufragen. Das sieht dann so aus:
10 POKE 37139,0
20 POKE 37154,127
30 IF PEEK(37137) AND 4 THEN… (Schalter 0)
40 IF PEEK(37137) AND 8 THEN… (Schalter 1)
50 IF PEEK(37137) AND 16 THEN… (Schalter 2)
60 IF PEEK(37137) AND 32 THEN… (Schalter 4 = Feuerknopf)
70 IF PEEK(37152) AND 128 THEN… (Schalter 3)
80 POKE37154,255