SLEEP

Aus C64-Wiki
Zur Navigation springenZur Suche springen
SLEEP
Syntax: SLEEP <n>
Parameter
<n>: numerischer Ausdruck im Wertebereich von 0 bis 65535
Einordnung
Typ: Anweisung
Kontext: System
Aufgabe: Programmausführung für eine bestimmte Zeitspanne anhalten
Abkürzung: sL
Token: $fe $0b (254 11)
Verwandte Befehle
TI, WAIT

Anmerkung: Dieser Artikel beschreibt den BASIC-Befehl SLEEP ab Commodore BASIC V7.0 oder höher.

Der Befehl SLEEP hält die Programmausführung für eine bestimmte Zeitspanne gemäß dem Parameter n an. Ein Wert von 0 bis 65535 ist zulässig und gibt immer die Zeitspanne in Sekunden an, unabhängig davon, ob gerade der SLOW- oder FAST-Modus aktiv ist. Wird der Wertebereich nicht eingehalten, so meldet der Basic-Interpreter den Fehler ?ILLEGAL QUANTITY ERROR. Weniger oder mehr als genau ein Parameter führt zur Fehlermeldung ?SYNTAX ERROR.

Hinweise:

  • Die FAST-Anweisung beeinflusst nicht den Befehl SLEEP!
  • Ein SLEEP 0 wartet auf den nächsten System-Interrupt, d.h. die Wartezeit liegt zwischen 0 und 20 Millisekunden (im bei einem PAL-System). Da beim C128 der System-Interrupt vom Rasterregister des VIC ausgelöst wird, kann man über SLEEP 0 eine Synchronisation mit dem VIC-Bildaufbau erreichen.

Beispiele[Bearbeiten | Quelltext bearbeiten]

100 PRINT "WARTE EINE MINUTE ...";
110 SLEEP 60
120 PRINT "VERSTRICHEN!"

Eine Minute warten, ohne auf eine sonst übliche von der CPU-Taktung abhängige FOR-NEXT-Schleife zurückgreifen zu müssen ...

200 TA=TI
210 FOR I=1 TO 100
220 SLEEP 0
230 NEXT I
240 PRINT (TI-TA)/60

Als gemessene Laufzeit in Sekunden sollte 2 (für PAL) oder 1.67 (für NTSC) ausgegeben werden, dies entspricht 100 VIC-Bildern (PAL hat 50 Hz, NTSC hat 60 Hz).

100 DO:SLEEP0:COLOR4,2:COLOR4,1:LOOP

Bei jedem Bildaufbau wird zweimal die Rahmenfarbe gewechselt, mit nur wenigen Rasterzeilen Abweichung (solange keine Taste gedrückt wird).


SLEEP für Basic 2.0


Für BASIC V2 könnte die Sleep-Funktion wie folgt nachgebildet werden (als Unterprogramm ab Zeile 10):

  1 GOTO 100
 10 T0=TI: FOR T=T0+T*60 TO T: T=TI: T=T-5184E3*(T<T0): NEXT: RETURN
100 T=5: GOSUB 10: PRINT "ZEIT VERSTRICHEN!"

Die Zuweisung T=5 gibt die zu wartende Zeit in Sekunden an, wobei auch Bruchteile davon angegeben werden können.
Hier wird auch der 24h-Überlauf des Timers TI bei 5184000 (60 Ticks/Sekunde × 86400 Sekunden/Tag) berücksichtigt.
Der Ausdruck (T<T0) ergibt dabei -1, wenn er zutrifft und führt dazu, dass der 24h-Wert addiert wird, damit der Endwert in Variable T tatsächlich erreicht werden kann, auch wenn der Timer auf 0 zurückgesprungen ist.

Hier wird übrigens die Eigenheit des CBM-BASIC-Interpreters ausgenutzt, dass selbst dann, wenn die Laufvariable bereits den Endwert hat, trotzdem einmal durchlaufen wird.