Seite 1 von 6

BASICODE in Java

Verfasst: 08.11.2023, 19:59
von haupz
Hallo miteinander,

ich glaube, ich höre besser mal auf, die Signal-Gruppe mit regelmäßigen BASICODE-Updates zu behelligen. Größere Neuigkeiten verbreite ich da weiterhin, aber einstweilen bringe ich die Sachen mal hier unter.

Für alle, die bei Signal nicht mitlesen: ich habe mir nach dem Vereinstreffen dieses Jahr vorgenommen, mal eine BASICODE-Umgebung von Grund auf zu bauen, und zwar in Java. Das trägt der Idee der Plattformunabhängigkeit gleich doppelt Rechnung. Den grundlegenden BASIC-Interpreter habe ich soweit in Form (ein einfacher AST-Interpreter mit JavaCC-Grammatik), nun geht es an das eigentliche BASICODE, also all die Subroutinen und Konventionen.

Ein bisschen was geht schon.
Bildschirmfoto 2023-11-08 um 19.49.22.png
(366.82 KiB) Noch nie heruntergeladen
Das Ganze wird unter der MIT-Lizenz freundlich frei gegeben, sobald ich mich traue. Wer einstweilen mal reinschauen mag, möge mir bitte sein GitHub-Handle zukommen lassen.

Bis später,

Michael

Re: BASICODE in Java

Verfasst: 26.11.2023, 15:25
von bbock
Wie ist denn der aktuelle Stand? Sind mittlerweile alle gültigen BASICODE-Befehle abgedeckt?

Natürlich erwarte ich nicht, dass schon alles fehlerfrei funktioniert. Ich habe die beiden simplen Testprogramme hello.bas und scroll.bas erfolgreich ausführen können. Dann habe ich mich an etwas Größeres gewagt, nämlich das Programm zur Darstellung von Peano-Kurven, das Thomas hier eingestellt hat. Es bricht mit folgendem Fehler ab:
Exception in thread "main" java.lang.IllegalStateException: line not found: 20
at de.haupz.basicode.ast.ProgramNode.resolveJump(ProgramNode.java:57)
at de.haupz.basicode.ast.ProgramNode.run(ProgramNode.java:37)
at de.haupz.basicode.Main.run(Main.java:33)
at de.haupz.basicode.Main.main(Main.java:49)

Re: BASICODE in Java

Verfasst: 26.11.2023, 21:06
von Paul
Hallo Michael, ich weiß ich bin unmöglich und es hat auch keinerlei Priorität.
Wäre es möglich die wichtigen Parameter wie Farben, Zeilenbreite, Zeilenanzahl, Font usw. wählbar zu machen?
Eventuell unter einem Namen speicherbar?
So könnte ich Spectrum Font und Farben wählen oder Atari ST, PCW oder was mir gerade gefällt.
Das muss ja nicht mitgeliefert werden sondern der User selber raus suchen oder vorgefertigte ini Dateien veröffentlichen.
Es geht dabei erstmal nur um das Look and feel, nicht um Syntax Erweiterungen.

Re: BASICODE in Java

Verfasst: 27.11.2023, 12:14
von ein Thüringer
Paul hat geschrieben: 26.11.2023, 21:06 (...)
Wäre es möglich die wichtigen Parameter wie Farben, Zeilenbreite, Zeilenanzahl, Font usw. wählbar zu machen?
(...)
So könnte ich Spectrum Font und Farben wählen oder Atari ST, PCW oder was mir gerade gefällt. (...)
Hallo Paul,

so etwas bietet doch schon Hagemans' Browser-Bascoder an, zumindest für ein paar Computer. Nur die Optik, keine Emulation.

Viele Grüße,

Thomas

Re: BASICODE in Java

Verfasst: 27.11.2023, 14:02
von Paul
ein Thüringer hat geschrieben: 27.11.2023, 12:14 Hallo Paul,

so etwas bietet doch schon Hagemans' Browser-Bascoder an, zumindest für ein paar Computer.
Funktioniert der auch offline, also wenn man die Webseite herunterlädt?

Re: BASICODE in Java

Verfasst: 27.11.2023, 15:12
von ein Thüringer
Ja, das tut er, ist höchstens etwas wählerisch mit den Browsern. Ich habe eine sehr frühe Version, die ich sehr gern verwende. Dort konnte man sein Wunschprogramm gleich mit der Maus in den Bildschirm ziehen. Es ist auch praktisch zum Debuggen, obwohl man Befehle wie LIST und EDIT nicht zur Verfügung hat, dafür ist es ordentlich schnell - und das Tempo geht noch höher einzustellen.

Re: BASICODE in Java

Verfasst: 28.11.2023, 21:35
von haupz
Hallo miteinander,

danke für eure Geduld - ich antworte gleich auf eure Fragen. Erstmal kann ich freudig verkünden, dass nun ein gewisses historisch bedeutsames BASICODE-Programm unverändert im Java-BASICODE läuft.

Et voilà.

(Ja, ich habe das ziemlich runterkomprimiert.)

Bis später,

Michael

Re: BASICODE in Java

Verfasst: 28.11.2023, 21:52
von haupz
bbock hat geschrieben: 26.11.2023, 15:25 Wie ist denn der aktuelle Stand? Sind mittlerweile alle gültigen BASICODE-Befehle abgedeckt?
Es funktioniert inzwischen so manches. Der Textmodus ist nahezu vollständig da; Tastatureingaben sind nur über GOSUB 210 unterstützt. GOSUB 220 ist noch nicht dabei. Der Grafikmodus ist unterstützt. Sound geht. Dateien und Drucken sind überhaupt nicht vorhanden. Von den "weiteren" Routinen sind 300 und 450 dabei.

Zusätzlich kann es sein, dass manche Sachen noch nicht wie erwartet funktionieren, z.B. bei den Farben. (Wobei ... eigentlich sollte das jetzt soweit sein.)

Dein Problem mit "line not found: 20" liegt vermutlich daran, dass du da eine Version verwendet hast, die noch keine BASICODE-Routinen unterstützt hat, einschließlich GOTO 20. Das sollte nun anders sein.

Das Peano-Programm scheitert im Moment daran, dass IF auch ein THEN verlangt. Statt dessen wird da IF <Bedingung> GOTO benutzt ... tz tz tz. Ich habe mal schnell die Grammatik eines Besseren belehrt, und nun malt es fleißig Kurven.

Re: BASICODE in Java

Verfasst: 28.11.2023, 21:55
von haupz
Paul hat geschrieben: 26.11.2023, 21:06 Hallo Michael, ich weiß ich bin unmöglich und es hat auch keinerlei Priorität.
Wäre es möglich die wichtigen Parameter wie Farben, Zeilenbreite, Zeilenanzahl, Font usw. wählbar zu machen?
Eventuell unter einem Namen speicherbar?
So könnte ich Spectrum Font und Farben wählen oder Atari ST, PCW oder was mir gerade gefällt.
Das muss ja nicht mitgeliefert werden sondern der User selber raus suchen oder vorgefertigte ini Dateien veröffentlichen.
Es geht dabei erstmal nur um das Look and feel, nicht um Syntax Erweiterungen.
Also für sowas habe ich viel Sympathie ... ich habe mir selbst schon gewünscht, eine Möglichkeit zu haben, das Abspielen von Tönen und das Warten (GOSUB 450) abzuschalten. Das ist beim Testen manchmal nett.

Ich merke mir das auf jeden Fall, und baue solche Sachen dann gern ein. (Oder du machst es selbst per Pull Request, sobald das Ganze offen ist. Jederzeit gern.)

Re: BASICODE in Java

Verfasst: 29.11.2023, 07:53
von ein Thüringer
haupz hat geschrieben: 28.11.2023, 21:52(...) Das Peano-Programm scheitert im Moment daran, dass IF auch ein THEN verlangt. Statt dessen wird da IF <Bedingung> GOTO benutzt ... tz tz tz. (...)
Das ist mir gar nicht aufgefallen und ich wusste auch nicht, dass das in Basic (also jetzt ohne BasiCode) funktioniert.

Schon in BasiCode-2
IF_THEN_2.jpg
IF_THEN_2.jpg (194.16 KiB) 3492 mal betrachtet
und auch im niederländischen BC3-Buch
IF_THEN_3.jpg
IF_THEN_3.jpg (111.63 KiB) 3492 mal betrachtet
ist es ausdrücklich ausgeschlossen.

In BasiCode wird es so gefordert:

IF bedingung THEN GOSUB zeilennummer

oder

IF bedingung THEN zeilennummer

(und in beiden Fällen keine Möglichkeit von ELSE) .

"bedingung" kann (der Vollständigkeit halber) auch eine logische Variable sein, deren Belegung vorher aus mehreren Vergleichsausdrücken erstellt wurde.

Aber

IF bedingung THEN GOTO zeilennummer

funktioniert auch, offenbar ist die Absicht das Sparen von Bytes.

Es gilt ja auch, dass eine Zeile einschließlich Zeilennummer und Leerzeichen die Länge von 60 Zeichen nicht überschreiten soll.

Im BasiCode-eigenen Aufzeichnungsformat wird der ASCII-Code zunächst gepuffert und dann in die internen Token übersetzt: man musste eine Puffergröße festlegen, die auch auf allen beteiligten Computern machbar ist.

Es waren Holgers (Robotrontechnik-Forum) erste Gehversuche in BasiCode, wir können es ihm sicher nachsehen. Im Thread "Grafik - Kurven" habe ich es korrigiert.