MOVFM
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.
Weblinks[Bearbeiten | Quelltext bearbeiten]
- Disassembly von MOVFM/$BBA2 auf All About Your 64
- CodeBase 64: Floating Point Math
- C64 BASIC & KERNAL ROM Disassembly von Michael Steil
- C64OS: Floating Point Math from BASIC