Quando il progetto dell'Apple I era quasi completato, Steve Wozniak iniziò a pensare a un linguaggio di programmazione che potesse rendere il computer veramente utile.
Scrivere l’interprete BASIC si dimostrò il più lungo e più complicato progetto che io abbia mai realizzato per la Apple. All’epoca mi fece veramente tribolare.
Paragonato al FORTRAN, era un linguaggio più semplice e leggero. Pensavo che nessuno lo avrebbe mai usato, per esempio, per creare quel tipo di programmi sofisticati che usano gli scienziati e gli ingegneri. Potevo a stento immaginare come sarebbero andate le cose.
Grazie al libro di cui ho parlato, 101 Basic Computer Games, si potevano semplicemente digitare i programmi ed ottenere quei giochi . Stavo scrivendo un interprete BASIC che girava sull’Apple I, che era basato su un microprocessore MOS 6502. Se l’avessi scritto molto velocemente, se ci avessi lavorato giorno e notte e avessi messo insieme un qualcosa di funzionante nel giro di un paio di mesi — beh, allora pensavo che sarei diventato quasi famoso.
La gente avrebbe detto che Steve Wozniak aveva scritto il primo BASIC per il 6502, proprio come fece Bill Gates con il BASIC per l’Altair. Avrei fatto un’impresa, e ciò mi era di grande stimolo.
Non avevo nessuna esperienza nella scrittura di linguaggi di programmazione. Durante i miei primi anni al college, Allen Baum mi fece avere delle pagine di alcuni libri della Xerox che aveva preso al MIT, dove lui studiava. In quel modo già imparai qualcosina.
Appresi che i linguaggi di programmazione avevano una sintassi grammaticale proprio come qualsiasi lingua, e sapevo come erano organizzati. Ciò che non sapevo era che gli interpreti BASIC che esistevano per i differenti computer potevano avere sostanziali differenze. Avevo dato per scontato che fossero tutti uguali, compreso quello di Bill Gates.
Così, tornato al lavoro, presi alcuni manuali dell’HP BASIC e li studiai. Cominciai a buttare giù su carta una tabella della sintassi che descriveva la grammatica del linguaggio e che definiva quali comandi poteva inserire il programmatore. Per esempio, se dovessimo fare una tabella della sintassi per la nostra lingua, dovremmo spiegare che il pronome personale â€egli†è solitamente usato come soggetto nelle frasi, del tipo â€Egli tira la pallaâ€. Ci sarà una lista di tutti i possibili verbi, dove â€tirare†sarà uno di questi. E dovranno essere specificati tutti i possibili oggetti, tra cui â€pallaâ€. Nella lingua parlata ci sono milioni di combinazioni fra soggetto, verbo e oggetto, ma in un linguaggio come il BASIC è possibile limitarle ad un certo numero.
Poi abbiamo bisogno di alcune regole. Supponiamo di scrivere l’espressione 5 + 3 x 7. Se viene scritta senza parantesi, chiunque abbia un minimo di dimestichezza con la matematica saprebbe che le moltiplicazioni e le divisioni vanno eseguite prima, le addizioni e le sottrazioni dopo. Così l’espressione si ridurrebbe a 5 + 21. Questa regola, che definisce quali operazioni hanno la precedenza, è un esempio di ciò che bisogna indicare nella tabella della sintassi.
Non avevo idea di come altri avessero approcciato il problema dei linguaggi di programmazione, ma mi sembrava ovvio che ci fosse bisogno di uno stack per memorizzare i dati numerici, di un altro stack per i verbi (che include le possibili azioni come moltiplicazioni o addizioni), e una lista di priorità per ogni singolo comando che veniva digitato. Impiegai circa quattro mesi per realizzare una versione funzionante del mio interprete BASIC.
Alla fine rinunciai alla possibilità di inserire i numeri decimali, la così detta â€aritmetica in virgola mobileâ€, e decisi di gestire tutto con i numeri interi.
Perciò, questo primo linguaggio BASIC per computer Apple è conosciuto come "integer BASIC", perchè può operare solo con i numeri interi.
Pensavo così di risparmiare almeno un mese di lavoro. Feci quella scelta perchè i videogiochi e le simulazioni — le due principali cose per cui stavo scrivendo il BASIC — si programmavano usando solo numeri interi. La maggior parte dei programmi più importanti che io ricordi, compresi quelli sviluppati da HP nel laboratorio in Colorado, usavano solo gli interi. Così progettai il mio BASIC per operare solo con numeri compresi fra -32.768 e +32.767.
Scrissi l’intero programma su carta - con le istruzioni in linguaggio macchina a sinistra e l’equivalente in esadecimale a destra. Ho dovuto fare tutto questo lavoro a mano perchè non potevo permettermi un assembler (cioè utilizzare un minicomputer per generare il codice necessario con un emulatore del MOS 6502), che sarebbe stato il modo tipico di operare.
Seguii lo stesso metodo che avevo adottato quando scrissi il piccolo programma per la gestione del monitor. Per un momento pensai: "Se sono capace di scrivere il codice del programma da solo, a mano, ci sarà qualcuno che avrà bisogno di un computer che lo faccia per lui?"
Ad ogni modo, ancora conservo quel quaderno dove scrissi il mio interprete BASIC. Non sono sicuro, ma scommetto che ora meriterebbe il posto in un museo! Il risultato finale fu che quando il mio BASIC per il 6502 era caricato nel computer, ero in grado di digitare dei piccoli programmi con la tastiera. Ad esempio potevo far chiedere al computer â€Come ti chiami?†E una volta che l’utente aveva digitato il suo nome, potevo animare la scritta e farla volteggiare per tutto lo schermo. Oggi può sembrare una bazzecola, ma allora nessuno aveva mai visto un piccolo computer in grado di eseguire i programmi che avevi appena digitato con una tastiera standard.
Anche con macchine come l’Altair era molto costoso dover aggiungere una scheda di espansione e collegare con un grosso cavo un’enorme e sgraziata teletype per avere una tastiera su cui digitare. Qualche volta, dopo la conclusione della riunione all’Homebrew, mostrai il mio computer che faceva girare il BASIC e molta gente ne rimase impressionata. Ma c’era un problema. L’Apple I non aveva una memoria permanente — nessun hard disk, floppy o lettore CD come siamo abituati oggi. Stiamo parlando di molto tempo fa. Così ogni volta che volevo caricare il BASIC, dovevo accendere il computer e letteralmente ridigitare tutto l’intero programma copiandolo dal quaderno.
Era un programma di 4.000 byte e impiegavo quasi quaranta minuti a riscriverlo tutto ogni volta. E quando spegnevo il computer, poichè non c’era memoria permanente oltre alla RAM, l’intero programma si perdeva. Alla fine mi ritrovai a scegliere se lasciare il computer perennemente acceso — il che non lo rendeva facilmente trasportabile — o escogitare qualche soluzione.
Le Basi sul BASIC
Il linguaggio di programmazione BASIC, quello che vi ho raccontato che mi fece tanto sudare, fu originariamente concepito per essere un linguaggio di facile apprendimento. Creato nel 1963 dai professori del Dartmouth College, John Kemeny e Thomas Kurtz, l’acronimo BASIC sta per Beginner's All-purpose Symbolic Instruction Code. Senza dubbio il BASIC è un linguaggio molto più semplice da imparare rispeto al Pascal o al C. à più leggero ma anche più lento. Fatto sta che funzionava perfettamente sul mio primo computer Apple.
***
Mi decisi così a sviluppare un’interfaccia per collegare un registratore a cassette all’Apple I. A parte cambiare il tipo di RAM da statica a dinamica, non fu necessario effettuare altri cambiamenti al mio progetto originale che avevo mostrato per la prima volta all’Homebrew nella primavera del 1975. Misi a punto un circuito che all’accensione del computer caricava automaticamente in memoria il BASIC che era contenuto in una comune cassetta, così il computer era immediatamente pronto all’uso.
Nel futuro Apple II, il BASIC era precaricato in ROM in modo da essere subito disponibile appena acceso il computer.
In questo video viene mostrato come il BASIC viene caricato da cassetta su un vero, rarissimo Apple I perfettamente funzionante, nella tipica configurazione dell'epoca:
Solo quando avevo terminato di scrivere il BASIC e di renderlo facilmente caricabile da una cassetta, scoprii qualcosa di terribile. Avevo commesso un errore.
Avevo pensato che tutte le versioni del BASIC fossero più o meno identiche, e che tutti i programmi contenuti nel libro 101 games in BASIC, una volta digitati, avessero automaticamente funzionato. Sembrava proprio che non fosse così. Scoprii che il tipo di BASIC che avevo scritto — come pure l’HP BASIC da cui ero partito — era totalmente differente dal BASIC Microsoft di Bill Gates che era invece basato sul BASIC della DEC. Che disdetta! Significava che per far funzionare quei giochi sull’Apple I era necessario fare qualche modifica ai programmi.
C’era un gioco molto popolare in BASIC, chiamato Star Trek, che riuscii ad adattare con qualche piccolo cambiamento, e girava piuttosto bene.
Continua con la storia dell'Apple II.