TIME

Aus C64-Wiki
Wechseln zu: Navigation, Suche
TIME
Format: TI

oder

TIME

oder

TI[<Buchstaben-Ziffern-Leerzeichen-Folge>]
Parameter
Einordnung
Typ: numerische Systemvariable
Kontext: System
Aufgabe: Abfrage des Zeitzählers (Jiffy-Clock)
Abkürzung: -
Verwandte Befehle
TI$

Anmerkung: Dieser Artikel beschreibt die Systemvariable TI unter BASIC V2 des Commodore 64.


Die Systemvariable TI ist ein Timer (Zeitzähler), der die seit dem Einschalten des C64 oder dem letzten 24-h-Überlauf oder nach einem Reset verstrichene Zeit in 1/60 Sekunden zählt. 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.
Weiterhin wird er durch Setzen der Systemvariable TI$ (bzw. TIME$) beeinflusst und kann so indirekt auf den korrespondierenden Timer-Wert von TI$ gesetzt werden. TI$ und TI sind dabei nur unterschiedliche Ausprägungen des gleichen internen Timers. Dabei kann TI Werte von 0 bis (hexadez. 4F1A00) 5184000 annehmen, wobei das Maximum der Anzahl der 1/60 s für 24 Stunden, also dem Wertebereich von TI$ entspricht.
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.

Die Systemvariable TI kann nur ausgelesen werden. Beim Versuch einer Wertzuweisung erscheint die BASIC-Fehlermeldung ?SYNTAX ERROR. Dies passiert ebenfalls bei der Verwendung von Variablennamen, die bei den signifikanten ersten beiden Buchstaben TI aufweisen, wie z.B. bei TIEFE = 10.


Beispiele[Bearbeiten]

Einfache Abfrage[Bearbeiten]

ZEIT = TI: PRINT "Ihr Commodore 64 läuft seit ca. ";INT(ZEIT/60);" Sekunden "  

Time auslesen und als Sekundenwert aufbereiten.

Alias-Bezeichnungen[Bearbeiten]

PRINT TICKS

Ein weitere gültige Langbezeichnung für TI.

PRINT TICKTOCK

Dies ist fehlerbehaftet, da das Schlüsselwort TO enthalten ist und liefert folgende Ausgabe (der TI-Wert wird dennoch ausgeben, weil der Syntax-Fehler erst später auftritt)

 43580
?SYNTAX ERROR
READY.


100 PRINT "START "TI$": T=2.5: GOSUB 900: PRINT "ENDE "TI$
199 END

Zeit abwarten[Bearbeiten]

900 T0=TI: FOR T=T0+T*60 TO T: T=TI:T=T-5184E3*(T<T0): NEXT: RETURN

Das Unterprogramm in Zeile 900 wartet die in Variable T gegebene Zeit in Sekunden (auch Bruchteile davon) ab.
Dabei bleibt der aktuelle Zeitwert in TI$ unberührt. Auch ein etwaiger Tagesumschlag bei 23:59:59 (das entspricht 5184000 1/60 s) wird berücksichtigt.
Führt zu folgender Ausgabe beispielsweise unmittelbar vor dem Tagesumschlag

START 235959
ENDE 000001

Die tatsächlich verstrichene Zeit in Sekunden lässt sich nach dem Aufruf mit (T-T0)/60 ermitteln.

Berechnete Zeit setzen[Bearbeiten]

Die aktuelle Zeit, um einen Sekundenwert aus Variable X (positiv oder negativ) verstellen:

500 T=TI+X*60        : REM 1/60 SEKUNDEN
510 Z1 = INT(T/256)  : REM MIDDLE BYTE VORBEREITET 
520 Z0 = T-Z1*256    : REM LOW BYTE
530 Z2 = INT(Z1/256) : REM HIGH BYTE
540 Z1 = Z1-Z2*256   : REM MIDDLE BYTE
550 POKE 162,0: POKE 160,Z2 : POKE 161,Z1 : POKE 162,Z0 : REM TIMER SETZEN

Das niederwertigste Byte wird vorsorglich auf 0 gesetzt, damit unmittelbar nach dem Setzen des Middle Bytes nicht ein zwischenzeitliches Hochzählen (IRQ-Unterbrechung) einen Überlauf produziert und so die Zeit verfälschen könnte (um 256/60 s, also 4,3 s).

Weblinks[Bearbeiten]