STRVAL

Aus C64-Wiki
Zur Navigation springenZur Suche springen

Anmerkung: Dieser Artikel beschreibt die numerische STRVAL-Routine zur Umwandlung von Strings in Fließkommazahlen im BASIC-ROM.

Name: STRVAL
Beschreibung: ASCII-String nach Fließkommazahl im Fließkommaregister FAC wandeln
Einsprungpunkt: $B7B5 / 47029
Übergebene Argumente:
Akkumulator: Länge des einzulesenden Strings
Sonstige: Adresse 34/$22 (Low-Byte) / 35/$23 (High-Byte) = Zeiger auf einzulesenden numerischen String
Rückgabe-Werte:
Sonstige: FAC = eingelesene Zahl

STRVAL — manchmal auch als STRFAC[1] bezeichnet — liest einen numerischen ASCII-String ein und wandelt ihn in eine Fließkommazahl, die dann im Fließkommaregister FAC abgelegt wird. Beim Aufruf der Routine wird die Anfangsadresse dieses Strings an den Adressen 34/$22 (Low-Byte) und 35/$23 (High-Byte) übergeben; im Akkumulator muss die Länge des Strings gespeichert sein. Der Einsprungpunkt von STRVAL liegt im Anfangsbereich der ROM-Routine, die als Implementierung der Funktion VAL in der Tabelle der BASIC-Funktionen an Adresse $A074 hinterlegt ist.

Der Aufruf von STRVAL überschreibt den Fließkommabereich an den Adressen 93/$5D bis 103/$67 und verändert zudem die Hilfszeiger an den Adressen 34/$22 bis 35/$23 und 133/$71 bis 114/$72.

Algorithmus[Bearbeiten | Quelltext bearbeiten]

STRVAL implementiert keine eigenständige Umwandlung, sondern sichert zunächst nur den Lesezeiger der Routine CHRGET an die Adressen 133/$71 bis 114/$72. Anschließend ersetzt STRVAL diesen Zeiger durch die Adresse des umzuwandelnden Strings, schließt den String kurzzeitig durch ein Nullbyte ab und ruft anschließend die ROM-Routine FIN auf, die die eigentliche Wandlung vornimmt. Danach setzt STRVAL den CHRGET-Zeiger auf seinen ursprünglichen Wert zurück und stellt auch das Zeichen hinter dem String, das durch die Nullterminierung überschrieben wurde, wieder her.

Laufzeitverhalten[Bearbeiten | Quelltext bearbeiten]

Die Laufzeit von STRVAL setzt sich zusammen aus der Laufzeit der ROM-Routine FIN und aus der Rechenzeit für die Vor- und Nachbereitung ihres Aufrufs. Letzteres dauert zwischen 124 und 125 Systemtakten.

Ein Systemtakt entspricht auf dem Commodore 64 rund einer Mikrosekunde (μs).

Weblinks[Bearbeiten | Quelltext bearbeiten]

Quellen[Bearbeiten | Quelltext bearbeiten]