JOY (TSB)
JOY (TSB) | |
Syntax: | a = JOY bzw. a = JOY(<n>) |
Parameter | |
n: 0..255 (Portnummer) | |
Einordnung | |
Typ: | numerische Funktion |
Kontext: | Peripheriekontrolle |
Aufgabe: | ermittelt den Zustand des Joysticks in einem der Ports |
Abkürzung: | jO |
Token: | $64 $51 (100 81) |
Verwandte Befehle | |
POT - PENX - PENY |
Dieser Artikel beschreibt das TSB-Schlüsselwort JOY (TSB).
Das entsprechende Simons'-Basic-Schlüsselwort lautet ebenfalls JOY.
Typ: Systemvariable Syntax: a = JOY[(<n>)] oder: PRINT JOY [(<n>)]
JOY liest den Wert eines der beiden C64-Controlports (CIA 1, $DC00 und $DC01) aus, um einen dort angeschlossenen Joystick für das Programm nutzbar zu machen. Die Werte, die der Port liefert, werden übersetzt in Werte zwischen 0 und 8, wobei jeder Wert einer bestimmten Richtung zugeordnet ist. Wenn der Feuerknopf betätigt wird, addiert sich ein Wert von 128 zum Richtungswert hinzu:
Wert | mit Feuer | Richtung |
0 | 128 | - |
1 | 129 | N |
2 | 130 | NO |
3 | 131 | O |
4 | 132 | SO |
5 | 133 | S |
6 | 134 | SW |
7 | 135 | W |
8 | 136 | NW |
Gegenüber Simons' Basic hat die TSB-Version des Befehls zwei Vorteile. Der wichtigste ist die Tatsache, dass beide Controlports ausgelesen werden können. Der zweite ist, dass unter TSB die Nummer des Controlports (1 oder 2) als Argument für die Funktion angegeben werden kann. Somit sind Verwechslungen nicht mehr so leicht möglich. Die Funktionsargumente löst TSB dahingehend auf, ob sie geradzahlig (Controlport 2) oder ungeradzahlig sind (Controlport 1), wobei der Wert 0 als geradzahlig betrachtet wird.
Ab TSB v2.40508 erlaubt ein POKE, die Joystickabfrage auch ohne Warteschleife durchzuführen: POKE $919D, 208
. Der Normalwert an dieser Stelle lautet 103. Beachten: Nach dem POKE können Tastatur und Joystick nicht mehr gleichzeitig abgefragt werden (wie im Beispiel unten ab Programmzeile 1330).
Beispiel: 1600 PROC stick 1610 x7=JOY(1): IF x7=0 THEN END PROC 1620 IF x7=1 THEN x$="{crsr up}" 1630 IF x7=3 THEN x$="{crsr right}" 1640 IF x7=5 THEN x$="{crsr down}" 1650 IF x7=7 THEN x$="{crsr left}" 1660 IF x7>127 THEN x$=CHR$(13) 1670 END PROC Diese Abfrageroutine ist sinnvoll in Programmen mit kombinierter Joystick-Tastatur-Bedienung und liest einen Joystick in Port 1 aus. Eine solches Programm müsste die folgende Hauptabfrageroutine aufweisen (Ausschnitt): 1330 REPEAT : IF lg>0 THEN PRINT "_"; 1332 GET x$: stick: IF x$="" THEN 1332 1335 IF x$=CHR$(20) THEN IF l THEN l=l-1: x9$=LEFT$(x9$,l): x$=x9$+" ": set: x$="" 1337 UNTIL x$>"": Kommentar: In LG steht die zulässige Gesamtlänge der Eingabe, in L die aktuelle Länge. In X9$ wird die Summe der Eingabe-Tastendrücke zusammengestellt. CHR$(20) ist das Backspace- Zeichen und löscht den rechten Rand von X9$, solange dort etwas vorhanden ist.
$$ | %% | AT | CALL | CENTER | CHECK | COLD | COLOR | COPY | CLS | CSET | D! | D!PEEK | D!POKE | DIR | DISK | DISPLAY | DIV | DO | DO NULL | DRAW TO | DUMP | DUP | ELSE | ERROR | EXEC | FETCH | FIND | GRAPHICS | INSERT | INST | JOY | KEY | KEYGET | LIN | MAP | MEMCLR | MEMCONT | MEMDEF | MEMLEN | MEMLOAD | MEMOR | MEMPEEK | MEMPOS | MEMREAD | MEMRESTORE | MEMSAVE | MERGE | MOB ON/OFF | MOBCOL | MOD | MOVE | MULTI | NRM | ON ERROR | ON KEY | OPTION | OUT | PAGE | PAINT | PAUSE | PLACE | RENUMBER | RESUME | RETRACE | SCRLD | SCRSV | SOUND | TEXT | TRACE | USE | WAVE | X!