SLEEP

Aus C64-Wiki
Wechseln zu: Navigation, Suche
SLEEP
Format: 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
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. 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]

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:

10 T=TI+(60*5)
20 FOR G=-1TO0:G=TI<T:NEXT

Der Ausdruck (60*5) gibt die zu wartende Zeit in 5×60 Sechzigstelsekunden (=5 Sekunden) an.
Allerdings kann hier der Fall eintreten, das TI überläuft (bei 5184000, entspricht 24h) und die Verzögerung dann geringer ausfällt als gefordert.

10 WT=5*60:TI$="000000"
20 FOR G=-1TO0:G=TI<WT:NEXT

Variable WT gibt in diesem Beispiel 5×60 abzuwartende Sechzigstelsekunden (=5 Sekunden) an.
Diese Variante ist im Vergleich zur vorigen überlaufsicher, sofern die Wartezeit nicht 24h überschreitet, jedoch zum Preis, dass die Systemuhr TI$ jedesmal auf 00:00:00 zurückgestellt wird.