Forth
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)
- FIG Forth model (ein weit verbreitetes Portierungsmodell der Forth Interest Group, 1978)
- FORTH-79 standard (1979)
- FORTH-83 standard (1983)
- ANS Forth standard (ANSI technical committee X3J14 24. März 1994)
- Forth 2012 Standard [3] (2014)
Verwendung[Bearbeiten | Quelltext bearbeiten]
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:
- 64 Forth[20], 1983, von Tom Zimmer/HES Forth Steckmodul für den C64 bzw. VC-20.
- Abacus Forth / Data Becker Forth[21], 1985
- ACMEforth[22], 2019, von Johan Kotlinski, ein Cross-Compiler bzw. Transpiler von Forth nach ACME-Assembler.
- Audiogenic Forth, ein Steckmodul für den C64 bzw. VC-20 von Dave Middleton[23]
- Blazing Forth / Blazin' Forth, 1985 [24] [25] von Scott Ballantyne (auch für Plus/4)
- C64 Forth/79, 1983, von Greg Harris, Performance Micro Products[26]
- durexForth, 2018 [27] von Johan Kotlinski und Mats Andren (Open Source).
- Enhanced FORTH, 1986, Accelerated Software[28]
- F.I.G. Forth, 1982, LC. Cargile and Michael Riley, A B Computers[28]
- Fig-Forth, 1987, von Elcomp Publishing (CSDb- Release Nr. 40784 )
- Forth 64 bzw. C64 Forth[29], 1983, von Datatronic[30] Steckmodul von Handic/Datatronic.
- geoForth, 1989, von Nicholas Vrtis für GEOS[31]
- King Microware Tiny Forth for the Commodore 64 and VC-20, eine FIG-Forth-Implementierung von Nick Vrtis, 1983[32]
- M&T-Forth, 1985, von Markt & Technik (CSDb- Release Nr. 135665
- Master Forth, 1986, von MicroMotion[28]
- Super Forth 64, 1983, von Parsec Research (CSDb- Release Nr. 131992 )
- Tiny Forth-Compiler, 64'er Listings des Monats 08/1985
- Tri Forth, 1983, von International Tri Micro[28]
- ultraFORTH, 1985, Forth Gesellschaft e.V (CSDb- Release Nr. 135429 )
- volksFORTH, 2006, von der Forth-Gesellschaft e.V., Distribution auf 4 Disketten (aktuelle Version 3.9.2, 2021)
- White Lightning, 1984, von Oasis Software
C128[Bearbeiten | Quelltext bearbeiten]
C128 im CP/M-Modus[Bearbeiten | Quelltext bearbeiten]
Literatur[Bearbeiten | Quelltext bearbeiten]
- Rather, Elizabeth D., Colburn, Donald R. and Moore, Charles H., The Evolution of Forth, in History of Programming Languages-II, Bergin T. J. and Gibson, R. G., Ed., New York NY: Addison-Wesley, 1996, ISBN 0-201-89502-1
- "Starting Forth" Online Edition von Leo Brodie
- Additional Forth Books for Experts including Leo Brodie's "Thinking In Forth" und der ANS Forth Standard (PDF).
- fig Forth 6502 Assembly Source (PDF)
- Byte Magazine, Aug. 1984, Volume 9, Number 8, pp. 137: "Evolution Continues" von C. Kevin McCabe Vorstellung des FORTH-83-Standards
- Leo Brodie: Thinking Forth
Weblinks[Bearbeiten | Quelltext bearbeiten]
Wikipedia: Forth (Informatik) |
Wikipedia: Forth (programming language) |
- Forth bei Commodore Languages List (2015)
- Forth-Familienbaum
- Commodore Software - Forth
- A tribute to Leo Brodie's "Starting Forth" book
- Forth Incorporated
- Forth Interest Group (fig)
Quellen[Bearbeiten | Quelltext bearbeiten]
- ↑ Entwurf für einen Beitrag der History of Programming Languages II Konferenz, Chuck Moore, 1991
- ↑ ACM SIGPLAN Notices, Volume 28, No. 3, March 1993
- ↑ Forth 2012 Standard
- ↑ Wikipedia: Starflight (Development)
- ↑ Source-Code des Spiels "Worms" auf Github programmiert mit Forth
- ↑ ANTIC Interview 408 - David Maynard, Electronic Arts Worms?
- ↑ dt. Wikipedia: Programmiersprache Factor
- ↑ Jupiter Ace
- ↑ Forth-Chips
- ↑ Command and Data Management Subsystem (CDMS) of the Rosetta Lander (Philae)
- ↑ Dt. Wikipedia: Sun Microsystems
- ↑ Dt. Wikipedia: Open Firmware
- ↑ ANSI/IEEE 1275-1994 - IEEE Standard for Boot (Initialization Configuration) Firmware: Core Requirements and Practices
- ↑ Genesi - EFIKA Micro-Motherboard
- ↑ EfikaPPC Firmware Update
- ↑ Ankündigung "FIGnition inFUZE" von RS-Components, 2013-08-27
- ↑ FIGnition FUZE Single-Board-Computer bei RS-Components
- ↑ FIGnition FUZE Website
- ↑ EForth for ESP-32
- ↑ 64FORTH
- ↑ Abacus Forth G64 image (turn off JiffyDOS) + manual auf lyonlabs.org
- ↑ github.com/jkotlinski/acmeforth
- ↑ Audiogenic Forth-64-Modul für C64
- ↑ Blazin' Forth D64 images
- ↑ Blazin' Forth at ftp.forth.org
- ↑ C64 Forth/79 Performance Micro Produts auf planetemu.net
- ↑ durexForth bei github.com
- ↑ 28,0 28,1 28,2 28,3 Programming Languages for C64, Forth
- ↑ C64 Forth Cartridge auf planetemu.net , C64 Forth T64-Image auf planetemu.net
- ↑ Forth 64 cartridge at richardlagendijk.nl / /
- ↑ geoForth (a.k.a. "Brian", for GEOS) D64 images auf lyonlabs.org
- ↑ Tiny Forth Manual (archive.org)
- ↑ forth128.blogspot.se