Se ha publicado la versión 0.4.0 del emulador Box64, diseñado para ejecutar aplicaciones de Linux compiladas para la arquitectura x86_64 en hardware con procesadores ARM64, RISC-V y Loongarch64. El proyecto presta especial atención a la organización de la ejecución de aplicaciones de juegos y ofrece la posibilidad de ejecutar versiones de Windows a través de Wine y Proton. Los códigos fuente del proyecto están escritos en C y se distribuyen bajo la licencia MIT.
Una característica del proyecto es la aplicación de un modelo híbrido de ejecución, donde la emulación se aplica solo al código máquina de la propia aplicación y a bibliotecas específicas. Las bibliotecas del sistema estándar, incluidas libc, libm, GTK, SDL, Vulkan y OpenGL, se reemplazan por versiones nativas para las plataformas de destino. De esta manera, las llamadas a bibliotecas se realizan sin emulación, lo que permite un aumento significativo en el rendimiento.
La emulación de código para la que no existen sustitutos nativos en la plataforma de destino se realiza mediante la técnica de recompilación dinámica (DynaRec) de un conjunto de instrucciones de máquina a otro. En comparación con la interpretación de instrucciones de máquina, la recompilación dinámica muestra entre 5 y 10 veces más rendimiento. alto rendimiento.
En la nueva versión:
- Se ha presentado un decodificador unificado de prefijos de operación (prefiex opcode decoder), utilizado en el intérprete y en todos los backend de recompilación dinámica (DynaRec). El nuevo decodificador maneja de manera más universal combinaciones raras de prefijos de código de operación y permite prescindir de 'trucos' específicos y de la duplicación de código en el intérprete y en los backend de DynaRec. La reestructuración del decodificador ha llevado a la eliminación de código redundante, facilitando el mantenimiento de la base de código y permitiendo que DynaRec trabaje con combinaciones atípicas de prefijos de código de operación.
- Se ha comenzado a trabajar en un mecanismo para eliminar de la memoria bloques de código que han sido convertidos a código nativo, pero que ya no se utilizan. Esta optimización reduce el consumo de memoria al ejecutar aplicaciones que realizan un gran volumen de operaciones al inicio, como Steam y aplicaciones que utilizan libcef.
- Mejorada la compatibilidad con la arquitectura ARM64: se ha implementado un perfil de compilación para la CPU NVIDIA GB10. En el backend de recompilación dinámica (DynaRec) se ha continuado la implementación de técnicas de optimización de bucles, como la extracción de operaciones de establecimiento de registros XMM/YMM del cuerpo del bucle.
- Se ha incrementado la estabilidad y el rendimiento del backend de recompilación dinámica para la arquitectura RISC-V. Se asegura un correcto funcionamiento de Steam, Proton y Wine, pero para trabajar con contenido DRM protegido que requiere la emulación de llamadas al sistema de Windows, se necesita hardware que soporte un espacio de direcciones de 48 bits (SV48) o el uso de versiones modificadas de Wine y Proton.
- El desarrollo del backend para la arquitectura Loongarch ha avanzado significativamente, alcanzando la capacidad de ejecutar Steam, Wine y Proton, aunque todavía está por detrás en funcionalidad en comparación con el backend para sistemas ARM64. Actualmente, se requiere el uso de páginas de memoria de 4K en el núcleo (por defecto, para Loongarch se asigna generalmente 16K). La capacidad de rendimiento ya es suficiente para ejecutar juegos en el CPU Loongarch 3A6000 (2.5 GHz con 4 núcleos físicos).

- Se ha mejorado la estabilidad del modo Box32, que proporciona soporte para archivos ejecutables de 32 bits en Box64. En este modo, se nota un aumento en la estabilidad del funcionamiento de Steam en todas las arquitecturas y la posibilidad de utilizar superposiciones dentro del juego en algunos juegos de OpenGL.
Fuente: opennet.ru

