Hello, Guest the thread was called1.8k times and contains 11 replays

last post from blume at the

polynomberechnung c64 die Routine= $E059 beim Plus/4 nahm ich $A6B3!!!!! aus ROMlisting Plus/4

  • 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.

  • Hallo Pluss/4freunde


    Ich habe am 20.september eine Auskunft über die Polynomroutine c64 / pluss/4 haben wollen da ich ein Bsp. Assembler- Programm vom c64 umschreiben möchte für den Pluss/4.
    Leider habe ich von der pluss/4 Literatur(Bücher oder Zeitschrifften wie compte mit) oder durch Googeln keine Bsp. vom Fliesskommaakuanwendungen gefunden.
    Kann mir einer sagen wo ich zu diesen Thema fündig werden kann.
    Der Bascinterpreder wandelt vor der Berechnung die Integerzahlen in das Fliesskommaformat weil die matheroutinen des Basicinterpreter das voraussetzen .
    Es muss doch Auotoren geben die diesess Thema behandelt hatten.


    Gruss Frank

  • Hallo blume,


    ich kann Dir nicht direkt helfen,aber ich glaube,dass es im C64 Buch "The Advanced Machine Language Book for the Commodore 64" ein Kapitel über die Fliesskomma Funktionen vorhanden war.Ich hoffe doch dass Commodore bei allen Modellen das gleiche Format verwendet hat.


    Grüsse,
    Vassilis

  • Hallo Blume,


    ich habe grad mal in meinem Fundus gestöbert. Im Markt & Technik-Buch "C64/C128 Alles über Maschinensprache" (ISBN: 3-89090-571-6) wird die Anwendung von Fließkommazahlen in Assembler in einem Kapitel von 28 Seiten sehr ausführlich beschrieben. Unter anderem sind zwei Assemblerbeispiele für die von dir erwähnten Routinen ($E059 / $E043) vorhanden. Die beiden allein umfassen mit Erläuterung allerdings schon 4 Seiten.


    Vielleicht findest du ja dieses Buch irgendwo.


    Gruß aus der (ziemlich) sonnigen Pfalz


    Siggi

  • Hallo Nichtsnutz


    In meinen 1.Beitrag ist doch ersichtlisch ,das ich schon mittels Fliesskommaarithmetik die Polynomroutinen (c64 Maschinensprache für fortgeschrittene)erklärt bekommen habe.
    Ich brauch doch kein c64-Buch mehr sondern wie ich mit der Polynomroutine $A6B3 des Pluss/4(einzige Routine gefunden im Romlisting vom Pluss/4-Buch)die oben gennante mit c64 gelöste Polynomaufgabe
    lösen kann!!!!!!!!!!!!!
    Ich erwähnte doch schon s.o. pluss/4 hat nur eine Polynomroutine ($A6B3)während dessen der c64 zwei hat (Namens "Poly = E059 " u. Namens "Poly2 = E043")
    So wie es mit dem c64 lösbar ist muss es doch genau so mit dem Pluss/4 lösbar sein.Ich hoffe nun das mein Problem verstanden wird.
    Wo haben die Profiprogramierer des Pluss/4 die Matheroutinen her .


    Gruss frank




    Der Assembler ist gleich(c64/Pluss/4) aber bei den Matheroutinen gibt es Unterschiede.!!!!!!!!

  • Quote

    Wo haben die Profiprogramierer des Pluss/4 die Matheroutinen her .


    Der Assembler ist gleich(c64/Pluss/4) aber bei den Matheroutinen gibt es Unterschiede.!!!!!!!!


    die wenigsten werden diese routinen überhaupt benutzen, und selbst der grossteil der programme die tatsächlich fliesskommazahlen benutzen wird, wenn es nicht kompiliertes basic ist, ein anderes zahlenformat und eigene arithmetikroutinen nutzen.

  • Was Diddle sagt.


    Wenn man in der Umgebung von $A6B3 nachschaut, sieht man beide Äquivalente der C-64-Polynomroutinen Poly ($E059) und Poly2 ($E043): die genannte Routine bei $A6B3 ist dabei analog zu $E043 (Poly2) und $A6C9 analog zu $E059 im C-64.


    Siehe http://web.archive.org/web/200…rg/programming/kernal.txt bei LA6B3 und http://unusedino.de/ec64/technical/aay/c64/rome043.htm .


    Die Routine auf dem Plus/4 hat also die Poly2- statt der gewünschten Poly-Funktion aufgerufen.