CONUPK

Aus C64-Wiki
Zur Navigation springenZur Suche springen

Anmerkung: Dieser Artikel beschreibt die CONUPK-Routine zur Übertragung von Fließkommawerten im BASIC-ROM.

Name: CONUPK
Beschreibung: Fließkommaregister ARG mit Zahl aus dem Speicher füllen
Einsprungpunkt: $BA8C / 47756
Übergebene Argumente:
Akkumulator: Adresse des Fließkommawerts (Low-Byte)
Y-Register: Adresse des Fließkommawerts (High-Byte)
Rückgabe-Werte:
Akkumulator: Exponent von FAC
X-Register: bleibt unverändert
Y-Register: 0
Zero-Flag: gesetzt falls FAC = 0, sonst gelöscht


CONUPK — manchmal auch als MOVMA[1], MEMFC2[2] oder MEMARG[3] bezeichnet — überträgt eine Fließkommazahl aus dem Speicher in das Fließkommaregister ARG. Die Speicheradresse dieser Fließkommazahl wird im Akkumulator (Low-Byte) und im Y-Register (High-Byte) übergeben. Die Zahl muss im kompakten 5 Byte-Format vorliegen, wie es zum Speichern von REAL-Variablen verwendet wird. Es können sowohl Werte im RAM als auch Konstanten im BASIC-ROM transferiert werden.

Verwendung

CONUPK überträgt eine Fließkommazahl aus dem Speicher des C64 in das Fließkommaregister ARG und bereitet sie für die nachfolgende Verwendung in Numerik-Routinen vor. Hierfür wird das höchstwertige Byte der Mantisse, das im höchstwertigen Bit das Vorzeichen der Zahl enthält, separat an Adresse 110/$6E kopiert, parallel dazu wird beim Übertragen der Mantisse an die Adressen 106/$6A bis 109/$6D dort das stets gesetzte führende Bit ergänzt. Als Vorbereitung für nachfolgend aufgerufene numerische Routinen vergleicht CONUPK schließlich noch die Vorzeichen der Fließkommaregister FAC und ARG legt das Ergebnis an Adresse 111/$6F ab (0: Vorzeichen sind gleich, 1: Vorzeichen sind verschieden), und lädt den Exponenten der Zahl in den Akkumulator. Durch diesen letzten Schritt wird das Zero-Flag genau dann gesetzt, wenn FAC gleich 0 ist. Keine der ROM-Routinen des C64 verwendet den im Akkumulator enthaltene Exponenten, allerdings verlassen sich die Routinen FADDT, FDIVT und FMULTT darauf, dass ein gesetztes Zero-Flag auf die Zahl 0 in FAC hinweist.

Laufzeitverhalten

Die Laufzeit von CONUPK ist vom Wert der übertragenen Zahl unabhängig und beträgt üblicherweise 85 Systemtakte. Lediglich in dem Sonderfall, dass die Fließkommazahl auf einer Page-Grenze liegt, verlängert sich die Ausführungszeit auf bis zu 89 Systemtakte, da auf die Zahl mit Hilfe der Y-nachindizierten Zeropage-Adressierung zugegriffen wird. Im ROM des C64 trifft dies auf eine an Adresse $E2FF gespeicherte Konstante zu, die von den ROM-Routinen COS und SIN verwendet wird.

Weblinks

Quellen