# EDSAC

L'Electronic Delay Storage Automatic Calculator (EDSAC) è uno dei primi computer elettronici digitali della storia. È stato progettato e costruito dall'Università di Cambridge (Inghilterra), in particolare da Maurice Wilkes e la sua squadra, ispirati dal documento di John von Neumann sull'EDVAC First draft of a report on the EDVAC.
Nel 1947 il progetto venne supportato dalla J. Lyons & Co. Ltd., un'azienda inglese in seguito ricompensata con il primo computer elettronico per uso commerciale: il LEO I (basato sull'EDSAC). Il 6 maggio 1949 fu fatto girare il primo programma sull'EDSAC (il programma calcolava i quadrati perfetti presenti nell'intervallo 0-99).
L'EDSAC è il terzo computer a programma memorizzato della storia e il terzo computer della storia basato sull'architettura di von Neumann, dopo lo Small-Scale Experimental Machine e il Manchester Mark 1.

## Panoramica tecnica
### Componenti fisici e prestazioni

L'EDSAC era realizzato con 3000 valvole termoioniche sistemate su 12 rack. La memoria dell'EDSAC usava linee di ritardo a ultrasuoni, a mercurio, che memorizzavano i dati per brevi intervalli di tempo. L'input era gestito tramite un lettore di bande perforate e l'output tramite telescrivente. Inizialmente vi erano solo due registri, cioè il registro accumulatore e il registro moltiplicatore. Nel 1953, David Wheeler, di ritorno dall'università dell'Illinois, progettò un terzo registro, il registro indice.
L'EDSAC era capace di eseguire 650 istruzioni al secondo, eseguire una moltiplicazione in circa 4.5 millisecondi e una divisione in circa 200 millisecondi. Il suo consumo energetico era di 12 KW, e occupava una superficie di 20 metri quadrati.

### Memoria e istruzioni

La memoria dell'EDSAC consisteva in 1024 locazioni di memoria di 17 bit, anche se inizialmente sono state implementate solo 512 locazioni di memoria. Un'istruzione consisteva in un codice operativo di 5 bit (progettato per essere rappresentato da una lettera mnemonica; ad esempio, l'istruzione di addizione usava il bit pattern della lettera A), un bit di riserva non usato, dieci bit per un indirizzo di memoria e un bit per controllare se l'istruzione operava su un numero contenuto in un word (17 bit) o due (35 bit).
L'EDSAC usava il complemento a due e i numeri binari. Questi erano o di 17 bit (un word) o 35 bit (due word). L'accumulatore aveva una capienza di 71 bit, compreso il segno, permettendo a due numeri della lunghezza di 35 bit di venire moltiplicati senza perdita di precisione.
Le operazioni disponibili erano: addizione, sottrazione, moltiplicazione, confronto, shift a destra o sinistra, caricare il registro moltiplicatore, immagazzinare (ed eventualmente azzerare) l'accumulatore, leggere un nastro in input, stampare un carattere, no-op, e stop. Non c'era un'istruzione di divisione (anche se erano disponibili alcune subroutine di divisione) e nessun modo di caricare direttamente un numero nell'accumulatore (per fare ciò era necessario un'istruzione di azzeramento e salvataggio dell'accumulatore, seguita da un'istruzione di addizione).

## Utilizzo

Inizialmente le istruzioni erano immesse meccanicamente tramite una serie di interruttori, e caricate nelle prime locazioni di memoria all'avvio. Nel maggio 1949 venne sviluppato il primo linguaggio assembler, che si avvantaggiava della progettazione mnemonica dell'EDSAC, ed era contenuto in esso in 31 word.
Gli utenti preparavano i loro programmi (in assembler) in schede perforate, e quando i programmi erano pronti, li appendevano in un pezzo di corda teso, vicino al lettore di carte forate. L'operatore, procedendo in modo sequenziale, prendeva le schede dal filo e le caricava nell'EDSAC. Oggi questo è conosciuto come 'job queue'. Se l'EDSAC stampava qualcosa, la carta contenente il programma veniva restituita all'utente insieme al risultato. In caso contrario, gli utenti venivano informati su quale locazione di memoria si era fermato il programma. Eventualmente si poteva montare un monitor CRT per visualizzare il contenuto di una determinata locazione di memoria. Dopo l'orario d'ufficio, ad alcuni utenti autorizzati veniva concesso di usare la macchina per conto proprio, la quale funzionava fino a tarda notte, finché soffiava una valvola a pressione, solitamente impostata dall'operatore.

## Tecniche di programmazione

I primi programmatori dovettero fare uso di tecniche oggi disapprovate, specialmente quella di modificare il codice. Poiché inizialmente non vi era alcun registro indice, l'unico modo per accedere ad un array era quello di alterare il riferimento alla locazione di memoria di una determinata istruzione.
Il concetto di subroutine fu inventato da David Wheeler, il quale con esso ottenne il primo "Computer Science Ph.D." a livello mondiale. Il modo per utilizzare una subroutine era questo: un utente scrive un programma che chiama una subroutine saltando all'inizio della subroutine con l'indirizzo del program counter più un registro singolo (salto di Wheeler). Per convenzione la subroutine si aspetta questo indirizzo, e la prima cosa che fa è di sovrascrivere la sua istruzione finale di salto con quest'indirizzo, in modo che ritorni al programma. Potevano essere eseguite anche subroutine multiple ed annidate. L'utente quindi copiava il codice della subroutine da una cassetta principale sulla propria, dopo il codice del proprio programma.

## Ambiti applicativi

Il concetto di subroutine portò alla disponibilità di una vasta libreria di subroutine. Dal 1951, erano disponibili 87 routine per uso generale: operazioni aritmetiche, controlli, divisioni, stampa e impaginazione, lettura da input e varie.
Nel 1950 Wilkes e Wheeler usarono l'EDSAC per risolvere un'equazione differenziale relativa alla frequenza dei geni - questo rappresenta il primo uso di un computer in un problema nel campo della biologia.
Nel 1951, Miller e Wheeler usarono la macchina per trovare un numero primo di 79 cifre — il più grande conosciuto al tempo.
Nel 1952, A.S. Douglas progettò OXO, una versione di tris per l'EDSAC, con un'uscita grafica su un tubo a raggi catodici. Questo è stato il primo video-gioco al mondo.