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