[Ryan Miceli] Spędziłem kilka lat na audytowaniu i inżynierii wstecznej Halo 2 Kiedy znajomy poprosił go o przysługę, zbudował ulepszoną konsolę Xbox ze znacznym podkręcaniem, ulepszeniami pamięci RAM, hackami do BIOS-u i wymianą procesora. Cel był prosty: skorygować zaprogramowaną wcześniej maksymalną rozdzielczość z 480p na 720p, a może nawet 1080p. Przy dwukrotnie większej szybkości procesora, ale tylko o 15% wzroście szybkości procesora graficznego, [Ryan] Przyszedłeś do pracy.
Pierwszym krokiem było zwiększenie rozmiaru ramki DirectX. Zwiększenie rozdzielczości wyjściowej spowodowało poważne zakłócenia graficzne i błędy wyświetlania. Gra wielokrotnie wykorzystuje ramki DirectX do wyświetlania pamięci, a każdy ekran koduje na górze nagłówek z przydatnymi informacjami, takimi jak szerokość, wysokość i podział. Po poprawieniu tego, [Ryan] Coś było wyraźniejsze, ale niektóre modele nie ładowały się (zwłaszcza woda na ekranie tytułowym). Odpowiedzią była warstwa gromadząca teksturę. Xbox ma ograniczenie sprzętowe do próbkowania tylko czterech tekstur na przejście modułu cieniującego, co oznacza, że potrzebujesz bufora o wielkości rozdzielczości do zbierania tekstur, jeśli chcesz próbkować więcej niż cztery tekstury. Próba uruchomienia gry zakończyła się awarią z powodu braku pamięci. Xbox [Ryan] Aktualizacja działała z dodatkowymi 64 MB pamięci RAM, ale alokacja pamięci była włączona Halo 2 Jeszcze z tego nie skorzystałem.
Aby zobaczyć dokąd zmierza pamięć, [Ryan] Napisałem nowe narzędzie o nazwie Oprogramowanie do przechwytywania Xbox Aby pokazać, gdzie i przez kogo przydzielana jest pamięć. Większość gier dokonuje początkowo dużych dostosowań z oryginalnego alokatora, a następnie umieszcza go w niestandardowym alokatorze dostosowanym do gry. Jednak dodatkowe 64 MB pamięci RAM znajdowało się w konsolach programistycznych i było przydzielone do pamięci RAM, co oznaczało, że procesor graficzny nie mógł uzyskać do niej prawidłowego dostępu. Dodatkowo pomiędzy dolnym a górnym 64MB znajduje się jądro Xbox. Teraz jest to ćwiczenie polegające na debugowaniu zwyczaju pracy z dwoma blokami pamięci zamiast jednego sąsiadującego. Przenosi także dane wykonawcze do górnych 64 MB, zachowując dostosowania wideo na dole. w końcu, [Ryan] Stwierdziłem, że łatwiej jest załatać jądro gry, aby umożliwić alokację pamięci, którą procesor graficzny może wykorzystać w górnych 64 MB pamięci. Uruchomienie gry w rozdzielczości 720p skutkowało jedynie częściowo grywalną liczbą klatek na sekundę, spadającą w niektórych scenach nawet do 10 klatek na sekundę.
Po kilku wstępnych testach, [Ryan] Doszedłem do wniosku, że przyczyną tego nie był procesor graficzny ani procesor, ale łańcuch wymiany. Halo 2 Domyślnie włącza VSync, co oznacza, że musi poczekać do pustego okresu przed przełączeniem pomiędzy dwiema ramkami buforowymi. Prostą modyfikacją jest dodanie trzeciej ramki buforującej. Średni FPS wzrósł o 10%, a kolejnym wąskim gardłem wymagającym dostosowania stał się procesor graficzny. Przy lekkim podkręcaniu GPU gra zbliżała się do 30 klatek na sekundę. Na szczęście, [Ryan]Nie była wymagana żadna modyfikacja BIOS-u, ponieważ sprzętowy zegar GPU można było ustawić i modyfikować jako MMIO. Po inżynierii wstecznej dodano funkcję debugowania dla wyników pamięci podręcznej wizualnej, [Ryan] Pamięć podręczna tekstur i geometrii została dostosowana, aby zmniejszyć liczbę wyskakujących okienek, z których słynęła oryginalna gra.
Ogólnie rzecz biorąc, jest to niesamowity hack, który wymagał miesięcy ciężkiej pracy. Kod łatki znajduje się na GithubiePo przerwie pojawił się filmik porównujący gry z patchem i bez patcha. Jeśli nadal potrzebujesz więcej Halo w swoim życiu, dlaczego nie zrobić sobie realistycznego karabinu bojowego z gry?
„Muzyk. Guru kawy. Specjalista od zombie. Adwokat mediów społecznościowych. Introwertyk. Ekstremalny miłośnik jedzenia. Ewangelista alkoholu”.