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

Intel 8052AH-BASIC (1986)

De afgelopen 50 jaar hebben toegezien op parallelle ontwikkelingen in computer architectuur, chipfabricatie en massaproductie. De microprocessor is hiervan een tekenend resultaat, dat voor het eerst in 1971 een commercieel succes werd door de introductie van de 4-bit 4004 van een toen nog klein en onbekend bedrijfje genaamd Intel. Veel bedrijven volgden Intel’s voorbeeld en tegen het eind van de jaren ’70 kon je uit een half dozijn microprocessoren kiezen. In die jaren explodeerde het aantal computergebruikers van een handvol ondernemende hobbyisten en technisch onderlegde ‘hackers’ naar miljoenen zakelijke, industriële, ambtelijke, educatieve en thuisgebruikers, die allemaal de beschikking hadden over relatief betaalbare computeroplossingen.

Gelijktijdig aan de microprocessor, gebruikmakend van dezelfde ontwikkelingen ontstond de microcontroller, met de TMS1000 van Texas Instruments als lichtend voorbeeld. Microcontrollers zijn voor het grote publiek veel minder als eindproduct bekend dan de veel vaker genoemde microprocessoren, hoewel termen als ‘Arduino‘ en ‘ESP32’ ook bij de gemiddelde consument bekend beginnen te raken. Het grote publiek is zich echter zeer bewust van het feit dat ‘iets’ verantwoordelijk is voor de slimmigheid in huishoudelijke apparaten zoals broodroosters, koffiemachines, televisies, ovens, wasmachines, koelkasten, elektrische tandenborstels en ontelbare andere ‘gadgets’.

Een microcontroller bestaat intern uit een microprocessor, werkgeheugen, programmaopslaggeheugen en I/O voorzieningen. Dit maakt het in veel opzichten een regelcomputer-in-een-chip, waarbij er slechts een externe voedingsspanning nodig is om een programma uit te voeren. De eerste microcontroller was de TMS1000 van Texas Instruments (1974), gevolgd door de 8048 van Intel (1977). Een opvolger van de 8048 was de 8051 (1980), met als speciale uitvoering de hier beschreven 8052AH-BASIC (1986).

Het grootste verschil tussen microprocessoren en microcontrollers is gelegen in hun toepassingsgebieden: waar de microprocessor bedoeld is voor generieke toepassingen is de microcontroller bedoeld voor besturingstoepassingen met minimale externe componenten. Zo heeft een microprocessor over het algemeen geen intern geheugen, terwijl een microcontroller dat wel heeft. Een microcontroller heeft veel meer bitvergelijkingsinstructies en overwegend een beperktere instructieset die vooral op snelheid is ingericht. Ook de mogelijkheden om met andere chips en direct met digitale en analoge elektronica te communiceren is bij een microcontroller meer uitgemeten dan bij een microprocessor.

De MCS-51 is een familie van microcontroller IC’s, ontwikkeld, geproduceerd en op de markt gebracht door Intel, gebaseerd op de archetype 8051. Andere IC-fabrikanten zoals Siemens, Advanced Micro Devices (AMD), Fujitsu en Philips zijn gelicentieerde fabriekanten van deze microcontrollers. De microcontrollers uit de MCS-51 familie zijn geoptimaliseerd voor besturingstoepassingen voor ondermeer de automobielindustrie met in de instructieset een verscheidenheid aan adresseringsmodi, handige 8-bits rekenkundige instructies, ínclusief instructies voor vermenigvuldigen en delen en ondersteuning voor één-bit variabelen met bijbehorende bitmanipulatiemogelijkheden.

In de tabel zijn enkele van de MCS-51 microcontrollers weergegeven met hierbij aangegeven de hoeveelheid interne geheugen. Het interne gebeugen ligt in hetzelfde adresbereik als het externe geheugen, wat de uitwisselbaarheid van de microcontrollers vergroot.

Configuraties in de MCS-51 familie van microcontrollers

Een speciale variant van de 8052AH, de 8052AH-BASIC, heeft een af-fabriek in het maskeerbaar ROM ondergebrachte drijvendekomma-BASIC genaamd MCS-BASIC, een terminalserver en een EPROM programmeercircuit voor de opslag van programma’s. Intel bracht deze 40-pins microcontroller in 1986 op de markt.

Intel 8052AH-BASIC, een 8052AH microcontroller uit de MCS-51 familie met firmware in maskeerbaar ROM

De 8052AH-BASIC was bij de introductie in 1986 om verschillende redenen bijzonder: het bevatte een eenvoudige terminalserver met een ingebouwde editor, zodat programma’s met een seriële terminal of terminalemulatieprogramma beheerd konden worden. Ook de ingebouwde MCS-51 BASIC maakte deze microcontroller speciaal. Nog niet eerder was er een besturingschip met een ingebouwde hogere programmeertaal beschikbaar geweest.

Elektuur kwam met het november 1987 nummer met het ontwerp van een microcontrollerboard gebaseerd op de 8052AH-BASIC, ongeveer rondom de tijd waarin ik zelf ook voor mijn studie met deze microcontroller bezig was. Het ontwerp was opgebouwd rondom een 8052AH-BASIC V1.1, twee 6264 RAM’s, een 2764 of 27128 EEPROM, wat bus logica, een programmeerspanning-beveiliging, RS232 niveau-aanpassing en een reset-schakelaar.

Schema van de 8052AH-BASIC V1.1 schakeling

De opgebouwde microcontroller was een dubbelzijdige, doorgemetaliseerde printplaat met afmetingen van 10×15 centimeter. Twee connectoren maakten I/O en busuitbreidingen mogelijk. Op de printplaat zaten, buiten de 8052AH-BASIC micocontroller, twee RAM-chips, een EPROM-voet en enkele logicachips. De seriële ansluiting voor een terminal of computer met terminalsoftware bestond uit een 5-polige DIN aansluiting, in die tijd bekend als audioconnector waarmee audioapparaten onderling konden worden verbonden. De toepassing hiervan was niet standaard (een 9-polige D-connector was hier toepasselijker geweest), zodat er een kabel op maat gemaakt moest worden. Twee leds en een schakelaar maakten het geheel af. De printplaat was voorzien van montagegaten zodat het eenvoudig in een behuizing kon worden ingebouwd, een en ander overgelaten aan de creatieve vaardigheden van de constructeur.

Elektuur’s 8052AH-BASIC board, voorzien van twee RAM IC’s en een EPROM voet

Na het aansluiten van een geschikte terminal aan de 5-pins DIN-aansluiting en het inschakelen van de voeding werd een prompt op de terminal getoond en kon een programma worden ingetoetst:

*MCS-51(tm) BASIC V1.1*
READY
>10 FOR I=1 TO 3
>20 PRINT I
>30 NEXT I
>RUN
1
2
3
READY
>

Op de prompt konden enkele commando’s worden gegeven: RUNLISTNEWNULLRAMROMXFERPROGBAUDCALL en variaties hierop. Met LIST (of LIST met een regelbereik) werd het programma (of een deel hiervan) naar de terminal teruggegeven. Een regel werd gecorrigeerd door deze opnieuw in te voeren.

De geplaatste EPROM kon vanuit de controller worden geprogrammeerd met het commando PROG en programma’s konden eenvoudig vanuit de EPROM worden opgestart met het commando ROM. Programma’s konden slechts met UV-licht uit de EPROM worden gewist:

>LIST
10 FOR I=1 TO 3
20 PRINT I
30 NEXT I
READY 
>PROG
12
READY
>NEW
READY
>LIST
READY
>ROM 12
READY
>LIST
10 FOR I=1 TO 3
20 PRINT I
30 NEXT I
READY
>

Externe links

De 8052 microcontroller werd gebruikt als DSP processor op de Creative SoundBlaster serie geluidskaarten voor PC’s.

Dr. Dobbs Journal (1975)

Dr. Dobb’s Journal (DDJ) was een maandelijks journaal dat in de Verenigde Staten werd gepubliceerd door United Business Media. Het schreef over onderwerpen die in het interessegebied van software ontwikkelaars lagen. DDJ werd in 1975 gelanceerd en kende zijn populairste periode in de jaren ’90. Het was het eerste softwaretijdschrift, in tegenstelling tot hardware-georienteerde tijdschriften. Bijdragen kwamen ondermeer van Steve Wozniak, Jef Raskin, Gary Kildall en Jeff Duntemann. Vaak werd de broncode van volledige programma’s afgedrukt, zoals de listing van de Tiny BASIC interpreter en de Small-C compiler.