WAIT

Aus C64-Wiki
Wechseln zu: Navigation, Suche
WAIT
Format: WAIT <Speicheradresse>,<Maske>[,<Invers>]
Parameter
<Speicheradresse>: numerischer Ausdruck im Wertebereich von 0 bis 65535
<Maske>: numerischer Ausdruck im Wertebereich von 0 bis 255
<Invers>: numerischer Ausdruck im Wertebereich von 0 bis 255
Einordnung
Typ: Anweisung
Kontext: System
Aufgabe: Warten, bis an angegebener Speicherposition eine vorgegebene Bitkombination auftritt
Abkürzung: wA
Verwandte Befehle
PEEK

Anmerkung: Dieser Artikel beschreibt den BASIC-Befehl WAIT unter BASIC V2 des Commodore 64.


Der BASIC-Befehl WAIT hält ein BASIC-Programm im Wartezustand, bis an der angegebenen Speicheradresse ein bestimmte Bitkombination zu Stande kommt. Dies dient üblicherweise zur Überwachung verschiedener Ein- und Ausgabevorgänge.

Dieser Befehl arbeitet wie folgt: Der Inhalt der angegebenen Speicheradresse wird, falls Invers angegeben ist, zuerst mit diesem EOR-verknüpft (vgl. auch XOR) und dann mit Maske logisch AND verknüpft. Erst wenn das Ergebnis ungleich Null wird, fährt die Programmausführung fort.
WAIT wartet also, bis mindestens eines der Bits in Speicheradresse, deren Stellenwerte durch Maske gegeben sind, den Wert 1 annimmt oder 0, falls das korrespondierenden Bit in Invers gesetzt ist (siehe Beispiel unten mit der äquivalenten BASIC-Nachbildung).

Die Speicheradresse kann Werte von 0 bis 65535 annehmen und für Maske und Invers ist der Bereich von 0 bis 255 zulässig. Liegen die Parameter nicht in den angegebenen Bereichen, so erscheint die BASIC-Fehlermeldung ?ILLEGAL QUANTITY ERROR.

Hinweis: Sind die Parameter für Maske und Invers so gewählt, dass damit das zu erwartende Ereignis nicht erkannt wird, hilft üblicherweise nur noch ein Reset oder Abbruch des BASIC-Programms mit der Tastenkombination RUN/STOP + RESTORE .

[Bearbeiten] Beispiele

WAIT 1, 16, 16

Auf das Drücken einer Taste des Datasettengeräts warten (wenn Bit 4 von Speicherstelle 1 gleich 0 wird).

POKE 198,0: WAIT 198,1

Erst den Tastaturpuffer löschen und dann warten, bis eine Taste gedrückt wird (wenn Bit 0 von Speicherstelle 198 gleich 1 wird).

100 REM  WAIT ADR, MASK, FLIP  NACHGEBILDET ...
110 B=PEEK(ADR): IF ((NOT B AND FLIP OR B AND NOT FLIP) AND MASK) = 0 GOTO 110

Nachbildung von WAIT mittels Standard-BASIC: Die EOR-Verknüpfung von B und FLIP muss etwas umständlich mit NOT, OR, AND nachgebaut werden.
Oder in einer etwas flotteren Variante (mit weniger logischen Operationen) entsprechende Zeile oben ersetzen mit:

110 B=PEEK(ADR): IF ( (B OR FLIP)-(B AND FLIP) AND MASK) = 0 GOTO 110

Zeitverzögerungen:

POKE160,0: WAIT 160,32

Wartet 32/60 s, also eine gute 1/2 Sekunde. Werte der Bitwertigkeiten 1, 2, 4, 8, 16, 32 erlauben die entsprechende Zeit in 1/60 s der Jiffy-Clock (die Zeropage-Adresse 160 ist das niederwertigste Byte des Zählers) auch in einem Bereich kleiner 1 Sekunde auf kurze und elegante Weise verstreichen zu lassen. Funktioniert selbst bei compiliertem BASIC. In diesem Beispiel wird allerdings als Nebeneffekt auch der Wert für TI und TI$ verändert!

[Bearbeiten] Weblinks


In anderen Sprachen