TIME
TIME | |
Syntax: | 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: | - |
Token: | keins |
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 | Quelltext bearbeiten]
Einfache Abfrage[Bearbeiten | Quelltext bearbeiten]
ZEIT = TI: PRINT "Ihr Commodore 64 läuft seit ca. ";INT(ZEIT/60);" Sekunden "
Time auslesen und als Sekundenwert aufbereiten.
Alias-Bezeichnungen[Bearbeiten | Quelltext 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. |
Zeit abwarten[Bearbeiten | Quelltext bearbeiten]
100 PRINT "START "TI$: T=2.5: GOSUB 900: PRINT "ENDE "TI$ 199 END 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 | Quelltext 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 | Quelltext bearbeiten]
- IRQ-Routine (auf AAY64), in der die Uhr aktualisiert wird.
- $FFEA/65514 KERNAL-Einsprungpunkt UDTIM für das Erhöhen des Timers.
- $FFDE/65502 KERNAL-Einsprungpunkt RDTIM für das Lesen des Timers.
- $FFDB/65499 KERNAL-Einsprungpunkt SETTIM für das Setzen des Timers.
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