Questo capitolo potrebbe causare qualche grattacapo, principalmente a causa della scarsa documentazione di base disponibile rispetto alle altre console. Sembra che Microsoft e Nvidia volessero spingere il più possibile gli sviluppatori a utilizzare le loro librerie, tralasciando tutto il resto. Una strategia... interessante.
Ad ogni modo, ho sfruttato la documentazione disponibile nel tentativo di fornire quante più informazioni possibili, senza tuttavia scendere troppo nel dettaglio.
L'ecosistema di sviluppo
Lo sviluppo dei giochi per Xbox è particolarmente complesso sotto molti punti di vista, come librerie, terminologia e altro ancora. Per questo, ho deciso di separarlo per framework.
Astrazione hardware
Abbiamo notato come, per quanto elementi come il "coprocessore programmabile con microcodice" vengano inizialmente presentati in pompa magna, successivamente questi vengano sfruttati sempre meno una volta che gli sviluppatori si rendono conto della complessità del nuovo hardware.
Dal punto di vista degli sviluppatori, credo che uno dei vantaggi principali dell'Xbox fosse l'inclusione di librerie di alto livello molto utilizzate, in grado di gestire le funzionalità di basso livello con efficacia. La strategia di Microsoft e Nvidia consisteva quindi, anziché nel documentare dettagliatamente tutte le funzioni di basso livello dell'hardware, nel fornire una libreria di astrazione dall'hardware completa in grado di eseguire tutte le operazioni che gli sviluppatori si aspettavano senza che fosse richiesta una conoscenza completa del funzionamento interno dell'hardware.
Gli sviluppatori Xbox possono scegliere tra diversi SDK: alcuni "ufficiali" e più limitati, altri "ufficiosi" ma più flessibili. Diamo un'occhiata ai più conosciuti.
Microsoft XDK
L'Xbox Development Kit ("XDK") di Microsoft è l'SDK ufficiale dell'Xbox. Il pacchetto include molti strumenti, librerie e compilatori. È importante sottolineare come poteva essere integrato in Visual Studio .NET (versione 2002), che in quanto ad ambienti di sviluppo era una bella bestiola, sia in positivo che in negativo.
La libreria grafica era una versione modificata di Direct3D 8.0, ulteriormente espansa per includere le funzionalità specifiche dell'Xbox. DIrect3D era un set di API molto potente utilizzato per sviluppare codice compatibile con molte GPU diverse. Utilizzando questa libreria, gli sviluppatori potevano creare versioni Xbox dei loro giochi per PC senza dover effettuare troppe modifiche (in teoria); questo nonostante la sintassi utilizzata per i vertex program e per i pixel shader somigliasse fortemente al linguaggio assembly.
Le funzionalità audio erano fornite da DirectSound, che si occupa della Audio Processing Unit senza che gli sviluppatori dovessero occuparsi dello spostamento dei dati audio tra i vari componenti del sistema. Erano inoltre presenti alcune librerie di rete, molto utili per offrire le funzionalità online (ossia, il gioco in multiplayer). L'API di rete si basa su Windows Sockets, il tentativo con cui Microsoft ha provato a semplificare le comunicazioni di rete creando un protocollo esclusivo per Windows (per quanto il suo design si basi sulla sua controparte standardizzata, ossia socket BSD).
Per dare la possibilità di provare il sistema, Microsoft distribuì agli sviluppatori un kit di sviluppo hardware che consisteva in una normale console venduta al dettaglio, ma di colore verde, con il doppio della RAM rispetto alla versione per i consumatori (128 MiB in totale) e, a volte, un chip MCPX diverso (chiamato MCPX-2, che esegue il boot direttamente dalla ROM flash). Il kit di sviluppo includeva una versione potenziata della dashboard in grado di lanciare gli eseguibili firmati dall'XDK. Nei computer degli sviluppatori, Xbox Neighbourhood (un'applicazione per Windows) permetteva di collegare il kit di sviluppo a Visual Studio, per semplificare le fasi di distribuzione e debug. Per sperimentare con Xbox Live, Microsoft forniva anche server in modalità sandbox, ossia di prova.
NXDK

La struttura di NXDK. Anche se alcune librerie di basso livello sono incorporate in librerie di alto livello, sono comunque accessibili agli sviluppatori
Per evitare che gli sviluppatori di software homebrew si trovassero impelagati in contenziosi legali relativi al copyright qualora avessero utilizzato l'SDK ufficiale, un gruppo di sviluppatori indipendenti da Microsoft creò un SDK alternativo chiamato Open XDK. Dopo alcuni anni, quando il suo sviluppo si interruppe, questo SDK indipendente venne "adottato" da un altro gruppo, che chiamò il nuovo fork New XDK o "nxdk".
Il progetto consisteva nell'ingegneria inversa dei componenti hardware di basso livello (il microcodice, i push-buffer ecc.) e nello sviluppo di nuove API in C/C++ che gestissero le chiamate di alto livello verso ogni componente del sistema.
Per semplificare il livello grafico senza utilizzare Direct3D, nxdk si affida al compilatore CG . CG è un linguaggio creato da Nvidia per lo sviluppo di shader. CG viene collegato ad altri compilatori per generare codice compatibile con l'Xbox. Durante la compilazione, il codice scritto in CG viene convertito in assembly compatibile con NV20, quindi questo viene ulteriormente tradotto utilizzando un compilatore creato ad hoc per generare microcodice e pushbuffer compatibili con NV2A. Inoltre, nxdk rendeva disponibili tutti gli altri compilatori utilizzabili per scrivere shader di basso livello, a vantaggio degli sviluppatori che non volevano utilizzare il linguaggio CG.
Le altre API disponibili gestiscono i servizi restanti (audio, rete ecc.). Nel complesso, questa libreria rende possibile un controllo più diretto sull'hardware rispetto all'SDK ufficiale, a patto di non utilizzare le API di Microsoft (che erano lo standard de-facto, per quanto totalmente proprietario). Ad ogni modo, nxdk rimane la scelta migliore per sviluppare software homebrew legali.
Il formato fisico
I giochi sono distribuiti su DVD a doppio strato (con capienza fino a 8,5 GB), e sono letti in un'unità DVD appositamente modificata che include protezioni antipirateria (nonostante utilizzi l'interfaccia ATA standard). È il caso di far notare come l'XDK includeva alcuni strumenti utili per modificare la disposizione dei dati sul disco: in questo modo, gli sviluppatori potevano migliorarne la velocità di lettura.
La console include anche un disco rigido interno di 8 GB, utilizzato per memorizzare i salvataggi o i contenuti temporanei. Il sistema contiene la dashboard, le impostazioni di Xbox Live e le impostazioni di rete.
I servizi di rete
Niente più modem né servizi sperimentali. L'Xbox includeva tutto quello che oggi diamo per scontato quando si tratta di offrire un servizio online di base: la connettività Ethernet e un'infrastruttura online centralizzata (chiamata Xbox Live).
Xbox Live non permetteva solo di giocare in multiplayer online, ma includeva diverse altre funzionalità come l'audio in streaming, per la chat vocale in tempo reale.
Ma in cosa consisteva precisamente Xbox Live? Beh, è solo una raccolta di servizi online interconnessi di cui le aziende possono usufruire per costruire la propria piattaforma online. Ad esempio: uno dei servizi fornisce le funzionalità legate ai profili utente; gli studi di sviluppo potevano quindi utilizzarlo come metodo di autenticazione per accedere alle funzionalità online dei propri giochi. Nell'SDK ufficiale, Microsoft includeva alcune API deputate allo scambio di dati con i server di Xbox Live.
È importante sottolineare che era Microsoft a concedere l'accesso all'ecosistema Xbox Live: gli sviluppatori dovevano infatti registrarsi per ottenere le chiavi di autenticazione da utilizzare nei giochi.
L'esperienza online vera e propria si svolge nel Title Server, un tipo di server che risponde ai client (le console Xbox) sparsi nel mondo e gestisce le comunicazioni in tempo reale. Microsoft includeva nell'SDK alcuni esempi per mostrare come programmare questi server, anche se si basavano su Windows e dovevano essere messi in funzione in data center basati su Windows Server.
Una nuova tendenza ha inizio
Abbiamo analizzato l'implementazione di Xbox Live da parte di Microsoft e osservato l'impatto che ha avuto sul settore. Col senno di poi sembra tutto piuttosto chiaro: è come se la ricetta di base per un buon gioco online (una connessione Ethernet e l'infrastruttura adeguata) fosse sempre esistita, mentre erano alcune aziende a non voler investire in tal senso.
Tuttavia, questa era solo una parte dell'intera questione: Microsoft doveva infatti convincere anche gli utenti, che dovevano percepire il multiplayer online non solo come una funzione opzionale, ma come una parte fondamentale di alcuni giochi, fino a sentirne un vero e proprio bisogno. Altrimenti, gli sforzi di Microsoft si sarebbero risolti solo nell'ennesimo tentativo di rendere il gioco online una realtà.
Prova a immaginare un mondo in cui nessun giocatore su console vuole giocare online e nessuno crede che l'architettura PC possa costituire la base di una console. Questo era il mondo di quell'epoca. Per quanto ora queste cose ci sembrino scontate, allora non lo erano.
- Seamus Blackley


