El IBM 704 es un gran ordenador central digital introducido por IBM en 1954. Fue el primer ordenador producido en masa con hardware para aritmética de punto flotante . [1] El Manual de operación de IBM 704 establece: [2]
La máquina de procesamiento de datos electrónicos tipo 704 es una calculadora electrónica de gran escala y alta velocidad controlada por un programa almacenado internamente del tipo de dirección única.
Por lo tanto, el 704 en ese momento se consideraba "prácticamente el único ordenador que podía manejar matemáticas complejas". [3] El 704 supuso una mejora significativa con respecto al anterior IBM 701 en términos de arquitectura e implementación. Al igual que el 701, el 704 utiliza circuitos lógicos de tubo de vacío , pero aumentó el tamaño de las instrucciones de 18 bits a 36 bits , el mismo que el tamaño de las palabras de la memoria. Los cambios con respecto al 701 incluyen el uso de memoria de núcleo magnético en lugar de tubos Williams , instrucciones aritméticas de punto flotante, direccionamiento de 15 bits y la adición de tres registros de índice . Para admitir estas nuevas funciones, las instrucciones se ampliaron para utilizar la palabra completa de 36 bits. El nuevo conjunto de instrucciones , que no es compatible con el 701, se convirtió en la base de la subclase de "arquitectura científica" de las computadoras de la serie IBM 700/7000 .
El 704 puede ejecutar hasta 12.000 adiciones de punto flotante por segundo. [1] IBM produjo 123 sistemas tipo 704 entre 1955 y 1960. [4]
Los lenguajes de programación FORTRAN [5] y LISP [6] se desarrollaron por primera vez para el 704, al igual que el ensamblador SAP: Programa de ensamblaje simbólico , que luego distribuyó SHARE como SHARE Assembly Program .
MUSIC , el primer programa musical de computadora, fue desarrollado en el IBM 704 por Max Mathews .
En 1962, el físico John Larry Kelly, Jr. creó uno de los momentos más famosos en la historia de los Laboratorios Bell utilizando una computadora IBM 704 para sintetizar el habla. El vocoder sintetizador de la grabadora de voz de Kelly recreó la canción Daisy Bell , con acompañamiento musical de Max Mathews . Arthur C. Clarke estaba casualmente visitando a su amigo y colega John Pierce en las instalaciones de Bell Labs Murray Hill en el momento de esta demostración de síntesis de voz , y Clarke quedó tan impresionado que seis años más tarde la utilizó en la escena culminante de su novela y guión de 2001: Odisea en el espacio , [7] donde el ordenador HAL 9000 canta la misma canción. [8] (Bell Laboratories publicó más tarde una grabación, en discos de diez pulgadas y 78 RPM, de voz y música creadas de esta manera. Aparentemente se hizo con un IBM 7090 , el sucesor de estado sólido del 704.) [ cita necesaria ]
Edward O. Thorp , profesor de matemáticas en el MIT, utilizó el IBM 704 como herramienta de investigación para investigar las probabilidades de ganar mientras desarrollaba su teoría del juego de blackjack . [9] [10] Usó FORTRAN para formular las ecuaciones de su modelo de investigación.
El IBM 704 en el Centro de Computación del MIT se utilizó como rastreador oficial para la Operación Moonwatch del Observatorio Astrofísico Smithsonian en el otoño de 1957. IBM proporcionó cuatro científicos para ayudar a los científicos y matemáticos del Observatorio Astrofísico Smithsonian en el cálculo de las órbitas de los satélites: Dr. Giampiero Rossoni, Dr. John Greenstadt, Thomas Apple y Richard Hatch.
El IBM 704 se utilizó para análisis de la dinámica de vuelo de los cohetes Vanguard del NRL . [11]
El Laboratorio Científico de Los Álamos (LASL) desarrolló uno de los primeros monitores llamado SLAM para permitir el procesamiento por lotes . [12]
El IBM 704 tiene un acumulador de 38 bits , un registro multiplicador/cociente de 36 bits y tres registros de índice de 15 bits . El contenido de los registros de índice se resta de la dirección base, por lo que los registros de índice también se denominan "registros de decremento". Los tres registros de índice pueden participar en una instrucción: el campo de etiqueta de 3 bits en la instrucción es un mapa de bits que especifica cuál de los registros participa en la operación. Sin embargo, cuando se selecciona más de un registro de índice, sus contenidos se someten a una operación OR bit a bit (no se suman) antes de que se produzca la disminución. Este comportamiento persistió en máquinas de arquitectura científica posteriores (como la IBM 709 y la IBM 7090 ) hasta la IBM 7094 . El IBM 7094, introducido en 1962, aumentó el número de registros de índice a siete y sólo seleccionó uno a la vez; el comportamiento "o" permanece disponible en un modo de compatibilidad del IBM 7094. [13]
Hay dos formatos de instrucción, denominados "Tipo A" y "Tipo B". [14] La mayoría de las instrucciones eran del tipo B.
Las instrucciones de tipo A tienen, en secuencia, un prefijo de 3 bits (código de instrucción), un campo de decremento de 15 bits , un campo de etiqueta de 3 bits y un campo de dirección de 15 bits . Hay operaciones de salto condicional basadas en los valores de los registros de índice especificados en el campo de etiqueta . Algunas instrucciones también restan el campo de decremento del contenido de los registros de índice. La implementación requiere que los segundos 2 bits del código de instrucción sean distintos de cero, lo que da un total de seis posibles instrucciones de tipo A. Uno (STR, código de instrucción binario 101) no se implementó hasta el IBM 709 .
Las instrucciones de tipo B tienen, en secuencia, un código de instrucción de 12 bits (con los bits 2 y 3 establecidos en 0 para distinguirlas de las instrucciones de tipo A), un campo de bandera de 2 bits, 4 bits no utilizados, un campo de etiqueta de 3 bits , y un campo de dirección de 15 bits .
El conjunto de instrucciones subdivide implícitamente el formato de datos en los mismos campos que las instrucciones de tipo A: prefijo, decremento, etiqueta y dirección. Existen instrucciones para modificar cada uno de estos campos en una palabra de datos sin cambiar el resto de la palabra, aunque la instrucción Store Tag no se implementó en el IBM 704.
La implementación original de Lisp utiliza los campos de dirección y decremento para almacenar el principio y el final de una lista vinculada , respectivamente. Las funciones primitivas car ("contenido de la parte de dirección del registro") y cdr ("contenido de la parte de decremento del registro") recibieron el nombre de estos campos. [15]
El 704 incluye controles para: un lector de tarjetas perforadas 711 , una impresora alfabética 716 , un registrador de tarjetas perforadas 721, cinco unidades de cinta magnética 727 y una unidad de control de cinta 753, un lector y grabador de tambor magnético 733 y un núcleo magnético 737. Unidad de almacenamiento. La masa total fue de aproximadamente 19.466 libras (9,7 toneladas cortas; 8,8 t). [16] [17]
El 704 en sí venía con una consola de control que tenía 36 interruptores o botones de control variados y 36 interruptores de entrada de datos, uno para cada bit de un registro. Básicamente, la consola de control solo permite configurar los valores binarios de los registros con interruptores y ver el estado binario de los registros mostrados en el patrón de muchas pequeñas lámparas de neón, que se parecen mucho a los LED modernos. Para la interacción humana con la computadora, los programas se ingresarían inicialmente en tarjetas perforadas en lugar de en la consola, y la salida legible por humanos se dirigiría a la impresora.
También estaba disponible el registrador de salida de tubo de rayos catódicos IBM 740 , que es una pantalla vectorial de 21 pulgadas con un tiempo de persistencia de fósforo muy largo de 20 segundos para la visualización humana, junto con una pantalla de 7 pulgadas que recibe la misma señal que la pantalla más grande pero con un fósforo de rápida descomposición diseñado para ser fotografiado con una cámara adjunta. [18]
La unidad de almacenamiento de núcleo magnético 737 sirve como RAM y proporciona 4.096 palabras de 36 bits, el equivalente a 18.432 bytes. [19] Las unidades de cinta magnética 727 almacenan más de 5 millones de caracteres de 6 bits por carrete.
En su época, la 704 era una máquina excepcionalmente fiable. Sin embargo, al ser una máquina de tubos de vacío, la IBM 704 tenía una confiabilidad muy pobre para los estándares actuales. En promedio, la máquina fallaba aproximadamente cada 8 horas, [20] [21] lo que limitaba el tamaño del programa que los primeros compiladores de Fortran podían traducir con éxito porque la máquina fallaba antes de una compilación exitosa de un programa grande. [21]