
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
Vision Basic is een nieuwe programmeertaal voor de C64 welke begin 2022 beschikbaar is gekomen. Dennis Osborne (USA) is de programmeur van Vision Basic. Een vraag die bij velen meteen zal opkomen is waarom er nu wéér een nieuwe Basic variant moet komen voor de C64. Er zijn immers al genoeg Basic-uitbreidingen? Dat was in ieder geval wel mijn gedachte tot ik de mogelijkheden van Vision Basic zag. Maar wat maakt Vision Basic dan zo bijzonder? Simpel gezegd; het is een basic op steroïden!
Naast de vele nieuwe handige commando’s is Vision Basic vooral ERG snel! Dat komt omdat het geen Basic-interpreter is maar een Basic-compiler. Een Basic-interpreter (zoals de C64 Basic 2.0) zet de Basic-opdracht om naar uitvoerbare code op het moment dat hij het tegenkomt. Bij een compiler wordt alles eerst éénmalig omgezet in machinecode (en eventueel opgeslagen) en pas dan uitgevoerd. Dat maakt de uitvoering vele malen sneller. Maar Vision Basic kan nog meer. Om te beginnen zijn er enkele Basic commando’s aangepast zodat ze veel efficiënter kunnen worden gecompileerd naar machinetaal. En als je nog meer snelheid in je programma wil dan kan je eenvoudig machinetaalinstructies invoegen waar je maar wil. Ja je leest het goed, je kan machinetaalinstructies direct tussen de basic-opdrachten typen! Je hoeft dus geen externe machinetaalbestanden na te laden, en je hoeft geen machinetaalcode in het geheugen te poken. Dit komt omdat Vision BASIC ook dienst doet als een eenvoudige assembler.
Je kan dus een mix van Basic en machinetaal programmeren! Kortom, een perfecte oplossing voor de hobbyist die de overstap wil maken van Basic naar machinetaal. Je programma is leesbaar waar het kan, en snel waar het nodig is.
Vision Basic bevat nieuwe commando’s op het gebied van sprites, geluid en graphics. Het is zo is ontworpen dat het de noodzaak om video- en geluidsregisters te manipuleren aanzienlijk verminderd. Sterker nog, misschien hoef je nooit meer te poken! Zo kan je (en je zal dit misschien niet geloven) ook de rasterinterupts manipuleren vanuit Vision Basic zodat je meer dan 8 sprites op je scherm kan gebruiken. Hiervoor zal je echter wel kennis moeten hebben van het principe, het is namelijk niet één simpel commando. Een ander krachtig hulpmiddel is de mogelijkheid om zelf commando’s (routines) te maken die je steeds kan hergebruiken. Dus als je vind dat er een commando ontbreekt dan kan je deze eenvoudig zelf maken en aanroepen via een eigen gekozen naam. Deze door de gebruiker gedefinieerde opdrachten en functies kunnen worden opgeslagen in afzonderlijke bestanden en aan je programma's worden toegevoegd wanneer je ze nodig hebt!
Helaas zijn enkele Basic 2.0 commando’s niet meer (standaard) beschikbaar. Ze namen kostbare geheugen ruimte in en werden maar weinig gebruikt. Denk aan de wiskundige commando’s en DEF. Maar eventueel kan je ze dus zelf weer toevoegen als routine. De meeste Basic-opdrachten werken zoals je zou verwachten maar er zijn ook commando’s aangepast. Je zal waarschijnlijk enkele kleine wijzigingen aan je bestaande ‘Basic V2.0’ programma's moeten maken om ze goed te laten werken in Vision Basic. Gelukkig is het C64-editor gevoel, die we zo goed kennen en waar we aan gewend zijn, behouden.
Om te kunnen programmeren in Vision Basic is een REU (geheugenuitbreiding) vereist. Gelukkig zijn daar tegenwoordig meerdere oplossingen voor. Daarover later meer. Dankzij de REU hoef je, tegenstelling tot andere compilers, de programmeer omgeving niet te verlaten om de programma's uit te voeren en te testen. Zowel de broncode als de gecompileerde code is namelijk in de REU opgeslagen. Als je je programma klaar hebt en verspreid dan heb je Vision Basic niet meer nodig. Het programma zal normaal gesproken op een ‘kale’ C64 werken. Ook dit is een duidelijk verschil met veel andere Basic-uitbreidingen. Echter; als je achteraf wijzigingen wil aanbrengen dan moet je dat dus in de broncode doen. De broncode zal je als programmeur dus apart moeten opslaan, en indien gewenst meeleveren aan een gebruiker die hier zelf mee aan de slag wil. Maar dat kan natuurlijk ook een leuke beveiliging zijn van je product.
Zoals je eerder kon lezen ligt het programmeren in Vision Basic veel dichter bij machinecode. Een kleine voorbeeld zal ik geven. Een teller als x=x+1 kan je vervangen door inc x welke veel sneller werkt. Dit commando herken je waarschijnlijk uit je assembler. Zo kan je dus ook x=x-1 vervangen door dec x. Het commando GOSUB regelnummer kan worden vervangen door GOSUB NAAM. Verderop in je programma gebruik je dan TAG NAAM gevolgd door de gewenste routine. Een vast regelnummer is dus niet meer nodig. Hier blijft RETURN het commando om terug te keren naar je hoofdprogramma. Ook kan je beter geen regelnummers meer te gebruiken in je programma want het RENUM commando doet geen wijzigingen in je code. Dus GOSUB 100 wordt een probleem als na het her nummeren de basicregel 100 niet meer bestaat of verwijst naar een andere regel.
Maar er zijn meer dingen waar je op moet letten, zo zal PRINT 1+2*3 als antwoord ‘7’ moeten geven. Echter Vision Basic houdt geen rekening met de prioriteitsregels en voert het commando gewoon van links naar rechts uit met als (foutief) resultaat ‘9’. Het plaatsen van de som tussen haken heeft ook niet het gewenste effect en resulteert in een foutmelding en het nog steeds het foutieve antwoord ‘9‘. Hier zal de programmeur dus zelf rekening mee moeten houden door de som aan te passen of eventueel opsplitsen in delen. In dit voorbeeld zal PRINT 2*3+1 wel goed werken en als antwoord ‘7’ geven. Tot slot nog een klein voorbeeldje van machinetaal in je programma. Dit kan door de code vooraf te laten gaan door een rechte haak om de ‘assembler’ te gebruiken. Bijvoorbeeld [LDA $0] en [STA $d020] om de border zwart te maken. Feitelijk hetzelfde als poke 53280,0 maar in de uitvoer is het sneller.
Om een programma te draaien welke is gemaakt met Vision Basic heb je alleen een C64 nodig. Echter om in Vision Basic te programmeren moet je systeem aan de volgende eisen voldoen:
Een C64, SX-64 of C128 (in 64-mode), een diskdrive (of alternatieve opslag) en een REU-geheugenuitbreiding (minimaal 256K, meer is beter). Waarschijnlijk heeft niet iedereen een echte REU tot zijn beschikking maar gelukkig zijn er tegenwoordig genoeg alternatieven:
- Emulatie op PC met REU support (bijv. VICE) (bonus: extra snel compileren)
- TheC64 (mini/maxi of TheVic20) welke ook REU emulatie kent.
- Ultimate 64 (bonus: extra snel compileren)
- C64 met een SuperCPU en toegevoegde RAM
- C64 met de Turbo Chameleon (bonus: extra snel compileren)
- C64 met de Ultimate 1541 cartridge
- …of eventueel andere REU klonen zoals REUplus2C (ongetest)
Let op: GeoRam en soortgelijke geheugenuitbreidingen worden niet ondersteund. Die beschikken niet over de vereiste DMA.
Op YouTube kan je voorbeelden en uitleg vinden van Vision Basic. Omdat er ongetwijfeld nog meer filmpjes zullen volgen kan je het beste zelf even zoeken middels de zoekfunctie van YouTube. Ook kan je het spel ‘Harold’ downloaden welke is gemaakt door Dennis Osborne.
Het betreft een Pacman kloon met extra opties en is gratis (freeware) te vinden op de website van de maker: https://visionbasic.net/. Hier kan je ook jouw exemplaar van Vision Basic bestellen. Je hebt keuze uit verschillende versies. Ik koos de digitale download en de paperback handleiding voor $ 49,- incl. verzending. Na enkele dagen ontving ik de download gegevens voor de software in mijn mail, en weer een dag later de handleiding. De mogelijkheden van de software en de commando’s staan hier duidelijk in beschreven en zijn voorzien van kleine voorbeelden. Het boek is van hoge kwaliteit en met een ringband waardoor het goed open blijft liggen naast je keyboard. Overigens had ik zelf de ‘readme’ bij de software niet goed gelezen en probeerde meerdere keren het verkeerde programma te starten. Maar dat probleem was gelukkig snel opgelost.
Geschreven door uw razende (enthousiaste) reporter; Fred Drent
Allereerst wil ik iedereen een heel goed 2023 toewensen! Eindelijk hebben we weer eens een “compleet” jaar kunnen draaien. Dat was geweldig na al die corona jaren en hebben we eigenlijk hoogtepunt na hoogtepunt meegemaakt. Zo was de dag met John Vanderaart onvergetelijk, maar ook de soldeer workshop, de Atari take-over en natuurlijk de geweldige jaarafsluiting met kerst. We blijven als club leidend met tal van fraaie innovaties waarvan regelmatig presentaties en demonstraties te zien zijn.
We trekken grote aantallen bezoekers en is het niet vreemd dat tal van mensen van over de landsgrenzen naar ons toe komen. Zo zien we Belgen en behoorlijk wat Duitsers en was onze Amerikaanse vriend Robert Bernardo (voorzitter Fresno Commodore User Group) aanwezig op de clubdag van oktober. Voor ons een stimulans om door te gaan met organiseren en te kijken of we het nog wat verder kunnen gaan uitbouwen. Op onze februari clubdag bijvoorbeeld doen we na de ALV opnieuw een soldeer workshop na het grote succes van vorig jaar en is er in april een Atari take-over.
We gaan verder op zoek naar mensen die een presentatie willen geven, over het algemeen zijn onze bezoekers daar ook erg van gecharmeerd. Onze locatie in Wijkcentrum ’t Schuurtje is dan ook zeer geschikt om veel bezoekers te ontvangen (de eigenaar heeft flink wat extra tafels aangeschaft) en ook voor presentaties is alles uitstekend geregeld.
Zelf ben ik de afgelopen wintermaanden bezig geweest met het testen van tapes, heel fijn is dat 90% van de tapes nog werkt en dat na vaak 40 jaar opslag. Regelmatig kom je leuke pareltjes tegen, vooral spellen bedoel ik dan. Zo werd ik gegrepen door het spel Solomon’s Key, ik kende het niet maar het is verrassend leuk. Een aanrader voor de spelletjes liefhebbers onder ons. Ook ben ik nog een grote bak met floppies aan het uitzoeken met honderden spelletjes, zit er wat aardigs tussen dan maak ik er een aantekening van om het later nog eens te gaan spelen.
Nou ik hoop dat we ook in 2023 weer met volle kracht vooruit kunnen en dat onze bezoekersaantallen minimaal hetzelfde blijven en misschien zelfs nog wat kunnen groeien. Ook hoop ik dat er nog veel mooie innovatieve dingen bij onze prachtige club worden ontwikkeld en dat we wereldwijd onze naam eer aan blijven doen! Uw voorzitter Ron van Schaik
We doen na het grote succes van vorig jaar op 18 februari op onze clubdag opnieuw een Soldeer Workshop.Wil je meedoen laat dit even weten op bestuur (at) commodore.hcc.nl of stuur anders een PM via messenger op onze Facebook pagina. We hebben een stapel leuke kits met joystick testers ingeslagen. Er zijn ook digitale klokjes en lampjes, deze kun je dus zelf gaan maken.
Er zijn twee sessies om 11:00 uur en om 13:00 uur.
Wat was het weer een zeer geslaagde Kerst Clubdag! Iedereen bedankt voor haar of zijn komst en we wensen iedereen een fijne kerst en een super 2023 toe. En vergeet niet, ook volgend jaar zijn we 6 keer (iedere derde zaterdag van de even maand) in ons "clubhuis" Wijkcentrum T'schuurtje te vinden!
We wensen iedereen een hele fijne kerst toe en een super 2023!
What a fantastic Christmas Commodore/Amiga and MSX show it was last saturday! Thanks to everyone who visit us and next year we will continue with 6 shows. Every third saturday on the even month, easy to remember! Pictures are from Frans Pansier and Ron van Schaik.
We wish you a merry Christmas and a Happy Newyear!