De Forth Programmeertaal
Zoals al beschreven in de eerste software pagina: het lastige van een
zelfbouwsysteem was natuurlijk dat het nergens mee compatible was. Aan de
andere hand, veel bruikbare software was er toen toch nog niet te krijgen, je moest nog veel zelf
doen. Maar, samen met mede-hobbyisten toch heel wat voor elkaar gekregen, waaronder het werken in
Forth.
Hoger dan assembler:
Forth
Mijn eerste (en op zelfbouwsystemen enige) hogere systeem/taal was Forth. Dit
is een hele gebruikersomgeving: het is zowel een programmeertaal, als een operating
systeem, te bedienen in diezelfde taal. De taal stamt al uit de 60'er jaren, waar het werd gebruikt
voor besturing van bijvoorbeeld radioteloscopen. Ik ben er op de universiteit in Utrecht mee in
aanraking gekomen, waar het (geïmporteerd door astronomen) op Apple's draaiden, voor experimenten
en besturingen. Het is interactief: op de prompt (typisch 'OK ') kan je
commando's in Forth invoeren, die dan gelijk worden uitgevoerd, dus ideaal om experimenten en zo
aan te sturen. Je kon ook nieuwe functies definiëren, die dan werden gecompileerd (vertaald) en
opgeslagen, en later weer als commando konden worden opgeroepen.
Het hele systeem paste in 8 Kbyte, hoewel mijn uitgebreidere versie wat meer ruimte in beslag
legde. Kom daar met Windows maar eens om, maar dat bestond toen nog niet eens, Windows 1.0 (een
grafische schil rond DOS) komt uit 1985.
Hoe ziet Forth er uit? Wel, een simpel 'hello world' programma (het standaard eerste
demo-programma) ziet er als volgt uit:
: HelloWorld \ een dubbele
punt start het maken van een nieuwe functie
." Hallo, Wereld" \ het commando ." definieert een
string en drukt deze af
CR \
CR is het commando voor het afdrukken naar een nieuwe regel
; \ en
de ; sluit de nieuwe functie/routine af
Binnenkort: wat meer programma's in Forth, voor de Forth geïnteresseerden.
Eerste programma in deze serie: het klassieke breakout spel
in Forth.
Nu kent het systeem een nieuw commando, genaamd 'HelloWorld '. Deze is nu aan te
roepen door de naam in te typen:
HelloWorld
Hallo, Wereld
OK
Simpel, nietwaar? Wil je meer weten over hoe Forth er uit ziet, kijk dan op deze 'Wat is Forth' pagina. Het voordeel is natuurlijk dat
je alles direct uit kunt proberen, alle functies die je maakt kan je ook gelijk testen, stap voor
stap.
De Forth gebruikersgroep
Samen met andere leden van de Hobby Computer Club hebben we toen de Forth gebruikersgroep opgericht (bestaat nog steeds), en via een
zelfgemaakte Forth cross compiler op een CP/M systeem hebben onder andere Jan Vermue en ik een
Forth versie voor de Eurocom-II gemaakt. Dit was de basis voor al mijn
verdere programmatuur.
Zie hiernaast een foto van de HCCdagen, met de stand van de Forth Gebruikersgroep, omstreeks
1983). Zittend op de foto o.a. Albert, nog
steeds actief lid.
Het Forth systeem werd al snel uitgebreid met een Disk Operating System ('DOS'), zodat ik files
op floppy kon zetten (Forth heeft standaard een meer primitief disk-systeem, dat geen files maar
alleen 1 Kbyte blokken kent). Gebaseerd op UNIX was dit weer (vergeleken met de toen aanwezige
hobbysystemen) een modern systeem, met directories. Dit zat zelfs nog niet eens in bijvoorbeeld
Microsoft MS/DOS 1, daar kon je maar een directory, met maximaal 64 files, op een floppy zetten
(Windows: wat is dat? We praten hier over 1983).
Daarnaast moest ik natuurlijk de BIOS aanpassen, deze kon alleen maar booten (starten) van
cassette. Hier was de memory card met batterij-backup handig: hierin kon
ik mijn met de hand geschreven boot code voor floppy kwijt, zonder deze steeds opnieuw van cassette
te moeten lezen. Een kleine wijziging in de ingebouwde BIOS maakte dat deze in de memory card keek
naar uitbreidingen (zoiets als huidige BIOS'en in PC's ook doen), en deze uitbreiding vroeg dan van
welke floppy te booten (zie scherm hierboven, uit 1986). Gelijk die bootcode ook maar mijn
toenmalige logo op het scherm laten zetten.
En: anno 2006 werkte allemaal nog steeds.De zaak op verzoek uit de kast gehaald en aangezet: de
inhoud van het geheugen was er nog, en de 5¼" floppies uit 1986 waren nog steeds leesbaar: het
systeem startte op (niet echt in een keer, denk dat er wat vuile contacten waren, moest de kaarten
er een paar keer uithalen en er weer instoppen). En dat na jaren niet gebruikt te zijn!
Applicaties
Niet alleen het operating system is zelfgemaakt, maar ook veel applicaties (meestal
dus in Forth). Zowel nuttige programma's als een simpele tekstverwerker (met printer driver, en
zelf ontworpen fonts, om op een oude matrix-printer toch 'near-letter quality' te kunnen
afdrukken), en spelletjes zoals breakout, space invaders, snakes, en zo
voort.
Het leukste waren wel robotjes. Hiermee stonden we dan met de Forth gebruikersgroep op de HCC-dagen, en hebben we zelfs een
prijs gewonnen voor de mooiste presentatie. Ik had wel de helft van de planten uit het huis van
mijn ouders meegesmokkeld om de stand mooi aan te kleden.
Daarnaast probeerde ik van alles uit (kan mooi met Forth), zoals 'non-deterministische control
structures', multi-tasking, compilers (zoals een Tiny-Pascal compiler die naar Forth vertaalde) en
andere zaken die ik tijdens college leerde. Ik had zelfs al een simpel multi-user systeem, zoals
gedemonstreerd op de HCC-dagen van 1984. Weer prijs (zie hiernaast)!
Tegenwoordig is dit allemaal iets dat als vanzelfsprekend wordt aangenomen. Wie maakt er nog
zelf computers, of zelf de low-level software. Niet erg veel mensen meer, in de meeste operating
systems als Linux en Windows zit alles al wat je als gebruiker nodig hebt (bij Linux toch dank zij
een boel mensen die dit nog steeds als hobby hebben). En met de steeds complexere systemen gaat er
ook te veel tijd in zitten om alles zelf te doen. Toch is dat soms jammer, ik heb er veel van
geleerd.
Forth Processors
Ik heb eerst Forth gebruikt op de Motorola 6809. Deze pseudo-16bit processor had een
instructieset erg geschikt voor Forth, zeker voor de 'direct threaded' variant. Met name de
'Jump indirect indexed auto-increment' instructie JMP [,Y++] was ideaal voor
het aflopen van de lijsten pseudo-instructies van vertaalde Forth code. Het 16-bit Y-register was
hierbij de Forth 'program counter'.
Later (1984-1986) zijn we zelfs onze eigen Forth processor gaan ontwerpen. Forth wordt normaal
gecompileerd naar een soort intermediate code, en het idee was een processor te maken dat deze
intermediate code direct uit kon voeren, en zo Forth programma's vele malen sneller zou kunnen
draaien.
Met een groepje (Albert, A3,
Pieter, Arie en ik) hebben we dat idee op papier uitgewerkt, tot de FIETS processor. FIETS
stond voor Future-oriented Implementation of Enhanced Translators and
Systems, en we hadden ook goede plannen om bijvoorbeeld C en Pascal op deze machine te laten
draaien, maar de native language (moedertaal) zou Forth zijn. Zie de voorkant van ons data sheet
hiernaast.
Helaas, alhoewel we een behoorlijk uitgebreid ontwerp hadden, en er heel wat vergaderingen aan
hebben besteed, is er nooit een hardware implementatie gemaakt, alleen maar emulatie-software.
FPGA's waren er toen nog niet (past het tegenwoordig zonder problemen in, zie hier), en de processor zou uit zo'n 100 TTL chips opgebouwd
moeten worden.
Wel ben ik via mijn toenmalige baan wel (rond 1990?) met echte Forth processoren in aanraking
gekomen, we waren vertegenwoordiger van de Novix NC4000 Forth Engine. Aardig in de richting van wat
we toen zelf wilden maken. Heb er nog steeds een paar liggen. Maar, tegen Intel konden niet veel
processor-fabrikanten op...
En Nu?
Wel, ik programmeer niet meer in Forth, de taal is me wat te minimalistisch en huidige systemen
hebben genoeg kracht om zwaardere talen aan te kunnen. Maar, ik ben wel via Forth mijn verdere
carrière ingerold. Via kennissen bij de hobby computer club werd mijn interesse opgewekt bij een
bedrijf (Pijnenburg micro-electronics), waar ik als Forth programmeur ben gaan werken (part-time,
naast het afmaken van mijn studie), en van daaruit zelfs gewerkt in bijvoorbeeld Japan. Daar,
en als hobbyist, ben ik ook doorgegaan met processor-ontwerp, met als hoogtepunt een parallele
(vector) DSP voor in LTE telecommunicatiesystemen voor ST-Ericsson-NXP Wireless (spin-out van
Philips/NXP)... Programmeren doe ik zelf nu voornamelijk in C en in Perl of Python.
Maar, ik heb mijn oude 6809-systeem nog steeds, en het werkt ook nog
(2006)! En, ik hobby ook nog, waarvan deze site getuigt.
Forth leeft ook nog steeds, en wordt nog steeds gebruikt waar het oorspronkelijk voor is
ontwikkeld: het besturen van systemen. In de space shuttle, maar ook nog steeds door hobbyisten,
kijk op deze pagina voor robotjes van de Forth
GG.
|