FADDT

Aus C64-Wiki
Zur Navigation springenZur Suche springen

Anmerkung: Dieser Artikel beschreibt die numerische FADDT-Routine im BASIC-ROM.

Name: FADDT
Beschreibung: Fließkommaregister ARG zu Fließkommaregister FAC addieren
Einsprungpunkt: $B86A / 47210
Übergebene Argumente:
Zero-Flag: gesetzt falls FAC = 0, sonst gelöscht
Sonstige: FAC = Summand B, ARG = Summand A
Rückgabe-Werte:
Sonstige: FAC = Ergebnis der Addition A+B, ARG = Summand A


FADDT — manchmal auch als ADDFAC[1], ADD[2], oder einfach als PLUS[3] oder Plus[4] bezeichnet — addiert den Inhalt des Fließkommaregisters ARG zu der im Fließkommaregister FAC befindlichen Wert.

Nach dem Aufruf steht in FAC das Ergebnis der Addition, während ARG unverändert ist und für nachfolgend aufgerufene Numerik-Routinen weiter verwendet werden kann. Ist das Ergebnis der Addition zu groß für die Fließkommadarstellung des C64, so löst FADDT einen ?OVERFLOW ERROR aus. In diesem Fall ist FAC anschließend undefiniert, während ARG unverändert bleibt.

Neben dem Inhalt des Fließkommaregisters FAC ändert FADDT auch das Rundungsbyte des Hilfspuffers FAC#3 an Adresse 86/$56.

Verwendung

FADDT ist eigentlich keine eigenständige ROM-Routine. Vielmehr ergibt sich ihr Einsprungpunkt dadurch, dass auf die Startadresse der Routine FADD ein Offset von 3 aufaddiert und dadurch der Aufruf der Routine CONUPK zu Beginn von FADD ausgelassen wird.

Bei der Nutzung von FADDT ist zu beachten, dass sich die Routine auf zwei Seiteneffekte von CONUPK verlässt. In jedem Fall darf beim Aufruf von FADDT das Zero-Flag nur dann gesetzt sein, wenn im Fließkommaregister FAC der Wert 0 gespeichert ist, denn bei gesetztem Zero-Flag überspringt FADDT alle Berechnungen und kopiert direkt den Inhalt von ARG nach FAC. Falls FAC ungleich 0 ist, so muss zudem das höchstwertige Bit von Adresse 111/$6F angeben, ob die Vorzeichen von FAC und ARG gleich sind (Bit ist gelöscht) oder verschieden sind (Bit ist gesetzt). Aufgrund dieses Bits unterscheidet FADDT zwischen einer Addition (wenn FAC und ARG die gleichen Vorzeichen haben) und einer Subtraktion (bei verschiedenen Vorzeichen von FAC und ARG). Die genannten Voraussetzungen lassen sich am einfachsten dadurch erfüllen, dass unmittelbar vor dem Aufruf von FADDT die folgende kurze Codesequenz ausgeführt wird:

LDA *$66
EOR *$6E
STA *$6F
LDA *$61

Alle im Abschnitt "Quellen" genannten Bücher erwähnen die Voraussetzungen für den Aufruf von FADDT entweder nur teilweise oder gar nicht.

Algorithmus

Der von FADDT verwendete Algorithmus sowie das Laufzeitverhalten sind ausführlich in der Beschreibung der ROM-Routine FADD dokumentiert. Bei den dort angegebenen Rechenzeiten ist lediglich zu beachten, dass selbstverständlich die Laufzeit der Routine CONUPK (85 Systemtakte) bei der Verwendung von FADDT nicht anfällt.

Weblinks


Quellen