In voorbereidingDe 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

HCC-dagen Forth GG 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

Softwareprijs HCC 1984Niet 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.

De Fiets data sheet (voorpagina)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.

Novix NC4000 Forth processorWel 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.