Finora in questa rubrica ci siamo occupati esclusivamente di microprocessori, il cui termine abbiamo intervallato in maniera interscambiabile con processori e CPU. In realtà i tre termini non sono equivalenti, a meno che il contesto non sia sufficientemente chiaro e non ambiguo da far capire in maniera precisa a cosa ci si sta riferendo.
Quali le differenze, allora? Per processore indichiamo un elemento che processa, cioé un’unità in grado di effettuare delle elaborazioni. Per CPU indichiamo un processore centrale, cioé che occupa posizione centrale / di controllo nel sistema in cui è inserito (ad esempio in un sistema SMP può essere il processore che ha il compito di servire gli interrupt). Infine per microprocessore intendiamo un processore i cui elementi costitutivi siano integrati in un solo pezzo di silicio, cioé in un singolo chip.
Il PDP-11 era un processore, dunque costituito da più chip che concorrevano alla realizzazione dell’intera unità di elaborazione, ma che ha lasciato parlare molto di sé in quanto era molto utilizzato nei mainframe e ha rappresentato per un po’ di anni nell’immaginario collettivo la “macchina programmabile” per eccellenza, quanto a versalità e comodità di sviluppo, che ha influenzato notevolmente il design e lo sviluppo dei successivi microprocessori.
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.
Il set d’istruzioni era ortogonale, tanto che sia lo stack pointer (SP) che il program counter (PC) facevano parte dei registri general purpose, per cui la generazione del codice da parte dei compilatori risultava semplificata.
Purtroppo essendo dotato di soli 8 registri in totale per i dati, gli indirizzi, lo SP e il PC, per l’implementazione di algoritmi più complessi si doveva far ricorso a variabili temporanee allocate nello stack oppure nei dati, che comportavano di conseguenza una maggior lentezza nell’esecuzione.
Fortunatamente era dotato di una cospicua quantità di modalità d’indirizzamento anche complesse che permettevano di ridurre il numero di istruzioni necessarie, rendendo il codice più compatto. Ad esempio lo stack (e gli stack in generale) veniva implementato facendo ricorso alle modalità di autoincremento e predecremento, che con una sola istruzione consentivano di leggere o scrivere il dato e, contemporaneamente, incrementare o decrementare il registro coinvolto nell’operazione (concetto questo poi ripreso da Motorola col 68000, la cui fortissima ispirazione al PDP-11 è più che evidente).
E’ interessante notare che, a differenza di molti processori come gli x86 e i RISC in generale, anche le operazioni MOVE (o LOAD che dir si voglia) andavano a modificare i flag, e ciò permetteva di evitare una successiva operazione di TEST o COMPARE per controllare se il dato letto fosse zero, diverso da zero, positivo o negativo.
Il PDP-11, insomma, era orientato all’efficienza e alla compattazione del codice, e anche per questo presentava numerose istruzioni. Come da tradizione CISC, del resto, di cui è stato un illustre rappresentante.
Da programmatore MOS 6502 prima e Motorola 68000 poi, non posso non rilevare le tante analogie con questo processore, che nel caso del 68000 sfiorano quasi il plagio, viste tantissime similitudini sia nel tipo e nel nome delle istruzioni, sia nelle modalità d’indirizzamento, e ancora nel formato delle istruzioni (per specificare la modalità d’indirizzamento vengono usati 6 bit: 3 per la modalità vera e propria, e 3 per indicare l’eventuale registro).
Purtroppo questo processore non ha avuto seguito a causa del tempo perso da Digital, che non ha colto velocemente i cambiamenti in corso che vedevano, nei primi anni ’70, un fiorire di nuove architetture grazie all’introduzione del concetto di microprocessore, e che ha permesso di abbattere i costi di progettazione e realizzazione delle CPU.
Soltanto dopo qualche anno introdusse il successore del PDP-11, il VAX (molto noto negli ambienti mainframe e minicomputer), ma ormai Digital aveva perso il mercato più fruttuoso, quello “consumer”, e rimase quindi relegata nella nicchia di mercato in cui aveva sempre dominato.