Portare i giochi Xbox 360 in C++ nativo con ReXGlue
L'emulazione di console come l'Xbox 360 è sempre stata limitata dalle elevate richieste di CPU. Il PowerPC Xenon a otto thread richiedeva hardware serio solo per tradurre le istruzioni al volo. Gli sviluppatori del progetto Xenia hanno svolto un lavoro enorme, ma anche sui PC moderni il carico della CPU rimane evidente.
La comunità di reverse engineering sta abbracciando un approccio diverso: la ricompilazione statica. Invece di tradurre il codice durante il gioco, un'utilità converte l'eseguibile della console in codice sorgente C++ standard in un singolo passaggio, per poi compilarlo nativamente per la piattaforma di destinazione.
Questo è esattamente ciò che fa il progetto ReXGlue.
In cosa consiste la ricompilazione statica
Quando un emulatore funziona in tempo reale, consuma continuamente risorse per decodificare le istruzioni PowerPC, gestire i registri e simulare l'architettura della console. Un ricompilatore statico analizza preventivamente il binario, esamina le sue istruzioni e genera codice C++ equivalente.
Un compilatore standard come Clang o MSVC si occupa poi dell'ottimizzazione del codice generato per il processore specifico, sfruttando tutte le istruzioni x86-64 o ARM64 disponibili. Il risultato è un'applicazione nativa standard.
Questo approccio elimina completamente il sovraccarico di traduzione. Il gioco sfrutta direttamente le capacità del PC, richiedendo molte meno risorse.
Di cosa si compone ReXGlue
I creatori del progetto riconoscono apertamente che si basano sulla ricerca del team Xenia e sul lavoro degli sviluppatori di XenonRecomp e rexdex.
L'architettura di ReXGlue può essere suddivisa in due componenti:
- Uno strumento di analisi che legge i binari Xbox 360 e genera funzioni C++.
- Una libreria runtime (SDK) che gestisce le chiamate di funzione di sistema della console, la gestione della memoria e le operazioni di input/output.
Il repository rexglue-sdk contiene il runtime e il wrapper di build. Il codice sorgente stesso è scritto in C e C++.
Il progetto supporta build per Windows (amd64) e Linux (amd64, arm64). La build ARM64 è particolarmente degna di nota: permette di eseguire giochi ricompilati su console portatili e single-board computer senza penalità di frame rate.
Stato attuale e limitazioni
Gli sviluppatori sono espliciti riguardo allo stadio iniziale del progetto. L'API pubblica subisce modifiche frequenti e alcune funzionalità rimangono incomplete. Non è ancora possibile trasformare un gioco compilato in un binario pronto all'uso con un solo clic.
La ricompilazione statica in generale è piena di sfumature. I binari spesso contengono jump indiretti o dati compressi. Un traduttore automatizzato non sempre determina autonomamente i confini delle funzioni senza indicazioni. Per questo motivo, il processo di porting richiede la creazione di configurazioni specifiche per ogni titolo.
Il repository ha attualmente circa 750 stelle. La comunità si sta formando attorno a un server Discord e alla sezione release su GitHub, dove gli autori pubblicano build notturne.
A chi è destinato lo strumento
Non sarà ancora possibile eseguire qualsiasi gioco Xbox 360 in un paio di minuti con questo strumento. Ma il progetto interesserà sicuramente:
- Ingegneri inversi e ricercatori che studiano la struttura degli eseguibili PowerPC.
- Sviluppatori di compilatori e traduttori che cercano esempi pratici di generazione di codice da una ISA a un'altra.
Istruzioni dettagliate per lavorare con la CLI e i file di configurazione sono disponibili nel wiki del repository, e il codice sorgente stesso è disponibile su GitHub nel repository rexglue/rexglue-sdk.
Progetti correlati