Una domanda, questa, che ha tenuto banco (soprattutto gli animi accesi) nella prima metà degli anni ’80, quando a dominare il mercato degli home computer erano il Commodore 64 e il Sinclair ZX Spectrum, che montavano il primo e il secondo rispettivamente.
Le differenze in termini di frequenza di clock potrebbero indurre facilmente a una “evidentissima” conclusione. D’altra parte entrambi sono CISC, entrambi sono a processori a 8 bit, e il secondo ha un clock del 250% superiore. Se ci fermassimo qui, però, ricadremmo nel classico mito dei Mhz (che tratteremo più approfonditamente in un futuro articolo), che attribuisce alla frequenza di funzionamento l’unica variabile (o comunque quella in assoluto più significativa) da considerare…
In realtà analizzando le architetture delle due CPU, pochi si sbilancerebbero su un risultato così “scontato”, e il motivo è presto detto: entrambe hanno punti di forza e di debolezza. Mi rendo conto che è un’affermazione ovvia, oserei dire lapalissiana, ma in un contesto inquinato dai miti di cui sopra, ha una certa valenza e un forte richiamo alla realtà dei fatti.
Possiamo vedere, in particolare, che il 6502 è votato all’efficienza nell’esecuzione (principalmente per l’accesso alla memoria), mentre lo Z80 dà il meglio di sé nella compattezza del codice (essendo particolarmente ricco di registri e di istruzioni che operano in tanti campi).
Gli estremi che rappresentano la situazione di cui sopra (ma che non hanno la pretesa di sintetizzarla, sia chiaro) sono le istruzioni più lente e più veloci. Il 6502 richiede almeno 2 cicli di clock per il completamento dell’operazione più veloce, mentre ben 7 per quella più lenta. Lo Z80, invece, richiede almeno 4 cicli di clock nel primo caso e ben 23 nel secondo.
Il fattore più importante che incide su questi calcoli è il tempo per l’accesso alla memoria. Nel 6502 è necessario un solo ciclo per la lettura o la scrittura di un byte, mentre per lo Z80 ne servono almeno 3 per la stessa operazione.
Per il 6502 ci sono altri tre elementi che giocano a favore. Il primo è sicuramente rappresentato dal fatto che un’istruzione di caricamento di un dato dalla memoria in un registro comporta automaticamente un confronto del byte letto col valore zero e la relativa impostazione dei flag di stato. In questo modo si risparmia un’istruzione.
Il secondo punto a favore è rappresentato dalla pipeline di esecuzione, che permette di sovrapporre le letture della memoria con l’esecuzione delle operazioni. In questo modo un’istruzione che, ad esempio, opera con un dato immediato (e che, quindi, occupa due byte) impiega lo stesso numero di cicli di clock di un’istruzione semplice lunga un solo byte: 2 cicli di clock per entrambe.
Il terzo elemento è rappresentato dall’elevato numero di modalità di indirizzamento: ben 13, che consentono di accedere alla memoria in maniera molto efficiente e flessibile.
Lo Z80 punta, invece, su fattori completamente diversi. Intanto l’elevato numero di registri a disposizione: ben 16 a 8 bit (di cui soltanto 8 alla volte utilizzabili nello stesso momento), a cui si aggiungono altri 4 registri a 16 bit, e due registri speciali a 8 bit (per interrupt e refresh della memoria). Quest’abbondanza consente di ridurre l’accesso alla memoria, che come dicevo prima rappresenta il tallone d’Achille dello Z80.
Altra cosa molto interessante è rappresenta dal fatto di avere registri a 16 bit. Questo non riguarda soltanto lo stack pointer (a 16 bit; mentre nel 6502 è a 8 bit) e i registri indice, ma anche i registri a 8 bit che si possono “raggruppare” a due a due ottenendo quindi 4 registri a 16 bit quando dovesse servire.
Infine la ricchissima dotazione di istruzioni (ben 158 contro le sole 56 del 6502), che consentono addirittura di manipolare singoli bit, spostare blocchi di memoria e ricercare byte nella memoria.
Ci troviamo, quindi, con due filosofie completamente diverse nell’approccio alla computazione. Difficile, se non impossibile, stabilire quale dei due processori fosse mediamente più veloce, se non su singoli e ben precisi pezzi codice.
L’unica cosa certa che rimane, alla fine, è che hanno dato tantissime soddisfazioni a chi li ha usati…