New versions of Box86 and Box64 emulators that allow you to run x86 games on ARM systems

Releases of Box86 0.2.6 and Box64 0.1.8 emulators have been published for running Linux programs built for x86 and x86_64 architectures on ARM, ARM64, PPC64LE and RISC-V processors. Projects develop in sync with one development team - Box86 is limited to the ability to run 32-bit x86 applications, while Box64 provides the ability to run 64-bit executables. The project pays great attention to organizing the launch of gaming applications, including the ability to launch Windows builds through wine and Proton. The source texts of the project are written in the C language and distributed (Box86, Box64) under the MIT license.

A feature of the project is the use of a hybrid execution model, in which emulation is applied only to the machine code of the application itself and specific libraries. Generic system libraries, including libc, libm, GTK, SDL, Vulkan, and OpenGL, are replaced with variants native to the target platforms. Thus, library calls are executed without emulation, which allows for a significant performance increase.

Emulation of code that does not have native replacements for the target platform is performed using the dynamic recompilation (DynaRec) technique from one set of machine instructions to another. Compared to the interpretation of machine instructions, dynamic recompilation shows 5-10 times higher performance.

In performance tests, when running on the Armhf and Aarch86 platforms, the Box64 and Box64 emulators significantly outperformed the QEMU and FEX-emu projects, and in some tests (glmark2, openarena) they achieved performance identical to running an assembly native to the target platform. In the compute-intensive 7-zip and dav1d benchmarks, Box64's performance was between 27% and 53% of that of the native application (compared to QEMU at 5-16% and FEX-emu at 13-26%). Additionally, a comparison was made with the Rosetta 2 emulator used by Apple to run x86 code on systems with an ARM M1 chip. Rosetta 2 ran the 7zip-based test at 71% of the native build, and Box64 at 57%.

New versions of Box86 and Box64 emulators that allow you to run x86 games on ARM systems

In terms of application compatibility, out of 165 games tested, about 70% successfully earned. About 10% more work, but with certain reservations and restrictions. Supported games include WorldOfGoo, Airline Tycoon Deluxe, FTL, Undertale, A Risk of Rain, Cook Serve Delicious and most GameMaker games. Of the games with which problems are noted, games based on the Unity3D engine are mentioned, which is tied to the Mono package, the emulation of which does not always work yet due to the JIT compilation used in Mono, and also has rather high graphics requirements that are not always achievable on ARM boards. Replacing GTK application libraries is currently limited to GTK2 (replacing GTK3/4 is not fully implemented).

Main changes in new releases:

  • Added binding for the Vulkan library. Added support for Vulkan and DXVK graphics API (implementation of DXGI, Direct3D 9, 10 and 11 on top of Vulkan).
  • Improved bindings for GTK libraries. Added bindings for gstreamer and libraries commonly used in GTK applications.
  • Added initial support (so far only interpretation mode) for RISC-V and PPC64LE architectures.
  • Bug fixes have been made to improve SteamPlay support and the Proton layer. It is possible to run many Linux and Windows games from Steam on AArch64 boards such as Raspberry Pi 3 and 4.
  • Improved memory management, mmap behavior, and monitoring of memory protection violations.
  • Improved support for clone system call in libc. Added support for new system calls.
  • In the dynamic recompilation engine, work with SSE/x87 registers has been improved, support for new machine codes has been added, conversions of float and double numbers have been optimized, processing of internal jumps has been improved, and support for new architectures has been simplified.
  • Improved ELF file uploader.

Source: opennet.ru

Add a comment