Betrieb und Abfrage eines Joysticks unter BASIC mit dem KC85.
Hallo KC-User
Mit CAOS 4.5 ist auch ein Joysticktreiber fester Bestandteil des Betriebssystems geworden. Das betrifft sowohl den hardwarenahen Assembler (EDAS ist fester Bestandteil des USER-ROM) als auch die Programmierung über den vorhandenen BASIC-Interpreter. Wobei letzteres für die meisten am ehesten zu realisieren ist.
Im KC85/2-5-System ist werksmäßig nur ein Joystick vorgesehen, der Anschluss wird über den Modul M008/M021 realisiert. Es können Standard-Joysticks, welche Atari/Amiga kompatibel sind, eingesetzt werden. Eine 2. Aktionstaste sowie Sonderfunktionen (Autofeuer) werden unterstützt. Für Robotron-Joysticks, welche für den KC85/1 (KC87) produziert wurden, ist ein Adapter selbst zu fertigen. Anschlussbelegungen sind den Handbüchern zu entnehmen.
Nun gibt es 3 Möglichkeiten, eine Abfrage zu realisieren. Die ersten 2 funktionieren über den Befehl JOYST(1), die 3. über den Befehl PEEK(509). Beim Joystickanschluss handelt es sich um eine parallele 6 Bit breite Schnittstelle, deren Eingänge in 2er Potenzen ausgewertet werden. Es können daher mehrere „Tasten“ gleichzeitig ausgewertet werden, wichtig für schnelle Spiele. In der Regel werden maximal 3 Tasten gleichzeitig ausgewertet, was auch ausreicht. Beim Modul M008/021 werden die Eingänge gegen „Minus“ gezogen.
IF JOYST(1) = x THEN
10 rem joystickabfrage unter basic
20 if joyst(1)=1 then print"links"
30 if joyst(1)=2 then print"rechts"
40 if joyst(1)=4 then print"runter"
50 if joyst(1)=8 then print"hoch"
60 if joyst(1)=16 then print“feuer 1“
70 if joyst(1)=32 then print“feuer 2“
80 if joyst(1)=48 then print“feuer 1 und 2“
90 goto 20
Diese Abfrage ist nicht unbedingt die schnellste, bietet aber für ungewöhnliche Aufgaben einige Möglichkeiten. Da die Eingänge mit 2er-Potenzen ausgewertet werden, bietet sich diese auch für Steuerungen an. Das Joy-Modul kann hier als Eingang und ein M001 mit 16 frei programmierbaren Ausgängen für eine einfache SPS benutzt werden. Die Eingänge können über eine Diodenmatrix angesteuert werden, maximal jedoch 63! Aufgrund der fehlenden Schutzschaltung sollten geeignete Maßnahmen ergriffen werden. Zwischenwerte werden hier (Zeile 80) und im nachfolgenden Beispiel entsprechend addiert.
ON JOYST(1) GOSUB ...(RETURN)
Diese Abfrage ist als Kompromiss zwischen zügiger Abfrage und Auswertung und ausnutzen der Funktionen zu sehen. Hinter GOSUB sind die entsprechenden Zeilen, zweckmäßigerweise passend zu den Werten, zu setzen. Die Unterprogrammzeilen müssen mit RETURN abgeschlossen werden.
PEEK(509)
Bei einigen Programmen wird die Abfrage der Interaktionen über die Tastatur realisiert. Mit PEEK(509) wird der Tastaturcode aus der entsprechenden Arbeitszelle abgefragt. Dieser entspricht meistens den Codes für die Cursortasten sowie der Leer- und Enter-Taste. Vorteil ist hier die Mischung der übertragenen Codes von Tastaturen und des Joysticks. Programme können sowohl mit Tastatur als auch mit Joystick, ohne Auswahlmenü, bedient werden. Allerdings bleiben die Interaktionen nur auf die Möglichkeiten, welche vornehmlich die Tastatur bietet, beschränkt. Die Codes sind hier 8, 9, 10, 11 für die Cursortasten, 16 für die Leertaste und 32 für die Entertaste. Daher sind hier nur vier Richtungen sowie die Auswertung der Aktionstasten einzeln möglich. Die BASIC-Spiele ANACONDA.SSS und PILZE.SSS nutzen diese Möglichkeit ausgiebig. Zwischenwerte, wie bei den vorherigen Abfragen, sind hier nicht möglich.
Zum Testen:
1 Printat(1,1);Peek(509):Goto1
Es wird der „Scancode“ der Tastatur oder die Richtungen/Aktionstasten des Joysticks angezeigt. Es wird nicht unterschieden, woher es kommt.
Im Downloadbereich gibt es die beiden Testprogramme "JOYTEST2.SSS" und "JOY5.SSS". Die beiden o.g. BASIC-Spiele findet man im Downloadbereich auf der Webseite des KC-Club.
Viel Spass beim Ausprobieren!