Computer / Z80 · 26 gennaio 2019 1

LM80C: programmazione della EEPROM

Una volta scelta la CPU e controllato che fosse OK, ho iniziato a pensare al passo successivo. E, avendo un computer funzionante, non è difficile. Per cosa è fatto un computer? In linea di massima è una macchina progettata per eseguire dei comandi, i programmi software. Quando caricate un qualsiasi programma nel vostro computer, state dando alla CPU un elenco di “istruzioni” da eseguire per ottenere qualche tipo di risultato. E’ un compito facile, con un computer moderno: accendete la vostra macchina, aspettate che il S.O. venga caricato, poi inserite qualche tipo di dispositivo di archiviazione ed eseguite il vostro sofrware. Ma qui abbiamo per ora solo una semplice CPU su una basetta di prototipazione! Senza nessun tipo di programma né un sistema per memorizzare i programmi. Abbiamo senz’altro bisogno di un posto dove immagazzinare questi programmi, abbiamo bisogno di un po’ di memoria.

Generalmente un moderno computer contiene RAM, un sacco di RAM. La RAM è un particolare tipo di memoria che è volatile. Questo significa che una volta spento il computer essa perde immediatamente qualsiasi dato che era memorizzato in essa. Questo non è un grosso problema perché ogni volta che noi accendiamo il computer questo ricarica il sistema operativo, di solito da un disco rigido. Ma tanto tempo fa i computer non avevano un disco rigido bensì una memoria NON volatile dove il costruttore aveva immagazzinato il software pre-installato che veniva caricato all’avvio. Questa memoria generalmente era una ROM, o Read-Only Memory: una memoria che poteva essere solo letta, scriverci sopra era impossibile. O, per meglio dire, scriverci era impossibile dopo la programmazione di fabbrica. La ROM può essere programmata solo una volta, dal costruttore del computer tramite uno stabilimento di lavorazione degli  integrati perché l’informazione è immagazzinata a livello hardware. Un altro tipo di memoria non riscrivibile è la PROM, che sta per Programmable ROM. Questa memoria può essere programmata anche in un laboratorio con strumenti più economici ma, come le ROM, una volta programmata non può più essere riscritta. Non abbiamo usato una ROM perché non abbiamo uno stabilimento industriale per fare questo lavoro. Non abbiamo neanche usato una PROM: troppo costosa per un hobbista. E’ per questo che sono state inventate le EPROM (Erasable PROM): queste sono un particolare tipo di PROM che possono essere programmate diverse volte. Il limite di queste memorie è che necessitano di una cancellatore con raggi ultravioletti (UV), un dispositivo con una lampada UV dove riporre il chip per 30/40 minuti per resettare le celle di memoria del chip così che possano essere riprogrammate un’altra volta. Per evitare questi sprechi di tempo gli ingegneri hanno sviluppato le EEPROM, o Electrically Erasable PROM: queste memorie hanno un circuito integrato che usa semplici impulsi elettrici per resettare le singole celle di memoria così che i cicli di scrittura/cancellatura/riscrittura sono più veloci rispetto all’uso delle EPROM. Le EEPROM si possono trovare usate su EBay oppure nuove. Io ho preso 2 chip: una X28C256 di seconda mano, ed una AT28C256 nuova (qui userò quest’ultima). Entrambe sono da 32 KB (256 Kbit equivalgono a 32 KB perché 8 bit sono 1 byte, quindi 256/8=32): potete scegliere altri tagli ma suggerisco comunque di un scendere sotto agli 8 KB.

Per programmare la EEPROM avremmo potuto usare un programmatore EEPROM specifico ma, dato che siamo “nerd inside”, ci costruiremo il nostro programmatore hobbistico con un Arduino, una scheda di prototipazione molto popolare, e una manciata di componenti aggiuntivi. Una volta che avremo riempito la EEPROM con il nostro codice potremo iniziare a fare qualche connessione e provare ad eseguire semplici compiti. Al momento la nostra priorità è però scrivere del codice nella EEPROM. Come ho detto in precedenza, useremo una scheda Arduino per questo compito: un Arduino UNO sì confà benissimo a questo scopo. Ci sono un sacco di circuiti e di codici su internet: dopo averne provati diversi, ho deciso di optare per il programmatore TommyPROM, personalmente uno dei migliori. Avrei potuto scrivere un programmatore mio ma TommyPROM è pronto all’uso e può essere utilizzato come interfaccia per inviare alla EEPROM anche file di grandi dimensioni attraverso un terminale di computer. Ad ogni modo ho provveduto a modificare il progretto perché TommyPROM usava dei registri a scorrimento da seriale a parallelo di tipo 74LS164 che non avevo nel mio cestino delle cose avanzate. Invece avevo diversi 74HC595 che potevano funzionare bene lo stesso. Giusto alcune modifiche al codice ed al circuito e sono stato pronto a partire. Ho creato un repository Github dove trovate la mia modifica. Per mantenere il progetto semplice, assembleremo tutto il circuito su scheda di prototipazione. Ecco l’elenco del materiale occorrente:

  • 1 scheda Arduino (una UNO o una Nano vanno bene)
  • 1 scheda di prototipazione (breadboard)
  • 2 registri a scorrimento 74HC595
  • 3 condensatori ceramici da 0.1uF
  • 3 resistori da 10 Kohm
  • 1 condensatore elettrolitico da 10 uF
  • 1 resistore da 330 ohm
  • 1 LED (di qualunque colore)
  • un sacco di jumper per i collegamenti

E’ importante che piazziate i condensatori ceramici da 0.1 uF il più vicino possibile ai corrispondenti chip perché sono necessari per disaccoppiarli elettricamente dal resto dell’alimentazione del circuito. Invece, il condensatore elettrolitico può essere piazzato ovunque sulla linea di alimentazione della schedina di prototipazione: esso fungerà da riserva di energia, risultando utile per evitare fluttuazioni nell’alimentazione causate dall’operatività dei chip. Ho anche aggiunto il LED solo per avere un rapido riscontro del fatto che il circuito sia sotto tensione oppure no. Questo è lo schema del nostro circuito:

EEPROM programmer with Arduino UNO

Programmatore EEPROM con Arduino UNO

E questa è una foto del mio programmatore:

EEPROM programmer on breadboard

Programmatore EEPROM su breadboard

Prestate attenzione a collegare i piedini di output dei registri a scorrimento con i corrispondenti piedini di input del chip EEPROM. Non dimenticate di ricontrollare le linee dei dati tra la EEPROM ed i pin dell’Arduino. Il programmatore non assorbe molta corrente per cui può essere alimentato direttamente dalla scheda Arduino, e tenete a mente di collegare le masse (linee GND). Una volta connesso ogni cosa, caricate lo sketch su Arduino e aprite un terminale per dialogare con il sofrware. Potete usare il terminale di Arduino: per un “dump” (lettura della memoria EEPROM) o per spedire una manciata di byte, il terminale dell’IDE di Arduino è più che sufficiente ma, dato che non supporta il protocollo XMODEM, non va bene per leggere/scrivere dei file. Per fare questo necessitiamo di un terminale più complesso, come TeraTerm (Windows), Minicom (Linux) o CoolTerm (Mac). Avendo sviluppato su Mac, ho scelto CoolTerm. Aprite una connessione a 115.200 bps, 8N1 (8 bit di dati, No parità, 1 bit di stop).

Una volta controllato che possiamo leggere e scrivere sulla nostra EEPROM, siamo pronti per fare il passo successivo, ossia impostare un vero e proprio computer minimale con CPU, RAM, EEPROM, un clock, un circuito di reset e qualche periferica da pilotare.

AGGIORNAMENTO:
devo fare un aggiornamento circa l’emulatore di terminale perché ho riscontrato gravi problemi durante l’upload dei file ROM. In breve, ho visto che solo alcuni terminali funzionano bene con lo sketch TommyPROM: questi sono Serial per il Mac e TeraTerm per Windows. Ho provato un sacco di emulatori di terminale senza GUI (come screen e altri terminali per Linux) ma nessuno ha funzionato correttamente. Sinceramente non so perché non funzionino, e non ho voluto indagare la cosa e riscrivere lo sketch di TommyPROM perciò ho fatto una scelta drastica. Avendo un Mac, avevo scelto inizialmente Serial ma è un software commerciale: l’ho scartato. Lasciatemi spiegare: non l’ho scartato perché è a pagamento ma perché è eccessivamente costoso per il mio portafoglio. Perciò ho creato una macchina virtuale con VirtualBox ed ho installato Windows 7 optando per TeraTerm. E’ una soluzione free e… funziona! Compilo su Mac, condivido il file ROM con la macchina Windows e faccio l’upload attraverso Arduino usando TeraTerm.