Hallo zusammen,
nach langer Winterpause möchte ich mal wieder Fig-Forth vorholen und einen der größten Vorzüge dieser Programmiersprache für kleine Rechner besprechen - nämlich die Erzeugung von direkt ausführbaren Programmen. Das ist möglich, weil Forth ein Compiler ist. Das heißt, dass das Benutzerprogramm direkt beim Eingeben oder Einlesen in ein ausführbares Programm übersetzt (compiliert) wird. Dabei agiert das Forth-Basissystem als Kernel, der alle nötigen Routinen für das Programm bereitstellt und die Ausführung steuert. Fazinierend.
Als Forth-Kernel benötigt man nicht das komplette Forth, sondern nur ein solides Basissystem. In meinem Fall habe ich alle Routinen zum Ausdrucken von Programmen oder des Vokabulars aus dem Kern entfernt und ein rudimentäres DOS zugefügt, damit man ordentlich arbeiten kann und beim Entwickeln nicht ständig nachdenken muß, ob die Funktion, die man da aufruft, überhaupt da ist. Dazu kommt noch ein trickreicher Mechanismus der im Kernel ein vom Nutzer wählbares Wort beim Start direkt ausführt. Das ganze System ist nur 8 kB groß und da der FORTH-Code so herrlich kompakt ist, steht auch sehr großen Projekten genug Speicher zur Verfügung.
Wie geht man also vor?
1. Ein Forth-Programm ist zu entwickeln, das etwas tut, was man öfter mal braucht. Als heutiges Beispiel soll das Programm SYSINFO dienen, das wesentliche Parameter des laufenden CPM-65 ausgibt, etwa die Versionsnummern der Komponenten und die Kapazität und Organisation der Laufwerke. Diese Programm muß mit einem einzigen zentralen Forth-Wort aufrufbar sein. in unserem Beispiel ist das das Wort .SYS
SCR # 5
0 ( Sysinfo D. Lausberg 15.5.21 )
1
2
3
4
5
6 : .Sys cr cr .Header hex
7 ." BDOS V" bdosver .VER cr
8 ." BIOS V" biosver .VER CR
9 ." PROM V" .promver cr
10 .drives
11 cr 0 bdos ;
12
13 -->
14
15
Alles anzeigen
2. Wenn das Programm fertig ist, muss man unbedingt 3 Zeilen Code anfüge, die das Ende des Programms markieren, damit man hinterher auch das vollständige Programm speichert.
SCR # 6
0 ( Sysinfo D. Lausberg 15.5.21 )
1
2
3 decimal
4 latest 12 +origin !
5 here 30 +Origin !
6
7 ;S
Der so fertiggestellte und getestete Code wird nun mit SAVE SYSINFO.BKL abgespeichtert.
3. Man verlässt Forth mit BYE und stellt sicher, dass es kein Programm mit dem vorgesehenen Filenamen auf der Disk gibt, also ein SYSINFO.COM nicht vorhanden ist. Sonst kann SYSINFO.COM nämlich im nächsten Schritt nicht abgespeichert werden. Anschließemd wird das Programm FKERNEL.COM von der FORTH-Disk gestartet und man erhält eine Kernelmeldung und den üblichen FORTH-Prompt. Dann lädt man SYSINFO.BLK in den Pufferspeicher und kompiliert das Programm, wei gewohnt, mit 3 LOAD.
An dieser Stelle das Programm bitte nicht aufrufen, da es am Programmende ins CPM-65 zurückspringt und ihr die Übung unter Punkt 3 nochmal machen müsst.
4. Der Befehl AUTOEXEC .SYS SYSINFO.COM erzeugt nun das ausführbare Programm und speichert es ab - Fertig
bye
A>erase sysinfo.com
ERASE V1.5 (c) D.Lausberg
Insert disc to drive A:
and press any key
SYSINFO .COM ^C=abort (nothing deleted), E=Exit, Y/N y
ERASE finished
A>fkernel
fig-FORTH Kernel 1.0
open sysinfo.blk ok
3 load ok
autoexec .sys sysinfo.com ok
Junior Computer ][ System Status
BDOS V2.4
BIOS V1.3
PROM V1.1.4
Drive SPB SPBDIV BPD Cap kB Dir #
A: 8 3 508 1016 256
B: 8 3 508 1016 256
C: 8 3 508 1016 256
D: 8 3 508 1016 256
E: ------
F: ------
G: ------
H: ------
A>d sysinfo.*
D.COM V2.3 (c) D.Lausberg
Attr filename.ext rec kB Attr filename.ext rec kB
0000 SYSINFO .BLK 20 4 0000 SYSINFO .COM 3A 8
total diskspace used 12 kB
Directory finished
A>
Alles anzeigen
Viel Spass bei der Programmentwicklung in Forth
Dietrich