Eerder dit jaar deelden we het verhaal over het gebruik van een NES-klassieker Tetris De speler bereikte voor het eerst het “kill-scherm” van het spel en activeerde een crash na een verbazingwekkende prestatie van 40 minuten en 1.511 lijnen. Nu gebruiken sommige spelers die screensaver – en een deel van de complexe geheugenmanipulatie die deze mogelijk maakt – om nieuw gedrag in versies ervan te coderen Tetris Werkt op ongewijzigde apparaten en cartridges. We hebben soortgelijke problemen met het uitvoeren van willekeurige code besproken in games als Super Mario Wereld, Papieren MarioEn De legende van Zelda: Ocarina of Time in het verleden. De basismanier om externe code in NES in te voegen Tetris Hij was Het wordt in ieder geval sinds 2021 publiekelijk getheoretiseerd Toen de spelers het aan het onderzoeken waren Gedecompileerde spelcode (HydrantDude, die heeft Ik ging dieper Tetris Crash in het verledenOok Hij zegt De samenleving heeft altijd een bijzonder bekende manier gehad om de volledige controle over dingen te krijgen Tetris‘ram).
Maar Recente video van Displaced Gamers Het neemt het idee over van een specifieke theorie naar een algemene implementatie, en gaat tot in de kleinste details in op hoe je een NES kunt krijgen Tetris Om te beginnen met het lezen van de hoogste scoretabellen van het spel als instructies voor de machinecode.
Plezier met controlepoorten
Pak een exemplaar van de NES Tetris Meestal mogelijk vanwege de specifieke manier waarop het spel crasht. Zonder erin te komen Veel details,crash op NES Tetris Dit treedt op wanneer de spelscoreprocessor er te lang over doet om de nieuwe score tussen frames te berekenen, wat kan gebeuren na niveau 155. Wanneer deze vertraging optreedt, wordt een deel van de besturingscode onderbroken door de nieuwe frameschrijfroutine, waardoor deze naar een onbedoeld deel van het geheugen Krijg willekeurig toegang tot het spel om naar de volgende instructies te zoeken.
Deze onverwachte onderbreking zorgt er meestal voor dat code naar de eerste startverwerking van RAM springt, waar afval als code wordt gelezen en vaak tot een snelle crash leidt. Maar spelers kunnen deze sprong manipuleren dankzij het onbekende mysterie van hoe ze dit moeten doen Tetris Verwerkt mogelijke invoer wanneer gespeeld op de Japanse versie van de console, de Famicom.
In tegenstelling tot het Amerikaanse Nintendo Entertainment System beschikt het Japanse Famicom-systeem over twee controllers die op het apparaat zijn aangesloten. Spelers die controllers van derden willen gebruiken, kunnen deze hierop aansluiten Uitbreidingspoort Aan de voorkant van het systeem. de Tetris De spelcode leest de invoer van deze “extra” controllerpoort, die twee extra standaard NES-controllers kan bevatten Door gebruik te maken van een adapter (Dit is waar, ook al is de Famicom Ik heb een heel andere versie van Tetris Van kogelvrije software).
Toevallig het RAM-gebied Tetris Gebruik om deze extra controllerinvoer te verwerken, wordt ook gebruikt voor de geheugenlocatie van de sprongroutine die we eerder hebben besproken. Wanneer deze sprongroutine dus wordt onderbroken door een storing, bewaart RAM gegevens die de knoppen vertegenwoordigen die op deze controllers zijn ingedrukt. Dit geeft spelers een potentiële manier om nauwkeurig te bepalen waar de spelcode naartoe gaat na een crash.
Coderen in de hogecijferstabel
Voor de sprongcontrolemethode van Displaced Gamers moet de speler Boven op de derde controller en Rechts, Links en Omlaag op de vierde controller ingedrukt houden (deze laatste combinatie vereist enige manipulatie van de controller om gelijktijdige invoer naar links en rechts mogelijk te maken). Als je dit doet, wordt de sprongcode naar het RAM-gebied gestuurd dat de namen en scores bevat voor de lijst met topscores van het spel, waardoor er meer RAM vrijkomt waar de speler rechtstreeks op kan reageren.
Door ‘(G’) in het doelgedeelte van de tabel met hoge scores voor type B te plaatsen, kunnen we het spel dwingen om naar laatst Het tabelgebied High Scores, waar de namen en scores in volgorde worden voorgelezen, zoals wat Displaced Gamers de “bare metal”-code noemt, waarbij de letters en cijfers de opcodes voor de NES CPU vertegenwoordigen.
Helaas zijn er slechts 43 mogelijke symbolen die kunnen worden gebruikt in het naaminvoergebied en 10 verschillende cijfers die deel kunnen uitmaken van een hoge score. Dit betekent slechts een klein deel van Instructies voor bedieningscodes beschikbaar voor NES Ze kunnen worden “hardgecodeerd” in de tabel met hoge scores met behulp van het beschikbare aanvalsoppervlak.
Ondanks deze beperkingen kon Displaced Gamers een kort proof-of-concept-codefragment coderen dat kan worden vertaald in hoog scorende tabelgegevens (A name of '))"-P)'
En de tweede plaats met een score van 8.575 in A-Type doet er veel toe, mocht je je dat afvragen). Deze eenvoudige routine plaatst twee nullen in de bovenste twee cijfers van de spelscore, waardoor de verwerkingstijd van de score wordt verkort die een crash zou kunnen veroorzaken (hoewel de score uiteindelijk weer de “gevarenzone” van een crash zal bereiken naarmate het spel vordert).
Het ontbreken van een spaarsysteem met batterijvoeding betekent uiteraard dat hackers deze hoge scores handmatig moeten behalen (en deze complexe namen moeten invoeren) elke keer dat ze het apparaat aanzetten. Tetris Op diverse aandelen. Bovendien laat de beperkte ruimte in de tabel met hoge scores weinig ruimte over voor directe codering van complexe programma’s bovenaan TetrisWerkelijke code. Maar er zijn manieren om deze beperking te overwinnen. Hydrant Kerel Hij schrijft Voor een specifieke reeks hoog scorende namen en nummers die ‘build[s] Een andere Bootloader bouwt een andere bootloader die volledige controle geeft over het volledige RAM-geheugen.
Met dit soort volledige controle zou een gamer van een hoger niveau in theorie de NES kunnen hercoderen Tetris Om de crashfouten volledig op te lossen. Dit kan erg handig zijn voor spelers die dat wel zijn Ik heb moeite om level 255 te halenwaarbij de game daadwerkelijk terugkeert naar Quiet Level 0. In de tussentijd kun je volgens mij altijd gewoon doorgaan Volg de leiding Super Mario Wereld com. snellopers En converteren Tetris binnen Fladderende vogel.
‘Reader. Furious humble travel enthusiast. Extreme food scientist. Writer. Communicator.’