Een Cartridge die de Machine Test waarin hij Zit
Elke verzamelaar van oude hardware kent diezelfde stilte. Een Game Boy arriveert, het scherm licht op, een spel start en er is niets overduidelijk mis. Of de machine daadwerkelijk gezond is, is een vraag die niemand kan beantwoorden, omdat er niets is om het mee te vergelijken.
Deze collectie heeft nu een antwoord, en dat komt in de vorm van een cartridge.
De GB Test Lab is de tweede cartridge die hier is gebouwd. De eerste is een referentiewerk, een catalogus en een wiki op een cartridge, in de stijl van de InfoGenius-titels uit 1991. Deze cartridge doet echter iets heel anders: hij onderzoekt de machine waarin hij is geplaatst en toont de resultaten in cijfers op het scherm.
Systeemvereisten
- Een klassieke Game Boy: Ontworpen voor de DMG-01; de basiswaarden zijn gebaseerd op de DMG-01 (niet bedoeld voor Pocket, Color, Game Boy Advance of latere modellen).
- Een flash-cartridge: Moet MBC5 ondersteunen en 256 kilobytes geheugen hebben. Let op: goedkope cartridges die alleen MBC1 of MBC3 emuleren, of stoppen bij 32 kilobytes, resulteren in een zwart scherm. Een EverDrive werkt wel.
- Batterij in de cartridge: Noodzakelijk als de records bewaard moeten blijven nadat de machine is uitgeschakeld.
- Verse alkalinebatterijen: Een flash-cartridge verbruikt aanzienlijk meer stroom dan een gewoon spel. Zwakke batterijen kunnen ervoor zorgen dat een Game Boy fouten vertoont die lijken op defecten in de machine zelf.
- Voor het kabel-scherm: Een tweede Game Boy, een link-kabel en een tweede kopie van de cartridge.
- Voor rapporten op papier: Een Game Boy Printer en thermisch papier.
Historische context: Nintendo was de eerste
Het idee is niet nieuw. Nintendo's serviceafdelingen gebruikten een testcartridge waarvan de printplaat is gemarkeerd met DMG-AGING-01. "Ageing" betekent in deze context het langdurig onder belasting draaien van een machine om te zien wat er bezwijkt.
Die cartridge controleerde het scherm, de knoppen, de luidspreker, het geheugen en de geluidschip. Hij bestond omdat een reparatiewerkplaats behoefte heeft aan een hard "ja" of "nee" in plaats van een impressie.
Moderne homebrew-ontwikkelaars hebben dit gevolgd en er zijn tegenwoordig verschillende testcartridges beschikbaar. De meeste hiervan tonen een patroon (een raster, een grijswaardenverloop, een toon) en laten de gebruiker zelf beslissen of het goed is. Dat is de juiste aanpak voor een scherm, maar de verkeerde voor alle andere componenten.
Mogelijkheden en beperkingen
Het is belangrijk om de grenzen duidelijk te stellen. De DMG-01 heeft geen analoog-naar-digitaal converter (ADC). Hij kan geen spanning meten, waardoor de batterijconditie onzichtbaar is voor software. Ook het contrastwiel en het volumewiel zijn analoog en zijn niet verbonden met iets dat de processor kan zien. De luidspreker, de versterker en de koptelefoonaansluiting bevinden zich achter het laatste register dat de software kan bereiken.
Bovendien kan de machine zijn eigen beeld niet zien. Er is geen hardware die terugleest wat het scherm weergeeft, dus dode pixels en verticale lijnen van een versleten lintkabel moeten altijd door menselijke ogen worden vastgesteld.
Alles daarbuiten is echter meetbaar.
De Sneltest (Quick Check)
Een verzamelaar die een onbekende Game Boy vasthoudt, stelt eerst de vraag of de machine het überhaupt waard is om te behouden. De cartridge beantwoordt dit met één menu-optie: de Quick Check.
De Quick Check voert achtereenvolgens tests uit op het geheugen, de cartridge-slot, de interrupts en een algemene systeemcheck, waarna een eindoordeel volgt. Deze vier tests vereisen geen actie van de gebruiker.
De run duurt minder dan een minuut. Het verdict heeft drie toestanden:
- PASSED: Alle vier de tests zijn geslaagd.
- FAILED: Ten minste één test is mislukt.
- INCOMPLETE: Een test is nooit uitgevoerd (wat verschilt van falen; een test die geen antwoord heeft gegeven, kan niet als 'geslaagd' worden aangemerkt).
Een machine die hier "Passed" scoort, kan nog steeds een defecte luidspreker of een bekrast scherm hebben.
Meting van knop-bounce (Contact Bounce)
Een knop in een Game Boy is een rubberen pad met een geleidend oppervlak. Bij het indrukken sluit het contact niet in één keer; het sluit, opent en sluit opnieuw binnen enkele duizenden delen van een seconde. Dit is contact bounce. Dit is normaal en mechanisch, maar een versleten pad "bounced" langer en vaker dan een nieuwe.
Dit kan worden gemeten zonder de behuizing te openen. De cartridge leest het toetsenregister in een strakke loop (ongeveer elke tien microseconden). Wanneer een contact sluit, observeert de software een venster van 30 milliseconden en registreert twee zaken:
- Hoe vaak het contact van status veranderde.
- Hoe lang het duurde van de eerste tot de laatste verandering.
Een schone indrukking geeft één rand (edge) en 0,00 milliseconden. Een versleten pad geeft drie of vier randen verspreid over een milliseconde of meer.
Registratie per console
Een enkele meting is een momentopname. Om te bepalen of een machine verslechtert, zijn meerdere metingen nodig. De cartridge houdt daarom een record bij voor elke console, aangeduid met een nummer.
Elk record bevat de bounce-cijfers van alle acht toetsen, het verdict van elke test, het resultaat van de burn-in en het model. Dit overleeft het uitschakelen van de stroom. Omdat de hardware niet aangeeft in welke machine de cartridge zit, vermeldt het hoofdmenu altijd naar welk machinenummer er wordt geschreven.
Geheugentests en patronen
Work RAM en Video RAM zijn aparte chips op de printplaat van een DMG-01 en kunnen defect raken. De cartridge schrijft vijf patronen over elk gebied en leest deze volledig terug.
De vijf patronen zijn:
- Alle nullen.
- Alle enen.
- Twee geblokte patronen (om te controleren of een bit vastzit aan zijn buurman).
- Een adres-afhankelijk patroon: er wordt een waarde geschreven die afhangt van het adres van de cel. Dit spoort kapotte of verwisselde adreslijnen op.
Bij een fout wordt het adres en zowel de geschreven als de teruggegeven waarde vermeld, zodat een reparateur precies weet welke chip of bit defect is. Daarnaast wordt de sprite transfer getest, waarbij 160 bytes in één keer worden verplaatst, een proces dat door bijna elk spel wordt gebruikt.
Interrupties testen
Een processor die een van zijn vijf interruptbronnen heeft verloren, blijft gewoon draaien. Sommige spellen crashen, maar de meeste niet, wat dit het moeilijkste soort defect maakt om te vinden.
De cartridge vraagt elke bron of deze zijn vlag omhoog brengt. De joypad-bron is hierbij bijzonder, omdat deze een 'edge' rapporteert en geen 'level'. Een toets moet worden ingedrukt terwijl de test wacht; als een toets wordt vastgehouden maar de lijn "nee" rapporteert, is de edge verdwenen. Dit is een defect dat de bounce-test niet kan zien.
De cartridge-slot
De cartridge berekent een checksum van zijn eigen ROM over alle zestien banken. Als deze niet klopt, is er iets mis met de slot, maar het zegt niet wat.
Een apart scherm controleert de lijnen één voor één:
- Adreslijnen: Dertien lijnen worden getest met een 'march over the powers of two'.
- Data-lijnen: Acht lijnen worden getest met walking ones en zeros.
Als een lijn faalt, wordt deze specifiek benoemd (bijv. A7 of D3), waardoor men weet of de slot simpelweg vuil is of dat er een specifiek contact niet werkt.
Detectie van losse contacten
Bij een dertig jaar oude connector is een contact vaak niet dood, maar los. Een enkele meting kan dit niet vinden. De cartridge voert daarom dezelfde test herhaaldelijk uit en telt hoe vaak het resultaat verandert.
Door de cartridge voorzichtig te bewegen, te drukken of de console te kantelen terwijl de test draait, kan men vaststellen waar het contact wegvalt. Dit wordt niet opgeslagen in het record, omdat het een observatie is die afhangt van de fysieke handeling van de tester.
Zelfdiagnose van de cartridge
De cartridge controleert ook zichzelf. Een cartridge-header is een claim over welke mapper-chip is geïnstalleerd en hoeveel batterij-geheugen er is. Goedkope flash-cartridges gebruiken vaak een gekopieerde header van een echt spel, maar hebben een vereenvoudigde mapper.
Het scherm vergelijkt de claims met de werkelijkheid:
- Mapper: Er wordt gecontroleerd of de mapper bank nul correct in het bovenste venster plaatst (MBC5) of bank één (MBC1/MBC3).
- Geheugen: Er wordt gecontroleerd hoeveel banken daadwerkelijk bestaan door verschillende waarden te schrijven en terug te lezen.
De link-poort en kabeltests
De link-poort heeft vaak verbogen contacten. De meeste tests vereisen geen kabel; door de console een byte te laten verzenden op zijn eigen klok, wordt bewezen dat het shift-register werkt.
Met een loopback-plug (een klein bruggetje tussen output en input) kunnen beide datalijnen afzonderlijk worden bewezen.
Kwaliteit van het kristal
Met twee machines en een link-kabel kan de enige absolute meting worden uitgevoerd: de snelheid van het kristal. Elke machine telt de tijd van de eerste tot de laatste transfer op zijn eigen teller. De ratio tussen deze cijfers is de ratio tussen de twee kristallen.
De onzekerheid is zeer gering (ongeveer vier delen per miljoen over 3,5 seconde), wat nauwkeuriger is dan het verschil tussen twee gezonde kristallen.
Stroomvoorziening en Burn-in
Batterijspanning kan niet direct worden gemeten, maar de effecten ervan wel. Het burn-in scherm voert herhaaldelijk zware taken uit (ROM lezen, geheugen schrijven, geluidschip aansturen).
Een zwakke batterij of een slechte soldeerverbinding uit zich als een herstart onder belasting. De cartridge markeert elke start in het batterij-geheugen, waardoor een afgebroken run wordt geregistreerd.
Rapportage en Printing
Om fouten bij het handmatig overschrijven te voorkomen, genereert de cartridge een rapport van zes pagina's, dat kan worden geprint via een Game Boy Printer:
- Verdict: Resultaat van elke test, machinenummer en model.
- Bounce: Cijfers van alle acht toetsen.
- Cartridge: Status van de gebruikte flash-cartridge.
- Code-uitleg: Uitleg bij de scan-codes.
- QR-code: Een door de Game Boy berekende QR-code met alle testresultaten.
- Handmatige notities: Ruimte voor naam van de machine, tester en datum.
Testen van de Game Boy Printer
De cartridge kan ook de printer zelf diagnosticeren via vier papierloze vragen:
- Identificatie: Bevestigt of er een printer (ID 81) is aangesloten.
- Status-byte: Leest de interne status (bijv. papierstoring, lage batterij, buffer vol).
- Kabel-check: Verstuurt acht pakketten en controleert of de checksums intact aankomen.
- Motor-check: Draait de roller een paar lijnen en controleert of de printer een 'jam' rapporteert.
Daarna kunnen twee papieren tests worden uitgevoerd: een dot check (alle 160 heaters van de printkop) en een exposure ladder (om de donkerte van het papier te kalibreren).
Ingebouwde Wiki
De cartridge bevat twintig artikelen over de Game Boy-hardware, van de processor tot de verschillende board-revisies. Elk artikel eindigt met een link naar het betreffende testscherm.
Authenticiteit van de processor
Software kan meestal niet zien of onderdelen origineel zijn, behalve bij de processor, vanwege specifieke hardware-fouten ("bugs") in de originele Sharp-chips:
- De Halt-bug: Wanneer interrupts zijn uitgeschakeld maar er al een wacht staat, stopt de originele chip niet en wordt de byte na de
halt-instructie twee keer uitgevoerd. - Interrupt-bug: Schrijven naar het register dat de status van de beeldhardware rapporteert, veroorzaakt een ongevraagde interrupt.
- Sprite-memory-bug: 16-bit rekenkunde op een adres in het sprite-geheugen corrumpeert een rij terwijl de beeldhardware dit geheugen leest.
Een processor die alle drie de fouten vertoont, is vrijwel zeker een originele Sharp-chip voor Nintendo.
Visuele evaluatie van het scherm
Omdat software het scherm niet kan "zien", biedt de cartridge patronen aan voor menselijke observatie:
- Lag-test: Wisselende balken. Op een origineel paneel vervagen deze naar grijs door traagheid; op een modern IPS-paneel blijven ze scherp.
- Contrast-test: Vier grijstinten. Op een origineel paneel verschuiven deze naar hun buren bij het draaien aan het contrastwiel.
- Kijkhoek-test: Het beeld van een origineel scherm wast uit en krijgt een groene tint bij het kantelen.
Browser-emulatie
De GB Test Lab is beschikbaar als browser-versie en als downloadbare ROM. Let op: contact-bounce en link-poort tests werken niet in een emulator, omdat deze hardware-eigenschappen simuleren in plaats van meten. Dit is juist het bewijs dat de cartridge hardware meet en geen software.
Changelog (Tijdlijn)
- September 2026: Eerste publieke versie released. Toegevoegd: voortgangsmeldingen bij printen, exposure ladder, dot check, uitgebreide wiki (20 artikelen), verbeterde menu's en uitgebreide QR-codes en rapporten.
- Maart 2026: Toegevoegd: PRINTER-tests, PANEL-patronen, CART-diagnose, processor-authenticiteitstests en uitgebreide interrupt-informatie.
- Augustus 2025: Unified footers, idle-schermen, interpretatie van monitor-cijfers, Quick Check en start-up bevestiging.
- April 2025: Toegevoegd: adres-decodering voor de slot, alle interruptbronnen, sprite-memory engine en Pong over de link-kabel.
- December 2024: Toegevoegd: help-scherm, records per Game Boy, twee-laags menu, wiki en specifieke lijn-identificatie voor SLOT en LINK.
- Augustus 2024: Toegevoegd: titel- en about-pagina, printing op GB Printer, QR-code generatie, burn-in run en batterij-log.
- Mei 2024: Toegevoegd: alle vier de geluidsstemmen, schermpatronen voor pixels/contrast/ghosting, batterij-probe voor save-cartridges en uitgebreide geheugentests.
- December 2023: Toegevoegd: live monitor, register fingerprint (modelherkenning), uitleg bij SELECT en bounce-metingen voor alle knoppen.
- September 2023: Start van het project. Opzet van de toolchain (GBDK-2020), font-keuze en definitie van de scope (diagnostische tool in plaats van game).
Groetjes,