È stata pubblicata la versione dell'emulatore Box64 0.4.0, progettata per eseguire programmi Linux compilati per architettura x86_64 su hardware con processori ARM64, RISC-V e Loongarch64. Il progetto presta particolare attenzione all'organizzazione dell'esecuzione di applicazioni di gioco e offre la possibilità di eseguire compilation per Windows tramite Wine e Proton. I sorgenti del progetto sono scritti in linguaggio C e distribuiti con licenza MIT.
Una delle caratteristiche del progetto è l'applicazione di un modello di esecuzione ibrido, in cui l'emulazione viene applicata solo al codice macchina dell'applicazione stessa e a librerie specifiche. Le librerie di sistema standard, inclusi libc, libm, GTK, SDL, Vulkan e OpenGL, vengono sostituite con varianti native per le piattaforme target. In questo modo, le chiamate alle librerie vengono eseguite senza emulazione, consentendo un notevole aumento delle prestazioni.
L'emulazione del codice per il quale non esistono sostituzioni native per la piattaforma di destinazione è eseguita utilizzando la tecnica della ricompilazione dinamica (DynaRec) da un set di istruzioni macchina a un altro. Rispetto all'interpretazione delle istruzioni macchina, la ricompilazione dinamica dimostra un incremento delle prestazioni di 5-10 volte. alte prestazioni.
Nella nuova versione:
- È stato presentato un decodificatore unificato dei prefissi dei codici operativi (prefix opcode decoder), utilizzato nell'interprete e in tutti i backend della ricompilazione dinamica (DynaRec). Il nuovo decodificatore gestisce in modo più universale le combinazioni rare di prefissi delle istruzioni e consente di evitare specifici 'hack' e la duplicazione del codice nell'interprete e nei backend di DynaRec. La revisione del decodificatore ha portato alla rimozione di codice superfluo, semplificando la manutenzione del codice sorgente e consentendo a DynaRec di lavorare con combinazioni non comuni di prefissi delle istruzioni.
- È iniziato il lavoro su un meccanismo per rimuovere dalla memoria blocchi di codice convertiti in codice nativo, ma già non utilizzati. Tale ottimizzazione consente di ridurre il consumo di memoria durante l'esecuzione di applicazioni che effettuano un gran numero di operazioni all'avvio, come Steam e applicazioni che utilizzano libcef.
- Migliorato il supporto per l'architettura ARM64: Implementato un profilo di build per la CPU NVIDIA GB10. Nel backend della ricompilazione dinamica (DynaRec) sono continuate le tecniche di ottimizzazione dei cicli, come l'estrazione delle operazioni di impostazione dei registri XMM/YMM dal corpo del ciclo.
- Aumentata la stabilità e le prestazioni del backend della ricompilazione dinamica per l'architettura RISC-V. Garantito il corretto avvio di Steam, Proton e Wine, ma è necessaria una macchina con supporto per lo spazio degli indirizzi a 48 bit (SV48) per lavorare con contenuti DRM protetti che richiedono l'emulazione delle chiamate di sistema Windows, oppure utilizzare versioni modificate di Wine e Proton.
- Significativi progressi nello sviluppo del backend per l'architettura Loongarch, che ha raggiunto la possibilità di eseguire Steam, Wine e Proton, ma è ancora indietro rispetto al backend per sistemi ARM64 in termini di funzionalità. Attualmente è necessario utilizzare nel kernel pagine di memoria di dimensioni 4K (di default per Loongarch di solito è impostato a 16K). Le prestazioni sono già sufficienti per eseguire giochi su CPU Loongarch 3A6000 (2.5 GHz con 4 core fisici).

- Aumentata la stabilità della modalità Box32, che fornisce supporto per file eseguibili a 32 bit in Box64. In questa modalità si osserva un aumento della stabilità di funzionamento di Steam su tutte le architetture e la possibilità di utilizzare overlay in-game in alcuni giochi OpenGL.
Fonte: opennet.ru

