IBM 1401
Primer procesador del Centro Único de Procesamiento Electrónico de Datos, heredado del Centro de cómputos del Banco Hipotecario Nacional. 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.
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.
The IBM 1401
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ínea IBM 1403).A lo largo de su tiempo de permanencia en el mercado se fabricaron alrededor de 20.000 sistemas, haciendo 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 2.500 dólares en adelante, dependiendo de la configuración. A finales de 1961 el número de 1401 instalados tan solo en los Estados Unidos de América había llegado a 2.000, representando aproximadamente uno de cada cuatro ordenadores electrónicos de programa almacenado de todos los fabricantes instalados 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 1401, 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 alguno de los empresarios de software de la India en 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 (work mark). El formato era el siguiente:
C B A 8 4 2 1 M
El 1401 estaba disponible con cinco configuraciones de memoria: 1,4K, 2K, 4K, 8K, o 16K (un número muy reducido de 1401s fueron ampliados a 32K 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 4.000 bytes en total. Los bits de zona del byte menos significativo especificaban incrementos de 4000, 8000 ó 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 sólo contenían un código de operación. Estos eran, bien instrucciones de un byte propiamente dichas, o bien eran instrucciones 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.
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 (work mark). El formato era el siguiente:
C B A 8 4 2 1 M
El 1401 estaba disponible con cinco configuraciones de memoria: 1,4K, 2K, 4K, 8K, o 16K (un número muy reducido de 1401s fueron ampliados a 32K 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 4.000 bytes en total. Los bits de zona del byte menos significativo especificaban incrementos de 4000, 8000 ó 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 sólo contenían un código de operación. Estos eran, bien instrucciones de un byte propiamente dichas, o bien eran instrucciones 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 4K posiciones de memoria.
FARGO (Fourteen-o-one Automatic Report Generation Operation: Generación Automática de Informes 1401), un precedesor de RPG, requería 4K.
FORTRAN II estaba disponible para sistemas con al menos 8K 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 8K 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).[4] SPS-1 podía utilizarse en máquinas con 1,4K posiciones de memoria. SPS-2 requería un mínimo de 4K posiciones de memoria.
Caracteres y códigos de operación
El software del 1401 incluía:
Autocoder, un ensamblador más avanzado, requería un mínimo de 4K posiciones de memoria.
FARGO (Fourteen-o-one Automatic Report Generation Operation: Generación Automática de Informes 1401), un precedesor de RPG, requería 4K.
FORTRAN II estaba disponible para sistemas con al menos 8K 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 8K 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).[4] SPS-1 podía utilizarse en máquinas con 1,4K posiciones de memoria. SPS-2 requería un mínimo de 4K 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 BCDPrint-APrint-HTarjetaBCD
sin MOperaciónDefinición
y Observaciones
Espacio C
...12-3-8 BA8 21Halt
¤¤)12-4-8CBA84 Clear Word MarkRombo
[ 12-5-8 BA84 1
<> 6-8 842 Mayor que
?? 7-8C 8421 Marca de Cinta
?&&12-0CBA8 2 Zero and AddPlus Zero
AAA12-1 BA 1Add
BBB12-2 BA 2 Branch
CCC12-3CBA 21Compare
DDD12-4 BA 4 Move Numerical(Bits)
EEE12-5CBA 4 1Move Characters and Edit
FFF12-6CBA 42 Control Carriage(Impresora)
GGG12-7 BA 421
HHH12-8 BA8 Store B-Address RegisterFuncionalidad opcional.
III12-9CBA8 1
!--11-0 B 8 2 Zero and SubtractMinus Zero
JJJ11-1CB 1
KKK11-2CB 2 Select Stacker(Tarjeta perforada)
LLL11-3 B 21Load Characters to Word Mark
MMM11-4CB 4 Move Characters to Word Mark
NNN11-5 B 4 1No Operation
OOO11-6 B 42
PPP11-7CB 421Move Characters to
Record or Group MarkFuncionalidad opcional.
QQQ11-8CB 8 Store A-Address RegisterFuncionalidad opcional.
RRR11-9 B 8 1
? ? ?0-2-8 A8 2 Marca de registro
SSS0-2C A 2 Subtract
TTT0-3 A 21
UUU0-4C A 4 Control Unit(Cinta)
VVV0-5 A 4 1Branch if Word Mark
and/or Zone
WWW0-6 A 42 Branch if Bit EqualFuncionalidad opcional.
XXX0-7C A 421Move and Insert ZerosFuncionalidad opcional.
YYY0-8C A8 Move Zone(Bits)
ZZZ0-9 A8 1Move Characters and
Suppress Zeros
0000C 8 2
1111 1Read a Card
2222 2 Write a Line
3333C 21Write and Read
4444 4 Punch a Card
5555C 4 1Read and Punch
6666C 42 Write and Punch
7777 421Write, Read, and Punch
8888 8 Start Read FeedFuncionalidad opcional.
9999C 8 1Start Punch FeedFuncionalidad opcional.
Carácter BCDPrint-APrint-HTarjetaBCD
sin MOperaciónDefinición
y Observaciones
Espacio C
...12-3-8 BA8 21Halt
¤¤)12-4-8CBA84 Clear Word MarkRombo
[ 12-5-8 BA84 1
<> 6-8 842 Mayor que
?? 7-8C 8421 Marca de Cinta
?&&12-0CBA8 2 Zero and AddPlus Zero
AAA12-1 BA 1Add
BBB12-2 BA 2 Branch
CCC12-3CBA 21Compare
DDD12-4 BA 4 Move Numerical(Bits)
EEE12-5CBA 4 1Move Characters and Edit
FFF12-6CBA 42 Control Carriage(Impresora)
GGG12-7 BA 421
HHH12-8 BA8 Store B-Address RegisterFuncionalidad opcional.
III12-9CBA8 1
!--11-0 B 8 2 Zero and SubtractMinus Zero
JJJ11-1CB 1
KKK11-2CB 2 Select Stacker(Tarjeta perforada)
LLL11-3 B 21Load Characters to Word Mark
MMM11-4CB 4 Move Characters to Word Mark
NNN11-5 B 4 1No Operation
OOO11-6 B 42
PPP11-7CB 421Move Characters to
Record or Group MarkFuncionalidad opcional.
QQQ11-8CB 8 Store A-Address RegisterFuncionalidad opcional.
RRR11-9 B 8 1
? ? ?0-2-8 A8 2 Marca de registro
SSS0-2C A 2 Subtract
TTT0-3 A 21
UUU0-4C A 4 Control Unit(Cinta)
VVV0-5 A 4 1Branch if Word Mark
and/or Zone
WWW0-6 A 42 Branch if Bit EqualFuncionalidad opcional.
XXX0-7C A 421Move and Insert ZerosFuncionalidad opcional.
YYY0-8C A8 Move Zone(Bits)
ZZZ0-9 A8 1Move Characters and
Suppress Zeros
0000C 8 2
1111 1Read a Card
2222 2 Write a Line
3333C 21Write and Read
4444 4 Punch a Card
5555C 4 1Read and Punch
6666C 42 Write and Punch
7777 421Write, Read, and Punch
8888 8 Start Read FeedFuncionalidad opcional.
9999C 8 1Start Punch FeedFuncionalidad 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.
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.
Video extraido de los archivos de la Historia de IBM
FUNCIONA HOY EL C.U.P.E.D
ResponderEliminar