Infos über mein DOS
Re: Infos über mein DOS
Damit endlich mal was voran geht und man nicht immer MS-DOS benötigt, um ein Programm für BDOS zu schreiben, habe ich ein neues Projekt begonnen: Einen Compiler, der direkt unter BDOS läuft.
Anforderungen: Er soll etwas BASIC-artiges verarbeiten, Er soll direkt Maschinencode erzeugen und er soll ziemlich alle Aspekte vom DOS nutzen (inkl. Maus-Support).
Geplant war eigentlich ein Compiler, der einen Quellcode in Pseudo-Codes übersetzt und dann einen Runtime-Interpreter dazu linkt. Aber wenn dann gleich richtig und Maschinencode erzeugen. Ich werde berichten.
Anforderungen: Er soll etwas BASIC-artiges verarbeiten, Er soll direkt Maschinencode erzeugen und er soll ziemlich alle Aspekte vom DOS nutzen (inkl. Maus-Support).
Geplant war eigentlich ein Compiler, der einen Quellcode in Pseudo-Codes übersetzt und dann einen Runtime-Interpreter dazu linkt. Aber wenn dann gleich richtig und Maschinencode erzeugen. Ich werde berichten.
Re: Infos über mein DOS
Der Compiler wurde nun umgebaut und eine Runtime-Library geschrieben. Der fertige Code ist dann also 100% Assembler in Form einer ausführbaren Datei.
Der Compiler kennt nun 5 Variablen, statt drei: Real, LongInt, Word, Byte und String. Außerdem kann der Code nun >64K werden. Für Variablen stehen max. 64K zur Verfügung, Arrays liegen dann später im freien Hauptspeicher - außerhalb dieser 64K. Das erste obligatorische Programm
PRINT "HALLO WELT"
ist erfolgreich compiliert worden.
Der Compiler kennt nun 5 Variablen, statt drei: Real, LongInt, Word, Byte und String. Außerdem kann der Code nun >64K werden. Für Variablen stehen max. 64K zur Verfügung, Arrays liegen dann später im freien Hauptspeicher - außerhalb dieser 64K. Das erste obligatorische Programm
PRINT "HALLO WELT"
ist erfolgreich compiliert worden.
Re: Infos über mein DOS
Hier einmal ein paar Screenshots.
Noch läuft der compiler und Linker unter MS-DOS. Wenn die beiden aber fertig sind, werden die File-I/O-Befehle durch die API-Calls von BonnyDOS ersetzt und schon rennen die Programme unter BDOS.
Fertige Kompilate sind nicht unter MS-DOS einsatzfähig und müssen daher jetzt schon unter BDOS ausgeführt werden.
Mit dem A86-Assembler, der jetzt ja schon unter BDOS läuft und auch bei liegt, lassen sich beliebige Programmteile assemblieren und später per INCLUDE in den BASIC-Quellcode einfügen - natürlich kann man diese dann auch starten. Neben Programme lassen sich so auch Grafiken, Sounds usw. in einen Quelltext integrieren und kompilieren.
Noch läuft der compiler und Linker unter MS-DOS. Wenn die beiden aber fertig sind, werden die File-I/O-Befehle durch die API-Calls von BonnyDOS ersetzt und schon rennen die Programme unter BDOS.
Fertige Kompilate sind nicht unter MS-DOS einsatzfähig und müssen daher jetzt schon unter BDOS ausgeführt werden.
Mit dem A86-Assembler, der jetzt ja schon unter BDOS läuft und auch bei liegt, lassen sich beliebige Programmteile assemblieren und später per INCLUDE in den BASIC-Quellcode einfügen - natürlich kann man diese dann auch starten. Neben Programme lassen sich so auch Grafiken, Sounds usw. in einen Quelltext integrieren und kompilieren.
- Dateianhänge
-
- ...und am Ende der Kette steht das ausführbare BDOS-Programm.
- fertig.jpg (52.31 KiB) 10180 mal betrachtet
-
- Der Linker fügt dann noch eine Runtime-Bibliothek ein, die in TP geschrieben ist.
- linker.jpg (83.7 KiB) 10180 mal betrachtet
-
- Der Compiler bearbeitet den Quelltext :-)
- compiler.jpg (94.11 KiB) 10180 mal betrachtet
-
- Der Quelltext (noch im DOS-Editor geschrieben, weil die Entwicklung eben noch unter DOS läuft)
- editor.jpg (69.76 KiB) 10180 mal betrachtet
Re: Infos über mein DOS
Und wieder einen Schritt weiter.
Bisher klappt:
LABEL marke
GOTO
GOSUB
RETURN
END
DECLARE var,var,var,...
PRINT
INPUT(var,var,var,...)
CLS
CURSOR.ON
CURSOR.OFF
REM
FREEMEM(var%)
Bisher klappt:
LABEL marke
GOTO
GOSUB
RETURN
END
DECLARE var,var,var,...
INPUT(var,var,var,...)
CLS
CURSOR.ON
CURSOR.OFF
REM
FREEMEM(var%)
Re: Infos über mein DOS
PEN
PAPER
LET für Strings. Beispiel: Let v$="hallo "+name$+" wie gehts?"
PAPER
LET für Strings. Beispiel: Let v$="hallo "+name$+" wie gehts?"
Re: Infos über mein DOS
LET für numerische Ausdrücke ist zu 50% fertig. Mit Real und Longint klappts, Byte und Word mag noch nicht so wie ich es will.
Re: Infos über mein DOS
Da es nun doch weiter geht, gibt es eine neue BDOS-Homepage: bdos286.bplaced.net
Zwar ist noch nicht alles verfügbar, aber das wird nach und nach geschehen.
Zwar ist noch nicht alles verfügbar, aber das wird nach und nach geschehen.
- SimpleMan
- Windows 3.11-Benutzer
- Beiträge: 3
- Registriert: Mi 22. Feb 2017, 15:13
- Wohnort: Australien
- Kontaktdaten:
Re: Infos über mein DOS
Hey Brueggi,
bin neu hier im Forum und finde dein Projekt echt klasse! Ich werde es zwar nie benutzen, beobachte aber dein Tun und lese gerne die Beiträge dazu (auch in anderen Foren).
Gut das es jetzt eine Website dazu gibt, das Verzeichnis mit den vielen Dateien war schon etwas unübersichtlich. Zu minimalistisch muss man es ja doch nicht machen.
Du wirst vermutlich immer weiter daran arbeiten oder glaubst du das Projekt ist irgendwann fertig? Bin mal gespannt wie weit du das Compiler Projekt treibst. Vielleicht kann man den Compiler später selbst im Bonny-Compiler schreiben?
Gruß ;)
bin neu hier im Forum und finde dein Projekt echt klasse! Ich werde es zwar nie benutzen, beobachte aber dein Tun und lese gerne die Beiträge dazu (auch in anderen Foren).
Gut das es jetzt eine Website dazu gibt, das Verzeichnis mit den vielen Dateien war schon etwas unübersichtlich. Zu minimalistisch muss man es ja doch nicht machen.
Du wirst vermutlich immer weiter daran arbeiten oder glaubst du das Projekt ist irgendwann fertig? Bin mal gespannt wie weit du das Compiler Projekt treibst. Vielleicht kann man den Compiler später selbst im Bonny-Compiler schreiben?
Gruß ;)
Re: Infos über mein DOS
Danke für das Feedback und für Dein Interesse. Das Du BDOS nicht benutzt, ist ok. Für mich spielen Benutzer eher eine untergeordnete Rolle. Das ganze ist eher ein "Gaudi-und-was-dabei-lernen-Projekt". Natürlich ist es cool, wenn der ein oder andere es auch benutzt. Aber das ist alles quasi optional
Ist das Projekt irgendwann fertig. Gute Frage. Sicher werden mir irgendwann die Ideen ausgehen, obwohl ich viel Ideen habe, was einem potentiellen Nachfolger (BDOS/386) betrifft. Aber noch ist die /286-Version das Maß der Dinge.
Theoretisch gibt es in KRNL286.SYS noch 1-2 Funktionen, die tatsächlich noch nicht implementiert sind, aber schon aufrufbar wären (auch wenn dann eben nichts passiert). Aber aktuell werden die nicht vermisst
Das Compiler-Projekt soll eigentlich soweit voran getrieben werden, bis man einigermaßen vernünftige Programme damit schreiben kann. Als Ziel setze ich mir ein Niveau ähnlich von Hanse auf dem CPC/C64. Wenn man soweit mit dem Compiler kommt, bin ich zufrieden (ob es damit aber getan ist...? Wer kann das schon sagen).
Viele Grüße,
Brueggi
P.S.: Ich hoffe ja, dass bald noch der Rest auf der Homepage zu finden ist. Eventuell - Hardware vorausgesetzt - lässt Du dich ja dann doch einmal dazu hinreißen, eine BootDisk mit BDOS zu starten bzw. die ein oder andere B-View-Disk zu laden.
Ist das Projekt irgendwann fertig. Gute Frage. Sicher werden mir irgendwann die Ideen ausgehen, obwohl ich viel Ideen habe, was einem potentiellen Nachfolger (BDOS/386) betrifft. Aber noch ist die /286-Version das Maß der Dinge.
Theoretisch gibt es in KRNL286.SYS noch 1-2 Funktionen, die tatsächlich noch nicht implementiert sind, aber schon aufrufbar wären (auch wenn dann eben nichts passiert). Aber aktuell werden die nicht vermisst
Das Compiler-Projekt soll eigentlich soweit voran getrieben werden, bis man einigermaßen vernünftige Programme damit schreiben kann. Als Ziel setze ich mir ein Niveau ähnlich von Hanse auf dem CPC/C64. Wenn man soweit mit dem Compiler kommt, bin ich zufrieden (ob es damit aber getan ist...? Wer kann das schon sagen).
Viele Grüße,
Brueggi
P.S.: Ich hoffe ja, dass bald noch der Rest auf der Homepage zu finden ist. Eventuell - Hardware vorausgesetzt - lässt Du dich ja dann doch einmal dazu hinreißen, eine BootDisk mit BDOS zu starten bzw. die ein oder andere B-View-Disk zu laden.
Re: Infos über mein DOS
Sooo.... Wieder etwas Neues.
LET für Numerische Vars klappt jetzt.
Daneben wurde der Compiler etwas verbessert und bei der Gelegenheit noch BYTE nn,nn,nn,nn,.... integriert (damit lassen sich beliebige Daten in den Quellcode einfügen).
Beispiel:
LABEL bild
BYTE ....hier liegen Grafikdaten....
Als aktuelle Baustelle sind noch
IF, LOCATE, INCLUDE - wenn die laufen gibt es eine erste Vorab-Version.
LET für Numerische Vars klappt jetzt.
Daneben wurde der Compiler etwas verbessert und bei der Gelegenheit noch BYTE nn,nn,nn,nn,.... integriert (damit lassen sich beliebige Daten in den Quellcode einfügen).
Beispiel:
LABEL bild
BYTE ....hier liegen Grafikdaten....
Als aktuelle Baustelle sind noch
IF, LOCATE, INCLUDE - wenn die laufen gibt es eine erste Vorab-Version.
Re: Infos über mein DOS
So, seit gestern Abend funktioniert die erste Version mit IF-Anweisung in der form von:
IF <Bedingung> THEN sprungmarke
Jetzt wird das noch ausgebaut, dass alles nach THEN (bis zum Zeilenende) ausgeführt wird.
Ich hoffe, bald gibt es die erste Version zum Download
Der Compiler hat gleich noch 1-2 Bugfixes erfahren (Thema Segment:Offset...*würg*). Man darf also gespannt sein.
IF <Bedingung> THEN sprungmarke
Jetzt wird das noch ausgebaut, dass alles nach THEN (bis zum Zeilenende) ausgeführt wird.
Ich hoffe, bald gibt es die erste Version zum Download
Der Compiler hat gleich noch 1-2 Bugfixes erfahren (Thema Segment:Offset...*würg*). Man darf also gespannt sein.
Re: Infos über mein DOS
Als kleine Spielerei - fürs Auge - gibt es noch
SYMBOL und INK (beides dem Locomotive-BASIC des CPC's entnommen):
INK stift, r, g, b
SYMBOL zeichen, d1,...,d16
Ersteres setzt die Farbe für den Stift 0-15 neu, zweites definiert ein Zeichen um. Lediglich das vom CPC bekannte SYMBOL AFTER braucht man nicht.
RESETCRT stelltFarben und Zeichensatz (aus BDOS) im Original-Zustand wieder her.
SYS label führt Maschinencode, der mit BYTE eingefügt worden ist aus (hier fehlen noch die PArameter-Möglichkeiten),
PNT( ) gibt einen Zeiger auf Var/Label zurück.
SYMBOL und INK (beides dem Locomotive-BASIC des CPC's entnommen):
INK stift, r, g, b
SYMBOL zeichen, d1,...,d16
Ersteres setzt die Farbe für den Stift 0-15 neu, zweites definiert ein Zeichen um. Lediglich das vom CPC bekannte SYMBOL AFTER braucht man nicht.
RESETCRT stelltFarben und Zeichensatz (aus BDOS) im Original-Zustand wieder her.
SYS label führt Maschinencode, der mit BYTE eingefügt worden ist aus (hier fehlen noch die PArameter-Möglichkeiten),
PNT( ) gibt einen Zeiger auf Var/Label zurück.
Re: Infos über mein DOS
Sehr schön - ich freue mich schon auf die ersten Tests mit BonnyBasic...
Re: Infos über mein DOS
Wobo, ich hoffe, es gibt in der kommenden Woche endlich mal etwas zum Testen.
Ich habe noch am SYS-Befehl gearbeitet, der nun auch Parameter (=Variablen) ans aufzurufende ASM-Programm übergibt. Getestet habe ich das so, indem ich BDOS-API-Calls assembliert habe und den Assembler-Code dann mit RAW "datei" in ein Demo-Listing eingefügt habe. Es hat geklappt Das gante wird dann etwa so aussehen, wenn man es denn nutzt:
Eine Art System-Include-File wird es wohl auch geben. Abgesehen davon läuft jetzt fehlerfrei die INCLUDE-Anweisung, welche einen anderen Source-Code einfügt.
Jetzt noch ein bis zwei kleine Schnitzer beseitigen und noch hier und da eine Anweisung hinzufügen und dann gibt es eine erste Vorab-Version (allerdings noch nicht optimiert).
Ich habe noch am SYS-Befehl gearbeitet, der nun auch Parameter (=Variablen) ans aufzurufende ASM-Programm übergibt. Getestet habe ich das so, indem ich BDOS-API-Calls assembliert habe und den Assembler-Code dann mit RAW "datei" in ein Demo-Listing eingefügt habe. Es hat geklappt Das gante wird dann etwa so aussehen, wenn man es denn nutzt:
Code: Alles auswählen
DECLARE zeiger%, name$
LET name$="MOUSE " : REM Aktuell noch manuell auf 9 Zeichen verlängern, mangels Befehle :-)
SYS detect,name$,zeiger%
IF zeiger% = -65536 then PRINT "KEINE MAUS.":END
.
.
.
END
LABEL detect
RAW "detect.bin" : REM das ist der assemblierte Part.
Jetzt noch ein bis zwei kleine Schnitzer beseitigen und noch hier und da eine Anweisung hinzufügen und dann gibt es eine erste Vorab-Version (allerdings noch nicht optimiert).
Re: Infos über mein DOS
Nach einer fetten Erkältung und der damit verbundenen Zwangspause gehts weiter.... Mein Schnitzer bei IF ist behoben und zusätzlich kann man jetzt ASCII-Zeichen direkt schreiben mit Unterstrich und der Ascii-Nummer:
LET c$ = _177+_178+_219*78
im letzten Fall wird CHR(219) 78 Mal wiederholt.
@Wobo: Du solltest bereits eine Vorab-Testversion haben.
@All: Ist hier jemand mit einem 286-16 oder 386-16, sowie VGA und einer 1.44 MB-Floppy? (RAM reicht theor. 640K, es sollte aber mehr vorhanden sein, um die RAM-Disk zu nutzen). Ich brauche einen Beta-Tester auf einem "langsamen" PC. Ich weiß zwar, dass noch viel optimiert werden muss, aber das wäre schön, ab und zu eine Info von jener Plattform zu bekommen.
LET c$ = _177+_178+_219*78
im letzten Fall wird CHR(219) 78 Mal wiederholt.
@Wobo: Du solltest bereits eine Vorab-Testversion haben.
@All: Ist hier jemand mit einem 286-16 oder 386-16, sowie VGA und einer 1.44 MB-Floppy? (RAM reicht theor. 640K, es sollte aber mehr vorhanden sein, um die RAM-Disk zu nutzen). Ich brauche einen Beta-Tester auf einem "langsamen" PC. Ich weiß zwar, dass noch viel optimiert werden muss, aber das wäre schön, ab und zu eine Info von jener Plattform zu bekommen.