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
19 april 2023