BASICODE in Java

Software-Entwicklung, Compiler, Interpreter, ...
Paul
Beiträge: 137
Registriert: 17.09.2017, 22:27
Wohnort: Germanys west end

Re: BASICODE in Java

Beitrag von Paul »

Screenshot_20231225-195450~2.png
(81.56 KiB) Noch nie heruntergeladen
Danke für die Blumen. Das Original stammt vom ZX81
Benutzeravatar
ein Thüringer
Beiträge: 35
Registriert: 29.08.2021, 11:04

Re: BASICODE in Java

Beitrag von ein Thüringer »

Hat es auch schon jemand anders auf der Joyce ausprobiert? Bei Werner erschienen die Kugeln immer an den selben Stellen. Bei mir auch, wie ich feststellen musste.

Abhilfe schuf diese kleine Änderung:

Code: Alles auswählen

 (...)
1090 GOSUB 210:IF IN<>69 THEN GOSUB 600:GOTO 1015
1999 GOSUB 100:GOTO 950
Hier wird auf Tastendruck der Bildschirm gelöscht und der Baum wird neu gezeichnet, sofern nicht "e" oder "E" gedrückt wurde.

Als saubere Lösung müsste aber eine Änderung nicht im Programm, sondern im Bascoder erfolgen.

Hier

Code: Alles auswählen

 1 RANDOMIZE (60*PEEK(64503!)+PEEK(64504!)) (...) 
werden die Speicherzellen der Systemuhr ausgelesen, um als Grundlage für die Zufallszahlenerzeugung verwendet zu werden. Diese Speicheradressen stimmen offenbar nicht.

EDIT: Die vorher genannten Adressen sind offenbar falsch. Unter Basic sind die Stunden, Minuten und Sekunden auf &HFBF6, &HFBF7 und &HFBF8 gespeichert. Sie werden allerdings nicht durch RUN zurückgesetzt, sondern durch GOTO 20 – dort ist ein CLEAR dabei.

Hat jemand eine Idee?
Zuletzt geändert von ein Thüringer am 26.12.2023, 20:00, insgesamt 2-mal geändert.
Paul
Beiträge: 137
Registriert: 17.09.2017, 22:27
Wohnort: Germanys west end

Re: BASICODE in Java

Beitrag von Paul »

Ich habe da keine Ahnung, aber es wird von der CP/M Version abhängen die du bootest.
Man müsste wohl eine BDOS Funktion zur Ermittlung der Uhrzeit verwenden statt eines einfachen Peek
haupz
Beiträge: 22
Registriert: 13.02.2015, 16:05

Re: BASICODE in Java

Beitrag von haupz »

... dankeschön!

Gruß vom Mac:
BASICODE-Weihnachtsbaum-Mac.png
(417.75 KiB) Noch nie heruntergeladen
kurt
Beiträge: 163
Registriert: 26.10.2019, 20:11

Re: BASICODE in Java

Beitrag von kurt »

Man müsste wohl eine BDOS Funktion zur Ermittlung der Uhrzeit verwenden statt eines einfachen Peek
Ich denke, Paul liegt da ganz richtig. Der Aufwand ist nicht einmal hoch. Die Zeit und Datumsangaben lasen sich ohne konvertierung einfach so wie sie zurückgeliefert werden als 32-bit Zufallszahl verwenden. der BDOS-Aufruf ist simpel:

Code: Alles auswählen

/**                                                                           <
 * @fn     unsigned char *getclock(unsigned char *clk)                        <
 * @brief  Get CP/M clock.                                                    <
 *                                                                            <
 * This function fills the clk array with the current CP/M clock values.      <
 *                                                                            <
 * @param  clk - pointer to clock array                                       <
 * @return pointer to clk                                                     <
 */                                                                           <
getclock(clk)                                                                 <
unsigned char *clk;                                                           <
{                                                                             <
        // CP/M fills day, hour & minute; the A register holds the second.    <
                                                                              <
        clk[4] = bdos_a(105, clk);                                            <
                                                                              <
        return clk;                                                           <
}                                                                             <
 
Ich habe nur diese kurze C-Funktion zur Hand, aber den Einzeiler sollte man leicht konvertieren können.
Paul
Beiträge: 137
Registriert: 17.09.2017, 22:27
Wohnort: Germanys west end

Re: BASICODE in Java

Beitrag von Paul »

Das CLEAR hat Einfluss auf das RND, dann füge doch das RANDOMIZE aus Zeile 1 nochmal hinter dem CLEAR in Zeile 20 ein.
Hier sind Zeilen 1 und korrigiert:

Code: Alles auswählen

1 RANDOMIZE (PEEK(&HFBF6)+PEEK(&HFBF7)+PEEK(&HFBF8)):IF PEEK(&HF000)=&H7E THEN 10
20 GOSUB 100:CLEAR:RANDOMIZE (PEEK(&HFBF6)+PEEK(&HFBF7)+PEEK(&HFBF8)):SV=7:OSETCHAR=&HF000:OSETPOINT=&HF0BA:OPOINT2=&HF256:ODRAW=&HF162:OGETCUR=&HF263:OREADCHAR=&HF277:OFINDCHAR=&HF287

Das habe ich im CP/M BOX Emulator getestet und es funktioniert.
Das 60* bei der Stunde kann entfallen. Wir wollen ja keine Uhrzeit sondern eine Zufallszahl.
Bascoder.joy.txt
(9.22 KiB) 160-mal heruntergeladen
ein Thüringer hat geschrieben: 26.12.2023, 10:54 Hat jemand eine Idee?
tree1.jpg
tree1.jpg (48.68 KiB) 2119 mal betrachtet
tree2.jpg
tree2.jpg (48.27 KiB) 2119 mal betrachtet
Zweimal mit RUN
Benutzeravatar
ein Thüringer
Beiträge: 35
Registriert: 29.08.2021, 11:04

Re: BASICODE in Java

Beitrag von ein Thüringer »

Sehr gut, Paul!

Aber in 1 kann ja das RANDOMIZE dann entfallen, das GOTO 20 ist ja Pflicht in jedem Programm und einmal reicht. Ich überschlafe es, teste es morgen auch und erstelle den (bzw. übernehme Deinen) abgeänderten Bascoder.

Ein kleiner Änderungswunsch für Dein Programm: es läuft ungebremst in das GOTO 950 hinein. Laut Vereinbarungen
IMG_20231226_220355_edit_2224672023946465.jpg
aus dem niederländischen BC3-Buch
(764.07 KiB) Noch nie heruntergeladen
wird mit dem Rückführen in den computereigenen Basic-Betrieb aber auch der Bildschirm gelöscht (das wird Michael bestimmt noch hineinarbeiten), der Baum ist also eigentlich augenblicklich wieder fort. Wenn Du vor das GOTO 950 noch ein GOSUB 210 setzt, passiert das erst nach beliebigem Tastendruck.
haupz
Beiträge: 22
Registriert: 13.02.2015, 16:05

Re: BASICODE in Java

Beitrag von haupz »

ein Thüringer hat geschrieben: 26.12.2023, 21:44 Ein kleiner Änderungswunsch für Dein Programm: es läuft ungebremst in das GOTO 950 hinein. Laut Vereinbarungen ... wird mit dem Rückführen in den computereigenen Basic-Betrieb aber auch der Bildschirm gelöscht (das wird Michael bestimmt noch hineinarbeiten), der Baum ist also eigentlich augenblicklich wieder fort. Wenn Du vor das GOTO 950 noch ein GOSUB 210 setzt, passiert das erst nach beliebigem Tastendruck.
Einen computereigenen BASIC-Betrieb gibt es in der Java-Implementierung (derzeit) nicht; die ist als reine Ausführumgebung von BASIC- bzw. BASICODE-Programmen gedacht. Eine komplette BASIC-Umgebung mit Eingabeaufforderung etc. zu bauen, war nie meine Absicht.

Startet man basicode.jar mit dem Parameter -hold, wartet es nach dem GOTO 950 auf einen Tastendruck, auch wenn im Programm kein GOSUB 210 auftaucht.
Benutzeravatar
ein Thüringer
Beiträge: 35
Registriert: 29.08.2021, 11:04

Re: BASICODE in Java

Beitrag von ein Thüringer »

Danke, Michael, Kurt und Paul! Der korrigierte Bascoder wurde schon von Werner in die Homepage eingepflegt.
Bascoder.jpg
Bascoder.jpg (61.93 KiB) 2085 mal betrachtet
Er überraschte mich auch mit dieser kleinen Animation:
XMAS2021.mp4.zip
".zip" entfernen
(245.79 KiB) 172-mal heruntergeladen
Danke auch an ihn!
Benutzeravatar
ein Thüringer
Beiträge: 35
Registriert: 29.08.2021, 11:04

Re: BASICODE in Java

Beitrag von ein Thüringer »

So, nun habe ich mich auch an diese Java-Sache gewagt. Es gab drei Hürden, bis es klappte, weil es anderen vielleicht ähnlich geht, will ich die mal hier schildern.

Um mir das Starten zu vereinfachen, habe ich eine .BAT-Datei geschrieben, die in dem Verzeichnis steht, das auch die basicode.jar und die BasiCode-Programme enthält. In dieser Batch-Datei ändere ich jeweils den Namen des gewünschten Programms und speichere sie ab. Dieses Verfahren erspart mir die Eingabe des langen Buchstabensalats im CMD-Fenster. In der Datei steht:

C:"\Program files\Java\jdk-21\bin\java" -jar D:\Thomas\Emulatio.nen\BC3CJAVA\basicode.jar -hold D:\Thomas\Emulatio.nen\BC3CJAVA\UNMOEGLI.BAS

Der blaue Text verweist auf das Verzeichnis, in dem das Java Development Kit steht, der magentafarbene auf die fertig kompilierte .JAR-Datei einschließlich ihres Pfads und der grüne Text auf Pfad und Name des gewünschten Programms. Die Bedeutung von -hold hat Michael erklärt: nach Programmende verschwindet das Fenster erst nach einem weiteren Tastendruck.

Wenn die Batch-Datei, die basicode.jar und die Programme im selben Verzeichnis stehen. sollte auch diese Form reichen:

C:"\Program files\Java\jdk-21\bin\java" -jar basicode.jar -hold UNMOEGLI.BAS

Wenn das klappt, kann man ja auch einen Link auf dem Desktop anlegen (der diese Batch-Datei aufruft) – um das ständige Editieren kommt man aber nicht herum. Doch zum Glück ist es nur eine Übergangslösung, bis Michael die Dateiauswahl in sein Projekt integriert hat.

Was waren nun die Hürden?

I) Im Explorer wird C:\Programme... angezeigt. Tatsächlich brauche ich aber den englischen Namen C:\Program files... Sch... Windows

II) Weil im Namen des ersten Ordners ein Leerzeichen enthalten ist, muss der Pfad in Anführungszeichen gesetzt werden.

III) Diese Anführungszeichen dürfen aber nicht den Laufwerksbuchstaben einschließen (also nicht "C:\Program files..."), das war mir fälschlich so gesagt worden.

Nun lief es endlich und gleich das erste Programm klappte auch:
OTHELLOC.png
OTHELLOC.png (16.81 KiB) 2067 mal betrachtet
Schon hier zeigt sich, dass das Zeichnen rasend schnell erfolgt. Wenn der Auswahl-Punkt über die möglichen Felder geführt wird, ertönt jeweils ein kurzer Ton - und nur das Abspielen dieses Tons verzögert den Programmablauf. Als ich "STEINE.BAS" (ein Tetris im Text-Modus) aufrief, war Spielen absolut nicht möglich. Deswegen arbeitet Michael an einer optionalen Verzögerungsmöglichkeit.

Nicht alle Programme liefen, hier werden wir Stück für Stück die Ursachen ergründen.
TESTBILD.png
TESTBILD.png (33.95 KiB) 2067 mal betrachtet
Ein weiteres Programm, das gleich lief:
UNMOEGLI.png
UNMOEGLI.png (18.37 KiB) 2067 mal betrachtet
Mein nächster Wunsch an Michael wäre die Möglichkeit, die Buchstabenfarbe beim Ausführen von GOSUB 110 (der Positionierung des Textcursors) zu wechseln, dann könnte das Zauberwürfelprogramm angenehmer als mit Buchstaben gespielt werden.
KUBUSCOL.png
KUBUSCOL.png (31.18 KiB) 2067 mal betrachtet
Das geht zwar über die Forderungen von BasiCode hinaus - aber es ist praktisch und viele Bascoder können es, obwohl es nicht gefordert ist.
Zuletzt geändert von ein Thüringer am 29.12.2023, 07:09, insgesamt 1-mal geändert.
Antworten