CISC, RISC e Microcode: da dove nacque tutto

I chip con set di istruzione complesso sono chiamati "CICS", mentre quelli con un set "ridotto" sono chiamati RISC. Storicamente i CICS hanno invaso il mercato prima, in modo un po' controintuitivo.

Tipicamente l'8086 e' considerato un sistema CICS, e vedremo perche'.

Tutto parte da mamma IBM.

Negli anni 60, IBM aveva sviluppato computer "ad hoc" per ogni esigenza di business. I sistemi ai tempi erano costosi, lenti ed avevano poca memoria.

Nell'aprile del  1964 IBM annuncio' OS/360, un sistema che oltre ad essere retro-compatibile con tutti i sistemi precedenti era venduto in diversi modelli compatibili tra loro,  la cui differenza era "solo" la velocita' di esecuzione.

Per cui OS/360 aveva bisogno di un mega "chippettone" in grado di eseguire un gran numero di istruzioni, alcune abbastanza complesse (tipo formattazione di importi, ecc).

Il progetto OS/360 sarebbe costato 5 miliardi di euro, e quindi era una scommessa che non poteva essere persa. Agli inizi degli anni '50 Maurice Wilkes esploro' la possibilita' di non progettare i processori con logic gates, ma di ridurre la circuiteria al minimo e poi di sviluppare un "mico-codice" che guidasse l'esecuzione delle istruzioni.

Il microcodice di OS/360 veniva scolpito su fogli di rame, e poteva quindi essere aggiornato da un tecnico IBM .Questo consentiva di "aggiornare" l'hardware. Questi sistemi erano basati su memorie a nuclei di ferrite, che erano massicce e relativamente veloci rispetto alle memorie a tamburo magnetico (circa mezzo secondo ad accesso). I sistemi piu' costosi facevano accessi paralleli a 32 bit, a parita' di memoria, e ovviamente costavano di piu'.

I primi modelli basati su OS/360 montavano sui 128Kb di RAM.

Quando l'Intel progetto l'8086 nel 1978 si ricordo' dell'idea del microcodice, per ridurre il costo e la complessita' del chip.

Da li' in avanti alcuni  linguaggi di programmazione provarono a crearsi il loro chip CICS (come la LISP Machine o LISPM) e anche Java ci riprovo' alla fine degli anni 90 con le sue macchine virtuali java come PicoJava.

Se si eccettua i sistemi x86 tutte queste varianti sono state  rese obsolete oppure un insuccesso. I chip a ridotto set di istruzioni (RISC) hanno via via preso piede, prima nei sistemi embedded, poi nel mobile e infine in una specie di inversione di tendenza nei PC (per es Apple Silicon M1 e' una tecnologia RISC ARM nata dall'esperienza nello sviluppo dei cellulari di Apple, in retrofit sui loro computer fissi): coesistono con i sistemi x86 nel mercato dei PC consumer.

I chip RISC hanno meno istruzioni, spesso integrano le logiche di salto (branching) come prefissi delle istruzioni base, ma abbondano dal punto di vista del numero di registri.

Il MOS 6502 e' un esempio di chip un po' a meta' ma sicuramente piu' RISC che CISC: ha un set di istruzioni abbastanza ridotto come un RISC, ma dispone di un numero ridotto di registri (come un CISC). In particolare il MOS6502 ha un particolare indirizzamento chiamato "pagina zero" (Zero Page) che consente istruzioni compatte che indirizzano i primi 256 byte di memoria, trasformando questa pagina di fatto in una specie di set di registri "estesi". Il sistema operativo GEOS64 (per C/64) definiva 15 pseudo-registri di 16bit, servendosi di 30 byte che partivano dalla locazione 2 e chiamati r0,r1...r15, come potete leggere a pagina 38 di questo pdf (che io possedevo, nei bei tempi andati).

Riferimenti

https://it.wikipedia.org/wiki/OS/360

https://www.righto.com/2022/01/ibm360model50.html

https://www.righto.com/2022/11/how-8086-processors-microcode-engine.html