scieee AI-readable full text Open interactive document viewer

Arqueología informática: la calculadora programable Programma 101

Estrella Contreras, Antonio

Abstract

[EN] The Olivetti Programma 101 first appeared in the Universal Exhibition of New York in 1965 and it was in the market the same year. By then, it was a great technological advantage, it was consider as the first personal computer of all time. Its usage spread in a domestic scope as well as in a business one. It was used in NASA large projects and in the Vietnam War. Its succeed finished when the Hewlwtt Packard released the HP 9100, completely based on the Programma 101, supplanting it of the market. This project is a historic study as well as it is a deep analysis of the archeology and the programming of this computer, and at the same time, a comparation of a processor with structure RISC is made. Taking into account the historic value of the Programma 101, part of this project has been useful to develop a web page to the Museum of Informatics of the School of Informatics - iSchool at the UPV, and it contributed to the digital heritage spreading.

Full text

Escola Tècnica Superior d’Enginyeria Informàtica Universitat Politècnica de València Arqueología informática: la calculadora programable Programma 101 Trabajo Fin de Grado Grado en Ingeniería Informática Autor: Antonio Estrella Contreras Director: Xavier Molero Prieto 29 de julio de 2015 A Ana, David y todos aquellos familiares y amigos que me han ayudado y apoyado. Resumen La Olivetti Programma 101 fue presentada en sociedad en la Exposición Universal de Nueva York de 1965 y empezó a ser comercializada ese mismo año. Para entonces fue un gran avance tecnológico, tanto, que llegó a considerarse el primer ordenador personal de la historia. Su utilización se extendió en el ámbito doméstico y empresarial. Fue utilizada en proyectos de gran envergadura de la NASA y en la guerra de Vietnam. Este éxito finalizó cuando la empresa Hewlett Packard sacó al mercado su producto HP 9100 basado en todos los aspectos en la Programma 101, desbancándola del mercado. En este trabajo, además de un estudio histórico, se realiza un análisis de la arquitectura y programación de este ordenador, al tiempo que se elaboran comparaciones con un procesador con arquitectura RISC. Dado el gran valor histórico de la Programma 101, parte de este trabajo ha servido para desarrollar una página web destinada al Museo de Informática de la Escuela Técnica Superior de Ingeniería Informática de la UPV y contribuir así a la difusión del patrimonio digital. Palabras clave: Olivetti Programma 101, ordenador personal, MIPS R2000, arqueología informática, Museo de Informática. Resum La Olivetti Programma 101 va ser presentada en societat en l’Exposició Universal de Nova York de 1965 i va començar a ser comercialitzada aqueix mateix any. Per a llavors va ser un gran avanç tecnològic, tant, que va arribar a considerarse el primer ordinador personal de la història. La seua utilització es va estendre en l’àmbit domèstic i empresarial. Va ser utilitzada en projectes de gran envergadura de la NASA i en la guerra de Vietnam. Aquest èxit va finalitzar quan l’empresa Hewlett Packard va traure al mercat el seu producte HP 9100 basat en tots els aspectes en la Programma 101, desbancant-la del mercat. En aquest treball, a més d’un estudi històric, es realitza una anàlisi de l’arquitectura i programació d’aquest ordinador, al mateix temps que s’elaboren comparacions amb un processador amb arquitectura RISC. Donat el gran valor històric de la Programma 101, part d’aquest treball ha servit per a desenvolupar una pàgina web destinada al Museu d’Informàtica de l’Escola Tècnica Superior d’Enginyeria Informàtica de la UPV i contribuir així a la difusió del patrimoni digital. Paraules clau: Olivetti Programma 101, ordinador personal, MIPS R2000, arqueologia informàtica, Museu d’Informàtica. Abstract The Olivetti Programma 101 first appeared in the Universal Exhibition of New York in 1965 and it was in the market the same year. By then, it was a great technological advantage, it was consider as the first personal computer of all time. Its usage spread in a domestic scope as well as in a business one. It was used in NASA large projects and in the Vietnam War. Its succeed finished when the Hewlwtt Packard released the HP 9100, completely based on the Programma 101, supplanting it of the market. This project is a historic study as well as it is a deep analysis of the archeology and the programming of this computer, and at the same time, a comparation of a processor with structure RISC is made. Taking into account the historic value of the Programma 101, part of this project has been useful to develop a web page to the Museum of Informatics of the School of Informatics - iSchool at the UPV, and it contributed to the digital heritage spreading. Keywords: Olivetti Programma 101, personal computer, MIPS R2000, computer archeology, Museum of Informatics. Índice general 1. Introducción 1 1.1. Motivación................................. 1 1.2. Objetivos ................................. 4 1.3. Estructura de la memoria . . . . . . . . . . . . . . . . . . . . . . . . 5 1.4. Uso del material bibliográfico . . . . . . . . . . . . . . . . . . . . . . 7 1.5. Agradecimientos.............................. 10 2. Contexto histórico 11 2.1. Panorama histórico: las generaciones . . . . . . . . . . . . . . . . . . 11 2.2. Desarrollo y presentación . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.3. Repercusión: prensa y publicidad . . . . . . . . . . . . . . . . . . . . 15 2.4. Situación empresarial . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3. Arquitectura interna 27 3.1. Tipo de electrónica y memoria . . . . . . . . . . . . . . . . . . . . . . 28 3.2. Tarjetamagnética............................. 31 3.3. Estética .................................. 34 4. Programación 39 4.1. Los registros y la memoria . . . . . . . . . . . . . . . . . . . . . . . . 39 4.2. Instrucciones ............................... 41 4.3. Introducción de constantes . . . . . . . . . . . . . . . . . . . . . . . . 43 4.4. Comparativa con el MIPS R2000 . . . . . . . . . . . . . . . . . . . . 44 5. Diseño de programas 49 5.1. Factorial.................................. 50 vii 5.2. Fibonacci ................................. 52 5.3. Ecuación de segundo grado . . . . . . . . . . . . . . . . . . . . . . . . 55 5.4. Coseno................................... 59 5.5. Aterrizajelunar.............................. 62 5.6. Órbitadeunsatélite ........................... 64 6. La calculadora HP 9100 69 6.1. Memoria: tecnología y distribución . . . . . . . . . . . . . . . . . . . 70 6.2. Manejo y programación . . . . . . . . . . . . . . . . . . . . . . . . . . 71 6.3. Interfaces y periféricos . . . . . . . . . . . . . . . . . . . . . . . . . . 73 7. Recursos en Internet 75 7.1. Wikipedia y webs de retroinformática . . . . . . . . . . . . . . . . . . 75 7.2. Simuladores................................ 80 8. Material didáctico 85 8.1. Estructura de las páginas web . . . . . . . . . . . . . . . . . . . . . . 88 9. Conclusiones 89 9.1. Líneasdefuturo.............................. 90 Bibliografía 91 Apéndice 95 A. Carta para la preservación del Patrimonio Digital 95 B. Patente 103 C. Plantilla de programación 121 D. Ejemplos de código 125 viii Índice de figuras 1.1. La Olivetti Programma 101 .................... 2 1.2. BanderadelaUNESCO ......................... 3 1.3. Manuales del fabricante . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.4. Revistas de retroinformática . . . . . . . . . . . . . . . . . . . . . . . 9 2.1. Equipo de desarrollo de la Programma 101 ............. 13 2.2. Exposición Universal de Nueva York de 1965 . . . . . . . . . . . . . . 15 2.3. Recortes de prensa sobre la Programma 101 ............. 16 2.4. Publicidad en lengua inglesa (1) . . . . . . . . . . . . . . . . . . . . . 17 2.5. Publicidad en lengua inglesa (2) . . . . . . . . . . . . . . . . . . . . . 18 2.6. Publicidad en España (1) . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.7. Publicidad en España (2) . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.8. Publicidad en todo el mundo . . . . . . . . . . . . . . . . . . . . . . . 20 2.9. La Programma 101 enlaNASA ................... 22 3.1. Arquitectura de von Neumann . . . . . . . . . . . . . . . . . . . . . . 27 3.2. Arquitectura de la Programma 101 .................. 28 3.3. Transistor2N708 ............................. 28 3.4. Interior de la Programma 101 ..................... 29 3.5. Memoria de línea de retardo . . . . . . . . . . . . . . . . . . . . . . . 30 3.6. Prototipo de memoria . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.7. Unidad de memoria de la Programma 101 .............. 31 3.8. Tarjeta magnética de la Programma 101 ............... 32 3.9. Modo de uso de la tarjeta magnética . . . . . . . . . . . . . . . . . . 33 3.10.Laimpresora ............................... 35 3.11. El teclado y el lector/grabador de tarjetas . . . . . . . . . . . . . . . 36 ix Introducción Colaborar con museos, archivos y bibliotecas nacionales en la preservación del patrimonio digital. Fomentar la investigación y formación, así como impulsar la difusión de conocimientos y experiencias. Promover que instituciones de investigación y universidades velen por conservar los datos procedentes de investigaciones. El rastro que nos deja el patrimonio digital en el transcurso de los tiempos y más concretamente el hardware y el software, nos enseña la evolución que ha sufrido el mundo de la informática desde sus inicios hasta la actualidad. De esta evolución se puede aprender, desde diversas perspectivas, cómo el ser humano se las ha ideado para solucionar mediante la informática los retos que se le planteaban en el día a día y en cada vez más ámbitos de la sociedad. Como la informática está involucrada en todos los aspectos de la vida, su historia es tan importante como la historia general y todo el mundo debería tener una mínima educación en este campo. De esta forma se valoraría más la informática de la actualidad, ya que se sabría qué ideas, dificultades, errores y logros han sido necesarios para llegar a ella. Todo aquello que nos enseña la historia de la informática en manos de los actuales y futuros ingenieros informáticos toma una especial relevancia, puesto que, como expertos en la materia que ya son o que llegarán a ser, podrán darle un sentido más constructivo a la información histórica, dar utilidad a puntos de vista que posiblemente ya estén descartados pero que con las nuevas tecnologías podrían volver a ser aprovechados, aprender de los logros y errores; en definitiva, la historia de la informática sirve como herramienta para el I+D+I en este ámbito. 1.2 Objetivos A partir de un objeto de estudio, que como se ha mencionado en la primera página de este documento, se trata de la Olivetti Programma 101, en este trabajo se pretende alcanzar los objetivos que se enumeran a continuación: 1. Se procede a situar a la Programma 101 dentro de un marco histórico para, de esa forma, hacernos una idea de en qué circunstancias tanto técnicas, empresariales como sociales, surgió esta máquina. Además se explica por quién, cómo y dónde fue desarrollada y presentada al público, y se muestra un panorama de la repercusión que tuvo su aparición tanto en la sociedad como en las empresas de aquella época. 2. Se analiza la arquitectura interna, el diseño y funcionamiento de la Programma 101 haciendo hincapié en el tipo de electrónica, memoria, novedades tecnológicas y en la facilidad de manejo mediante una específica organización de 4 1.3 Estructura de la memoria registros y un reducido juego de instrucciones. Con ello se intenta denotar el nivel de dificultad que supuso el desarrollo de la Programma 101 para sus diseñadores, sin tener ninguna referencia previa. 3. A continuación, se pretende mostrar la facilidad de programación de la Programma 101 diseñando y comentando programas de diversa índole utilizando su juego de instrucciones. Para ello, se han seleccionado unos algoritmos en los que el programador necesita hacer uso de las diversas funciones y características que ofrece esta máquina. 4. Se compara la arquitectura interna, funcionamiento y programación de la Programma 101 con el procesador MIPS R2000. Este se utiliza en la actualidad con propósito pedagógico en las asignaturas que se imparten en este centro relacionadas con la estructura y la arquitectura de computadores dentro de la titulación de Grado en Ingeniería Informática. Esta comparativa nos proporciona una referencia para dar una visión más concreta de cómo estaba formada, funcionaba y se programaba con la Programma 101. 5. La mayor parte de la información que se puede encontrar sobre la Programma 101 está en Internet, donde existen múltiples sitios dedicados a dicha máquina, ya que esta cuenta con un gran número de admiradores. Entre dichos admiradores hay personas que han desarrollado simuladores de esta. 6. Finalmente, formando parte de este trabajo y como colaboración con el proyecto de difusión cultural que está llevando a cabo el Museo de Informática, se han diseñado dos páginas web dedicadas a la Programma 101 —una en castellano y otra en valenciano— con carácter didáctico, para de esta forma, intentar darle toda la difusión posible y situarla en el lugar de la historia que le corresponde. 1.3 Estructura de la memoria Para el desarrollo de esta memoria se ha dividido su contenido en nueve capítulos y cuatro apéndices, entre todas estas secciones, se ha expuesto la información necesaria para cubrir los objetivos mencionados en el apartado anterior. A continuación se explica como se ha estructurado este trabajo: 1. Se ha realizado una introducción exponiendo; los motivos que originan la creación de este trabajo; los objetivos que pretende alcanzar; la estructura que se explica en este apartado; el uso del material bibliográfico que se ha realizado durante su desarrollo y los agradecimientos a las personas y entidades que han colaborado. 2. Tras una breve descripción sobre las generaciones en el mundo de las computadoras, se relata; cuándo, cómo y quién desarrolló la Programma 101; su 5 Introducción presentación, repercusión y aplicación de esta en la sociedad de aquella época y la situación empresarial que se vivía. 3. Se explica la arquitectura interna dando detalles del tipo de electrónica utilizada, la memoria ideada para este fin y las novedades como: las tarjetas magnéticas —y su correspondiente lector/grabador— y su estética diseñada expresamente para este desarrollo. 4. Procedemos a enseñar cómo está organizada la memoria y los registros, para fundamentar así, la descripción del juego de instrucciones —dividida según sus propósitos— y la introducción de constantes en tiempo de ejecución. Se acompaña esta sección con una comparativa de las características mencionadas de la Programma 101 con las del procesador MIPS R2000. 5. Se diseñan y comentan seis algoritmos; cinco funciones matemáticas, un simulador de aterrizaje lunar —la NASA (National Aeronautics and Space Administration) utilizó la Programma 101 con un programa de este tipo para la misión Apolo 11— y el cálculo de la órbita de un satélite alrededor de la Tierra. Este último fue mostrado en la presentación oficial al público en la Exposición Universal de Nueva York en 1965 y causó gran expectación. En esta sección también se realizan comparaciones con la programación del MIPS R2000. 6. Una vez se han descrito los aspectos técnicos de la Programma 101, se realiza lo propio para la calculadora programable de Hewlett Packard HP 9100, al mismo tiempo que se compara con la Olivetti. De esta forma podemos comprobar las semejanzas existentes entre ambas y entender porque la empresa norteamericana pagó 900000 dólares a la italiana en concepto de regalías. 7. Se enumeran y comentan los recursos en Internet más importantes consultados durante la realización de esta memoria y que versan sobre la Programma 101. En esta relación, se incluyen las referencias a sitios web de desarrolladores de simuladores. De entre todos los simuladores que podemos encontrar se han seleccionado dos para su descripción y aprendizaje de funcionamiento y así, con su uso, se pueden hacer demostraciones reales de su manejo. 8. Con la información recopilada en este trabajo y después de hacer una presentación del Museo de Informática, se procede a diseñar dos páginas para su sitio web. En esta sección, se detalla su estructura y el tipo de información que aporta —en formato texto, imagen y audiovisual— para darle toda la difusión posible a la Programma 101 y situarla en el lugar de la historia que le corresponde. 9. Exponemos las conclusiones que se alcanzan con este trabajo y que han surgido a partir de los objetivos descritos en el primer capítulo. También se hacen unas sugerencias de posibles futuros proyectos que han ido apareciendo en el transcurso de esta memoria. 6 1.4 Uso del material bibliográfico 10. Por último, se añaden unos apéndices donde se puede consultar información adicional como: la carta para la preservación del patrimonio digital — UNESCO—, la patente de la Programma 101, una plantilla de programación y una relación de esta cumplimentada con las seis programaciones correspondientes a los algoritmos descritos en este documento. 1.4 Uso del material bibliográfico Como se puede comprobar en el apartado de bibliografía y en las referencias a pie de página que se pueden encontrar a lo largo de este documento, se ha consultado un elevado número de material bibliográfico. El origen de todos ellos se puede clasificar en: libros, monografías, artículos en revistas, manuales técnicos del fabricante, enlaces a sitios web, la patente de la Programma 101 e incluso varios vídeos sobre esta. La recopilación de todo este material bibliográfico ha sido un trabajo dividido en tres fases; localización, análisis y aceptación, es decir, se ha tenido que buscar la información, comprobar si esta es válida para el propósito buscado y si no ha sido rechazada, se guarda para su uso en este documento. Entre los libros y monografías, nos podemos encontrar con material muy diverso, desde los altamente técnicos como el «Estructura y diseño de computadores: la interfaz software/hardware» [4] y «Organización y diseño de computadores: la interfaz hardware/software» [7], hasta los cercanos al género novelesco como el escrito por Pier Giorgio Perotto; «Programma 101 - L’invenzione del personal computer: Una storia appassionante mai raccontata» [27]. Tanto unos como otros han aportado información valiosa para el desarrollo de este documento. Unas de las fuentes de información más abundantes e importantes se encuentran en los recursos localizados en Internet, por ello se dedica el capítulo 7 expresamente a estos. Además de los encontrados en el apartado de la bibliografía y en el capítulo mencionado, se pueden encontrar a pie de página más referencias, ya que puntualmente se han consultado o se han obtenido imágenes. A través de Internet —mediante correo electrónico— se han obtenido; permisos de uso [22], simuladores [10, 3] e información adicional muy útil en esta memoria. Otro recurso obtenido de Internet es la patente de la Programma 101 [28], donde se puede consultar sus especificaciones y datos técnicos. Ha sido obtenida gracias al servicio que proporciona la empresa Google para el acceso a multitud de patentes. Respecto a los manuales del fabricante —Olivetti—, se han manejado cuatro de ellos; una biblioteca de programación —el volumen 1—, manual de programación, general, así como una referencia [18, 19, 20, 21]. En la figura 1.3 se muestran las portadas de estos. 7 Introducción Figura 1.3: Portadas de los manuales de Olivetti utilizados como material bibliográfico. 8 1.4 Uso del material bibliográfico Por otro lado, se han seleccionado dos artículos de la revista de retroinformática «Jurassic News» [11, 9] donde se habla de los dos simuladores seleccionados y que se describen en el capítulo 7. Las portadas de estas se pueden observar en la figura 1.4. Figura 1.4: Portadas de las revistas «Jurassic News» utilizadas como material bibliográfico. Y por último, el material bibliográfico en formato audiovisual ha sido de gran ayuda en la elaboración de este trabajo, concretamente han sido dos; el documental «Programma 101: La máquina que cambió el mundo» [31] y el vídeo de archivo «Italia - Presentato il calcolatore elettronico da tavolo» [1]. 9 Introducción 1.5 Agradecimientos Para el desarrollo de este trabajo se ha mantenido conversación a través de correo electrónico con la Associazione Archivio Storico Olivetti para pedir permiso de uso del material expuesto en su web. Por ello, agradezco a Lucia Alberton como interlocutora de la asociación las gestiones que ha realizado para la obtención de dicho permiso. Respecto a los simuladores, agradezco a Marco Galeotti su simulador que nos ha sido amablemente cedido a través de correo electrónico. También doy las gracias al ingeniero Claudio Larini, ya que tras ponerme en contacto con él a través de correos electrónicos, he recibido por su parte una gran disponibilidad, atención y colaboración en este trabajo así como la cesión de su simulador, información sobre él y los programas que integra. Finalmente, mi más sincero agradecimiento al director de este trabajo fin de grado, Xavier Molero Prieto, profesor del DISCA (Departamento de Informática de Sistemas y Computadores) y director del Museo de Informática, el cual me ha introducido y orientado en la temática de este documento, así como, la tutela y la corrección del proyecto tanto desde el punto de vista estructural, como de implementación. 10 CAPÍTULO 2 Contexto histórico En este capítulo se describe el momento en la historia de la informática en el que apareció la Programma 101, por quién y cómo fue desarrollada, cuándo y dónde fue presentada al público y su repercusión en la sociedad de aquella época. Además, se explican las diversas situaciones en las que se encontraron tanto la empresa Olivetti como el equipo de desarrollo ante las circunstancias empresariales del momento. 2.1 Panorama histórico: las generaciones La evolución de la informática está estrechamente ligada a la evolución que ha sufrido el hardware en el transcurso de la historia, ya que a medida que han surgido nuevos componentes, la informática ha podido aprovechar las ventajas y funcionalidades de estos para poder mejorar. La informática está clasificada históricamente en cinco generaciones [7] según el punto de la evolución de la tecnología del hardware en el que se encuentra. Según unas fuentes u otras las fechas varían e incluso el número de estas, algunos hasta añaden una sexta generación. Primera generación (1950-1959): La tecnología de las computadoras estaba basada en los tubos de vacío, unos componentes que necesitaban un gran consumo de energía, disipaban mucho calor, eran de tamaño considerable y su duración era muy limitada. Los computadores construidos con este tipo de componentes —por ejemplo UNIVAC I en 1951 e IBM 650 en 1953— eran muy grandes y pesados. A mediados y finales de esta generación se hace necesario la aparición de los primeros lenguajes de programación de alto nivel como el FORTRAN (1954), ALGOL (1958), LISP (1958) y COBOL (1959). Segunda generación (1960-1968): La aparición de un nuevo componente electrónico llamado transistor revolucionó el desarrollo de nuevos compu- Contexto histórico tadores —por ejemplo IBM 1401 en 1960 y ATLAS en 1962— reduciendo el consumo de energía, el tamaño y por tanto el peso, así como un aumento en prestaciones como la capacidad de memoria y la velocidad. Este desarrollo está acompañado con la aparición de nuevos lenguajes de programación de alto nivel más avanzados como el BASIC (1964). Tercera generación (1969-1977): La tecnología evolucionó de tal forma que apareció el circuito integrado (chip). Fue desarrollado por IBM —utilizado en la construcción del IBM 360 en 1964 y del DIGITAL PDP-11 en 1970— y contenía gran cantidad de transistores y otros componentes electrónicos discretos en una pequeña oblea de silicio. De esta forma se conseguirían mejorar aún más las ventajas que se obtuvieron en la generación anterior. El avance alcanzado en esta generación promovió la industria del software e hizo evolucionar los sistemas operativos. Cuarta generación (1978-199?): El poder de integración que se consiguió con los circuitos integrados gracias a las tecnologías LSI (Large-Scale Integration) y VLSI (Very-Large-Scale Integration) llevó a la creación por parte de la compañía norteamericana INTEL del primer microprocesador —INTEL 4004—. Este chip integraba, por primera vez, toda la electrónica necesaria para constituir bancos de registros, una unidad de control (UC) y una unidad aritmético/lógica (ALU), entre otros elementos. Quinta generación (199?- ): Para algunos autores esta última generación no existe, ya que no se enmarca en la clasificación por la evolución de la tecnología utilizada, sino por el uso que se da a la informática en los ámbitos del procesamiento paralelo, interconexión de computadores —redes—, inteligencia artificial, multimedia, entre otros. Esta clasificación nos sirve para enmarcar a la Programma 101 dentro de la segunda generación, ya que surgió en 1964 y su construcción estaba basada en componentes discretos, siendo los transistores el más importante de ellos. En esa misma década, los computadores seguían siendo muy grandes, incluso el IBM 360 que ya era una innovación por estar construido con circuitos integrados (tercera generación), eran de un tamaño considerable y dirigidos a unos usuarios muy especializados, todo lo contrario que la Programma 101. 2.2 Desarrollo y presentación En la primavera de 1962 Roberto Olivetti, el entonces presidente de la compañía italiana Olivetti, dio instrucciones al ingeniero Pier Giorgio Perotto (1930-2002) para iniciar el estudio de viabilidad de una calculadora electrónica capaz de automatizar una secuencia de instrucciones, al alcance de un usuario no especializado, a un 12 2.2 Desarrollo y presentación precio razonable y con unas dimensiones reducidas parecidas a las de una máquina de escribir. Pier Giorgio Perotto ideó una máquina pequeña, flexible, con memoria, fácil de usar y programable mediante un lenguaje de programación sencillo para que cualquier persona pudiera programarla, básicamente un ordenador personal. Tal y como escribió más tarde [27], una máquina que no solo destaque por su velocidad o potencia, sino más bien por su autonomía funcional, textualmente «[...] una macchina nella quale non venga solamente privilegiata la velocità o la potenza, ma piuttosto l’autonomia funzionale, [...]» —Pier Giorgio Perotto, 1995, ”Programma 101”.— Para desempeñar el encargo, Perotto creó un equipo de desarrollo con cuatro hombres más [22, 29]; Gastone Garziera, Giovanni De Sandre, Giancarlo Toppi y Giuliano Gaiti, estos junto con el segundo prototipo de la Programma 101 aparecen en la figura 2.1(a) menos Gaiti, que fue quien realizó la fotografía con la cámara de Perotto en agosto de 1964. (a) Equipo de desarrollo de la Programma 101.1 (b) Gastone Garziera.2 (c) Pier Giorgio Perotto.4 (d) Giancarlo Toppi.3 (e) Giovanni De Sandre.5 Figura 2.1: Equipo de desarrollo de la Programma 101 menos Giuliano Gaiti. Izquierda: Agosto de 1964. Derecha: Recientemente (mismo orden en ambas partes). El proyecto comenzó con unas especificaciones muy claras, pero la falta de una referencia de partida, debido a que nunca se había hecho nada parecido, añadió una gran dificultad en su realización. A esta falta de referencia se le añadía la prisa en que se debía realizar el proyecto, ya que no sabían si la competencia estaba trabajando en algo parecido y era muy importante que la Programma 101 saliera al mercado antes que cualquier otro posible producto similar. 1Imagen cortesía de Associazione Archivio Storico Olivetti, Ivrea, Italia. [22] 2http://www.p101.it/p101-tells-p101 3https://www.facebook.com/giancarlo.toppi.7 4Imagen cortesía de Associazione Archivio Storico Olivetti, Ivrea, Italia. [22] 5http://www.parlarealmicrofono.it/tag/giovanni-de-sandre 13 Contexto histórico Como se ha mencionado en la página anterior, Olivetti lanzó una campaña de publicidad de la Programma 101 por todo el mundo [16] y una muestra de este despliegue de medios en diferentes países se puede observar en la figura 2.8. Figura 2.8: De izquierda a derecha y de arriba a abajo: publicidad lanzada por Olivetti para la Programma 101 en Holanda, Italia8, Japón y Suiza8. Con esta campaña de publicidad, Olivetti tuvo que realizar una producción masiva de la máquina, por lo que la empresa se vio obligada a crear una nueva línea de producción en Pensilvania (Estados Unidos) llegando a vender 44 000 unidades a un precio de lanzamiento de 3 200 dólares, un precio mucho más reducido que los 8Imágenes cortesía de Associazione Archivio Storico Olivetti, Ivrea, Italia. [22] 20 2.3 Repercusión: prensa y publicidad 100000 dólares que valía la más barata de las grandes computadoras de IBM que en ese momento estaban en el mercado. La Programma 101 llegó a numerosos ámbitos donde nunca antes se había conocido el uso de ordenadores como es el caso, entre otros, de la medicina, pequeñas empresas, estudiantes, topógrafos y, como gran logro, llegó a introducirse dentro de la vida cotidiana de las personas, algo inimaginable para las grandes computadoras que en ese momento existían. Otro uso que se le dio a la Programma 101 fue en la planificación de operaciones bélicas en la Guerra de Vietnam (1959-1975) por parte de las fuerzas aéreas norteamericanas, más concretamente para calcular coordenadas en los bombardeos dirigidos desde tierra del B-52 Stratofortress. La agencia espacial norteamericana NASA compró en 1966 más de 10 unidades que utilizó en la elección de puntos de aterrizaje y en el cálculo de las maniobras de alunizaje [22] de la misión Apolo 11 que, en julio de 1969, llevó al hombre a la luna por primera vez. Como declaró en 2006 David W. Whittle, miembro de la NASA [17]: En el momento de Apolo 11 teníamos una computadora de escritorio, o algo así, o se parecía, llamada Olivetti Programma 101. Era una especie de supercalculadora. Era probablemente un cuadrado de pie y medio, y cerca de 8 pulgadas de altura. Podía sumar, restar, multiplicar y dividir, pero podía recordar una secuencia de estas operaciones y guardaba esa secuencia en una tarjeta magnética, una cinta magnética que era cerca de un pie y medio de largo y dos pulgadas de ancho. Así que podías escribir una secuencia, una secuencia de programación y cargarla ahí — La antena de alta ganancia del módulo lunar no era muy inteligente, no sabía dónde estaba la tierra. [...] Teníamos que correr cuatro programas separados en la Programma 101 [...] De la participación de la Programma 101 en este hito histórico también hay documentación gráfica que lo demuestra como las fotografías que se pueden ver en la figura 2.99. 9Imágenes cortesía de Associazione Archivio Storico Olivetti, Ivrea, Italia. [22] 21 Contexto histórico Figura 2.9: Fotografías tomadas en agosto de 1969 junto a personal de la NASA. 22 2.4 Situación empresarial 2.4 Situación empresarial Como se observa en la tabla 2.1, en los años 50 del siglo XX, Estados Unidos lideraba el mundo de la informática con nueve empresas, mientras tanto, una empresa situada en Ivrea (Italia) especializada en máquinas de escribir y calculadoras mecánicas llamada Olivetti y presidida por Adriano Olivetti invertía en tecnologías electrónicas creando el laboratorio de I+D en informática más importante de Europa. Tabla 2.1: Las nueve principales compañías del sector de la informática y electrónica en 1955 [24]. Tras la muerte de Adriano Olivetti en 1960, la empresa es heredada por su hijo Roberto Olivetti que dos años más tarde (1962) será quien mande desarrollar una calculadora electrónica y que llegaría a convertirse en una computadora diferente, la Programma 101. En 1964, poco antes de que la Programma 101 se diera a conocer, la empresa Olivetti se vio afectada por una crisis económica que obligó, en mayo de ese mismo año, a la entrada de nuevos accionistas (Pirelli, Mediobanca, IMI, la Centrale y Fiat) que decidieron desinvertir en electrónica y vender el 75% de la sección electrónica a la multinacional americana General Electric junto con todos los proyectos que allí se estaban desarrollando. Sin embargo, para evitar que la Programma 101 fuera a parar a manos de la empresa General Electric, Perotto y los miembros de su equipo cambiaron en todo el proyecto la denominación de «computadora» por 23 Contexto histórico «calculadora», de esta manera Perotto y su equipo de desarrollo se ocultaron dentro de la estructura corporativa de Olivetti y pudieron terminar su trabajo libremente. Después de la presentación de la Programma 101 en la Exposición Universal de Nueva York y su posterior éxito, los desarrolladores pensaron que debían proteger su producto frente a sus competidores, ya que sus partes podrían ser analizadas y copiadas, tal y como se pudo comprobar en 1968. Por ello, en marzo de 1965 presentaron en Estados Unidos la patente número 3.495.222 que se puede ver en el apéndice B [28], la cual está firmada por Pier Giorgio Perotto y Giovanni De Sandre. Inmediatamente después, Olivetti les hizo firmar una declaración de cesión a la empresa de todos los derechos a cambio de un dólar, que decía [27] según el propio Perotto en 1995. Cedo a la Olivetti, por un dólar [...], los derechos consiguientes a la invención descrita en la instancia de la patente número 3.495.222, depositada el 1 de marzo de 1965, a nombre de P.G. Perotto y otros, de título: Program Controlled Electronic Computer. Entre las miles de unidades de la Programma 101 vendidas por Olivetti, 100 fueron compradas por la empresa Hewlett Packard y más tarde —en 1968— apareció en el mercado la calculadora HP 9100. Esta calculadora tenía las mismas características que la de Olivetti pero con capacidades ampliadas, incluso utilizaba tarjetas magnéticas. Debido a las similitudes que existían entre estas dos máquinas, Hewlett Packard pagó, sin ir a juicio, 900 000 dólares a la empresa italiana en concepto de derechos o regalías y poder así utilizar la patente de la Programma 101 que años antes Pier Giorgio Perotto y Giovanni De Sandre habían cedido por la cifra simbólica de un dólar. Desde 1968, la competencia fue capaz de ponerse al día introduciendo en el mercado productos capaces de competir con la Programma 101, deshaciendo la oportunidad de obtener una posición de liderazgo en el mercado de la informática que, a partir de los años 70, culminó con los ordenadores personales —IBM en 1981— sin que Olivetti reaccionara al respecto. Además de la sospecha de un complot internacional contra los intereses de Italia, Pier Giorgio Perotto en el capítulo 6 «Un’occasione perduta?» de su libro [27], culpa a la dirección de la empresa de la ocasión perdida sobre los mercados, ya que en su opinión no protegió ni promovió la transferencia de tecnología (know-how) que tenía la sección electrónica de Olivetti en el momento de la venta a la General Electric. La directiva tenía una visión arcaica del poder donde se limitaban a invertir en tiempos de bonanza y desinvertir en periodos de crisis sin importarles nada todo aquello que estuviera fuera de su ámbito empresarial, como la cultura humanística y técnica. Esta forma de actuar de la dirección respecto a la Programma 101 fue más tarde objeto de estudio por la Universidad de Harvard como una ocasión perdida de negocio. Tras el éxito de la Programma 101, la empresa Olivetti no pudo remontar al no poder seguir el ritmo de la evolución en el desarrollo de arquitecturas en el 24 2.4 Situación empresarial campo de la informática, incluso a pesar de los intentos realizados con una gama de productos sucesores de la Programma 101 —P101— donde se adaptaban a los estándares de facto que iban apareciendo en el mercado como es el caso de: la P102, con puerto serie para conectarle periféricos; la P203, con memoria ampliada y conexión a una máquina de escribir eléctrica —Tekne3—; la P602, con mayor memoria, ROM con funciones predefinidas, juego de instrucciones ampliado y con una gama de periféricos; la P603, como la P602 pero conectada a la Tekne3, como la P203. 25 Contexto histórico 26 CAPÍTULO 3 Arquitectura interna En este capítulo se describen detalladamente los aspectos más novedosos de la arquitectura interna de la Programma 101. Entre estos aspectos se encuentran el tipo de electrónica empleada en su construcción, el tipo —tecnología— de memoria utilizada, las tarjetas magnéticas que se usaban por primera vez, su diseño —estética— industrial y, finalmente, se fundamenta la facilidad de uso de este dispositivo. Pero antes y como se comprueba en las figuras 3.1 y 3.2, se ha de remarcar que la arquitectura de esta máquina sigue las pautas marcadas por John von Neumann (1903-1957), en el modelo que lleva su nombre y que fue publicado el 30 de junio de 1945 por la Universidad de Pensilvania y la armada de los Estados Unidos en un borrador llamado «First Draft of a report to the EDVAC» [8]. Figura 3.1: Arquitectura de von Neumann Arquitectura interna Figura 3.2: Arquitectura de la Programma 101 [21]. Este modelo describe una arquitectura compuesta por una unidad de control conectada a una memoria y estas dos a su vez se comunican con el usuario a través de los dispositivos de entrada y salida, que en el caso de la Olivetti está formada por el teclado y la impresora respectivamente; además, esta tiene la unidad de lectura/escritura de tarjetas magnéticas que cumple con ambas funciones a la vez. 3.1 Tipo de electrónica y memoria Como se ha mencionado en el apartado 2.1, la Programma 101 fue desarrollada durante la segunda generación de la historia de las computadoras, por lo que estaba construida con elementos electrónicos discretos como los transistores —fueron utilizados alrededor de 670 del modelo 2N708—, los diodos, las resistencias y los condensadores. En las figuras 3.3 y 3.4 se muestran el transistor que hizo posible el reducido tamaño de la Programma 101 y el interior de esta, dejando a la vista sus componentes electrónicos, respectivamente. Figura 3.3: Transistor 2N708 NPN con encapsulado metálico TO-18 utilizado en la construcción de la Programma 101. 28 3.1 Tipo de electrónica y memoria Figura 3.4: Vista del interior de la Programma 101. Para entonces aún no existían los circuitos integrados típicos de la tercera generación, y los componentes mencionados debían ser suficientes para construir esta máquina. Ante este reto, los desarrolladores idearon una memoria de línea de retardo acústica magnetostrictiva con filamento de metal, un tipo de memoria que se debe actualizar (o refrescar) y es secuencial, al contrario de las memorias actuales, que son aleatorias. Este tipo de memoria consiste principalmente en un filamento metálico enrollado para alcanzar una amplia longitud —6,5 metros en el caso de la Programma 101— en el menor espacio posible. Conectado a este alambre se encuentran unos transceptores formados por material piezoeléctrico que convierten señales eléctricas en ondas acústicas y viceversa. Como se representa en la figura 3.5, el funcionamiento de este tipo de memoria se basa fundamentalmente en el retardo que le supone a una onda acústica en transmitirse a lo largo de un medio, así pues, los datos se introducen en dicho medio a través de un transductor y, tras un retardo —2,2 milisegundos en la Programma 101—, esta señal se encuentra al final del alambre recogida por el otro transductor y retroalimentada formando un bucle cerrado y así mantiene, refresca o memoriza la información introducida. 29 Arquitectura interna Figura 3.11: Diseño del teclado y del lector/grabador de tarjetas magnéticas de la Programma 101. Figura 3.12: Diseño del display de la Programma 101. 36 3.3 Estética Figura 3.13: Perspectiva delantera del diseño realizado por Mario Bellini. Figura 3.14: Perspectiva trasera del diseño realizado por Mario Bellini. 37 Arquitectura interna El diseño de la Programma 101 estuvo orientado a que el usuario que manejara esta computadora no tuviera grandes conocimientos en informática y llevar su uso a todos los ámbitos posibles. Para ello se creó un lenguaje de programación fácil de usar y que con poca práctica y poco tiempo de aprendizaje se pudiera dominar. En este aspecto, Olivetti cambió la filosofía que había hasta entonces, en la que el perfil de los usuarios de las computadoras existentes era muy especializado y con amplios conocimientos en la máquina que se utiliza, usándose solo en ámbitos muy restringidos. 38 CAPÍTULO 4 Programación Por un lado, en este capítulo se van a describir tanto el lenguaje de programación de la Programma 101, como algunos aspectos de la gestión de memoria, ya que todo ello será necesario para comprender cómo funciona esta máquina. Por otro lado, se va a realizar una comparación con el procesador MIPS R2000, el cual se estudia en asignaturas de la titulación del Grado en Ingeniería Informática relacionadas con la estructura y la arquitectura de computadores. Con esta comparativa se pretende tomar una referencia y así comprender mejor las características de la Programma 101. 4.1 Los registros y la memoria Para entender el funcionamiento de la Programma 101 es necesario saber cómo está organizada su memoria. Como se indicó en el capítulo anterior, tiene una capacidad de 240 caracteres, divididos en 10 registros de 24 caracteres o dígitos, gracias a los cuales la Programma 101 tenía una capacidad de cómputo muy elevada para la época en la que apareció. De estos diez registros, dos están reservados para el programa, teniendo entre los dos una capacidad para 48 instrucciones, destinándose el resto de registros — denominados M, A, R, B, C, D, E y F— al almacenamiento de datos repartiendo su capacidad en 22 dígitos para el dato en sí, otro para indicar la posición del punto decimal y el último para el signo. Entre estos ocho registros había usos especiales que se describen a continuación. Hay tres registros —M, A y R— que tienen un papel especial en el funcionamiento de la Programma 101; el M es el encargado de guardar las entradas que proporciona el teclado y distribuir esa información al registro adecuado; el A hace la función de acumulador, en él se guardan los resultados de las operaciones realizadas y las retiene; y en el R nos encontramos con el resultado de las operaciones Programación aritméticas que se hayan realizado actualizándose tras la finalización de cada una de ellas. De los otros cinco registros, tres de ellos —D, E y F— pueden almacenar instrucciones en caso de que el código de programación sea muy largo sumándolos con los dos registros destinados a instrucciones, de esta forma obtenemos un total de 120 instrucciones —número máximo que puede manejar—. Tanto estos tres como los dos registros restantes destinados exclusivamente a almacenar datos, pueden ser divididos en dos, encontrándonos en una situación en la que podremos guardar once datos con punto decimal y signo. En el caso de dividir los registros, estos son referenciados como b, B, c, C, d, D, e, E, f y F. Esta división se realiza mediante el comando ”/” de tal forma que B/ = b. En la figura 4.1 se puede contemplar las posibles combinaciones que nos permiten estos registros. Figura 4.1: Posibles configuraciones de los registros. [20] 40 4.2 Instrucciones 4.2 Instrucciones Ahora que se conoce la estructura y organización de los registros de la Programma 101, se procede a describir las 16 instrucciones que se pueden realizar en este computador clasificadas por sus respectivos propósitos: •Instrucciones generales: ◦”S” (Stop/Start): Cuando un programa se está ejecutando y se encuentra con esta instrucción, la Programma 101 espera a que se le introduzca por teclado un valor, posteriormente hay que pulsar ”S” para validar el dato y reanudar la ejecución. ◦”*” (Clear): Borra el contenido del registro especificado (por ejemplo B*). ◦”♦” (Print): Imprime el contenido del registro especificado con la cantidad de decimales que se especifique en la rueda de decimales. Si en lugar de especificar un registro, aparece en el código ”/♦” realiza una impresión de una línea en blanco. •Transferencia de datos: ◦”↓” (To A): Pasa el contenido del registro especificado al acumulador, si no se especifica este se asume que es M (por ejemplo ↓: M →A). ◦”↑” (From M): Traslada el contenido de M al registro especificado (por ejemplo B/↑: M →b) menos en dos casos, R↑que no es operativo y A↑que se usa en la introducción de constantes como instrucciones [20, 19]. ◦”l” (Exchange): Intercambia el contenido del registro especificado y el acumulador (por ejemplo Bl: B A) si no se indica el registro se asume que es M, además hay dos casos especiales, Al= |A| y Rl= R →A. ◦”RS” (D-R Exchange): Intercambia el contenido de los registros d y D (de ambos) con el contenido del registro R. Esta instrucción tiene dos usos muy especiales: por un lado, y más importante, la carga de un programa desde varias tarjetas magnéticas. Para ello, temporalmente se almacenan d y D en R hasta que se ha leído la siguiente tarjeta, ya que en ese lapso de tiempo los datos que almacena R no son modificados. Por otro lado, y como segundo uso, borrar D cuando este almacena una instrucción mediante la secuencia de estas dos instrucciones: R*, RS. ◦”/l” (Decimal To M): Pasa la parte decimal del contenido del registro A al registro M. •Operaciones aritméticas: Todas las operaciones de este tipo se realizan en dos fases; la primera traslada el contenido del registro que se especifica a M, si no se indica ninguno, se usa el propio registro M; en la segunda fase se realiza la operación de este con el registro A, el resultado es guardado en R y en A, pero en este último se trunca según el número de decimales que se ha configurado en la rueda destinada a dicha función. 41 Programación ◦”+” (Addition): Suma el contenido del registro especificado con el de A. ◦”−” (Subtraction): Resta al contenido de A el valor guardado en el registro especificado. ◦”×” (Multiplication): Multiplica los valores de los registros A y el especificado. ◦”÷” (Division): Divide el contenido de A por el contenido del registro especificado; en este caso el cociente es guardado en A y el resto en R. ◦”√” (Square Root): Realiza la raíz cuadrada del contenido del registro especificado y guarda el resultado truncado en A; en esta operación R no se usa. ◦”Al” (Absolute Value): Como se indicó en el apartado de operaciones de transferencia de datos Al= |A|. •Operaciones de salto: Estas operaciones son necesarias para realizar bucles, seleccionar subrutinas indicadas por el usuario o condicionarlas al valor del registro A. Para llevar a cabo un salto hace falta un punto de origen y una referencia a este —destino—, cuando el hilo de ejecución se encuentra con un punto de origen salta hasta su respectiva referencia. ◦Saltos incondicionales: Salta al encontrarse con un punto de origen — 4=V, W, Y o Z, estos son los más habituales y están incluidos en el teclado para su selección por parte del usuario— hasta su respectiva referencia, en la tabla 4.1 se indican todas las posibles combinaciones. PUNTO DE ORIGEN REFERENCIA A PUNTO 4 C4 D4 R4 A4 B4 E4 F4 Tabla 4.1: Relación entre orígenes y destinos en los saltos incondicionales. ◦Saltos condicionales: Este tipo de salto está condicionado al valor que contiene el registro A; si este es mayor que 0 se produce el salto, en caso contrario sigue con la siguiente instrucción. Este comportamiento es muy útil para la realización de bucles condicionados en su finalización tal y como se podrá ver en el capítulo siguiente. En este caso la tabla 4.2 muestra los puntos de origen y sus respectivas referencias. 42 4.3 Introducción de constantes PUNTO DE ORIGEN REFERENCIA A PUNTO /4 C/4= c4 D/4= d4 R/4= r4 A/4= a4 B/4= b4 E/4= e4 F/4= f4 Tabla 4.2: Relación entre orígenes y destinos en los saltos condicionales. 4.3 Introducción de constantes Durante la programación de la Programma 101 se hace necesario la utilización de constantes, como por ejemplo el número pi (π=3,14159...) para cálculos de trigonometría. Por lo tanto, estos valores hay que introducirlos y guardarlos en algún registro a elegir entre el D, E, F o alguna de sus divisiones (d, e y f), es decir, se podrían guardar hasta tres constantes de 22 dígitos o seis de 11 cada una. El proceso de introducción de dichas constantes es muy simple: estando en una situación donde los botones RECORD yPRINT están en OFF, se teclea el valor de la constante y a continuación se le indica el registro seguido de la tecla ↑(por ejemplo E↑), de esta forma se introduce el valor tecleado en el registro indicado. Otra situación se produce cuando tanto el programa como las constantes están en una tarjeta magnética. Como esta solo almacena instrucciones, lo que se necesita es una secuencia de estas para generar las constantes en tiempo de ejecución, es decir, constantes como si fueran instrucciones. Para realizar estas operaciones se parte de una situación donde el botón PRINT esta en ON y el botón RECORD en OFF, se pulsa RESET y se inicia la introducción de instrucciones con ”A/↑”, dichas instrucciones están formadas por una parte izquierda y otra derecha que, combinándolas, adquirirán nuevos significados según las tablas 4.3 y 4.4. IZQUIERDA SIGNIFICADO R D F E / Dígito positivo. Dígito positivo de mayor orden. Dígito negativo. Dígito negativo de mayor orden. Punto decimal (incluye un entero). Tabla 4.3: Parte izquierda de las instrucciones de introducción de constantes. 43 Programación DERECHA SIGNIFICADO S ↓ ↑ l + - x ÷ ♦ * 0 1 2 3 4 5 6 7 8 9 Tabla 4.4: Parte derecha de las instrucciones de introducción de constantes. Cuando se ha finalizado la introducción de todas las constantes con este método se ha de almacenar a continuación la instrucción ”A↑”, así pues, para almacenar en la tarjeta magnética el valor −19,62 se ha de guardar la secuencia de instrucciones que se observa en la tabla 4.5. A/↑ R↑ Rx R/* E↓ Inicio de la secuencia de instrucciones. 2 6 9. −1y fin de la constante. Tabla 4.5: Ejemplo de cómo se introduce una constante. 4.4 Comparativa con el MIPS R2000 El procesador MIPS R2000 —enero de 1986— es considerado didácticamente como un punto de referencia para las asignaturas relacionadas con la arquitectura de computadores que son impartidas en la titulación de Grado en Ingeniería Informática. Es por ello que en este apartado se va a realizar una comparación entre este y la Programma 101, de esta forma nos podremos hacer una idea más precisa del potencial que tenía esta última teniendo en cuenta su contexto histórico. El procesador MIPS R2000 se muestra en la figura 4.2. 44 4.4 Comparativa con el MIPS R2000 Figura 4.2: Procesador MIPS R20001. Respecto a la memoria, el MIPS R2000 dispone de 32 registros de 32 bits cada uno, bastante más de la memoria que disponía la Programma 101 —10 registros de 96 bits—, pero además, el R2000 tiene dos registros de 32 bits dedicados expresamente al cálculo de multiplicaciones y divisiones enteras y otro más para el contador de programa. Como se puede deducir fácilmente, el R2000 tiene mucha más capacidad de memoria que la Programma 101 con sus 960 bits. Además, el R2000 puede direccionar memoria RAM (Random-Access Memory) con un ancho de bus de 32 bits y pudiendo acceder hasta 230 posiciones de memoria (32 ×230 = 32 Gib = 4 GiB)2, algo inexistente en la Programma 101. El MIPS R2000 por sí solo puede realizar operaciones enteras, para poder operar con números reales, debe ser ayudado por una FPU (Float Point Unit) o coprocesador llamado MIPS R2010 —vease figura 4.3—. Gracias a esta unidad de coma flotante, el R2000 dispone de 32 registros más, cada uno de 32 bits, e incrementa su potencial de cálculo ampliando su juego de instrucciones. 1http://www.xanthos.se/~joachim/collection.html 2ISO - International Organization for Standardization. ISO/IEC 80000-13:2008 45 Diseño de programas 5.2 Fibonacci Dado un número n, este código nos devuelve el resultado de aplicar la función de Fibonacci para dicho valor. Para realizar esta operación es necesario guardar en dos registros unas constantes iniciales (d=−1ye=1) y realizar un bucle que calcula en cada iteración un elemento de la serie de Fibonacci y devuelve finalmente el resultado de la función. Las instrucciones que se muestran en la tabla siguiente están basadas en la programación que se muestra en el siguiente algoritmo iterativo escrito en pseudocódigo. Programa a = -1 b = 1 n = leer de consola Para i de n hasta 0 f = a + b a = b b = f Fin_Para Devuelve f Fin_Programa En este apartado también se ha incorporado una serie de comentarios al código para esclarecer el funcionamiento del algoritmo. Para facilitar la legibilidad se ha intentado recurrir a las instrucciones más relevantes dejando a un lado las relacionadas con las transferencias de datos entre registros y saltos incondicionales. Este código —tabla 5.2— utiliza dos registros para almacenar el programa, aunque el segundo solo contiene tres instrucciones. Las constantes que se almacenan en los registros ”d” y ”e” pueden ser introducidas en tiempo de ejecución —de la misma forma que se han hecho en el apartado anterior— mediante las instrucciones A/↑, E/↓(para −1) y A/↑, D/↓(para 1) respectivamente. 52 5.2 Fibonacci 1 COMENTARIOS AV D/↓ Dl E/↓ El S C↑ AY D↓ E+ Fl E↓ Dl F↓ El C↓ /W F♦ /♦ V A/W A/↑ D/↓ - →Introducción de n →Introducir nen el registro C →Inicio bucle de nhasta 0 → → →        f=a+b → →)a=b → →)b=f →Pasar nal acumulador →¿n > 0? → →)Si n = 0, imprime el resultado y una línea en blanco →Salto al comienzo. →Si n > 0entonces →n=n−1 2 Cl Y V Tabla 5.2: Código para calcular la función de Fibonacci de un número en la Programma 101. Como en la exposición del apartado anterior, se realiza otra comparación entre el código ensamblador de la Programma 101 y el del MIPS R2000. A diferencia del caso anterior, el valor de entrada y el resultado son gestionados con la instrucción syscall que interactúa con el usuario —código comprobado mediante simulación con MARS ver. 4.4—. addi $6,$0,-1 # a = $6 = -1 mul $5,$6,$6 # b = $5 = 1 li $2,5 # Código para lectura de entero syscall # Lee n move $7,$4 # contador = $7 = n 53 Diseño de programas bucle: bltz $7, fin # Si contador < 0, entonces fin add $2,$6,$5 # f = $2 = a + b move $6,$5 # a = b move $5,$2 # b = f addi $7,$7,-1 # contador -1 j bucle # Salta a bucle fin: li $2,1 # Código para imprimir entero syscall # Lee n li $2,10 # Código para salir syscall # Salir En el código anterior se han omitido las instrucciones para gestionar el hilo de ejecución, ya que no se trata de un procedimiento dentro de otro código, sino un programa íntegro. Teniendo en cuenta que la Programma 101 omite las instrucciones correspondientes a la introducción de las constantes en tiempo de ejecución, se ve una reducción en el número de instrucciones del MIPS respecto a la Olivetti. A medida que la complejidad del código aumenta, esta reducción se hace más evidente debido a las diferencias en el juego de instrucciones —amplitud y funcionalidad del MIPS R2000—. Como en el apartado anterior y con ayuda del mismo simulador, se procede a ejecutar el código de la tabla 5.2 para calcular la función de Fibonacci de los valores 2,5y6, obteniendo como resultados los que se muestran en la figura 5.3. Figura 5.3: Simulación del código que calcula la función de Fibonacci de un número. 54 5.3 Ecuación de segundo grado 5.3 Ecuación de segundo grado Para resolver la ecuación ax2+bx +c=0se introducen los valores correspondientes a los coeficientes a,byc, y el código que se muestra en las tablas 5.3 y 5.4 [18] calcula la ecuación obteniendo el resultado de la variable xdescompuesto en su parte real e imaginaria. 1 COMENTARIOS AV S B↑ S C↑ S l BW B÷ Bl A+ Cl C÷ A- - A× C↑ B- /V A- - /Z C♦ V →Inicio pulsando V →Introducción de a →Introducción de b →Introducción de c →c a →2a → → →        −b 2a →(b/2a)2 →β →Si discriminante >0, salta →Si discriminante <0, salta →Si discriminante = 0, entonces imprime x1=x2 →Salto al comienzo Tabla 5.3: Código para resolver ecuaciones de segundo grado en la Programma 101 (registro 1). 55 Diseño de programas 2 COMENTARIOS A/Z A- - C♦ A√ A♦ C♦ - A♦ V A/V A√ Cl C+ A♦ C- - A♦ V AW C/↓ CW →Discriminante <0 →Imprime la parte real de x1 →Calcula la parte imaginaria de x1 →Imprime la parte imaginaria de x1 →Imprime la parte real de x2 →Calcula la parte imaginaria de x2 →Imprime la parte imaginaria de x2 →Salto al comienzo →Discriminante >0 →√β →x1 →Imprime x1 → →)x2 →Imprime x2 →Salto al comienzo Tabla 5.4: Código para resolver ecuaciones de segundo grado en la Programma 101 (registro 2). Si el discriminante es mayor que 0, obtendremos dos resultados reales; si es igual a0, la ecuación tiene una única raíz; y si es menor que 0, tiene dos soluciones, ambas con parte real e imaginaria. Los dos posibles valores del resultado que se han comentado se obtienen resolviendo las siguientes ecuaciones: x1=−b 2a+v u u t b 2a!2 −c ax2=−b 2a−v u u t b 2a!2 −c a β= b 2a!2 −c a=b2−4ac 4a2→b2−4ac =Discriminante Este código es un buen ejemplo para contemplar todas las operaciones aritméticas —menos el valor absoluto del acumulador— dentro del mismo programa, también se pueden observar varios saltos condicionales que sirven para decidir que resultado imprimir según el valor del discriminante. En el cálculo que se ha expuesto, es necesario manejar números reales y raíces cuadradas, por ello, el MIPS R2000 por sí solo no puede calcular estas operaciones, 56 5.3 Ecuación de segundo grado para conseguir este objetivo, se necesita la FPU MIPS R2010 —con ella se amplía el juego de instrucciones—, con su ayuda se consigue calcular la ecuación de segundo grado con el siguiente código ensamblador —código comprobado mediante simulación con MARS ver. 4.4—. .data 0x10000000 # Para poder imprimir " " espacio: .asciiz " " .text li $2,6 # Código para lectura de real syscall # Lee a mov.s $f1,$f0 # Guarda a en $f1 syscall # Lee b mov.s $f2,$f0 # Guarda b en $f2 syscall # Lee c li $2,2 # Código para impresión de real mov.s $f3,$f0 # Guarda c en $f3 mul.s $f5,$f2,$f2 # $f5 = b^2 li $5,4 # $5 = 4 mtc1 $5,$f6 # Paso de enteros a reales cvt.s.w $f6,$f6 # $f6 = 4.0 mul.s $f7,$f6,$f1 # $f6 = 4a mul.s $f7,$f7,$f3 # $f7 = 4ac sub.s $f5,$f5,$f7 # $f5 = b^2 - 4ac = Discriminante mul.s $f9,$f1,$f1 # $f9 =a^2 mul.s $f6,$f6,$f9 # $f6 = 4a^2 div.s $f6,$f5,$f6 # $f6 = Beta abs.s $f6,$f6 # $f6 = |Beta| add.s $f8,$f1,$f1 # $f8 = 2a div.s $f8,$f2,$f8 # $f8 = b/2a neg.s $f8,$f8 # $f8 = -b/2a c.eq.s $f5,$f20 # Si discriminante = 0 bc1t igual # Salta a igual c.lt.s $f5,$f20 # Si discriminante < 0 bc1t menor # Salta a menor bc1f mayor # Si discriminante > 0, salta a mayor igual: mov.s $f12,$f8 # $f12 = x1 = x2 syscall # Imprime x1 = x2 j fin # Salta a fin menor: mov.s $f12,$f8 # $f12 = parte real de x1 syscall # Imprime la parte real de x1 li $2,4 # Código para impresión de cadena la $4,espacio # Cadena a imprimir syscall # Imprime " " li $2,2 # Código para impresión de real 57 Diseño de programas sqrt.s $f6,$f6 # $f6 = parte imaginaria de x1 mov.s $f12,$f6 # $f12 = parte imaginaria de x1 syscall # Imprime la parte imaginaria de x1 li $2,4 # Código para impresión de cadena la $4,espacio # Cadena a imprimir syscall # Imprime " " li $2,2 # Código para impresión de real mov.s $f12,$f8 # $f12 = parte real de x2 syscall # Imprime la parte real de x2 li $2,4 # Código para impresión de cadena la $4,espacio # Cadena a imprimir syscall # Imprime " " li $2,2 # Código para impresión de real neg.s $f12,$f6 # $f12 = parte imaginaria de x2 syscall # Imprime la parte imaginaria de x2 j fin # Salta a fin mayor: sqrt.s $f6,$f6 # $f6 = raiz cuadrada de Beta add.s $f12,$f8,$f6 # $12 = x1 syscall # Imprime x1 li $2,4 # Código para impresión de cadena la $4,espacio # Cadena a imprimir syscall # Imprime " " li $2,2 # Código para impresión de real sub.s $f12,$f8,$f6 # $12 = x2 syscall # Imprime x2 j fin # Salta a fin fin: li $2,10 # Código para salir syscall # Salir El programa del MIPS R2000 expuesto anteriormente realiza las mismas funciones que el de la Programma 101 pero, como se puede observar, tiene más líneas de código, esto es debido a que la interacción con el usuario en la R2000 es más difícil de implementar. Además, para hacer la salida de datos más legible, se deben de realizar operaciones con direccionamiento en memoria —las tres primeras líneas hacen posible la impresión del caracter ” ”— y así imprimir caracteres, esto no se podía hacer con la Programma 101. A continuación, se procede a simular el primer código para obtener una demostración gráfica —véase la figura 5.4— de su funcionamiento y de los resultados obtenidos al calcular la ecuación x2+2x+5=0. 58 5.4 Coseno Figura 5.4: Simulación del código que calcula la ecuación de segundo grado. 5.4 Coseno El siguiente código [18] —tabla 5.5— calcula la función cos(x), donde xse introduce por teclado como parámetro de entrada. En esta operación intervienen una serie de constantes que están almacenadas en el resto de registros; ”D”=180, ”d”= −4,934745, ”E”=4,058041, ”e”=−1,332369, ”F”=0,22965 y ”f”=−0,020577. Esta función se calcula utilizando la serie de Tchebycheff con cinco constantes o coeficientes, siendo su correspondencia con las almacenadas en los registros de la Programma 101 la siguiente; d=C2,E=C4,e=C6,F=C8,f=C10. cos(x) = 1+C2W2+C4W4+C6W6+C8W8+C10W10 W=x D Entre las constantes está la almacenada en el registro ”D”, esta tiene un valor de 180, ya que este cálculo se realiza en grados sexagesimales, pero si se desea realizar en radianes solo hay que sustituir dicha constante por el valor de π; análogamente, si se desea el resultado en grados centesimales, el valor de este se debe sustituir por 200. 59 Diseño de programas 1 COMENTARIOS AV S ↓ Al D÷ A× Cl F/↓ C× F+ C× E/+ C× E+ C× D/+ C× A/↑ D/↓ + A♦ V →Inicio pulsando V →Introducción de x → |x| →W →W2 → →)C10W2 → →)C10W4+C8W2 → →)C10W6+C8W4+C6W2 → →)C10W8+C8W6+C6W4+C4W2 → →)C10W10 +C8W8+C6W6+C4W4+C2W2 →Comienzo de introducción de constante →Constante =1, fin de introducción →cos(x) →Imprime cos(x) →Salto al comienzo Tabla 5.5: Código para calcular el coseno de un número en la Programma 101. A continuación y siguiendo con las comparativas, se muestra este algoritmo implementado en el ensamblador del MIPS R2000 —código comprobado mediante simulación con MARS ver. 4.4—, como se puede observar, más de la mitad de las instrucciones son para la introducción de datos e impresión del resultado —en la Programma 101 se usan las instrucciones ”S” y ”♦”—, es posible una reducción de este tamaño si se utilizara otros simuladores como PCSPIM, en este se puede utilizar la pseudoinstrucción li.s, la cual introduce de forma implícita un número real en un determinado registro. li $9,1000000 mtc1 $9,$f9 # Paso de enteros a reales cvt.s.w $f9,$f9 # $f9 = 1000000 li $8,-4934745 mtc1 $8,$f2 # Paso de enteros a reales cvt.s.w $f2,$f2 # $f2 = C2*1000000 div.s $f2,$f2,$f9 # $f2 = C2 li $8,4058041 mtc1 $8,$f4 # Paso de enteros a reales 60 5.4 Coseno cvt.s.w $f4,$f4 # $f4 = C4*1000000 div.s $f4,$f4,$f9 # $f4 = C4 li $8,-1332369 mtc1 $8,$f6 # Paso de enteros a reales cvt.s.w $f6,$f6 # $f6 = C6*1000000 div.s $f6,$f6,$f9 # $f6 = C6 li $8,229650 mtc1 $8,$f8 # Paso de enteros a reales cvt.s.w $f8,$f8 # $f8 = C8*1000000 div.s $f8,$f8,$f9 # $f8 = C8 li $8,-20577 mtc1 $8,$f10 # Paso de enteros a reales cvt.s.w $f10,$f10 # $f10 = C10*1000000 div.s $f10,$f10,$f9 # $f10 = C10 li $2,6 # Código para lectura de real syscall # Lee x mov.s $f1,$f0 # Guarda x en $f1 abs.s $f1,$f1 # $f1 = |x| syscall # Lee D mov.s $f3,$f0 # Guarda D en $f3 div.s $f3,$f1,$f3 # $f3 = W mul.s $f3,$f3,$f3 # $f3 = W^2 mul.s $f5,$f10,$f3 # $f5 = C10*W^2 add.s $f5,$f5,$f8 mul.s $f5,$f5,$f3 # $f5 = C8*W^2+C10*W^4 add.s $f5,$f5,$f6 mul.s $f5,$f5,$f3 # $f5 = C6*W^2+C8*W^4+C10*W^6 add.s $f5,$f5,$f4 mul.s $f5,$f5,$f3 # $f5 = C4*W^2+C6*W^4+C8*W^6+C10*W^8 add.s $f5,$f5,$f2 mul.s $f5,$f5,$f3 # $f5 = C2*W^2+C4*W^4+C6*W^6+C8*W^8+C10*W^10 div.s $f9,$f9,$f9 # $f9 = 1 add.s $f5,$f5,$f9 # $f5 = cos(x) mov.s $f12,$f5 # $f12 = $f5 li $2,2 # Codigo para imprimir real syscall # Imprime cos(x) li $2,10 # Codigo para salir syscall # Salir El código expuesto incorpora una variación respecto al de la Programma 101, en este caso, además de introducir el ángulo, el usuario debe proporcionar el valor de ”D” y así especificar si el resultado se quiere en grados sexagesimales, radianes o en grados centesimales. 61 Diseño de programas 68 CAPÍTULO 6 La calculadora HP 9100 En 1968, cuatro años después de la aparición de la Programma 101, surgió la calculadora programable HP 9100, producida y comercializada por Hewlett Packard y cuyo diseño se inspiró en el del producto de Olivetti, desbancando a esta del mercado. En este capítulo se procede a describir la HP 9100 y se ponen en relación ambas calculadoras. La HP 9100 —véase en la figura 6.1—, igual que la Programma 101, fue construida con electrónica discreta, por lo que pertenece a la segunda generación —también por el año en el que apareció—. Además, tiene una carcasa de aluminio fundido con unas dimensiones de 40,64 ×48,26 ×20,95 cm y un peso de 18 kilogramos, es decir, más pequeña y ligera que la Programma 101. Figura 6.1: Calculadora HP 9100 [30]. La calculadora HP 9100 6.1 Memoria: tecnología y distribución La memoria en la HP 9100 esta formada por núcleos magnéticos —toros— como los que se muestran en la figura 6.2. Los toros de ferrita se disponen en una matriz bidimensional de modo que son atravesadas por dos hilos, X e Y, que discurren según las filas y columnas. Para escribir un bit en la memoria se envía un pulso simultáneamente por las líneas XieYjcorrespondientes al toro situado en la posición (i,j), el cual se magnetizará en el sentido dado por los pulsos. Los demás toros, tanto de la fila como de la columna, no varían su magnetización ya que solo reciben un pulso —X o Y—, siendo su campo magnético insuficiente para vencer la histéresis del toro. El dato se lee mediante un nuevo hilo Z, que recorre todos los toros de la matriz. Escribimos un cero por el método descrito anteriormente, luego únicamente el toro (i,j)puede cambiar de estado. Si contiene un cero, no cambia, luego en la línea Z no se tiene señal; pero si el toro tiene un uno, pasa a valer cero, su sentido de magnetización cambia e induce un pulso en la línea Z, que se leerá como uno. Como se ve, el proceso descrito destruye el dato que se lee, luego en las memorias formadas por toros es necesario reescribir el dato tras leerlo. A medida que la memoria aumentaba en capacidad hubo que pasar a una disposición tridimensional, apilando capas de toros y utilizando las mismas líneas X e Y, por ello se añadió un hilo de inhibición para seleccionar el plano de ferritas a las que se deseaba acceder. Figura 6.2: Núcleo magnético y su disposición en un plano [30]. 70 6.2 Manejo y programación Una de las propiedades de los núcleos magnéticos descritos es que mantienen la información almacenada aún en ausencia de alimentación eléctrica, por lo que el usuario podría apagar la calculadora sin perder los datos o programas almacenados, algo que la Programma 101 no podía hacer. Utilizando esta tecnología que se ha explicado, la HP 9100 disponía de memoria ROM (Read-Only Memory) y RAM, la primera tenía una capacidad de 32 Kib 1 —512 palabras de 64 bits— y contenía los programas o rutinas necesarios para el arranque inicial de la calculadora, así como funciones matemáticas programadas de fábrica. La RAM tenía 2208 bits de memoria, más del doble que la Programma 101 (960 bits), organizados como 6×16 ×23 bits. Respecto a la distribución de la memoria, hay una gran similitud con la que nos encontramos en la Programma 101. La HP 9100 almacenaba la información en formato BCD —4 bits por cada dígito— y tiene un total de 19 registros divididos de la siguiente forma: •3 registros: Los registros X, Y y Z son los análogos a los registros de la Programma 101 M, A y R respectivamente. •2 registros: Los registros E y F se utilizan para almacenar exclusivamente datos, igual que los registros B y C de la Programma 101. •14 registros: Enumerados del 0 al 9, A, B, C y D pueden guardar tanto datos como instrucciones, como ocurría en la Programma 101 con los registros D, E y F. Cada registro dispone de 14 dígitos para datos o instrucciones dando un total de 196 instrucciones, superior a los 120 de la Programma 101. Como se puede observar en este apartado, la distribución de los registros y sus funcionalidades tienen una gran similitud con las encontradas en la Programma 101, aunque esta última disponía de 2 registros exclusivos para instrucciones que la HP 9100 no dispone. 6.2 Manejo y programación El modo en que se utiliza la HP 9100 es diferente a la Programma 101 en varios aspectos; por un lado, en su teclado hay dos teclas más grandes que el resto, una es ”↑” —”ENTER (up)”— para la introducción de datos y la otra ”CONTINUE” para la validación o confirmación —como ”ENTER” en los ordenadores actuales—; por otra parte, la notación que utiliza es la RPN (Reverse Polish Notation), esta representa expresiones matemáticas sin necesidad de utilizar paréntesis siendo equivalentes ”(9−5)÷2” y ”9 5 −2÷”. Esta calculadora puede funcionar en modo manual o programada, según la opción activada en el selector ”RUN/PROGRAM”. Para programarla, primero hay que inicializarla colocando el selector mencionado en ”RUN” y pulsando ”END” —pone 1ISO - International Organization for Standardization. ISO/IEC 80000-13:2008 71 La calculadora HP 9100 el contador de programa a 00—, a continuación se pone el selector en ”PROGRAM”; luego, se van introduciendo las instrucciones mientras en el display se visualizan en el registro X como un código octal. La tabla 6.1 muestra la relación entre esos códigos y sus correspondientes teclas. COD. TECLA COD. TECLA 00 01 02 03 04 05 06 07 10 11 12 13 14 15 16 17 20 21 22 23 24 25 26 27 30 31 32 33 34 35 36 37 0 1 2 3 4 5 6 7 8 9 e a b f c d Clear . Roll up x→() y() drop Enter Exp Enter (up) xy Roll dn Chg Sign + − ÷ × Clear x 40 41 42 43 44 45 46 47 50 51 52 53 54 55 56 57 60 61 62 63 64 65 66 67 70 71 72 73 74 75 76 77 y→() Stop Fmt If Flag Go To () () Print/Space End Continue If x=y If x<y If x>y Set Flag |y| π Pause Acc+ Rcl To Polar Acc− Int x ln x To Rect Hyper or x←() sin x tan x Arc cos x ex log x √ Sub or Return Tabla 6.1: Relación entre los códigos y las instrucciones de la HP 9100. Una vez introducido el programa, se vuelve a poner el selector en ”RUN” y se inicializa el contador de programa —a un valor 00— pulsando la tecla ”END”, finalmente se procede a su ejecución pulsando la tecla ”CONTINUE”. 72 6.3 Interfaces y periféricos 6.3 Interfaces y periféricos La HP 9100 tiene un teclado y una rueda para configurar el número de posiciones decimales —como la Programma 101— formando la interfaz de entrada y una pantalla CRT (Cathode Ray Tube) donde cada dígito tenía un formato de 8 segmentos como interfaz de salida. Esta última sustituye en funcionalidad a la impresora de la Programma 101, y en caso de que el usuario quisiera imprimir información de salida, la HP 9100 disponía de una impresora opcional que se compraba aparte y se acoplaba en la parte superior de su carcasa. Un periférico que incorporaba la HP 9100 de serie era el lector/grabador de tarjetas magnéticas, un dispositivo que solo se había visto antes en la Programma 101; en este caso las tarjetas ideadas por HP tenían otra forma menos alargada, tal y como se muestra en la figura 6.3. Figura 6.3: Tarjeta magnética de la HP 91002. 2http://www.oldcalculatormuseum.com 73 La calculadora HP 9100 Hewlett Packard creó alrededor de la HP 9100 una gama de periféricos que se compraban por separado como es el caso de la impresora, que ya se ha mencionado, plóteres, digitalizadores, lectores ópticos de tarjetas, pantallas grandes, así como ampliaciones de memoria y otros. A partir de la primera versión, la HP 9100A, aparecieron nuevas versiones donde se incorporaban mejoras como mayor capacidad de memoria, inclusión de un puerto de comunicaciones serie y otras. Tras la descripción que se ha realizado en este capítulo sobre la calculadora HP 9100, se hace evidente que el diseño de esta calculadora comparte muchos puntos con la Programma 101, y por ello Olivetti recibió de Hewlett Packard el pago de regalías. 74 CAPÍTULO 7 Recursos en Internet Durante el desarrollo de este trabajo se ha podido comprobar la existencia de gran cantidad de recursos en Internet sobre la Programma 101, desde sitios web oficiales destinados a la conservación y difusión de su historia, hasta webs y blogs mantenidos por aficionados a la retroinformática, todo ello, pasando por sitios web de propósito general y webs que han sido desarrollados por los propios protagonistas de la creación de la máquina objeto de estudio de este documento. 7.1 Wikipedia y webs de retroinformática Como referencia de partida y para consultar los aspectos más genéricos de la Programma 101 siempre se puede acceder, por un lado, a las páginas web de la Wikipedia, donde podemos encontrar información en varios idiomas como español, inglés e italiano —figura 7.1—, entre otros. Por otro lado, a los sitios y blogs de los aficionados a la retroinformática mostrándose unos ejemplos en las figuras 7.2 y 7.3. Figura 7.1: Página web de la Wikipedia que trata sobre la Programma 101. Recursos en Internet (a) http://www.curtamania.com (b) http://www.silab.it Figura 7.2: Páginas webs de aficionados a la retroinformática que tratan sobre la Programma 101. 76 7.1 Wikipedia y webs de retroinformática (a) http://old8bits.blogspot.com.es (b) http://royal.pingdom.com Figura 7.3: Blogs de aficionados a la retroinformática que tratan sobre la Programma 101. 77 Recursos en Internet 84 CAPÍTULO 8 Material didáctico El Museo de Informática de la Escuela Técnica Superior de Ingeniería Informática de la Universitat Politècnica de València se inauguró oficialmente el 11 de diciembre de 2001. El 13 de mayo de 2013 fue reconocido oficialmente por la Conselleria d’Educació, Cultura i Esport como museo oficial de la Comunidad Valenciana, y finalmente el Consejo Ejecutivo del ICOM-España [5] ha aprobado que el Museo de Informática de la UPV forme parte de esta organización internacional. En la figura 8.1 se muestra la placa acreditativa como museo oficial de la Comunidad Valenciana y el logotipo del ICOM. Figura 8.1: Placa acreditativa como museo oficial de la Comunidad Valenciana y logotipo del organismo internacional ICOM. Material didáctico La finalidad de este museo es difundir y promover en la sociedad el conocimiento del patrimonio digital que se ha generado a través de los tiempos, y hacer recapacitar sobre su función en la sociedad a lo largo de su historia, presente y del que puede tener en el futuro. Este trabajo final de grado pretende ayudar al Museo de Informática a que cumpla con su misión mediante la incorporación de una página web dentro de la sección «Artículos: El museo te cuenta» del sitio web de dicho museo [13]. Para ello se incluyen textos explicativos, imágenes, vídeos y enlaces a material relacionados con la Programma 101, como por ejemplo simuladores. La inclusión de esta información en la web se ha realizado en colaboración con el personal del museo encargado a tal efecto respetando los formatos y estilos ya existentes en dicha web, y quedando una página como la que se muestra en la figura 8.2. Figura 8.2: Página web creada en castellano para el Museo de Informática sobre la Programma 101. 86 El Museo de Informática pertenece a los museos oficiales de la Comunidad Valenciana, por lo tanto, se ha procedido a crear una segunda página web idéntica a la mencionada pero en este caso traducida al valenciano, lengua cooficial de esta comunidad, dando como resultado una página como la que aparece en la figura 8.3. Figura 8.3: Página web creada en valenciano para el Museo de Informática sobre la Programma 101. 87 Material didáctico 8.1 Estructura de las páginas web Las dos páginas web desarrolladas a partir de este documento tienen el mismo contenido pero en idiomas diferentes —castellano y valenciano— y su organización sigue la estructura que se explica en este apartado. Tras una presentación de la Programma 101, se ha procedido a relatar de donde surgió la idea de crearla, quién formaba el equipo de desarrollo, qué retos tenían que superar estos y cómo fue presentada ante la sociedad en la Exposición Universal de Nueva York. Como la aparición de «el primer ordenador personal de sobremesa» obtuvo gran expectación, se presenta una muestra de la prensa norteamericana y de la publicidad que Olivetti lanzó para aprovechar aquel momento. Además, se mencionan dos aplicaciones en el que la Programma 101 intervino, la Guerra de Vietnam y la misión de la NASA Apolo 11. A partir de este punto, las páginas web toman un aspecto más técnico, en ellas se describe la tecnología empleada en la construcción de esta máquina y especialmente en la memoria, se explica cómo eran las novedosas tarjetas magnéticas y su importancia en los medios de almacenamiento actuales y cómo se involucró Mario Bellini en su creación diseñando una carcasa agradable —estéticamente hablando— y ergonómica. A continuación, se explica cómo está organizada la memoria y registros, se muestra una tabla con el juego de instrucciones y se presenta una plantilla de programación cumplimentada tal y como lo hacían los programadores de la Programma 101 en la época de su aparición. Finalmente, se exponen dos simuladores, uno más didáctico desarrollado por Marco Galeotti y el otro, con una interfaz más realista, por Claudio Larini, ambos presentan una captura de pantalla y sus correspondientes enlaces a las webs de sus desarrolladores. En las dos páginas web se han incluido imágenes y vídeos para aumentar la comprensión de lo expuesto en ellas, así como enlaces a sitios web donde se puede ampliar la información de los apartados correspondientes. 88 CAPÍTULO 9 Conclusiones Este trabajo ha consistido en un estudio dedicado a la Olivetti Programma 101, abarcando sus aspectos histórico y técnico, dando una visión de quién, dónde y cómo fue creada, los retos y logros alcanzados en ese proceso, así como detalles de su arquitectura interna y funcionamiento. En él se ha pretendido alcanzar los objetivos que se describieron en el primer capítulo de la siguiente forma: 1. Se ha enmarcado históricamente la creación de la Programma 101, por quién, en qué circunstancias y la repercusión que alcanzó su aparición en aquella época. 2. Se han descrito los componentes con los que fue construida, su organización, y se ha explicado el juego de instrucciones que disponía para su programación. 3. Se han mostrado varios ejemplos de algoritmos codificados con sus instrucciones para demostrar el grado de dificultad que esta máquina tenía para los usuarios no familiarizados con la informática. 4. Tanto desde el punto de vista de la arquitectura interna como desde la perspectiva del juego de instrucciones, se ha comparado la Programma 101 con el procesador MIPS R2000, y de esa forma se ha podido tomar una referencia en dichos ámbitos. 5. En el desarrollo de este documento han tomado un papel primordial los recursos en Internet utilizados, entre estos se han destacado dos simuladores que facilitan la comprensión y describen su funcionamiento. 6. De todo el material recopilado en este trabajo se han creado las correspondientes páginas en el sitio web del Museo de Informática para difundir y preservar la información recogida en este documento. Conclusiones He de mencionar que a la Programma 101 se le llama también Perottina en honor a Pier Giorgio Perotto. Sin embargo, en este trabajo no se ha utilizado este término para dejar patente que la creación de esta máquina fue un trabajo en equipo y que no todo el mérito fue de Perotto. De hecho, hay dos miembros del equipo —Toppi y Gaiti— que históricamente han sido olvidados en muchas fuentes de información, pero aquí se han adjuntado referencias donde sí se les asocia a dicho proyecto. Para la realización de este documento he tenido que afrontar dos aspectos necesarios para poder concluirlo; uno es el aprendizaje del lenguaje L A TEX para poder crear el trabajo escrito; otro es la comunicación con personas de Italia vía correo electrónico mediante el idioma inglés, ya que yo no conozco el italiano y mis interlocutores no saben castellano. 9.1 Líneas de futuro A partir de este trabajo fin de grado se pueden plantear diversos futuros proyectos, que como este, pueden ayudar al Museo de Informática en su labor de difusión y preservación del patrimonio digital. Ejemplos de estos pueden ser el estudio de otros computadores y elementos electrónicos mencionados en este trabajo como el IBM 360, el primer microprocesador Intel 4004 o el ordenador de navegación del Apolo 11 (AGC, Apollo Guidance Computer) —misión en la que participó la Programma 101—. Por último, a partir del simulador del ingeniero Claudio Larini se puede proponer el estudio, modificación y/o actualización del conversor P101TOQB.EXE para conseguir el paso de código de la Programma 101 a otro lenguaje distinto al QuickBasic, e incluso que pudiera realizar la conversión inversa. En el año 2011 había ocho Programma 101 en funcionamiento, y este documento ha pretendido subsanar el desconocimiento existente del impacto que esta tuvo en el desarrollo de los sistemas informáticos personales y darle la importancia que se merece, ya que sentó las bases de todos los aspectos referentes a la informática personal y consiguió aportar una interesante alternativa a los entornos tan restrictivos que habían en su época. 90 Bibliografía [1] Archivio Storico Istituto Luce. Italia - Presentato il calcolatore elettronico da tavolo. Radar R0037, 1966. Disponible en <http://www.archivioluce.com/ archivio> [Consultado el 10 de febrero de 2015]. [2] Carlos A. Coello Coello. Breve historia de la computación y sus pioneros. México: Fondo de Cultura Económica, 2003. [3] Claudio Larini. Emulatore per Olivetti Programma 101. Disponible en <http: //web.tiscali.it/claudiolarini/emul2.htm> [Consultado el 24 de octubre de 2014]. [4] David A. Patterson y John L. Hennessy. Estructura y diseño de computadores: la interfaz software/hardware. Barcelona: Reverté, 2011. [5] ICOM España | Consejo Internacional de Museos. Disponible en <http:// www.icom-ce.org> [Consultado el 2 de junio de 2015]. [6] Isaías Pérez Pérez y Citlali Anahí Monzalvo López. Introducción a la Arqueología Informática. Hidalgo, México: Instituto de Ciencias Básicas e Ingeniería. Universidad Autónoma del Estado de Hidalgo, 2011. [7] John L. Hennessy y David A. Patterson. Organización y diseño de computadores: la interfaz hardware/software. Madrid: Mcgraw-Hill, 1994. [8] John von Neumann. First Draft of a Report on the EDVAC. Disponible en <https://web.archive.org/web/20130314123032/http://qss. stanford.edu/\~godfrey/vonNeumann/vnedvac.pdf> [Consultado el 17 de junio de 2015]. [9] Lorenzo2. ”Emulare l’Olivetti P101.” Jurassic news - Retrocomputer Magazine, Año 7, número 39, pp. 28-33, enero 2012. [10] Marco Galeotti. Dai grandi calcolatori al primo vero ”computer personale”. Disponible en <http://www.marcogaleotti.com/Calcolatori.html> [Consultado el 26 de septiembre de 2014]. BIBLIOGRAFÍA [11] Marco Galeotti. ”La Programma 101, un oggetto troppo in anticipo sui tempi.” Jurassic news - Retrocomputer Magazine, Año 9, número 51, pp. 5-12, noviembre 2014. [12] Michael R. Williams. A history of computing technology. Los Alamitos, CA: IEEE Society Press, segunda edición, 1997. [13] Museo de Informática | Escuela Técnica Superior de Ingeniería Informática | Universidad Politécnica de Valencia. Disponible en <http://museo.inf.upv. es> [Consultado el 20 de enero de 2015]. [14] Nadia Penserini. Elementi di programmazione per calcolatore Olivetti programma 101. Bologna, Italia: Nicola Zanichelli Editore, 1973. [15] Olivetti Programma 101. Disponible en <http://www.silab.it/frox/p101/ _index.html> [Consultado el 21 de octubre de 2014]. [16] Olivetti Programma 101 ”Perottina”. Disponible en <http: //www.curtamania.com/curta/database/brand/olivetti/Olivetti% 20Programma%20101/index.html> [Consultado el 26 de septiembre de 2014]. [17] Olivetti Programma 101 - Wikipedia. Disponible en <https://it.wikipedia. org/wiki/Olivetti_Programma_101> [Consultado el 24 de septiembre de 2014]. [18] Olivetti. Programma 101: Calcolatore elettronico da tavolo, biblioteca programmi. Ivrea, Italia: Olivetti Corp., volume 1, 1965. [19] Olivetti. Programma 101: Calcolatore elettronico da tavolo, manuale di programmazione.. Ivrea, Italia: Olivetti Corp., 1965. [20] Olivetti. Programma 101: Calcolatore elettronico da tavolo, manuale generale. Ivrea, Italia: Olivetti Corp., 1965. [21] Olivetti. Programma 101: General reference manual. Ontario, Canada: Olivetti Canada Limited, 1965. [22] Olivetti, Storia di un’impresa. Associazione Archivio Storico Olivetti, Ivrea, Italia. Disponible en <http://www.storiaolivetti.it> [Consultado el 6 de febrero de 2015]. [23] Organización de las Naciones Unidas para la Educación, la Ciencia y la Cultura. Disponible en <http://www.unesco.org/new/es> [Consultado el 21 de octubre de 2014]. [24] Paul E. Ceruzzi. A history of modern computing. Londres, Inglaterra: The MIT Press, segunda edición, 2003. [25] Philippe Breton. Historia y crítica de la informática. Madrid: Cátedra, 1989. 92 BIBLIOGRAFÍA [26] Pier Giorgio Perotto. Disponible en <http://www.piergiorgioperotto.it> [Consultado el 1 de junio de 2015]. [27] Pier Giorgio Perotto. Programma 101 - L’invenzione del personal computer: Una storia appassionante mai raccontata. Cuneo, Italia: Sperling & Kupfer Editori, 1995. [28] Pier Giorgio Perotto, Giovanni De Sandre. ”Program controlled electronic computer.” U.S. Patent 3 495 222, 10 de febrero, 1970. Disponible en <http://www.google.com/patents/US3495222> [Consultado el 21 de enero de 2015]. [29] Programma 101 - Museo Tecnologicamente. Disponible en <http://www. museotecnologicamente.it/collezione/programma-101> [Consultado el 21 de noviembre de 2014]. [30] The Museum of HP Calculators. Disponible en <http://www.hpmuseum.org/ hp9100.htm> [Consultado el 7 de enero de 2015]. [31] Zenit Arti Audiovisive - Docabout 2011. Programma 101: La máquina que cambió el mundo. History channel, 2012. Disponible en <https://www.youtube. com/watch?feature=player_detailpage&v=HkI04PkTZTc> [Consultado el 23 de enero de 2015]. 93 Carta para la preservación del Patrimonio Digital Hay que preservar y poner a disposición de cualquier persona el patrimonio digital de todas las regiones, naciones y comunidades a fin de propiciar, con el tiempo, una representación de todos los pueblos, naciones, culturas e idiomas. ATRIBUCIONES Artículo 10 - Funciones y atribuciones Los Estados Miembros tal vez deseen designar a uno o más organismos que se encarguen de coordinar la preservación del patrimonio digital y poner a su disposición los recursos necesarios. La división de tareas y atribuciones puede basarse en las funciones y competencias existentes. Convendría adoptar medidas para: a) instar a los fabricantes de equipos y programas informáticos, creadores, editores y productores y distribuidores de objetos digitales, así como otros interlocutores del sector privado, a colaborar con bibliotecas nacionales, archivos y museos, y otras instituciones que se ocupen del patrimonio público, en la labor de preservación del patrimonio digital; b) fomentar la formación y la investigación, e impulsar el intercambio de experiencia y conocimientos entre las instituciones y las asociaciones profesionales relacionadas con el tema; c) alentar a las universidades y otras instituciones de investigación, públicas y privadas, a velar por la preservación de los datos relativos a las investigaciones. Artículo 11 - Alianzas y cooperación La preservación del patrimonio digital exige un esfuerzo constante por parte de gobiernos, creadores, editoriales, industriales del sector e instituciones que se ocupan del patrimonio. Ante la actual “brecha digital” es necesario reforzar la cooperación y la solidaridad internacionales para que todos los países puedan garantizar la creación, difusión y preservación de su patrimonio digital, así como un acceso constante al mismo. Se insta a los fabricantes, las editoriales y los medios de comunicación de masas a que promuevan y compartan sus conocimientos teóricos y técnicos. El hecho de favorecer programas de educación y formación, acuerdos de aprovechamiento compartido de recursos y mecanismos de difusión de los resultados de investigaciones y prácticas idóneas democratizará el conocimiento de las técnicas de preservación de objetos digitales. Artículo 12 - La función de la UNESCO En virtud de su mandato y funciones, incumbe a la UNESCO: a) incorporar los principios establecidos en esta Carta al funcionamiento de sus programas y promover su aplicación tanto dentro del sistema de las Naciones 100 Unidas como por las organizaciones internacionales, gubernamentales y no gubernamentales, relacionadas con la preservación del patrimonio digital; b) ejercer de referente y de foro en el que los Estados Miembros, las organizaciones internacionales, gubernamentales y no gubernamentales, la sociedad civil y el sector privado puedan aunar esfuerzos para definir objetivos, políticas y proyectos que favorezcan la preservación del patrimonio digital; c) impulsar la cooperación, sensibilización y creación de capacidades y proponer directrices éticas, jurídicas y técnicas normalizadas para apoyar la preservación del patrimonio digital; d) basándose en la experiencia que adquirirá en los seis años venideros con la aplicación de la presente Carta y las directrices, determinar si se requieren nuevos instrumentos normativos para promover y preservar el patrimonio digital. 101 Carta para la preservación del Patrimonio Digital 102 APÉNDICE B Patente Los desarrolladores de la Programma 101 decidieron que debían proteger su producto frente a sus competidores, ya que sus partes podrían ser analizadas y copiadas. Por ello, en marzo de 1965 presentaron en Estados Unidos la patente número 3.495.222 [28], esta está firmada por Pier Giorgio Perotto y Giovanni De Sandre. La patente que se puede ver en este apéndice, está constituida por varios esquemas eléctricos y estructurales, un resumen y una descripción del invento desde los puntos de vista del hardware y del software. APÉNDICE C Plantilla de programación Ya que la Programma 101 disponía de un lenguaje ensamblador fácil de usar, Olivetti diseñó un formulario —la que se muestra en este apéndice— para que sirviera de plantilla a aquellos usuarios que se dedicaran a programar esta computadora. Dicha plantilla muestra de forma compacta toda la información necesaria para la función mencionada, tal como el contenido de los registros, tanto el código del programa como constantes necesarias, el estado de la rueda que configura el número de decimales, así como información para su archivo y asociación con otras tarjetas magnéticas donde se almacenara dicha programación. Plantilla de programación 122 123 Plantilla de programación 124 APÉNDICE D Ejemplos de código En este apéndice, se muestra el código de cada uno de los algoritmos vistos en el capítulo 5, implementados en la plantilla de programación que se ha podido observar en el apéndice anterior, tal y como lo harían los programadores de la Programma 101 en los tiempos en que esta era utilizada. Ejemplos de código 132 133