Die folgende Polynomberechnung vom c64 wollte ich mit dem Plus/4 umsetzen.
Hier ein Polynom y = 0.7 + 2.5 * x + 8.2 * x^2 - 2.3 *x^3 + 0.5 * x^4 Aus dem Buch " Maschinensprache für Fortgeschrittene zum c64"
PROFI-ASS 64 V2.0 SEITE 1
100: 033C .OPT P,OO
llO:
120: POLYNOMBRRECHNUNG'
130:
140: 033C *= 828 ; KASSETTENPUFFER
150:
160: E059 POLYNOM
170:
180: 033C A9 43 LDA #< KOEFF
190: 033E AO 03 LDY #> KOEFF
200: 0340 4C 59 RO JMP POLYNOM
210:
220: 0343 04 KOEFF .BYT 4 POLYNOMGRAD
230: 0344 80 00 00 .FLP 0.5 A(4)
240: 0349 82 93 33 .FLP -2.3 A(3) 47
250: 034E 84 03 33 .FLP 8.2 A(2)
260: 0353 82 20 00 .FLP 2.5 A(l)
270: 0358 80 33 33 .FLP 0.7 A(O)
10 poke 785,828 and 255 . poke 786,828/256 rem Adresse für die USR Funktion
20 ? USR(1)
Ergebniss 9.6
y = 0.7 + 2.5 +8.2 -2.3 +0.5 = 9.6
Das ergebniss erhalte ich mit dem Plus/4 nur!!! mit dem Argument x=1 !!!! dann verliesen ihn die Geister.
Beim Plus/4 Romlisting gibt es nur eine Routine Namens "Polynomauswertung" sie ruft eine weitere Routine Namens Horner Algorithmuss auf.
Beim c64 gibt es zwei Polynomroutinen Namens "Poly = E059 " u. Namens "Poly2 = E043"
Poly2 ist nur für Polynome mit dem Argument x^2 z.B. y = 6 * x + 0.5 * x^3 + 0.9 * x^5 Der Exponent von x vergrössert sich immer um 2 .
Da beim Plus/4 nur eine Routine gibt so nehme ich an das sie die zwei Routinen vom c64 in einer einzigen Routine verarbeitet.
Nun ist die Frage warum beim Plus/4 ( m. d. Routine = $A6B3) ? USR(2) nicht gleich c64 ( m. d. Routine $E059) ? USR(2) ist !!!!!!!!!
Beim Plus/4 erhalte ich astronomisch hohe Zahlen !!!!!!!
Kann mir einer helfen und sagen was ich falch mache .Denn ich suche den Fehler erst bei mir!!!!!!
Denn der Plus/4 kann doch mit den Fliesskommaakumulator genauso genau rechnen wie der c64!!!!!!!!!
So das war mein Problem.