- Screenshot_20231225-195450~2.png
- (81.56 KiB) Noch nie heruntergeladen
BASICODE in Java
Re: BASICODE in Java
Danke für die Blumen. Das Original stammt vom ZX81
- ein Thüringer
- Beiträge: 44
- Registriert: 29.08.2021, 11:04
Re: BASICODE in Java
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:
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
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?
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
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!)) (...)
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.
Re: BASICODE in Java
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
Man müsste wohl eine BDOS Funktion zur Ermittlung der Uhrzeit verwenden statt eines einfachen Peek
Re: BASICODE in Java
... dankeschön!
Gruß vom Mac:
Gruß vom Mac:
Re: BASICODE in Java
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:Man müsste wohl eine BDOS Funktion zur Ermittlung der Uhrzeit verwenden statt eines einfachen Peek
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; <
} <
Re: BASICODE in Java
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:
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.
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.
Zweimal mit RUN
- ein Thüringer
- Beiträge: 44
- Registriert: 29.08.2021, 11:04
Re: BASICODE in Java
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
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.
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
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.
Re: BASICODE in Java
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.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.
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.
- ein Thüringer
- Beiträge: 44
- Registriert: 29.08.2021, 11:04
Re: BASICODE in Java
Danke, Michael, Kurt und Paul! Der korrigierte Bascoder wurde schon von Werner in die Homepage eingepflegt.
Er überraschte mich auch mit dieser kleinen Animation: Danke auch an ihn!- ein Thüringer
- Beiträge: 44
- Registriert: 29.08.2021, 11:04
Re: BASICODE in Java
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: 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. Ein weiteres Programm, das gleich lief: 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. Das geht zwar über die Forderungen von BasiCode hinaus - aber es ist praktisch und viele Bascoder können es, obwohl es nicht gefordert ist.
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: 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. Ein weiteres Programm, das gleich lief: 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. 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.