De BBC Tetris Companion

In de komende weken zal ik meer diepgaande artikelen publiceren over de details van het Bridgetris-project. Dit bericht is een korter overzicht van het gehele project om een ruw idee te geven van de algemene taken en de voortgang.

Een brug naar het verleden

Eerst een beetje geschiedenis. Wat is de BBC Bridge Companion, en waarom heeft dit ding mijn aandacht en vrije uren in beslag genomen voor een ronduit belachelijke en onrechtvaardigbare hoeveelheid tijd? Kort gezegd was de BBC Bridge Companion een spelcomputer die door de British Broadcasting Corporation was uitgebracht om je te leren hoe je het kaartspel bridge op je televisie kon spelen. Het draagt het BBC-merk omdat ze destijds een populaire televisieshow over bridge hadden, BBC Bridge Club, met topspelers die zochten naar een nieuwe manier om nieuwelingen aan het spel te introduceren.

Ik betwijfel echter of er veel zijn verkocht, want volgens Wikipedia kostte het apparaat bij introductie in 1985 £200! Je had voor £175 een ZX Spectrum van 48k kunnen kopen (in 1982; waarschijnlijk voor veel minder tegen 1985) en had dan nog genoeg geld overgehouden om bridge-spellen daarvoor aan te schaffen. Ik moet ervan uitgaan dat het later flink in prijs is verlaagd, of dat het nooit echt voor die prijs is verkocht.

Software werd gedistribueerd op ROM-cartridges. Voor zover ik kan vaststellen, zijn er slechts negen versies uitgebracht:

  • Advanced Bidding
  • Advanced Defence
  • Bridge Builder
  • Club Play 1
  • Club Play 2
  • Club Play 3
  • Conventions 1
  • Duplicate 1
  • Master Play 1

Ik kon geen gegevens vinden over hoeveel de cartridges kostten, maar het kan niet goedkoop zijn geweest. Elke cartridge lijkt te zijn geleverd in een grote, gegoten plastic beschermdoos met een dik, spiraalgebonden handboek dat het meeste van het lesmateriaal bevatte. Bridge Builder werd standaard bij het systeem geleverd.

De specificaties

Het is de hardware die mijn interesse wekte. Dit ding is opgebouwd met een Z80 en onze oude bekende, de TI TMS VDP. Specifiek is het een TMS9129 — de PAL-variant van de TMS9128, die op zijn beurt de RGB-variant is van de TMS9118 (die je eerder bij mij hebt gezien toen ik hem uit de Casio PV-7 MSX verbande). Hij heeft zelfs de "volledige" 16 kB VRAM!

Zelfs in 1985 was dat veel 8-bit rekenkracht; praktisch een ColecoVision. Hoewel ik nog niet alle cartridges heb geprobeerd, is het niet zo dat de Bridge Companion-spellen echt optimaal gebruik maken van die krachtige VDP en CPU.

Robert Maxwell is niet nodig

Ik dacht dat het zonde zou zijn om niet in ieder geval te proberen de console wat gelukkiger te maken. Bovendien heb ik sinds mijn vorige project geen echt dom, Coleco-achtig homebrew-project meer gedaan. In het ergste geval kan ik mijn spel altijd porten naar de genoemde ColecoVision, zodat er tenminste één andere persoon op aarde het kan proberen.

Ik denk niet dat ik de eerste ben die dit probeert: het lijkt erop dat cdoty op AtariAge al aan tinkering met hun BBCBC is begonnen.

Welk spel zou een goede kandidaat zijn voor de Bridge Companion? Ideaal gezien moet het iets zijn waar iedereen van houdt, met tijdloze regels en een redelijke dosis uitdaging. Ook moet je het kunnen spelen met de super onhandige, ATM-achtige knoppen bovenop de console. Het enige antwoord is Tetris. Of, om preciezer te zijn, een Tetris-achtig spel.

Is dit een echte Tetris? The Tetris Company zou "nee" zeggen: het volgt niet de volledige regelset, en ik betaal hen geen licentievergoedingen. Daarom heet mijn spel eigenlijk Bridgetris, waarvan ik denk dat iedereen ermee eens is dat dit absoluut niet dezelfde reeks letters is als die me in juridische problemen zou brengen.

Nu moet ik bekennen: hoewel ik veel ervaring heb met het programmeren van spellen, en nog veel meer met het programmeren van software in het algemeen, had ik pas zeer recent een Tetris-achtig spel gemaakt. Zoals bij veel andere projecten die ik eeuwig heb uitgesteld, kwam het meestal neer op één mentale blokkade die geen groot probleem bleek te zijn toen ik het probleem daadwerkelijk ging aanpakken. Om redenen die ik niet ken, zat er decennia lang in mijn hoofd dat de code voor het roteren van stukjes zeer complex is en veel gepriegel vereist.

Tijdens het programmeren van een Tetris-achtig spel in Rust als onderdeel van een oefening tegen de verveling tijdens de pandemie, ontdekte ik dat "stukrotatie" in de meeste Tetris-spellen simpelweg hardcoded is. Je definieert één draaipunt en draait het stuk simpelweg om. Past het niet? Dan roteer je niet¹.

Dit was dus gaan worden als een eenvoudig klusje. Alles wat ik nu moet doen is:

  1. Uitzoeken hoe ik mijn eigen code kan draaien op een spelcomputer die ik nog nooit heb gezien en fysiek niet in mijn bezit heb;
  2. Een volledig Tetris-spel schrijven in Z80-assembly, zonder dat ik sinds het programmeren van de TI-83 Plus op de middelbare school een assembly-programma groter dan "hello world" heb geschreven;
  3. Het blogbericht hierover schrijven. Dat deel doe ik nu. Hallo!

Makkelijk!

De console foppen

Op sommige systemen is het accepteren van een game-ROM simpelweg een kwestie van de ROM op een plek zetten waar de CPU naartoe springt bij het opstarten. Dat is het geval bij de Sega SG-1000, die makkelijk te programmeren is. Zolang je spel verschijnt op $0000, wordt het automatisch uitgevoerd wanneer de Z80-CPU uit reset komt.

De BBC Bridge Companion bevat echter, net als de ColecoVision, een vrij complexe BIOS op een interne ROM. Wanneer de Bridge Companion opstart, is het die BIOS die geladen wordt op $0000. Als de BIOS er niet van overtuigd is dat er een cartridge is aangesloten, krijg je de instructie om het systeem uit te schakelen en een cartridge in te voegen.

Dus hoe overtuigen we de BIOS ervan dat we een legitieme cartridge zijn? Door de BIOS via reverse engineering te analyseren. Ik heb hem geopend in de MAME-debugger en instructie voor instructie doorgegaan om precies uit te zoeken waarnaar de BBC Bridge Companion op zoek was in de ROM op de cartridge.

Na een paar avonden waarin ik een legitieme cartridge vergeleek met mijn beginnende homebrew-versie, slaagde ik er uiteindelijk in een header te bouwen die de Companion zou overtuigen om een stuk code uit te voeren dat ik zelf had geschreven.

En vanaf dat moment... kon de BBC me niet meer tegenhouden.

Het spel schrijven

Hoewel ik het vorige spel in Rust had geschreven, is er een groot gat tussen een hogetaal zoals Rust en het schrijven van iets in zeer laag-niveau assembly-taal. Assembly is extreem pedant: je beschrijft elke kleine stap die de computer moet ondernemen in nauwgezet detail.

Dit is geweldig, omdat het betekent dat de computer geen stappen zet die je niet wilt, maar het betekent ook dat je een simpele gedachte in je hoofd ("misschien moet ik de blokken laten animeren") heel snel kunt omzetten in meer dan 500 regels code.

Bovendien kende ik de Z80-assemblytaal niet echt. Ik moest deze en al zijn leuke eigenaardigheden leren terwijl ik tegelijkertijd een spel maakte. Niemand zou aanraden om je leven zo in te richten, maar het werkte verrassend goed. Kijk echter alsjeblieft niet naar mijn code. Het is een spaghetti-bende en ongeveer zo ongeoptimaliseerd als je het kunt maken.

Tijdens het proces maakte ik bugs. Veel, heel veel bugs.

Het blijkt dat assembly-taal eigenlijk best eenvoudig en leuk is! Je hebt alleen een kleine overhead van het nadenken over zaken. Nadat ik wat van de "strengheid" die ik verwacht van werken in een hogere taal losliet en gewoon begon te doen wat ik wilde, begon de code te stromen. Dat is de echte les in game-ontwikkeling, kinderen.

Bonus: Mijn eigen Bridge Companion repareren

Ergens is er een land waar Bridge Companions aan de bomen groeien. Sonic the Hedgehog-muziek speelt daar te langzaam en alles is in zwart-wit vanwege PAL. In vervlogen tijden had ik in een wankelig vliegtuig moeten stappen en over de wereld moeten vliegen om van deze overvloed te genieten.

In plaats daarvan ging ik naar eBay en betaalde ik veel te veel voor een (in doos!) Bridge Companion van mezelf.

Toen hij aankwam, was ik teleurgesteld te ontdekken dat de cartridge-slot beschadigd was en de pinnen verbogen waren. Zelfs met een tandarts-pick en enkele zorgvuldig gekozen krachttermen lukte het me niet om een cartridge te laten lezen of zelfs maar soepel in te voegen, en ik moest het slot vervangen. Na een paar weken zoeken lukte het me om een vervanger van AliExpress op die plek te monteren.

Ik kon eindelijk echte spellen spelen op mijn echte Bridge Companion. Echte spellen, zoals degene die ik aan het schrijven was.

De echte ontwikkelaars ontdekken

Hoewel hier zeker meer over geschreven kan worden, kwam ik via de verpakking te weten dat een bedrijf genaamd Heber deze hardware had samengesteld. Tot mijn verbazing ontdekte ik tijdens het kijken naar een RMC Retro-video dat ze filmden in het oude hoofdkantoor van Heber!

Ik nam snel contact op en kreeg enkele documenten van Richard Horne, die betrokken was bij de engineering van het apparaat. In de toekomst denk ik dat het de moeite waard zou zijn om hem te interviewen voor meer primaire broninformatie over het systeem, maar deze serie artikelen is eigenlijk al te laat.

Superbonus: Een eigen cartridge-PCB maken

Software voor de Bridge Companion komt op cartridges, net als bijna elk ander gamesysteem uit de jaren 80. Ik had slechts een paar Bridge Companion-cartridges liggen en wilde ze niet uit elkaar halen om mijn spel te debuggen.

De meeste cartridges zijn simpelweg een ROM-chip die het programma bevat. Omdat de Bridge Companion-cartridges een gangbare UV EPROM gebruikten, kende ik de pinout al. Met de continuiteitstest van mijn trouwe multimeter kon ik uitzoeken welke pinnen naar die ROM gingen en zo een werkende kopie maken van de originele cartridge-PCB.

Ik ben zelfs nog iets verder gegaan dan dat, maar dat is een verhaal voor een andere keer.

Hyperbonus: Een composiet-modificatie bedenken

Als artefact uit zijn tijd geeft de Bridge Companion alleen RF-video via een Astec RF-modulator. Als ik in de jaren 80 in het Verenigd Koninkrijk had gewoond, zou dit heel makkelijk zijn: het ding aansluiten op een switchbox, de kabels naar de antenne-ingang van mijn tv leiden en hem aanzetten wanneer het tijd was voor bridge.

Tegenwoordig is dat niet zo eenvoudig: natuurlijk kan ik hem inpluggen in een tv, maar daar zitten een paar problemen aan. Canada heeft niet dezelfde kanaalfrequenties, en bovendien is de wereld sterk veranderd sinds terrestriële televisie hier de dienst uitmaakte. RF zag er niet goed uit op de Bridge Companion, zeker niet via een adapter.

Een betere optie is het gebruik van composietvideo. Hoewel de gele stekker ook snel verdwijnt bij nieuwe televisies, is het nog steeds de beste optie om de videokwaliteit van de Bridge Companion snel te verbeteren².

Ik heb veel tijd besteed aan het bestuderen van scans van schema's — die werden verstrekt door de eerder genoemde Richard Horne van Heber, dank je Richard! — en het uitzoeken van de verschillende niveaus met een oscilloscoop, in het streven naar de hoogst mogelijke kwaliteit modificatie. Uiteindelijk heb ik echter iets heel simpels gedaan, vergelijkbaar met mijn eerdere serie over de Nintendo Famicom composiet-mod.

Ik denk dat het er best goed uitziet!

Wat volgt er nog?

Bedankt voor het lezen van wat in feite een uitgebreide samenvatting van het project is. Als je de komende weken terug wilt komen om in de details van elk subproject te duiken, ben je van harte welkom.

De volgende hoofdstukken zijn:

  • 4 augustus 2026: Het repareren van een kapotte Bridge Companion en het maken van die cartridge-PCB.
  • 11 augustus 2026: Het bouwen van een composiet-mod voor die Bridge Companion, zodat ik hem op mijn tv kan zien.
  • 18 augustus 2026: Het laatste hoofdstuk! Daadwerkelijk gaan zitten en een Tetris-achtig spel programmeren.

Zodra alle berichten zijn voltooid, zal ik ook de ROM en de broncode vrijgeven. Ik hoop dat jullie net zoveel plezier hebben aan het lezen over dit grote project als ik aan het werken eraan.

***

¹ In veel Tetris-spellen zorgt roteren tegen een muur ervoor dat je naar buiten wordt geduwd, een fenomeen dat bekend staat als "wall kicking". Dat maakt geen deel uit van de regels van dit spel; kom voor dat terug bij Bridgetris The BBC Master.

² Omdat het een TMS9129 is, genereert de Bridge Companion intern eigenlijk YCbCr-video (conventioneel "component", maar de niveaus zijn hier anders) en converteert deze naar enkelkanaals composiet voordat het naar de RF-modulator wordt gestuurd om in "televisie" te worden veranderd. Een RGB-mod van een Bridge Companion is niet onmogelijk, noch zou het bijzonder moeilijk zijn voor modders!