Primzahlenberechnung in BASIC (wie SM Baker on a Z8000 CoPro)

  • Der Stack bei Commodore ist sowieso was Komisches. Zu klein. Nicht verschiebbar. Nicht mehrere möglich. Die Sachen, die man darauf ablegen will kann man nicht direkt abspeichern (Fehlen von PHX, PHY, PLX, PLY). Und langsam.



    Warum hattest du einen Geschwindigkeitsvorteil erwartet? Alle Berechnungen werden bei POKE und PEEK doch nach wie vor als Fließkomma durchgeführt.

    Du hast sogar noch mehr Fließkomma/Integer-Umwandlungen, als wenn du alles in einem Fließkomma-Array speicherst. Ich hätte daher sogar erwartet, dass es langsamer wird.


    Irgendwie hatte ich wohl erwartet, daß man ja auch beim Schreiben/Lesen dann immer z.B. 5 Bytes (Fließkommazahl) vs. 1 Byte (INT) herumbewegen muß. Und da man das viel liest und schreibt (vom/ins RAM), wäre das evtl. spannend gewesen.




    Das einzige, was du sparst, ist Platz. Aber das könnte man genauso mit einem Integer-Array erreichen, also A%().


    A% gibts da nicht. Das hat vtml. noch nichtmal der 128er.

    Daher bleibt nur PEEK/POKE.


    Noch mehr Platz konnte man dann evtl. noch mit Bits sparen - was wieder Zeit kostet.




    Da bin ich ja froh, denn ohne ungestraftes GOTO wäre BASIC ja kein BASIC.


    :good:



    Ich fand ja gerade diesen echten Spaghetti Code da sehr nett. Zum Beispiel auch das Hochzählen beim Belegen der Multiples dann zur Abwechslung mal mit Counter ... echt klassisch.


    Das mit Stapelspeicher ist aber wirklich ein böser Fehler, wenn man das nicht kennt. Das bekommt man nicht raus, warum der dann bei der dritten (oder schon zweiten) Schachtelschleife seltsamste Fehler wirft.

    Muß man vermutlich vor jeweils für jedes Basic einzeln austesten, inwieweit das geht.



    Bin gestern auch wieder in so eine Falle getappt. Das Commodore BASIC kann lange Variablennamen - aber unterscheidet nur die beiden ersten Buchstaben/Chars. ZEIT1 und ZEIT2 sind also klar erkennbar unterschiedlich, aber eben letztlich doch exakt das Selbe.


    Man fragt sich ja, wer sich sowas ausdenkt. :)

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • Das einzige, was du sparst, ist Platz. Aber das könnte man genauso mit einem Integer-Array erreichen, also A%().

    A% gibts da nicht. Das hat vtml. noch nichtmal der 128er.

    Ich schreibe ja wenigstens immer dazu, wenn ich etwas behaupte, was ich noch nie ausprobiert habe. 8o


    Selbstverständlich hat das Basic 2 Integer-Variablen. Kannst du einfach nachprüfen in dem du ein größeres Integer-Array definierst, z.B. DIM A%(1000). Und dann mal nachschaust, wieviel Speicher das belegt. Bei den Einzelvariablen (z.B. A%) wird gemogelt. Die verhalten sich wie Integer-Variablen, werden aber als Fließkomma gespeichert. Zumindest brauchen sie genauso viel Speicher.


    Was dem Basic 2 fehlt, ist die Integer-Arthmetik. Alles wird immer vorher in Fließkommazahlen umgerechnet. Deswegen hat man keinen Geschwindigkeitsvorteil.

    • i-Telex 7822222 dege d

    • technikum29 in Kelkheim bei Frankfurt

    • Marburger Stammtisch

    Douglas Adams: "Everything, that is invented and exists at the time of your birth, is natural. Everything that is invented until you´re 35 is interesting, exciting and you can possibly make a career in it. Everything that is invented after you´re 35 is against the law of nature. Apply this list to movies, rock music, word processors and mobile phones to work out how old you are."

  • Der Stack bei Commodore ist sowieso was Komisches. Zu klein. Nicht verschiebbar. Nicht mehrere möglich. Die Sachen, die man darauf ablegen will kann man nicht direkt abspeichern (Fehlen von PHX, PHY, PLX, PLY). Und langsam.

    Dazu noch: Man muss immer im Hinterkopf behalten, dass das Basic für den 8K PET entwickelt und bis zum C64 nicht wesentlich verändert wurde.

    Alles was man damals zusätzlich gemacht hätte, hätte mehr ROM und mehr RAM erfordert (bzw. den frei zur Verfügung stehenden Speicher verkleinert).

    Nur so konnte der damalige Kampfpreis des PET erreicht werden.


    Das gleiche gilt für den 6502. Die von dir aufgeführten Befehle wurden absichtlich weggelassen, damit das Ding möglichst günstig wird.

    Und langam ist der Hardware-Stack des 6502 überhaupt nicht. Weil es eben ein Hardware-Stack ist mit einem 8-Bit Stack-Pointer.

    • i-Telex 7822222 dege d

    • technikum29 in Kelkheim bei Frankfurt

    • Marburger Stammtisch

    Douglas Adams: "Everything, that is invented and exists at the time of your birth, is natural. Everything that is invented until you´re 35 is interesting, exciting and you can possibly make a career in it. Everything that is invented after you´re 35 is against the law of nature. Apply this list to movies, rock music, word processors and mobile phones to work out how old you are."

  • Selbstverständlich hat das Basic 2 Integer-Variablen. Kannst du einfach nachprüfen in dem du ein größeres Integer-Array definierst, z.B. DIM A%(1000). Und dann mal nachschaust, wieviel Speicher das belegt. Bei den Einzelvariablen (z.B. A%) wird gemogelt. Die verhalten sich wie Integer-Variablen, werden aber als Fließkomma gespeichert.


    Also das ist ja mal wirklich was Neues. Kannte ich wirklich noch nicht.

    Vor allem weiß ich das aus deshalb, weil ich u.a. das als einen wirklich großen Vorteil bei den Sachen wie QuickBasic, TP und v.a. BBC Basic erlebt habe. Ich glaube auch wirklich, daß sowas wie A%() auch in Heftlistings dann wohl zumindest eher selten gewesen sein muß. Werde mal den großen Muus/Besenthal daraufhin ansehen ... da hätten sie ja was verschwiegen.


    Wenns dann keine Geschwindigkeitsvorteile hat, ist natürlich auch ein wenig seltsam; aber den niedrigeren Platzbedarf darf man ja auch nicht unterschätzen. Scheint (nur) 2 Byte vs. 5 Byte zu sein.


    int Array
    float Array




    Das gleiche gilt für den 6502. Die von dir aufgeführten Befehle wurden absichtlich weggelassen, damit das Ding möglichst günstig wird.


    Hat ja auch bestens funktioniert. Ohne hätte es das "Annus mirabilis" (1977) so nicht gegeben. (OK, ein Z80 ist da auch dabei)



    Und langam ist der Hardware-Stack des 6502 überhaupt nicht. Weil es eben ein Hardware-Stack ist mit einem 8-Bit Stack-Pointer.


    Na, da man ständig die Register durchtauschen muß (TXA, TYA und andersrum), wird es das aber; zumindest mehr als nötig wäre.

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • Na, da man ständig die Register durchtauschen muß (TXA, TYA und andersrum), wird es das aber; zumindest mehr als nötig wäre.

    Jeder RISC-Prozessor arbeitet nach diesem Prinzip. Reduzierter Befehlsssatz, dafür aber schnell. Womit ich nicht sagen will, dass der 6502 ein RISC-Prozessor ist. Die Motivation beim 6502 war ja vor allem der Preis. Schnell ist er aber trotzdem.

    • i-Telex 7822222 dege d

    • technikum29 in Kelkheim bei Frankfurt

    • Marburger Stammtisch

    Douglas Adams: "Everything, that is invented and exists at the time of your birth, is natural. Everything that is invented until you´re 35 is interesting, exciting and you can possibly make a career in it. Everything that is invented after you´re 35 is against the law of nature. Apply this list to movies, rock music, word processors and mobile phones to work out how old you are."