Il PCB della VGA funziona: primo videogioco sul computer Z80 autocostruito ALEX80

Dopo settimane di lavoro sul breadboard, è arrivato il PCB del controller VGA per ALEX80, e questa volta i tempi sono stati record: appena una settimana di attesa. Era il momento di scoprire se i piccoli difetti di visualizzazione visti sul prototipo volante fossero davvero legati al groviglio di fili del breadboard, oppure nascondessero un problema più serio nel progetto.

Il montaggio è partito, come sempre, dalle resistenze: nove per il DAC verso il connettore VGA e una per il transistor aggiunto all’ultimo momento per la gestione dell’interrupt. Poi il quarzo da 25 MHz, montato al contrario rispetto alla serigrafia del PCB (che riportava ancora la piedinatura di un componente diverso), verificato con l’oscilloscopio prima di proseguire: forma d’onda non perfetta ma oscillazione corretta a 25 MHz.

A seguire gli zoccoli per gli integrati, con qualche attenzione in più richiesta dall’orientamento invertito di alcuni componenti nel layout e da uno zoccolo da 40 pin tagliato su misura per adattarlo alla RAM, visto che non si trovavano zoccoli da 28 pin larghi. Poi i condensatori di disaccoppiamento da 100 nF vicino a ogni integrato, il transistor, il connettore VGA, il pettine per il collegamento al bus di ALEX80 e il ponticello per abilitare o disabilitare l’interrupt. Prima di inserire i componenti attivi, un controllo di continuità tra alimentazione e massa ha dato un valore ragionevole, tenendo conto delle resistenze e del quarzo già presenti.

Il primo collaudo vero e proprio è arrivato con i PLD, già programmati e pronti per essere inseriti: prima il V counter, poi via via gli altri componenti della logica di sincronismo. Qui sono emersi i problemi. Il primo: l’H counter risultava non programmato, e quindi non generava alcun conteggio, semplicemente perché nella riprogrammazione dei cinque PLD da zero qualcosa era andato storto. Il secondo: alcune file di pin non risultavano saldate, in particolare sul decoder e sul contatore.

Il problema più insidioso, però, non era di saldatura ma di cablaggio, ed era già presente nello schema: nel decoder, i segnali collegati dovevano essere gli indirizzi Z2, Z3 e Z4 provenienti direttamente dallo Z80, mentre nello schema risultavano collegati per errore gli indirizzi A2, A3 e A4, cioè quelli generati a valle dei buffer 244 (usati per gestire l’accesso alla memoria video da parte dello Z80) oppure quelli provenienti dai contatori. Un errore che mandava in tilt la selezione del banco di memoria e la lettura del segnale di V-Blank, con il risultato che la scrittura in memoria video avveniva anche quando il segnale video la stava leggendo per generare l’immagine, causando i disturbi visti sul monitor.

La soluzione, in attesa di una revisione del PCB, è stata estrarre i tre pin coinvolti e ricollegarli con un piccolo connettore volante, facilmente rimovibile. Non essendo del tutto convinto di questa prima realizzazione, per ora sono state prodotte solo cinque schede prototipo, che quindi non saranno ancora messe in vendita.

Un ultimo problema riguardava un pin del contatore che avrebbe dovuto essere collegato a massa e non lo era: proprio quello che genera il bit più significativo dell’indirizzo di memoria, responsabile della selezione dei due banchi in lettura. Vista l’importanza della stabilità elettrica in questa parte del circuito, sono state rifatte diverse saldature e la scheda è stata pulita con alcol isopropilico.

Con la scheda finalmente inserita su ALEX80 (collegando anche la selezione della ROM interna, ridotta a 16K anche se il componente montato è ancora da 32K), il primo avvio ha mostrato il solito rumore dovuto alla RAM non inizializzata. Da lì, tramite l’Alex80 IDE, sono stati ripresi i test già visti nel quinto episodio della serie sulla VGA: la gestione degli angoli dello schermo funziona correttamente, così come la riga centrale di riferimento. Restano invece delle righe verticali, probabilmente legate al fatto che in alcune configurazioni di indirizzo la finestra temporale disponibile (circa 60 ns) è più stretta del tempo di accesso della memoria montata (70 ns): è già in prova una memoria da 55 ns, in attesa di verificarne l’effettiva efficacia.

Dopo un test di animazione a schermo intero, il passo successivo è stato naturale: provare un piccolo controller con due pulsanti in pull-up collegati alla porta di ingresso A, e usarli per abbozzare un primo, semplicissimo, gioco di breakout scritto in assembler con l’aiuto di ChatGPT. Nessun suono, nessun punteggio, nessun livello: solo l’idea di base, ma già sufficiente per intuire le potenzialità del sistema.

Il controller VGA funziona sia su ALEX80 sia su ALEX80 Micro, anche se su quest’ultimo, pilotato dal clock di Arduino, la scrittura in memoria video diventa talmente lenta da rendere impraticabile un gioco come quello mostrato. Con l’espansione del bus (di cui è stata realizzata anche una nuova versione migliorata) e un clock esterno, invece, le prestazioni tornano quelle di ALEX80.

Se vuoi vedere il montaggio passo passo, il debug dei problemi di cablaggio e il primo, imperfetto ma funzionante, giochino di breakout su ALEX80, guarda il video completo sul canale.

Avatar Paolo Godino