People’s Computer Company’s Dr. Dobb’s Journal’s Tiny BASIC (1976)

De magie van een goede programmeertaal zit verscholen in de eenvoud waarmee een bepaald idee kan worden uitgedrukt. Processor-assembleertaal is complex, krachtig en moeilijk om te leren gebruiken. Om een programmeertaal in de beginjaren van de thuiscomputers te laten landen moest deze niet alleen ‘goed’ zijn, maar als programma ook nog passen binnen de toenmalige beperkingen op het gebied van opslag, verwerkingssnelheid en werkgeheugen (RAM). De Tiny BASIC programmeertaal, als concept voor het eerst voorgesteld door Dennis Allison in het septembernummer van People’s Computer Company’s Dr. Dobb’s Journal, voldeed aan die eisen. De Journal begon net met publiceren en had als doel te dienen als referentiewerk; publicatie van een programmeertaal paste fabelhaft in dat concept. Tiny BASIC was op het moment van publiceren nog geen programmeertaal met een wijde beschikbaarheid voor de diversiteit aan computerhardware in die tijd: van de lezers van het blad werd de bovengemiddelde inspanning verwacht om Tiny BASIC zélf voor de eigen hardware te implementeren. Diverse codevoorbeelden en implementatierichtlijnen hielpen daar echter bij en Tiny BASIC kwam je daarna in heel veel varianten tegen.

De eigenschappen van de voorgestelde Tiny BASIC waren als volgt:

  • Alleen 8-bit (of 16-bit) integerberekeningen in het bereik -128 tot +127 of -32768 tot +32767
  • 26 variabelen met namen A, B, C, D, .. , Y, Z
  • De RND functie
  • 7 BASIC statements: INPUT, PRINT, LET, GOTO, IF, GOSUB, RETURN
  • Strings alleen als parameter voor PRINT

Hoewel de uitrusting van Tiny BASIC beperkt lijkt, viel dat in het licht van de hardwaremogelijkheden van de computers in de jaren ’70 nog reuze mee en ook zonder later geïntroduceerde toeters en bellen waren complexe programma’s mogelijk. Met INPUT was het mogelijk om invoer van een gebruiker te vragen (beperkt tot geen input, of een geheel getal). Met LET konden alle mogelijke berekeningen worden uitgevoerd – expressies geëvalueerd – zolang de uitkomsten maar beperkt bleven tot gehele getallen. En met PRINT konden de antwoorden op het scherm worden getoverd. Vorwaardelijke verwerking werd mogelijk met IF en grotere programma’s konden gebruik maken van routines met GOSUB en RETURN. Tiny BASIC was dan ook een instant succes.

In de latere jaren kwam je Tiny BASIC in allerlei vormen en onder diverse namen tegen. Laatst zag ik een implementatie op een Arduino, die een listing op een miniatuur OLED scherm toonde. En het stond de programmeurs vrij om zelf uitbreidingen aan de taal te maken, bijvoorbeeld door functies toe te voegen voor wiskundige berekeningen, of specifieke hardware of I/O uitbreidingen. Succes verzekerd.

De basis Tiny BASIC instructies zijn voldoende voor ieder denkbaar programma die binnen de beperkingen van geheugen en integerberekeningen moet werken. Met de combinatie van IF en GOTO waren ook herhalingen mogelijk:

100 LET L = 0
110 PRINT "IN THE LOOP", L
120 LET L = L + 1
130 IF L < 10 THEN GOTO 110
140 PRINT "OUT OF THE LOOP"

In latere Tiny BASIC versies werd zonder uitzondering de FOR .. TO .. NEXT constructie toegevoegd, zodat de code hierboven herschreven kon worden als:

100 FOR L = 0 TO 9
110 PRINT "IN THE LOOP", L
130 NEXT L
140 PRINT "OUT OF THE LOOP"

Omdat de Tiny BASIC programmeertaal maar weinig woorden kent en deze woorden toch al als enkele ’token’ in het geheugen van de computer werden opgeslagen, zochten veel computerbouwers naar manieren om met een enkele toets een geheel BASIC woord in te kunnen voeren. Hieronder een voorbeeld van de toetsenbord-layout voor de Tiny BASIC implementatie op de Micro-Professor MPF-1, wat gezien de aanwezigheid van FOR .. TO .. NEXT al een meer uitgebreide versie betreft. De commando’s SAVE, CONT, LIST, NEW, LOAD, RUN en ENTER zijn geen programmeerinstructies, maar middelen om programma’s in z’n geheel te laden van of bewaren op cassetteband, een programma te starten, te ‘listen’, of een afgebroken programma te hervatten.

Externe links

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *