MOVFM

Aus C64-Wiki
Zur Navigation springenZur Suche springen

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

Name: MOVFM
Beschreibung: Fließkommaregister FAC mit Zahl aus dem Speicher füllen
Einsprungpunkt: $BBA2 / 48034
Ü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

MOVFM — manchmal auch als MOVMF[1] oder MEMFAC[2][3] bezeichnet — überträgt eine Fließkommazahl aus dem Speicher in das Fließkommaregister FAC. 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[Bearbeiten | Quelltext bearbeiten]

MOVFM überträgt eine Fließkommazahl aus dem Speicher des C64 in das Fließkommaregister FAC 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 102/$66 kopiert, parallel dazu wird beim Übertragen der Mantisse an die Adressen 98/$62 bis 101/$65 dort das stets gesetzte führende Bit ergänzt. Als Vorbereitung für nachfolgend aufgerufene numerische Routinen löscht MOVFM schließlich noch das Rundungsbyte an Adresse 112/$70. Keine der ROM-Routinen des C64 verwendet den im Akkumulator zurückgelieferten Exponenten, allerdings verlässt sich die Routine FPWR darauf, dass nach dem Aufruf von MOVFM ein gesetztes Zero-Flag auf die Zahl 0 in FAC hinweist.

Laufzeitverhalten[Bearbeiten | Quelltext bearbeiten]

Die Laufzeit von MOVFM ist vom Wert der übertragenen Zahl unabhängig und beträgt üblicherweise 76 Systemtakte. Lediglich in dem Sonderfall, dass die Fließkommazahl auf einer Page-Grenze liegt, verlängert sich die Ausführungszeit auf bis zu 80 Systemtakte, da auf die Zahl mit Hilfe der Y-nachindizierten Zeropage-Adressierung zugegriffen wird.

Verwandte Routinen[Bearbeiten | Quelltext bearbeiten]

Name Adresse
dez.
Adresse
hex.
Beschreibung
CONUPK 47756 BA8C ARG mit Zahl aus dem Speicher füllen (A=Adr.LB, Y=Adr.HB). Vergleicht danach noch als Vorbereitung für nachfolgende Operationen die Vorzeichen von ARG und FAC und schreibt das Ergebnis nach Adresse $6F ($00: Vorzeichen gleich, $80: Vorzeichen ungleich), und lädt den Exponenten von FAC nach A (d.h. setzt Zero Flag genau dann, wenn FAC gleich null). Die Routinen FADDT, FDIVT, FMULTT und FPWRT setzen diese Vorbereitung voraus.
MOVAF 48124 BBFC Zahl in ARG nach FAC kopieren
MOVFA 48140 BC0C Zahl in FAC nach ARG kopieren
MOVFM 48034 BBA2 FAC mit Zahl aus dem Speicher füllen (A=Adr.LB, Y=Adr.HB)
MOVMF 48084 BBD4 Zahl aus FAC im Speicher ablegen (X=Adr.LB, Y=Adr.HB)

Weblinks[Bearbeiten | Quelltext bearbeiten]

Quellen[Bearbeiten | Quelltext bearbeiten]