Intel 80186: figlio di un dio minore

Intel 80186Capita in alcune famiglie che le maggiori doti di un fratello eclissino quelle pur buone degli altri, e questi ultimi vengano un po’ messi in disparte. Esempi abbastanza noti sono i fratelli Hanks, emtrambi attori e di cui ovviamente Tom è il più famoso; oppure i fratelli Bush, con George W. che è (tristemente) divenuto per ben due volte presidente degli USA; persino nei fumetti il tema è stato proposto nel celeberrimo capolavoro di Mitsu Adachi, Touch, che racconta le gesta dei due fratelli gemelli Uesugi (da noi il relativo cartone è arrivato col titolo senza senso “Prendi il mondo e vai”).

Tema che, manco a dirlo, s’è presentato anche in ambito informatico, e in particolare nel campo dei microprocessori con l’80186 di Intel che è stato letteralmente cannibalizzato dal fratello maggiore nonché ben più famoso 80286, che gli ha lasciato soltanto poche briciole del mercato dei PC.

Anche se non ha avuto successo, l’80186 portava con sè diverse innovazioni rispetto all’8086. In primis a livello di implementazione dell’architettura, che risultava fino a 20 volte più veloce in particolari situazioni, grazie alle maggiori risorse hardware (cioé transistor) a disposizione che hanno permesso di migliorare l’unità di moltiplicazione (e divisione), ma soprattutto alla ben più efficiente sezione di generazione degli indirizzi.

Anche l’ISA ha visto dei miglioramenti con l’aggiunta di nuove istruzioni per la manipolazione dello stack (famose le PUSHA e POPA per conservare e recuperare tutti i registri usando lo stack), il controllo degli indici degli array, e l’I/O usando le stringhe di byte.
Ironia della sorte, si tratta di istruzioni che nelle CPU x86 più moderne sono considerate “complesse” e richiedono molte più risorse e cicli di clock per essere elaborate, in quanto viene fatto uso di apposito microcodice, anziché essere eseguite direttamente, come avviene invece con la maggior parte nonché più semplici di esse. Dunque formalmente “deprecate” e destinate all’oblio.

Ma il pezzo forte era senza dubbio rappresentato dall’introduzione di apposite istruzioni che permettevano di inserire nello stack valori immediati, ed eseguire moltiplicazioni e shift sempre specificando valori immediati. Certamente più utili rispetto alle precedenti (per lo più appannaggio di compilatori di linguaggi di alto livello), visto che fanno risparmiare istruzioni e soprattutto l’uso di un registro per specificare il valore da utilizzare.

Decisamente più fortuna ha avuto, invece, come microcontrollore, considerato che integrava diversi chip che in precedenza erano esterni e che contribuivano ad aumentare la complessità e i costi delle schede madri: timer, DMA e interrupt, assieme alla logica di selezione dei chip, facevano parte, infatti, di questo processore, che è stato dismesso da Intel soltanto qualche anno fa.

Nonostante si tratti di un microprocessore sostanzialmente anonimo, nutro ancora un vivo ricordo dell’80186, in quanto era questa l’architettura x86 che avevo scelto come base per l’emulatore che una dozzina d’anni fa avevo quasi completato e che sarebbe dovuto girare sugli Amiga dotati di Motorola 68020+. Progetto poi abbandonato a causa del duro colpo sortito dal fallimento della Commodore, che mi ha rimesso in discussione come utente e come programmatore. Ma questa è un’altra (dolorosa) storia…

Press ESC to close