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

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

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

Quellen