TIME$
TIME$ | |
Syntax: | TI$ oder TIME$ oder TI[<Buchstaben-Ziffern-Leerzeichen-Folge>]$ |
Parameter | |
Einordnung | |
Typ: | Zeichenketten-Systemvariable |
Kontext: | System |
Aufgabe: | Abfrage der Rechner-Laufzeit |
Abkürzung: | - |
Token: | keins |
Verwandte Befehle | |
TI |
Anmerkung: Dieser Artikel beschreibt die Systemvariable TI$ unter BASIC V2 des Commodore 64.
Die Systemvariable TI$ enthält einen sechs Zeichen lange Zeichenkette (String), der die Laufzeit des Rechners seit dem letzten Zurücksetzen, einem Überlauf nach 24 Stunden oder den Zeitverlauf seit der letzten Zuweisung in Stunden, Minuten und Sekunden angibt (Format: HHMMSS).
Häufig wird diese Variable auch in einer für Variablennamen möglichen und gültigen Langform − in <Buchstaben> darf kein anderes Schlüsselwort vorkommen − per Konvention als TIME$ oder TIMER$ bezeichnet, um die Lesbarkeit zu erhöhen.
Die Zeitzählung fängt beim Einschalten, beim Überlauf nach 24 h oder nach einem Reset bei "000000" an. Zudem kann der Variablen TI$ eine 6-stellige Zeichenkette zum Setzen eines entsprechenden Zeitwertes zugewiesen werden. Beispielsweise setzt TI$="000000"
die Zeitzählung auf den Einschaltzustand zurück.
Die Zeichenkette in TI$ korrespondiert mit dem Wert der Systemvariablen TI (bzw. TIME), die beide auf dem systeminternen Timer (Zeitzähler) basieren. Ein Setzen von TI$ setzt somit auch TI auf den korrespondierenden Wert in 1/60 s.
Die Systemvariable TI$ kann Werte von "000000" bis "235959" annehmen. Beim Bereichsüberlauf weist TI$ wieder den Wert "000000" auf und damit enthält auch TI den Wert 0.
Obwohl "235959" als größter zu lesender Wert gilt, kann TIME$ maximal auf "774020" gesetzt werden. Wenn TIME$ einen Zeichenkettenwert im Bereich von "774021" bis "999999" zugewiesen bekommt, resultiert der Wert TIME$ dem eingegebenen abzüglich 774021. Z.B. gibt die Sequenz TI$="888888":?TI$
"114907" aus, wobei 888888-774021 dann 114867 ergibt, was wiederum nach Umrechnung der 67 Sekunden auf 1 Minute und 7 Sekunden schließlich zu 114907 führt.
Die von TI$ vermerkte Zeit entspricht in der Regel nicht dem Verlauf der Realzeit, da der mit Hilfe der Interrupt-Technik realisierte interne Timer z.B. bei Nutzung des Datasettengeräts oder bei anderen Vorgängen, die Interrupts (IRQ) maskieren (z.B. mit SEI), vorübergehend angehalten wird.
Wird beim Setzen von TI$ keine Zeichenkette verwendet, so erscheint die BASIC-Fehlermeldung ?TYPE MISMATCH ERROR. Entspricht die zugewiesene Zeichenkette nicht gewissen Voraussetzungen (z.B. nicht 6-stellig oder enthält verbotene Zeichen wie "-", "+"), wird die Fehlermeldung ?ILLEGAL QUANTITY ERROR produziert. Allerdings werden sinnvolle Zeichen und Wertebereiche nicht streng überprüft und so kann TI$ (somit auch TI) kurzfristig einen Wert außerhalb des zulässigen Bereichs annehmen, welcher dann aber innerhalb einer 1/60 Sekunde wieder auf "000000" springt.
Typische Situation, die obigen Fehler auslöst, tritt bei Verwendung von Zeichenketten-Variablennamen ein, die bei den signifikanten ersten beiden Buchstaben TI aufweisen, wie z.B. bei TITEL$ = "C64 Intern - Das große Buch zum Commodore 64"
.
Beispiele[Bearbeiten | Quelltext bearbeiten]
Digitaluhr[Bearbeiten | Quelltext bearbeiten]
10 REM Simulation einer Uhr, Abbruch mit RUN/STOP 20 TIME$="235800" : REM Ein Wert kurz vor dem Ueberlauf 30 T$=TIME$ : REM Zeit zwischenspeichern, um Ueberlaufeffekte zu vermeiden 40 PRINT CHR$(147); 50 PRINT LEFT$(T$,2);":"; 60 PRINT MID$(T$,3,2);":"; 70 PRINT RIGHT$(T$,2) 80 GOTO 30
Am Bildschirm wird links oben die Zeit, im typischen Zeitformat einer Digitaluhranzeige aufbereitet, angezeigt.
Berechnete Zeit setzen[Bearbeiten | Quelltext bearbeiten]
Die aktuelle Zeit, um einen Sekundenwert aus Variable X (positiv oder negativ) verstellen:
500 TN=INT(TI/60)+X : REM IN SEKUNDEN 510 M=INT(TN/60) 520 S=TN-M*60 : REM SEKUNDENKOMPONENTE 530 H=INT(M/60) : REM STUNDENKOMPONENTE 540 M=M-H*60 : REM MINUTENKOMPONENTE 550 S$=STR$(S):M$=STR$(M):H$=STR$(H) : REM ALS ZEICHENKETTE 560 T$=RIGHT$("0"+RIGHT$(H$,LEN(H$)-1),2) : REM FORMATIEREN 570 T$=T$+RIGHT$("0"+RIGHT$(M$,LEN(M$)-1),2) : REM UND 580 T$=T$+RIGHT$("0"+RIGHT$(S$,LEN(S$)-1),2) : REM ZUSAMMENSETZEN 590 TI$=T$ : REM UHR SETZEN
Ein etwaiger Überlauf bei "235959" wird hier nicht berücksichtigt.
Zeitverzögerung[Bearbeiten | Quelltext bearbeiten]
100 TI$="192502" 110 WAIT 160,64
Wartet 3 Sekunden (als Differenz zu 19:25:05), etwas trickreicher mit Hilfe des WAIT-Befehls. Dabei wird auf das Umschalten (den Wechsel auf 1) des höchstwertigen Bits des aus 3 Byte bestehenden Timer-Wertes (siehe TI für Details) gewartet. Diese Bit 6 an Speicherstelle 160 ($A0) der Zeropage entspricht dem Timer-Wert 4.194.304 in 1/60 Sekunden also dem TI$-Wert 19:25:05. Verzögerungen bis zu maximal diesem Wert (also die Differenz dazu) sind so möglich. Als Nebeneffekt ist hier auch kein Abbruch mit RUN/STOP möglich, jedoch mit RUN/STOP +RESTORE .
ABS | AND | ASC | ATN | CHR$ | CLOSE | CLR | CMD | CONT | COS | DATA | DEF | DIM | END | EXP | FN | FOR | FRE | GET | GET# | GOSUB | GOTO | IF | INPUT | INPUT# | INT | LEFT$ | LEN | LET | LIST | LOAD | LOG | MID$ | NEW | NEXT | NOT | ON | OPEN | OR | PEEK | POKE | POS | PRINT | PRINT# | READ | REM | RESTORE | RETURN | RIGHT$ | RND | RUN | SAVE | SGN | SIN | SPC | SQR | STATUS/ST | STEP | STOP | STR$ | SYS | TAB | TAN | THEN | TIME/TI | TIME$/TI$ | TO | USR | VAL | VERIFY | WAIT