Portowanie gier z Xbox 360 do natywnego C++ za pomocą ReXGlue
Emulacja konsol takich jak Xbox 360 zawsze była ograniczana przez wysokie zapotrzebowanie na CPU. Ośmiowątkowy PowerPC Xenon wymagał poważnego sprzętu, aby tłumaczyć instrukcje w locie. Twórcy projektu Xenia wykonali ogromną pracę, ale nawet na nowoczesnych pecetach obciążenie CPU pozostaje zauważalne.
Środowisko zajmujące się inżynierią wsteczną przyjmuje inne podejście: statyczną rekompilację. Zamiast tłumaczyć kod podczas rozgrywki, narzędzie konwertuje plik wykonywalny konsoli na standardowy kod źródłowy C++ w jednym przebiegu, a następnie kompiluje go natywnie dla docelowej platformy.
Dokładnie to robi projekt ReXGlue.
Na czym polega statyczna rekompilacja
Gdy emulator działa w czasie rzeczywistym, nieustannie zużywa zasoby na dekodowanie instrukcji PowerPC, zarządzanie rejestrami i symulację architektury konsoli. Statyczny rekompilator pobiera plik binarny z wyprzedzeniem, analizuje jego instrukcje i generuje równoważny kod C++.
Standardowy kompilator, taki jak Clang czy MSVC, przejmuje wtedy kontrolę, optymalizując wygenerowany kod pod kątem konkretnego procesora i wykorzystując wszystkie dostępne instrukcje x86-64 lub ARM64. Efektem jest standardowa aplikacja natywna.
To podejście eliminuje narzut translacji całkowicie. Gra korzysta bezpośrednio z możliwości peceta, wymagając znacznie mniej zasobów.
Z czego składa się ReXGlue
Twórcy projektu otwarcie przyznają, że opierają się na badaniach zespołu Xenia oraz pracy deweloperów XenonRecomp i narzędzia rexdex.
Architekturę ReXGlue można podzielić na dwa komponenty:
- Narzędzie analityczne, które odczytuje pliki binarne Xbox 360 i generuje funkcje C++.
- Biblioteka runtime (SDK) obsługująca wywołania funkcji systemowych konsoli, zarządzanie pamięcią oraz operacje wejścia-wyjścia.
Repozytorium rexglue-sdk zawiera runtime i wrapper budowania. Sam kod źródłowy jest napisany w C i C++.
Projekt obsługuje buildy dla Windows (amd64) oraz Linux (amd64, arm64). Build ARM64 jest szczególnie godny uwagi — umożliwia uruchamianie rekompilowanych gier na handheldach i komputerach jednopłytkowych bez kar za wydajność.
Aktualny stan i ograniczenia
Deweloperzy są otwarci co do wczesnego stadium projektu. Publiczne API podlega częstym zmianom, a niektóre funkcje pozostają niekompletne. Nie można jeszcze przekształcić skompilowanej gry w gotowy do uruchomienia plik binarny jednym kliknięciem.
Statyczna rekompilacja w ogólności jest pełna niuansów. Pliki binarne często zawierają pośrednie skoki lub spakowane dane. Zautomatyzowany translator nie zawsze samodzielnie wyznacza granice funkcji bez wskazówek. Z tego powodu proces portowania wymaga tworzenia konfiguracji specyficznych dla każdego tytułu.
Repozytorium ma obecnie około 750 gwiazdek. Społeczność formuje się wokół serwera Discord oraz sekcji wydań na GitHub, gdzie autorzy publikują nocne buildy.
Dla kogo jest to narzędzie
Nie będziesz jeszcze w stanie uruchomić żadnej gry z Xbox 360 w kilka minut za pomocą tego narzędzia. Ale projekt z pewnością zainteresuje:
- Inżynierów wstecznych i badaczy studiujących strukturę plików wykonywalnych PowerPC.
- Deweloperów kompilatorów i translatorów szukających praktycznych przykładów generowania kodu z jednej ISA na inną.
Szczegółowe instrukcje dotyczące pracy z CLI i plikami konfiguracyjnymi można znaleźć w wiki repozytorium, a sam kod źródłowy jest dostępny na GitHub w repozytorium rexglue/rexglue-sdk.
Powiązane projekty