Rilasciata la versione 0.4.0 dell'emulatore Box64, progettato per eseguire programmi Linux compilati per l'architettura x86_64 su hardware con processori ARM64, RISC-V e Loongarch64. Il progetto si concentra sulla gestione dell'avvio di applicazioni di gioco e offre la possibilità di eseguire versioni per Windows tramite Wine e Proton. I sorgenti del progetto sono scritti in linguaggio C e sono distribuiti con licenza MIT.
Una caratteristica distintiva del progetto è l'uso di un modello di esecuzione ibrido, in cui l'emulazione viene applicata solo al codice macchina dell'applicazione e alle librerie specifiche. Le librerie di sistema standard, tra cui libc, libm, GTK, SDL, Vulkan e OpenGL, vengono sostituite con versioni native per le piattaforme target. In questo modo, le chiamate di libreria vengono eseguite senza emulazione, consentendo un notevole aumento delle prestazioni.
L'emulazione del codice per il quale non esistono sostituti nativi per la piattaforma target avviene utilizzando la tecnica di ricompilazione dinamica (DynaRec) da un insieme di istruzioni macchina a un altro. Rispetto all'interpretazione delle istruzioni macchina, la ricompilazione dinamica dimostra un miglioramento di 5-10 volte. alte prestazioni.
Nella nuova versione:
- È stato presentato un decodificatore unificato dei prefissi delle istruzioni (prefix opcode decoder), utilizzato nell'interprete e in tutti i backend della ricompilazione dinamica (DynaRec). Il nuovo decodificatore gestisce in modo più universale le rare combinazioni di prefissi delle istruzioni, consentendo di evitare specifici "hack" e duplicazioni di codice nell'interprete e nei backend DynaRec. La riprogettazione del decodificatore ha portato all'eliminazione di codice superfluo, facilitando la manutenzione della base di codice e permettendo a DynaRec di lavorare con combinazioni atipiche di prefissi delle istruzioni.
- È iniziato il lavoro su un meccanismo per rimuovere dalla memoria i blocchi di codice convertiti in codice nativo ma già non più utilizzati. Questa ottimizzazione consente di ridurre il consumo di memoria durante l'avvio di applicazioni che eseguono un alto numero di operazioni all'avvio, come Steam e applicazioni che utilizzano libcef.
- Migliorato il supporto per l'architettura ARM64: Implementato un profilo di assemblaggio per le CPU NVIDIA GB10. Nel backend della ricompilazione dinamica (DynaRec) è proseguita l'implementazione delle tecniche di ottimizzazione dei cicli, come l'estrazione delle operazioni di caricamento 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 funzionamento corretto di Steam, Proton e Wine, ma per lavorare con contenuti DRM protetti che richiedono l'emulazione delle chiamate di sistema Windows, è necessario hardware con supporto per lo spazio degli indirizzi a 48 bit (SV48) o l'uso di build modificate di Wine e Proton.
- Lo sviluppo del backend per l'architettura Loongarch ha fatto significativi progressi, raggiungendo la possibilità di avviare Steam, Wine e Proton, ma rimane indietro rispetto alla funzionalità del backend per i sistemi ARM64. Per il funzionamento è ancora necessario l'uso di pagine di memoria di dimensioni 4K nel kernel (di default per Loongarch è solitamente impostato a 16K). Le prestazioni sono già sufficienti per eseguire giochi su CPU Loongarch 3A6000 (2.5 GHz con 4 core fisici).

- È stata aumentata la stabilità della modalità Box32, che fornisce supporto per file eseguibili a 32 bit in Box64. In questa modalità si segnala una maggiore stabilità di funzionamento di Steam su tutte le architetture e la possibilità di utilizzare sovrapposizioni di gioco in alcuni giochi OpenGL.
Fonte: opennet.ru

