UtgÄvan av emulatorn Box64 0.4.0 har publicerats, som syftar till att köra Linux-program som Àr byggda för x86_64-arkitekturen pÄ hÄrdvara med ARM64-, RISC-V- och Loongarch64-processorer. Projektet lÀgger stor vikt vid att organisera körningen av spelapplikationer och erbjuder möjligheten att köra Windows-versioner genom Wine och Proton. Projektets kÀllkod Àr skriven i C och distribueras under MIT-licensen.
En sÀrskild funktion i projektet Àr tillÀmpningen av en hybridexekveringsmodell, dÀr emulering endast tillÀmpas pÄ maskinkoden för sjÀlva applikationen och specifika bibliotek. Standard systembibliotek, inklusive libc, libm, GTK, SDL, Vulkan och OpenGL, byts ut mot versioner som Àr inhemska för de mÄlplattformar. Dessutom utförs bibliotekanrop utan emulering, vilket möjliggör en betydande ökning av prestanda.
Emulering av kod för vilken det saknas inhemska ersÀttningar för mÄlplattformen utförs med hjÀlp av tekniken för dynamisk omkompilering (DynaRec) frÄn en uppsÀttning maskininstruktioner till en annan. JÀmfört med tolkning av maskininstruktioner visar dynamisk omkompilering en 5-10 gÄnger bÀttre prestanda. hög prestanda.
I den nya versionen:
- En enhetlig dekodare för operationskodens prefixer (prefix opcode decoder) har presenterats, som anvÀnds i tolken och i alla backend för dynamisk omkompilering (DynaRec). Den nya dekodaren hanterar mer universellt sÀllsynta kombinationer av operationskodsprefixer och gör det möjligt att undvika specifika "hack" och kodduplicering i tolken och DynaRec-backend. Omarbetningen av dekodaren har lett till att överflödig kod har tagits bort, vilket förenklar underhÄllet av kodbasen och möjliggör att DynaRec kan arbeta med atypiska kombinationer av operationskodsprefixer.
- Arbetet har pÄbörjats med en mekanism för att ta bort kodblock frÄn minnet som har konverterats till nativ kod men som inte lÀngre anvÀnds. En sÄdan optimering minskar minnesanvÀndningen vid körning av applikationer som utför ett stort antal operationer vid start, som Steam och applikationer som anvÀnder libcef.
- Stödet för ARM64-arkitekturen har förbÀttrats: En byggprofil för CPU NVIDIA GB10 har implementerats. I backenden för dynamisk omkompilering (DynaRec) fortsÀtter implementeringen av tekniker för loopoptimering, som att ta ut operationer för registerinstÀllning av XMM/YMM ur loopens kropp.
- Stabiliteten och prestandan för backend av dynamisk re-kompilering för RISC-V-arkitekturen har förbÀttrats. Korrekt körning av Steam, Proton och Wine har garanterats, men för att arbeta med skyddat DRM-innehÄll som krÀver emulering av systemanrop frÄn Windows, behövs hÄrdvara som stöder 48-bit adressrymd (SV48) eller anvÀndning av modifizierade versioner av Wine och Proton.
- Utvecklingen av backend för Loongarch-arkitekturen har gjort betydande framsteg och nÄr nu en punkt dÀr Steam, Wine och Proton kan köras, men fungerar fortfarande sÀmre Àn backend för ARM64-system. För nÀrvarande krÀvs anvÀndning av sidha i kÀrnan med 4K minnesstorlek (standard för Loongarch brukar sÀttas till 16K). Prestandan Àr redan tillrÀcklig för att köra spel pÄ Loongarch 3A6000 CPU (2,5 GHz med 4 fysiska kÀrnor).

- Stabiliteten i Box32-lÀget, som ger stöd för 32-bitars körbara filer i Box64, har förbÀttrats. I detta lÀge har stabiliteten för Steam ökat pÄ alla arkitekturer och möjligheten att anvÀnda in-game overlays i vissa OpenGL-spel.
KĂ€lla: opennet.ru

