eZ80: il compatibile Z80 ancora in produzione (e piu veloce). Montiamo una dev board di test

Lo Z80 ha ufficialmente cessato la produzione circa due anni fa. Non significa che sia sparito dal mercato: si trova ancora su AliExpress, nell’usato, in fondi di magazzino e rimarchiature varie, ma con tutti i rischi che questo comporta. Su un lotto di una cinquantina di pezzi acquistati per i test del progetto Alex80, circa la meta risultava difettosa o comunque poco affidabile fin da subito. Quelli che funzionano, tendenzialmente, reggono bene anche ore di stress test, ma la reperibilita di un componente affidabile e ormai un problema reale per chi lavora con questo microprocessore.

Da qui la domanda che ha guidato l’episodio di questa settimana: esistono alternative che mantengano la base Z80 senza dipendere da un mercato dell’usato sempre piu incerto? La risposta e l’eZ80 di Zilog, un microcontrollore tuttora in produzione che integra un core compatibile Z80, e attorno a questo chip e nata una piccola dev board autocostruita, pensata solo per verificare che il montaggio e la comunicazione di base funzionino.

Due strade per sostituire lo Z80

La prima alternativa esplorata e un clone dello Z80 pensato esplicitamente per emularne il comportamento, arrivato da un contatto giapponese conosciuto alla Maker Faire dell’anno scorso. Funziona bene, ma non ha un’architettura statica come l’originale e richiede quindi un clock relativamente frequente per restare stabile. Viene fornito gia montato su una schedina compatibile con lo zoccolo DIP a 40 pin dello Z80, quindi e sostituibile senza troppe complicazioni meccaniche.

La seconda strada, quella scelta per questo esperimento, e l’eZ80. Non e un semplice clone: e un microcontrollore a tutti gli effetti, con Z80 come base, flash integrata e periferiche di I/O, pensato per applicazioni embedded come apparati di rete o macchine di vendita. Ha un’architettura che puo arrivare a registri e indirizzamento a 24 bit, quindi fino a 16 MB di RAM indirizzabile, e soprattutto include una modalita di compatibilita Z80 capace di eseguire codice scritto per il processore originale senza modifiche. L’unico vincolo hardware e l’alimentazione: lavora a 3,3 V e non a 5 V, quindi in un sistema pensato per lo Z80 servono adattatori di livello. A livello di prestazioni, oltre al clock piu alto (20 MHz nel caso specifico), l’eZ80 introduce una pipeline al posto del classico ciclo a quattro colpi di clock dello Z80, arrivando cosi a quadruplicare la velocita di esecuzione a parita di frequenza.

Dalla scheda al saldatore

Il pezzo acquistato, un singolo esemplare da Mouser per poco piu di 9 euro, monta un package decisamente meno comodo del DIP usato per lo Z80 su Alex80: passo fine, saldatura tutt’altro che banale. Per contenere i costi si e scelto di ordinare solo il PCB nudo (il minimo d’ordine per l’assemblaggio in fabbrica sarebbe stato di cinque schede) e montare il chip a mano. Dopo un tentativo non del tutto convincente con la pistola ad aria calda in un episodio precedente, questa volta la scelta e ricaduta sul saldatore tradizionale con flussante.

Lo schema della scheda e volutamente essenziale: il microcontrollore, un quarzo da 20 MHz con i relativi condensatori di carico da 22 pF, le resistenze di pull-up sul pin di interrupt, un pulsante di reset con relativo condensatore di stabilizzazione, due LED (alimentazione e funzionalita), un connettore di espansione per i test sugli I/O e un connettore per la programmazione. E presente anche un’interfaccia JTAG, ma il canale di comunicazione principale e il protocollo proprietario ZDI di Zilog, che condivide alcuni pin con il JTAG stesso (reset, un clock e una linea dati bidirezionale, con pull-up che ricordano da vicino l’I2C). Un selettore, gestito con una resistenza da 10 kOhm, permette di scegliere all’accensione se usare ZDI o JTAG.

Il montaggio segue una sequenza ordinata e utile anche come promemoria per chi affronta saldature simili: prima l’allineamento del microcontrollore rispetto al pin 1 (individuato dai puntini di riferimento su chip e PCB), poi la saldatura vera e propria, la pulizia con alcol isopropilico e la verifica con il tester (continuita tra GND e VCC, controllo dei pin di alimentazione distribuiti attorno al package). Solo dopo aver confermato l’assenza di corto circuiti si procede con i componenti passivi: resistenze di pull-up, pulsante di reset, diodo, quarzo, condensatori di carico, e i condensatori di disaccoppiamento da 100 nF su ogni pin di alimentazione del chip, piu uno dedicato alla stabilizzazione del segnale di reset.

Il test: blink via ZDI, con un aiuto da Agon Electron

Programmare l’eZ80 significa interagire con la sua flash interna attraverso il protocollo ZDI. Il tool ufficiale Zilog per farlo costa circa 100 euro, una spesa che si e scelto di evitare: il protocollo e documentato pubblicamente, quindi l’idea e usare un microcontrollore esterno con un firmware scritto ad hoc, cosi come gia avviene su Alex80 con Arduino in funzione di supervisione.

Per il primo test, invece di scrivere tutto da zero, si e riutilizzata l’implementazione ZDI gia presente nel progetto open source Agon Electron, un microcomputer che usa proprio un eZ80 come CPU centrale affiancato da un ESP32 per il caricamento dei programmi e, tramite la libreria FabGL gia vista in un episodio precedente sul canale, per la generazione del segnale VGA. La filosofia e diversa da quella di Alex80, dove l’Arduino (o l’ESP32) deve occuparsi solo di supervisione e non entrare nel funzionamento del computer vero e proprio: per la VGA di Alex80, infatti, si sta lavorando a una scheda esterna basata su logica discreta e non su un microcontrollore. Per questo esperimento, pero, riusare la parte ZDI di Agon Electron ha semplicemente permesso di concentrarsi sulla verifica dell’hardware senza reinventare il software di comunicazione.

L’ambiente di sviluppo usato e PlatformIO, un’estensione di Visual Studio Code non ancora vista sul canale ma che potrebbe diventare la base per riunificare in futuro la gestione firmware di Alex80 e Alex80 Micro. Dopo il collegamento fisico dell’ESP32 alla scheda (massa, alimentazione a 3,3 V, linea di clock e linea dati) e il caricamento del firmware con il comando di upload di PlatformIO, la comunicazione seriale e avvenuta a 500.000 baud tramite Picocom su Mac, con l’invio dei caratteri rallentato per evitare perdite di dati durante il trasferimento.

Da qui il test vero e proprio: dump della memoria (inizialmente illeggibile, come atteso su un chip mai programmato), caricamento in formato Intel HEX di un piccolo programma assembly per Z80 che fa lampeggiare il LED collegato sull’uscita PB0, salto del program counter all’indirizzo di partenza del programma ed esecuzione. Il LED verde sulla scheda ha effettivamente iniziato a lampeggiare, a conferma che sia la saldatura del chip sia la comunicazione via ZDI funzionano correttamente. Qualche caduta di comunicazione dovuta ai cavetti di collegamento, non proprio ottimali, resta un dettaglio da sistemare con un cablaggio piu solido.

Cosa aspettarsi

L’obiettivo di questo episodio era circoscritto e chiaro: verificare che il montaggio dell’eZ80 fosse corretto e che la comunicazione di base funzionasse. Obiettivo raggiunto. Restano aperte diverse strade per il seguito: se e come integrare l’eZ80 nell’ecosistema Alex80, se mantenere l’ESP32 per la supervisione o passare a un Arduino compatibile 3,3 V (come l’Arduino MKR, mentre il nuovo Arduino UNO Q sembra decisamente sovradimensionato per questo scopo), e un approfondimento sull’architettura dell’eZ80 e su cosa lo differenzia realmente dallo Z80 originale.

Per vedere il montaggio della scheda passo passo, il test al microscopio dell’allineamento del chip e il blink finale in azione, il video di questa settimana e disponibile sul canale.

Avatar Paolo Godino