FACINX

Aus C64-Wiki
Zur Navigation springenZur Suche springen

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

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

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

Weblinks