SLEEP
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.
APPEND | BANK | BEGIN | BEND | BLOAD | BOOT | BSAVE | BUMP | CATALOG | COLLISION | COLOR | CONCAT | DCLEAR | DCLOSE | DOPEN | DVERIFY | ENVELOPE | FAST | FETCH | FILTER | GO64 | MOVSPR | (OFF) | PEN | PLAY | POINTER | POT | (QUIT) | RECORD | RREG | RSPCOLOR | RSPPOS | RSPRITE | RWINDOW | SLEEP | SLOW | SOUND | SPRCOLOR | SPRDEF | SPRITE | SPRSAV | STASH | SWAP | TEMPO | WIDTH | WINDOW | XOR