La sezione dedicata alla storia dell’informatica, questa volta non tratterà di hardware ma di software e, più specificamente, di un linguaggio di programmazione divenuto famoso quasi quanto i computer che lo avevano in dotazione: il Commodore Basic. Nello specifico, descriveremo proprio la versione fornita con il computer più venduto di tutti i tempi, ovvero il Commodore 64.

Il Commodore Basic era un dialetto di diretta derivazione del Microsoft Basic sviluppato dall’omonima software house per il processore 6502: al pari del Commodore 64 e di altri prodotti della stessa casa produttrice quali ad esempio il Commodore PET, lo stesso core di questo linguaggio veniva utilizzato anche da molti altri computer basati sullo stesso processore (ad esempio l’allora diffusissimo Apple II).

Una panoramica

La versione di basic in dotazione al C64 era la stessa che aveva già equipaggiato nel 1975 il primo PET e nel 1980 il Vic 20, ovvero la V.2.0 (per la precisione il primo Pet 2001 era corredato dalla V.1.0, successivamente aggiornato a quest’ultima).

Il linguaggio era naturalmente interpretato. Il suo punto di forza era che l’interprete era presente direttamente in ROM per cui era immediatamente disponibile all’atto dell’accensione della macchina. Altra caratteristica da non sottovalutare per l’epoca era la disponibilità di un editor a tutto schermo che consentiva di poter agire sul sorgente utilizzando direttamente i tasti di movimento del cursore ed inserire le righe di codice in qualunque ordine: l’interfaccia di editing le avrebbe poi inserite correttamente nella giusta posizione.

Su altri computer non era disponibile una funzionalità di questo tipo, se non ricorrendo a programmi accessori (basti pensare al sistema di editing dello Spectrum o al vi di Unix entrambi basati sulla modifica di linea).

Il set di istruzioni era estremamente ridotto: assolutamente assente il supporto per la gestione dei chip grafici e sonori, per non parlare del possibilità di debug o della numerazione automatica delle linee. Il costrutto IF era privo della condizione ELSE e questo, naturalmente, non dava la possibilità di programmare in maniera strutturata e nè per blocchi di codice (come ad esempio in Pascal utilizzando la coppia di token Begin … End), ma costringeva all’uso massiccio dell’istruzione GOTO. Assenti ovviamente istruzioni condizionali di ciclo, quali DO … LOOP …, REPEAT … UNTIL o WHILE … WEND.

Esisteva un rudimentale supporto alla “creazione” di subroutine (chiamarle “procedure” sarebbe eccessivo) mediante l’ausilio dell’istruzione GOSUB che consentiva di effettuare salti incondizionati dell’esecuzione del programma a determinate linee di codice per poi effettuare il “ritorno” al punto di origine una volta raggiunta la prima linea contenente l’istruzione RETURN.

Alle variabili si potevano assegnare nomi di qualunque lunghezza, ma l’interprete ne avrebbe comunque considerato al massimo solo i primi due caratteri, per cui era necessario fare attenzione nella definizione degli stessi per evitare fastidiose sovrapposizioni e refusi. Era consuetudine identificare le variabili stringa col suffisso $, mentre quelle intere con il %: ad ogni modo tutte le operazioni venivano sempre eseguite in virgola mobile, per cui se si utilizzavano valori interi all’interno di espressioni numeriche, questi dovevano di volta in volta essere convertiti nel primo formato e poi di nuovo nel formato intero, rallentando la fase di calcolo. Per questo motivo era buona norma utilizzare sempre variabili all’interno delle routine di calcolo anche per la valorizzazione di costanti: questo velocizzava molto l’esecuzione del codice.

I token (overo le istruzioni del linguaggio) potevano essere inseriti in forma abbreviata durante la fase di digitazione, utilizzando solo la prima (o le prime due) lettera degli stessi seguti dalla seconda (o la terza) “shiftata”, ovvero ottenuta premendo la lettera necessaria assieme al tasto SHIFT presente sulla tastiera. All’inserimento della riga in memoria con la pressione del tasto RETURN, l’editor automaticamente associava i token corretti alle abbreviazioni inserite.

Dato che il linguaggio era interpretato, naturalmente era lentissimo: rispetto al linguaggio macchina del 6502 (che comunque non era un campione di prestazioni nemmeno all’epoca) la differenza era di circa 120~150 a 1.

Questo spesso costringeva i programmatori a ricorrere all’ausilio di routine in codice macchina per velocizzare l’esecuzione di alcune operazioni: per questo motivo il set base di istruzioni del Basic Microsoft era stato arricchito da funzioni quali PEEK e POKE per rispettivamente leggere e scrivere in determinate locazioni di memoria della macchina, DATA per memorizzare elenchi di informazioni, di tipo numerico o stringa e SYS per avviare l’esecuzione di codice macchina a partire da un determinato indirizzo di memoria (i nostalgici del prodotto non possono assolutamente dimenticare il comando SYS 64738, con cui era possibile effettuare il reset a caldo del sistema).

L’istruzione POKE veniva anche utilizzata per poter utilizzare il chip grafico (VIC-II) o sonoro (SID-6581)in dotazione al C64, in maniera a volte semplice ma altre decisamente complessa.

Ad esempio con l’istruzione POKE 53280,x si poteva cambiare il colore del bordo dello schermo, mentre con POKE 53281,y il colore dello sfondo (dove x ed y sono numeri compresi tra 0 e 15 e rappresentavano i 16 colori disponibili).

Il posizionamento dei testi nell’area di schermo veniva effettuato mediante l’utilizzo di caratteri ASCIIW speciali (corrispondenti a sequenze di codici escape) all’interno delle stringhe, spostando “fisicamente” il cursore nella locazione desiderata con opportune combinazioni di movimenti alto, basso, destra, sinistra. Allo stesso modo si poteva pulire lo schermo o cambiare il colore di primo piano. Questi caratteri speciali venivano rappresentati all’interno delle stringhe mediante dei caratteri semigrafici in negativo, contribuendo ancora di più a rendere di difficile lettura il codice prodotto.

L’evoluzione

Il Commodore Basic venne successivamente arricchito con nuove funzionalità e rilasciato in versioni differenti a seconda delle macchine sulla quale venne successivamente fornito: la V.2.0 convisse con la V.4.0 (tipica dei sistemi professionali PET/CBM) per poi passare alla V.3.5 (Commodore 16 e Commodore Plus/4 e “morire” con la “potentissima” V.7.0 del Commodore 128.

Un’ulteriore versione, la V.10.0 avrebbe dovuto equipaggiare il Commodore 65W, evoluzione del C64, un prototipo mai giunto alla distribuzione commerciale (ma questa è un’altra storia).

Curiosità

L’obiettiva scarsità di funzionalità presenti nel Commodore Basic V.2.0, favorì il proliferare di software accessori che “potenziavano” il basic esistente con nuovi comandi e costrutti. Il più famoso fra questi è stato senz’altro il Simons’ Basic, così chiamato dal suo creatore David Simons, un giovane programmatore inglese di soli 16 anni: il software aggiungeva ben 114 comandi sottraendo al tempo stesso però 8 kbyte dalla memoria di sistema, aggiudicandosi ai tempi, il titolo di linguaggio di programmazione più completo per il C64 (anche se ancora più lento del Basic originale)

Non tutti sanno che, nel floppy disk in dotazione al disk drive Commodore 1541 erano contenute altre versioni del Commodore Basic che potevano essere caricate nel C64 per aggiornare l’interprete esistente (ovviamente non in ROM ma in RAMW): erano presenti sicuramente sia la V.4.0 che la V.4.+.

Concludo ricordando che, ai tempi, la scarsa dotazione di costrutti dedicati alla programmazione strutturata aveva attribuito all’allora programmazione in Basic, l’appellativo di spaghetti code o spaghetti programming.

Tutti gli screenshot presenti in queste pagine sono stati realizzati utilizzando l’emulatore VICE (disponibile anche in versione WinVICE per sistemi Windows a 32 bit, oltre che per quasi tutte le altre piattaforme esistenti): il software emula oltre al C64 anche il PET, il VIC20, il Plus/4, il CBM2 ed il C128. Così, tutti i nostalgici possono riabbracciare, anche se solo virtualmente,  i loro vecchi sistemi …

Ancora nessun commento, esprimi la tua opinione!


Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Commento *

Name *
Email *
Sito web

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.