GIOCHI con il 6502

di Carlo Concari

Questo è l’esempio di quando una semplice chiaccherata tra amici porta alla luce vecchi lavori e idee dimenticate…

Tutti i ragazzini che avevano un computer negli anni ’80 hanno imparato almeno i rudimenti del BASIC, provando magari a scrivere qualche semplice programmino. C’erano poi quelli più appassionati, che si cimentavano con programmi via via più complessi, e che, prima o poi, finivano inesorabilmente per scontrarsi con le limitazioni di questo semplice ma lento linguaggio di programmazione interpretato. A quel punto, l’unico modo per spremere fino in fondo le potenzialità di un PC a 8 bit era imparare l’assembly.

Fig. 1. La rarissima guida di riferimento del PC128S in due volumi.

Il mio primo contatto con l’assembly del 65SC12 avvenne grazie alla Guida di Riferimento del PC128S in due volumi (Fig. 1) che, oltre a rivelare tutti i segreti del funzionamento interno del PC, conteneva un’introduzione al linguaggio assembly sorprendentemente accessibile e completa per un manuale. Il salto di qualità, però, avvenne grazie ai libri di Rodnay Zaks.

Il suo “Programmazione del 6502” riporta numerose tecniche di programmazione assembly avanzate (per l’epoca e il contesto, s’intende) in modo estremamente chiaro, accessibile anche a un ragazzino di 14 anni (Fig. 2).

Fig. 2. Copertina dell’edizione di “Programmazione del 6502” in mio possesso.

Così, quando vidi su un bancone di una fiera dell’elettronica il volume “Giochi con il 6502” con la sua copertina rossa e l’omino pixeloso, non potevo certo lasciarmelo sfuggire! E’ proprio da questo libro che nasce l’oggetto di questo articolo.

Il libro utilizza i giochi come “scusa” per insegnare tecniche di programmazione assembly. I giochi proposti sono basati su una scheda SYM-1 prodotta dalla Synertek Systems, una delle tante schede a microprocessore in commercio tra la fine degli anni ’70 e l’inizio degli anni ’80, oggi completamente svanite nell’oblio del tempo. Serviva, inoltre, una “scheda giochi” progettata appositamente per gli scopi del libro, comprendente una tastiera esadecimale con i tasti da 0 a F, un altoparlante, e una quindicina di LED (Fig. 3).

Fig. 3. La scheda giochi così come riportata sul libro “Giochi con il 6502”.

Decisi così di mettere insieme un sistema analogo basato sul PC 128 S. L’idea era che il PC, basato sul 65SC12 (versione migliorata del 6502 con il quale, tuttavia, mantiene una compatibilità totale) e dotato di tastiera e altoparlante, potesse tranquillamente sostituire la vetusta scheda SYM-1: dovevo solo costruirmi la scheda giochi con i LED.

Fig. 4. Il prototipo della scheda giochi, costruito più di 30 anni fa. Nonostante l’aspetto e la qualità dei collegamenti siano alquanto discutibili, funziona ancora!

Come si può vedere dalla Fig. 4 ero ancora alle prime armi con l’elettronica, ma riuscii a costruire la scheda e a farla funzionare. Trascrissi i listati del libro con alcuni aggiustamenti per adattare i programmi al PC 128 S, creai un menu per lanciarli e, successivamente, la “scheda giochi” finì gradualmente nel dimenticatoio degli oggetti del passato. Fino a quando trascorsi circa 36 anni…

Proteus075 mi girò una foto della copertina di “Giochi con il 6502”.

Io: “Sai che ho una copia cartacea di quel libro, e che tanti anni fa avevo costruito la scheda per i giochi”?

Proteus075 : “Ma va?”

Io: “Sì sì, ora la cerco e ti mando le foto”.

Trovata la scheda, collegata al PC128S, lanciato il floppy con i programmi, dopo trent’anni la scheda funzionava ancora perfettamente! Mandai le foto a Proteus075

Proteus075 : “Che bella, ne voglio una anch’io!”

(Avevo opportunamente evitato di mostrargli il “sotto” della scheda).

Io: “Ok, ti mando lo schema elettrico così la rifai uguale”.

Mi misi così a esaminare la scheda per ricostruire lo schema dei collegamenti: se mai fosse esistito uno schema, era probabilmente andato perduto decenni fa. Ricordavo vagamente di essermi inventato un collegamento di tipo “multiplexing” per accendere i 15 LED usando le 8 linee della porta stampante, collegandoli su una matrice di 3 righe e 5 colonne. La parte bella, però, finiva qui: oltre ai collegamenti un po’ disordinati (per usare un eufemismo), la scheda aveva qualche lieve difettuccio di progettazione (per usare un altro eufemismo). Per esempio, avendo probabilmente constatato che le uscite digitali della porta stampante del PC 128 S, da sole, non erano in grado di accendere i LED a un livello di luminosità decente, e non avendo ancora idea di come progettare degli amplificatori per aumentare la corrente, avevo collegato sulle 5 colonne a mo’ di “buffer” 5 integrati NE555, di norma usati come timer. Non solo, sulle righe non c’era nessun circuito di protezione o limitazione, sicché ogni porta del PC 128 S si beveva la corrente di tutti i LED accesi (fino a 5 per riga): in pratica era un miracolo che la scheda funzionasse senza far prendere fuoco al povero PC128S! Inoltre, quando un LED lampeggiava, tutti i LED sulla stessa riga variavano la loro luminosità, così da rendere difficile distinguere quelli lampeggianti da quelli fissi. Insomma, dal punto di vista hardware, per dirla con Paolo Villaggio, una cagata pazzesca. Non potevo mandare a Proteus075 un circuito fatto così male.

Fig. 5. Rendering in 3D della scheda LED

Decisi, quindi, di mettere a frutto la laurea in ingegneria elettronica presa nel frattempo e di riprogettare da capo la scheda, stavolta cercando di fare le cose per bene. Buttai giù uno schema elettrico a transistor per amplificare i segnali su tutte le righe e le colonne, lo simulai per accertarmi che funzionasse come previsto, e disegnai un circuito stampato ad hoc. La fig. 5 mostra il rendering 3D della scheda progettata al CAD, la Fig. 6 i circuiti stampati, mentre la fig. 7 mostra i componenti e una fase del montaggio, e la Fig. 8 la scheda finita e collegata al PC128S.

Fig. 6. Fronte e retro del circuito stampato della scheda Giochi con il 6502
Fig. 7. I componenti della scheda pronti per il montaggio e la scheda parzialmente montata
Fig. 8. La scheda finita in azione, collegata al PC128S

Chiunque voglia replicare la scheda può chiedermi lo schema elettrico, i disegni del circuito stampato, gli schemi di montaggio e l’elenco dei componenti con i relativi codici Mouser per acquistarli facilmente. Ho alcuni circuiti stampati vuoti che posso mandare al costo della spedizione a chi è interessato; in alternativa, questi sono i file “Gerber” per ordinare i circuiti stampati da una delle tante aziende che li fabbricano. Per il montaggio raccomando di partire dai componenti più bassi (resistenze) e di proseguire via via con quelli più alti. I LED e i transistor potrebbero anche essere montati con il corpo attaccato al circuito stampato ma, dal punto di vista estetico, a mio parere, stanno meglio se si montano sollevati almeno di un centimetro. Attenzione quando si saldano le piazzole dei transistor, che essendo molto vicine fra loro sono particolarmente a rischio di cortocircuiti.

Ecco all’opera il software, esattamente come scritto 30 anni fa. Il “driver” per i LED è scritto in forma di ROM e viene caricato in una Sideways RAM. Il codice viene richiamato 100 volte al secondo dal timer di sistema e gestisce i LED accendendo in sequenza le tre righe e pilotando, per ogni riga, i LED di volta in volta accesi. Il disco comprende, oltre ai programmi in linguaggio macchina, i sorgenti scritti in assembly. Come regola generale, un file il cui nome termina con “X” è un eseguibile in linguaggio macchina, mentre un file con lo stesso nome ma senza la “X” è il sorgente corrispondente.

Fig. 9. Il menu del floppy disk Giochi con il 6502.
Fig. 10. Le etichette applicate tanti anni fa al mio PC 128 S per contrassegnare i tasti esadecimali da A a F.

Facendo il boot con SHIFT+BREAK parte un menu che permette di selezionare i giochi (Fig. 9), elencati nello stesso ordine in cui compaiono sul libro, dai più semplici ai più complessi. Tutti i giochi utilizzano come input i soli tasti del tastierino numerico, nel quale alcuni dei tasti di punteggiatura e il tasto DELETE rappresentano le lettere esadecimali da A a F, come mostrato in Fig. 10. Le regole e la meccanica dei giochi sono illustrate all’inizio dei capitoli corrispondenti del libro, liberamente consultabile e scaricabile da qui. Il primo, “Gioco Musicale”, non fa uso dei LED, ma usa soltanto la tastiera e l’altoparlante; l’ultimo gioco, “Tic Tac Toe” (in Italia comunemente chiamato “TRIS”), sfoggia una primitiva intelligenza artificiale per cui più partite il giocatore vince, più l’avversario computerizzato diventa bravo. Riporta alla mente il film WAR GAMES, giochi di guerra del 1983.

Concludendo, dopo trent’anni, anche grazie a Proteus075 che mi ha dato il “la”, credo di essere riuscito a rendere giustizia a questo progetto. Finalmente un LED lampeggiante non fa lampeggiare anche gli altri, e non c’è più il rischio di friggere il povero PC128S! Spero che questo progetto stimoli l’interesse di altri appassionati di retrocomputing.

Questo lavoro è nato da tanta passione e da una mia scintilla che ha mosso il buon Carlo a rispolverare vecchi ricordi tecnologici, in pratica ho acquistato un altro libro di Rodnay Zaks per cercare di imparare i rudimenti del linguaggio macchina, il titolo è PROGRAMMAZIONE DEL 6502 editore JACKSON del 1981.

il (costoso) libro con le basi del linguaggio Assembly per il 6502

Avevo letto qualcosa sui libri, in particolare se qualcuno ha la pazienza di andare a vedere pag. 994 vol. 5 de “Il mio computer”, viene descritto in dettaglio come costruire un piccolo circuito per far comunicare con l’esterno i computer BBC. Non avrei mai immaginato che qualcuno in Italia si fosse cimentato in una realizzazione pratica, ad ogni modo ho replicato e studiato (giocato) con questo prototipo proprio sul 128S ! Sono rimasto sbalordito dall’impegno e la cura del software in BASIC, che ricordo, doveva essere adattato e “tradotto” (basti pensare alle frequenze delle scale musicali) per funzionare correttamente sul nostro BBC della ACORN. Se volete vedere in funzione questo formidabile circuito ho caricato un video sul canale YOUTUBE. Ringrazio Carlo per il KIT che mi ha fornito ed ovviamente se qualcuno fosse interessato a replicare e tenere questo piccolo gadget assieme al proprio PC128S, mi contatti tramite email.