

Nerd-nostalgie: Programmeren op de ZX Spectrum
De ZX Spectrum werkt, net als veel computers uit de jaren 80, met de programmeertaal Basic. Met een emulator of de hardware-replica kun je vandaag de dag nog steeds zelf games programmeren. De eigenaardige tekstinvoer behoeft echter wel enige uitleg.
De Commodore 64 is waarschijnlijk bekend bij de meeste mensen die in de jaren 80 al achter een computer zaten. Minder bekend is de ZX Spectrum. En dat, hoewel hij ondanks een vergelijkbaar concept veel minder kostte.
Net als de C64 verscheen de ZX Spectrum in 1982 en heeft hij de vorm van een toetsenbord waarin de computer is ingebouwd. Destijds diende meestal een beeldbuis-tv als scherm. Beide computers werken met Basic en zijn goed geschikt voor games. De ZX Spectrum is over het algemeen iets zwakker, hij heeft bijvoorbeeld minder RAM (48 in plaats van 64 KB), slechter geluid en een – vriendelijk gezegd – voordelig toetsenbord. Hij was vooral succesvol in zijn thuisland Groot-Brittannië en Spanje.
Nog een overeenkomst: je kunt er vrij eenvoudig zelf games mee programmeren. Aangezien ik dat al met de C64 heb gedaan, probeer ik het hier ook.
De Spectrum: bijna als het origineel, maar met modern comfort
Sinds eind 2024 is er «The Spectrum» van Retro Games, een replica van de ZX Spectrum. Het principe is hetzelfde als bij The C64. Uiterlijk zo origineel mogelijk nagebouwd, werkt de computer van binnen compleet anders dan het origineel: op een Arm-processor draait een emulator.

Daar merk ik niets van, de emulator gedraagt zich grotendeels hetzelfde als het origineel. De oude interfaces ontbreken, maar daarvoor zijn er met de moderne processor USB en HDMI. Via een USB-stick kunnen willekeurige games worden geladen. The Spectrum wordt geleverd met 48 geïntegreerde spellen. Per game kunnen vier spelstanden worden opgeslagen en er is een terugspoelfunctie waarmee je naar elk punt van de laatste 40 seconden kunt springen.
Overschakelen naar de programmeeromgeving
Met «The Spectrum» kunnen ook eigen programma's worden geschreven. Daarvoor schakel je over naar de klassieke modus. Deze is vrij goed verborgen: met de spatiebalk (ook deze is een beetje verborgen rechtsonder) kom je bij de opties, dan met toets 6, die tegelijkertijd de pijl naar beneden is, naar «Advanced options». Met M bevestig je en bij de volgende keuze selecteer je «Switch to classic mode». In hetzelfde menu kan ook worden ingesteld dat de computer direct in de klassieke modus moet starten.
Programmeren kan natuurlijk ook in een emulator op je gewone computer. Beide hebben voor- en nadelen, zoals je zo zult zien. Als emulator gebruik ik Fuse.
Hoe typen op de Spectrum ZX werkt
De ZX Spectrum heeft een zeer eigenzinnige manier van tekstinvoer. Met de hardware-replica heb je het passende toetsenbord inclusief alle opschriften. In de emulator moet je met een normaal toetsenbord werken, wat in het begin erg moeizaam is.
In de klassieke modus respectievelijk bij de originele ZX zie je aanvankelijk alleen een grijs vlak met een copyright-melding. Begin je te typen, dan knippert de cursor en toont een letter. Het is echter niet de letter die je het laatst hebt getypt. Maar deze letter geeft de huidige modus aan.
- «K» staat voor Keyword. In deze modus schrijft de computer bij het typen van een letter niet de letter, maar het Basic-commando dat wit op de betreffende toets staat. Typ je bijvoorbeeld een «P», dan verschijnt «PRINT» op het scherm.
- «L» staat voor Letters, dus kleine letters. Normaal typen in kleine letters.
- «C» staat voor Capitals, dus hoofdletters. Tussen kleine en hoofdletters wissel je met Shift+2.
- «E» staat voor Extended Mode, dus uitgebreide modus. Hiermee kunnen de groen beschreven commando's worden geactiveerd. Druk je bovendien nog op Shift, dan bereik je hiermee de rood beschreven woorden.
- «G» staat voor Graphics Mode. Met de toetsen 1 tot 8 kunnen ASCII-grafische tekens worden geschreven om mozaïeken, blokken, dikke lijnen en dergelijke te tekenen.
Sneltoetsen voor Basic-commando's zijn er op veel computers uit de jaren 80. Ongewoon is echter dat ze verplicht zijn: je kunt geen Basic-commando met losse letters typen. De computer herkent het niet als zodanig; bovendien kun je een regel helemaal niet met losse letters beginnen. De invoer start altijd met de modus K of E.
Dat is in het begin vrij irritant. Want zelfs als je het tienvingersysteem beheerst, werk je met het adelaarsysteem totdat je eindelijk uit je hoofd weet waar welk commando zich bevindt. Vanaf dan is het concept echter efficiënt. Dat is bij het rubberen toetsenbord ook nodig, want typen is daarmee moeilijk.

Werk je met de emulator, dan zie je de commando's niet op je toetsenbord. Hier helpt de tabel op de Wikipedia-pagina over Sinclair Basic verder. Met ⌘-K kan ik in Fuse het toetsenbord van de Spectrum laten weergeven, maar dan werkt het typen niet meer – waarschijnlijk een bug. Ik heb er daarom een screenshot van gemaakt.
Regels automatisch opnieuw nummeren
De ZX Spectrum kent geen commando om een programma automatisch opnieuw te nummeren en daarbij alle verwijzingen aan te passen. Dit is echter belangrijk: zelfs als je de commando's aanvankelijk in stappen van tien nummert, kan het gebeuren dat je tussen twee regels te weinig ruimte hebt voor later toegevoegde code.
Bij de C64 schreef ik de programma's op mijn normale computer en kopieerde ze vervolgens via het klembord naar de emulator om ze te testen. Zo zou het hernummeren ook met externe software mogelijk zijn. Het invoegen via het klembord werkt echter niet bij de emulator Fuse. Voor de emulator heb ik toch een workaround gevonden. Op de retro-replica niet.
De workaround: de Spaanse ROM voor de Spectrum ZX 128 heeft een commando NUMERO. Vreemd genoeg is er in de standaard-ROM geen equivalent. Dit commando nummert de lijst opnieuw. Het eerste argument geeft de startregel aan, het tweede het increment. De Spaanse ROM kan in Fuse worden geladen. Aangezien de Spectrum 128 achterwaarts compatibel is, kan het programma worden geladen, opnieuw genummerd en weer opgeslagen. In de retro-replica kan ik wel van de 48K naar de 128K-Spectrum wisselen, maar geen eigen ROM's laden.
Andere eigenaardigheden van Basic op de ZX Spectrum:
- Het commando LET is verplicht. Een regel «x=1» werkt niet, het moet «LET x=1» zijn.
- Variabelenamen voor arrays en strings mogen slechts één letter lang zijn. Bij getallen zijn langere namen mogelijk.
- THEN na IF is verplicht. Evenzo kan GO TO na THEN niet worden weggelaten.
- Er is geen ELSE-statement.
- Het commando DIM start met index 1. In veel Basic-dialecten start het met 0.
- Meerdere commando's per regel zijn mogelijk en worden gescheiden door een dubbele punt. Hierbij moet je echter opmerken dat de interpreter bij een IF-statement direct naar de volgende regel springt als de voorwaarde niet is voldaan.
De programmering van «Mastermind»
Mastermind komt uit de analoge wereld en is een denkspel voor twee personen uit 1970. Eigenlijk speelt per ronde slechts één persoon, de andere geeft alleen feedback. Daarmee is «Mastermind» perfect geschikt voor een computeradaptatie als singleplayer.

Hermex Mastermind decoderingsspel Plug-in spel Logica spel Codebreker spel
Engels, 2 Spelers
Voor de kleurencombinatie zijn zes verschillende kleuren beschikbaar. Daarbij komen zwart en wit om de feedback te signaleren. Zwart betekent dat de steen de juiste kleur heeft en op de juiste positie ligt. Wit betekent dat deze kleur wel voorkomt, maar niet op deze plaats.
Acht kleuren, dat past bij de ZX Spectrum: deze kan acht kleuren in elk twee helderheidsniveaus weergeven, dus in totaal 16 kleuren. Waarbij bij de donkerdere kleuren de verschillen moeilijk en bij zwart nauwelijks te herkennen zijn. Het duidelijkst is het verschil bij wit: in de donkere versie is het grijs. Om deze negende kleur was ik blij, omdat de achtergrond een andere kleur moest hebben dan de in het spel gebruikte kleuren.
Het enige moeilijke bij het programmeren van het spel was het algoritme voor de correcte feedback. Aanvankelijke pogingen werkten alleen in bepaalde gevallen correct – bijvoorbeeld als elke kleur slechts één keer voorkomt. Het correcte, finale algoritme controleert het antwoord eenmaal op voltreffers (zwart) en dan nog eenmaal op halftreffers (wit). Het markeert daarbij alle treffers, zodat ze niet dubbel worden geteld.
Programma opslaan en laden
Ik heb het spel in de emulator geprogrammeerd, voornamelijk vanwege de hierboven beschreven mogelijkheid tot automatische regelnummering. Uiteindelijk wil ik het toch op de Spectrum-hardware kunnen spelen. Daarvoor maak ik met het menucommando «Media > Tape > Save As» een tzx-bestand aan. Dit is een cassette-image – het gangbare opslagmedium voor de ZX Spectrum. Aangezien ook The Spectrum onder de motorkap een emulator is, kan hij tzx-bestanden inlezen. Om het programma op een echte ZX Spectrum uit de jaren 80 te laden, zou men met een hulpmiddel uit de image een geluidsbestand moeten creëren en dit dan afspelen.
Zo laad je een tzx-bestand in The Spectrum:
- Steek de USB-stick met het bestand in een vrije slot.
- Navigeer met toets 5 naar links door de games, totdat het USB-symbool verschijnt.
- Druk op «M», kies dan in de bestandsbrowser de game en start deze met «M».
- Typ «R» om het commando «RUN» in te voeren en dan de Enter-toets.
Zo laad je een tzx-bestand in Fuse:
- Open het bestand met «File > Open File».
- Typ «R» voor «RUN» + Enter.
Hier is Mastermind als gezipt tzx-bestand. Een online-emulator om snel uit te proberen is JSSpeccy.
Mijn belangstelling voor computers en schrijven leidde me relatief vroeg (2000) naar de technische journalistiek. Ik ben geïnteresseerd in hoe je technologie kunt gebruiken zonder gebruikt te worden. In mijn vrije tijd maak ik graag muziek waarbij ik mijn gemiddelde talent compenseer met een enorme passie.
Interessante feiten uit de wereld van producten, een kijkje achter de schermen van fabrikanten en portretten van interessante mensen.
Alles tonen








