Dopo la prima riunione dell’Homebrew Club, l’intera visione del personal computer era già sbocciata nella mia mente, tutto fu improvvisamente chiaro.
Quella stessa notte iniziai a buttare giù su carta il progetto di quel computer che sarebbe diventato l’Apple I.
In retrospettiva, si trattò di un progetto veloce, impiegai solo poche ore a definire l’architettura di base, mentre ci vollero alcuni mesi per procurarmi tutti i componenti e studiare le loro specifiche tecniche.
Portai avanti questo progetto per diversi motivi: una ragione era di dimostrare alle persone dell’Homebrew che era possibile costruire un computer dal prezzo abbordabile, un vero computer programmabile, più economico è più potente dell’Altair, usando solo pochi chip.
Sotto questo aspetto, era un modo per dimostrare il mio talento nella progettazione, adottando soluzioni brillanti, efficienti ed economiche. Per questo scopo, intendevo presentare una soluzione con il minor numero possibile di componenti.
Un altro motivo che mi spinse a progettare l’Apple I era il fatto che volevo diffonderlo gratuitamente. Alla riunione successiva a cui partecipai, feci circolare lo schema di funzionamento del mio computer. Quello era il mio modo di socializzare e ricevere apprezzamento.
Dovevo costruire qualcosa e mostrarlo alla gente. Volevo che gli ingegneri dell’Homebrew costruissero da soli i propri computer, piuttosto che limitarsi ad assemblare un ammasso di chip sopravvalutati come l’Altair. Volevo che capissero che l’Altair, con tutti i sui complicati interruttori e lucine, non andava considerato come un modello da cui dipendere.
Volevo diffondere gratuitamente il progetto dell’Apple I
Ogni computer prodotto fino ad allora somigliava al cockpit di un aeroplano, come nel caso del Cream Soda Computer, dovevi armeggiare con gli interruttori e interpretare i risultati in base ai led accesi o spenti. C’era invece la possibilità di costruire un qualcosa che funzionasse collegato alla TV e che facesse uso di una vera tastiera, come una macchina da scrivere. Quello era il computer che avevo in mente.
Come dicevo, avevo già costruito un terminale che permetteva l’invio di testo ad un computer remoto, e quel computer rimandava indietro i caratteri che venivano visualizzati sulla TV. Decisi semplicemente di aggiungere il microprocessore e la memoria nello stesso case del terminale che avevo già costruito.
Perchè non far svolgere a questo piccolo microprocessore ospitato lì dentro le stesse funzioni a cui era deputato il computer remoto? Dal momento che già avevo a disposizione una tastiera, non avevo bisogno di un pannello frontale. Si potevano digitare i comandi e vederli apparire direttamente a schermo. Era tutto lì, il computer, lo schermo e la tastiera. Dotare il mio terminare di un microprocessore poteva sembrare un’idea bizzarra ma io lo consideravo solo come il passo logico successivo.
Il primo Apple I che progettai, anche se non si chiamava ancora Apple nè in qualche altro modo, prese forma semplicemente facendo lavorare insieme queste componenti.
E ora lasciatemi dire una cosa: prima dell’Apple I, tutti i computer avevano un pannello frontale difficile da leggere ed erano privi di schermo e tastiera. Dopo l’Apple I, tutti i computer adottarono questa innovazione.
Il progetto dell'Apple I
Vi racconto brevemente come è nato l’Apple I: per prima cosa schizzai su carta lo schema di funzionamento, proprio come facevo alla scuola superiore o al college quando progettavo minicomputer, solo che quelli non vennero mai costruiti. La prima cosa da decidere era quale CPU usare.
Avevo scoperto che la CPU dell’Altair — l’Intel 8080 — costava quasi quanto il mio stipendio di un mese. Ad ogni modo non era neanche possibile per una persona comune acquistarne una o una piccola quantità . Dovevi essere un’azienda e fornire tutte le credenziali per ordinare quel microprocessore.
Fortunatamente, avevo messo al corrente i miei colleghi all’HP dell’Homebrew Club e di quello che stavo progettando, e Myron Tuttle ebbe un’idea. Mi disse che i dipendenti HP avevano diritto a degli sconti da Motorola e che per circa $40 avrei potuto comprare un microprocessore Motorola 6800 e un paio di altri chip. Questo si che è economico, pensai.
La decisione la presi al volo, ora sapevo esattamente quale microprocessore usare. In quella fase iniziale arrivai anche a un’importante considerazione — che i nostri calcolatori HP erano di fatto dei veri computer. Lo erano a tutti gli effetti, come l’Altair, il Cream Soda Computer o qualsiasi altro.
Voglio dire, un calcolatore ha un processore e una memoria. Ma ha anche qualcosa in più, una caratteristica che i computer dell’epoca non avevano. Appena acceso, un calcolatore è pronto per funzionare: un programma si carica automaticamente in modo che possa reagire adeguatamente alla pressione di un qualsiasi tasto. Rimane in attesa che l’utente gli dica cosa fare. Ipotizziamo di premere il tasto â€5â€. Il processore nel calcolatore deve poter riconoscere quale tasto è stato premuto e dice, è un 1? Un 2? Un 3? 4... è un 5. Il programma nel calcolatore che assolve a questo compito è contenuto in tre piccoli chip ROM (read-only memory) che mantengono quelle informazioni anche quando il calcolatore viene spento.
Così pensai anch’io di usare un chip ROM per memorizzarci lo stesso tipo di software, un programma che avrebbe reso il computer immediatamente operativo, appena acceso. (Con un Altair e anche con il mio Cream Soda Computer bisognava perdere circa mezz’ora di tempo a smanettare con gli interruttori prima di iniziare a programmare).
Sull’Apple I volevo che caricare in memoria un programma fosse un’operazione molto più agevole. Per questo scopo avrei dovuto scrivere un piccolo programma che si sarebbe caricato automaticamente all’accensione del computer. Quel programma avrebbe istruito il computer su come leggere la tastiera. Avrebbe permesso di inserire i dati in memoria, di leggere i dati in memoria, di far eseguire al processore un programma che si trovava ad un preciso indirizzo di memoria. Se con l’Altair si impiegava circa mezz’ora a caricare un programma, ci sarebbe voluto meno di un minuto usando la tastiera dell’Apple I.
Cos’è la ROM?
Read-only memory (ROM) è un termine che ricorre spesso in questa storia. Un chip ROM viene programmato una sola volta e mantiene le sue informazioni anche quando viene tolta l’alimentazione. Di solito contiene delle informazioni fondamentali per il funzionamento di un computer, ad esempio cosa caricare quando viene acceso, cosa visualizzare sullo schermo, come riconoscere i dispositivi collegati come tastiere, stampanti e monitor.
Nel progettare l’Apple I, ripresi l’idea dai calcolatori HP, che usavano questa tecnologia, e decisi di utilizzare le ROM. Così avrei potuto scrivere un programma che monitorava quali tasti venivano premuti, e tutte le altre operazioni. Se avessi voluto vedere il contenuto della memoria di un Altair, avrei impiegato quasi mezz’ora ad interpretare sfilze di led. Con un Apple I invece, sarebbe bastato un secondo perchè bastava dare uno sguardo allo schermo della TV.
Nel progettare l’Apple I mi ispirai ai calcolatori HP
Chiamai il mio piccolo programma â€monitor†perchè la sua funzione principale era proprio quella di monitorare costantemente quali tasti venivano premuti sulla tastiera. Questa era un’azione fondamentale poichè la finalità del mio computer era quella di scrivere agevolmente dei programmi.
In particolare, avevo pensato di utilizzare il FORTRAN, un linguaggio all’epoca molto popolare in ambito scientifico. L’idea era di usare il programmino â€monitor†contenuto nella ROM e sbarazzarsi del pannello frontale con i led e gli interruttori.
Si potevano inserire i dati con una vera tastiera e ottenere direttamente i risultati sullo schermo. Da questo punto in avanti, ogni computer sembrava scontato avesse una tastiera e uno schermo. La mia idea fu davvero grande.
Di solito, quando progettavo qualcosa, dedicavo molto tempo alla fase di studio prima di passare alla realizzazione. Ora che vedevo che il mio computer poteva diventare realtà , iniziai a raccogliere tutte le informazioni disponibili sui vari chip e quei componenti che avrei potuto usare nel mio progetto. Arrivavo al lavoro il mattino presto, verso le 6:30, e lì da solo sfogliavo velocemente riviste di ingegneria e manuali dei chip.
Studiavo le specifiche e i diagrammi dei chip che mi interessavano, come il Motorola 6800 da $40 che Myron mi aveva segnalato. Nel frattempo il progetto prendeva forma nella mia mente. La cpu Motorola 6800 aveva un connettore a quaranta pin e dovevo conoscere esattamente come ognuno di questi funzionava.
Poichè potevo lavorarci solo nel tempo libero, questo era un processo lento che avrebbe richiesto molto tempo. Passavano le settimane e non avevo ancora concretizzato nulla. Finalmente una notte disegnai il progetto. Prima di allora lo avevo solo abbozzato e schizzato velocemente. Ma quella notte lo realizzai accuratamente sul mio tavolo da disegno alla Hewlett-Packard.
Il microprocessore MOS Technologies 6502
C'era ancora un piccolo passo da compiere per avere un computer completamente assemblato: mi servivano tutti i componenti. Alcuni articoli su un nuovo e interessante microprocessore catturarono la mia intenzione. Parlavano del 6502 di MOS Technologies, un'azienda della Pennsylvania, che stava per essere presentato al "Western Electronic Show and Convention" (WESCON), una fiera che si sarebbe tenuta a San Francisco.
Ciò significava che avrei potuto usare questa nuova cpu senza apportare alcuna modifica alla scheda madre. La seconda buona notizia era che avrei potuto acquistarlo direttamente al WESCON allo stand della MOS Technologies.
Visto che era così facile procurarselo, decisi di farne il microprocessore per l'Apple I. Ma l'aspetto migliore era il prezzo. Il MOS 6502 costava appena $20, la metà di quanto mi sarebbe costato il Motorola a prezzo scontato.
Il WESCON si tenne dal 16 al 18 Giugno 1975 nel famoso Cow Palace di San Francisco. Insieme ad alcuni membri dell'Homebrew mi recai in macchina fin là e mi misi in fila di fronte allo stand della MOS Technologies, dove Chuck Peddle in persona stava presentando il suo chip. Ne acquistai una manciata a $20 l'uno e per altri $5 presi il manuale.
Ora avevo tutto ciò che mi serviva per iniziare a costruire il computer. Un paio di giorni dopo, durante una riunione dell'Homebrew Computer Club, alcuni mostrarono con grande entusiasmo i microprocessori 6502 che avevano acquistato. Sempre più persone nel nostro club possedevano un microprocessore. Non avevo idea di cosa gli altri avrebbero fatto con i loro 6502, di certo sapevo come avrei utilizzato il mio.
Per costruire il computer dovevo mettere insieme i vari componenti. Feci questo lavoro di assemblaggio nella mia postazione di lavoro all'HP. Quasi tutti i giorni, tornavo a casa dopo il lavoro, mangiavo al volo qualcosa davanti alla TV o mi preparavo un piatto di spaghetti, poi, in cinque minuti di macchina, tornavo all'HP dove riprendevo a lavorare al mio progetto fino a tarda notte. Preferivo lavorare lì perchè era l'ambiente adatto e avevo a disposizione tutti gli strumenti che mi servivano ogni volta che avevo la necessità di testare la scheda o fare qualche saldatura.
Seguivo scrupolosamente il progetto che avevo disegnato, dove avevo stabilito con precisione la posizione che avrebbe occupato ogni singolo chip sulla scheda. Organizzando le parti in modo razionale, avrei usato cavi di collegamento della lunghezza necessaria, più corta possibile, e mantenuto un design ordinato. Riciclai la maggior parte dei chip dal mio video terminale, quello che avevo già costruito per connettermi ad ARPANET.
In aggiunta, avevo il microprocessore, un alloggiamento per la RAM e un altro paio di chip che gestivano l'input/output e facevano da interfaccia per le periferiche, e che permettevano alla cpu 6502 di funzionare collegato al mio terminale.
Usavo sempre i socket per tutti i miei chip perchè li trovavo utilissimi. Questa abitudine risale ai tempi del mio lavoro all'Electroglas, quando ero costretto a rimuovere i chip difettosi che, essendo saldati, non erano facilmente sostituibili. Grazie ai socket invece i chip si possono rimuovere e sostituire velocemente e senza penare.
Avevo anche due socket destinati ad ospitare chip PROM (Programmable Read Only Memory) che avevano lo scopo di contenere piccoli programmi e dati, con la caratteristica di mantenere quelle informazioni anche quando erano privi di alimentazione elettrica. Nel laboratorio avevo a disposizione alcuni di questi chip PROM che potevano contenere 256 byte di dati, appena sufficienti per piccolissimi programmi. (Al giorno d'oggi molti programmi sono un milione di volte più grandi.)
Per darvi un'idea di quanto piccola sia questa quantità di memoria, è così limitata che in un moderno elaboratore di testi non basta neache a contenere una singola frase.
Decisi di usare questi chip per contenere il programmino "monitor" che avrebbe permesso al mio computer di usare una tastiera al posto del pannello frontale.
Il programma monitor residente in ROM
Per collegare tutto e fare le saldature necessarie impiegai solo una notte. Le notti successive le impiegai a scrivere su carta il programma monitor, cercando di condensarlo nei 256 byte che avevo a disposizione. Me la cavavo bene nello scrivere programmi efficienti, con il minor numero possibile di istruzioni, ma quella fu una vera sfida anche per me.
Era il primo programma che avessi mai scritto per il microprocessore 6502. Lo scrissi su carta, che non era il modo usuale di procedere. Normalmente un programma del genere si scriveva su un terminale connesso a pagamento in time sharing a qualche grosso e costoso mainframe. Quel computer elaborava il tuo programma e restituiva una serie di 0 e di 1 che il tuo microprocessore sarebbe stato in grado di comprendere. Questa sequenza di bit poteva essere caricata nella RAM o su una PROM e poteva essere eseguita come un programma. Il problema era che non potevo permettermi di pagare l'uso di un computer in time sharing.
Fortunatamente, il manuale del 6502 che avevo comprato, descriveva come venivano generati gli 0 e gli 1 per ogni istruzione. MOS Technologies forniva anche una scheda in formato tascabile che includeva tutte le sequenze in codice binario corrispondenti ad ognuna delle istruzioni supportate dalla sua cpu.
Così scrissi il mio programma sul lato sinistro di una pagina, in linguaggio macchina. Per esempio, avrei potuto scrivere "LDA #44", che significa carica i dati corrispondenti alla locazione di memoria 44 (in esadecimale) nel registro A del microprocessore. Sul lato destro della pagina, traducevo quell'istruzione in esadecimale e quindi in binario grazie alla documentazione di MOS Technologies.
Per esempio quell'istruzione diventava A9 44, una coppia di byte che il computer poteva interpretare una volta tradotti in binario: 10101001 01000100. Per scrivere il programma in questo modo impiegai due o tre fogli di carta, scrivendo fittamente ogni singola riga. Riuscii a far stare tutto nei 256 byte che avevo a disposizione. Scrissi due versioni del programma monitor: una che interrompeva il programma in esecuzione alla pressione di un tasto, e l'altra che controllava solo se un qualche tasto era stato premuto. Il secondo metodo è chiamato "polling". La mattina dopo presi le due versioni del programma monitor insieme ad alcuni chip PROM vuoti e mi recai in un altro edificio HP dove avevano l'attrezzatura necessaria per scrivere in modo permanente nei chip.
La memoria RAM
Ma questi chip non ero ancora in grado di farli funzionare — e neanche di testarli — se non avessi prima installato della memoria. I computer non possono funzionare senza memoria, è lì che devono essere caricati tutti i dati per compiere ogni calcolo e tener traccia di tutte le operazioni. La memoria più diffusa a quel tempo era la cosidetta RAM statica (SRAM).
Il mio Cream Soda Computer, l'Altair, e altri computer dell'epoca usavano quel tipo di memoria. Presi in prestito da Myron Tuttle trentadue chip SRAM, ognuno dei quali poteva contenere 1024 bit. Sommando insieme la loro capacità , avevo un totale di 4Kb di RAM, una memoria 16 volte più grande rispetto ai 256 byte con cui veniva equipaggiato l'Altair.
Alloggiai questi chip nei loro socket su una scheda di memoria separata che collegai ad un connettore dedicato sulla mia scheda madre. Con tutti i chip al loro posto, ero finalmente pronto per vedere se il mio computer avesse funzionato. Il primo passo era dare corrente. Usai un alimentatore vicino alla mia postazione, collegai la scheda e monitorai il segnale con un oscilloscopio. Per circa un'ora effettuai degli aggiustamenti che impedivano al microprocessore di funzionare. Mi accorsi che un paio di piedini del 6502 erano accidentalmente cortocircuitati, rendendo inutilizzabile il loro segnale. Un altro piedino l'avevo piegato inserendo la cpu nel socket. Andavo avanti a correggere e ad aggiustare.
Ogni volta che sei alle prese con un dispositivo elettronico che stai costruendo è inevitabile scontrarsi con una serie di problemi, e quando ne risolvi uno, quello che ti sembrava il più grosso mai affrontato, allora hai nuovi stimoli per andare avanti, anche se ti senti stanco, depresso e frustrato, continui a provare e a cercare la soluzione. Perchè prima o poi quel momento arriva. E finalmente quel momento arrivò, eureka! Il mio microprocessore stava funzionando, sembrava tutto a posto. Ma c'erano altre cose da sistemare.
Il debug dei componenti che inviavano il segnale a schermo lo completai in poco tempo perchè avevo già molta esperienza con i video terminali. Quando comparve il cursore sulla piccola TV in bianco e nero da 9 pollici che avevo all'HP, mi sentivo abbastanza sicuro da credere che anche questa parte stesse funzionando correttamente. Il passo successivo era il debug del programma monitor da 256 byte sulle PROM. Per un paio d'ore cercai di far funzionare la prima versione a "interrupt", ma senza successo. Per scriverne una nuova versione mi sarei dovuto recare di nuovo nell'altro edificio HP dove c'era l'attrezzatura necessaria alla scrittura delle PROM. Studiai le specifiche del chip per cercare di capire cosa avevo sbagliato ma non riuscii a trovare l'errore. Come sanno gli ingegneri, gli interrupts sono così. Sono fantastici quando funzionano, ma difficili da mettere a punto.
Alla fine rinunciai e provai con l'altra PROM, quella che conteneva la versione "polling" del programma monitor. Digitai qualcosa a caso sulla tastiera e rimasi scioccato! I caratteri erano comparsi sullo schermo! Ã difficile descrivere quello che provi quando qualcosa funziona al primo colpo. Ã come mandare una palla in buca da venti metri. Detti uno sguardo al mio orologio, si erano fatte le dieci di sera.
Andai avanti per un altro paio d'ore ad inserire dati in memoria e a visualizzarli sullo schermo, per sincerarmi che fosse tutto vero. Scrissi anche alcuni piccoli programmi in esadecimale, qualcosa di veramente semplice, come generare dei caratteri random a video. Sul momento non ci pensai, ma quel giorno, domenica 29 giugno 1975 fu di un'importanza cruciale. Era la prima volta nella storia che qualcuno premeva un tasto su una tastiera e lo vedeva comparire di fronte a lui sullo schermo del proprio computer.
Continua con il racconto di Steve Wozniak.