# IBM 1401

La computadora IBM 1401, primer miembro de la serie IBM 1400, era un ordenador decimal de longitud de palabra variable, que fue sacado al mercado por la empresa IBM el 5 de octubre de 1959, siendo retirado el 8 de febrero de 1971.

## Historia

Proveniente de los archivos de IBM:
    Lo que sigue es el texto de una nota de prensa distribuida por la División de Proceso de Datos de IBM (IBM Data Processing Division) el 5 de octubre de 1959.
    El Sistema de Proceso de Datos IBM 1401 (IBM 1401 Data Processing System) pone las características propias de los sistemas de proceso electrónico de datos al alcance de negocios de menor tamaño, hasta ahora limitados al uso de equipos de tarjetas perforadas convencionales. Estas características incluyen: perforado y lectura de tarjetas a alta velocidad, cinta magnética para entrada y salida, impresión de alta velocidad, programa almacenado, y capacidad aritmética y lógica.
    El 1401 puede utilizarse como un sistema independiente, conjuntamente con equipamiento IBM de tarjetas perforadas, o como equipamiento auxiliar de sistemas de las series IBM 700 ó 7000.
El IBM 1401 era también usado frecuentemente como controlador periférico off-line en muchas grandes instalaciones, tanto de "computación científica" como de "computación de negocio". En estas instalaciones, el ordenador principal (por ejemplo, un IBM 7090) hacía toda su entrada/salida sobre cintas magnéticas de almacenamiento de datos, y el modelo 1401 se utilizaba para cambiar el formato de los datos de entrada desde otros periféricos (por ejemplo, el lector de tarjetas perforadas de la lectora/perforadora de tarjetas IBM 1402) a las cintas, y para transferir los datos de salida desde las cintas a otros periféricos (por ejemplo, la perforadora de tarjetas de la lectora/perforadora de tarjetas IBM 1402, o la impresora de líneas IBM 1403).
A lo largo de su tiempo de permanencia en el mercado se fabricaron alrededor de 20 000 sistemas (foto), haciendo en su momento del IBM 1401 uno de los productos de mayor éxito de IBM. De los Archivos de IBM:
   La tarifa mensual por un 1401 era de 2500 dólares en adelante, dependiendo de la configuración. A finales de 1961, el número de equipos 1401 instalados tan solo en los Estados Unidos de América, había llegado a unos 2000, representando aproximadamente uno de cada cuatro ordenadores electrónicos de programa almacenado (respecto de todos los fabricantes activos por entonces). El pico de 1401 instalados superó los 10 000 a mediados de los años 60, y el sistema fue retirado del mercado en febrero de 1971.
Algunos miembros de IBM, particularmente John Haanstra, un ejecutivo a cargo del desarrollo del modelo 401, apoyaron su continuidad hacia modelos mayores (por ejemplo el IBM 1410), pero la decisión tomada en 1964 por la alta dirección de concentrar recursos en el System/360 terminó con esos esfuerzos de forma relativamente brusca. Para proteger la inversión de los clientes de software para el 1401, IBM fue pionero en el uso de emulación de microcódigo, en forma de ROM, de manera que algunos modelos de System/360 podían ejecutar programas 1401. Dicha emulación continuó hasta bien entrada la era moderna (en algunos casos, quizá, hasta que los esfuerzos por el efecto 2000 causaron la reescritura del código para 1401 que todavía estaba utilizándose).
Durante la década de los 70 del pasado siglo, muchas instalaciones de la India usaban el modelo 1401, y algunos de los empresarios de software de la India de la actualidad empezaron con esta máquina.
En el Museo de Historia del Ordenador de Mountain View (California, Estados Unidos de América), se encuentra en curso un Proyecto de Restauración del 1401.

### Arquitectura

El 1401 usaba el código binario decimal de IBM (BCD). Cada byte (o carácter alfanumérico) en el 1401 se representaba por medio de seis bits, llamados A, B, 8, 4, 2 y 1. Los bits A y B se denominaban bits de zona y los bits 8, 4, 2 y 1 se denominaban bits numéricos. Con cada byte de seis bits se asociaban otros dos bits, llamados C y M. C era el bit de paridad impar (odd parity Check) y M la marca de palabra (word mark). El formato era el siguiente:
El 1401 estaba disponible con cinco configuraciones de memoria: 1,4 K, 2 K, 4 K, 8 K, o 16 K (un número muy reducido de 1401s fueron ampliados a 32 K a través de RPQ - Solicitud de Presupuesto (Request for Price Quotation) - especiales.
Una dirección de la memoria de ferrita del IBM 1401 consistía en tres bytes de seis bits. Las direcciones decimales entre 000 y 999 se especificaban mediante los bits 8-4-2-1 de dichos bytes. Los bits de zona del byte más significativo especificaba un incremento de A=1000, B=2000, AB=3000, proporcionando una capacidad de direccionamiento de 4000 bytes en total. Los bits de zona del byte menos significativo especificaban incrementos de 4000, 8000 o 12000, para direccionar 16 000 bytes (con una unidad de expansión de memoria IBM 1406). Los bits de zona del byte intermedio se usaban para especificar registros índices, una de muchas funcionalidades opcionales.
Las instrucciones eran de seis longitudes (1, 2, 4, 5, 7, 8). Las instrucciones de un byte tan solo contenían un código de operación. Estos eran, bien instrucciones de un byte propiamente dichas, o bien eran instruccciones encadenadas (chained instructions) que utilizaban las direcciones de la instrucción previa. Las instrucciones de dos bytes consistían en un código de operación y un byte modificador. Las instrucciones de cuatro bytes consistían en un código de operación seguido de una dirección. Las instrucciones de cinco bytes en un código de operación, una dirección y un byte modificador. Las instrucciones de siete bytes en un código de operación seguido de dos direcciones. Y las instrucciones de ocho bytes en un código de operación, dos direcciones y un byte modificador.
Las instrucciones eran válidas únicamente si la marca de palabra del byte de menor orden (el código de operación) tenía el valor 1 y las marcas de palabra del resto de bytes el valor 0. La lectura de una instrucción se detenía y comenzaba su ejecución cuando se encontraba otro byte con la marca de palabra a 1. Había dos excepciones a esta regla:
* La instrucción SET WORDMARK, que establecía dos marcas de palabra, era de siete bytes aunque no le siguiera un código de operación válido.
* La instrucción BRANCH INDICATOR era de cinco bytes aunque no le siguiera un código de operación válido.
    Nota: Al margen de las dos excepciones citadas, si no se encontraba un código de operación válido antes del noveno byte la instrucción era tratada como una instrucción de ocho bytes, pero la máquina seguía recorriendo la memoria en busca de un código de operación válido (ignorando los bytes leídos) antes de comenzar la ejecución hasta que encontraba uno o hasta que detectaba un error (como, por ejemplo, el final de la memoria). Esto era considerado habitualmente como una programación chapucera, pero no necesariamente un error.
Al pulsar la tecla LOAD de la lectora/perforadora IBM 1402, se leía una tarjeta en el buffer de lectura (posiciones de memoria 1-80), se establecía una marca de palabra en la posición 1 (validando la primera instrucción de la tarjeta) y se borraban las marcas de palabra en las posiciones 2-80. La primera instrucción de cualquier programa de arranque era SET WORDMARK, que validaba otras dos instrucciones. En la práctica, las primeras tarjetas del mazo que componía el programa de arranque consistían en instrucciones SET WORDMARK, instrucciones no-op, y una instrucción "leer tarjeta y saltar" (read card and branch), las cuales configuraban un patrón de marcas de palabra en el buffer de lectura. La instrucción READ CARD no alteraba las marcas de palabra presentes en el buffer de lectura. Utilizando instrucciones no-op de varias longitudes, el siguiente grupo de tarjetas encajaría en este patrón de marcas de palabra.

## Software

El software del 1401 incluía:
* Autocoder, un ensamblador más avanzado, requería un mínimo de 4 K posiciones de memoria.
* FARGO (Fourteen-o-one Automatic Report Generation Operation: Generación Automática de Informes 1401), un predecesor de RPG, requería 4 K.
* FORTRAN II estaba disponible para sistemas con al menos 8 K posiciones de memoria; el compilador Fortran del 1401 está descrito en Haines, L.H. (1965), enlace más abajo. El compilador Fortran, para generar código para memorias pequeñas, utilizaba una forma innovadora de pseudo-código interpretado.
* FORTRAN IV estaba disponible para sistemas con al menos 8 K posiciones de memoria y o bien cuatro unidades de cinta o bien una unidad de disco IBM 1311.
* RPG. Único lenguaje de alto nivel de uso común, RPG era un lenguaje declarativo principalmente para la especificación de informes contables. Todavía (año 2007) se encuentra en uso en máquinas IBM intermedias, AS/400.
* SPS (Symbolic Programming System: Sistema de Programación Simbólica). SPS-1 podía utilizarse en máquinas con 1,4 K posiciones de memoria. SPS-2 requería un mínimo de 4 K posiciones de memoria.

## Caracteres y códigos de operación

    Nota: En la tabla que sigue, si el bit de marca de palabra está activo, el bit C será el opuesto del mostrado. El bit C era determinado y verificado automáticamente por la máquina, normalmente los programadores no necesitaban preocuparse por él. La única forma de especificar el bit C era utilizando los interruptores del panel de mantenimiento. Aunque este panel era principalmente para uso de los técnicos de hardware (CEs), un programador podía utilizar sus interruptores para aplicar parches rápidos durante la depuración de programas.
| Carácter BCD | Print-A | Print-H | Tarjeta | BCD sin M | Operación | Definición y Observaciones |
| Espacio | | | | C | | |
| . | . | . | 12-3-8 | BA8 21 | Halt | |
| ¤ | ¤ | ) | 12-4-8 | CBA84 | Clear Word Mark | Rombo |
| [ | | | 12-5-8 | BA84 1 | | |
| < | | | 12-6-8 | BA842 | | Menor que |
| | | | 12-7-8 | CBA8421 | | Marca de Grupo |
| & | & | + | 12 | CBA | | |
| $ | $ | $ | 11-3-8 | CB 8 21 | | |
| * | * | * | 11-4-8 | B 84 | | |
| ] | | | 11-5-8 | CB 84 1 | | |
| ; | | | 11-6-8 | CB 842 | | |
| ? | | | 11-7-8 | B 8421 | | Delta (Cambio de Modo) |
| - | - | - | 11 | B | | |
| / | / | / | 0-1 | C A 1 | Clear Storage | |
| , | , | , | 0-3-8 | C A8 21 | Set Word Mark | |
| % | % | ( | 0-4-8 | A84 | Divide | Funcionalidad opcional. |
| ? | | | 0-5-8 | C A84 1 | | Separador de Palabras |
| \ | | | 0-6-8 | C A842 | | Oblicuo izquierdo |
| ? | | | 0-7-8 | A8421 | | Marca de Segmento de Cinta |
| ? | ? | ? | N/A 0 | A | | No se puede leer desde tarjeta. Perforado como cero. Espacio con "paridad-par" en cinta. |
| # | # | = | 3-8 | 8 21 | Modify Address | Opcional (requiere más de 4000 posiciones de memoria) |
| @ | @ | ' | 4-8 | C 84 | Multiply | Funcionalidad opcional. |
| : | | | 5-8 | 84 1 | | |
| > | | | 6-8 | 842 | | Mayor que |
| ?$^?$ | | | 7-8 | C 8421 | | Marca de Cinta |
| ? | & | & | 12-0 | CBA8 2 | Zero and Add | Plus Zero |
| A | A | A | 12-1 | BA 1 | Add | |
| B | B | B | 12-2 | BA 2 | Branch | |
| C | C | C | 12-3 | CBA 21 | Compare | |
| D | D | D | 12-4 | BA 4 | Move Numerical | (Bits) |
| E | E | E | 12-5 | CBA 4 1 | Move Characters and Edit | |
| F | F | F | 12-6 | CBA 42 | Control Carriage | (Impresora) |
| G | G | G | 12-7 | BA 421 | | |
| H | H | H | 12-8 | BA8 | Store B-Address Register | Funcionalidad opcional. |
| I | I | I | 12-9 | CBA8 1 | | |
| ! | - | - | 11-0 | B 8 2 | Zero and Subtract | Minus Zero |
| J | J | J | 11-1 | CB 1 | | |
| K | K | K | 11-2 | CB 2 | Select Stacker | (Tarjeta perforada) |
| L | L | L | 11-3 | B 21 | Load Characters to Word Mark | |
| M | M | M | 11-4 | CB 4 | Move Characters to Word Mark | |
| N | N | N | 11-5 | B 4 1 | No Operation | |
| O | O | O | 11-6 | B 42 | | |
| P | P | P | 11-7 | CB 421 | Move Characters to Record or Group Mark | Funcionalidad opcional. |
| Q | Q | Q | 11-8 | CB 8 | Store A-Address Register | Funcionalidad opcional. |
| R | R | R | 11-9 | B 8 1 | | |
| ? | ? | ? | 0-2-8 | A8 2 | | Marca de registro |
| S | S | S | 0-2 | C A 2 | Subtract | |
| T | T | T | 0-3 | A 21 | | |
| U | U | U | 0-4 | C A 4 | Control Unit | (Cinta) |
| V | V | V | 0-5 | A 4 1 | Branch if Word Mark and/or Zone | |
| W | W | W | 0-6 | A 42 | Branch if Bit Equal | Funcionalidad opcional. |
| X | X | X | 0-7 | C A 421 | Move and Insert Zeros | Funcionalidad opcional. |
| Y | Y | Y | 0-8 | C A8 | Move Zone | (Bits) |
| Z | Z | Z | 0-9 | A8 1 | Move Characters and Suppress Zeros | |
| 0 | 0 | 0 | 0 | C 8 2 | | |
| 1 | 1 | 1 | 1 | 1 | Read a Card | |
| 2 | 2 | 2 | 2 | 2 | Write a Line | |
| 3 | 3 | 3 | 3 | C 21 | Write and Read | |
| 4 | 4 | 4 | 4 | 4 | Punch a Card | |
| 5 | 5 | 5 | 5 | C 4 1 | Read and Punch | |
| 6 | 6 | 6 | 6 | C 42 | Write and Punch | |
| 7 | 7 | 7 | 7 | 421 | Write, Read, and Punch | |
| 8 | 8 | 8 | 8 | 8 | Start Read Feed | Funcionalidad opcional. |
| 9 | 9 | 9 | 9 | C 8 1 | Start Punch Feed | Funcionalidad opcional. |

## Implementación hardware

La mayoría de la circuitería lógica del 1401 consistía en un tipo de DTL al que IBM llamaba CTDL. Otros tipos de circuitos IBM utilizados eran: Alloy (algunas funciones lógicas, pero fundamentalmente funciones no lógicas; tomaba su nombre del tipo de transistores que utilizaba), CTRL (un tipo de RTL). Actualizaciones posteriores (por ejemplo, la interfaz de cinta TAU-9) utilizaban un tipo de DTL más rápido, que IBM llamaba SDTDL y que incorporaba un modelo de transistor inventado por Herbert Kroemer en 1953 ("drift" transistor) por su mayor velocidad.
Estos circuitos se fabricaban con componentes discretos montados en circuitos impresos de papel de resina epóxica en una cara, bien de 38x114 mm con un conector de 16 pines (ancho simple), o bien de 82x114 mm con dos conectores de 16 pines (doble ancho). IBM se refería a ellos como tarjetas SMS Standard Modular System: Sistema Modular Estándar. La cantidad de lógica en un circuito impreso era similar a la de un circuito SSI de la serie 7400 o a la de un MSI (por ejemplo, de tres a cinco puertas lógicas o un par de flip-flops en un circuito de ancho simple hasta alrededor de veinte puertas lógicas o cuatro flip-flops en un circuito de doble ancho). Estos circuitos se insertaban en bastidores.

## Arte Inspirado por el IBM 1401

En octubre de 2006, la respetada discográfica independiente 4AD (Los Pixies, Dead Can Dance, Scott Walker) publicó un disco del músico islandés de vanguardia Jóhann Jóhannsson. El título del disco es 'IBM 1401, A User's Manual' (IBM 1401, Un Manual de Usuario). Está basado en un trabajo que su padre, Jóhann Gunnarsson, ingeniero jefe de mantenimiento de uno de los primeros ordenadores del país, y Elias Davidsson, uno de los primeros programadores del país, hicieron en 1964. Fue escrito originalmente para cuarteto de cuerda, órgano y electrónica, para acompañar una obra de danza de Erna Ómarsdóttir. Para la grabación del disco, Johann lo ha reescrito para una orquesta de cuerda de sesenta componentes, ha añadido un movimiento final y ha incorporado grabaciones electrónicas cinta-a-cinta de época de un ordenador IBM 1401 encontradas en el ático de su padre. El resultado es asombroso. Enlace a muestras mp3 del disco.
Un sketch de los primeros tiempos de los Muppets de Jim Henson parece parodiar un manual de formación técnica. Un prototipo del monstruo de las galletas, con los dientes más afilados, se come una máquina compleja mientras lee su propio manual de instrucciones en voz alta. Vídeo Youtube .