Valutazione attuale:  / 1
ScarsoOttimo 

Il mio primo microcomputer (1978)

Come ho già detto, un mio vecchio hobby era quello dell'elettronica e quindi era mia abitudine leggere le riviste del settore; verso la fine degli anni '70 l'era dei tubi termoionici era in declino, i transistors ormai erano maturi e molto usati, i circuiti integrati invece erano agli albori.

I circuiti integrati con logica digitale mi affascinavano; ormai era facile trovare sul mercato gates di ogni tipo (And e Nand, Or e Nor, flip-flop e contatori binari o anche decimali); utilizzandoli, avevo già costruito svariati circuiti, ed un certo giorno (credo verso la fine del 1977) ebbi a leggere un articolo su un nuovo dispositivo che stava per inserirsi nello scenario del mondo delle tecniche digitali; il suo nome era "microprocessore" e al solo leggere delle sue qualità mi si "accapponò la pelle"; avevo capito che quel piccolo dispositivo, altro non era che una vera piccola CPU programmabile.

A quell'epoca io avevo ben 18 anni di esperienza di programmazione e quindi capii subito l'importanza del nuovo piccolo oggetto; mi resi immediatamente conto che l'elettronica sarebbe stata completamente rivoluzionata da quell'aggeggio e durante i collegamenti con i miei tanti amici radioamatori, cominciai a raccontar loro che ben presto buona parte della realizzazione di un'apparecchiatura non sarebbe stata più realizzata con l'uso del "saldatore", ma scrivendo istruzioni su una tastiera; naturalmente credo che molti dei miei colleghi di hobby dovettero pensare che stavo diventando pazzo!

Intanto incominciai a passare notti insonni continuando a pensare a come avrei potuto procurarmi uno di quei dispositivi; la fortuna mi arrise perchè, sempre su una delle riviste di elettronica che usavo leggere, trovai una pubblicità che parlava di un piccolo microcomputer che si costruiva a Firenze; insomma mi ero imbattuto in qualcuno che non solo disponeva dell'oggetto, ma che aveva anche già pensato di usarlo per costruire un piccolo computer!

Chiesi imediatamente una giornata di licenza e mi precipitai a Firenze dove rintracciai il piccolo laboratorio in una traversa del Lung'Arno; il titolare era un ingegnere dell'Unità di Firenze affiancato da alcuni suoi allievi che avevano effettivamente realizzato un piccolo computer utilizzando un F8 (microprocessore a 4 bits prodoto dalla Fairchild); il colloquio con l'ingegnere (si chiamava Franco come me) fu molto cordiale, anche perchè si rese subito conto che parlava con un "professionista della materia"; me ne tornai raggiante, ma soltanto con un piccolo manuale che illustrava l'F8 e tutte le sue istruzioni; l'acquisto fu invece rimandato, soltanto perchè l'ingegnere mi disse che il CHILD8 (il microcomputer con l'F8) stava già per essere sostituito con il CHILDZ (che avrebbe montato il nuovissimo Z80 della Zilog).

Mi tenni in continuo contatto con la General Processor (così si chiamava la piccola azienda di Firenze); ed appena fu pronto il prototipo del CHILDZ lo ordinai al prezzo di favore di L. 640.000; credo che fui uno dei primissimi acquirenti di quella macchina ed eravamo nella metà del 1978.

Qui cominciò per me una nuova avventura nell'avventura; per dare un'idea di quanto fossimo ai primordi, descriverò in dettaglio l'apparecchio che conservo ancora anche se ormai è guasto e che mi fa piacere di mostrare nella foto.

La macchina consisteva in un contenitore di quelli normalmente usati per la costruzioni di apparecchiature elettroniche, la dimensione della parte frontale era 44 x 14cm e la profondità era di 40cm; il frontale dell'apparecchio era di plexiglass bianco con una finestrina trasparente nella quale erano visibili 6 display esadecimali; i display erano suddivisi in due gruppi uno da 4 cifre e l'altro da 2 cifre e su di essi era possibile visualizzare rispettivamente indirizzi e dati; c'era poi un gruppo di switches a levetta che erano normalmente in posizione centrale e che potevano essere mossi sia in su che in giù per poter immettere in mezzo byte una delle possibili 16 configurazioni di una cifra esadecimale; c'erano poi altri switches e led che per il momento non descrivo.

All'interno del contenitore, inserita in una coppia di connettori simili a quelli di tipo ISA attuali, vi era un'unica scheda posta orizzontalmente e grande all'incirca quanto tutto il contenitore; la scheda era realizzata con circuito stampato e su di essa era posta oltre al microprocessore Z80 a 2Mhz, una PIO (Parallel Input/output) per la gestione di una porta parallela e una SIO (Serial input/output) per la gestione di una porta seriale; la memoria in dotazione era costituita da 4 zoccoletti per ROM e 4 per RAM, ma a bordo era installato solo 1Kb di ROM e 4 Kb di RAM; la macchina era corredata (nella ROM) di un piccolo monitor che consentiva all'utente di eseguire una serie di operazione utilizzando gli switches posti sul frontale; l'utente poteva esaminare e modificare uno qualunque dei 4096 bytes della memoria RAM, poteva esaminare i registri della CPU e poteva avviare un eventuale programma preparato in RAM impostando il suo indirizzo di inizio nel registro di macchina "instruction counter".

Con l'elenco delle istruzioni dello Z80 alla mano, cominciai a scrivere piccoli programmi (in linguaggio macchina naturalmente) che potevano utilizzare come input soltanto gli 8 switches del frontalino e per output i 6 display; naturalmente il programma doveva essere immesso byte per byte (anzi mezzo byte alla volta) con gli switches del frontale, poi poteva essere eseguito e naturalmente quando si spegneva la macchina tutto andava perduto e la volta successiva si doveva ricominciare da capo.

Capii subito che non potevo fare a meno di una tastiera e cominciai a farne la ricerca; dalla concessionaria della Motorola di Roma riuscii a trovare una tastiera alfanumerica con le sole lettere maiuscole (al costo di 150.000 lire) che collegai sull'ingresso parallelo; quindi quando accendevo la macchina, caricavo un piccolo programma capace di leggere i dati da tastiera portandoli nelle posizioni di RAM volute, dopo di che potevo cominciare ad usare la tastiera e continuare a caricare dati molto più velocemente; il processo si era molto velocizzato, ma comunque tutto doveva iniziare da capo ad ogni accensione della macchina.

Cercando tra le poche aziende che si interessavano della materia, scoprii che a Napoli neanche lontano da casa mia, c'era una piccola azienda che avrebbe potuto risolvere alcuni dei miei problemi, il titolare era un ingegnere molto gentile che apprezzando la mia passione per i computer, mi dette la possibilità di preparare una EPROM che potesse contenere, senza perderle al power-off, le istruzioni necessarie alla gestione della tastiera; aggiunsi la Eprom in uno degli zoccoletti liberi e da quel momento appena accesa la macchina, mi bastava soltanto far partire il programma presente su Eprom per poter cominciare ad usare subito la tastiera.

La conoscenza di questo ingegnere (si chiamava Emilio) mi fu oltremodo utile; lui aveva una macchina dotata di tastiera e di perforatore di nastro di carta e poi un programmatore di Eprom che leggeva l'input da nastro di carta perforato; se io avevo un programma da portare su Eprom, dopo averlo provato avendolo caricato nella mia RAM manualmente, lo trascrivevo su carta, poi andavo a digitarlo sulla tastiera di Emilio producendo un nastro di carta; infine utilizzavo il programmatore di Eprom che leggeva il mio codice oggetto e lo portava su Eprom.

Intanto la General Processor aveva annunciato di aver prodotto una nuova scheda che si poteva aggiungere a quella già esistente nel CHILDZ, che consentiva di gestire un monitor video come dispositivo di output; ordinai immediatamente la scheda.

La scheda consentiva di visualizzare su un monitor video un'area di memoria di 1024 bytes in 16 righe di 64 caratteri; il generatore di caratteri riconosceva numeri, lettere e alcuni caratteri speciali rappresentati in codice ASCII; bastava dunque che il programma portasse in quei 1024 byte un qualunque byte contenente un carattere in codice ASCII, che la posizione corrispondente dello schermo ne mostrava la sua rappresentazione in carattere leggibile.

Disponendo allora sia dell'hardware nuovo sia della possibilità di creare Eproms, decisi di scrivere un piccolo gestore del mio microcomputer che utilizzasse la tastiera per input e lo schermo video per output; il mio obiettivo, raggiunto dopo qualche mese di lavoro, era quello di disporre di un gestore della macchina molto più sofisticato di quello originario, che consentisse di caricare programmi e di eseguirli utilizzando tastiera e video.

Poichè volevo lasciare libero il video affinchè gli eventuali programmi caricati potessero utilizzarlo per le proprie necessità, decisi di utilizzare il tasto Escape per passare dallo stato di caricamento e debug a quello di esecuzione dell'applicativo e viceversa; il programma fu quindi congegnato in modo che in qualunque momento si fosse premuto il tasto ESC, anche durante l'esecuzione di un programma, veniva salvata l'intera area video e si passava in una schermata di debug che consentiva di conoscere quale era stata l'ultima istruzione eseguita dall'applicazione, di esaminare ed eventualmente modificare i registri e/o qualunque area di memoria, e di riprendere il programma interrotto dal punto dell'interruzione o da un punto qualunque voluto dall'utente (ovviamente prima di ridare il controllo al programma applicativo il mio gestore provvedeva a ripristinare l'area di video applicativa precedentemente salvata).

Tutto questo fu portato su Eprom per cui da quel momento mi fu possibile scrivere programmi applicativi abbastanza facilmente utilizzando la tastiera; potevo inoltre provarli e modificarli senza difficoltà; rimaneva però ancora il problema che comunque ogni programma applicativo, una volta scritto non poteva essere memorizzato e ricaricato, in quanto non disponevo di alcun supporto di input/output.

Quindi il mio successivo obiettivo fu quello di superare quest'altra deficienza; anche questa volta mi venne in aiuto quel poco di conoscenza di elettronica che avevo e su una rivista trovai lo schema di un piccolo circuito che collegato ad un registratore a cassette era capace di produrre un CLICK (cioè un piccolo rumore) che poteva facilmente essere registrato su nastro; naturalemnte era descritto anche un circuito per "leggere" i CLICK presenti su nastro; costruii subito il doppio circuito e immediatamente dopo mi dedicai a realizzare il software necessario per registrare su cassette magnetiche i miei dati.

La realizzazione doveva prevedere sia la scrittura che la lettura e naturalmente in quest'ultimo caso il riconoscimento della validità dei dati letti; con il mio circuito hardware di scrittura ero in grado di far registrare un CLICK a seguito di una transizione OFF/ON di uno degli 8 bits della PIO; ma come utilizzare questa possibitità per registrare i dati di una parte di RAM ?

Decisi di rappresentare i bits con la distanza che intercorreva tra due CLICK facendo corrispondere al bit 0 una distanza breve e al bit 1 una distanza più lunga; il programma di scrittura dunque, dopo aver fatto registrare con una transizione OFF/ON dell'apposito bit della PIO un primo CLICK di inizio, partendo dal primo byte di memoria da scrivere estraeva i vari bits nell'ordine e per ciascuno di essi generava dopo un tempo breve o dopo un tempo più lungo un nuovo CLICK per rappresentare rispettivamente un bit a ZERO o un bit a UNO (la scelta del tempo breve per il bit a 0 era stata fatta perchè prevedendo una maggiore quantità di bits a zero, sarebbe stata mediamente minore la quantità di nastro necessario per la scrittura dei dati); l'attesa breve o più lunga (il tempo lungo era all'incirca il doppio di quello breve) era realizzata con l'esecuzione di un certo numero di volte di un loop.

Il programma di lettura, riceveva l'informazione dell'arrivo di un CLICK perchè il circuito hardware di lettura impostava ad 1 un altro apposito bit della PIO; al rilevamento di questa transizione il programma azzerava quel bit e si metteva in attesa del click successivo incrementando nel frattempo un contatore; all'arrivo del nuovo click se il valore a cui era giunto il contatore era sotto una certa soglia capiva di aver ricevuto uno 0, altrimenti interpretava l'attesa come un 1; naturalmente i bits man mano ricevuti venivano raggruppati ad 8 ad 8 per formare i vari bytes e portati in memoria a partire dall'indirizzo di inizio fissato dall'utente.

Il sistema, che consentiva di scrivere e leggere blocchi di dati di lunghezza a piacere non funzionÒ subito, ma presentÒ dei problemi di lettura che si verificavano all'inizio dei blocchi; dopo molte indagini capii che i primi click erano poco chiari a causa del fatto che la carica dei condensatori presenti nel circuito hardware non era perfetta quando il circuito era all'inzio del funzionamento; con un intervento software risolsi anche questo problema; infatti decisi di iniziare ogni blocco scritto su nastro con 80 CLICK (che servivano a far stabilizzare appunto la carica dei condensatori); al termine di questi click che non facevano parte dei dati, inserii un'attesa molto lunga (se raffrontata con quelle degli zeri e degli uno) che segnalava l'inizio dei veri dati; il programma di lettura lasciava passare senza far niente i primi 60 click ricevuti dopo di che si metteva in attesa di scoprire un'attesa tra i click molto lunga a partire dalla quale cominciava a decodificare i dati; dopo questa modifica il sistema iniziò a funzionare molto bene, consentendomi di scrivere e leggere sui normali registratori a cassetta ad una velocità di circa 1500 bits al secondo.

Per disporre anche di un controllo di lettura, decisi di aggiungere in sede di scrittura 16 bits come carattere di check; i 16 bits eran calcolati sommando il valore binario di ogni byte trasferito e perdendo gli overflow; in lettura il calcolo veniva ripetuto ed il risultato veniva confrontato con il ckeck; un'eventuale discrepanza veniva segnalato come errore.

Poichè un programma applicativo avrebbe avuto bisogno molto probabilmente sia di un dispositivo di input che di uno di output, corredai il mio computer di due registratori a cassetta, uno che veniva usato per la scrittura ed uno per la lettura.

Tutto il software realizzato fu aggiunto nelle Eprom della macchina, cosicchè ogni programma applicativo ne poteva far uso richiamando le routines e fornendo loro le informazioni necessarie quali ad esempio l'indirizzo del buffer di I/O.

La correttezza di funzionamento in particolare del lettore era determinata anche dalla regolazione del volume audio; ricordo di non aver mai eliminato il funzionamento dell'altoparlante del registratore perchè ascoltando il suono dei dati letti avevo una chiara sensazione del procedere della lettura; mio figlio, che dormiva nella stanza dove io tenevo il computer ricorda ancora oggi quel continuo ...miagolio.

 

Torna all'indice