Infos über mein DOS

Diskussion zum Thema Programmierung unter DOS (Intel x86)
Brueggi

Re: Infos über mein DOS

Beitrag von Brueggi »

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.
Brueggi

Re: Infos über mein DOS

Beitrag von Brueggi »

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.
Brueggi

Re: Infos über mein DOS

Beitrag von Brueggi »

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.
Dateianhänge
...und am Ende der Kette steht das ausführbare BDOS-Programm.
...und am Ende der Kette steht das ausführbare BDOS-Programm.
fertig.jpg (52.31 KiB) 9365 mal betrachtet
Der Linker fügt dann noch eine Runtime-Bibliothek ein, die in TP geschrieben ist.
Der Linker fügt dann noch eine Runtime-Bibliothek ein, die in TP geschrieben ist.
linker.jpg (83.7 KiB) 9365 mal betrachtet
Der Compiler bearbeitet den Quelltext :-)
Der Compiler bearbeitet den Quelltext :-)
compiler.jpg (94.11 KiB) 9365 mal betrachtet
Der Quelltext (noch im DOS-Editor geschrieben, weil die Entwicklung eben noch unter DOS läuft)
Der Quelltext (noch im DOS-Editor geschrieben, weil die Entwicklung eben noch unter DOS läuft)
editor.jpg (69.76 KiB) 9365 mal betrachtet
Brueggi

Re: Infos über mein DOS

Beitrag von Brueggi »

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%)
Brueggi

Re: Infos über mein DOS

Beitrag von Brueggi »

PEN
PAPER
LET für Strings. Beispiel: Let v$="hallo "+name$+" wie gehts?"
Brueggi

Re: Infos über mein DOS

Beitrag von Brueggi »

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.
Brueggi

Re: Infos über mein DOS

Beitrag von Brueggi »

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.
Benutzeravatar
SimpleMan
Windows 3.11-Benutzer
Beiträge: 4
Registriert: Mi 22. Feb 2017, 15:13
Wohnort: Australien
Kontaktdaten:

Re: Infos über mein DOS

Beitrag von SimpleMan »

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ß ;)
Brueggi

Re: Infos über mein DOS

Beitrag von Brueggi »

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.
Brueggi

Re: Infos über mein DOS

Beitrag von Brueggi »

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. :-)
Brueggi

Re: Infos über mein DOS

Beitrag von Brueggi »

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.
Brueggi

Re: Infos über mein DOS

Beitrag von Brueggi »

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.
wobo
DOS-Guru
Beiträge: 613
Registriert: So 17. Okt 2010, 14:40

Re: Infos über mein DOS

Beitrag von wobo »

Sehr schön - ich freue mich schon auf die ersten Tests mit BonnyBasic... :-)
Brueggi

Re: Infos über mein DOS

Beitrag von Brueggi »

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:

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.
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).
Brueggi

Re: Infos über mein DOS

Beitrag von Brueggi »

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.
Antworten