TIME$

Aus C64-Wiki
Zur Navigation springenZur Suche springen
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 .