Intel, AMD, Motorola, IBM, Sun, MIPS, Zilog, ARM, sono le aziende sicuramente più note a chi bazzica nel mondo dell’informatica, e rappresentano delle autentiche istituzioni nel campo dei microprocessori. Più “defilata” è la posizione di Texas Instruments (abbreviata con TI), multinazionale impegnata sul fronte delle soluzioni embedded, in particolare basate su core ARM.
Sembrerà strano, ma TI ha, invece, una lunga e gloriosa tradizione nel campo dell’elettronica in generale, ma anche dei processori, che addirittura ci porta indietro nel tempo in cui aziende pioneristiche entravano in un mercato che si stava formando, e che vide fiorire numerose e interessanti architetture.
Era, infatti, il 1976 quando TI presentò la sua TMS9900, fra le prime CPU a 16 bit a essere commercializzate, mentre le “grandi firme” citate prima erano (per chi c’era già) per lo più ferme agli 8 bit…
TI non aveva alle spalle processori già realizzati (a parte per le sue famose calcolatrici) e per i quali aveva la necessità di mantenere una certa compatibilità (a livello hardware, come Zilog con lo Z80, o software, come Intel con l’8086) o, quanto meno, una forte ispirazione (MOS col 6502), per cui gli ingegneri diedero fondo alla loro creatività nel progettare il chip, introducendo aspetti indubbiamente originali e innovativi.
Una parola credo sia sufficiente a inquadrare il 9900: memoria. Si tratta, infatti, di un microprocessore che potremmo definire “memory-based”, in quanto ha fatto dell’utilizzo della memoria il suo cavallo di battaglia, sfruttando all’eccesso questo componente che, è bene ricordalo, rimane pur sempre esterno alla CPU.
Il 9900 internamente conserva soltanto tre registri: il PC (Program Counter, che “punta” all’istruzione successiva a quella correntemente elaborata), lo ST (Status Register, che conserva lo stato corrente e i flag per le condizioni), e il WP (Workspace Pointer, che indirizza un’area di memoria). E i registri per lavorare? Non ci sono, ovviamente, perché… stanno tutti in memoria!
L’area indirizzata dal WP è proprio quella in cui risiedono i 16 registri general purpose a 16 bit utilizzati da questa CPU. Quindi se un’istruzione fa riferimento a uno di essi, il processore utilizza il WP per ricavarne l’indirizzo di memoria in cui si trova, per poi finalmente leggere o scriverne il contenuto.
Sembra tutto molto macchinoso (e in un certo senso lo è), ma tutto questo lavoro viene svolto internamente dal chip, per cui per un programmatore che i registri stiano in memoria o all’interno della CPU, poco importa, in quanto il meccanismo ai suoi occhi è totalmente trasparente.
Ma un programmatore che si rispetti storcerà comunque il naso: l’accesso alla memoria è infatti, il suo peggior incubo! Sa bene che la memoria è il dispositivo più lento e bisogna minimizzarne l’uso, in quanto può incidere molto pesantemente (in maniera negativa, ovviamente) sulle prestazioni. Il 9900 rappresenta, quindi, una stortura rispetto a questo modello. Un chip da scartare “preventivamente”.
In realtà bisogna sempre contestualizzare nelle valutazioni che si fanno. All’epoca il dispositivo più veloce era proprio la memoria, mentre i microprocessori quelli… più lenti! Ne sa bene qualcosa il 6502, altro processore fortemente orientato all’intenso sfruttamento della memoria, e le cui prestazioni erano tutt’altro che scarse.
Proprio sul campo il 9900 “mostrò i muscoli”: aveva, infatti, prestazioni mediamente superiori al blasonato 8086 di Intel (impressione confermata da un’occhiata ai cicli di clock impiegati per ogni istruzione), e addirittura un codice più compatto sebbene facesse uso di opcode a 16 bit (soluzione adottata anche da Motorola con la fortunatissima e rinomata famiglia 68000) anziché a 8 bit (come la stragrande maggioranza delle CPU dell’epoca… e non).
Ciò era possibile grazie al fatto che l’architettura era sostanzialmente “memory-to-memory“, come la definisce la stessa TI nel datasheet del 9900. Le istruzioni più importanti erano, appunto, in grado di accedere a operandi entrambi presenti in memoria e… sfruttando qualunque modalità d’indirizzamento (di cui era riccamente e variamente dotato).
Quindi non soltanto la classica istruzione “MOVE“ (per spostare dati da un “posto” a un altro), ma anche addizione, sottrazione, confronto, “OR” logico ed “AND“ logico potevano operare indifferentemente con dati presenti entrambi in memoria. Roba da lasciare a bocca aperta persino il 68000, che poteva fare lo stesso soltanto con la “MOVE“, mentre con le altre istruzioni aveva delle forti limitazioni…
Avere tutti i registri in memoria comportava anche un indiscutibile vantaggio: i tempi di context switch (cioé il passaggio da un processo a un altro, oppure la gestione delle richieste di interrupt; operazioni che richiedono il completo cambiamento dello stato del processore, e quindi anche di tutti i registri) risultavano ridottissimi. Era sufficiente conservare i tre registri prima citati (PC, ST e WP), e il gioco era fatto! Anche qui, roba da far impallidire 80286 e 80386 di Intel e, peggio ancora, il suo Itanium, che in questi casi patiscono enormemente per l’onerosa operazione.
La vocazione fortemente embedded di TI si vedeva anche da alcune soluzioni adottate. Le più importanti e degne di nota sono l’introduzione di un’apposita istruzione (e relativo stato di funzionamento) per porre il processore in stato di IDLE (e quindi consumare meno), istruzioni per spedire in maniera seriale campi di bit (da 1 a 16) da e verso le periferiche, e i ben 16 livelli di interrupt che metteva a disposizione tramite autovettorizzazione (il 68000 ne aveva 8, e l’8086… soltanto due).
Ci sarebbe parecchio altro da dire sul 9900, ma mi fermo qui perché l’articolo non ha la pretesa di un saggio tecnico che richiederebbe troppo spazio.
Con tutta questa carne sul fuoco è lecito chiedersi come mai questa CPU non abbia “sfondato”. Difficile a dirsi. Forse a causa del packaging da ben 64 pin, che comporta la realizzazione di schede madri più complesse e costose.
La risposta più realistica, però, penso sia rappresentata dai problemi che TI ha avuto con l’home computer TI 99 che lanciò nel 1981, il quale a causa di gravi problemi dell’alimentatore (che potevano comportare lesioni agli utilizzatori) provocò un enorme danno di immagine dalla quale la compagnia non riuscì a riprendersi e che le fu fatale, costringendola, purtroppo, a uscire da questo mercato (estremamente importante per lo “smercio” del 9900).
Non capisco la cosa del context switching.
i registri di per se’ in un cambio di task vengono salvati da qualche altra parte, quindi credo che anche il TI facesse altrettanto. i registri per uso generale dipendono strettamente dal task corrente, quando si cambia task, il task nuovo ha bisogno di avere i suoi valori in ogni registro.
Per capirlo bisogna entrare nell’ottica del funzionamento del processore.
In un processore “classico” i registri risiedono in una memoria interna, per cui quando avviene un context switch si deve necessariamente salvarli da qualche parte (in memoria centrale), e caricare quelli nuovi.
Col TMS9900 ciò non serve, perché i (16) registri non stanno in una memoria interna del processore, ma nella memoria centrale, appunto.
Quindi il context switch in questo caso comporterà esclusivamente il salvataggio di PC, ST e WP, e il caricamento di quelli nuovi.
E’ il salvataggio e il ripristino del WP che a tutti gli effetti comporta il salvataggio e il ripristino dei registri general purpose, perché è quello che punta alla loro base (al primo registro).
Non so se sono stato chiaro. Eventualmente provo a spiegarlo in un altro modo.
Beh penso sia abbastanza semplice da capire. Per fare un context switch bisogna salvare solo i 3 registri, poi si cambia il PC all’istruzione da eseguire del processo in arrivo, e si ripristinano l’ST e il WP del processo in arrivo e il gioco è fatto, il contesto del nuovo processo è bello e pronto.
Esattamente. E molto efficiente… per l’epoca.
Beh, è vero che fa impallidire itanium per la mole e la dimensione dei registri presenti, ma è altrettanto vero che una soluzione come quella presente nel 9900 non è + utilizzabile ormai…per cui non è che i progettisti di itanium avessero molta scelta. Comunque ottimo articolo, come sempre :)
Grazie. :)
Comunque l’ho scritto chiaramente: “per l’epoca”. Era una soluzione geniale e di una comodità incredibile.
Oggi non è più possibile da adottare, ma avrebbe fatto sicuramente comodo a Intel per il suo Itanium. :D
Interessante ed esposto in maniera pulita :)
Io mi ricordo anche che il TI99/4A era di una lentezza esasperante. Uno dei primissimi programmi gioco per PC era ai tempi “frog”, la simpatica ranocchia che attraversava strade con auto e fiuni con coccodrilli.
La versione Texas (non ricordo se in Basic o LM) era così lenta che ad ogni istruzione si doveva “attendere” per vedere la rana che si muoveva. Insomma ingiocabile ed inutilizzabile.
E’ bero, vado a memoria quindi non posso essere certo, ma fu un completo flop anche perchè di li a poco uscironop gli MSX (altro tentativo andato a male) e MSX2, che fu per lo meno un “tentativo” di imporrte un minimo di standard. MA ormai gli 8 bit erano al lumicino, quando arrivò Motorola 68xxx in pochi poterono guardare ancora ad altri. L’unica fu Intel perchè IBM aveva bisogno di compatibilità …
ottimo articolo … cesare quando ci fai un bell’articolo su guru meditation, copper, blitter e quant’altro? :) :) :)
per Massimo … il TI era tutt’altro che lento … ma per una di quelle decisioni insensate da commerciali la casa madre decise di inibire qualsiasi possibilità di lavorare in assembler.
Da qui al fallire nel campo gaming in passo è breve, ai tempi con il solo basic in dotazione si poteva fare ben poco (la grafica la facevi solo utilizzando acrobazie incredibili)
Concordo con Eymerich. Il 9900 era un ottimo processore, che proprio dal lato prestazionale non aveva nulla da invidiare a 8086 & co. Al contrario. ;)
@Giullo: è da tempo che ci penso, ma non ho ancora deciso nulla in merito perché come argomento “hardware” sto trattando per adesso i microprocessori.
Non so se è il caso di intervallare questi articoli con altri che parlino delle cose che hai citato. Il feedback degli utenti, ovviamente, è sempre bene accetto. :D
Peccato solo che la Texas Instruments fattura per la maggioranza con le vendite dei sistemi a ricerca montate su missili americani di ogni tipo… dai Sidewinder ai Maverick… ecc ecc..
[…] Il suo punto di forza era sicuramente rappresentato dalla capacità di eseguire le operazioni più importanti (come lo spostamento dei dati, la somma, la sottrazione, ecc.) potendo specificare una qualunque modalità d’indirizzamento sia per l’operando sorgente che per quello destinazione, concetto poi ripreso dal TMS9900 di cui abbiamo già parlato. […]
[…] a differenza del PDP-11 e del TMS 9900, e a causa dell’organizzazione degli opcode all’interno della word principale a 16 bit, […]
[…] da un progetto ex-novo permette di superare certi schemi, e gli ingegneri in questi casi sono capaci di tutto: dal realizzare soluzioni […]
[…] sembrare una grossa limitazione, ma dobbiamo anche considerare che, come dicevo in un precedente articolo, all’epoca le memorie erano più veloci dei microprocessori, per cui una scelta di questo […]