|
|
|
|
|
MOS 6510 e Zilog
Z80
|
|
Sfida
allo "0"K Corral |
Cosa succede
quando veterani di Z80 e 6502 si sfidano a colpi di codice?
Piccoli problemi sono stati proposti, risolti e raccolti
in The
Fridge, con il susseguente confronto dei cicli
di clock. Il confronto su problemi concreti chiarisce
come il rapporto di velocità tra Z80 e 6502 a parità
di clock sia in media di 3:1 in favore di quest' ultimo.
Gli algoritmi esposti sono 8x8->16 shift&add multiply,
block mem copy (con e senza LDIR), substring search, line
routine, fast multiply, string print, sprites. |
|
|
Le
aree contese |
Nello
Spectrum l'area di memoria contenuta nei primi 16K è
condivisa tra la ULA e la CPU. Non avendo le caratteristiche
del 6502, l'accesso deve avvenire a turni. La ULA è
responsabile della generazione del video e perciò
ha la priorità rispetto allo Z80. Questo significa
che l'esecuzione di codice od operazioni di lettura/scrittura
in quest'area possono subire dei rallentamenti. A seconda
dell'istante di esecuzione infatti una istruzione può
richiedere fino a 6 cicli aggiuntivi. Ciò significa
che in alcuni casi l'incremento del tempo di esecuzione
può arrivare al 150% (ad esempio una NOP può
passare da 4 a 10 cicli). Oltre alla memoria contesa vi
è anche una zona di I/O contesa. L'accesso alle
porte pari comporta un'accesso alla ULA. Se la ULA è
impegnata nella generazione del video, l'accesso in lettura
a tali porte ne risulterà rallentato [9]. |
|
|
Il chip
Zilog Z80
Verso la metà degli anni 70 l'italiano
Federico Faggin, che aveva lavorato alla creazione del
primo chip mai realizzato, il 4004, lasciò la
Intel per fondare la propria ditta e portare avanti
il progetto di un chip più avanzato rispetto
all'allora disponibile Intel 8080. La ditta prese il
nome di Zilog e nel 1976 rilasciò uno dei più
fortunati microprocessori ad 8 bit della storia, lo
Z80. Faggin partì dalle caratteristiche dell'8080
ampliandole in diverse direzioni e proponendo il risultato
ad un prezzo comunque minore dell'8080, con il risultato
di spingere quest'ultimo lentamente fuori dal mercato.
L'8080 e lo Z80 appartengono alla famiglia dei cosiddetti
processori register-oriented. In questi processori le
operazioni devono aver primariamente luogo nei registri
interni che quindi devono essere in numero adeguato.
Nello Z80 oltre all'accumulatore e ai registri speciali
(flag, stack pointer, contatore istruzioni) ve ne sono
altri 6 ad 8 bit che possono essere combinati a coppie
in registri da 16 bit e che risultano utili nei calcoli,
più due registri indice a 16 bit. Dispone inoltre
di un secondo set di altrettanti registri gemelli ma
solo uno alla volta dei due set può essere utilizzato.
Un'altra peculiarità di questa famiglia di processori
è l'elevato numero di istruzioni. Essi sono infatti
gli antenati dei processori CISC (Complex Instruction
Set Chip) dei quali oggi sopravvive la ben nota famiglia
Pentium IV (e compatibili) che troviamo praticamente
in tutti i computer desktop e basano la loro potenza
sulla implementazione di un ricco set di istruzioni,
anche complesse. Uno dei vantaggi dello Z80 è
inoltre quello di includere un controller per il refresh
della RAM dinamica che quindi non deve essere montato
a parte e semplifica la progettazione della macchina.
|
Il
chip MOS 6502
La MOS Technologies venne fondata da un gruppo
di ingegneri fuoriusciti dalla Motorola dopo la progettazione
del Motorola 6800 per poter lavorare liberamente ad un
nuovo progetto. Il risultato fu il 6502, un chip dal design
nuovo, offerto ad un prezzo incredibilmente basso (25
dollari del 1975) e ciononostante più performante
degli allora dominanti Intel 8080 e Motorola 6800, offerti
ad un prezzo 6 volte maggiore. Comparato con l'Intel 8080,
il 6502 segue una filosofia completamente diversa, preferendo
puntare sulla semplicità e sull'ottimizzazione.
Il 6502 appartiene infatti alla categoria dei processori
memory-oriented, che privilegiano un'accesso veloce alla
memoria ed un ridotto numero di istruzioni e registri
e rappresenta un'antenato dei processori RISC (Reduced
Instruction Set Chip). Il 6502 possiede solo tre registri
per uso generale, in particolare l'accumulatore A e due
registri, X ed Y, di solito utilizzati come registri indice.
|
La CPU
nello Spectrum e nel Commodore 64
Lo Spectrum adotta un processore
Z80 con un clock di 3.54 MHz mentre nel Commodore 64
troviamo un 6510 cloccato a circa 1 MHz. Il 6510 è
una variante del 6502 che aggiunge una porta I/O da
8 bit. Considerata la velocità del clock e quanto
detto sul numero di registri e di istruzioni nei due
chip potrebbe apparire che la CPU dello Spectrum, e
quindi il computer stesso, sia assai più potente
del Commodore 64. Tuttavia un'analisi delle prestazioni
non può prescindere da come sono stati concepiti questi
due chip e rivela non solo che per la maggior parte
dei task generici o specifici un 6510 a 1 Mhz riesce
tener testa ad uno Z80 clockato a 3 Mhz ma che in diversi
casi riesce perfino a fare meglio. E molto dipende dal
contesto in cui è inserito e sfruttato il chip in base
alla sua ingegnerizzazione. Lo Z80 ha il pregio di poter
utilizzare nativamente un' artimetica a 16 bit grazie
alla lunghezza e al numero dei registri interni. Possiede
inoltre un set molto più elaborato di istruzioni che
possono tornare utili in particolari situazioni. Ma
quest' ultimo vantaggio non solo è mitigato dalla legge
del 20-80 secondo cui tipicamente una CPU passa l' 80%
del tempo ad eseguire solo il 20% delle istruzioni disponibili,
ovvero le più usate, ma deve anche combattere da una
parte con il collo di bottiglia dell'accumulatore, unica
via d'accesso alla memoria, accesso che avviene con
istruzioni lente poiché si è scelto di
privilegiare le operazioni all'interno dei registri.
Dall'altra con il maggior numero di cicli di clock che
servono per eseguire le singole istruzioni. E' infatti
proprio la complessità del processore e l'elevato
numero di istruzioni in esso implementate che tendono
a rallentarlo, il prezzo da pagare per avere un set
complesso; ed il modo per ovviare a ciò è
aumentare il clock del processore. La prospettiva cambia
dunque radicalmente quando ci si rende conto che il
6510 è un chip progettato attorno al concetto di un
accesso veloce alla memoria con la possibilità per alcune
istruzioni di operare direttamente sulla RAM ed un set
di modalità di indirizzamento che lo Z80 non possiede;
e laddove il numero di variabili cresce rapidamente
ed i registri dello Z80 ben presto si saturano il 6510
non può che uscire vincitore. Al contrario lo Z80 mostra
la sua potenza finché le operazioni da fare sono interne
al processore, sfruttando proprio l' elevato numero
di registri. Molto viene quindi a dipendere dal tipo
di applicazione e dall' abilità del programmatore. Una
regola empirica all'epoca molto seguita affermava che
un 6502 ad 1 MHz fosse equivalente ad un 8080 a 4MHz
[1]. Mediamente
un 6502 ad 1 MHz è equivalente ad uno Z80 a 3
MHz. In definitiva il divario tra i due processori presenti
nei due computer è assai ridotto e poco significativo.
E' invece importante notare come il C64 si avvalga,
oltre al processore, di ben 4 chip dedicati (VIC-II,
SID e due 6526 per l' I/O) mentre nello Spectrum tutto
il carico di lavoro resta sulle spalle dello Z80. Se
escludiamo quindi alcune appplicazioni particolari dove
i calcoli interni possono divenire predominanti, come
la grafica 3D dove lo Spectrum può avere un 20%
di vantaggio [2],
le due CPU sono mediamente allo stesso livello ma laddove
venga chiamato in causa anche uno solo dei coprocessori
del C64, lo Spectrum non potrà che soffrirne.
E' significativo far notare come sebbene all'epoca 8080
e Z80 potessero apparire chip assai superiori, cionondimeno,
benchmark dopo benchmark, l'evidenza mostrasse come
gli interpreti BASIC basati sul 6800 e sul 6502 risultassero
significativamente più veloci [3].
|
|
|
|
|
Le
armi segrete del 6502 |
Il 6502 è progettato in base alla semplicità,
la velocità, l'efficienza, l'ottimizzazione
dell'accesso alla memoria centrale. Per questo
motivo gli algoritmi che comportano un accesso
sparso alla memoria performano molto bene, così
come i programmi che fanno abbondante uso di branching
e subroutine. La possibilità di eseguire
operazioni direttamente sulla memoria comporta
che algoritmi con numerose variabili, tavole,
puntatori performino assai meglio sul 6502 che
sullo Z80. Algoritmi che al contrario riguardano
poche variabili e pochi accessi alla memoria forniranno
un risultato opposto. Il programmatore di 6502
tenderà a lavorare intimamente con la memoria,
il programmatore di Z80 tenderà al contrario
a confinare tutto nei registri, cercando di accedere
alla memoria sempre in maniera lineare [4].
La maggior parte delle istruzioni del 6502 richiedono
dai 2 ai 5 cicli e fino ad un massimo di 7 mentre
la maggior parte delle istruzioni dello Z80 richiedono
dai 4 ai 16 cicli, con alcune istruzioni che possono
arrivare a 23. In particolare gli accessi alla
memoria sono sempre eseguiti indirettamente in
maniera lineare (generalmente tramite HL) e la
scrittura prende ben 13 cicli. Nelle istruzioni
immediate, che tipicamente richiedono 2 cicli
nel 6502 e 7 cicli nello Z80, il clock di 3.54
MHz serve a riportare in pari la differenza. Sebbene
lo Z80 includa diverse istruzioni complesse per
compiti specializzati, alcune operazioni comuni
richiedono l'uso di due istruzioni. Ad esempio
la comparazione di un byte in memoria con l'accumulatore
nel 6502 si ottiene direttamente con l'istruzione
CMP che prende 4 cicli. Nello Z80 la medesima
istruzione prende 7 cicli ma richiede che venga
preventivamente memorizzato l'indirizzo della
locazione di memoria in HL. Le due istruzioni
insieme finiscono per richiedere 17 cicli. A differenza
dello Z80 inoltre, il 6502 non è microcodificato.
Il 6502 presenta una serie di caratteristiche
che all'epoca lo rendevano performante ed interessante
a dispetto della velocità di clock.
|
Pagina Zero: le locazioni
della prima pagina di memoria, quella che inizia
a $0000, costituivano una pagina accessibile in
maniera più veloce rispetto alle altre.
Nell'indirizzamento di pagina zero infatti solo
il byte meno significativo dell'indirizzo è
contenuto nell'istruzione, rendendola un byte
più corta e riducendo la fase di fetch
dalla memoria durante l'esecuzione
[5]. Stante l'elevata velocità
di accesso alla memoria del 6502, la pagina zero
poteva all'occorrenza essere utilizzata per implementare
tutti i registri mancanti.
Modi di indirizzamento: il 6502 forniva
una serie di versatili modalità di indirizzamento:
implicita, accumulatore, immediata, pagina zero,
pagina zero X, pagina zero Y, relativa, assoluta,
assoluta X, assoluta Y, indiretta, indicizzata
indiretta, indiretta indicizzata [6],[7].
Pipelining: il 6502 implementava già
allora il meccanismo del pipelining, il prelievo
dell'istruzione successiva aveva luogo quando
quella corrente non era ancora terminata. Il processore
accedeva alla memoria ad ogni ciclo.
Bus 6502: grazie al suo meccanismo di temporizzazione,
i chip della famiglia 6500 potevano accedere alla
memoria insieme alla CPU nello stesso ciclo di
clock, utilizzando entrambi i fronti del clock
(salita e discesa). Un caso tipico era quello
del processore video che così poteva accedere
alla memoria senza rallentamenti e con un generale
incremento delle prestazioni [8].
Economicità: nonostante le sue prestazioni
il 6502 veniva offerto ad un prezzo veramente
interessante rispetto ai suoi concorrenti. In
fase di progettazione della macchina ciò
permetteva di concentrare buon parte del budget
per lo sviluppo di caratteristiche aggiuntive.
|
|
|
Il
futuro del micro processing da oltre 25 anni |
Così recità
l'intestazione della Western
Design, la ditta che ad oggi, dopo quasi
trent'anni dalla sua introduzione, ancora produce
e commercializza il 6502 ed altri chip della stessa
famiglia per applicazioni low-cost. In particolare
la Western Design fornisce il W65C02S8-14, versione
moderna del 65C02 (la versione CMOS del 6502 del
1982, con nuove istruzioni) con un clock massimo
di 14 MHz e disponibile in 3 diversi package. |
|
|
|
Riferimenti
[3]
Interpreters—A Recap, J.W.Crenshaw
[1],[7],[8]
MOS Technology 6502,Wikipedia
[2],[4]
Pity the poor Speccy
[5],[6]
www.obelisk.demon.co.uk/6502/
[9]
comp.sys.sinclair FAQ, 16K/48K Spectrum Reference
|
|
|
|
|