Storia di un programmatore / 2
Il linguaggio BASIC
I manuali in dotazione insieme al mio MSX erano due. Il primo era un'introduzione alla programmazione in BASIC, dove venivano spiegati alcuni concetti fondamentali come le variabili ed il loro utilizzo, le istruzioni di selezione (IF-THEN-ELSE) e di ciclo (FOR-NEXT). L'altro era un manuale di riferimento, dove erano illustrate le sintassi di istruzioni, comandi e funzioni BASIC, con qualche semplice esempio da provare (in BASIC si distingueva tra istruzioni, che accettavano parametri, e comandi, che erano semplici parole isolate).
In ordine di tempo, il BASIC, creato nel 1964, era stato il terzo linguaggio di programmazione ad alto livello ad avere successo, dopo il FORTRAN (1957), nato per usi scientifici, ed il COBOL (1959), ideato per applicazioni finanziarie. Creato appositamente per insegnare ai principianti come programmare (la sigla BASIC sta infatti per Beginner's All-purpose Symbolic Instruction Code), il BASIC di per sé era un linguaggio molto semplice, che ebbe molto successo negli anni a venire, ed ebbe numerosi adattamenti ed aggiunte.
Nella sua versione originale, il BASIC è diverso da qualunque altro linguaggio: i suoi programmi sono una sequenza numerata di istruzioni, ed è possibile eseguire anche un'istruzione per volta al fine di verificarne l'esito. Per questo motivo, si dice che il BASIC è un linguaggio interpretato, a differenza di molti altri linguaggi che sono compilati, come il Pascal o il C.
Chiaramente, essendo sempre presente uno strato di software che fa da traduttore di ogni istruzione scritta nel linguaggio BASIC nella corrispettiva sequenza di istruzioni in linguaggio macchina, i programmi vengono eseguiti più lentamente di un programma compilato, che questa traduzione la effettua una volta soltanto per tutto il programma, ma la verifica dei programmi è più semplice: l'esecuzione si può par partire con il comando RUN, interrompere in qualunque momento premendo i tasti CTRL+C e riprendere con il comando CONT (Continue). Inoltre, l'apposito comando TRON (Trace On), permette di visualizzare il numero di riga attualmente in esecuzione, mentre il comando TROFF (Trace Off) disabilita questa funzione.
Il "dialetto" MSX-BASIC
Vennero creati nel tempo interpreti BASIC per diversi computer, tra cui i nuovi home e personal computer: ogni versione era in realtà un "dialetto" che si distaccava dal BASIC originale, offrendo alcune funzionalità in più. Tra i vari produttori di interpreti BASIC, ebbe grandissimo successo la Microsoft, che creò diversi "dialetti" BASIC, che avevano anche istruzioni dedicate per grafica e suono.
Grazie all'uso di un processore dedicato, l'AY-3-8910 della General Instruments, il suono sull'MSX era rivoluzionario, perché disponeva di tre canali, dunque il processore riusciva ad eseguire anche tre diverse sequenze musicali contemporaneamente: nell'MSX-BASIC c'era l'istruzione PLAY che accettava fino a tre stringhe alfanumeriche, una per ogni canale sonoro.
Per scrivere la musica era stato creato un sotto-linguaggio dedicato, che faceva corrispondere ad ogni nota una lettera dell'alfabeto, secondo la notazione anglosassone (C=Do, D=Re, E=Mi, F=Fa, G=Sol, A=La, B=Si), seguita da un numero, che indicava la loro durata, ed eventualmente dai segni "più" e "meno" per diesis e bemolli.
Era inevitabile dover imparare un po' di BASIC usando un home computer, e le riviste del tempo - ricordo quelle dell'editore Jackson come quelle più serie - proponevano anche lunghi listati di programmi o giochi che si potevano riscrivere sul proprio computer.
Molte persone copiavano pedissequamente questi listati, e talvolta rimanevano deluse dal fatto che tutte quelle righe di codice avessero degli esiti, tutto sommato, modesti, oppure si dovevano scontrare con il fatto che un semplice errore di battitura poteva bloccare l'esecuzione del programma, generando un errore di sintassi, e quindi costringendo il programmatore a rivedere il listato alla ricerca di una parola scritta male, di una virgola saltata, di una parentesi aperta ma mai chiusa, o di virgolette chiuse senza mai essere state aperte.
Credo però che tutte le persone della mia età, che poi sono diventate dei programmatori come me, fecero un ulteriore passo avanti, cercando di comprendere il significato dei listati per poi adattarli secondo le loro esigenze, riscriverli in parte, magari migliorarli, o addirittura cercando di tradurre un listato di un "dialetto" diverso da quello del proprio computer: ricordo, ad esempio, che per un po' di tempo cercai, invano, di partire da un listato per Commodore 64 per ricreare lo stesso programma sull'MSX.
Però, ad essere onesti, capire appieno cosa faceva un listato stampato su una rivista non era sempre semplice. C'erano comunque dei casi in cui il codice era scritto molto bene, come quello nell'immagine che segue.
![]() |
| Un listato per MSX che implementa il gioco di memoria "Simon", scritto, a mio parere davvero molto bene, da M. Cellini. Listato comparso sulla rivista C16/MSX n. 2 dell'aprile 1986. Immagine presa dal sito www.edicola8bit.com |
A discolpa della complessità dei sorgenti di alcuni programmi, c'era certamente da tenere in conto il fatto che i computer MSX, come molti altri home computer, avevano pochissima memoria RAM, e parte di essa era occupata dall'interprete BASIC. Ad esempio, la versione base del MSX aveva 48 KB di RAM, di cui circa 28 KB disponibili e 20 KB occupati dall'interprete BASIC. Inoltre, il suo microprocessore, lo Z80 ideato da Federico Faggin e commercializzato dalla Zilog, era ad 8 bit e funzionava ad una frequenza piuttosto bassa, da un minimo di 2,5 a un massimo di 8 MHz, a seconda dei modelli di computer.
In 28 KB dovevano starci il sorgente e tutte le variabili del programma, quindi risparmiare spazio in memoria, scegliendo opportunamente il tipo delle variabili e rendendo il codice il più compatto possibile era praticamente obbligatorio, tanto che i programmatori mettevano più istruzioni sulla stessa riga di programma, separati dal carattere "due punti", e tenevano due copie dello stesso sorgente: una con i commenti e l'altra senza, più veloce e performante. Purtroppo però i listati pubblicati sulle riviste erano quelli con pochi o senza commenti: poteva andare bene se si trovavano alcune spiegazioni in un articolo a latere, ma era un caso assai raro. Sta di fatto che i programmi senza commenti erano di fatto illeggibili, o almeno difficili da comprendere.
Un buon programma BASIC, in generale, sarebbe dovuto essere strutturato in queste quattro sezioni:
- Linee 10-90: Commenti con: autore, titolo, versione, data della versione iniziale del programma e dell'ultima revisione, oltre a una breve spiegazione di ciò che fa il programma.
- Linee 100-9990: Programma principale (MAIN), possibilmente a blocco unico, con il minor numero di GOTO possibile.
- Linee 10000-59990: Subroutine richiamate dal programma principale, ciascuna corredata da un breve commento e separata dalle altre da un "buco" nella numerazione delle linee.
- Linee 60000-65520 (opzionale): Dati, elencati con la parola chiave DATA, richiamati nel programma dalla parola chiave READ.
Nota. I numeri di riga riportati sono indicativi. Nelle versioni del BASIC create dalla Microsoft, i numeri di riga potevano partire da 0 e arrivare fino a 65529, tuttavia era sempre buona norma usare solo multipli di 10, in modo da avere spazio per introdurre righe intermedie in caso di necessità.
Tuttavia, nel BASIC tradizionale non ci sono imposizioni di nessun tipo, e molto spesso programma principale e subroutine di aggrovigliavano insieme, con il programma principale, che in teoria avrebbe dovuto essere un blocco unico, e che invece, ad un certo punto, saltava (GOTO) ad una riga molto più avanti nel codice, perché le righe successive erano occupate da una o più subroutine.
Negli anni a venire, prima per motivi di studio e poi per lavoro, ho dovuto imparare ad usare almeno una ventina di linguaggi di programmazione, alcuni davvero difficili da "digerire", altri più intuitivi, alcuni molto potenti, altri decisamente più limitati. Lo so che il BASIC, nella sua versione originale, non è orientato agli oggetti, non è concorrente, non è modulare, non ha librerie e, a parte gli array, non dispone nemmeno delle strutture dati più elementari; si potrebbe dire, in definitiva, che non ha praticamente nulla, è la "Cenerentola" dei linguaggi di programmazione.
Ma, nonostante tutto questo, o forse proprio per questi motivi, vedere un listato con le linee numerate a passi di 10, con tanti GOTO sparsi qua e là, delle istruzioni READ in qualche riga e dei DATA chissà dove, vedere in definitiva quello che sembra più un rebus che un vero e proprio programma, mi crea ancora oggi una certa emozione.
(continua)



Commenti
Posta un commento