# IBM 305 RAMAC

El IBM 305 RAMAC fue el primer ordenador comercial que utilizaba disco duro de cabeza móvil (unidad de disco magnético) como almacenamiento secundario. IBM lo lanzó el 4 de octubre de 1956. RAMAC eran las iniciales en inglés de "Sistema de Contabilidad con Memoria de Acceso Aleatorio" ("Random Access Memory ACcounting System"). Su diseño estuvo motivado por la necesidad de sustituir el fichero de tarjetas perforadas utilizado por la mayoría de las oficinas de la época. El primer RAMAC destinado a ser usado en la industria del automóvil estadounidense fue instalado en la Chrysler's MOPAR Division en 1957. Sustituyó a un gigantesco fichero que era parte del sistema de procesamiento para el control de inventario y pedidos de piezas de MOPAR. El 305 fue uno de los últimos ordenadores de tubo de vacío construidos por IBM. El sistema de disco IBM 350 almacenaba cinco millones de caracteres de siete bits (aproximadamente 5 MiB). Tenía cincuenta discos de veinticuatro pulgadas de diámetro. Dos brazos independientes se desplazaban verticalmente seleccionar un disco y horizontalmente para seleccionar una pista de grabación, todo para control de servomecanismos. El tiempo medio de posicionamiento en un registro era de seiscientos milisegundos. En la década de 1950 se añadieron varios modelos mejorados. El ordenador IBM RAMAC 305 con almacenamiento en disco 350 tenía un coste en "leasing" de 3200 dólares mensuales en dólares de 1957, equivalente a un precio de compra de unos 160.000 dólares. Se construyeron más de 1000 unidades. La producción terminó en 1961, el RAMAC pasó a ser obsoleto en 1962 con el lanzamiento del IBM 1401 y retirado del mercado en 1969.
En los Juegos Olímpicos de Invierno de 1960 en Squaw Valley (EE. UU.) IBM proporcionó el primer sistema de procesamiento electrónico de datos para los Juegos. El sistema consistía en un ordenador IBM RAMAC 305, una colección de datos en tarjetas perforadas, y equipamiento de impresión.
La programación del 305 no sólo requería la escritura de instrucciones en lenguaje máquina para su almacenamiento en la memoria de tambor, sino que, además, casi todos los elementos del sistema (incluyendo el propio ordenador) se programaban insertando conectores en un panel de conexión.
El sistema 305 RAMAC original podía alojarse en una habitación de alrededor de nueve por quince metros; la unidad de disco 350 medía 2,3 metros cuadrados aproximadamente. La primera unidad de disco duro fue entregada el 13 de septiembre de 1956. Los componentes adicionales del ordenador eran una perforadora de tarjetas, una CPU, una fuente de alimentación, una unidad lectora de tarjetas/consola de operador, y una impresora.
Currie Munce, vicepresidente de investigación de Hitachi Global Storage Technologies, la cual adquirió el negocio de almacenamiento de IBM, dijo en una entrevista publicada en el Wall Street Journal que el RAMAC completo pesaba más de una tonelada, que tenían que utilizarse grúas para moverlo y que era transportado utilizando grandes aviones de carga. Según Munce, si bien la capacidad de almacenamiento podría haberse incrementado por encima de los cinco megabytes, el departamento de marketing de IBM era contrario a este incremento porque no sabían cómo vender un producto con más capacidad de almacenamiento.

## Arquitectura

El 305 era un ordenador decimal (BCD) de longitud de "palabra" variable orientado a carácter, con una memoria de tambor que giraba a 600 revoluciones por minuto y que almacenaba 3200 caracteres alfanuméricos. Para almacenamiento temporal durante la transferencia de datos utilizaba un buffer de 100 caracteres en memoria de ferrita.
Cada carácter constaba de siete bits, y estaba compuesto por dos bits de zona ("X" y "O"), cuatro bits BCD para el valor del dígito y un bit de paridad ("R") con el formato siguiente:
Las instrucciones sólo podían almacenarse en veinte pistas de la memoria de tambor y eran de longitud fija (diez caracteres), con el formato siguiente:
| Posiciones | Función |
| T$_1$ A$_1$ B$_1$ | Dirección del operando origen – Pista, carácter de orden bajo AB |
| T$_2$ A$_2$ B$_2$ | Dirección del operando destino – Pista, carácter de orden bajo AB |
| M N | Longitud de los operandos (cada operando debe estar contenido completamente en la pista especificada) |
| P | Código de salida (exit code) del programa; usado para seleccionar test condicionales, ejecutar saltos de control, e iniciar entrada/salida. La programación del tablero de conexión del 305 determina la(s) acción(es) realizadas. |
| Q | Código de control; modifica la operación (similar a un código de operación), siendo la operación por omisión la copia del origen al destino. Otras operaciones eran: "1" Comparar, "2" Comparar Campo, "3" Comparar y Comparar Campo, "5" Inicializar el acumulador, "6" Test de transferencia de blancos, "7" Comprimir y Expandir, "8" Expandir, "9" Comprimir |
Las "palabras" de datos de coma fija podían ser de cualquier tamaño entre uno y cien dígitos decimales, almacenándose el signo (magnitud con signo) en el bit X del dígito menos significativo.
Los registros de datos podían ser de cualquier tamaño entre uno y cien caracteres.

### Memoria de tambor

La memoria de tambor estaba organizada en 32 pistas de cien caracteres cada una.
El código de color de la tabla siguiente es:
* Amarillo – Almacenamiento
* Azul – Aritmética
* Verde – Entrada/Salida
* Rojo – Función especial
| Selector de Pista to,ss | Función Origen | Función Destino |
| W X Y Z | Almacenamiento General | Almacenamiento General |
| 0 1 2 3 4 5 6 7 8 9 & A B C D E F G H I | Almacenamiento de Instrucción, Almacenamiento General | Almacenamiento de Instrucción, Almacenamiento General |
| L | Leer el acumulador | Añadir al acumulador |
| M | Leer e inicializar el acumulador | Restar del acumulador |
| V | Multiplicando (1 a 9 caracteres) o Divisor (1 a 9 caracteres) | Multiplicando (1 a 9 caracteres) o Divisor (1 a 9 caracteres) |
| N | N/D | Multiplicar (1 a 11 caracteres) Almacena el producto de 2 a 20 caracteres en los acumuladores 0 y 1. |
| P | N/D | Dividir (opción) |
| K | Entrada de tarjeta perforada 380 | N/D |
| S T | N/D | Salida de tarjeta perforada 323, Salida de impresora 370, Salida de impresora 407 |
| Q | Petición de Entrada/Salida 380 | Petición de Entrada/Salida 380 |
| J | N/D | Dirección de fichero 350 |
| R | Entrada/Salida de datos en fichero 350 | Entrada/Salida de datos en fichero 350 |
| - | Core Buffer | Selector de carácter |
| $ | Entrada/Salida en cinta de papel (opción) | Entrada/Salida en cinta de papel (opción) |
L y M seleccionaban la misma pista, que contenía diez "Acumuladores" de 10 caracteres. Como destino, L especificaba suma y M especificaba resta. (Los números en esos acumuladores se almacenaban en complemento a diez, con el signo representado por el bit X del dígito más significativo. El signo de cada acumulador se mantenía también en un relé. Sin embargo, el 305 convertía automáticamente entre su formato estándar de magnitud con signo y este formato sin necesidad de programación especial.)
J, R, y - no seleccionaban pistas en el tambor, especificaban otros orígenes y destinos.

### Saltos

El conjunto de instrucciones del 305 no incluía saltos, sino que estos eran programados en el tablero de conexión:
* Salto incondicional: El código de salida del programa (campo P) especificaba un conector de salida del programa en el tablero de conexión. Este conector y el conector de entrada que especificaba la instrucción a la que ceder control se ponían en contacto por medio de un cable.
* Salto condicional: El código de salida del programa (campo P) especificaba un conector de salida del programa en el tablero de conexión. Este conector y el conector común del Selector de Condición apropiado se ponían en contacto por medio de un cable. A su vez, los dos conectores de salida del Selector de Condición tenían cables insertados que les ponían en contacto, bien con los conectores de entrada que especificaban las instrucciones a las que ceder control o bien con el conector de avance de programa para continuar con la secuencia de instrucciones. Podían establecerse condiciones complejas implicando muchos Selectores de Condición para ser ejecutadas en una única instrucción (por ejemplo, analizando los estados de signo y cero de varios acumuladores), activando uno de varios conectores de entrada de programa.
* Salto múltiple (multi-way): La pista destino (campo T2) se hacía igual a "-" y los conectores de los Selectores de Carácter apropiados en el tablero de conexón tenían cables que los conectaban con los conectores de Entrada de Programa que especificaban las instrucciones a las que ceder el control, o con el conector de Avance de Programa para continuar en secuencia.

### Temporización

Todas las señales de temporización del 305 se obtenían a partir de una Pista de Reloj grabada en fábrica en el tambor. La pista de reloj contenía 816 pulsos separados doce µs con un hueco de 208 µs para sincronización.
La lectura o escritura de un carácter necesitaba 96 µs.
Una instrucción típica del 305 necesitaba tres rotaciones completas del tambor (30 ms): una (fase I) para leer la instrucción, una (fase R) para leer el operando origen y copiarlo al core buffer, y una (fase W) para escribir el operando destino desde el core buffer. Si el campo P (código de salida de Programa) era distinto de blanco, entonces se añadían dos (fase D y fase P) rotaciones adicionales del tambor (20 ms) para permitir la captura de los relés. Podía instalarse la opción Improved Processing Speed (Velocidad de Procesamiento Mejorada), que permitía que las tres fases de la instrucción (IRW) se sucedieran de forma inmediata la una a la otra en lugar de esperar a la siguiente rotación para empezar; con esta opción y optimizando adecuadamente el código y la ubicación de los operandos una instrucción típica podía ejecutarse en una única rotación del tambor (10 ms).
No obstante, algunas instrucciones podían necesitar bastante más que los típicos 30 a 50 ms. Por ejemplo, la multiplicación precisaba de seis a diecinueve rotaciones del tambor (60 a 190 ms) y la división (una opción) precisaba de diez a treinta y siete giros completos del tambor (100 a 370 ms). Las instrucciones de Entrada/Salida podían bloquear el procesador durante tantas rotaciones del tambor como necesitara el hardware.

## Implementación Hardware

La circuitería lógica del 305 consistía en uno y dos unidades de tubos insertables y relés.

## Unidades periféricas relacionadas

Un sistema básico se componía de los elementos siguientes:
| 305 | – | Unidad de proceso | El tambor magnético de proceso, el registro magnético de ferrita y los circuitos electrónicos lógicos y aritméticos. |
| 350 | – | Unidad de Almacenamiento en Disco. | Unidad de Almacenamiento en Disco. |
| 370 | – | Impresora. | |
| 323 | – | Perforadora de Tarjetas. | |
| 380 | – | Consola | La Lectora de Tarjetas y la máquina de escribir eléctrica IBM modelo B1. |
| 340 | – | Fuente de Alimentación. | |