Die Veröffentlichung des Emulators Box64 0.4.0 wurde bekannt gegeben. Diese Software ermöglicht das Ausführen von Linux-Programmen, die für die Architektur x86_64 kompiliert wurden, auf Hardware mit ARM64-, RISC-V- und Loongarch64-Prozessoren. Das Projekt legt besonderen Wert auf die Ausführung von Spieleanwendungen und bietet die Möglichkeit, Windows-Versionen über Wine und Proton zu starten. Der Quellcode des Projekts ist in C geschrieben und wird unter der MIT-Lizenz vertrieben.
Ein besonderes Merkmal des Projekts ist die Anwendung eines hybriden Ausführungsmodells, bei dem Emulation nur auf den Maschinen-Code der Anwendung selbst und spezifischer Bibliotheken angewendet wird. Typische Systembibliotheken, einschließlich libc, libm, GTK, SDL, Vulkan und OpenGL, werden durch für die Zielplattformen native Varianten ersetzt. Dadurch werden Bibliotheksaufrufe ohne Emulation ausgeführt, was zu einer erheblichen Steigerung der Leistung führt.
Die Emulation von Code, für den native Ersetzungen auf der Zielplattform fehlen, erfolgt durch die Technik der dynamischen Rekompilierung (DynaRec) von einem Satz von Maschinenanweisungen in einen anderen. Im Vergleich zur Interpretation von Maschinenanweisungen zeigt die dynamische Rekompilierung eine Leistungseffizienz von 5 bis 10 Mal. hohe Leistung bietet..
In der neuen Version:
- Ein einheitlicher Decoder für die Präfixe der Maschinenanweisungen (Prefix Opcode Decoder) wurde eingeführt, der sowohl im Interpreter als auch in allen Backends der dynamischen Rekompilierung (DynaRec) verwendet wird. Der neue Decoder verarbeitet seltene Kombinationen von Opcode-Präfixen universeller und ermöglicht es, spezifische 'Hacks' und Code-Duplizierung sowohl im Interpreter als auch in den DynaRec-Backends zu vermeiden. Die Überarbeitung des Decoders hat zur Entfernung überflüssigen Codes geführt, die Wartung des Codes vereinfacht und ermöglicht es DynaRec, mit atypischen Kombinationen von Opcode-Präfixen zu arbeiten.
- Die Entwicklung eines Mechanismus zur Entfernung von nicht mehr verwendeten Codeblöcken aus dem Speicher, die in nativen Code umgewandelt wurden, hat begonnen. Diese Optimierung hilft, den Speicherverbrauch beim Start von Anwendungen zu reduzieren, die eine große Anzahl von Operationen ausführen, wie etwa Steam und Anwendungen, die libcef verwenden.
- Die Unterstützung der ARM64-Architektur wurde verbessert: Ein Build-Profil für den NVIDIA GB10 CPU wurde implementiert. Im Backend der dynamischen Rekompilierung (DynaRec) wurden weiterhin Anpassungen zur Optimierung von Schleifen umgesetzt, wie das Auslagern von XMM/YMM-Registeroperationen aus dem Schleifenrumpf.
- Die Stabilität und Leistung des Backends der dynamischen Rekompilierung für die RISC-V-Architektur wurden verbessert. Der korrekte Start von Steam, Proton und Wine wird sichergestellt, jedoch wird für den Umgang mit geschütztem DRM-Inhalt, der die Emulation von Windows-Systemaufrufen erfordert, Hardware mit Unterstützung für den 48-Bit-Adressraum (SV48) oder die Verwendung modifizierter Builds von Wine und Proton benötigt.
- Die Entwicklung des Backends für die Loongarch-Architektur hat erhebliche Fortschritte gemacht, die jetzt die Ausführung von Steam, Wine und Proton ermöglichen. Allerdings bleibt es in Bezug auf die Funktionalität hinter dem Backend für ARM64-Systeme zurück. Bisher ist die Nutzung von 4K-Speicherseiten im Kernel erforderlich, während standardmäßig für Loongarch in der Regel 16K eingestellt wird. Die Leistung ist bereits ausreichend, um Spiele auf der CPU Loongarch 3A6000 (2,5 GHz mit 4 phyischen Kernen) auszuführen.

- Die Stabilität des Box32-Modus wurde verbessert, der die Ausführung von 32-Bit-Executable-Dateien in Box64 unterstützt. In diesem Modus wurde eine höhere Stabilität von Steam auf allen Architekturen festgestellt sowie die Möglichkeit, in einigen OpenGL-Spielen In-Game-Overlays zu verwenden.
Quelle: opennet.ru

