Il primo amore non si scorda mai, come si suol dire, e come dimenticare il primo microprocessore su cui ho avuto la possibilità di smanettare? Era il MOS 7501 del Commodore Plus/4, avuto soltanto per un mese causa passaggio al nuovissimo Commodore 128 che montava… un 8502!
CPU sconosciute ai più, ma che sono semplicemente delle versioni potenziate (sostanzialmente come clock) del ben più famoso 6510 in dotazione al Commodore 64…
Eppure tutti hanno un denominatore comune: il MOS 6502 da cui sono derivati (e con esso pienamente compatibili), che è uno dei microprocessori più famosi (e ancor oggi molto diffusi) a 8 bit che ha segnato la storia dell’informatica.
Sì perché, oltre che nei famosi home computer Commodore, lo ritroviamo negli Apple I e II, nel Nintendo NES, nel PC Engine di Nec, nell’Atari Lynx, in centinaia di giochi arcade e in un numero indefinito di dispositivi in cui è stato usato come microcontroller (nel sito dedicato uno dei produttori, The Western Design Center, parla orgogliosamente di stime fra i 5 e i 10 miliardi di pezzi venduti, anche se questo dato include anche le soluzioni a 16 bit) per sistemi di controllo industriali, sistemi di sicurezza, giocattoli, pacemaker, ecc. (l’ambito applicativo è vastissimo e non legato prettamente all’informatica).
Quali le ragioni di così tanto successo? Personalmente ne trovo tre significative:
- il basso costo (quando fu immesso nel mercato venne proposto a un prezzo di quasi un ordine di grandezza inferiore rispetto alla concorrenza, tanto che… inizialmente non vendette perché si pensava fosse un prodotto scadente o una burla!);
- il basso costo di sviluppo e produzione delle schede madri (la prima versione, il 6501, era pienamente compatibile col Motorola 6800 e poteva quindi essere tranquillamente utilizzato al suo posto, ma Motorola fece sentire il peso dei suoi avvocati e MOS decise prontamente di ritirare il 6501, cambiare piedinatura al chip e commercializzare il 6502);
- la notevole semplicità dell’architettura.
Quest’ultima è di particolare importanza perché un hardware, per quanto buono, senza software non va da nessuna parte, e sviluppare codice per il 6502 non era affatto complicato rispetto ai concorrenti. Anzi!
La CPU era costituita da 3 soli registri, di cui un solo accumulatore (chiamato A) e due registri “di appoggio” (chiamati X e Y) che erano impiegati anche nell’indirizzamento della memoria. C’era poi un registro di stato per i flag (chiamato P; mai direttamente indirizzabile), e l’immancabile Program Counter che determinava il flusso delle istruzioni.
Anche le istruzioni era poche: una cinquantina in tutto. L’accumulatore era il registro privilegiato, perché buona parte delle istruzioni usavano soltanto lui. Ad esempio non era possibile memorizzare il registro X o Y nello stack (che era ampio soltanto 256 byte), tramite istruzioni di tipo push o pop (cioé che salvano o recuperano dati dallo stack): si doveva necessariamente passare dall’accumulatore.
La cosa interessante è che questa semplicità dell’ISA era bilanciata da modalità d’indirizzamento molto potenti, che permettevano di referenziare la memoria tramite l’uso dei suddetti registri X e Y; c’era anche una veloce e comoda modalità per indirizzare direttamente le prime 256 locazioni di memoria, molto utile (nonché usatissima) perché venivano impiegate come una sorta di “registri temporanei” (data la penuria di quelli veri: 3 erano veramente pochi).
A completare l’opera c’era l’ISA abbastanza ortogonale e, infatti, buona parte delle istruzioni potevano utilizzare tutte (o quasi) le modalità d’indirizzamento, permettendo quindi di scrivere codice compatto e veloce.
A forza di parlare di semplicità dell’ISA sembra che si stia parlando di uno dei tanti e rinomati microprocessori RISC, che hanno fatto di questo aggettivo un’autentica filosofia nonché cavallo di battaglia.
Niente di più sbagliato: il 6502 è, infatti, un’esponente della famiglia CISC, che per decenni ha conteso la palma di miglior tipologia architetturale coi RISC. Una sfida che, almeno in ambito desktop, sembra ormai aver avuto un vincitore (ma di questo ne parleremo prossimamente).