XenonRecomp, un outil innovant conçu pour convertir les exécutables Xbox 360 en code C++ recompilable, pourrait bientôt étendre son support à d'autres plateformes. Actuellement, l'outil ne supporte que les plateformes x86 en raison de l'utilisation intrinsèque x86, mais les développeurs explorent des solutions pour élargir sa compatibilité.
Inspiré par le projet N64 : Recompiled, qui permet de recompiler des exécutables N64, XenonRecomp vise à faire de même pour les jeux et applications Xbox 360. L'outil convertit les instructions PowerPC (PPC) de la Xbox 360 en code C++, permettant ainsi une recompilation pour d'autres architectures. Cependant, le code généré n'est pas optimisé pour la lisibilité humaine, car les instructions sont converties de manière directe sans restructuration.
XenonRecomp fonctionne en passant l'état du CPU (y compris les registres PPC) comme argument à chaque fonction PPC. Les instructions sont implémentées pour fonctionner en little-endian, bien que la Xbox 360 soit une machine big-endian. Cela nécessite des ajustements pour les opérations de mémoire et les registres vectoriels, où l'ordre des éléments est inversé.
Les instructions vectorielles (VMX) sont actuellement implémentées en x86, mais les développeurs envisagent d'utiliser des bibliothèques comme SIMD Everywhere pour permettre une compatibilité multi-architecture. Cependant, certaines fonctionnalités, comme le MMIO (Memory-Mapped I/O), utilisé pour des opérations matérielles spécifiques comme le décodage XMA, ne sont pas encore implémentées.
XenonRecomp utilise une table de hachage parfaite pour résoudre les appels de fonctions virtuelles, une amélioration par rapport à une précédente méthode qui nécessitait une allocation mémoire excessive. Pour les tables de saut, l'outil s'appuie sur des motifs d'assemblage prévisibles, bien que des ajustements soient nécessaires pour les jeux plus récents en raison des évolutions du compilateur Xbox 360.
L'analyse des limites des fonctions est également prise en charge, bien que les fonctions contenant des tables de saut posent encore des défis. Les utilisateurs peuvent définir manuellement les limites des fonctions dans un fichier de configuration TOML.
XenonRecomp propose plusieurs optimisations pour améliorer les performances, notamment en supprimant les calls superflus aux registres et en convertissant certains registres en variables locales. Ces optimisations peuvent réduire la taille des exécutables de plusieurs mégaoctets et améliorer les temps de rendu. De plus, l'outil permet de patcher facilement les fonctions PPC, offrant aux utilisateurs la possibilité de remplacer des fonctions par des implémentations personnalisées tout en conservant l'accès aux fonctions d'origine.
Malgré ses avancées, XenonRecomp ne supporte pas encore les exceptions, un défi technique lié à l'utilisation du registre de lien (link register) et à la nature imprévisible des gestionnaires d'exceptions. De plus, certaines instructions PPC, notamment celles liées aux opérations D3D, ne sont pas entièrement implémentées.
Le développeur principal de XenonRecomp, blueskythlikesclouds, dévoile des compilations ici si le projet vous intéresse :
XenonRecomp