La entrada de datos y programas se hacía por medio de fichas perforadas de 90 columnas (en realidad cada ficha contenía dos filas de 45 columnas con cuatro posibles perforaciones redondas cada una). La salida de resultados también se obtenía en fichas perforadas, que debían llevarse luego a una tabuladora para imprimirlas.
Por cada posición de las líneas impresas, la tabuladora tenía una barra vertical con todos los caracteres imprimibles. Las fichas perforadas iban leyéndose de una en una, y todas las barras se movían, subiendo y bajando, para colocar los caracteres adecuados frente a la cinta entintada. Con un golpe seco, las barras oprimían la cinta contra el papel y se imprimía una línea.
La memoria central era un tambor con 25 pistas, 20 con una cabeza lectora/escritora y 5 (¡de acceso rápido!) con cuatro. Cada pista contenía 200 celdas que podían contener "palabras" de 10 dígitos más signo. Los dígitos estaban formados por cuatro bits, en código “biquinario” (1-2-4-5). Es decir, que en total tenía 200.000 bits = 200k bits (si contáramos en bytes, como actualmente, serían 25K bytes y … ¡calculábamos reactores nucleares!).
Como el tambor giraba a una velocidad de 17667 revoluciones por minuto, el tiempo máximo de acceso a una celda (una vuelta completa del tambor) era de 3,4 milisegundos. Como unidad de tiempo se tomaba la "palabra-tiempo" que era el tiempo que tardaba una celda en ser leída o escrita (17 microsegundos).
Las “palabras” podían contener un dato o una instrucción. En las instrucciones, los dos primeros dígitos indicaban la operación que había que realizar. Los cuatro siguientes, la “dirección” (posición en el tambor) del operando. Y los cuatro últimos, la dirección de la próxima instrucción.
En aquellos primeros momentos se escribían los programas en código máquina directamente. La Remington no proporcionó una primera versión de un lenguaje superior para usuarios científicos (FORTRAN) hasta dos años después.
Las operaciones se realizaban en un “registro” (había tres: rA, rL y rX, con distintas funciones) y no existía “memoria caché” para acelerar el trabajo. Así, para sumar una cierta cantidad a un dato, había que escribir lo siguiente:
Dirección Instrucción
1734 25 3172 1177
1177 70 3190 1195
1195 60 3172 1178
La primera instrucción, que está en la posición 1734, indica que hay que llevar al registro rA (25) el dato que está en la posición 3172 y ejecutar a continuación la instrucción que está en la posición 1177. La segunda instrucción dice: sumar (70), a lo que hay en rA, lo que hay en la posición 3190 y ejecutar la instrucción que se encuentra en la posición 1195. La tercera dice: guardar el contenido de rA (60) a la posición 3172 y tomar la próxima instrucción de la posición 1178…
Lo más cómodo hubiera sido poner las instrucciones en posiciones consecutivas (1734, 1735, 1736, …), pero hay que tener en cuenta que una palabra solo se podía leer o escribir en el momento en que, al girar el tambor, pasaba por delante de una cabeza lectora/grabadora, y en cada pista solo había una (menos en las últimas). Si se hubiera hecho así, cada instrucción habría durado una vuelta de tambor (y con un poco de mala suerte, dos) ya que, mientras se ejecutaba una instrucción, el tambor ya había sobrepasado la siguiente posición.
En el ejemplo, la suma habría durado poco más de una vuelta (3,4 milisegundos). Sabíamos, por ejemplo, que sumar un dato (70) tardaba cinco “palabras-tiempo”, por lo que si el dato a sumar estaba en la posición 3190, la próxima instrucción debía estar a una distancia mínima de cinco palabras (módulo 200). Si en vez de guardar el resultado en el sitio original pudiéramos guardarlo en otro sitio, la duración podría haber sido menor.
La unidad aritmética trabajaba con números de 10 cifras con la coma decimal delante de ellas. Es decir, con números comprendidos entre -1 y +1. Hubo que hacer subrutinas para trabajar en "coma decimal flotante" y así poder trabajar con números comprendidos en valor absoluto entre 10-50 y 1050, imprescindibles para cálculos científicos. Esto implicaba que una simple operación aritmética podía durar unas cuantas vueltas de tambor.
La unidad aritmética trabajaba con números de 10 cifras con la coma decimal delante de ellas. Es decir, con números comprendidos entre -1 y +1. Hubo que hacer subrutinas para trabajar en "coma decimal flotante" y así poder trabajar con números comprendidos en valor absoluto entre 10-50 y 1050, imprescindibles para cálculos científicos. Esto implicaba que una simple operación aritmética podía durar unas cuantas vueltas de tambor.
Al programar, además de la hoja en que se escribían las instrucciones, teníamos al lado un “mapa” de la memoria, en la que íbamos anotando las posiciones que íbamos utilizando y, si eran datos, su contenido. Utilizábamos además una tarjeta del tamaño del DNI (que diseñé yo) en la que estaba resumido todo lo que se podía hacer con la máquina:
Mis primeros trabajos con la Univac consistieron en programar las funciones de uso más común: trigonométricas, hiperbólicas, exponenciales, logarítmicas, de Bessel, raíces, determinantes, etc., cosa que me vino muy bien después para redactar mi tesis doctoral, que versó sobre aproximación de funciones.
Muy interesante!!! Sigue contándonos todas las cosas que has hecho!
ResponderEliminarUna pregunta... era portatil?.... jejeje
ResponderEliminarUn saludo amigo florentino, very good information..