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

Weblinks[Bearbeiten | Quelltext bearbeiten]