18 febbraio 2008  16

Il Commodore Basic v2: il linguaggio di programmazione del computer più venduto al mondo

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 BasicW. Nello specifico, descriveremo proprio la versione fornita con il computer più venduto di tutti i tempi, ovvero il Commodore 64W.

Il Commodore Basic era un dialetto di diretta derivazione del Microsoft BasicW 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 PETW, lo stesso core di questo linguaggio veniva utilizzato anche da molti altri computer basati sullo stesso processore (ad esempio l'allora diffusissimo Apple IIW).

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).

c64-screen-1
La schermata di benvenuto all'accensione del C64

Il linguaggio era naturalmente interpretato. Il suo punto di forza era che l'interprete era presente direttamente in ROMW 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 SpectrumW o al vi di UnixW 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 PascalW 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.

c64-screen-3
Fig.2 - Un esempio di codice

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-IIW) o sonoro (SID-6581W)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).

c64-screen-2

Fig.3 - Un esempio di uso di istruzioni POKE per modificare i colori dello schermo

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.

c64-screen-4
Fig.4 - Output del programma visibile in Fig.2

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 16W e Commodore Plus/4W e "morire" con la "potentissima" V.7.0 del Commodore 128W.

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 1541W 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 codeW 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 ...

Esprimi il tuo giudizio

Commenti (16) -

Alex2000
Alex2000
18 feb 2008 alle 11:25  01
sono commosso....
Hai risvegliato in me nottate di fronte a codici di migliaia di righe a seguire debug di programmi che avrebbero dovuto fare cose ma che in realtà facevano altro.
luigibio
luigibio
18 feb 2008 alle 14:25  02
pensa che all'università ho studiato pascal e fortran, che oggi possono sembrare preistoria, ma in fondo in fondo continuavo a ragionare col v2.0 Wink
Cristiano
Cristiano
18 feb 2008 alle 22:55  03
@ Alex2000:
Ti confesso che io stesso durante la stesura dell'articolo ho provato delle emozioni fortissime Smile
E sono le stesse che provo quando tutt'ora mi trovo di fronte alla schermata di avvio del C64 (anche se, ahimè, emulata dal VICE)

@ luigibio:
Il Fortran era molto più vicino al nostro "V2.0" di quanto allora potessimo immaginare. Ma il Pascal ci ha sicuramento aperto le menti Wink
notoriousxl
notoriousxl
18 feb 2008 alle 23:26  04
Così, tutti i nostalgici possono riabbracciare, anche se solo virtualmente,  i loro vecchi sistemi ...
C'è ancora chi riesce ad accendere l'originale, premurosamente conservato e collegato ad una tv a colori (eh, il progresso, al tempo giocavo Tong con un monitor Philips... in verde e nero!) ;)

Comunque vi invidio un po', voi che avete programmato col C64 =) All'epoca ero troppo piccolo per interessarmi alla programmazione... Frown
notoriousxl
notoriousxl
18 feb 2008 alle 23:27  05
OT: le lettere accentate del titolo hanno problemi, al momento leggo ugrave; ;)
Alex2000
Alex2000
18 feb 2008 alle 23:38  06
notoriousxl ha scritto:
...C'è ancora chi riesce ad accendere l'originale, premurosamente conservato e collegato ad una tv a colori (eh, il progresso, al tempo giocavo  con un monitor Philips... in verde e nero!)

Il mio è ancora funzionante e collegato alla tv. Lo accendo veramente poco. Nel tempo si è perso il monitor commodore originale a pochi ma buoni colori e la stampante ad aghi. Ho ancora funzionante il mitico lettore floppy 1541.
Cristiano
Cristiano
19 feb 2008 alle 00:28  07
@ Alex2000:
Anche Luigi (fonte forum IB) ha ancora il C64.
Vi invidio moltissimo (forse vi odio anche un pò Smile )
Io avevo il primissimo modello, quello color crema. Poi acquistai, il 1541 (quello più "moderno" con la levetta e non con lo sportellino), la stampante Commodore ad aghi con alimentazione a modulo continuo (non ricordo il codice) e l'Iper-Disk, una modifica hardware che faceva "letteralmente" volare il lentissimo drive...
Ora ho solo il VICE :-(

@ notoriousxl:
Non noto problemi nel titolo nè con IE 7, nè con Opera 9.21 e nè con Firefox 2.0.0.12.
Se non riconrdo male usi MacOS: potrebbe essere un problema della localizzazione di Opera per il sistema operativo Apple ...
Ad ogni modo lo slug non contiene accenti Wink
Sergio
Sergio
19 feb 2008 alle 10:37  08
Quanta nostalgia!

Anche io sono stato traviato in giovanissima età (andavo alle elementari) da questa fantastica macchina sulla quale ho scritto i miei primi programmini.

Anch'io ho un C64 funzionante oramai scollegato da anni e conservato gelosamente.

Oltre all'emulatore software segnalo l'esistenza di un emulatore hardware contenuto in un Joystick che, se non sbaglio, opportunamente modificato può anche essere collegato ad un lettore di dischi o di cassette.
notoriousxl
notoriousxl
19 feb 2008 alle 13:39  09
Cristiano ha scritto:
Se non riconrdo male usi MacOS: potrebbe essere un problema della localizzazione di Opera per il sistema operativo Apple
Non è solo un problema di Opera, ma lo riscontro su tutti i browser.

Ho riavviato anche su Linux, e ottengo lo stesso problema; ecco lo screenshot: Smile

img90.imageshack.us/.../...aaccentititlecrira9.jpg

È un problema presente sia nel tag title che su "Ultimi articoli / Commenti" (mentre  gli accenti sono visualizzati correttamente all'interno del tag H1).

Non dovrebbe essere un problema degli OS che ho installati (uso il condizionale, in quanto l'architettura che ho, il powerpc, è un po' "sfigata" a volte); ho fatto la prova sul mio blog, e non ho gli stessi problemi:

techlog.netsons.org/prova-accenti-aeiouaeiou-320/

PS: scusa se non rendo cliccabili i link, ma ho notato che non usavi il nofollow, e le pagine che linkavo non erano certo a tema con questa! Wink
Cristiano
Cristiano
19 feb 2008 alle 15:08  10
@ notoriousxl:
In un primo momento pensavo ti riferissi al titolo del post e non al tag <title> della sezione <head>.
Hai perfettamente ragione: il problema esiste e ne sono a conoscenza. E' un'anomalia dovuta a dei piccoli bug di mancata decodifica del testo con la funzione HTMLDecode.
Si può facilmente risolvere ma, purtroppo c'è una piccola controindicazione ...
Ad ogni modo ti ringrazio per la tempestiva segnalazione ! Wink

Per quanto riguarda il NOFOLLOW, tutti i link inseriti nei commenti hanno questa proprietà impostata automaticamente. Solo il link al sito dell'autore non ce l'ha (ma questo per mia scelta).

notoriousxl
notoriousxl
19 feb 2008 alle 15:38  11
Cristiano ha scritto:
In un primo momento pensavo ti riferissi al titolo del post e non al tag <title>
Sì, infatti mi sono espresso male (colpa della solita mia fretta) Tong
Cristiano ha scritto:
Per quanto riguarda il NOFOLLOW, tutti i link inseriti nei commenti hanno questa proprietà impostata automaticamente
Precauzione inutile la mia, allora; scusa se ti ho fatto fare copia / incolla sulla barra degli indirizzi! Wink
Cristiano
Cristiano
19 feb 2008 alle 23:02  12
@ Sergio:
Sicuramente ti riferisci al DTV: non è un emulatore ma un vero è proprio C64 reingegnerizzato in pochissimi integrati. Era dotato anche di un certo numero di giochi direttamente "on board".
In sostanza una console per videogiochi a 8 bit.
Ancora più recentemente è stato "travestito" da clone di Playstation I (con livrea grigio chiara), carrozzato con un maggiore numero di giochi in rom e dotato di coppia di joypad e pistola a infrarossi. Lo si trova un pò ovunque ad un presso stracciato Wink

Redemption
Redemption
24 feb 2008 alle 19:31  13
Mi sono pentito amaramente di averlo dato via il c64... quanti ricordi mi ha evocato questo articolo Laughing
gianni
gianni
05 apr 2008 alle 08:55  14
Il mio primo approccio con il basic fu nel lontano 1983/1984 quando acquistai un vic20. Lo pagai oltre lire 200.000 (500-600 euro d'oggi), e causa lìelevata spesa non riuscii ad acquistarlo con l'unità tape. Tramite un libro con listati di giochi in basic per vic20 incominciai ad apprendere il linguaggio basic, ma la cosa più rilevante di ciò e che causa l'assenza del registratore a cassette, dopo che caricavo per ore ed ore un programma per farlo girare e fare diverse prove o modifiche, spegnendo il vic perdevo tutto, e quindi ogni volta dovevo ricominciare daccapo. Forse questo mi ha permesso di familiarizzare prima col linguaggio. In seguito acquistai un dispositivo per usare un comune registratore a cassette, ma solo per poco, in quanto arrivò il c64 e fu un'altra storia.
Cristiano
Cristiano
05 apr 2008 alle 11:56  15
@ gianni:
Più o meno lo stesso percorso che ho seguito anch'i0, con la differenza che mi regalarono dierttamente il C64 compreso di registratore originale a cassette Smile
em
em
03 dic 2008 alle 17:00  16
Io facevo parte della famiglia Spectrum...

Aggiungi Commento

biucitecode
  • Commento
  • Anteprima
Loading


| |   |  

Codice QR

Codice QR - cristianofino.net

Ultimi Commenti