# Small Scale Experimental Machine

Lo Small-Scale Experimental Machine (traducibile dall'inglese come "macchina sperimentale in scala ridotta", sigla SSEM, soprannominato Manchester Baby "bimbo di Manchester" o Baby) è, tra quelli di cui si ha notizia, il sesto computer elettronico digitale della storia, dopo l'IBM 603 Electronic Multiplier.
L'importanza storica del SSEM è notevole in quanto è il primo computer elettronico a programma memorizzato della storia e il primo computer della storia basato sull'architettura di von Neumann. Questi due primati fanno del SSEM il progenitore dei moderni computer programmabili a loro più simile.
Progettato e costruito nel 1948 alla Victoria University of Manchester (Manchester, Regno Unito) da Frederic Calland Williams, Tom Kilburn e Geoff Tootill, il SSEM entrò in funzione il 21 giugno 1948. Il primo programma che vi venne eseguito serviva a calcolare il massimo fattore di un dato numero ed era composto da sole 17 istruzioni.
Come indica la presenza della parola "experimental" nel nome del computer, il SSEM è stato il banco di prova per un altro computer: il Manchester Mark 1. In particolare nel SSEM è stata sperimentata con successo, per la prima volta, una nuova tipologia di memoria: il tubo di Williams, il primo dispositivo al mondo di memoria RAM.

## Caratteristiche

Il SSEM aveva le seguenti caratteristiche:
* Lunghezza di parola di 32 bit.
* Aritmetica binaria su interi in complemento a due con la cifra meno significativa a sinistra (little-endian).
* Formato delle istruzioni a singolo indirizzo.
* Memoria totale di 32 parole estendibile fino a 8192.
* Velocità di esecuzione di 1,2 millisecondi per singola istruzione.
* Ciclo di clock di 100 kHz.
L'interazione avveniva scrivendo per mezzo di una tastiera le sequenze di bit negli indirizzi di memoria scelti; i risultati della computazione apparivano su di un display costituito da un tubo a raggi catodici.
Le dimensioni del calcolatore erano di 5,2 metri di lunghezza per 2,2 metri di altezza per un peso di poco inferiore alla tonnellata; le sue 550 valvole, 300 diodi e 250 pentodi, lo portavano a consumare 3500 watt.
Praticamente tutti i componenti con i quali venne costruito il Baby provenivano dal Telecommunications Research Establishment (TRE), ed erano il risultato della ricerca radar e nel campo delle telecomunicazioni sviluppata durante la Seconda guerra mondiale.

## Formato del set di istruzioni

Parola da 32 bit :
| bit 0-12 indirizzo di memoria | bit 13-15 codice istruzione | bit 16-31 non utilizzati |
I programmi potevano essere scritti con queste 7 istruzioni:
* A = - S
* A = A - S
* S = A
* if A < 0, CI = CI + 1 (se A è negativo, salta alla prossima istruzione)
* CI = S
* CI = CI + S
* Halt (termina il programma)
A è il registro accumulatore, S il contenuto dell'indirizzo di memoria passato nell'istruzione, CI è l'indirizzo dell'istruzione corrente; un altro registro presente era il PI che conteneva l'istruzione corrente.
Inizialmente le sole istruzioni aritmetiche implementate in hardware erano la sottrazione e la negazione, tutte le altre operazioni dovevano essere implementate via software.
Due mesi dopo l'esecuzione del primo programma, il set di istruzione venne aumentato incrementando fino a 4 bit la lunghezza del codice di istruzione, portando così il massimo numero di istruzioni possibili a 16 (non tutte implementate).
Le principali aggiunte furono:
* A = S
* A = A + S
* A = A & S

## La tecnologia di memoria

Lo scopo del SSEM era quello di dimostrare la possibilità di utilizzare i tubi di Williams-Kilburn (essenzialmente tubi a raggi catodici, CRT) per l'immagazzinamento di dati digitali. La tecnologia di memoria nei primi calcolatori era una parte critica e fortemente limitante, sia per capacità, sia per tempo di accesso.
I tubi di Williams-Kilburn sono stati la soluzione adottata nella costruzione dei primi calcolatori sviluppati dall'Università di Manchester e dalla Ferranti, la prima azienda costruttrice di computer general purpose disponibili in commercio.
Questa tecnologia venne sviluppata congiuntamente da Freddie Williams e Tom Kilburn a cavallo tra il 1946 e il 1947; il principio che sta dietro al funzionamento di queste memorie è l'emissione secondaria, la persistenza di una carica generata da un segnale emesso dal tubo a raggi su di una estremità del tubo stesso; l'area in questione rimane caricata negativamente per un certo periodo di tempo dopo la fine del raggio catodico e può essere letta come differenza di potenziale elettrostatico mediante una piastra metallica esterna.
Ogni lettura di una particolare area del tubo causa la sua cancellazione; quindi per mantenere l'informazione in memoria ogni lettura deve essere seguita da una scrittura.
La carica in sé ha una durata limitata nel tempo (circa 0,2 secondi) e l'idea di Williams e Kilburn fu quella di rigenerarla per mezzo di successive letture e riscritture, la stessa tecnica che oggi è utilizzata nelle DRAM.
Le memorie costruite per mezzo di questi tubi permettevano tempi di accesso costanti e la mancanza di parti in movimento le rendeva particolarmente veloci per l'epoca; la capacità di immagazzinamento variava dai 500 ai 1000 bit di informazione.
I primi test su questa tecnologia furono effettuati sui tubi più commercialmente diffusi nel 1946, i CV1131 di 300 mm di diametro, il Baby fu costruito però con una versione più piccola; i CV1097 di 150 mm di diametro.

## Il primo programma

Istruzioni :
| 1 | -18,C | azzera l'accumulatore |
| 2 | -19,C | caricamento +a |
| 3 | SUB 20 | sottrazione |
| 4 | TEST | la differenza è negativa? |
| 5 | ADD 21, CI | ancora positiva, salta indietro due linee |
| 6 | SUB 22 | risultato oltrepassato, aggiungi bn |
| 7 | c, 24 | memorizza +r n |
| 8 | -22, C | carica bn |
| 9 | SUB 23 | assegna b(n+1) = bn -1 |
| 10 | c, 20 | carica b(n+1) |
| 11 | -20, C | carica -b(n-1) |
| 12 | c, 22 | memorizza -b(n+1) |
| 13 | -24, C | carica -r n |
| 14 | TEST | il resto è zero? |
| 15 | 25, C | si, salta alla linea 17 |
| 16 | 23, C | no, salta alla linea 2 |
| 17 | STOP | carica -b(n+1) |
Dati :
| | iniziale | corrente | finale |
| 18 | 0 | | |
| 19 | -a | -a | |
| 20 | b1 | bn o b(n+1) | b(N+1) |
| 21 | -3 | | |
| 22 | -b1 | -bn o -b(n+1) | -b(N+1) |
| 23 | 1 | | |
| 24 | -r n | r N | |
| 25 | 16 | | |
Questa è una ricostruzione del primo programma fatta e annotata nel 1996 da parte di Geoff Tootill, l'originale andato perduto era stato scritto da Tom Kilburn del quale Tootil era assistente. Sia Geoff che Tom hanno lavorato sui loro appunti e ricordi dell'epoca per ricreare il Primo Programma più plausibile. Esiste anche un documento, datato 18 luglio 1948, che contiene una versione del programma revisionata da Geoff Tootill, costituita però da 19 istruzioni.
Per fare un esempio il primo programma era in grado di trovare il fattore più grande di $2^{18}$, mediante successive sottrazioni e test, in 52 minuti.
In totale il numero dei programmi che sono stati eseguiti sul SSEM ammonta a 3, incluso un programma scritto da Alan Turing per la divisione di numeri 'lunghi'.

## Architettura a programma memorizzato

Prima della creazione del Baby, i calcolatori esistenti erano progettati per svolgere compiti specifici: il programma che eseguivano era determinato alla creazione del calcolatore stesso e stabilito dai suoi circuiti hardware. Convertire un calcolatore special purpose per risolvere un problema per il quale non era stato progettato costava tempo e denaro; questo può far comprendere quanto la creazione di un calcolatore a programma memorizzato sia stata innovativa.
Una opportuna progettazione dell'architettura hardware di un calcolatore consente di risolvere qualsiasi problema matematico computabile, a patto di riuscire a scrivere un programma abbastanza piccolo e decidibile per tale problema; Alan Turing aveva già teorizzato questo fatto dimostrandolo per la sua Macchina di Turing.
L'architettura utilizzata nel SSEM, nella quale le istruzioni e i dati vengono memorizzati in una stessa memoria, è detta Architettura di von Neumann (dal matematico John von Neumann) e rispecchia l'organizzazione degli attuali processori per PC.

## Anniversari

L'università e la città di Manchester in occasione del cinquantesimo anniversario dalla creazione della Small Scale Esperimental Machine hanno organizzato una celebrazione che si è tenuta il 17 giugno 1998, in cui è stata fatta ufficialmente partire la replica del Baby (ora conservata nel Museo della Scienza e dell'Industria di Manchester) eseguendo anche lo storico Primo Programma ricostruito per l'occasione.
Durante la celebrazione si è svolta la premiazione del concorso di programmazione per il Baby: tutti i partecipanti hanno dovuto sviluppare programmi originali realmente funzionanti su di un simulatore del Baby scritto in Java.
Il sessantesimo anniversario dalla creazione del SSEM si è svolto il 20 giugno 2008; l'evento ha visto l'inaugurazione della ormai annuale conferenza Kilburn e la consegna delle medaglie per l'eccezionale contributo alla storia dell'informatica ai rimanenti componenti del team che costruì il SSEM.