Als je een ontwikkelaar een aangepaste Xbox geeft, repareren ze Halo 2

[Ryan Miceli] Ik heb een paar jaar auditing en reverse engineering gedaan Halo 2 Toen een vriend hem om een ​​gunst vroeg, bouwde zijn vriend een verbeterde Xbox met aanzienlijke overklokken, RAM-upgrades, BIOS-hacks en processorvervanging. Het doel was simpel: de voorgeprogrammeerde maximale resolutie corrigeren van 480p naar 720p en misschien zelfs 1080p. Met een dubbele CPU-snelheid, maar een toename van slechts 15% in GPU-snelheid, [Ryan] Je bent op je werk aangekomen.

De eerste stap was het vergroten van de DirectX-framegrootte. Het verhogen van de uitvoerresolutie heeft geleid tot ernstige grafische storingen en weergavefouten. De game gebruikt DirectX-frames meerdere keren als geheugenweergave, en elke weergave codeert bovenaan een header met nuttige informatie zoals breedte, hoogte en verdeling. Na dit gecorrigeerd te hebben, [Ryan] Er was iets duidelijker, maar sommige modellen laadden niet (vooral het water in het titelscherm). Het antwoord was een textuuropbouwlaag. Xbox heeft een hardwarelimiet van slechts vier texturen per shader-passage, wat betekent dat je een buffer met resolutiegrootte nodig hebt om texturen te verzamelen als je meer dan vier texturen wilt samplen. Een poging om het spel uit te voeren resulteerde in een crash omdat er onvoldoende geheugen was. Xbox [Ryan] De upgrade werkte met 64 MB extra RAM, maar de geheugentoewijzing was binnen Halo 2 Ik heb er nog geen profijt van gehad.

Om te zien waar de herinnering naartoe gaat, [Ryan] Ik heb een nieuwe tool geschreven genaamd Xbox-opnamesoftware Om te laten zien waar geheugen wordt toegewezen en door wie. De meeste games maken aanvankelijk een aantal grote aanpassingen aan de oorspronkelijke allocator en gooien deze vervolgens in een aangepaste allocator die voor de game is afgestemd. De extra 64 MB RAM bevond zich echter in de ontwikkelingsconsoles en werd toegewezen aan patch-RAM, wat betekende dat de GPU er geen goede toegang toe had. Bovendien bevindt zich tussen de onderste en bovenste 64 MB de Xbox-kernel. Nu is het een oefening in het debuggen van de gewoonte om met twee geheugenblokken te werken in plaats van één aaneengesloten. Het verplaatst ook runtime-gegevens naar de bovenste 64 MB, terwijl video-aanpassingen onderaan blijven staan. uiteindelijk, [Ryan] Ik vond het gemakkelijker om de spelkernel te patchen om geheugentoewijzingen mogelijk te maken die de GPU kan gebruiken in de bovenste 64 MB geheugen. Het draaien van de game op 720p resulteerde in slechts een semi-speelbare framesnelheid, die in sommige scènes zelfs tot 10 fps daalde.

READ  Mortal Kombat 1 Khaos Reigns Story DLC arriveert in september en onthult nieuwe gastjagers en dieren

Na enkele voorafgaande tests, [Ryan] Ik concludeerde dat het niet de GPU of CPU was die dit veroorzaakte, maar de swapketen. Halo 2 Het schakelt standaard VSync in, wat betekent dat het moet wachten tot een lege periode voordat het tussen de twee bufferframes kan schakelen. Een eenvoudige aanpassing is het toevoegen van een derde cachingframe. De gemiddelde FPS steeg met 10% en de GPU werd het volgende knelpunt dat moest worden aangepast. Met lichte GPU-overklokken kwam de game heel dicht bij 30 fps. Gelukkig, [Ryan]Er was geen BIOS-aanpassing nodig omdat de GPU-klokhardware kon worden ingesteld en aangepast als MMIO. Na reverse engineering is er een foutopsporingsfunctie toegevoegd voor visuele cache-uitvoer, [Ryan] De textuur- en geometriecache is aangepast om de pop-in waar het originele spel berucht om was te verminderen.

Over het geheel genomen is het een geweldige hack die maanden hard werken heeft gekost. De code voor de patch staat op GithubEr is een video na de pauze waarin gepatchte en niet-gepatchte games worden vergeleken. Als je nog steeds meer Halo in je leven nodig hebt, waarom maak je dan niet een realistisch gevechtsgeweer uit de game?

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *