I giochi della Xbox 360 potranno essere eseguiti nativamente su PC

Un developer della Polonia, conosciuto con lo pseudonimo di Rex Dex ha iniziato lo sviluppo di un ricompilatore che dovrebbe in qualche modo convertire i file XEX eseguibili della Xbox 360 per il sistema operativo Windows.

Questo è un primo POC che permette di convertire ed eseguire solo delle semplici applicazioni demo per Xbox 360 (i campioni sostanzialmente). Lo sviluppatore ha rilasciato alcune importanti considerazioni all’interno della repository ufficiale.

  • CPU differenti – Xbox360 utilizza una CPU basata su PowerPC, i nostri PC sono basati invece su architettura x86. Sono completamente diversi che non so nemmeno da dove iniziare 🙂 PowerPC è basato su RISC, carica registri con istruzioni molto semplici. x86 è completamente diverso dall’altra parte – non con così tanti registri, ma molte delle istruzioni risultano più complicate da gestire (modalità di indirizzamento …), è evidente che una semplice trascrizione non è fattibile.
  • Layout di memoria – Xbox360 utilizza ordini di byte BigEndian, le CPU x86 utilizzano LittleEndian. Per essere compatibili con i dati in entrata che vengono letti da file in lettura/scrittura nella memoria di tutti gli operandi basati sulla memoria devono essere scartati e scambiati per byte. Questo può rappresentare un significativo problema nelle prestazioni.
  • Immagine eseguibile crittografata – Yup, per vari motivi i file eseguibili su Xbox360 sono crittografati. Ci sono alcuni ragazzi di cleaver in Russia però che pare siano riusciti a decrittografarli.
  • Architettura GPU diversa e obsoleta – Se vogliamo vedere qualsiasi grafica resa necessaria la GPU deve essere emulata. Sono due dadi duri da rompere: in primo luogo, gli shader che vediamo verranno rispettati nel formato compatibile per la GPU, non HLSL in ingresso. Questi shader dovranno essere modificati in modo inverso. In secondo luogo, la GPU Xbox360 usava ~10 MB di memoria interna denominata EDRAM che serviva come archivio temporaneo di rendering target per la durata del rendering. Anche se alcune schede oggi utilizzano ancora concetti simili, questo non viene mai esposto direttamente all’utente. Dato che molte persone hanno utilizzato la memoria EDRAM su Xbox, questa parte deve essere emulata. Per essere onesti probabilmente in modo diverso per ogni gioco.
  • Inclinazione delle funzioni grafiche/kernel – Alcune delle funzioni utilizzate durante la compilazione dell’eseguibile sono state inclinate direttamente nel codice compilato, rendendo molto più difficile scrivere un semplice wrapper di livello API. Questo uccide il sogno di fare un “livello di funzione” wrapper dove potremmo semplicemente andare e avvolgere direttamente la chiamata “d3d-> DrawPrimitive”. No, non succederà.

Stuff attualmente implementati

Backend (elaborazione offline):

  • Caricamento immagini XEX, decrittazione e decompressione.
  • Smonta istruzioni PowerPC.
  • Ricostruzione dei blocchi di programma.
  • Generazione del codice C++ equivalente per intero all’eseguibile (“ricompilazione”).
  • Il 96% delle istruzioni CPU in PowerPC sono state implementate.

Runtime (host):

  • Caricamento ed esecuzione dell’immagine ricompilata (come DLL).
  • Kernel di base con thread, sincronizzazione.
  • Basic IO con supporto file.
  • Bootstrap della coda di comando GPU.
  • Funzionalità di tracciamento (debug offline).

GPU:

  • Smonta e ricompila lo shader AMD Microcode in shader DX11 HLSL.
  • Parser ed executor da buffer di comando.
  • Simulatore molto semplice di EDRAM.
  • Funzionalità di traccia del dump.

Strumenti di debug

  • IDE di base che consente di visualizzare lo disassembly.
  • Basic offline (traccia basata) debugger che consente di ispezionare ogni istruzione eseguita.
  • Visualizzatore di base della GPU che consente di controllare lo stato interno della GPU in ogni punto.
  • Strumento Time Machine che consente di trovare istruzioni precedenti che toccano un dato registro o memoria.

Esecuzione

  • Avrete bisogno di Visual Studio 2015 (solo Windows).
  • Prendere i wxWidgets in 3.1.0 e compilate le librerie DLL di x64, caricateli nella directory dev\external\wxWidgets-3.1.0\.
  • Compilare l’intera soluzione da dev\src\recompile.sln.
  • Eseguire il progetto framework\frontend.
  • Aprire il progetto projects\xenon\dolphin\dolphin.px.
  • Selezionare la configurazione “Final”.
  • Fare clic sul pulsante “Crea”
  • Assumendo di aver installato il progetto in C:\recompiler eseguire il progetto “launcher\frontend” con i seguenti parametri:
-platform=Recompiler.Xenon.Launcher.dll -image=C:\recompiler\projects\xenon\doplhin\Dolphin.px.Final.VS2015.dll -dvd=C:\recompiler\projects\xenon\doplhin\data -devkit=C:\recompiler\projects\xenon\doplhin\data
  • Per uscire dall’applicazione, chiudere la finestra di output della GPU.

 

(Visited 567 times, 1 visits today)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *