Inside Ps1 Parte 2: la Cpu R3000

Proseguiamo la nostra analisi dell’insieme hardware della nostra amata scatoletta grigia cercando di spiegare dettagliatamente (ed al tempo stesso il più semplicemente possibile) le caratteristiche salienti del suo “cuore”, ossia la cpu R3000. Codesto circuito integrato è stato prodotto dalla MIPS Computer Systems nel lontanto’88 ed stato proposto in molteplici forme e caratteristiche sui più svariati sistemi, compresi alcuni satelliti in orbita, fino almeno al ’98. E’ basato sull’architettura MIPS, elaborata già nel 1983 se non vado errato. Rispetto alle architetture classiche di tipo x86 o PowerPC essa si basa su un concetto base abbastanza semplice ma geniale: tutte le istruzioni da eseguire devono essere eseguite in un solo ciclo di clock (“elaborazione”) della Cpu (detto in termini semplici per i non addetti ai lavori. Ora, ciò porta il grande vantaggio in termini di prestazioni (velocità) ma anche lo svantaggio di dover operare su un set di istruzioni più semplici e meno flessibile rispetto ad altre architetture. Ovviamente, negli anni questa filosofia di lavoro si è evoluta e ha permesso di avere un set di istruzioni ridotto (RISC è la sigla) di ottima flessibilità non sacrificando troppo le prestazioni in temini di velocità e capacità di calcolo. Qui si dovrebbe parlare anche della capacità delle cpu MIPS di utilizzare la potentissima tecnica di pipeling a stalli ma tralascio questi dettagli tecnici, se volete approfondire Wikipedia è ben documentata (soprattutto in inglese).

La nostra Ps monta una versione custom della R3000, appositamente studiata per la console Sony. La frequenza di lavoro è stata portata a 33.8688 Mhz. Contiene 115000 transistor. Il set di istruzioni (ovviamente RISC) è a 32 bit. Può computare fino a 30 milioni di operazioni al secondo. Ha una memoria cache per le istruzioni di ben 4 KB (organizzata in linee da 16 bit), una cache per i dati di 1 KB (organizzata in linee da 1 byte, cioè 8 bit) ed una velocità di trasferimento sul bus dati e sul bus istruzioni di 132 MB/sec. All’interno è composta da un’ALU (Unità aritmetico logica, per i calcoli matematici) abbastanza avanzata ed è pensata per memorizzare dati (appunto in memoria dati) in modalità little-endian. Il nome simpatico di little endian non deve far pensare a qualche pittoresco nativo americano, quanto piuttosto ad un particolare formato di codifica dei dati di dimensione maggiore di 1 byte. In effetti è una modalità classica del mondo Intel (soprattutto negli anni ’90). A supportare la cpu ci sono 2 co-processori di supporto, più il geometry engine, che tratteremo nelle successive puntate dell’articolo.

Andando ad analizzare nel dettaglio l’architettura a 32 bit notiamo che i registri per la cpu sono 32 da R0 a R31 (classica architettura MIPS/RISC) e lo stack pointer (ossia la struttura dati in memoria atta a memorizzare istruzioni e byte, detto molto semplicemente) è gestito dal registro R29, cosa che lo differenzia abbastanza rispetto ad altri modelli sia RISC sia della serie R3000. Difatti, un bel numero di istruzioni è particolare propria della serie 3000 e propria di questo modello. La Sony ha voluto una cpu non estremamente potente ma abbastanza funzionale nella programmazione e customizzata ai propri scopi. Da considerare è un’ulteriore caratteristica: la presenza dei co-processori aggiunge un bel gruppetto di istruzioni in più che normalemente non ci si aspetterebbe davanti ad una cpu classe R pre serie 4000.

Per farvi un semplice esempio (dedicato ai meno esperti) di un’istruzione assembly RISC, supponiamo di voler caricare in un registro (ad esempio R20) un valore numerico, magari esadecimale come 0x60. Useremo l’istruzione LUI   R20, 0x60 , dove LUI sta per Load Upper Immediate (caricare il dato direttamente). Tutto banale, ma immaginate una serie di 30000 istruzioni per creare un semplice giochino tipo Asteroids. La Sony decise, come ho già accennato nella puntata precedente, di utilizzare un ambiente di sviluppo in C, molto più semplice da gestire. Dovete sapere che il mondo della programmazione dei microprocessori/microcontrollori ha 2 grandi scuole di pensiero: chi ama programmare in Assembly (linguaggio macchina) e chi ama programmare in C. Il primo ha il vantaggio di essere potentissimo, perchè come abbiamo visto dall’esempio del registro possiamo controllare direttamente ogni componente fisico/logico della Cpu nei minimi particolari, ma dobbiamo conoscere alla perfezione un oceano di istruzioni e operandi, cosa complessa davvero. Programmare in C rende tutto più semplice ma non permette spesso un controllo diretto della macchina a livello dei singoli bit (bisogna usare strategie diverse, diciamo). Insomma, la R3000 è un componente senza dubbio di qualità, che però alcune volte va in stallo per colpa dello scarso firmware nativo della Ps. Ricordo che capitavano spesso errori di sincronizzazione tra la Cpu e le periferiche esterne come la Memory Card, e ciò è dovuto alla non perfetta programmazione da parte di Sony, ma di questi casi rari (ma veri, io ne sono stato vittima :)) ne parleremo un’altra volta. Completo enunciano l’impresa di un gruppetto di folli facente parte della community di Assembler Games che ha portato la Cpu a 66 Mhz e passa cambiando il quarzo di oscillazione (clock) collegato all’intrgrato. Ottimo lavoro, una Ps overcloccata… Ma che senso ha? Suppongo l’integrato sarà già passato a miglior vita bruciando per la troppa potenza da dissipare. Oppure ogni gioco che provano va ad 80 FPS (fuori scala) ed è ingestibile. Bravi… mah.

Spero di aver esposto nella maniera più chiara e completa possibile l’argomento, tenendo conto che non potevo scrivere un trattato di architettura delle CPU 😀 vi aspetto per la prossima parte dedicata alla Gpu della Ps1, se avete dubbi chiedete e vi sarà risposto 🙂

Annunci
Lascia un commento

Rispondi

Effettua il login con uno di questi metodi per inviare il tuo commento:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: