La mia personale informatica personale
Il mio primo computer
Ho acquistato il mio primo computer nel dicembre del 1982. Era un Commodore vic-20 e vorrei dire anzitutto qualcosa sulle sue periferiche: non c'erano. E non mi riferisco alla stampante, al modem o a chissà quale altro accessorio speciale, parlo del video e della memoria di massa: semplicemente, non erano forniti con la macchina.
Per il video esisteva un'uscita a radiofrequenza che veniva collegata alla presa di antenna di un televisore; in parole povere, la macchina forniva un segnale analogico su un determinato canale, cosicché sul televisore di casa, opportunamente sintonizzato, si potevano vedere i vari canali televisivi oppure la schermata del vic-20, di qualità pessima (che qui non si può vedere) e di aspetto grossolano (che invece si vede benissimo).
Quando l'apparecchio non serviva per guardare la televisione, quindi, poteva essere impiegato come surrogato di un monitor. La qualità dell'immagine era pessima, come ho detto, ma siccome la risoluzione era minima, come si vede, la cosa era tollerabile. Più che di risoluzione, in realtà, si parlava di righe e di colonne, perché la grafica esisteva, ma non poteva essere mescolata al testo.
Dunque il vic-20 aveva una schermata di 23 righe, e ciascuna di esse
CONTAVA BEN 22 COLONNE
perché tanti (spazi compresi) erano i caratteri che entravano in larghezza nello schermo. Se uno voleva aggiungere anche solo il punto finale, il vic-20 andava a capo. Punto.
La memoria di massa non c'era, il che, per quanto oggi possa apparire assurdo, aveva i suoi lati positivi, visto che dall'istante in cui la macchina veniva accesa all'istante in cui diventava operativa passava meno di un secondo. Sissignori, meno di un secondo: niente interminabili procedure di caricamento del sistema operativo, con annessi e connessi, come avviene oggi. Una cosa da non credere.
Una volta che la macchina era pronta, si poteva scrivere un programma. Oggi, accendere il computer per scrivere un programma è una possibilità contemplata forse da un utente su mille, ma al tempo del vic-20 era la norma, perché, dopo l'avvio, la macchina non era in grado di fare assolutamente nulla, tranne offrire la possibilità di scrivere un programma nel linguaggio basic, che era l'unico linguaggio di programmazione disponibile.
Ecco allora il listato di un semplice programma di cinque linee numerate (100-500) in basic capace di stampare sul video l'intero alfabeto. Con il comando run il vic-20 eseguiva il programma e si predisponeva a un nuovo comando. Tutto sommato non si può dire che le cose andassero in maniera molto diversa da come vanno oggi, se si trascura il dettaglio fastidioso che ogni volta che la macchina veniva spenta tutto il lavoro svolto andava perduto.
È evidente che per un programma di qualche importanza era necessario disporre di una memoria di massa, ma penso che oggi sia difficile credere che allora questa necessità non era poi così sentita.
Dopotutto, quei primi computer progettati per un uso personale, come il vic-20, servivano soprattutto a chi voleva pasticciare di persona con l'informatica, che al tempo era ancora un'attività misteriosa, svolta da pochi iniziati in camice bianco che trafficavano su gigantesche macchine talmente costose che neppure si vendevano, ma si affittavano. Il vic-20, in confronto, era poco più di un gran bel gioco di intelligenza, a cui venivano perdonati molti limiti.
Le memorie di massa, comunque, esistevano, però andavano acquistate a parte. C'era il lettore di floppy disk, che era grosso come una scatola da scarpe, si guastava con imperdonabile frequenza e soprattutto costava un occhio della testa; c'era perciò anche il registratore a cassette, denominato Datassette, che salvava il contenuto della memoria volatile su normalissime cassette audio.
Si comandava alla macchina di registrare e questa rispondeva: press record on tape. A questo punto si poteva premere quel tasto sul registratore e il processo di salvataggio del programma aveva inizio. Stessa procedura per il recupero: press play on tape comandava la macchina; allora si premeva quel tasto sul registratore e il programma rifluiva nella memoria del computer.
Tutto questo succedeva spesso. Non altrettanto spesso, ma non così raramente come sarebbe stato sperabile, il procedimento falliva e la macchina si lamentava con un triste load error.
Ci volevano comunque minuti per salvare un programma di un migliaio di bytes, e minuti per recuperarlo. Di più sarebbe stato intollerabile, ma non c'era pericolo, perché la quantità di memoria del vic-20 disponibile all'avvio era di 3 583 bytes. Non ho sbagliato a scrivere: non gigabytes, non megabytes, non kilobytes: bytes. Per fare un confronto, si può dire che questa pagina contiene circa 14 000 bytes. E solo di testo.
Computare con il vic-20 e con cartesio 1
Con il vic-20 scrissi il mio primo programma, e naturalmente lo salvai sul Datassette, perché contava la bellezza di 134 linee, compresi i rem, vale a dire i remarque, i commenti. Disegnava il grafico di funzioni matematiche e perciò lo chiamai «Cartesio 1». Quando potei permettermelo, stampai anche il listato, di cui riporto le prime 40 linee.
Il programma non tracciava delle vere e proprie curve, ma dei punti (in realtà erano asterischi) che appartenevano alle curve delle funzioni. Era piuttosto rudimentale, ma non faceva peggio della costosissima calcolatrice programmabile in notazione polacca inversa Hewlett Packard hp-41c, munita anche di stampante, che l'istituto dove insegnavo aveva acquistato, svenandosi, qualche mese prima.
Anche la spocchiosa hp-41c stampava asterischi, e lo faceva su un rotolino di deperibile carta termica, proprio come si fa per gli scontrini. Il mio programma, invece, lo faceva sul video. A patto, naturalmente, che non ci fosse niente di importante in televisione.
Il mio secondo computer
L'anno successivo acquistai un Commodore 64, che era l'evoluzione del vic-20. Si trattava sostanzialmente della stessa macchina, tranne che aveva una risoluzione doppia e una quantità di memoria dieci volte più grande.
Fra le altre cose, siccome nel frattempo avevo comperato anche il lettore di floppy disk e la stampante, decisi di scrivere un programma per scrivere.
Oggi almeno nove utenti su dieci usano il computer per scrivere, e per farlo si servono di un prodotto fatto da altri (commerciale o gratuito), perciò suona bizzarra l'idea di realizzare da sé un programma di videoscrittura, ma allora il proposito non era affatto un'eccentricità autarchia, era un bisogno concreto.
Nonostante continuassi ad usare con profitto la mia adorata Olivetti Lettera 32 non potevo nascondermi i vantaggi della videoscrittura. Il problema era che la stampante produceva facilmente solo i listati dei programmi; qualsiasi altro impiego era soggetto a un lavoro di programmazione, fosse pure la stampa di una semplice etichetta.
Cominciavano a vedersi, questo è vero, le prime applicazioni di videoscrittura, ma erano tutte rivolte a un pubblico professionale, e quindi a macchine di fascia alta. WordStar, del resto, fu presentato nel 1978 per il sistema operativo cp/m, ma non si diffuse prima della metà degli anni Ottanta. L'ubiqua Microsoft Word comparve nel 1983, e certamente non per girare sul Commodore 64.
L'unica alternativa, dunque, era fare da sé.
Scrivere con il Commodore 64 e con testo 64
Il mio programma si chiamava testo 64, e questa era la schermata di avvio. Premendo uno degli otto tasti di funzione di cui disponeva la macchina si accedeva alla corrispondente parte del programma, che eseguiva il compito richiesto. Quando il compito era terminato ricompariva la schermata di avvio. Il meccanismo non era quello odierno, ma una volta tutti i programmi funzionavano così.
testo 64 era un lavoro molto più complesso di cartesio 1, soprattutto perché era un programma ibrido, che faceva ricorso a numerose procedure in linguaggio macchina, nonostante fosse scritto in basic.
C'era un problema elementare: il Commodore 64 era lento, ma per certi compiti era terribilmente lento. E la ricerca e sostituzione di una serie di caratteri, per esempio, utilissima in un programma di videoscrittura, diventava troppo lunga se il programma era scritto interamente in basic. I casi perciò erano due: rinunciare o sporcarsi metaforicamente le mani, mettendole nel cuore della macchina, nel microprocessore mos 6502, senza usare i comodi guanti offerti dal basic.
Io scelsi la metaforica sporcizia, e devo dire che è stata una delle esperienze più esaltanti di tutta la mia vita.
All'inizio il Commodore 64 non aveva neppure un Assembler, ovvero un programma per facilitare la stesura di procedure in linguaggio macchina. Esisteva solo (da acquistare a parte e da inserire nello slot esterno) un cosiddetto Monitor, che non aveva niente a che vedere con il video, se non fosse per il fatto che permetteva di osservare il contenuto della memoria, e di modificarne delle parti, pezzetto per pezzetto, byte per byte. Poi occorreva provare, alla cieca.
Di solito, quello che succedeva era niente, oppure il blocco totale della macchina, che andava riavviata, e tutto ciò senza che uno striminzito messaggio di errore dicesse almeno: "Ehi, guarda, l'errore è qui!".
La figura riporta una breve procedura scritta nel linguaggio macchina del mos 6502 e visualizzata con il Monitor. La colonna in rosso rappresenta gli indirizzi delle singole celle della memoria ram (in notazione esadecimale), la colonna centrale rappresenta i codici operativi e i corrispondenti dati della procedura (sempre in esadecimale), la colonna in verde rappresenta la sua traduzione in linguaggio Assembly. Si legge così:
lda (load accumulator ‒ codice operativo a9): carica nella speciale cella di memoria del microprocessore denominata accumulatore il valore che segue (#$00), cioè zero;
sta (store accumulator ‒ codice operativo 8d): trasferisci il contenuto dell'accumulatore appena caricato nella locazione di memoria che si trova all'indirizzo $1c25 (notare che il numero è spezzato in due ($25 e $1c) e che gli spezzoni sono invertiti);
...
rts (return from subroutine ‒ codice operativo 60): fine della procedura.
Insomma, non voglio dilungarmi sulla programmazione di un microprocessore che ormai è finito in soffitta da un pezzo, però mi piacerebbe comunicare la spaventosa frustrazione che comportava spesso il lavoro di programmazione a questo livello, ma soprattutto la soddisfazione, la gioia selvaggia, il dilagante piacere intellettuale che provavo quando finalmente la macchina eseguiva con leggerezza, in un soffio, compiti che col basic avrebbero preso molti, troppi ponderosi secondi.
Stampare con il Commodore 64
Nonostante tanti sforzi, comunque, il risultato non era esaltante. Non mi riferisco al programma in sé, che svolgeva passabilmente il proprio compito preliminare di videoscrittura, parlo piuttosto della successiva stampa, che non si poteva certo definire esemplare, per colpa della stampante adoperata ‒ una delle poche collegabili al Commodore 64 ‒ la quale non arrivava neppure alla suola, per così dire, non dico delle fantastiche macchine per scrivere elettroniche che ormai circolavano da un pezzo, ma perfino della mia Olivetti Lettera 32.
Il programma si dava un gran daffare nel rendere più comoda la stesura del testo, nel facilitarne correzione, poi lo impaginava, lo giustificava, come non avrei mai saputo fare con la Olivetti Lettera 32, ma poi la stampante non se ne prendeva altrettanta cura, e lo mortificava costipandolo in grotteschi caratteri che parevano quelli del visualizzatore di una qualsiasi calcolatrice tascabile.
La cosa che mi spiaceva di più era la mancanza dei tratti discendenti dei caratteri, ovvero di quelle parti tipiche delle lettere minuscole g, j, p, q che scendono sotto della linea di base. D'altra parte, la stampante del Commodore 64, una stampante ad aghi come tutte le stampanti dell'epoca, picchiettava i suoi traballanti aghetti su una misera matrice di 7 x 5 punti, con la quale non si potevano fare i miracoli.
Archiviare con il vic-20 e con still
Verso la fine della mia ricerca sulla stampa illustrata, nei primi mesi del 1983, cominciai a pensare che sarebbe stato bello impiegare la macchina per archiviare le informazioni che andavo raccogliendo. Il lavoro, in verità, volgeva ormai al termine, ed era stato condotto interamente con le tradizionali schedine di cartoncino di 12,5 x 7,5 centimetri, sicché non pensai neppure per un istante a riversarlo sul computer, però mi stuzzicava l'idea di fare qualche esperimento, magari per impieghi futuri.
Credo che questa sia stata la cosa più ingenua che ho pensato da quando mi interesso di informatica e di telematica.
L'idea di realizzare una base di dati usando come memoria di massa il registratore Datassette del vic-20 era semplicemente assurda. È vero che a quel tempo circolavano le immagini delle memorie di massa dei grandi calcolatori, le quali mostravano generose bobine di nastro magnetico che frullavano dentro grandi armadi metallici, ma la proporzione con il povero Datassette del piccolo vic-20 non reggeva, neanche accettando una drastica riduzione delle prestazioni.
Il mio programma, che si chiamava still (che stava per stampa illustrata), faceva del suo meglio, ma per recuperare i dati richiesti doveva spazzolare pazientemente l'intero archivio registrato in maniera sequenziale sul nastro. Un martirio.
Archiviare con il Commodore 64 e con lista 64
Archiviato il penoso esperimento still ci riprovai con lista 64, scritto ovviamente per il Commodore 64. In questo caso, però, le cose andarono decisamente meglio, perché disponevo ormai di una memoria di massa a disco, con accesso non sequenziale, e quindi rapido, rapidissimo avrei detto allora.
Il disco ‒ il famoso floppy disk da 5 pollici, impiegato praticamente da tutte le macchine del tempo ‒ era notoriamente suddiviso in settori, ai quali si poteva puntare fulmineamente conoscendo il loro identificativo e il numero della traccia circolare sul disco alla quale appartenevano. L'equazione era semplice:
un settore del disco = un record dell'archivio
Funzionava bene, purché un record non occupasse più spazio di quanto consentiva la dimensione di un settore, che era di 256 bytes, come dire la lunghezza di un sms.
Col passare del tempo cominciarono a comparire prodotti commerciali che permisero anche agli utenti più bendisposti verso la programmazione ‒ come me ‒ di liberarsi almeno in parte dal gravame di dover inventare l'acqua calda tutte le volte che volevano calcolare, scrivere e archiviare.
Nel 1983 era uscito Superbase, per esempio, un bellissimo programma di archivio, scritto espressamente per il Commodore 64, che impiegai largamente per molti dei miei lavori di bibliografia.
L'esperienza maturata con lista 64, tuttavia, non andò perduta, perché la sfruttai per scrivere Il Dominio di Meandro, un gioco di avventura testuale che ebbe anche l'onore di essere pubblicato.