Het begin Eind jaren zeventig deed zich een nieuw fenomeen voor in Nederland en de rest van de wereld. Dit fenomeen was de thuiscomputer. Een thuiscomputer zag eruit als een typemachine zonder slede en moest worden aangesloten op een oud, nauwelijks werkend tv-toestel en een dito cassetterecorder. Dat waren de dagen! De advertenties beloofden dat het iets zou zijn dat je zou kunnen gebruiken voor nuttige dingen als tekstverwerking, boekhouding, databasebeheer en jezelf trainen in programmeren. Ik weet niet wie er echt een database op cassettebandjes beheerde of een bruikbare tekstverwerking uitvoerde zonder een printer. Dat liet heel weinig nuttige dingen over die je kon doen en games als een nutteloos (maar veel interessanter) iets. Onder de nuttige dingen waren bepaalde berekeningen die maar heel weinig mensen nodig hadden, onderwijs en doe-het-zelfprogrammering (Dijkstra's verloren BASIC-generatie). Programmeerhandleiding voor Basicode Het moet 1979 of 1980 zijn geweest dat de NOS begon met het uitzenden van computerprogramma's via de radio in het populaire hobbyprogramma 'Hobbyscoop'. Eerst waren deze programma's alleen bruikbaar op specifieke machines, zoals de Tandy TRS-80, de Commodore PET, de Apple-2 of de Exidy Sorcerer. De datatransmissies in die tijd hadden dus twee grote nadelen: je moest elk programma vier keer uitzenden en sommige cassetteformaten overleefden de radiotransmissie niet zo goed, bijvoorbeeld door ontvangstbeperkingen, fouten op de band, enz. In 1982 kwamen de mensen van Hobbyscoop op het idee om een standaard cassetteformaat uit te vinden om BASIC-programma's via de ether uit te zenden. Dit heette BASICODE. Elke computer had een zogenaamd vertaalprogramma nodig om het Basicode-signaal van de cassette te lezen en de ASCII-representatie te vertalen naar de native (tokenized) BASIC-representatie in het geheugen. De meeste vertaalprogramma's kunnen het programma in het geheugen ook terug converteren naar ASCII en het opslaan op cassette als Basicode. De vertaalprogramma's werden via de ether uitgezonden en je kon ze ook bij de NOS kopen. Het Basicode-formaat was in feite een 1200BPS RS232-achtig signaal dat FSK-gemoduleerd was met 1200 en 2400 Herz-tonen, in wezen het native cassette-modulatieformaat van Acorn BBC-computers (maar niet verdeeld in kleine blokken). Het was een 'synchroon' FSK-formaat. Een 0 bit werd weergegeven door een enkele periode van een toon van 1200 Hz en een 1 bit werd weergegeven door twee perioden van een toon van 2400 Hz. Deze functie maakte het signaal eenvoudig te decoderen en te genereren met software op een enkele I/O-lijn. Het zou ook kunnen met een eenvoudige toondecoder/encoder en een standaard UART. De meeste thuiscomputers kunnen worden gemaakt om Basicode te verzenden of te lezen op hun bestaande cassettepoort. Elke byte bestond uit één startbit, 7 databits en 2 stopbits (of zoals de specificatie zei: 8 databits, de meest significante moest 1 zijn, en 1 stopbit. Is er een verschil?). Ondanks de relatief hoge baudrate had FSK een goede kans om radiotransmissie en cassettebandjes te overleven. De bytes die met Basicode werden verzonden, waren een ASCII-weergave van het BASIC-programma. De eerste byte was ASCII 2 (STX) en de laatste byte was ASCII 3 (ETX), gevolgd door een bitsgewijze exclusieve of checksum. Lijnen werden beëindigd met ASCII 13 (CR). Het hele programma werd uitgezonden als één groot blok met 5 seconden 2400Hz leaders en trailers. Zo zagen de stukjes eruit: |_____|~~~~~|__|~~|__|~~| nul bit een bit Zo zag het hele programma eruit: 2400Hz leider – STX CR – Lijnen van het programma – ETX – CHECK – 2400Hz trailer. De veel meer geavanceerde Basicode 2, jawel, op cassette BASICODE 2 Hoewel Basicode het mogelijk maakte om programma's op cassette uit te wisselen tussen verschillende computers en ze via de ether uit te zenden, bood het weinig overdraagbaarheid. Programmeurs werden alleen aangemoedigd om geen speciale kenmerken van hun BASIC-dialect te gebruiken. In 1984 ontstond de zogenaamde Basicode 2 standaard. Het cassetteformaat bleef hetzelfde, maar er werd een subroutinebibliotheek toegevoegd. De regels onder de 1000 waren gereserveerd voor de subroutinebibliotheek en het BASIC-programma kon ze niet bevatten. Verder was precies vastgelegd welke BASIC statements, functies en operatoren wel en niet waren toegestaan in Basicode programma's. De volgende subroutines waren beschikbaar: De Sinclair ZX81 100 Helder scherm. 110 Zet de cursor op de positie die wordt gegeven door de variabelen HO en VE. 120 Lees cursorpositie en retourneer deze in variabelen HO en VE. 200 Lees de toets op het toetsenbord en geef deze terug in IN$. Retourneer een lege tekenreeks als er geen sleutel beschikbaar is. 210 Wacht en lees een toets op het toetsenbord en geef deze terug in IN$. 250 Piep. 260 Retourneert willekeurig getal tussen 0 en 1 in RV. 270 Retourneert de hoeveelheid vrij geheugen in FR. 300 Converteer getal SR naar tekenreeks, geretourneerd in SR$ 310 Converteer getal SR naar tekenreeks met vaste breedte, breedte=CT plaatsen na komma=CN, geretourneerd in SR$, 350 Druk SR$ af op de printer. 360 Newline op de printer. De volgende commando's waren toegestaan: PRINT, INPUT, GOTO, GOSUB, RETURN, FOR..TO..STEP, NEXT, IF..THEN (niet anders), ON..GOTO, RUN, ON..GOSUB, STOP, END , DIM, LEZEN, DATA, RESTORE, REM, toewijzingen. (Geen DEF FN!) De volgende functies waren toegestaan: TAB (alleen in printstatement), ABS, SGN, INT, SQR, SIN, COS, TAN, ATN, EXP, LOG, ASC, VAL, LEN, CHR$, LEFT$, MID$, RIGHT $ (geen STR$, je moest GOSUB 300 doen). Zo was het toen… De volgende operatoren waren toegestaan: AND, OR, + (ook met strings), -, *, /, ^ (machtsverheffen), <, =, >, <=, <>, >= Namen van variabelen hadden een maximale lengte van 2 karakters en een aantal ervan was verboden (IF, FN, GR, AT enz.) en degenen die met een O begonnen waren gereserveerd voor intern gebruik in de subroutinebibliotheek. Arrays hadden maximaal 2 dimensies. String-arrays van strings met variabele lengte waren toegestaan. Regels waren beperkt tot een lengte van 60 tekens. Een programma van Basicode moest de gereserveerde ruimte voor strings in de variabele A op de eerste regel aangeven. De start van een programma zag er als volgt uit: 1000 A=1000:GOTO20 1020 REM De eerste regel van het programma. Er was een afspraak om de regelnummers op de volgende manier te gebruiken: 1000-19999 Hoofdprogramma. 20000-24999 subroutines. 25000-29999 Datalijnen. 30000-32767 Copyright mededeling enz. Voor de volgende computers bestond een Basicode 2 vertaalprogramma: Exidy Sorcerer, DAI, Color Genie, Commodore PET, VIC-20, C64, Amiga, Sinclair ZX81, ZX-Spectrum, QL, Philips P2000T, Acorn Atom, BBC, Electron, Tandy TRS80, MSX, Oric Atmos, Newbrain, Amstrad CPC 464, IBM PC en de meeste compatibele apparaten, Apple II-serie, Texas Instruments TI-99/4A, Mattel Aquarius en anderen. De meeste van deze computers hadden een BASIC-dialect dat een superset was van het dialect gespecificeerd door BASICODE en het vertaalprogramma was erg kort. Anderen hadden een afwijkend BASIC-dialect en het vertaalprogramma bevatte een halve BASIC-tolk om een deel van de semantiek te leveren (ZX Spectrum) of je kreeg gewoon een onvolledige vertaling (ZX81). Aangenomen werd dat het scherm minimaal 24 regels en 40 kolommen bevatte. Op machines zoals de ZX Spectrum bevatte het vertaalprogramma ook een schermapparaatstuurprogramma om zoveel tekens te krijgen. Sommige machines hadden geen cassettepoort (pc-compatibele apparaten geproduceerd na 1983) en je had een kleine adapter nodig op de parallelle poort. Dus wat zou er kunnen worden gedaan met BASICODE 2? Je kon geanimeerde spellen doen, maar de meeste waren zo traag dat ze op veel machines onspeelbaar waren. Je zou een relatief mooie schermopmaak kunnen doen met behulp van de cursorpositioneringscommando's. De volgende programma's bestonden: – Een 8085-simulator met daarin een assembler, een disassembler en simulator (met geanimeerde registerinhoud) allemaal in ongeveer 25k. – Een tekstavontuur. – Een mini-spreadsheet met ongeveer 5×16 cellen. – Rekenprogramma's (satelliet volgen, elektrische netwerken). – Belastingberekeningsprogramma's. – Veel educatieve programma's (instructie en oefenen). – Ze hebben er zelfs een audio-cd “Best of Basicode” van gemaakt. De meeste uitzendingen van BASICODE waren in feite wat ze 'beeldkrant' of 'Hobbyscoopkrant' noemden . Deze bestonden uit een geavanceerd BASIC-programma om de tekst in de dataregels op te maken voor schermweergave of afdrukken. Natuurlijk stond het bericht in de datalijnen, het programma was gewoon overhead. Het bevatte een samenvatting van de nieuwsberichten in het programma “Hobbyscoop”, radioamateur- en ruimtenieuws en het programma van de HCC-evenementen (Hobby Computer Club). Uitzendingen gingen door tot ongeveer 1991. Vroeger waren er geen spaties tussen trefwoorden en wat volgde op "GOTO20" in plaats van "GOTO 20". Basiscode 3 BASICODE 3 In 1986 was het tijd voor een nieuwe revisie van BASICODE. In BASICODE 3 is de subroutinebibliotheek uitgebreid met de volgende soorten subroutines: – Eenvoudige monochrome bitmapafbeeldingen (punten, lijnen, tekst). – Bestandsopslag (schijf en cassette). – Er was ook een BASICODE-standaardformaat voor bestanden (verdeeld in kleine blokjes). – Geluiden (enkele toon). – Vertraag en lees een sleutel met time-out. - Enkele kansen en doelen (druk een gemarkeerde string af, lees karakter van het scherm, schakel de breektoets uit (voor de kinderen op school)). De NOS wilde deze standaard niet overnemen omdat de makers niet wilden dat de vertaalprogramma's via de radio werden uitgezonden. De TROS (een van de andere omroepen) zond wel programma's van BASICODE 3 uit en verkocht daarvan cassettes. De NOS bleef BASICODE 2 gebruiken. Sommige programma's die ik me herinner: – Eenvoudige programma's om figuren te tekenen of deuntjes te spelen. Een daarvan tekende het tv-testbeeld (in zwart-wit). – Een programma voor het tekenen van grafieken. – De gebruikelijke educatieve dingen. – Een programma om de wereldbol te tekenen (gezien vanuit elke hoek). Op sommige langzame machines kan dit bijna een uur duren! Godzijdank hebben we nu xearth. BASICODE werd zelfs gebruikt in de DDR (Oost-Duitsland). In 1989 was het waarschijnlijk zo achterhaald dat niemand anders meer geïnteresseerd was. Nu we internet hebben en elke moderne machine 3,5 inch MS-DOS-diskettes kan lezen en schrijven (waarvan de betrouwbaarheid en kwaliteit snel achteruit gaan!), lijkt BASICODE geen prestatie van betekenis. Maar vroeger had niet elke microcomputer een RS232-poort en waren modems niet zo betaalbaar en betrouwbaar als tegenwoordig. Verschillende computers konden elkaars cassettes en schijven gewoon niet lezen. BASICODE was vaak de enige manier om een programma van de ene naar de andere machine over te brengen, zonder het over te typen. Een voorbeeld van een Basicode programma: http://hobbyscoop.nl/de-hobbyscoop-krant/ Geschreven door Lennart Benschop
Lees verder