Home Homebrew Rilasciato prospero-win v0.2.0 su console PlayStation 5: Giochi Windows, prestazioni e novità

Rilasciato prospero-win v0.2.0 su console PlayStation 5: Giochi Windows, prestazioni e novità

256
0

Pubblicato un rapido aggiornamento per prospero-win, il progetto open source che punta a portare i giochi e le applicazioni Windows direttamente su PlayStation 5 attraverso un ambiente di compatibilità basato su Wine.

La nuova versione 0.2.0 rappresenta un passo importante per lo sviluppo del progetto, introducendo miglioramenti significativi nell’esecuzione dei giochi, nella gestione della grafica e nella connettività di rete.

Una delle novità più interessanti riguarda i giochi Windows a 32 bit, che ora possono essere eseguiti direttamente sulla CPU della PS5 attraverso un nuovo backend WoW64, senza dover ricorrere necessariamente al traduttore di istruzioni utilizzato nelle versioni precedenti.

Il sistema mantiene comunque la possibilità di utilizzare il vecchio metodo, anche come alternativa automatica nel caso in cui l’esecuzione nativa non possa essere avviata correttamente.

Miglioramenti anche per le prestazioni grafiche, grazie a un nuovo sistema di raggruppamento delle chiamate Vulkan, pensato per ridurre il lavoro aggiuntivo richiesto dal passaggio tra il gioco e il sistema.

Questo intervento punta a rendere più efficiente l’esecuzione dei titoli che utilizzano DXVK e Zink, con ulteriori ottimizzazioni nella compilazione degli shader e una cache dedicata che permette di conservare quelli già compilati tra un avvio e l’altro.

Un’altra aggiunta importante riguarda il supporto OpenGL. Con questa nuova versione, Mesa Zink è incluso direttamente nel pacchetto, consentendo di eseguire i giochi compatibili attraverso Vulkan senza dover utilizzare una versione separata dell’applicazione appositamente compilata per OpenGL.

La nuova versione introduce inoltre miglioramenti alla connettività Internet. Le applicazioni Windows possono ora risolvere i nomi dei server attraverso il sistema DNS della console e utilizzare connessioni HTTPS grazie al supporto TLS di Windows, accompagnato da un insieme di certificati radice.

Si tratta di un passo significativo per ampliare le possibilità offerte dal progetto anche con i programmi che richiedono l’accesso alla rete.

Non mancano le correzioni di diversi problemi riscontrati durante i test con giochi come GTA San Andreas, GTA IV, Counter-Strike 1.6, Atomic Bomberman e Pizza Tower.

Sono stati inoltre migliorati il rilevamento delle risorse hardware, la gestione della memoria, il comportamento dei thread e gli strumenti di diagnostica, utili per individuare eventuali problemi durante l’esecuzione.

Cosa è supportato

  • Giochi Windows a 32 bit tramite il nostro traduttore x86 personalizzato.
  • Applicazioni Windows a 64 bit eseguite in modo nativo sulla CPU x86-64 della PS5 tramite Wine.
  • Grafica Direct3D 8, 9, 10 e 11 tramite DXVK e Vulkan.
  • Giochi OpenGL tramite Zink di Mesa basato su Vulkan.
  • Giochi classici 2D e applicazioni Windows tramite GDI.
  • Controlli DualSense, incluso il supporto XInput in stile Xbox, stick analogici, grilletti e vibrazione.
  • Mappature personalizzate dei controlli per i giochi originariamente progettati per tastiera e mouse.
  • Tastiera e mouse USB, utilizzabili insieme al controller.
  • Audio dei giochi tramite l’uscita audio della PS5.
  • Un launcher per i giochi con profili individuali, impostazioni grafiche e configurazioni predefinite dei controlli.
  • Installazioni separate dei giochi, con strumenti per trasferire i giochi e sincronizzare i salvataggi tra PC e console.
  • Procedure di installazione e profili della community per semplificare la configurazione dei giochi supportati.

Giochi già giocabili su PS5

  • Half-Life 2: 60 FPS con impostazioni grafiche elevate, testato con DualSense fino al laboratorio di Kleiner.
  • Grand Theft Auto IV: The Complete Edition: circa 55 FPS nella città aperta a 1080p, con DualSense.
  • Half-Life, Counter-Strike 1.6 e OpenArena: giocabili a oltre 60 FPS.
  • Warcraft III: giocabile a oltre 60 FPS, con DualSense oppure tastiera e mouse.
  • Space Cadet Pinball e Prato fiorito di Wine: giocabili.

Controlli

I giochi possono essere utilizzati con il DualSense, con una tastiera e un mouse USB oppure con entrambi contemporaneamente. Il comportamento del DualSense viene configurato per ciascun gioco attraverso un preset di input.

Tastiera e mouse USB

Collegando una tastiera e un mouse USB alla PS5, entrambi funzionano in tutti i giochi, anche insieme al controller. È possibile collegarli anche dopo aver avviato il gioco, poiché l’app li rileva automaticamente ogni pochi secondi.

I tasti vengono trasmessi al gioco esattamente come avviene su un PC, compresi i modificatori Ctrl, Shift, Alt e i tasti Windows. Il mouse, invece, controlla lo stesso puntatore gestito dalla levetta del DualSense. La rotellina del mouse non è ancora supportata.

Il DualSense

Il profilo di ciascun gioco specifica un preset, ovvero un piccolo file di testo contenuto nella directory /data/prospero-win/input/. Sono disponibili due tipologie di preset.

Giochi con tastiera e mouse

La maggior parte dei vecchi giochi per PC è progettata per essere utilizzata con tastiera e mouse. Per questo motivo, il preset trasforma il DualSense in una combinazione di questi dispositivi: ogni pulsante viene associato a un tasto della tastiera o a un pulsante del mouse, mentre una delle levette può essere utilizzata per muovere il puntatore.

Un esempio è il preset di Warcraft III (warcraft3.input):

input

; Warcraft III su DualSense. I commenti devono trovarsi su righe separate.
[input]
mode = keyboard
; La levetta sinistra muove il puntatore alla velocità predefinita (fino a 20000)
mouse = left_stick
mouse_speed = 1200

cross = mouse_left
circle = mouse_right
; Attacco e arresto
square = a
triangle = s
r1 = tab
l1 = alt
; Il D-pad scorre la mappa
up = up
down = down
left = left
right = right
; Il menu di gioco
options = f10
create = escape
touchpad = space
  • Pulsanti: cross, circle, square, triangle, l1, r1, l2, r2, l3, r3, up, down, left, right, options, create, touchpad.
  • Comandi supportati:
    • una lettera o una cifra;
    • i tasti da f1 a f24;
    • space, enter, escape, tab, backspace, shift, ctrl, alt, pause, pageup, pagedown, home, end, insert, delete, le frecce (up, down, left, right) e semicolon, equals, comma, minus, period, slash, backquote, lbracket, backslash, rbracket, quote;
    • qualsiasi codice tasto di Windows nel formato vk:0xNN;
    • mouse_left, mouse_right oppure mouse_middle;
    • none.
  • Parametro mouse: può essere impostato su left_stick, right_stick oppure none.

Il preset mouse.input rappresenta un punto di partenza per i giochi che si utilizzano esclusivamente con il mouse.

Giochi con controller Xbox

I giochi dell’era Xbox 360 e successivi utilizzano XInput per rilevare i controller. Impostando mode = xinput, il DualSense viene riconosciuto come il primo controller Xbox del gioco.

DualSense Xbox
, , , , , ,
, ,
, , (analogici)
, Pressione delle levette
e e

Anche la vibrazione è supportata: il feedback generato dal gioco aziona i motori del DualSense. Il preset gamepad.input utilizza esattamente questa configurazione. Nei preset XInput è comunque possibile aggiungere associazioni ai pulsanti per inviare anche comandi da tastiera.

Quando un profilo non associa alcun pulsante, non muove il puntatore e non specifica alcuna modalità, viene impostato automaticamente mode = xinput. In questo modo, i giochi dotati di supporto per i controller possono riconoscere il DualSense, mentre la tastiera e il mouse continuano a funzionare regolarmente.

Alcuni giochi basati su SDL2, tra cui la versione di Half-Life pubblicata per il 25º anniversario, cercano inizialmente i controller attraverso il sistema di input grezzo (raw input), non disponibile in Wine su PS5, e successivamente non utilizzano XInput.

Per risolvere il problema, in modalità XInput l’app imposta la variabile SDL_JOYSTICK_RAWINPUT=0, consentendo a questi giochi di rilevare il DualSense come controller XInput.

Sulla console, XInput rileva entrambe le levette con l’intera gamma di movimento, oltre ai grilletti e ai pulsanti. SDL2 di Half-Life riesce quindi ad aprire il dispositivo come controller di gioco.

DirectInput

I giochi che utilizzano DirectInput per rilevare i controller, molti dei quali risalgono a prima del 2005, non supportano ancora direttamente il DualSense. Per utilizzarli, è necessario ricorrere a un preset per tastiera e mouse.

L’input da tastiera e mouse tramite DirectInput dovrebbe funzionare, poiché proviene dalla stessa origine utilizzata per l’input standard di Windows, ma questa funzionalità non è ancora stata testata.

Chiudere un gioco

Per chiudere un gioco direttamente dal DualSense, è sufficiente tenere premuti +  per un secondo. L’app invia al gioco una richiesta di chiusura equivalente alla combinazione Alt+F4 e riporta l’utente al launcher. Se il gioco non si chiude entro pochi secondi, l’app lo abbandona.

La stessa operazione può essere eseguita da tastiera utilizzando Alt+F4 oppure selezionando l’opzione di uscita integrata nel gioco.

Creare un preset

Ogni profilo può specificare un preset attraverso la voce preset = warcraft3 nella propria sezione [input] e modificarne alcune impostazioni. Le righe presenti nella sezione [input] del profilo hanno infatti la precedenza su quelle definite nel preset.

I nuovi preset devono essere inseriti nella directory /data/prospero-win/input/. Gli sviluppatori e gli utenti possono inoltre condividerli nel repository prospero-win-profiles, contribuendo ad ampliare il supporto ai diversi giochi.

Installare i giochi

I giochi vengono installati sul PC e utilizzati sulla PS5. I programmi di installazione sono applicazioni Windows complete: aprono procedure guidate, richiedono i codici CD e modificano il registro di sistema.

Sul PC vengono eseguiti con la stessa versione di Wine utilizzata dalla PS5, così il risultato è un prefix che la console può leggere direttamente.

Successivamente, è sufficiente copiarlo sulla console con un solo comando e riportarlo sul PC quando si desidera mantenere sincronizzati anche i salvataggi.

La PS5 non esegue direttamente i programmi di installazione: la versione di Wine utilizzata dalla console ha la creazione dei processi disabilitata e gli installer avviano altri programmi.

Configurazione iniziale: Wine sul PC

È necessario compilare la versione di Wine corrispondente a quella utilizzata dalla PS5, con la stessa revisione e le stesse patch, ma compilata per il PC desktop, in modo che le finestre dei programmi di installazione siano visibili sullo schermo: tools/build_host_wine.sh --source <pinned Wine checkout> --jobs 8

Al termine, lo script mostra il percorso dell’eseguibile Wine generato. Le installazioni vengono eseguite con l’utente prospero, proprio come avviene nell’applicazione per PS5. Di conseguenza, la cartella utente del prefix sarà C:\users\prospero su entrambe le piattaforme.

Normalmente, Wine collega le cartelle Desktop, Documenti, Download, Musica, Immagini e Video di un nuovo prefix alle rispettive cartelle presenti nella directory home dell’utente.

Il programma di installazione le sostituisce con cartelle vuote all’interno del prefix, così i salvataggi e le impostazioni del gioco rimangono al suo interno senza mescolarsi ai file personali.

Installare un gioco: l’esempio di Warcraft III

Ogni gioco dispone di una ricetta nella repository prospero-win-profiles (recipes/). Si tratta di uno script di installazione Lutris, il formato utilizzato dalla community di Lutris per migliaia di giochi Windows.

La ricetta non contiene file di gioco né codici di attivazione, ma soltanto le istruzioni necessarie all’installazione.

bash

python3 tools/pw_install.py ../prospero-win-profiles/recipes/warcraft-iii-reign-of-chaos.yml \
    --library ~/prospero-library --wine <path printed above> \
    --file installer=/path/to/Warcraft\ III/Installer.exe

Il programma di installazione di Blizzard si apre sullo schermo del PC. È sufficiente inserire il codice CD, mantenere la cartella predefinita e chiudere il programma al termine dell’installazione.

La ricetta aggiunge quindi tutto ciò che serve al gioco per funzionare sulla PS5: LAV Filters per i filmati, la correzione RenderEdge per il formato widescreen, DXVK per Direct3D e la risoluzione.

Al termine, la struttura risultante sarà la seguente:


~/prospero-library/
  prefixes/warcraft-iii-reign-of-chaos/        il prefix Wine del gioco
  profiles/warcraft-iii-reign-of-chaos.profile il profilo utilizzato dal launcher

La directory ~/prospero-library rispecchia /data/prospero-win sulla PS5.

Trasferire i file sulla PS5

bash

python3 tools/pw_prefix.py push warcraft-iii-reign-of-chaos \
    --library ~/prospero-library --host <PS5 IP> \
    --cpu-dll <Wine build>/dlls/wowprospero/x86_64-windows/wowprospero.dll

Il comando trasferisce il prefix e il profilo tramite FTP e aggiunge il gioco all’elenco del launcher. Il primo trasferimento richiede un po’ di tempo, poiché un prefix può occupare alcune centinaia di MB; quelli successivi inviano soltanto i file modificati.

Il parametro --cpu-dll indica la DLL del traduttore di prospero-win, necessaria all’interno del prefix per i giochi a 32 bit. Il primo trasferimento richiede questo file, mentre quelli successivi lo inviano nuovamente soltanto quando viene modificato.

Se non è già stato fatto, occorre anche copiare i preset del controller (prospero-win-profiles contiene i file input/*.input) nella directory /data/prospero-win/input/.

Giochi di grandi dimensioni

I giochi moderni possono occupare decine di GB e il server FTP della PS5 non è particolarmente veloce. Nei test, la velocità raggiunta è stata di circa 17 MB/s, rendendo necessari circa 25 minuti per trasferire un gioco da 23 GB. Sono disponibili due soluzioni per semplificare queste operazioni.

Il trasferimento può essere interrotto e ripreso successivamente. Ogni file viene registrato non appena è stato ricevuto dalla PS5: se il trasferimento viene interrotto, ad esempio premendo Ctrl+C, mettendo il PC in sospensione o perdendo la connessione di rete, è sufficiente eseguire nuovamente lo stesso comando.

L’operazione riprenderà dal punto in cui si era fermata, senza ricominciare da zero. Il consumo di memoria rimane contenuto indipendentemente dalle dimensioni dei file del gioco.

Se un trasferimento avviato con una versione precedente di pw_prefix.py è stato interrotto, non esiste una registrazione dei file già inviati.

L’opzione --trust-size considera trasferiti i file presenti sulla PS5 con le dimensioni corrette, mentre --force consente di riprendere il trasferimento anche quando la copia presente sulla console non dispone di una registrazione associata.

bash

python3 tools/pw_prefix.py push <game> --library ~/prospero-library --host <PS5 IP> \
    --force --trust-size

Queste opzioni devono essere utilizzate soltanto per completare un trasferimento avviato personalmente. Vengono controllate le dimensioni dei file, non il loro contenuto: un file con dimensioni corrette ma dati differenti viene lasciato invariato. I file del registro di sistema vengono sempre verificati e trasferiti.

È inoltre possibile trasferire i file tramite ps5upload. Utilizzando questo strumento, pw_prefix.py può inviare i file del gioco attraverso ps5upload anziché tramite FTP.

Gli sviluppatori di ps5upload dichiarano velocità di circa 30 MB/s su una PS5 standard e 60 MB/s su una PS5 Pro.

Nei test effettuati su una PS5 standard, tuttavia, non sono stati rilevati miglioramenti rispetto a FTP: entrambi i sistemi hanno trasferito una cartella di prova da 1,2 GB a circa 16 MB/s sulla stessa rete. Il vantaggio potrebbe essere maggiore con una connessione più veloce.

Per utilizzare ps5upload sono necessari due componenti:

  • Il payload ps5upload.elf, da eseguire sulla PS5. Deve essere inviato tramite il proprio ELF loader, come qualsiasi altro payload. Anche il server FTP deve rimanere attivo.
  • Il client da riga di comando ps5upload-lab, da installare sul PC. Per compilarlo, è necessario entrare nella cartella engine/ del repository ps5upload ed eseguire cargo build --release -p ps5upload-lab.

Successivamente, è sufficiente aggiungere --transport ps5upload al comando di trasferimento:

bash

python3 tools/pw_prefix.py push <game> --library ~/prospero-library --host <PS5 IP> \
    --transport ps5upload --ps5upload-client <ps5upload>/engine/target/release/ps5upload-lab

È possibile anche impostare la variabile PS5UPLOAD_LAB con il percorso del client oppure aggiungerlo alla variabile PATH.

I file del gioco vengono trasferiti tramite ps5upload in blocchi di alcuni GB, registrando ogni gruppo una volta che la PS5 lo ha memorizzato. Anche questi trasferimenti possono quindi essere ripresi dopo un’interruzione.

Il registro di sistema, le tabelle dei collegamenti simbolici, wowprospero.dll e il profilo continuano a essere trasferiti tramite FTP. FTP viene utilizzato anche successivamente per verificare che tutti i file siano arrivati con le dimensioni corrette.

Se il payload di ps5upload non è in esecuzione, il trasferimento viene interrotto prima dell’invio dei file e viene mostrato un messaggio di errore.

Mantenere sincronizzati i salvataggi

Sulla PS5, il prefix rappresenta la copia attiva del gioco: le impostazioni e i salvataggi vengono modificati direttamente sulla console. Prima di avviare un nuovo trasferimento verso la PS5, è quindi necessario riportare sul PC le modifiche effettuate:

bash

python3 tools/pw_prefix.py pull warcraft-iii-reign-of-chaos --library ~/prospero-library --host <PS5 IP>
python3 tools/pw_prefix.py status warcraft-iii-reign-of-chaos --library ~/prospero-library --host <PS5 IP>

Il comando pull modifica esclusivamente i file all’interno del prefix del gioco presente nella libreria. Non interviene mai sui file della cartella home dell’utente, nemmeno quando il gioco conserva i salvataggi nella cartella Documenti (vedere la sezione Collegamenti simbolici).

Il comando push rifiuta di sovrascrivere un prefix sulla PS5 che è stato modificato dopo l’ultima sincronizzazione, evitando così la perdita accidentale dei salvataggi. L’opzione --force permette di ignorare questa protezione quando è effettivamente necessario.

Giochi senza una ricetta

Per i giochi privi di una ricetta specifica, è possibile cercare su lutris.net: la maggior parte dei giochi Windows dispone già di uno script, spesso utilizzabile senza modifiche.

È sufficiente salvarlo come file .yml, aggiungere un blocco prospero per la PS5, descritto più avanti, ed eseguirlo con la stessa procedura.

Esistono alcune differenze rispetto a Lutris:

  • Direct3D tramite DXVK. La voce wine: {dxvk: true} installa DXVK 2.6.2 nel prefix, oppure la versione personalizzata indicata dalla ricetta.
  • Giochi OpenGL. I giochi che utilizzano OpenGL, ad esempio tramite opzioni come -opengl, vengono renderizzati attraverso Zink di Mesa, basato su Vulkan. In questo caso, è necessario impostare prospero: {graphics: opengl} nello script di installazione e passare --mesa-zink DIR, come descritto più avanti. Questa scelta esclude l’installazione di DXVK anche se la sezione wine di Lutris contiene dxvk: true (vedere le note sulla compilazione OpenGL).
  • Giochi a 32 bit. I giochi con arch: win32 utilizzano comunque un prefix a 64 bit. Wine sulla PS5 supporta esclusivamente WoW64 e avvia i programmi a 32 bit all’interno di un prefix a 64 bit.
  • Programmi di installazione con pagine Web. Gli installer che mostrano pagine Web, ad esempio per una licenza, richiedono install_gecko: true durante create_prefix.
  • Richieste di input. Le richieste dello script, indicate da input_menu, possono essere soddisfatte con --input ID=VALUE. La variabile $RESOLUTION corrisponde all’opzione --resolution, che utilizza 1920x1080 come valore predefinito.

Se una ricetta utilizza un’istruzione non supportata da pw_install.py, lo strumento si interrompe indicando il passaggio interessato, anziché saltarlo e lasciare un gioco installato solo parzialmente.

Quando una ricetta funziona correttamente, è consigliabile condividerla con il progetto prospero-win-profiles.

Versioni personalizzate di DXVK

Normalmente, dxvk_version indica una versione ufficiale di DXVK. Può tuttavia identificare anche una versione personalizzata del progetto mpereiraesaa/dxvk, utile per i giochi che richiedono modifiche non ancora presenti nella versione ufficiale.

Esempio:

bash

wine:
  dxvk: true
  dxvk_version: "2.6.2-prospero2"   # versione 2.6.2 con correzioni ai thread CS per GTA

Lutris non riconosce queste versioni, quindi le relative ricette possono essere installate esclusivamente tramite pw_install.py. I commenti della ricetta descrivono le modifiche introdotte dalla versione personalizzata e spiegano perché sono necessarie per il gioco.

Lo script inserisce inoltre le eventuali opzioni dxvk.conf aggiuntive accanto all’eseguibile del gioco.

Per aggiungere una versione personalizzata, occorre seguire questi passaggi:

  1. Nel fork, creare il ramo prospero/<upstream version> a partire dal tag ufficiale corrispondente, se non esiste già, e aggiungere le modifiche sotto forma di normali commit. È preferibile utilizzare opzioni disattivate per impostazione predefinita, attivabili tramite dxvk.conf.
  2. Creare il tag v<upstream version>-prospero<n> e compilare la versione utilizzando lo script ufficiale package-release.sh, che impiega i file di cross-compilazione Meson del progetto originale.
  3. Pubblicare una release contenente dxvk-<upstream version>-prospero<n>.tar.gz, con le cartelle x32/ e x64/ organizzate come nella versione ufficiale, insieme al relativo hash SHA-256. Le note della release devono elencare tutte le modifiche. È necessario mantenere la licenza zlib di DXVK.
  4. Aggiungere la versione, l’URL e l’hash SHA-256 alla voce DXVK_RELEASES in tools/pw_install.py e aggiornare la ricetta del gioco affinché utilizzi la nuova versione.

Il blocco prospero

Lutris ignora le chiavi di primo livello che non riconosce. Una ricetta può quindi includere le impostazioni specifiche della PS5 in un blocco prospero, che viene utilizzato per generare le sezioni [display] e [input] del profilo.


prospero:
  name: Warcraft III          # il nome mostrato nel launcher
  graphics: dxvk              # gdi, dxvk, opengl (zink) oppure auto per il gioco
  display: {desktop: 1920x1080, scaling: fit}
  input: {preset: warcraft3}

L’impostazione graphics ha la precedenza sulla voce wine.dxvk di Lutris. Il valore dxvk installa la versione di DXVK specificata.

Il valore opengl installa WGL/Zink di Mesa nel prefix e seleziona la versione nativa di opengl32, consentendo al gioco di eseguire il rendering OpenGL attraverso Zink su Vulkan.

Il valore zink è una denominazione precedente della stessa funzionalità, mentre nel profilo viene indicato graphics = opengl.

La sezione display supporta anche view, mentre show_fps: false nasconde il contatore del frame rate che, per impostazione predefinita, alcuni giochi mostrano nell’angolo superiore sinistro.

Le opzioni refresh e opengl_thread appartenevano al vecchio SDK OpenGL per PS5: sono ancora accettate, ma non producono alcun effetto.

Per utilizzare graphics: opengl, è necessario passare --mesa-zink DIR a pw_install.py, specificando una directory locale generata dal compilatore WGL/Zink di Mesa fissato alla revisione prevista. La directory deve contenere manifest.json, i386-windows/ e x86_64-windows/.

Prima di creare il prefix, lo strumento verifica entrambe le architetture, gli hash e gli import PE entro i limiti previsti. Dopo l’inizializzazione del prefix da parte di Wine, installa la versione di opengl32.dll corrispondente all’architettura del gioco, libgallium_wgl.dll e tutte le DLL aggiuntive indicate nel manifest, selezionando infine opengl32 nativa.

Gli hash collegano i file al manifest, che deve provenire da una compilazione attendibile. I file devono rimanere invariati durante l’installazione.

Se la copia non riesce, non viene generato alcun profilo; la sostituzione dei singoli file è atomica, mentre quella dell’intero gruppo di componenti non lo è.

Sulla console, il launcher verifica e installa il componente dalla directory win/mesa-zink/ dell’applicazione nel prefix esistente del gioco, prima dell’avvio.

Imposta quindi GALLIUM_DRIVER=zink ed esegue un gioco a 32 bit utilizzando la CPU WoW64 nativa e il raggruppamento delle chiamate Vulkan.

Le sostituzioni D3D già presenti rimangono invariate: Zink seleziona WGL per le applicazioni OpenGL e non converte Direct3D.

I giochi il cui eseguibile carica anche wined3d, come hl.exe di Half-Life e Counter-Strike, richiedono un runtime con libvulkan.prx compilata da PS5_Mesa a partire dal commit f2ee389 o successivo (PS5_Vulkan #4).

Con una versione precedente, la finestra rimane nera perché la finestra di verifica nascosta di wined3d mantiene il controllo del display (vedere la sezione Un solo display).

La sezione [application] del profilo viene generata a partire dalla sezione del gioco nello script e contiene l’eseguibile, i relativi argomenti e la cartella di lavoro.

Riferimento

Istruzioni supportate da pw_install.py

Direttive: move, copy, merge, extract (ZIP e TAR; per gli altri formati viene utilizzato 7z), chmodx, execute, write_file, write_config, write_json, input_menu, insert-disc (--disc DIR).

Operazioni Wine: create_prefix, wineexec (con return_code), winetricks (fissato alla versione 20260125), set_regedit (REG_SZ, REG_DWORD, REG_BINARY), delete_registry_key, set_regedit_file, winekill, eject_disc.

File:

  • N/A: I file sono copie possedute dall’utente, specificate con --file ID=PATH.
  • File HTTP(S): Vengono scaricati automaticamente.
  • File con hash: Un file definito come {url: ..., filename: ..., sha256: ...} viene conservato nella cache dei download e verificato tramite hash a ogni installazione. Si tratta di un’estensione aggiunta al progetto, non riconosciuta da Lutris, pensata per mod e DLL di terze parti.
  • Steam: Le fonti Steam non sono supportate.

Menu: Come in Lutris, Wine non aggiunge voci di menu né associazioni di file al PC.

Dettagli di pw_prefix.py

Manifest: Il file ~/prospero-library/.pw/<slug>.json registra le dimensioni e l’hash SHA-256 di ciascun file. Queste informazioni permettono ai trasferimenti di inviare soltanto i file modificati. L’opzione --delete elimina anche i file presenti sulla PS5 ma non più disponibili sul PC.

Avanzamento: Il trasferimento salva progressivamente il manifest ogni 200 file o 256 MB inviati, dopo ogni blocco ps5upload e quando viene interrotto con Ctrl+C o con il comando kill. Anche in caso di terminazione forzata, vengono persi al massimo i dati relativi ai file inviati dopo l’ultimo salvataggio. Questi file verranno trasferiti nuovamente al successivo tentativo.

Memoria: I file vengono letti, sottoposti a hash e trasferiti in blocchi da 4 MB, indipendentemente dalle loro dimensioni. Soltanto i file del registro di sistema vengono letti interamente, perché durante le operazioni di trasferimento vengono riscritti in una singola riga (vedere più avanti).

ps5upload: Ogni blocco, composto da un massimo di 2.000 file o 4 GB, costituisce una singola transazione ps5upload. Il blocco viene inviato da una cartella temporanea contenente collegamenti fisici ai file del gioco presenti in ~/prospero-library/.pw/stage/, senza copiare fisicamente i dati sul PC.

Se il client smette di attendere prima che la PS5 confermi la ricezione del blocco, il trasferimento interroga la porta di gestione del payload, 9114, per verificare se l’operazione è stata completata.

Utente Windows sulla console: Sulla PS5, Wine viene eseguito con l’utente prospero, quindi le cartelle utente di Windows si trovano in C:\users\prospero. pw_install.py crea i prefix utilizzando questo utente.

Se un prefix viene creato con un metodo differente, potrebbe contenere soltanto le cartelle dell’utente originale. La PS5 non può creare autonomamente quelle mancanti. Di conseguenza, i giochi che salvano le impostazioni in AppData perderebbero tali dati a ogni chiusura.

Quando il prefix non contiene la cartella prospero, il trasferimento crea sulla PS5 le cartelle AppData, Documents, Desktop e Saved Games.

Collegamenti simbolici: Un’applicazione PS5 non può crearli, quindi prospero-win li conserva in un file .pw-symlinks per ogni cartella.

  • I collegamenti interni al prefix, relativi alle unità c: e z:, vengono registrati nel file.
  • I collegamenti diretti all’esterno del prefix, come quelli che indirizzano Desktop e Documenti di Wine verso la cartella home dell’utente, vengono sostituiti con cartelle vuote.

Il comando pull non scrive mai nella cartella home dell’utente attraverso un collegamento. Se un vecchio prefix contiene ancora i collegamenti di Wine, il trasferimento trasforma quelli necessari in cartelle reali all’interno del prefix, come avviene sulla PS5, e vi inserisce i file del gioco.

Le cartelle personali e i relativi file rimangono invariati. Se un file finirebbe comunque al di fuori del prefix, il trasferimento lo salta, ne indica il nome e segnala un errore.

L’unica differenza nel registro: La PS5 non può eseguire direttamente codice a 32 bit. Per questo motivo, l’impostazione della CPU WoW64 del prefix, HKLM\Software\Microsoft\Wow64\x86, indica il traduttore di prospero-win sulla console e wow64cpu.dll di Wine sul PC. I comandi push e pull effettuano automaticamente questa sostituzione.

Dimensioni del prefix

Un prefix contiene una propria copia delle DLL di Wine: circa 300 MB utilizzando la versione compilata e alleggerita da build_host_wine.sh, a cui si aggiungono i file del gioco.

Changelog

Novità principali

  • I giochi a 32 bit vengono eseguiti in modalità nativa. La traduzione delle istruzioni non è più necessaria per impostazione predefinita nei giochi a 32 bit; il traduttore rimane disponibile come opzione per ogni singolo gioco e come fallback automatico.
  • Raggruppamento dei comandi Vulkan in batch per i giochi a 32 bit, in modo che i giochi DXVK e Zink non siano penalizzati dal costo dei continui passaggi tra il gioco e il sistema.
  • OpenGL tramite Zink. I giochi OpenGL non necessitano più di una versione speciale dell’applicazione; Zink di Mesa è incluso nel pacchetto.
  • Rete pronta per l’accesso online. I nomi host vengono risolti tramite il resolver della console e il TLS di Windows (schannel) funziona, con un insieme predefinito di certificati radice.
  • Numerose correzioni individuate durante l’esecuzione di GTA San Andreas, GTA IV, Counter-Strike 1.6, Atomic Bomberman, Pizza Tower e programmi Windows più complessi.

Cosa c’è di nuovo

Giochi a 32 bit eseguiti sulla CPU nativa

Finora, tutti i giochi a 32 bit venivano eseguiti attraverso il traduttore x86 di prospero-win. Con la versione v0.2.0, un gioco a 32 bit viene eseguito sulla CPU della console in modalità a 32 bit, grazie a un nuovo backend WoW64 (#432).

I giochi eseguono il proprio codice alla massima velocità; soltanto le chiamate al sistema vengono gestite attraverso il livello di compatibilità.

  • Compatibilità con qualsiasi firmware. Il backend nativo deve registrare i propri gestori dei segnali direttamente con il kernel. Ora individua il relativo punto di ingresso direttamente in libkernel, anziché affidarsi a una versione del firmware analizzata in precedenza, e ne verifica la validità prima dell’utilizzo, compresa la struttura del frame dei segnali del kernel (#681).
  • Fallback automatico. Se, per qualsiasi motivo, il backend nativo non riesce ad avviarsi sulla console, il gioco viene eseguito tramite il traduttore anziché chiudersi (#677, grazie a leolobato).
  • Scelta per ogni gioco. Inserendo [runtime] cpu = translator nel profilo di un gioco, è possibile mantenerlo sul traduttore. I giochi a 64 bit non sono interessati dalla modifica, poiché venivano già eseguiti in modalità nativa.
  • Maggiore stabilità sotto carico. In una rara condizione temporale, un thread del gioco poteva tornare al codice a 32 bit con uno stato del thread errato. Il problema si manifestava con la chiusura di GTA San Andreas circa due secondi dopo l’avvio, a seconda della cache degli shader (#683, #682).

Raggruppamento Vulkan e grafica più veloce

Ogni chiamata effettuata da un gioco al sistema comporta un costo di alcuni microsecondi sulla console, mentre DXVK esegue decine di migliaia di chiamate Vulkan per ogni fotogramma.

La versione 0.2.0 mette in coda queste chiamate e le invia in batch, mantenendone sempre l’ordine e attendendo una risposta soltanto quando il gioco ne ha bisogno (#432 e il lavoro sul raggruppamento svolto in precedenza).

  • Counter-Strike 1.6 con Zink è passato da 2.234 a 24 passaggi per fotogramma, senza alcuna modifica a ciò che viene renderizzato, grazie anche al raggruppamento delle scritture dei descrittori (#672, #674).
  • La compilazione degli shader non blocca più gli altri thread. La compilazione delle pipeline avviene al di fuori del blocco utilizzato per i batch, evitando che una compilazione particolarmente lunga congeli il thread di rendering (#676).
  • Una vera cache degli shader. RADV conserva ora gli shader compilati anche tra un avvio e l’altro, nella directory /data/prospero-win/cache/radv. In precedenza, a ogni avvio venivano ricompilate tutte le pipeline (#668).
  • Versioni di DXVK compilate per prospero-win. Le configurazioni dei giochi possono specificare una versione ottimizzata di DXVK. DXVK 2.6.2-prospero2 introduce operazioni meno costose per i thread CS e opzioni utilizzate dalle configurazioni di GTA San Andreas e GTA IV (#407, #680).

Giochi OpenGL tramite Zink

I giochi OpenGL vengono ora renderizzati tramite Zink di Mesa, basato su Vulkan, utilizzando la CPU in modalità nativa e il raggruppamento delle chiamate in batch.

Zink è incluso nell’applicazione, quindi i giochi OpenGL funzionano con il pacchetto standard; la versione separata basata sull’SDK OpenGL per PS5 non è più necessaria (#438, #456–#466). I profili esistenti con graphics = opengl vengono convertiti automaticamente al nuovo sistema.

Rete

  • Risoluzione dei nomi host. In precedenza, i programmi Windows potevano raggiungere soltanto indirizzi numerici. Ora i nomi vengono risolti tramite il resolver della console, utilizzando le sue impostazioni di rete, con timeout limitati e una breve cache per le ricerche non riuscite (#384).
  • HTTPS tramite il TLS di Windows. schannel funziona ora sulla console grazie a GnuTLS 3.8.13, mentre crypt32 verifica i server utilizzando l’archivio dei certificati radice di Mozilla, aggiornato in base alle pubblicazioni di curl e fissato all’estrazione del 25 settembre 2026 (#388).
  • Nome host stabile. I programmi che richiedono il nome del proprio computer ricevono ora un nome che può essere risolto correttamente, risolvendo le continue richieste del nome host di GTA IV (#471).

Un ringraziamento a heydemoura per il lavoro sul resolver e sul TLS.

Opzioni runtime per ogni gioco

I profili includono ora una sezione [runtime] con opzioni utili per alcuni giochi ma non necessariamente per tutti (documentazione):

  • cpu = native | translator: seleziona il backend della CPU utilizzato da un gioco a 32 bit.
  • thread_scheduling = true: attiva la pianificazione round-robin e le priorità dei thread di Windows (#420, #424).
  • shared_input = true e fast_clock = true: consentono letture più rapide dello stato dei tasti e utilizzano un orologio ad alta risoluzione calibrato (#462).

La libreria ora può inoltre elencare fino a 32 giochi, anziché 16 (#679).

Correzioni

Giochi che caricano dati in sezioni di memoria condivise: i titoli GameMaker, come Pizza Tower, si avviano correttamente anziché terminare con l’errore c000007b (#678, grazie a leolobato).

  • Funzionamento della memoria riservata a un indirizzo fisso. Un programma a 64 bit che riserva memoria a un indirizzo scelto e la rende accessibile in un secondo momento, come avviene con il sistema di protezione di Steam, generava un errore al primo tentativo di scrittura. Ora quella memoria viene gestita come il resto della memoria (#417).
  • Numero corretto di CPU. I giochi rilevano ora le 13 CPU effettivamente utilizzabili, anziché 16, evitando che i pool di lavoro dimensionati in base al numero di CPU lascino alcuni thread in attesa (#419).
  • Stato della virgola mobile corretto nei gestori delle eccezioni, necessario per i runtime gestiti e per il codice che utilizza __try/__except (#408).
  • Funzionamento dei report relativi a memoria, tempo CPU e modifiche alle cartelle. Sulla console, i contatori della memoria dei processi, i tempi di utilizzo del processore e le notifiche relative alle modifiche delle directory restituivano zero o nessun risultato (#413, #414, #415).
  • La memoria nuovamente allocata viene azzerata, come previsto da Windows, anche quando le pagine di dimensioni maggiori della console contengono altri dati (#409).
  • ShadowMountPlus e loader simili. Quando /data è accessibile ma l’applicazione non dispone di privilegi elevati, viene ora richiesta l’elevazione dei privilegi anziché interrompere l’avvio (#423).
  • Atomic Bomberman è ora giocabile: il traduttore gestisce le istruzioni del runtime Watcom, i tasti freccia vengono riconosciuti correttamente e l’input non blocca più il gioco (#425, #426, #428).

Un ringraziamento a kvaps per le correzioni al loader e ad Atomic Bomberman, e a inf1nit3 per la correzione della configurazione di compilazione (#658).

Diagnostica

  • Il registro dell’applicazione viene scritto da un thread dedicato, evitando che la registrazione dettagliata degli eventi blocchi il gioco ogni pochi secondi (#669).
  • Le chiamate di sistema lente vengono registrate insieme allo stack del gioco, mentre i nuovi profili per fotogramma suddividono il tempo di ogni frame tra il gioco, il sistema e il driver della GPU (#673, #661, #662).
  • La voce [debug] env in un profilo aggiunge variabili diagnostiche per un singolo gioco, senza dover ricompilare nulla (#469).

Limitazioni note

  • Il backend della CPU nativa è stato convalidato sulla console del manutentore. Sugli altri firmware esegue controlli all’avvio e passa al traduttore se rileva qualsiasi discrepanza, consentendo ai giochi di continuare a funzionare in entrambi i casi. Sono benvenute segnalazioni relative ad altre versioni del firmware.
  • La risoluzione dei nomi utilizza le impostazioni DNS della console. Se la rete della console blocca il DNS, come avviene in alcune configurazioni per impedire gli aggiornamenti del firmware, anche i programmi Windows non potranno risolvere i nomi.
  • Il componente di supporto per il firmware è rimasto invariato rispetto alla versione v0.1.1 (Lapy v0.3.2-experimental), ora fissato nella configurazione di compilazione.

Download: prospero-win v0.2.0

Download: Source code prospero-win v0.2.0

Alcune parti di questo articolo sono state generate con l’aiuto dell’intelligenza artificiale.

🔥 Prodotti in promozione e articoli più venduti: PS5

Vedi altri prodotti PS5

Questo articolo contiene link affiliati a Amazon. Se acquisti tramite questi link, potrei guadagnare una commissione senza costi aggiuntivi per te.

Ultimo aggiornamento 2026-10-14 / Link di affiliazione / Immagini da Amazon Product Advertising API

LASCIA UN COMMENTO

Per favore inserisci il tuo commento!
Per favore inserisci il tuo nome qui
Captcha verification failed!
Punteggio utente captcha non riuscito. Ci contatti per favore!

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.