RunCPM Speed-Vergleich auf verschiedenen Plattformen

  • Mit dem TinyBASIC bzw. IOTBasic auf dem TTGO VGA32 laeuft das FRACTAL in
    weniger als 2 Sekunden :)


    Leider fehlt (siehe Zeile 205) dem BASIC das CHR$, so dass ich nur 2 verschiedene Zeichen fuer FRACTAL bekommen.


    Aber ich glaube nicht, dass dies die Rechengeschwindigkeit so beeintraechtigen wuerde, wenn er es anders anzeigen koennte ;)



  • Hi Guido,


    gut geloest.

    Wenn du den MID$ Befehl hast, mach doch eine Zeichenkette mit vielen versch. Zeichen

    und nimm dann aus der Zeichenkette ueber den MID$ Befehl die entsprechenden Zeichen.

    Damit hast du mehr Zeichen zur Auswahl und brauchst den/die CHR$ Befehl/Funktion nicht


    Du wirst dann bestimmt auch auf mehr als 2 Sekunden kommen.

    Bei unter 2 Sekunden bist du allerdings der Headbanger wenn das

    auch mit mehr versch. Zeichen geht.


    Beste Gruesse,


    Falco

    Alles geht - Nichts muß

  • MID$ kann er wohl auch nicht :( siehe Befehle , die es gibt


    Aber es sind keine 2 Sekunde - WOW!!


  • Dann waere das STRING ARRAY eine echte Alternative :)


    a$(0) = "A"

    a$(1) = "B"

    a$(2) = "C"

    a$(3) = "D"

    a$(4) = "E"

    a$(5) = "F"


    usw....




    Alles geht - Nichts muß

  • Dann waere das STRING ARRAY eine echte Alternative :)

    a$(0) = "A"

    Ein Stueck einfacher macht es uns dies BASIC schon ;)
    wenn man sich den Doku-Bereich "Strings" ansieht.

    Anstatt A$(4,1) fuer 4te Stelle ein Zeichen gibt es

    A$(4,4) dass heist von der 4ten Stelle bis zur 4ten Stelle.



  • Tolle Sache,

    dafuer gibt es allerdings nur einfach dimensionierte String-Arrays.


    Nachtrag : 1,22 Sek ist natuerlich auch Mega.

    Alles geht - Nichts muß

  • Damit man auch mal mit was anderes testen kann, und was weniger abhängig von der Bildschirmausgabe ist, hier mal das Berechnen von Pi auf bis zu 1000 Stellen.

    Peter z80.eu

    Hast Du das Programm geschrieben? (denke ja wegen Zeile 130) - weil das IoTBasic fuer das VGA32 hat kein RIGHT$ kann und keine Variable A(0) denn der Index startet leider bei A(1).


    Das mit dem RIGHT$ konnte ich anpassen im Source, aber das verschieben des Index-Start fuer A von (0) auf (1) habe ich nicht passend hinbekommen :(


    ich bekomme zwar jetzt eine Ausgabe, aber die ist total daneben, auch wenn 100 Stellen unter 3 Sekunden dauern (bis jetzt kannte ich nur das Picomite Basic in so schnell).



    Falls das Programm von Dir ist, evtl. kannst Du mal hier in den Source schauen, was ich da verbockt habe?

    Angepasst sind die Zeilen: 290, 350, 360, 370 und 390 um den A-Index zu verschieben inkl. der FOR-I Schleife von Zeile 340




  • guidol - das Original mit etwas weniger Zeilen findest Du >hier<. Da sind auch ein paar unterschiedliche BASIC-Dialekte zu finden, vielleicht passt da einer besser. Ich probiere aber auch mal, statt OPTION BASE 0 mal mit OPTION BASE 1 zu arbeiten - oder habe ich das Problem nicht verstanden?


    P.S.: Du wirst im Original sehen, dass da das DIM Statement nicht statisch sondern dynamisch verwendet wurde, also zur Laufzeit erst der Parameter vom DIM Statement gesetzt wird. Das geht bei diversen Compilern nicht, daher hatte ich einen festen Wert ermittelt, der 3350 bei 1000 Stellen beträgt.

    "The biggest communication problem is we do not listen to understand. We listen to reply." - Stephen Covey


    Webseite und Blog ist immer noch - seit fast 20 Jahren - online.

  • zwar nicht CP/M aber BASIC:


    auf dem Commodore 8032 dauert die pi-Berechnung für 10 Stellen 19,8 s, für 20 Stellen gönnt er sich bereits 64.8 s.


    Mit dem 65F02-Chip (100 MHz) statt der 6502 (1 MHz) braucht der CBM 8032 für 10 Stellen 0,183s, für 20 Stellen 0,633 s und für 100 Stellen nur 13,4 s !


    Gruß

    Roland

  • Der 6502 ist halt - bei gleicher Frequenz - dem Z80 überlegen bzw. effizienter in Sachen Op-Codes. Außerdem kommt es natürlich auch noch darauf an, in welcher Genauigkeit (bzw. Anzahl Nachkommastellen) Floating Point Zahlen berechnet werden, je kleiner die interne Genauigkeit, desto schneller.

    "The biggest communication problem is we do not listen to understand. We listen to reply." - Stephen Covey


    Webseite und Blog ist immer noch - seit fast 20 Jahren - online.

  • guidol ... funktioniert auch mit 1 (statt 0) startendem Array Index prima und ist sogar von der Quelle her etwas schlanker, siehe Anhang.

    Peter z80.eu OPTION BASE 1 kennt IoTBASIC (mal wieder) nicht - scheint aber auch nicht noetig zu sein.


    Schlanker habe ich jetzt bei der neuen Version nicht gesehen (im Compare-Vergleich).


    Allerdings habe ich beim Compare-Vergleich gesehen, dass ich vorher noch ein +1 in Zeile 200 hatte und das -1 in Zeile 370 fehlte.


    Nachdem ich beide Zeilen angepasst hatte, kommen nun auch in meinem angepassten Code die richtigen Zahlen :)



    BTW: Leider zerhaut IoTBASIC die REM-Zeilen beim einlesen (deshalb im Source wieder richtig gestellt).

    Werde wohl dem Autor in Muechen mal ein Issue auf Gthubaufmachen :)





  • PC-BASIC (GW-Basic kompatibel) unter Windows 11:

    IoT-BASIC v1.3 (nicht GW-Basic kompatbel) unter Windows 10:

    (bin mir noch nicht sicher, wie man die v1.4 auf Github mit MinGW compiliert)



    selbst echtes GW-BASIC unter vDOS mit Windows 10 ist viel schneller als das PC-Python-BASIC ;)

  • Ja das PC-Basic scheint die Geschwindigkeit von irgendeinem XT zu emulieren. Momentan rechnet es an 1000 Stellen, wobei ich das Gefühl habe, an dem Algorythmus stimmt was nicht, denn die ersten 100 Stellen dauern schon länger, als wie wenn ich nur 100 Stellen berechnen lassen wollte...

    1ST1

  • wobei ich das Gefühl habe, an dem Algorythmus stimmt was nicht, denn die ersten 100 Stellen dauern schon länger, als wie wenn ich nur 100 Stellen berechnen lassen wollte...

    Das habe ich auch schon gemerkt, je mehr Stellen man berechnen laesst umso laenger dauern auch die ersten (100) Stellen.


    Macht man z.B. nur 50 Stellen kommen die aber auch schneller, als die ersten 50 Stellen wenn man 100 Stellen berechnen laesst.

  • Ich habe nun doch mal versucht das IoTBASIC unter Windows zu compilieren.

    Vorgabe war eigentlich MinGW, aber wenn ich MinGW (GCC 12.2.0) nutze, bekomme ich beim compile ein paar Fehlermeldungen und kein .EXE
    Nehme ich allerdings einen TDM-GCC (GCC 10.3.0 - TDM-GCC ist auch ein MinGW32) bekomme ich auch ein paar Warnings aber dafuer auch ein .EXE

    Im Source habe ich fuer CLS das ASCII-Zeichen 12 (outch(12) - warum auch immer) gegen die ANSI CLS Sequence ausgetauscht:

    Code
    /* ANSI CLS ESC[2J */
                    outch(27);
                    outch(91);
                    outch(50);
                    outch(74);


    Die Berechnung der 1000 Stellen geht in ca. 10 Sekunden durch ;)
    (der TTGO VGA32 brauchte 281.68301 Sekunden fuer die 1000 Stellen)


  • BTW: Leider zerhaut IoTBASIC die REM-Zeilen beim einlesen (deshalb im Source wieder richtig gestellt).

    Werde wohl dem Autor in Muechen mal ein Issue auf Gthubaufmachen :)

    Hach :) RTFM!
    In diesem BASIC muss man einfach anstatt
    10 REM Dies ist ein Text

    dann
    10 REM "Dies ist ein Text"
    schreiben, dann wird es auch sauber geparst.

    Bis jetzt hatte ich noch kein BASIC, dass dies so wollte :)

  • Das mit den Anführungsstrichen, um hinter dem "REM" Befehl beliebige Zeichenketten platzieren zu können, ist in der Tat einmalig, noch nie so gesehen. Auf jeden Fall kein ANSI BASIC. Wobei sich die wenigsten BASIC Implementationen an alle ANSI-Vorgaben halten.

    Vielleicht kann man den Autor aus Kompatibilitätsgründen ja doch dazu bringen, dass er das noch ändert ;)

    "The biggest communication problem is we do not listen to understand. We listen to reply." - Stephen Covey


    Webseite und Blog ist immer noch - seit fast 20 Jahren - online.

  • Das mit den Anführungsstrichen, um hinter dem "REM" Befehl beliebige Zeichenketten platzieren zu können, ist in der Tat einmalig, noch nie so gesehen. Auf jeden Fall kein ANSI BASIC. Wobei sich die wenigsten BASIC Implementationen an alle ANSI-Vorgaben halten.

    Vielleicht kann man den Autor aus Kompatibilitätsgründen ja doch dazu bringen, dass er das noch ändert ;)

    Der Commodore CBM 8032 mit BASIC 4.0 benötigt bei REM in bestimmten Fällen, z.B. Groß- und Kleinschreibung, auch die Anführungszeichen ! Das hat mich beim Übertragen des pi-Programms sicher eine Stunde gekostet, bis ich das unübliche Verhalten rausfand. Das Problem ist, dass die Sonderzeichen, hier auch Kleinbuchstaben, als 1-Byte-Tokens für die BASIC-Befehle benutzt werden. Beim LISTen von Programmen stehen dann konfuse Befehle in der REM-Zeile, nur Strings (bel. Text zwischen "" ) werden hiervon ausgenommen



    Roland

  • Willkommen Stefan Lenz (ist der Autor vom IoTBasic) ;)
    Ich habe Deine Antwort nochmal in der Anzeige verschoben, da Du im Kommentfeld des vorherigen Users geantwortest hattest und es dann bei zu viel Laenge eingeklappt wird :)
    Wahrscheinlich wird dies aber auch eingeklappt :(


    Stefan Lenz schrieb :


  • guidol - das wäre auf jeden Fall was, wo Du noch mit dem ursprünglichen BASIC-Listing ausprobieren solltest:


    OPTION BASE geht so:

    SET 12, 0

    (SET setzt alle Interpreter Variablen, 12 ist die Variable die den Array Offset setzt)


    Danke an slenz für den Tipp!

    "The biggest communication problem is we do not listen to understand. We listen to reply." - Stephen Covey


    Webseite und Blog ist immer noch - seit fast 20 Jahren - online.