6502 vs Z80

Negli anni’80, il MOS 6502 fu uno dei chip di maggior successo: era alla base dei Computer Commodore ma anche dell’Apple II e dell’Atari 2600. Un latro protagonista di quell’era fu lo Z80, inventato da Federico Faggin e compatibile a livello binario con l’8080, ma con molte piu’ feature.

Lo Z80 era il cuore dello ZX-Spectrum ed era anche stato “incluso” dentro il Commodore 128, tanto era diffuso.

Il MS 6502 e lo Z80 erano completamente diversi. Il 6502 era un chip ortogonale a 8bit, con soli tre registri interni e istruzioni molto veloci, e con un enorme varieta’ di modalita’ di indirizzo.
Lo Z80 era a 8bit, aveva anche registri interni a 16bit, solo che aveva una ALU a 4bit, e quindi ogni somma a 8 bit richiedeva due passaggi.

Lo Z80 includeva una circuiteria per la gestione delle memorie dinamiche (refresh) mentre out of the box il 6502 non aveva questa circuiteria, e di norma sfruttava le piu’ costose memorie “statiche”.
Infine lo Z80 aveva una serie di registri “ombra” che potevano essere “scambiati” con quelli correnti per gestire velocemente gli IRQ, ma nulla impediva di usare questi registri anche in altri contesti.

Legendo questo thread si evince che lo Z80 impiega un minimo di 4 cicli per un fetch+memory refresh.

Il 6502 carica sempre due byte, sia che l’istruzione sia di uno, due o tre byte, e impiega due cicli per farlo. Per cui l’istruzione piu’ veloce impiega 2 cicli (es. NOP)

Di norma, i sistemi basati su Z80 devono girare circa al doppio della velocita’ per avere le stesse performance; in genarle pero’ il maggior numero di registri “ombra” dello Z80 consentono di scriver codice che riduce gli accessi alla memoria, e quindi piu’ veloce. Ma richiede una certa preparazione “psicofisica”.

Il 6502 ha istruzioni molto semplici (semi-RISC) e la sua circuiteria e’ ortogonale e’ pensata per lavorare sempre e solo a 8bit: non ci sono diverse dimensioni dei registri, ne’ possibilita’ di fare operazioni a 16bit(!) per cui questo fa si’ che le istruzioni siano mediamente di 2 byte e quindi i due cicli di caricamento sono mediamente sempre sufficienti/necessari per l’esecuzione.

Infine il 6502 introduce una idea diabolica: c’e’ una modalita’ di indirizzamento chiamata “Zero Page” che indirizza solo i primi 256 byte di memoria. Questa modalita’ consente di risparmiare qualche ciclo perche’ “restringe” l’azione, oltre a richiedere che l’istruzione sia sempre lunga 2 byte, visto che l’operando non e’ mai piu’ grande di 1 byte.

Per cui anche se ad una vista superficiale il 6502 puo’ sembrare un chip limitato ed inferiore allo Z80, di fatto raggiunge un ottima velocita’ di punta a parita’ di clock.

L’unico punto debole del 6502 e’ la mancanza di istruzioni di I/O, che costringono quindi a usare un approccio memory/mapped I/O o una qulche sorta di Memory Management unit (MMU).