Forth

Aus C64-Wiki
Zur Navigation springenZur Suche springen

Dieser Artikel behandelt die Programmiersprache Forth in Sicht der Commodore Computersysteme.

Forth wurde 1969 von Charles H. Moore entwickelt, wobei in weiterer Folge auch Elizabeth Rather bedeutenden Einfluss hatte.[1] Forth ist zugleich Programmiersprache und Entwicklungsumgebung, wobei es unabhängig von einem Betriebssystem ist und die notwendigen Funktionen selbst zur Verfügung stellt. Dies war gewissermaßen eine Notwendigkeit, nachdem die ersten Einsatzgebiete eher den Charakter eines Embedded-Systems hatten bzw. über gar kein Betriebssystem verfügten. Auch Multitasking war in etlichen Implementierungen vorhanden, weil damalige Betriebssysteme (sofern vorhanden) oft ein solches Konzept nicht kannten. Spätere Forth-Umgebungen waren dann sehr wohl in die jeweilige Betriebssystemumgebung eingebettet, wo auch Floatingpoint, Grafik- und GUI-Bibliotheken und die vorliegende Massenspeicherverwaltung Verwendung fanden.
Es ist für viele unterschiedliche Minicomputer, Embedded-System-Boards und Mikrocomputer, unter anderem auch für den C64, erhältlich. Ein tatsächlich implementiertes Forth nennt man Forth-System.

Entstehungsgeschichte[Bearbeiten | Quelltext bearbeiten]

Forth wurde auf einem IBM-1130 Minicomputer (mit IBM-2250 Display/Terminal) entwickelt auf der Basis eines in Algol programmierten Schachspiels entwickelt. Ursprünglich sollte die Sprache Fourth heißen, womit Moore auf den zukünftigen Einsatz in vielen dezentralen kleinen Mikrocomputern hinweisen wollte und dies als nächsten Schritt nach der so genannten "dritte Generation" der damaligen Programmiersprachen auf zentralen Systemen sah. Zu dieser Zeit ließ die Programmierumgebungen jedoch nur Dateinamen mit maximal fünf Buchstaben zu, weswegen Moore sich für das Homophon Forth als Name entschied. Die Großschreibung des Namens in den Anfangsjahren leitete sich aus dem Zwang ab, dass die IBM-2250 nur Großbuchstaben zuließ. Nachdem etliche Minicomputer bereits das Ziel einer Forth-Umsetzung waren, wurde ab Mitte der 1970er Forth auf zahlreiche Heim- und Personalcomputer portiert. Mit FORTH-77 manifestierte sich 1977 der erste vorläufige Forth-Standard, der 1979 in den ersten offiziellen FORTH-79-Standard mündete.

Die Vorgehensweise einer All-in-One-Lösung ist ein Sonderweg von Forth geblieben; selbst Programmiersprachen wie Smalltalk oder Self gehen in der Regel nicht soweit, auf ein Betriebssystem verzichten zu können. Das ist als entscheidender Vorteil zu sehen, Forth rasch auf eine beliebige Hardware portieren zu können. Auch Oberon, das im Rahmen des Ceres-Systems entwickelt wurde, ist unabhängig von einem Betriebssystem erhältlich. Normalerweise werden die oben genannten Komponenten getrennt voneinander konzipiert und entwickelt.

Eine umfangreichere Abhandlung der Geschichte von Forth findet sich in der Publikation ACM SIGPLAN Notices, March 1993.[2]

Standardisierungen

(in der Reihenfolge des Erscheinens)

  1. FIG Forth model (ein weit verbreitetes Portierungsmodell der Forth Interest Group, 1978)
  2. FORTH-79 standard (1979)
  3. FORTH-83 standard (1983)
  4. ANS Forth standard (ANSI technical committee X3J14 24. März 1994)
  5. Forth 2012 Standard [3] (2014)

Verwendung[Bearbeiten | Quelltext bearbeiten]

Audiogenic Forth64 (1982).
HES 64Forth (1983).
C64-Forth von Datatronic AB (1983).
White Lightning 1.0 Oasis Software (1984).
Data Becker FORTH (1985).
volksFORTH bzw. ehemals ultraFORTH (2006).
DurexForth (2009).

Wegen der kompakten internen Darstellung der Forth-Programme im Speicher und die gegenüber reinem Maschinencode "nur" um den Faktor 10 schlechteren Ausführungszeiten (zum Vergleich: noch immer eine Größenordnung schneller als etwa vergleichbare BASIC-Programme) bietet sich an, aufwendige Applikationen in einer für die Entwicklung komfortablen Forth-Umgebung zu erstellen. Ein populäres Beispiel dafür ist etwa die Tabellenkalkulation Calc Result, die als Steckmodul für den C64 angeboten wurde und damit auch die Umsetzung von komplexen Anwendung auf 8-Bit-Plattformen bewies.
Auch für die Spieleentwicklung eignet sich Forth aus oben genannten Gründen und wurde beispielsweise bei der Entwicklung des Spiels Starflight[4] und des Electronic Arts Simulation-Spiels Worms[5][6] eingesetzt.

Von Forth beeinflusst ist die Programmiersprache Factor[7] und vereint auch Elemente aus Lisp und Smalltalk. Sie orientiert sich jedoch stärker an die Anwendungsentwicklung und weniger an der Low-Level-Funktionalität üblicher Forth-Systeme.

Im Homecomputer-Bereich hat Forth als Basisumgebung lediglich mit dem Jupiter Ace[8], einem Sinclair-ZX81-Klon im ZX-80-Gehäuse mit Forth im ROM (für den Z80), einen Start versucht. Für Systeme mit eingeschränkten Ressourcen stellte das eine ideale Kombination dar. Der Erfolg blieb aber dennoch aus und 1983 war dieser Exot in der breiten Masse der BASIC-Homecomputer untergegangen. Dies nicht zuletzt deswegen, weil sich die Ansprüche an Hardware und Unterstützung durch ein entsprechendes Softwareangebot, allzu rasch weiter entwickelten und minimalistische Konzepte nicht mehr für sich tragfähig waren.

Für den Embedded-Systems-Bereich, wo Forth seine Wurzeln hat, war es dann auch naheliegend, eine hardware-nahe Unterstützung für Forth umzusetzen. Ein Vorreiter dieser Idee war der auf 6502-Variante basierende Rockwell 65F11- und 65F12-CPU, die spezielle Forth unterstützende Opcodes samt zugehöriger Implementierung im Masken-ROM bzw. über Erweiterungs-ROMs aufwies. Weitere Umsetzungen bis zum heutigen Tage folgten.[9]

Außerdem findet sich Forth in vielen kleineren, sehr kundenorientierten Embedded-Systems-Projekten. Populärer hingegen ist der Einsatz bei der Rosetta Lander Common DPU (basierend auf einer Harris RTX2010 16-Bit-CPU[10]).

Forth diente zudem als Grundlage für die Firmware auf Workstations und Server der Firma Sun Microsystems[11], genannt OpenBootProm, das als Open Firmware[12] standardisiert gemäß IEEE-1275[13] für SPARC- und PowerPC-Architekturen verbreitet war.
Ebenso waren die auf PowerPC-CPU basierenden Mainboards EfikaPPC von Genesi[14] mit Open Firmware[15] ausgestattet.

Zu den neueren Entwicklungen[16] zählt das von RS-Components vertriebene Selbstbau-Kit FIGnition inFUZE, ein Single-Board-Computer[17] basierend auf Atmel AVR 8-Bit mit 20 MHz und 8 KByte RAM, das eine FORTH-Interpreter-/Compiler-Firmware enthält und ergänzend Dienstprogramme und Beispielprogramme[18] inkludiert.
Im Niedrigpreissegment des Embedded-Bereichs ist auch die EForth-Variante[19] für ESP-32-Kits beliebt, die als Basis für DIY-Projekte und Home-Automation Verwendung findet.

Implementierungen[Bearbeiten | Quelltext bearbeiten]

Die Massenspeicherverwendung ist je nach Implementierung höchst unterschiedlich gelöst. Prinzipiell benötigt Forth einen blockorientierten Massenspeicher (üblicherweise ein Floppy-Laufwerk), um dort in Form von 1024-Zeichen großen Screens (welche den Sourcecode-Text enthalten) selbst zu organisieren.
Manche Implementierungen verwenden das CBM-Dateisystem lediglich für den rohen Zugriff direkt auf die Blockstruktur.
Andere Variante hingegen legen die Screens einfach als Dateien des CBM-Dateisystems ab (z.B. als sequenzielle Dateien, wie etwa bei C64 Forth/79 von Micro Productions) oder verzichten überhaupt auf das Screen- und Blockkonzept und können eine Datei als Eingabe für den Forth-Source heranziehen.
An dem umgesetzten Screen-/Dateikonzept orientiert sich dann auch die jeweilige Editor-Lösung. Der aus frühen Tagen übliche "Line-Editor" wird üblicherweise (schon in den 1980ern) als nicht zeitgemäß betrachtet und so ist faktisch jede Implementierung mit einem eigenen Editor ausgestattet, die sich faktisch untereinander alle irgendwie unterscheiden.

Unabhängig von der konkreten internen Forth-Massenspeicherverwaltung, gibt es entsprechende Erweiterungen und Definitionen, um auf Daten des CBM-Dateisystem wie gewohnt zuzugreifen. Nicht selten orientiert sich das an dem Schema wie BASIC mit Dateien umgeht bzw. ist die Schnittstelle an die KERNAL-Funktionen angelehnt.

C64[Bearbeiten | Quelltext bearbeiten]

Eine Übersicht der vielen Forth-Implementierung (kommerzielle und Open Source) für den C64:

C128[Bearbeiten | Quelltext bearbeiten]

C128 im CP/M-Modus[Bearbeiten | Quelltext bearbeiten]

Literatur[Bearbeiten | Quelltext bearbeiten]

Weblinks[Bearbeiten | Quelltext bearbeiten]

WP-W11.png Wikipedia: Forth (Informatik)
WP-W11.png Wikipedia: Forth (programming language) Sprache:english

Quellen[Bearbeiten | Quelltext bearbeiten]

  1. Entwurf für einen Beitrag der History of Programming Languages II Konferenz, Chuck Moore, 1991 Sprache:englisch
  2. ACM SIGPLAN Notices, Volume 28, No. 3, March 1993 Sprache:englisch
  3. Forth 2012 Standard Sprache:englisch
  4. Wikipedia: Starflight (Development) Sprache:englisch
  5. Source-Code des Spiels "Worms" auf Github programmiert mit Forth Sprache:englisch
  6. ANTIC Interview 408 - David Maynard, Electronic Arts Worms? Sprache:englisch
  7. dt. Wikipedia: Programmiersprache Factor
  8. Jupiter Ace Sprache:englisch
  9. Forth-Chips Sprache:englisch
  10. Command and Data Management Subsystem (CDMS) of the Rosetta Lander (Philae) Sprache:englisch
  11. Dt. Wikipedia: Sun Microsystems
  12. Dt. Wikipedia: Open Firmware
  13. ANSI/IEEE 1275-1994 - IEEE Standard for Boot (Initialization Configuration) Firmware: Core Requirements and Practices Sprache:englisch
  14. Genesi - EFIKA Micro-Motherboard Sprache:englisch
  15. EfikaPPC Firmware Update Sprache:englisch
  16. Ankündigung "FIGnition inFUZE" von RS-Components, 2013-08-27
  17. FIGnition FUZE Single-Board-Computer bei RS-Components
  18. FIGnition FUZE Website Sprache:englisch
  19. EForth for ESP-32 Sprache:englisch
  20. 64FORTH Sprache:englisch
  21. Abacus Forth G64 image (turn off JiffyDOS) + manual Sprache:englisch auf lyonlabs.org
  22. github.com/jkotlinski/acmeforth Sprache:englisch
  23. Audiogenic Forth-64-Modul für C64 Sprache:englisch
  24. Blazin' Forth D64 images Sprache:englisch
  25. Blazin' Forth at ftp.forth.org Sprache:englisch
  26. C64 Forth/79 Performance Micro Produts auf planetemu.net Sprache:französisch
  27. DurexForth bei github.com Sprache:englisch
  28. 28,0 28,1 28,2 28,3 Programming Languages for C64, Forth Sprache:englisch
  29. C64 Forth Cartridge auf planetemu.net Sprache:französisch, C64 Forth T64-Image auf planetemu.net Sprache:französisch
  30. Forth 64 cartridge at richardlagendijk.nl Sprache:niederländisch / Sprache:englisch / Sprache:deutsch
  31. geoForth (a.k.a. "Brian", for GEOS) D64 images Sprache:englisch auf lyonlabs.org
  32. Tiny Forth Manual (archive.org) Sprache:englisch
  33. forth128.blogspot.se Sprache:englisch