Home Mobile Android Online il nuovo report sui progressi raggiunti dall’emulatore Dolphin: Nuove funzionalità e...

Online il nuovo report sui progressi raggiunti dall’emulatore Dolphin: Nuove funzionalità e miglioramenti grafici

170
0

Pubblicato un nuovo report sui progressi raggiunti nello sviluppo dell’emulatore Dolphin, tra i più noti e rispettati emulatori delle console GameCube e Wii.

Questa nuova release, la versione 2412, si concentra soprattutto sulla rifinitura e sull’ottimizzazione, migliorando l’esperienza di gioco per gli utenti su varie piattaforme, come Windows, macOS, Linux, Android e Steam Deck.

Uno degli aspetti più rilevanti di questa versione riguarda il miglioramento dell’audio HLE (High-Level Emulation). Diversi giochi beneficiano ora di una resa sonora più accurata, grazie a correzioni che hanno perfezionato i filtri low-pass e biquad.

Ad esempio, il gioco I SPY: Spooky Mansion ha visto una risoluzione del problema del suono del vento, che risultava eccessivamente forte.

Tuttavia, queste modifiche avevano introdotto problemi in Need for Speed: Nitro, dove il rumore del motore diventava troppo alto quando si attivava il nitro.

Fortunatamente, il problema è stato risolto dopo aver corretto alcuni calcoli relativi all’estensione del segno a 40 bit, riportando l’audio alla normalità.

Un’altra area di intervento ha riguardato la sincronizzazione tra CPU e GPU, con l’obiettivo di ridurre gli errori popup in giochi specifici.

Anche Eternal Darkness, un titolo storicamente problematico per Dolphin, ha ricevuto particolare attenzione per essere reso nuovamente giocabile con questa release.

Un ulteriore miglioramento ha coinvolto il sistema di risoluzione interna automatica (Auto IR), risolvendo un problema che causava la corruzione del Bounding Box.

Questo bug, presente in giochi come Disney’s Magical Mirror e Paper Mario: The Thousand-Year Door, è stato finalmente individuato e corretto.

La soluzione è stata relativamente semplice: un aggiornamento del pixel shader manager che garantisce l’allineamento corretto tra RAM e VRAM durante le modifiche della dimensione della finestra.

Risolto un Deadlock su Linux con driver NVIDIA e Backend Vulkan

A marzo 2024, gli sviluppatori hanno affrontato un problema critico che affliggeva gli utenti Linux con driver NVIDIA proprietari e il backend video Vulkan.

Durante l’emulazione, ridimensionare la finestra del gioco causava un blocco completo dell’interfaccia di Dolphin. L’analisi del problema ha portato a individuare un malfunzionamento nella funzione vkWaitForFences, utilizzata nel gestore dei buffer di comando Vulkan.

L’investigazione ha rivelato che la funzione vkAcquireNextImageKHR, utilizzata per acquisire nuove immagini, non gestiva correttamente una condizione di errore, lasciando un semaforo senza segnale e causando il blocco.

Nonostante i test su build precedenti, il problema si manifestava in tutte le versioni testate, risalenti fino al 2019.

La soluzione definitiva è arrivata grazie al contributo di TellowKrinkle e CasualPokePlayer, che hanno implementato un fix funzionante, confermato dagli sviluppatori affetti dal problema.

Tuttavia, l’origine del bug è stata individuata in una modifica introdotta nei driver NVIDIA, a partire dalla versione 550.54.14 rilasciata il 23 febbraio 2024.

Le versioni precedenti non manifestavano il problema, indicando che i driver più recenti necessitavano di una gestione specifica.

Risoluzione di bug grafici nei giochi WiiWare su Dolphin

Un’altra recente correzione in Dolphin ha riguardato il gioco WiiWare LIT, affetto da problemi di visualizzazione del testo nei menu. L’indagine ha rivelato che gli sviluppatori del gioco avevano attivato l’illuminazione del testo senza specificare normali.

Su console Wii reali, la GPU riutilizza l’ultima normale ricevuta, mentre Dolphin applicava un valore predefinito (0, 0, 0), rendendo il testo completamente nero.

Pokechu22 ha implementato una modifica che permette a Dolphin di memorizzare e riutilizzare le normali, risolvendo il problema.

Questa soluzione è simile a tecniche usate in giochi come Rogue Squadron, dove il riutilizzo delle normali e dei vettori tangenti migliora le prestazioni.

Correzione degli errori di decodifica degli Opcode in Dolphin

Una delle caratteristiche più avanzate nel campo dell’emulazione riguarda il “cycle accurate”, dove l’emulatore esegue ogni ciclo in modo identico a come farebbe la console originale, permettendo una riproduzione perfetta dei giochi, inclusi eventuali problemi di temporizzazione e lag.

Tuttavia, Dolphin, l’emulatore per GameCube e Wii, non punta a essere “cycle accurate” per motivi di prestazioni.

L’emulazione precisa a livello di ciclo richiederebbe un enorme carico computazionale e ridurrebbe notevolmente le prestazioni, quindi Dolphin si concentra su un buon compromesso tra accuratezza, compatibilità e velocità.

Un aspetto importante per ottenere prestazioni ottimali è la separazione dei thread CPU e GPU (dual core), che consente di emulare la CPU e la GPU su core separati.

Sebbene questo aumenti la velocità, può causare problemi di sincronizzazione, portando a rallentamenti e malfunzionamenti in alcuni giochi.

Nel caso degli errori di decodifica degli opcode, questi sono causati quando Dolphin elabora comandi GPU incompleti. Quando il gioco cambia il punto di memoria da cui la GPU legge i comandi, è possibile che si formino comandi non validi, che causano pop-up di “opcode sconosciuti”.

Tilka ha risolto questo problema facendo sì che Dolphin processi tutti i comandi pendenti quando viene riformattata la posizione di lettura della GPU.

Questa modifica ha risolto i problemi in oltre 20 giochi, tra cui titoli come Metroid Prime, Resident Evil Zero e The Force Unleashed II, eliminando gli errori di opcode sconosciuti, che non erano fatali ma causavano fastidi per gli utenti.

Inoltre, questa correzione ha migliorato l’emulazione di Harvest Moon: Tree of Tranquility, che ora si avvia correttamente senza lampeggiamenti verdi in modalità single core.

Sintesi della patch GamePatch

Correzione della Decodifica degli Opcode in Eternal Darkness

L’aggiornamento 2409-268 mirava a migliorare la sincronizzazione tra CPU e GPU per evitare errori di decodifica degli opcode, ma questa modifica ha introdotto un problema imprevisto con il gioco Eternal Darkness, che ora si blocca all’avvio, sia in modalità dual core che single core.

Questo blocco non era presente prima, quando la sincronizzazione era meno accurata, ma portava anche a una emulazione meno fedele al comportamento reale della console.

Il problema deriva da una “race condition” nel codice di rendering grafico di Eternal Darkness. Il gioco utilizza la funzione GXSetDrawDone per aggiungere un comando alla stream della GPU, che solleva un’interrupt quando eseguito.

Tuttavia, dopo aver aggiunto il comando, la stream viene riorganizzata, e Dolphin, con la correzione degli opcode, non eseguiva correttamente i comandi alla fine della stream, impedendo l’esecuzione dell’interrupt.

Questo comportamento era diverso rispetto all’hardware reale, che eseguiva l’interrupt prima che il gioco potesse cambiare l’indirizzo della stream.

Il cambiamento delle tempistiche di ciclo di Dolphin, che introduce un ritardo minimo di 500 cicli prima di sollevare l’interrupt, causava il problema.

Durante questo ritardo, il gioco riusciva a cambiare l’indirizzo della stream, facendo sì che l’interrupt sollevato successivamente non fosse gestito correttamente, causando il blocco del gioco.

La soluzione adottata è stata una patch specifica per Eternal Darkness, che sostituisce la funzione GXSetDrawDone con GXDrawDone, più sicura, forzando il gioco a attendere che l’interrupt venga sollevato prima di proseguire.

Questo approccio ha risolto il problema senza impattare le prestazioni generali o causare regressioni in altri giochi. La patch è stata applicata automaticamente a tutte le varianti regionali del gioco nella versione più recente di Dolphin.

Sintesi della patch DSP-HLE

Correzione dell’audio del Wii Remote in diversi giochi

Il Wii Remote è un controller complesso da emulare, dotato di funzionalità come il controllo del movimento, attacchi opzionali, e una piccola quantità di memoria, oltre a un altoparlante integrato.

Sebbene l’altoparlante del Wii Remote fosse un elemento poco utilizzato e piuttosto trascurato, alcuni giochi lo impiegavano per effetti sonori opzionali.

Quando si emula un Wii Remote su Dolphin, i dati audio vengono inviati all’uscita audio standard, ma utilizzando un vero Wii Remote o il passthrough Bluetooth, è possibile ottenere un audio simile a quello della console.

Recentemente, sono stati identificati e corretti gravi bug nell’implementazione DSP-HLE di Dolphin per un microcodice AX utilizzato nelle fasi iniziali della Wii, che causavano problemi nell’audio del Wii Remote in alcuni giochi. Questi bug erano:

  1. Filtri non correttamente gestiti: La differenza di dimensioni tra i filtri high-pass e biquad non veniva considerata, causando la corruzione di memoria adiacente.
  2. Avanzamento errato dei puntatori del buffer dei campioni: I puntatori del buffer venivano avanzati di 32 campioni per millisecondo, anziché 6 campioni, causando corruzione audio, spesso nascosta dal primo bug.
  3. Byte-swapping errato delle PB update: Sebbene non siano stati trovati giochi che utilizzassero questa caratteristica, il problema potrebbe aver influenzato alcuni giochi.

I primi due bug influivano su molti giochi rilasciati tra il 2006 e il 2007. Alcuni dei titoli corretti includono:

  • Excite Truck
  • Ice Age 2: The Meltdown
  • Kororinpa: Marble Mania
  • Shrek the Third
  • Super Monkey Ball: Banana Blitz
  • Tiger Woods PGA Tour 07
  • WarioWare: Smooth Moves
  • Wing Island

Un fatto interessante è che WarioWare: Smooth Moves era l’unico gioco con una segnalazione di bug attiva riguardante l’audio del Wii Remote.

Inoltre, giochi che utilizzano il microcodice di Zelda (come The Legend of Zelda: Twilight Princess) non sono stati influenzati da questi bug, nonostante siano stati rilasciati nel 2006.

La correzione dei bug ha migliorato l’accuratezza dell’emulazione audio senza impattare la performance o introdurre nuovi problemi in altri giochi.

Sintesi del Report su Flatpak per Dolphin

Linux è composto da molteplici distribuzioni, ognuna con il proprio metodo di gestione dei pacchetti e delle versioni dei software. Questo rende difficile sviluppare applicazioni universali che funzionino su tutte le distribuzioni.

Dolphin, in passato, ha offerto versioni ufficiali per Ubuntu, ma queste non erano compatibili con altre distribuzioni, portando gli utenti a dover compilare il software o usare il pacchetto della loro distribuzione.

Linus Torvalds ha descritto il processo di costruzione di applicazioni per Linux come una “grande rottura”.

Per risolvere questo problema, è emersa la soluzione Flatpak, che permette di costruire applicazioni su una base comune (“runtime”) contenente tutte le librerie necessarie.

Le applicazioni Flatpak non dipendono dai pacchetti della distribuzione, ma piuttosto da una runtime universale, rendendo il software compatibile su diverse distribuzioni Linux.

Questo sistema è supportato da Flathub, il repository più grande per il formato Flatpak, che è preinstallato su Steam Deck.

Dolphin ha deciso di adottare Flatpak per semplificare l’installazione su diverse distribuzioni, in particolare per SteamOS, dove il formato è ufficialmente supportato.

Con l’aiuto di cpba e ColinKinloch, e grazie al lavoro di OatmealDome per integrare il supporto nei sistemi di costruzione, ora è possibile scaricare versioni Flatpak di Dolphin dai seguenti repository:

Tuttavia, le build su Flathub sono ancora non ufficiali a causa di alcune modifiche in corso all’infrastruttura, e Dolphin non è ancora verificato su Flathub. Nonostante ciò, il team prevede di risolvere questi problemi a breve.

Gli utenti di AppImage sono stati informati che il lavoro su Flatpak precederà altre soluzioni.

Sintesi del Report su sincronizzazione GPU e PI_FIFO_RESET

Dopo aver ridotto significativamente gli errori di opcodici sconosciuti nei giochi, Tilka ha notato un nuovo problema: l’emergere di errori di opcode sconosciuti in alcuni giochi, principalmente al momento della chiusura.

Il primo gioco segnalato per questo problema è stato New Super Mario Bros. Wii, che ha portato a un’indagine approfondita.

In Dolphin, quando si utilizza un singolo core, i comandi GPU si accumulano in memoria per 1000 cicli, e a volte vengono copiati in un buffer interno per mascherare il processo di accumulo.

Quando il gioco chiede di fermare l’esecuzione, come nel caso della chiamata GXAbortFrame di New Super Mario Bros. Wii, Dolphin svuota il buffer interno ma non quello di gioco, il che può portare a eseguire comandi incompleti o errati.

Per risolvere questo, Dolphin ora sincronizza la GPU con la realtà del processore e resetta il buffer interno, evitando l’esecuzione errata di comandi incompleti.

Questa correzione ha avuto un impatto positivo su diversi giochi problematici, migliorando la compatibilità di titoli come:

  • Deadliest Catch – Sea of Chaos
  • G.I. Joe – The Rise of Cobra
  • Monster 4×4 – World Circuit
  • The Oregon Trail

Nonostante i miglioramenti, la correzione è solo una soluzione temporanea, poiché il problema principale (la mancata sincronizzazione tra il buffer di gioco e quello interno) persiste.

Questo causa ancora malfunzionamenti in giochi come SpongeBob SquarePants featuring Nicktoons: Globs of Doom nella versione più recente.

Tilka ha condotto ulteriori test hardware e identificato comportamenti che richiedono altre modifiche, che potrebbero essere implementate in future versioni di Dolphin.

Sintesi della correzione MetaFortress in Kirby’s Adventure Wii

Il MetaFortress è un sistema di protezione antipirateria usato da alcuni giochi su Wii. Dolphin è in grado di gestire i controlli di MetaFortress, ma per alcuni giochi includiamo delle patch per bypassarlo.

Il sistema non solo verifica la pirateria, ma cerca anche di rilevare modifiche al gioco stesso, il che può causare problemi durante la creazione di cheat o mod.

Kirby’s Return to Dream Land (conosciuto in Europa come Kirby’s Adventure Wii) è uno dei giochi che beneficia di una patch per bypassare il MetaFortress.

Tuttavia, quando la patch della versione nordamericana è stata portata su quella europea, sono stati commessi degli errori. Se l’utente abilitava la patch, il gioco si bloccava su uno schermo nero a causa di indirizzi errati nei file della patch.

Un utente ha segnalato il problema, ma il suo post non ha ricevuto la giusta attenzione, vaguerant, un altro sviluppatore, ha identificato il problema in modo indipendente e ha preso in carico la correzione.

Ora, con la modifica implementata, la patch dovrebbe funzionare correttamente anche nella versione europea, permettendo ai giocatori di evitare i problemi legati a MetaFortress.

Con questa correzione, si spera che la protezione MetaFortress sia finalmente sconfitta, rendendo più facile giocare e modificare i titoli protetti.

Sintesi delle novità del Branch Watch Tool in Dolphin

Dolphin ha visto l’integrazione di alcune nuove funzionalità nel Branch Watch Tool, un potente strumento di reverse-engineering che è stato continuamente migliorato da mitaclaw.

Anche se il tool è stato introdotto in versioni precedenti di Dolphin (5.0), mitaclaw ha continuato a perfezionarlo nei mesi successivi per completare il suo sviluppo.

Le principali novità introdotte sono due:

  1. Aggiunta di un Sottomenu per Impostare i Breakpoint su Più Istruzioni: Ora è possibile impostare breakpoints su più istruzioni contemporaneamente, selezionando una riga di codice. Questa funzione è utile quando si hanno più candidati per i branch (rami condizionali) e si vuole verificare in quale ordine vengono eseguiti. Inoltre, il menu contestuale mostra chiaramente se una posizione ha già un breakpoint impostato, tramite due icone: una grande circolare per le posizioni con breakpoint già attivi, e una piccola quadrata per quelle parzialmente configurate.
  2. Miglioramenti nella Gestione dei Branch Condizionali: In precedenza, era possibile solo sostituire un branch condizionale con una “no-operation instruction” (nop), costringendo il branch a seguire sempre il suo percorso falso. Ora, però, il tool offre la possibilità di rendere un branch condizionale sempre vero, rendendolo incondizionato, e di invertire le condizioni del branch (ad esempio, trasformando un beq in bne, un ble in bgt, e così via). Inoltre, è ora possibile invertire il controllo di decremento di un branch, cambiando ad esempio bdnz in bdz e viceversa.

Questi miglioramenti sono pensati per chi usa il Branch Watch Tool per la ricerca e lo sviluppo, offrendo maggiore flessibilità e precisione nel debug dei giochi e nelle operazioni di reverse-engineering.

Per una guida dettagliata su come utilizzare queste nuove funzionalità, è disponibile un tutorial nel menu Tool > Help dello strumento stesso.

Sintesi del miglioramento del JIT Widget in Dolphin

Il JIT widget in Dolphin, utilizzato per analizzare l’output del recompiler just-in-time (JIT), è stato recentemente rinnovato da mitaclaw per migliorare le sue funzionalità, che erano rimaste invariate dal 2008, da quando il widget fu creato.

Originariamente, il widget non era in grado di visualizzare correttamente le nuove funzionalità come la cache del codice “far-code” e il motore di emulazione “Cached Interpreter”, che sono stati introdotti anni dopo la sua creazione.

Il miglioramento del JIT widget include diverse nuove funzionalità significative:

  1. Visualizzazione dei Blocchi di Codice Ricompilato: Ora, il widget mostra un elenco di tutti i blocchi di codice ricompilato memorizzati nella cache, permettendo agli sviluppatori di analizzare più facilmente l’output del JIT.
  2. Rimozione dei Blocchi di Codice dalla Cache: Gli utenti possono selezionare e cancellare blocchi specifici di codice dalla cache del JIT, costringendo il sistema a ricompilarli, il che è utile per il debug e per analisi approfondite.
  3. Miglioramenti nelle Opzioni di Filtro: Il widget ora include un filtro più generale per il controllo del codice, che in precedenza era disponibile solo tramite il contesto del code widget. L’azione “Recompiles Physical Address” è stata integrata come opzione di filtro nel JIT widget.
  4. Supporto Completo per la Far-Code Cache e il Cached Interpreter: La nuova versione del widget ora supporta pienamente la far-code cache e il Cached Interpreter, che prima non venivano visualizzati correttamente.
  5. Accesso Facile alle Statistiche della Memoria JIT: Cliccando sulla barra di stato, gli utenti possono ora visualizzare le statistiche della memoria JIT, che erano precedentemente nascoste.

Questi cambiamenti rendono il JIT widget uno strumento molto più utile per i pochi sviluppatori e ricercatori che lavorano sull’analisi e l’ottimizzazione del recompiler di Dolphin.

Sintesi del Movimento “Stop Killing Games”

Nel 2024, la scena dell’emulazione ha subito diversi colpi negativi, con azioni legali contro emulatori come Yuzu e Ryujinx per Nintendo Switch e l’interferenza dell’Ufficio del Copyright degli Stati Uniti, che ha rifiutato l’accesso remoto a versioni emulate di giochi protetti da copyright.

Inoltre, Sega ha annunciato che rimuoverà SEGA Mega Drive & Genesis Classics da Steam. Questi eventi evidenziano l’indifferenza delle corporazioni riguardo alla conservazione dei videogiochi, specialmente quelli più vecchi, e la crescente difficoltà di accesso legale ai giochi.

Una delle principali preoccupazioni oggi riguarda i giochi online-only, che dipendono dai server dei publisher. Quando questi server vengono chiusi, i giochi diventano completamente inutilizzabili, anche se il gioco è stato acquistato.

Il movimento Stop Killing Games cerca di fermare questa pratica, argomentando che i consumatori dovrebbero poter continuare a giocare ai loro giochi acquistati anche dopo che i server sono disattivati, facendo appello ai diritti dei consumatori.

Il movimento sta cercando di ottenere cambiamenti legislativi, in particolare in Europa, dove ha avviato una Iniziativa dei Cittadini Europei, una petizione che mira a raccogliere un milione di firme.

Se raggiunto questo obiettivo, la Commissione Europea prenderà in esame la proposta. L’obiettivo non è che i publisher debbano mantenere i server online per sempre, ma che prima di disattivarli, devono rendere i giochi giocabili offline, come rilasciare patch o software per server privati.

Anche se la questione non riguarda direttamente i giochi più vecchi come quelli per GameCube o Wii, il movimento ha implicazioni significative per il futuro della preservazione dei videogiochi e dei diritti dei consumatori.

Il supporto a questa causa potrebbe portare a un cambiamento importante nel settore, migliorando l’accesso ai giochi a lungo termine.

Se sei cittadino dell’UE, il movimento incoraggia la firma dell’iniziativa per sostenere una legislazione che protegga i diritti dei consumatori nel mondo dei giochi online.

Fonte: x.com

LASCIA UN COMMENTO

Per favore inserisci il tuo commento!
Per favore inserisci il tuo nome qui

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.