FACINX
Anmerkung: Dieser Artikel beschreibt die numerische FACINX-Routine im BASIC-ROM.
| Name: | FACINX | ||||||
| Beschreibung: | Zahl im Fließkommaregister FAC in 16-Bit-Ganzzahl (Y=LB, A=HB) wandeln | ||||||
| Einsprungpunkt: | $B1AA / 45482 | ||||||
| Übergebene Argumente: | |||||||
| Rückgabe-Werte: | |||||||
| Akkumulator: | Low-Byte der Ganzzahl | ||||||
| Y-Register: | High-Byte der Ganzzahl | ||||||
| Negative-Flag: | gesetzt genau dann, wenn die Ganzzahl negativ ist | ||||||
FACINX wandelt den Inhalt des Fließkommaregisters FAC in eine 16-Bit-Ganzzahl um, die dann im Akkumulator (Low-Byte) und im Y-Register (High-Byte) zurückgeliefert wird. Negative Ganzzahlen werden in der Zweierkomplement-Darstellung codiert. Die in FAC übergebene Fließkommazahl muss im Intervall [ -32768; 32768 [ liegen, andernfalls löst FACINX einen ?ILLEGAL QUANTITY ERROR aus.
FACINX verändert im Speicher nur den Inhalt des Fließkommaregisters FAC. Sie wird im BASIC-ROM von keiner anderen Routine aufgerufen, kann aber für eigene Numerik-Programme hilfreich sein.
Algorithmus[Bearbeiten | Quelltext bearbeiten]
FACINX implementiert keine eigenständige Umwandlung, sondern überprüft nur, dass sich die Zahl im Fließkommaregister FAC als 16-Bit-Ganzzahl darstellen lässt. Falls diese Voraussetzung erfüllt ist, so ruft FACINX die ROM-Routine QINT auf, um FAC in eine 32-Bit-Ganzzahl umzuwandeln, und lädt anschließend die niederwertigen beiden Bytes des Resultats in den Akkumulator (Low-Byte) und ins Y-Register (High-Byte). Ansonsten meldet FACINX einen ?ILLEGAL QUANTITY ERROR.
Laufzeitverhalten[Bearbeiten | Quelltext bearbeiten]
Die Laufzeit von FACINX setzt sich zusammen aus der Rechenzeit für die Bereichsüberprüfung und das Laden des Resultats in die Register (134 Takte, wenn FAC = -32768, sonst 29 Takte) und aus der Laufzeit der Routine QINT. Insgesamt benötigt die ROM-Routine FACINX zwischen 61 und 8273 Takten.
Ein Systemtakt entspricht auf dem Commodore 64 rund einer Mikrosekunde (μs). Im ungünstigsten Fall benötigt die FACINX-Routine also für die Umwandlung rund 8 Millisekunden (ms).
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). |