Neue Versionen von Box86- und Box64-Emulatoren, mit denen Sie x86-Spiele auf ARM-Systemen ausführen können

Für die Ausführung von Linux-Programmen, die für x86- und x0.2.6_64-Architekturen auf ARM-, ARM0.1.8-, PPC86LE- und RISC-V-Prozessoren erstellt wurden, wurden Versionen der Emulatoren Box86 64 und Box64 64 veröffentlicht. Projekte werden synchron mit einem Entwicklungsteam entwickelt – Box86 ist auf die Möglichkeit beschränkt, 32-Bit-x86-Anwendungen auszuführen, während Box64 die Möglichkeit bietet, ausführbare 64-Bit-Dateien auszuführen. Das Projekt legt großen Wert auf die Organisation des Starts von Spieleanwendungen, einschließlich der Möglichkeit, Windows-Builds über Wine und Proton zu starten. Die Quelltexte des Projekts sind in der Sprache C verfasst und werden unter der MIT-Lizenz vertrieben (Box86, Box64).

Ein Merkmal des Projekts ist die Verwendung eines hybriden Ausführungsmodells, bei dem die Emulation nur auf den Maschinencode der Anwendung selbst und bestimmte Bibliotheken angewendet wird. Generische Systembibliotheken, einschließlich libc, libm, GTK, SDL, Vulkan und OpenGL, werden durch native Varianten der Zielplattformen ersetzt. Somit werden Bibliotheksaufrufe ohne Emulation ausgeführt, was eine deutliche Leistungssteigerung ermöglicht.

Die Emulation von Code, der keinen nativen Ersatz für die Zielplattform hat, wird mithilfe der dynamischen Neukompilierungstechnik (DynaRec) von einem Satz Maschinenanweisungen zu einem anderen durchgeführt. Im Vergleich zur Interpretation von Maschinenanweisungen zeigt die dynamische Neukompilierung eine 5-10-mal höhere Leistung.

In Leistungstests übertrafen die Box86- und Box64-Emulatoren bei der Ausführung auf den Armhf- und Aarch64-Plattformen die QEMU- und FEX-emu-Projekte deutlich, und in einigen Tests (glmark2, openarena) erreichten sie eine Leistung, die mit der Ausführung einer nativen Assembly auf der Zielplattform identisch war . In den rechenintensiven 7-zip- und dav1d-Benchmarks lag die Leistung von Box64 zwischen 27 % und 53 % der Leistung der nativen Anwendung (im Vergleich zu QEMU bei 5–16 % und FEX-emu bei 13–26 %). Darüber hinaus wurde ein Vergleich mit dem Rosetta-2-Emulator durchgeführt, den Apple zum Ausführen von x86-Code auf Systemen mit einem ARM-M1-Chip verwendet. Rosetta 2 führte den 7zip-basierten Test mit 71 % des nativen Builds durch und Box64 mit 57 %.

Neue Versionen von Box86- und Box64-Emulatoren, mit denen Sie x86-Spiele auf ARM-Systemen ausführen können

In Bezug auf die Anwendungskompatibilität wurden von 165 getesteten Spielen etwa 70 % erfolgreich bestanden. Etwa 10 % mehr Arbeit, allerdings mit gewissen Vorbehalten und Einschränkungen. Zu den unterstützten Spielen gehören WorldOfGoo, Airline Tycoon Deluxe, FTL, Undertale, A Risk of Rain, Cook Serve Delicious und die meisten GameMaker-Spiele. Von den Spielen, bei denen Probleme festgestellt werden, werden Spiele erwähnt, die auf der Unity3D-Engine basieren, die an das Mono-Paket gebunden ist, deren Emulation aufgrund der in Mono verwendeten JIT-Kompilierung noch nicht immer funktioniert und außerdem über eine recht hohe Grafik verfügt Anforderungen, die auf ARM-Boards nicht immer erreichbar sind. Das Ersetzen von GTK-Anwendungsbibliotheken ist derzeit auf GTK2 beschränkt (das Ersetzen von GTK3/4 ist nicht vollständig implementiert).

Wichtigste Änderungen in Neuerscheinungen:

  • Bindung für die Vulkan-Bibliothek hinzugefügt. Unterstützung für Vulkan und DXVK-Grafik-API hinzugefügt (Implementierung von DXGI, Direct3D 9, 10 und 11 zusätzlich zu Vulkan).
  • Verbesserte Bindungen für GTK-Bibliotheken. Bindungen für gstreamer und Bibliotheken hinzugefügt, die häufig in GTK-Anwendungen verwendet werden.
  • Erste Unterstützung (bisher nur Interpretationsmodus) für RISC-V- und PPC64LE-Architekturen hinzugefügt.
  • Es wurden Fehlerbehebungen vorgenommen, um die SteamPlay-Unterstützung und die Proton-Ebene zu verbessern. Es ist möglich, viele Linux- und Windows-Spiele von Steam auf AArch64-Boards wie Raspberry Pi 3 und 4 auszuführen.
  • Verbesserte Speicherverwaltung, MMAP-Verhalten und Überwachung von Speicherschutzverletzungen.
  • Verbesserte Unterstützung für Klon-Systemaufrufe in libc. Unterstützung für neue Systemaufrufe hinzugefügt.
  • In der dynamischen Neukompilierungs-Engine wurde die Arbeit mit SSE/x87-Registern verbessert, Unterstützung für neue Maschinencodes hinzugefügt, Konvertierungen von Float- und Double-Zahlen optimiert, die Verarbeitung interner Sprünge verbessert und die Unterstützung für neue Architekturen verbessert vereinfacht.
  • Verbesserter ELF-Datei-Uploader.

Source: opennet.ru

Kommentar hinzufügen