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).

Verwandte Routinen[Bearbeiten | Quelltext bearbeiten]

Name Adresse
dez.
Adresse
hex.
Beschreibung
FACINX 45482 B1AA Zahl in FAC zu 16-Bit-Ganzzahl mit Vorzeichen wandeln (Y=LB, A=HB).
FIN 48371 BCF3 Nullterminierten PETSCII-String zu Fließkommazahl in FAC wandeln (Stringadresse in $7A/$7B). Erwartet erstes Zeichen im Akku und gelöschtes Carry-Flag, z.B. durch Aufruf von CHRGOT (JSR $0079).
STRVAL 47029 B7B5 PETSCII-String zu Fließkommazahl in FAC wandeln (String-Adresse in $22/$23, String-Länge im Akku).
FOUT 48605 BDDD Zahl in FAC zu nullterminiertem PETSCII-String wandeln (ab $0100 ff., Adresse auch in A, Y). Direkte Ausgabe des FAC-Inhalts als String ist auch über $AABC/43708 möglich.
GIVAYF 45969 B391 16-Bit-Ganzzahl mit Vorzeichen zu Fließkommazahl in FAC wandeln (Y=LB, A=HB).
QINT 48283 BC9B Zahl in FAC in 32-Bit-Ganzzahl mit Vorzeichen wandeln ($62-$65, Big-Endian-Reihenfolge).

Weblinks[Bearbeiten | Quelltext bearbeiten]

Quellen[Bearbeiten | Quelltext bearbeiten]