Dieser MC68000 Fortran77 Compiler akzepiert mandel.for, obwohl der eigentliche Code nicht ab Spalte 7 anfängt? GNU Fortran f77 macht das nicht ... mit F80.COM unter CP/M 2.2 gibt es trotz geänderter Formatierung noch Fehlermeldungen ...
RunCPM Speed-Vergleich auf verschiedenen Plattformen
-
-
Dieser MC68000 Fortran77 Compiler akzepiert mandel.for, obwohl der eigentliche Code nicht ab Spalte 7 anfängt? GNU Fortran f77 macht das nicht ... mit F80.COM unter CP/M 2.2 gibt es trotz geänderter Formatierung noch Fehlermeldungen ...
Da fehlen Blanks !
So funktioniert es mit SVS Fortran unter CP/M-68k:
Code
Alles anzeigenPROGRAM MANDEL REAL CA, CB, A, B, T INTEGER X, Y, I, K CHARACTER CH*1 CHARACTER*80 OUT DO 300, Y=-12,12 DO 200, X=-39,39 CA=X*0.0458 CB=Y*0.08333 A=CA B=CB K=99 DO 100, I=0,15 IF (K .NE. 99) GOTO 100 T=A*A-B*B+CA B=2.0*A*B+CB A=T IF ((A*A+B*B) .GT. 4.0) K=I 100 CONTINUE IF (K .GT. 9) K=K+7 IF (K .GT. 99) OUT(X+40:X+40)=' ' IF (K .LT. 99) OUT(X+40:X+40)=CHAR(48+K) 200 CONTINUE 9000 FORMAT(1X,79A) WRITE(*,9000) OUT 300 CONTINUE END
-
Da fehlen Blanks !
Die hatte ich auch eingefügt und GNU Fortran f77 compiliert ohne Fehlermeldungen und das Programm läuft unter Linux. Mit MicroSoft FORTRAN-80 V3.44 unter CP/M 2.2 funktioniert es jedoch nicht:
Code
Alles anzeigen?Line: 4 Statement Unrecognizable or Misspelled:CHAR ?Line: 5 Statement Unrecognizable or Misspelled:CHAR ?Line: 7 Statement Unrecognizable or Misspelled:DO30 ?Line: 8 Statement Unrecognizable or Misspelled:DO20 ?Line: 14 Statement Unrecognizable or Misspelled:DO10 ?Line: 22 Statement is out of Sequence:OUT( ?Line: 23 Illegal Statement Following Logical IF:IF(K.LT.99) %Line: 25 Zero Format Value:FORMAT(1X,79A) ?Line: 26 Missing Integer Quantity:WRITE(*, %1 Warning(s) Issued ?8 Fatal Error(s) Detected
-
Code
Alles anzeigenNEVADA FORTRAN 3.0 (MOD 0) Copyright (C) 1979, 1980, 1981, 1982, 1983 Ian Kettleborough ***** ROUTINE: MAIN ***** *** ERROR *** unidentifable statement *** ERROR *** unidentifable statement *** ERROR *** unidentifable statement *** ERROR *** unidentifable statement *** ERROR *** unidentifable statement *** ERROR *** unidentifable statement *** ERROR *** unexpected character in expression *** ERROR *** unexpected character in expression *** ERROR *** expected constant or variable not found *** WARNING *** unreferenced label 200 *** WARNING *** unreferenced label 9000 *** WARNING *** unreferenced label 300 0009 Compile errors
... ist die formatierte Quelldatei von ngc224 oben ... wird auch in VDE korrekt angezeigt ...
-
Mittlerweile ist auch mir klar geworden, daß die beiden obigen FORTRAN-Compiler unter CP/M-80 nur "FORTRAN 66" unterstützen und nicht "FORTRAN 77" ... Laut einem "Tweet" soll es das Programm auch als MANDLBRT.FOR für den F80 geben, habe es allerdings noch nicht gefunden ...
-
Beim alten MS FORTRAN:
Anstelle von CHARACTER kann man LOGICAL*1 nehmen und dann die Index-Bereiche (xxx:xxx) nach dem Doppelpunkt weglassen (xxx).
CHARACTER*80 OUT ==> LOGICAL*1 OUT(80)
-
CHARACTER*80 OUT ==> LOGICAL*1 OUT(80)
Danke! Der Start-Index bei FOR darf auch nicht negativ sein ... bei der Bildschirmausgabe "klemmt" es aber noch ...
-
... anstelle des Stern muss vermutlich eine "Unit Number" in der WRITE Anweisung angegeben werden.
Ich weiß jetzt nicht auswendig ob das bei MS-FORTRAN damals 1 oder 2 oder 3 für die Konsole war.
Ich meine, das steht im Manual (ich glaube, 1, 2, 3 waren beim CP/M MS-FORTRAN für CON, RDR, LST vorbelegt, ist jetzt aber schon wieder 2 Jahre her, dass ich damit was richtiges gemacht habe).
Also mal
WRITE(1,9000) OUT
probieren.
Und
%Line: 25 Zero Format Value:FORMAT(1X,79A)ist tatsächlich falsch - würde ich in (1X,79A1)
also 79 mal 1 Buchstabe oder in (1X,A79) also ein 79 Zeichen breites Feld
ändern.
-
So funktioniert es auch mit F80:
Code
Alles anzeigenPROGRAM FRAC66 REAL A, B, CA, CB, T INTEGER I, X, Y LOGICAL*1 CHR(16) LOGICAL*1 OUT(79) DIMENSION XLIN(79) DIMENSION YLIN(24) DO 10 X = 1, 39 XLIN(X) = -(40 - X) * 0.0458 10 CONTINUE DO 20 X = 40, 79 XLIN(X) = (X - 40) * 0.0458 20 CONTINUE DO 30 Y = 1, 12 YLIN(Y) = -(13 - Y) * 0.08333 30 CONTINUE DO 40 Y = 13, 24 YLIN(Y) = (Y - 13) * 0.08333 40 CONTINUE DO 50 I = 1, 10 CHR(I) = 47 + I 50 CONTINUE DO 60 I = 11, 16 CHR(I) = 54 + I 60 CONTINUE DO 300 Y = 1, 24 CB = YLIN(Y) DO 200 X = 1, 79 CA = XLIN(X) A = CA B = CB DO 100 I = 1, 16 T = A * A - B * B + CA B = 2.0 * A * B + CB A = T IF ((A * A + B * B) .GT. 4.0) GOTO 150 100 CONTINUE OUT(X) = ' ' GOTO 200 150 OUT(X) = CHR(I) 200 CONTINUE 9000 FORMAT (1X, 79A1) WRITE(1, 9000) OUT 300 CONTINUE END
... die Optimierung mit POWA und POWB verfälscht die originale Darstellung des ursprünglichen BASIC-Programms ...
-
In FRAC66 fehlte die letzte Ausgabezeile: es muß dort überall 25 stehen, nicht 24 ... im ZIP-Archiv sind die korrigierten Versionen für HI-TECH C, MS-FORTRAN, Turbo Modula-2 und Turbo Pascal mit Quellcode und "Binaries". Damit die Sache möglichst "fair" bleibt, ist der Aufbau der Programme ziemlich gleich: HI-TECH C und Turbo Modula-2 liegen hier mit 45 und 47 Sekunden vorne, gefolgt von MS-FORTRAN mit 59 Sekunden. Turbo Pascal (wegen 24 Bit REAL-Typ) braucht dafür 1:20 Minute ...
-
Quellcode und "Binaries".
Damit die Sache möglichst "fair" bleibt, ist der Aufbau der Programme ziemlich gleich
..aber Du scheinst die Zeichen erst am Ende der Zeile auszugeben?
Hat mich erst gewundert gegen die BAS/PAS-Version bei mir. -
..aber Du scheinst die Zeichen erst am Ende der Zeile auszugeben?
Die obige Version für SVS FORTRAN-77 macht das ja auch so ... Im ZIP-Archiv sind jetzt auch Versionen für NEVADA FORTRAN 3.0(FRUN FRACNEV braucht knapp 3 Minuten) und für Modula-2 System for Z80 CP/M von Peter Hochstrasser, welches ähnlich schnell wie HI-TECH C und Turbo Modula-2 ist ...
-
Fractal auf dem Pyboard v1.1 (STM32F405RGT6) mit uncompiliertem MBASIC ist fertig nach
52 Sekunden
Compiliertes MBASIC braucht
23 Sekunden -
Auf einem DELL FX160 (1.6GHz ATOM)
unter MS-DOS 6.22 mit NNANSI 5/93 und CWSDPMI als Extender
Zum Vergleich FRACTAL gegen sich selbst auf dem FX160 mit den verschiedenen Optimierungs-Optionen beim compilieren:
- Option -O0 (Minimierung der Compile-Zeit)
FRACTAL.BAS interpretiert 18 Sekunden
FRACTAL.BAS compiliert 12 Sekunden
- Option -Os (optimiert auf Binary Size - ist aber doch groesser als -O0)
FRACTAL.BAS interpretiert 6 Sekunden
FRACTAL.BAS compiliert 4 Sekunden
- Option -O3 (auf Speed optimiert)
FRACTAL.BAS interpretiert 4 Sekunden
FRACTAL.BAS compiliert 4 Sekunden
Spannend finde ich, dass bei -O3 sich die Zeitspanne zwischen interpretierter und
compilierter Version (handgemessen) nicht mehr unterscheidet
-
Hallo, ich kapere mal den Thread (weil kein CP/M)
auf einem Commodore CBM 8032 mit Basic 4.0 läuft das Programm mit leichter Anpassung (für den Zeichensatz):
Das Resultat passt gerade so auf den Bildschirm:
Die Zeit ist nicht berauschend:
500 s, naja, mehr gibt die alte Hardware nicht her, oder ?
Jetzt schalten wir den Turbo ein:
und das Resultat ist...
.. fast 100 mal schneller !! Und das ist kein Fehler am Timer, habe mit der Hand mit gestoppt, die Zeit ist echt !
Über die Ursache hatte ich schon mal berichtet: ein FPGA-Chip steckt im Steckplatz des 6502, mit der Kraft dieses Herzens schafft der CBM den Faktor 100
Roland
-
Und der Rest der Pereferie?
-
Und der Rest der Pereferie?
Der Chip schaltet bei zeitkritischen Zugriffen auf die Peripherie ( Bildschirmspeicher, Floppyzugriff etc) auf 1MHz zurück. In dem Mandel-Programm machen die 25•80 Zugriffe zu einem Byte auf den Bildschirmspeicher einen vernachlässigbaren Anteil an Rechenzeit im Vergleich zu den Rechnungen aus, deshalb kommt hier wirklich ein Faktor von fast 100 an Beschleunigung raus.
Bei einem LIST von einem grossen Programm ist der Geschwindigkeitsgewinn immer noch mehr als Faktor 10.
Roland
-
und jetzt nochmal ein richtiger Oldie: ein Heathkit H89, Markteinführung 1979, meiner ist von 1981. Z80 CPU 2 MHz
getestet mit HDOS 2.0 und MBasic Rev 4.82 für HDOS
Dauer; 11 min 4 sec
dann noch Benton Harbor Extended Basic #110.06.00 ausprobiert, ebenfalls auf HDOS 2.0
hier muss man 17 min 55 sec Geduld haben.
Ich habe auch ein CPM 2.2.0 für den H89, bekomme aber z. Zt das MBasic auf CP/M noch nicht zum Laufen
Gruß
Roland
-
Ein 900Mhz Celeron eeePC 701/4G scheint mit dem -O3 RunCPM fuer DOS fast genauso schnell wie der 1.6GHz Atom...
DOS wurde ueber eine SD Karte gebootet.
Die Karte habe ich mit dem DELL FX160 erstellt (Drive 2 in FDISK) aber die Boot-Partition konnte ich nur im Linux FDISK aktivieren, da DOS dies sonst nur auf Platte 1 macht...
-
Eine pdp11/40-Emulation auf einem RPi Pico braucht unter BASIC-11/RT-11 dafuer 1 Minute 54 Sekunden
Ich musste die Variablen CA und CB gegen C und D tauschen, da wohl keine Variablen mit 2 Buchstaben erkannt wurden.
Fuer die richtige Darstellung musste ich auch die Breite (X) verringern von 39 auf 35, da ansonsten die Zeile zu lang war.
-
Business-BASIC auf der pdp8 (simh) mag den Source nicht
-
... vielleicht GOTO zusammenschreiben, ohne Leerzeichen?
-
Business-BASIC auf der pdp8 (simh) mag den Source nicht
Das Basic ist etwas eingeschränkt. Hier steht unter "Description" warum's nicht läuft:
Entweder IF ... THEN zeilennummer oder IF ... GO TO zeilennummer.
Kommandos nach IF gehen gar nicht.
Das Leerzeichen im GO TO ist Pflicht.
-
Entweder IF ... THEN zeilennummer oder IF ... GO TO zeilennummer.
Kommandos nach IF gehen gar nicht.
Das Leerzeichen im GO TO ist Pflicht.
Danke fuer die Info!
So gehts dann:
Code
Alles anzeigenLIST FRACTA BA 6A 10 FOR Y=-12 TO 12 20 FOR X=-35 TO 35 30 C=X*0.0458 40 D= Y*0.08333 50 A=C 60 B=D 70 FOR I=0 TO 15 80 T=A*A-B*B+C 90 B=2*A*B+D 100 A=T 110 IF (A*A+B*B)>4 GO TO 200 120 NEXT I 130 PRINT " "; 140 GOTO 210 200 IF I>9 GO TO 300 205 PRINT CHR$(48+I); 210 NEXT X 220 PRINT 230 NEXT Y 240 GO TO 400 300 I=I+7 310 GOTO 205 400 PRINT 410 PRINT "END OF CODE"
-
Eine pdp11/40-Emulation auf einem RPi Pico braucht unter BASIC-11/RT-11 dafuer 1 Minute 54 Sekunden
Der original pdp11/40-E,ution-Source setzt den Pico auf 200Mhz,
aber man kann a "safe" auf 250Mhz "overclocken" (wie bei RunCPM)So braucht der Pico bei 250Mz nur noch 1 Minute 29 Sekunden, d.h. von 114 auf 89 Sekunden,
dass passt auch ca. zu dem 1/5 Anstieg an Mhz -
Kennt ihr eigentlich das hier? GW-Basic für Windows...
https://robhagemans.github.io/pcbasic/download.html
Gehört nicht gerade in die schnellste Liga, Win 11 mit Core i5 8265U CPU @ 1.60-1.80 GHz
-
Kennt ihr eigentlich das hier? GW-Basic für Windows...
https://robhagemans.github.io/pcbasic/download.html
Gehört nicht gerade in die schnellste Liga, Win 11 mit Core i5 8265U CPU @ 1.60-1.80 GHz
Wie schnell ist es wenn du es kompilierst ?
-
Kompiliert? Runtergeladen, installiert, und ausgeführt. Das ist ein GW-Basic-(kompatibler)-Interpreter.
-
Kompiliert? Runtergeladen, installiert, und ausgeführt. Das ist ein GW-Basic-(kompatibler)-Interpreter.
Ich weess. Kann man aber ja trotzdem kompilieren und dann mal laufen lassen. Der Unterschied waer schon mal ganz interessant. Compiler ? PDS 7.1 z. Bsp.
Aber mhhhh, ist ja Windows 11. Dann nimmste halt VB 6 und kompilierst den Code.
Weitgehend sollte der Code eigentlich funktionieren...... -
Das wäre ja witzlos...