La version de l'émulateur Box64 0.4.0 a été publiée, conçue pour exécuter des programmes Linux compilés pour l'architecture x86_64 sur du matériel avec des processeurs ARM64, RISC-V et Loongarch64. Le projet accorde une attention particulière à l'organisation du lancement d'applications de jeu et permet le lancement de versions Windows via Wine et Proton. Les codes sources du projet sont écrits en langage C et sont distribués sous licence MIT.
Une caractéristique du projet est l'application d'un modèle d'exécution hybride, où l'émulation est utilisée uniquement pour le code machine de l'application elle-même et des bibliothèques spécifiques. Les bibliothèques système typiques, y compris libc, libm, GTK, SDL, Vulkan et OpenGL, sont remplacées par des versions natives aux plates-formes cibles. Ainsi, les appels de bibliothèque sont effectués sans émulation, ce qui permet d'obtenir une augmentation significative des performances.
L'émulation du code pour lequel il n'existe pas de remplacements natifs pour la plate-forme cible est effectuée en utilisant la technique de recompilation dynamique (DynaRec) d'un ensemble d'instructions machine à un autre. Par rapport à l'interprétation des instructions machine, la recompilation dynamique montre des performances de 5 à 10 fois supérieures. une haute performance.
Dans la nouvelle version :
- Un décodeur unifié de préfixes d'opérations (prefix opcode decoder) a été présenté, utilisé dans l'interpréteur et tous les backends de recompilation dynamique (DynaRec). Ce nouveau décodeur traite plus universellement les combinaisons rares de préfixes d'opcode et permet d'éviter des « hacks » spécifiques et la duplication de code dans l'interpréteur et les backends DynaRec. La refonte du décodeur a conduit à la suppression de code superflu, facilitant la maintenance de la base de code et permettant à DynaRec de fonctionner avec des combinaisons atypiques de préfixes d'opcodes.
- Le travail a commencé sur un mécanisme pour supprimer de la mémoire des blocs de code convertis en code natif mais non utilisés. Une telle optimisation permet de réduire la consommation de mémoire lors du lancement d'applications, en particulier celles effectuant un grand volume d'opérations au démarrage, telles que Steam et les applications utilisant libcef.
- Amélioration du support pour l'architecture ARM64 : un profil de compilation a été implémenté pour le CPU NVIDIA GB10. Dans le backend de recompilation dynamique (DynaRec), le travail sur les techniques d'optimisation de boucle a été poursuivi, telles que le déplacement des opérations de mise à jour des registres XMM/YMM en dehors du corps de la boucle.
- La stabilité et la performance du backend de recompilation dynamique pour l'architecture RISC-V ont été améliorées. Le lancement de Steam, Proton et Wine fonctionne correctement, mais un matériel prenant en charge l'espace d'adressage de 48 bits (SV48) est nécessaire pour traiter le contenu protégé par DRM, qui nécessite l'émulation des appels système Windows, ou l'utilisation de versions modifiées de Wine et Proton.
- Des progrès significatifs ont été réalisés dans le développement du backend pour l'architecture Loongarch, qui a été porté à la capacité de faire fonctionner Steam, Wine et Proton, mais qui reste en retard en termes de fonctionnalité par rapport au backend pour les systèmes ARM64. Pour l'instant, l'utilisation de pages mémoire de 4 Ko dans le noyau est requise (par défaut, Loongarch est généralement réglé sur 16 Ko). La performance est déjà suffisante pour lancer des jeux sur le CPU Loongarch 3A6000 (2.5 GHz avec 4 cœurs physiques).

- La stabilité du mode Box32, qui supporte les fichiers exécutables 32 bits dans Box64, a été améliorée. Dans ce mode, on observe une augmentation de la stabilité de Steam sur toutes les architectures et la possibilité d'utiliser des overlays en jeu dans certains jeux OpenGL.
Source : opennet.ru

