Home Mobile Android Pubblicato un nuovo report per Mikage, l’emulatore 3DS e diretto avversario di...

Pubblicato un nuovo report per Mikage, l’emulatore 3DS e diretto avversario di Citra

278
0

Pubblicato un nuovo report per Mikage, l’emulatore 3DS e diretto avversario di Citra sviluppato da Tony Wasserka, conosciuto anche come neobrain, un noto sviluppatore di emulatori che ha contribuito a progetti come Dolphin, PPSSPP e Citra.

Mikage è stato creato da zero quando neobrain ha individuato un’opportunità per un emulatore 3DS di qualità superiore alla media su dispositivi Android.

Attualmente, molti giochi si avviano e funzionano. Alcuni di essi sono: Animal Crossing: New Leaf, The Legend of Zelda: Ocarina of Time 3D, Rayman Origins e altri ancora.

Avvio di un 3DS virtuale

Mikage, orientato verso un’eccellente compatibilità fin dall’inizio, ha richiesto una serie di diversi file di sistema con cui normalmente opera una console 3DS reale.

Per lungo tempo, ciò ha comportato un mix complicato di estrazione dei file da una console, decrittazione manuale e posizionamento nei percorsi corretti.

Fare tutto ciò da zero richiedeva spesso giorni. Chiaramente, questa non era l’esperienza utente che ci si aspettava. Durante lo sviluppo iniziale, non era chiaro quali file fossero necessari e come l’utente avrebbe dovuto ottenere questi dati.

Fare scelte sbagliate in questo ambito significava che gli utenti non saranno in grado di far funzionare l’emulatore o saranno costretti ad aggiungere nuovi file dopo ogni aggiornamento.

Ora che il core dell’emulatore è diventato sufficientemente maturo, è stato adottato un buon approccio che finora ha funzionato bene nella loro esperienza.

Tuttavia, implementare questo processo di avvio più fluido ha richiesto ancora una combinazione di nuove funzionalità dell’emulatore, interfacce aggiuntive nell’interfaccia utente e una GUI di configurazione ben integrata.

Il problema principale era dato dal supporto alla decrittazione: praticamente tutti i file di sistema 3DS sono criptati con uno dei 4 schemi sempre più complicati (chiamati Secure1 – Secure4).

Gli sviluppatori hanno basato gli algoritmi crittografici sulla potente libreria Crypto++ per produrre risultati più affidabili con meno lavoro.

Tuttavia, la comprensione degli schemi di crittografia stessi, di fronte alla mancanza di documentazione su di essi, ha richiesto più tempo.

Un’altra complicazione sorge se si considerano le chiavi di decrittazione stesse. In che formato dovrebbero essere memorizzate le chiavi? Quali delle oltre 50 chiavi abbiamo bisogno? Quali strumenti dovremmo fornire per estrarle?

Fortunatamente, proprio mentre si trovavano sul punto di affrontare questo problema, lo sviluppatore Steveice10 ha pubblicato uno script chiamato GodMode9 esattamente per questo scopo.

Dopo averlo provato, è stato riscontrato che il processo di estrazione è estremamente facile per chiunque abbia una 3DS modificata, e i dati estratti includono tutto ciò di cui si ha bisogno per un’emulazione precisa della 3DS.

Con le chiavi crittografiche e gli algoritmi di decrittazione in posizione, è possibile caricare i file di installazione dei titoli per configurare i file di sistema 3DS.

Questo processo richiede l’implementazione del supporto per la lettura dei file CIA, un formato di contenitore che è semplice di per sé ma che avvolge un insieme di altri file in formati diversi.

Sebbene implementare il supporto per ciascuno di questi file non sia stato particolarmente difficile singolarmente, la complessità aumenta rapidamente quando si considerano tutti i casi limite.

Ora che avevamo implementato tutte queste cose tecniche, tutto ciò che rimaneva era incapsularle in una bella interfaccia utente che automatizzasse il processo.

Il nuovo assistente di configurazione si occuperà di ciascuno dei passaggi sopra descritti per l’utente. Senza leggere questo post sul blog, l’utente non indovinerebbe mai quanto sta accadendo dietro le quinte!

Vale la pena notare che nulla di tutto questo era fattibile quando si è iniziato a lavorare su Citra, il che ha portato a un’esperienza davvero povera.

I giochi non si avviavano a meno che non fossero estratti con strumenti speciali sviluppati da zero (braindump, successivamente uncart); i dati dalle console fisiche (ad esempio, Miis) non potevano essere importati; e molte funzionalità non erano disponibili (Amiibo, app di sistema, …).

Con il vantaggio della retrospettiva e metodi facili per estrarre le chiavi necessarie, progettare Mikage come decrittazione predefinita offre un’esperienza migliore che supporta tutte le funzionalità che l’utente vorrebbe mai utilizzare senza dover passare attraverso fastidiose configurazioni aggiuntive.

Niente panico! A meno che non si tratti di Sound…

Nell’ultimo aggiornamento sui progressi, è stata mostrata una promettente fase iniziale del supporto audio.

Il lavoro è proceduto bene e ha visto ottimizzazioni generali, in particolare un grande aumento di velocità per il “prepararsi” richiesto dall’emulatore DSP al primo avvio di un gioco.

Tuttavia, vogliamo mettere in evidenza un problema in particolare qui, che riguarda l’emulazione audio difettosa.

Immagina questa situazione: hai giocato con entusiasmo al tuo gioco 3DS preferito per ore. Sei appena arrivato alla porta che porta al boss finale.

Attraversi la porta con trepidazione, e all’improvviso il suono nelle cuffie diventa… assordante. L’audio è dolorosamente forte e distorto oltre ogni riconoscimento.

Ti affretti a abbassare il volume, ma è troppo tardi. Con le orecchie ancora che ronzano, ti chiedi cosa sia appena successo. Quello che è chiaro è che questo difetto è stato così intenso da rovinare l’intera esperienza per te. Quasi ci è successo anche a noi durante lo sviluppo.

Mentre idealmente vorremmo risolvere i bug sottostanti che causano questo problema in primo luogo, i bug degli emulatori fanno parte della realtà: non potremo mai escludere che dopo 2 ore di gioco un qualche tipo di overflow sottile dei numeri possa causare tali problemi.

Per quanto ne sappiamo, praticamente tutti gli emulatori accettano questo fatto e quindi si riferiscono a un avviso di “Usa a tuo rischio e pericolo”.

Causare potenzialmente danni duraturi alle tue orecchie non è quello per cui siamo qui, quindi invece stiamo facendo un passo in più e aggiungendo uno strato di protezione per rilevare i casi in cui il motore audio è chiaramente andato fuori strada.

Una “modalità di panico”, per così dire, che abbassa immediatamente tutto il volume per evitare il peggio.

Il trattamento audio è un campo molto specifico di per sé, quindi abbiamo chiesto aiuto su Mastodon: in appena un giorno, molte persone più esperte nel campo di noi ci hanno contattato per aiutarci a capire come affrontare questo importante problema.

Anche se non siamo ancora riusciti ad implementare effettivamente la modalità di panico, abbiamo già una buona mappatura, rendendo lo sforzo molto più prevedibile.

Per il momento, questo ci permette di continuare a migliorare l’emulazione audio stessa. Grazie ancora a tutti coloro che hanno contribuito con le loro conoscenze per aiutarci a progredire qui!

L’arte di esporre le immagini

Nell’arte di visualizzare le immagini, emulare il complesso processo grafico 3D implementato in una GPU embedded come la PICA200 è una sfida enorme con molte attività collaterali.

Anche ignorando tutta questa complessità, solo il fatto di ottenere immagini renderizzate sullo schermo è finito per essere un enorme labirinto.

Idealmente l’emulazione dovrebbe funzionare a circa 60 FPS per corrispondere al tasso di aggiornamento di un display 3DS, ma nella pratica questo non è sempre il caso.

Se il monitor è configurato per 144 Hz o se il motore audio è in ritardo rispetto all’emulazione di base, o se ci sono temporanei cali di frame, gestire male uno qualsiasi di questi problemi può causare audio intermittente, ritardi dei frame o audio/video non sincronizzati.

Sebbene non abbiano ancora risolto il problema in modo completamente soddisfacente, hanno messo insieme un framework per la presentazione asincrona che risolverà i tipi di problemi più evidenti permettendo ulteriori affinamenti in seguito.

C’è ancora molto territorio inesplorato anche tra i giganti come Dolphin. Gli interessati ai dettagli tecnici possono trovare molte idee utili delineate in modo molto più dettagliato dagli sviluppatori di redream.

Inoltre, è stata ristrutturata dietro le quinte la codifica Vulkan per consentire la condivisione del codice di rendering tra il core dell’emulatore e l’interfaccia utente.

L’obiettivo principale era evitare l’effetto di immersione interrotta che si riscontra nella maggior parte degli altri emulatori, dove aprire l’interfaccia grafica per modificare le impostazioni dell’emulatore porta a un cambiamento radicale dell’interfaccia.

Grazie a questa ristrutturazione, l’esperienza di Mikage risulta molto più fluida, grazie alla maggiore interazione tra GUI ed emulazione.

Mikage è probabilmente il primo emulatore per una console moderna a implementare questa soluzione, quindi si consiglia di rimanere aggiornati per scoprire le sue conseguenze pratiche.

Lascialo come l’hai trovato

Una sessione di emulazione termina come inizio, ma cosa accade effettivamente in un emulatore quando l’utente preme il pulsante di stop?

Questo non è un argomento banale se si considerano i molti componenti emulati che funzionano in parallelo, ognuno ottimizzato per gestire innumerevoli operazioni al secondo.

Tuttavia, aggiungere controlli di uscita ovunque comporterebbe un onere costoso per qualcosa che accade solo una volta.

A volte è l’unica opzione, ad esempio quando la GPU emulata si è già spenta mentre il sottosistema Display era ancora in attesa di nuovi frame. Trovare ognuna di queste dipendenze è stato abbastanza complicato di per sé.

Nella maggior parte dei casi, utilizziamo invece eccezioni C++ per uscire dai cicli caldi senza influire sulle prestazioni dell’emulazione o richiedere complessi refactoring del codice.

Tuttavia, dobbiamo fare attenzione quando si generano eccezioni in una coroutine o da codice compilato appena-in-tempo, in quanto questi ambienti non possono propagare facilmente le eccezioni al loro genitore.

Si può fare, ma ci sono alcune astuzie interessanti coinvolte (cerca std::exception_ptr se sei interessato ai dettagli tecnici!).

Con questo in atto, si è interrotto con successo l’emulatore e ci si trova nuovamente di fronte all’interfaccia utente principale. Ci sono altri problemi da affrontare una volta che l’utente decide di giocare a un altro gioco.

L’interfaccia utente potrebbe ancora mantenere uno stato relativo al core di emulazione che non è stato azzerato correttamente. Questo è relativamente facile da risolvere ma può richiedere del tempo.

Fortunatamente, abbiamo progettato il nostro emulatore con un’attenzione particolare alla localizzazione dello stato e utilizziamo ampiamente le funzionalità di gestione delle risorse di C++, quindi non abbiamo gli stessi problemi nel core del nostro emulatore che affliggono spesso molti altri progetti.

Infine, ci sono problemi di qualità della vita di cui preoccuparsi: i bug dell’emulatore non sono divertenti per nessuno, ma almeno vogliamo mostrare un popup amichevole e tornare all’interfaccia utente anziché far crashare l’intero programma.

Dopotutto, non esiste un emulatore privo di bug, quindi preferiamo contrastare una sorpresa spiacevole con un messaggio di errore alquanto confortante per spiegare all’utente cosa è successo.

Grandi funzionalità in arrivo

Nel corso del 2023 sono state implementate numerose novità e miglioramenti significativi che verranno dettagliati nel prossimo aggiornamento.

Questi includono l’introduzione di nuove funzionalità, miglioramenti cruciali di compatibilità e lo sviluppo di strumenti aggiuntivi per i programmatori.

Per questo motivo, è stato deciso di adottare un approccio diverso. Spesso si tende a sottovalutare come apparentemente piccoli dettagli possano in realtà trasformarsi in problemi fondamentali che richiedono un lavoro di ricerca approfondito.

Questa rappresenta una situazione comune nell’ambito dell’emulazione. Tuttavia, gli sviluppatori sono soddisfatti delle soluzioni individuate, nonostante le limitazioni di tempo che consentano di implementarne solo un numero limitato.

Nonostante le richieste frequenti, gli sviluppatori non sono inclini a rilasciare Mikage solo per il gusto di farlo. Si è osservato che la maggior parte dei precedenti rilasci di emulatori 3DS ha ricevuto una risposta tiepida.

Lasciare semplicemente del codice su GitHub non promuove automaticamente lo sviluppo di una comunità attorno al progetto. Gli sviluppatori ritengono che questo sottolinei l’importanza di definire chiaramente un valore aggiunto pratico e tangibile per il progetto.

Gli sviluppatori hanno ascoltato attentamente il feedback della comunità per individuare dove risiede questo valore aggiunto, e continuano a dedicare impegno per raggiungerlo.

Purtroppo, una parte della comunità, seppur piccola ma vocale e talvolta non bene intenzionata, ha interpretato questa attenzione aggiuntiva come motivo per mettere in discussione lo scopo del progetto nel complesso.

Nonostante l’apprezzamento per l’entusiasmo dei sostenitori nel provare Mikage, gli sviluppatori ritengono che questo tipo di critica non costruttiva non contribuisca a migliorare il progetto.

Tuttavia, hanno notato che altre conversazioni sono risultate molto più fruttuose e costruttive.

Dai sviluppatori di altri emulatori, ai programmatori di giochi, ai creatori di contenuti, agli appassionati di homebrew, agli appassionati di 3DS e altri ancora: le persone che dimostrano un vero interesse per la piattaforma 3DS sono quelle che ispirano gli sviluppatori di Mikage, li motivano a proseguire e li aiutano a perfezionare il ruolo che Mikage è destinato a svolgere.

Un ringraziamento speciale alle seguenti persone, che hanno generosamente supportato Mikage al livello Sponsor su Patreon:

  • Francisco Garcia
  • Mr. Madness
  • Pretendo Network
  • Rodrigo Copetti

Fonte: reddit.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.