# SSEM

La Manchester Small-Scale Experimental Machine o SSEM (del inglés «máquina experimental de pequeña escala de Mánchester», apodada Manchester Baby, fue el primer computador del mundo con programa almacenado. Fue desarrollado en la Universidad de Mánchester por Frederic C. Williams, Tom Kilburn y Geoff Tootill, y corrió su primer programa el 21 de julio de 1948.
La máquina no fue diseñada como un computador práctico, sino que fue diseñada como un banco de pruebas de los tubos Williams, uno de los primeros tipos de memorias de computador. Aunque se considera "pequeño y primitivo" según las normas de su época, fue la primera máquina de trabajo que contenía todos los elementos esenciales de una computador electrónica moderno. Tan pronto como la SSEM había demostrado la viabilidad de su diseño, se inició un proyecto en la universidad para desarrollar un computador más fácil de usar, el Manchester I. A su vez, la Mark I se convirtió rápidamente en el prototipo de la marca Ferranti Mark I, el primer computador del mundo de propósito general disponible comercialmente.
La SSEM tenía una longitud de palabra de 32 bits y una memoria de 32 palabras. Como fue diseñado para ser el computador de programa almacenado con la estructura más simple posible, las únicas operaciones aritméticas implementadas en hardware eran la resta y la negación; las otras operaciones aritméticas fueron implementadas en software. El primero de los tres programas escritos para la máquina encontraba el divisor más alto de 2$^{18}$ (262.144), un cálculo que se sabía que tomaría mucho tiempo en ejecutarse-y así demostrar fiabilidad-mediante prueba de cada entero desde 2$^{18}$-1 hacia abajo, como una división que fue implementada mediante sustracción repetida del divisor. El programa consistió en 17 instrucciones y corrió durante 52 minutos antes de llegar a la respuesta correcta de 131.072, después de la SSEM había realizado 3,5 millones de operaciones (a una velocidad de CPU efectiva de 1,1 Kips).

## Antecedentes

El primer diseño de un ordenador controlado por programa fue la máquina analítica de Charles Babbage en la década de 1830. Un siglo más tarde, en 1936, el matemático Alan Turing, un concepto teórico destinado a explorar los límites de la computación mecánica. Turing no estaba imaginando una máquina física, sino una persona que él llamó una "computadora", que actuaba de acuerdo con las instrucciones proporcionadas por una cinta en la que los símbolos pueden ser leídos o escritos secuencialmente si la cinta se mueve bajo una cabezal de la cinta. Turing demostró que si un algoritmo puede ser escrito para resolver un problema matemático, entonces una máquina de Turing puede ejecutar dicho algoritmo.
El Z3 de Konrad Zuse fue el primer computador programable operativa totalmente automático del mundo, con la lógica aritmética digital binaria, pero carecía de la bifurcación condicional de una máquina de Turing. El 12 de mayo de 1941, fue presentada con éxito ante una audiencia de científicos de la Deutsche Versuchsanstalt für Luftfahrt ("Laboratorio de Alemán para la Aviación") en Berlín. El Z3 almacenaba su programa en una cinta externa, pero era electromecánico en lugar de electrónico. El Colossus de 1943 fue el primer dispositivo electrónico de computación, pero no fue una máquina de propósito general.
El ENIAC (1946) fue la primera máquina que fue tanto de propósito general como electrónica. Fue una máquina Turing completa, con ramificación condicional, y programable para resolver una amplia gama de problemas, pero su programa se mantuvo en el estado de interruptores de latiguillos, fuera de la memoria, y podría tomar varios días para reprogramarse. Científicos como Turing y Konrad Zuse investigaron la idea de utilizar la memoria de la computadora para mantener el programa, así como los datos que con los que estaba trabajando, pero fue el matemático John von Neumann, quién llegó a ser ampliamente acreditado definiendo la arquitectura de computadores, todavía se utilizada en casi todas las computadoras.
La construcción de un computador von Neumann práctico dependía de la disponibilidad de dispositivos de memoria. Durante la Segunda Guerra Mundial, investigadores que trabajaban en el problema de eliminar las interferencias de las señales de radar desarrollaron la memoria de línea de retardo, la primera memoria de uso práctico, una de las cuales fue la memoria de línea de retardo de mercurio, desarrollada por J. Presper Eckert. La idea era eliminar los ecos de radar de los objetos estáticos retrasando cada pulso de retorno entre pulsos transmitidos y compararlo con cada pulso almacenado, dejando en la señal resultante solo las imágenes de los objetos que se mueven.
En octubre de 1945 Turing se incorporó al Laboratorio Nacional de Física (National Physical Laboratory, NPL), por la cual los científicos en el Ministerio de Suministros consideraron que Gran Bretaña necesitaba Laboratorio Nacional de Matemática para coordinar los cálculos que se realizaban asistidos por máquinas. Se creó la División Matemáticas en el NPL, y el 19 de febrero de 1946, Alan Turing presentó un diseño para un computador electrónico de programa almacenado, que sería conocido como el Automatic Computing Engine (ACE). Este fue uno de los varios proyectos puestos en marcha en los años posteriores a la Segunda Guerra Mundial con el objetivo de construir un computador con programa almacenado. Casi al mismo tiempo, el EDVAC estaba bajo desarrollo en la Escuela Moore de Ingeniería Eléctrica en la Universidad de Pensilvania, y el laboratorio de matemáticas de la Universidad de Cambridge estaba trabajando en el EDSAC.
La NPL no tenía la experiencia para construir una máquina como ACE, por lo que se pusieron en contacto con Tommy Flowers en el General Post Office (GPO) del Dollis Hill Research Laboratory. Flowers, el diseñador de Colossus, el primer computador electrónico programable del mundo, estaba comprometido en otro lugar y no pudo participar en el proyecto, aunque su equipo hizo construir algunas líneas de retardo de mercurio para la ACE. El Telecommunications Research Establishment (TRE) también fue abordado por la asistencia, al igual que Maurice Wilkes en el Laboratorio de matemáticas de la Universidad de Cambridge.
El departamento del gobierno responsable de la NPL decidió que, de todo el trabajo llevado a cabo en su nombre por el TRE, fuera ACE el que tenía la máxima prioridad. La decisión del NPL llevó a una visita por el superintendente de la División de Física del TRE, el 22 de noviembre de 1946, acompañado por Frederic C. Williams y AM Uttley, también del TRE. Williams lideró un grupo de desarrollo de TRE trabajando en comercios de CRT para aplicaciones de radar, como alternativa a retrasar líneas. Él ya había aceptado un puesto de profesor en la Laboratorio de matemáticas de la Universidad de Mánchester, y la mayoría de sus técnicos de circuitos estaban en proceso de ser transferidos al Departamento de Energía Atómica. El TRE acordó un segundo un pequeño número de técnicos para trabajar bajo la dirección de Williams en la universidad, y para apoyar a otro pequeño grupo de trabajando con Uttley en la TRE.

## El tubo Williams-Kilburn

A pesar de que los primeros computadores, como el CSIRAC, usaron con éxito la memoria de línea de retardo de mercurio, esta tecnología tenía varios inconvenientes: la cantidad de datos que podían almacenar eran limitados, era pesado y caro. Además, ya que los datos se almacenaban como una secuencia de ondas acústicas propagadas a través de una columna de mercurio, la temperatura del dispositivo debía ser controlada muy cuidadosamente ya que la velocidad del sonido a través de un medio varía con la temperatura. Frederic C. Williams había presenciado un experimento en los Laboratorios Bell que demostró la efectividad de los tubos de rayos catódicos (CRT) como una alternativa al retraso de tiempo para remover los ecos del terreno en las señales de radar. Mientras trabajaba en el Establecimiento de Investigación de Telecomunicaciones (Telecommunications Research Establishment, TRE), poco antes de incorporarse a la Universidad de Mánchester en diciembre de 1946, desarrolló una forma de memoria electrónica usando un CRT que se conoció como el "Tubo Williams". La "Máquina Experimental de Pequeña Escala de Mánchester" (Manchester Small-Scale Experimental Machine, SSEM) fue diseñada para probar los tubos Williams, el primer dispositivo de almacenamiento digital de acceso aleatorio, que podía trabajar a la velocidad de la computadora.
Para usarse en un computador digital binario, el dispositivo podía almacenar uno de dos valores posibles en cada posición de memoria, correspondientes a los dígitos binarios (bits) 0 y 1. Éste aprovecha la carga electróstatica positiva y negativa generada por un CRT, ya sea un guion o un punto en cualquier posición de la pantalla. Un guion generaba una carga positiva, y un punto una carga negativa, cualquiera de los cuales podía ser captado por un detector cercano a la pantalla; la carga negativa representaba un 0, y la positiva un 1. La carga podía disiparse en 0,2 segundos, pero podía refrescarse automáticamente "leyendo" los datos con la placa colcoada en el frente de la pantalla.
Inicialmente los tubos Williams se desarrollaron sobre el CV1131, un CRT disponible comercialmente de 300 mm de diámetro, pero un tubo más pequeño de 150 mm, el CV1097, fue usado en la SSEM.

## Diseño y desarrollo

Tras su nombramiento a la Presidencia de Ingeniería Eléctrica en la Universidad de Mánchester, en diciembre de 1946, Williams contrató a su colega del TRE Tom Kilburn. Para el otoño boreal de 1947 habían incrementado la capacidad de los tubos Williams de un bit a 2.048, en una matriz de 64 por 32, y demostraron que podían almacenar los datos por cuatro horas. El ingeniero Geoff Tootill se unió al equipo a "préstamo" del TRE en septiembre de 1947, y permaneció en comisión hasta abril de 1949.
Max Newman fue nombrado director de Matemática Pura de la Universidad de Mánchester en 1945. Durante la Segunda Guerra Mundial trabajó como criptógrafo en Bletchley Park, y abandonó el equipo que había producido los primeros computadores descifradores de código Colossus en 1943. Aunque Newman no desempeñó un papel muy activo en el desarrollo de la SSEM, o de los otros computadores Mánchester, fue un entusiasta del proyecto y lo apoyó activamente, y acordó las compras de los excedentes de guerra, incluyendo los racks de metal del Servicio Postal General (General Post Office, GPO) de Bletchley.
En junio de 1948 la SSEM había sido construido y estaba trabajando. Tenía 5,16m de largo, 2,33m de alto, y pesaba alrededor de 1 T. La máquina contenía 550 válvulas, 300 diodos, 250 pentodos y consumía 3500 watts. La unidad aritmética usaba pentodos EF50, los cuales fueron ampliamente usados durante la guerra. La SSEM usaba un tubo Williams para la memoria de 32 palabras de 32 bits, un segundo tubo trabajaba como acumulador con 32 bits, y el tercero que almacenaba la instrucción junto con su dirección. Un cuarto CRT sin la electrónica de almacenamiento de los otros tres, mostraba el patrón de bits de cualquiera de los otros tubos.
Cada palabra de 32 bits de la memoria principal podía contener tanto instrucciones como datos. En una instrucción del programa, los bits 0-12 representaban la dirección de memoria del operando a usar, y los bits 13–15 especificaban que operación debía ejecutarse; los 24 bits restantes no se utilizaban. La SSEM tenía, por lo tanto, una arquitectura con conjunto de instrucciones simples. El segundo operando implícito de cualquier operación es el acumulador, y las instrucciones del programa especificaban sólo la dirección de los datos en la memoria principal.
Una palabra de la memoria principal podía ser leída, almacenada o refrescada en 360 microsegundos. Una instrucción requería cuatro accesos a la palabra para ser ejecutada, dándole un promedio de ejecución de 700 instrucciones por segundo. La memoria principal se refrescaba continuamente, y el proceso tomaba 20 milisegundos para completarse, y cada palabra de 32 bits de la SSEM era leída y refrescada en forma secuencial.
La SSEM representaba los números negativos usando complemento a dos, como muchos computadores de hoy. En esta representación, el valor del bit más significativo representa el signo; número positivos tienen un cero en esa posición, y los negativos tienen un uno. Por lo tanto, el rango de números que podía almacenarse en cada palabra de 32 bits era de −2$^{31}$ a +2$^{31}$ − 1 (decimal: -2.147.483.648 a +2.147.483.647).

## Programación

El conjunto de instrucciones de tres bits de la SSEM permitía un máximo de 8 instrucciones diferentes (2$^3$). En contraste con la convención moderna, la máquina almacenaba el dígito menos significativo a la izquierda; por lo que un uno era representado en tres bits como "100", en lugar de la forma convencional "001".
Conjunto de instruccioens de SSEM :
| Código binario | Notación original | Mnemónica moderna | Operación |
| 000 | S, Cl | JMP S | Salta a la instrucción en la dirección que se obtiene de memoria S especificada (salto incondicional absoluto) |
| 100 | Añadir S, Cl | JRP S | Salta a la instrucción en la dirección que se obtiene de memoria S especificada (salto incondicional absoluto) |
| 010 | -S, C | LDN S | Lee el número en la dirección de memoria especificada, lo niega, y lo carga en el acumualdor |
| 110 | c, S | STO S | Almacena el número del acumulador en la dirección de memoria especificada |
| 001 o 101 | SUB S | SUB S | Resta el número de la dirección de memoria especificada del valor del acumulador, y lo almacena en el acumulador |
| 011 | Prueba | CMP | Salta la instrucción siguiente si el acumulador contiene un valor negativo |
| 111 | Parar | STP | Parar |
| 1 2 Como el contador de programa se incrementa al final del proceso de decodificación, la dirección almacenada tenía que ser la dirección de destino -1. ↑ Los bits de función fueron solo parcialmente decodificados, para ahorrar en elementos lógicos. ||||
Las incómodas operaciones con negativos eran el resultado de la falta de hardware de la SSEM, concretamente un sumador de 32 bits para realizar cualquier operación aritmética, excepto la sustracción y negación. No se consideró necesario antes de las pruebas construir dicho sumador debido a que la suma puede implementarse fácilmente mediante restas, i.e., $x+y\,$ puede ser calculado como $-(-x-y)$. Por lo tanto, sumar dos números, X e Y, requería cuatro instrucciones:
Los programas se ingresaban en forma binaria saltando por cada palabra de memoria, a su vez, y el uso de un conjunto de 32 conmutadores conocidos como el dispositivo de entrada, para establecer el valor de cada bit de cada palabra a 0 o 1 La SSEM no tenía lector de cinta de papel o punzón.

## Primeros programas

Se escribieron tres programas para el computador. El primero, que consistía de 17 instrucciones, fue escrito por Kilburn, y habría corrido por primera vez el 21 de junio de 1948. fue diseñado para encontrar el divisor más alto de 2$^{18}$ (262.144) calculando cada entero desde 2$^{18}$ − 1 hacia abajo. Las divisiones se implementaron haciendo restas suscesivas del divisor. Al SSEM le tomó 3,5 millones de operaciones y 52 minutos para dar la respuesta (131 072). El programa usó ocho palabras de la memoria de trabajo más las 17 palabras de las instrucciones, dándole al programa un tamaño de 25 palabras.
Al mes siguiente, Geoff Tootill escribió una versión corregida del programa, y a mediados de julio Alan Turing –quien había sido nombrado reader (lector) en el departamento de matemáticas en la Universidad de Mánchester y en septiembre de 1948– envió el tercer programa, para calcular divisiones largas. Turing había sido nombrado para el cargo de Director Adjunto del Laboratorio de Máquina Computacional de la Universidad, aunque dicho laboratorio no se hizo realidad hasta 1951.

## Últimos desarrollos

Williams y Kilburn dieron a conocer el desarrollo de la SSEM en una carta a la revista Nature, publicada en septiembre de 1948. Su éxito llevó rápidamente a la creación de un equipo más práctico, el Manchester Mark I. Los trabajos se iniciaron en agosto de 1948, y la primera versión entró en operaciones en abril de 1949. El Manchester Mark 1 a su vez condujo al desarrollo del Ferranti Mark I, el primer computador comercialmente disponible de propósito general del mundo.
En 1998 se construyó una réplica funcional de la SSEM para celebrar el 50° aniversario de la ejecución de su primer programa. La máquina está en exhibición en el Museo de Ciencia e Industria en Mánchester, donde se realizan demostraciones de funcionamiento en forma regular. En el 2008 se descubrió una fotografía panorámica de la máquina completa en la Universidad de Mánchester. La fotografía fue tomada el 15 de diciembre de 1948 por un estudiante investigador, Alec Robinson, y fue reproducida en el Illustrated London News en junio de 1949.