miércoles, 22 de febrero de 2023

Los que definieron la ciencia de la Informática (IV) Unix y C

 
Actualizado el 13/04/23, cambios en azul 
Añadidas nuevas versiones del Unix el 02/06/23, cambios en verde 

En esta estrada trato sobre el desarrollo del Unix y la creación de mi muy querido lenguaje C (yo amo el BASIC por que empecé con el, pero no hay mejor lenguaje que el C), que van muy de la mano.

Laboratorios Bell

Laboratorios Bell era una subsidiaria dedicada a la investigación de la principal compañía de telefonía americana, la AT&T. Esta había crecido mucho a principios del XX, sobre todo tras la compra de la Bell Company (empresa creada por el que patentó el teléfono Alexander Graham Bell) para dar servicio de telefonía en todo Estados Unidos. En 1881 se crea American Bell para desarrollar el equipamiento para las empresas de telefonía Bell, en 1907 AT&T crea su propio laboratorio, y en 1925 se fusionan ambos para crearse la Bell Telephone Laboratories.

Como muestra de lo avanzado de sus investigaciones en sus instalaciones a principios de la década de 1950 se creó el transistor y también Claude Shannon crea la Teoría de la Información.

El origen del C

En los años 60 se definen dos lenguajes teóricos importantes, por un lado ALGOL (ALGOritmic Language, Lenguaje Algorítmico) que tuvo pocas implementaciones pero influyó mucho en los posteriores, y que derivó directamente en el PASCAL, y usando ideas del ALGOL se deriva el lenguaje CPL (Cambridge Programming Language, aunque posteriormente se le llamó Combined Programming Language, Lenguaje de Programación Combinado), que no llegó nunca a desarrollarse debido a ser demasiado grande, ambicioso y complejo. Ante esto en 1967 Martin Richards de la Universidad de Cambridge, mientras estaba en el MIT, desarrolla el BCPL (Basic Combined Programming Language, Lenguaje de Programación Combinado Básico), aunque fue descrito en una presentación en 1969. Se llegaron a desarrollar hasta 25 implementaciones diferentes, pero nunca fue realmente mas que un lenguaje académico. Tenía dos partes, el compilador creaba un código intermedio, que luego un ejecutor específico para cada ordenador podía ejecutar, esta idea se ha usado en lenguajes como el Java y PASCAL.

Ese mismo año lo utiliza Dennis Ritchie como base para el lenguaje B, ayudado por Ken Thompson, como una simplificación del BCPL, del que Thompson elimina todo lo prescindible para poder usarlo en un mini (eliminando hasta parte del nombre).

Entre 1969 y 1972 y para el PDP que tenía disponible en los laboratorios Bell, Dennis Ritchie escribe un compilador para un nuevo lenguaje al que denomina C, usando las ideas del anterior B. Es un lenguaje diseñado específicamente para el desarrollo de sistemas operativos, y se ha vuelto el padre de la mayoría de lenguajes modernos que usan aproximadamente su misma sintaxis, como C++, Java, JavaScrip o PHP

El origen del UNIX

En los años 60 el Instituto Tecnológico de Massachusetts, los Laboratorios Bell y General Electric trabajaba intensamente en las comunicaciones, con la idea de desarrollar un ordenador que daría servicio a cientos de terminales por todo el país a través de las líneas telefónicas. Para su funcionamiento se definió un sistema operativo denominado MULTICS (Multiplexed Information and Computing Service, Servicio Multiplexado de Información y Computación). Este sistema correría en grandes Mainframes de las empresas General Electrics y Honeywell participantes en el proyecto. Aunque estuvo mucho tiempo en desarrollo, no llegó a funcionar nunca al ser un producto demasiado avanzado para el momento.

Uno de los programadores de los laboratorios Bell, Ken Thompson, escribió un juego llamado Space Travel (Viaje espacial) para la GE-645 en que estaban desarrollando el MULTICS, pero el juego era lento y sus ejecuciones eran caras (en esa época se miraba el coste de los programas por su tiempo de ejecución para calcular su rentabilidad) ya que salía por 75$ por partida. 

Entre 1969 y 1978 dos investigadores que trabajaban en MULTICS obtuvieron permiso para usar una computadora PDP-7 que en eso momento estaba siendo reemplazada por otra mas avanzada y había quedado parada, estos eran Ritchie y Thompson. Usando esta máquina, con ideas de MULTICS crearon el sistema operativo UNIX (Uniplexed Information and Computing Service, Servicio Uniplexado de Información y Computación), cambiando el multi por el uni ya que daba servicio a un solo usuario, basando el nombre al parecer en una idea de Brian Kernighan sobre un comentario de Andrew Tanenbaum

Cuando les dejaron el PDP reescribió el programa en ensamblador ayudado por Ritchie, al tener que desarrollar muchas rutinas para el manejo del sistema, Thompson pensó en crear un nuevo sistema operativo para la máquina. De esta manera Thompson y Ritchie lideraron un grupo de programadores para desarrollar en ensamblador  un sistema operativo multitarea, junto a un nuevo sistema de manejo de ficheros y un nuevo intérprete de comandos y algunos programas auxiliares.

Posteriormente el laboratorio les deja un PDP-11/20 con la condición de agregar herramientas de procesamiento de textos (un editor para escribir el programa runoff para formatear e imprimir) a UNIX, por lo que en 1970 ya se habla oficialmente en los laboratorios Bell del sistema operativo UNIX, donde el sistema de procesamiento de textos fue utilizado para procesar las solicitudes de patentes que recibían. Luego se mejoró runoff desarrollando troff, que permitía realizar composición tipográfica.

El 3 de noviembre de 1971 Thomson y Ritchie publicaron "UNIX Programmer's Manual", un manual de programación de UNIX, lo que fué su lanzamiento definitivo.

En 1972 se decide reescribir UNIX usando el Lenguaje de programación C, de esta manera UNIX podría ser fácilmente modificado para funcionar en otras computadoras, y como el código era más sencillo de entender y de manejar aumentó la velocidad de desarrollo de UNIX.

AT&T puso a UNIX a disposición de universidades y empresas (incluyendo al propio gobierno) a través de licencias. ​ Al adquirir una de ellas el Departamento de Computación de la Universidad de California, con sede en Berkeley, en 1975 desarrolló su propia versión de UNIX conocida como Berkeley Software Distribution (BSD). En esta distribución se creó el protocolo TCP/IP que es la base de internet.

Posteriormente el UNIX dejó de ser libre para su uso en universidades, pasando a comercializarse. Se lanzaron muchos desarrollos, Microsoft llega a un acuerdo para portar UNIX a los 286 creando una versión que se denominó XENIX, y para los 386 hay dos empresa que lo comercializan con versiones propias, SCO (que compró el XENIX y desarrolló SCO UNix y UnixWare, hoy es parte de Caldera Systems), y SUN que crea Solaris (hoy parte de Oracle). La IBM también lo comercializa creado AIX, Hewlett-Packard crea por su parte HP-UX y DEC comercializa ULTRIX.

Para intentar poner orden el este caos de versiones incompatibles entre si, se creó el estandar POXIS, que intentaba que hubiera cierta compatibilidad en el núcleo entre las versiones para que se pudieran ejecutar programas desarrollados en cualquiera de ellas en otras, no se consiguió nunca una compatibilidad plena, pero fue un buen avance.

Como ya no se puede usar el código en la enseñanza, el profesor Andrew Tanenbaum decide escribir una versión reducida del mismo para sus clases, lo que dio origen al MINIX. Uno de los usuarios de MINIX, Linus Torvalds, descontento con lo que permitía decide ampliarlo, creando otro sistema operativo denominado LINUX, del que posteriormente deriva a su vez Android. Por su parte, Apple derivó su MAC OS X y posteriores como macOS, iOS, iPadOS, tvOS o watchOS a partir del BSD (realmente parten de su anterior NeXTSTEP que usa el nucleo de Mach y partes del BSD).

De esta manera la familia del UNIX actualmente está compuesta por muchas variantes directas o indirectas, además de ser la base de algunas de las ideas del CP/M, que a su vez es la inspiración del MS/DOS.

Si quieres usar un UNIX hoy día tienes varias opciones (mejorada la lista con adicciones):

  • UNIX de código libre (cuidado que no todas las versiones de estos productos lo son): 
    • Variantes de LINUX (hay demasiadas)
    • Variantes de BSD (FreeBSD, Dragonfly BSD, NetBSD, OpenBSD)
    • MINIX (tiene versiones 1, 2 y 3)
    • Variantes libres de Solaris (OpenSOLARIS,  Nexenta OS, Illumos, SchilliX, BeleniX).
    • Coherent, un clon del Unix muy sencillo, las primeras versiones eran de código propietario, pero desde 2015 pasó a código libre.
  • UNIX de código propietario
    • OpenServer (basado en Xenix y no abierto a pesar de su nombre)
    • Solaris en sus versiones comerciales (sin el Open delante)
    • AIX y z/OS de IBM
    • HP-UX.
    • Silicon Graphics IRIX 
    • UnixWare de Univel (hoy parte de SCO-Caldera)
    • Ultix de DEC para alguna de sus máquinas
    • Amiga Unix. Versión para el Commodore Amiga 3000 del Unix System V de AT&T, poco usado ya que no incluía la posibilidad de ejecutar programas desarrollados para otros sistemas, pero muy apreciado por sus pocos usuarios al incluir parte de las fuentes, por lo que se podía modificar.
    • Atari  System V. Versión para el Atari TT030, intento de crear una estación de trabajo que no funcionó ya que tras sacar el ordenador y anunciarlo, tardaron dos años en comercializar el Unix.
    • Una lista mas extensa se puede consultar en la Wikipedia (en inglés). Pulsa aquí para verla
  • Variantes de código propietario (aunque tienen partes de código abierto, de estas solo verás el interface gráfico que hay por encima): 
    • MAC OS X y sus variantes para teléfonos, tabletas  TV
    • Android
  • Otros desarrollos basados en POSIX:  
    • BeOS no está basado en Unix, pero tiene cierta compatibilidad POSIX y el interface de la línea de comandos está basado en Bash.
    • QNX

Hay mas versiones de UNIX de múltiples fabricantes, solo he mencionado las mas conocidas, y si incluimos sistemas que han usado parte de POSIX en su núcleo se amplia bastante la lista.

martes, 20 de septiembre de 2022

Cómo escribir juegos para el ZX Spectrum. Apendice C

Esta serie de artículos han sido traducidos a partir del documento "How to Write ZX Spectrum Games" con permiso de su autor, Jonathan Cauldwell, un gran desarrollador de juegos para el Spectrum, os recomiendo visitar su Web donde está el texto original. El documento original, y por tanto esta traducción, tiene © Jonathan Cauldwell y solo puede duplicarse con permiso expreso por escrito de su autor.

APENDICE C

Este apéndice tampoco forma parte del documento original, es un añadido para explicar como se pueden probar los programas que se describen con otro sistema alternativo más integrado, que permite programar, compilar y probar los programas directamente, más sencillo que el descrito en el apéndice B.

Se basa en usar como editor de texto ConText, que además de editar permite lanzar programas externos, lo que usaremos para compilar con pasmo y ejecutar con Spectaculator. Aquí os pongo un enlace a un archivo ZIP que contiene todo lo necesario. Si no funcionara aquí os dejo otro enlace de descarga.

Dentro del ficho ZIP encontramos instrucciones para su instalación, pero os las incluyo aquí de todas formas. Hay tres programas en el fichero, hay que instalar el editor pero los otros dos no requieren instalación:

  • ConText: Este será el editor de taxtos que usaremos para introducir los programas 
  • Pasmo: Este es el ensamblador para convertir el ensamblador en Código Máquina del Z80
  • Spectaculator El emulador del Spectrum que usaremos para ejecutar, sencillo y práctico.

El primer paso es descomprimir el ZIP en un directorio y mover cosas a este o a otro, por ejemplo, yo usaré C:\Spectrum para todo, pero tu elije los que desees, al descomprimir crea una nueva carpeta, en su interior encontramos los tres programas y dos PDF de ayuda para su instalación, uno en inglés y otro en español. Seguiremos los pasos descritos en el fichero 

ES - CREA_UN_ENTORNO_INTEGRADO_ENSAMBLADOR_SPECTRUM_ES.pdf 

que resumo aquí:

  1. Vamos a la carpeta EDITOR_ConTEXT_WIN y ejecutamos el programa Instalar_ConTEXTv0_986.exe instalaremos dando siguiente a todas las pantallas sin preocuparnos de más. Se abrirá ConText. En options - Environement abajo está el idioma del entorno, puedes cambiarlo a español (AR) para poder seguir mejor el documento
  2. Asociamos los ficheros .ASM con el editor 
  3. Copiamos la carpeta COMPILADOR_PASMO_WIN a C:\Spectrum\Pasmo
  4. Copiamos la carpeta EMULADOR_SPECTACULATOR_WIN a C:\Spectrum\Spectaculator
  5. Configurar ConTEXT para usar ASM con los programas externos
  6. Asociar Pasmo a la tecla F9, puede probarlo con cualquier programa ASM (si abres el fichero de ejemplo incluido con Pasmo llamado programa.asm, debes añadir al final una línea con el texto END 32768). Al pulsar F9 debe compilar el programa, y debe aparecer un mensaje de Ejecución Finalizada o mensajes de error si los hay.
  7. Asociar Spectaculator a la tecla F10 (los parámetros no tienen espacio entre p y \%F). Podemos ejecutar con F10, si nos aparece una nueva pantalla para elegir entre tres opciones debemos quitar el check de la parte inferior y pulsar cualquier opción. Al cerrar el programa si aparece una nueva pantalla le debemos desmarcar el check para que no pregunte cada vez. Si estamos usando el programa de pruebas de pasmo aparece una letra o en la pantalla, la podemos mover usando las teclas o-p-q-a.


jueves, 23 de junio de 2022

Los que definieron la ciencia de la Informática (III)


Índices: Historia de la Informática


Para esta entrada ordenaré por fecha de nacimiento a los que voy a mencionar, ya que no hay orden cronológico claro como en las dos entradas anteriores, esto son solo algunas pinceladas de sus mejores contribuciones, lo justo para despertar el interés de investigar un poco más sobre ellos. Dejaré para la siguiente entrada a los creadores del C y del Unix.

Edsger Dijkstra

Edsger Dijkstra poco antes de fallecer en 2002 (fuente: Wikipedia)

Edsger Wybe Dijkstra nació en Róterdam en 1930 y falleció en 2002. De pequeño quería ser abogado, pero finalmente estudió física. Sus primeros trabajos fueron en 1952 en el Mathematisch Centrum de Ámsterdam, colaborando en la construcción de un ordenador, principalmente desarrolló el software para una máquina que todavía estaba a medio construir, demostrando que la programación metódica y los sistemas formales producen buenos programas. Aquí desarrolló un compilador de ALGOL con el que fijó muchos conceptos de la programación estructurada.

Pasó en 1962 como profesor de matemáticas a la Universidad Tecnológica de Eindhoven, ya que no tenía departamento separado para informática. No fue una etapa muy productiva por las limitaciones del departamento, pero creó el sistema operativo "THE operating system", que introdujo el uso de la memoria virtual paginada.

En 1973 pasó a trabajar como el único investigador en la empresa Burroughs Corporation, empresa norteamericana, pero el siguió trabajando desde su casa en Holanda con visitas ocasionales a las sedes de la empresa, compaginándolo con un solo día en la universidad, donde creó el famoso "Club de los Martes por la Tarde", donde discutían los colegas los trabajos científicos. En la Burroughs, con total libertad para trabajar en lo que quisiera, escribió más de 500 artículos.

En 1984 aceptó una cátedra en la Universidad de Texas en Austin, donde siguió escribiendo numerosos artículos, algunos muy famosos como el que habla del GOTO, y continuó con el club de los martes. Se retiró en 1999, regresó a Holanda donde falleció de un cáncer en 2002.

Contribuciones

La lista es muy larga, solo mencionaré las más conocidas. Uno de sus temas de estudio fue la programación concurrente, escribió el primer artículo científico sobre el tema en 1965. Entre sus contribuciones están el algoritmo del banquero y la idea de los semáforos. Menos conocido, pero también importante, es el tema de la auto estabilización en sistemas concurrentes.

En teoría de grafos definió lo que se conoce como "Algoritmo de Dijkstra" con la solución del problema del camino más corto, usado por ejemplo en los programas de mapas para calcular las mejores rutas para llegar desde un origen a un destino.

Definió la notación polaca inversa y el algoritmo "Shunting Yard" para analizar sintácticamente expresiones en ella.

El sistema operativo THE multiprogramming system, donde usó muchas ideas que se mantienen en los actuales.

Pero quizá su mejor contribución fue sobre la escritura de programas y la verificación formal. Definió el sistema de derivación de programas, se definen primero las bases matemáticas del algoritmo a usar, con su pre y post condición, y luego se desarrolla a partir de este el programa y las pruebas conjuntamente. Sus contribuciones al desarrollo de los lenguajes, comenzando con su compilador de Algol, donde potenció el manejo de funciones y de variables locales, sentando en sus artículos las bases de la moderna programación estructurada.

Polémicas

De carácter difícil, siempre fue muy polémico. No incluía casi referencias a otros trabajos en sus escritos alegando que muchas veces no existían. Tampoco era amante de usar ordenadores para todo, de igual manera a como hacía sus programas primero sobre papel y luego transcribiéndolos, prefería escribir todos sus artículos a mano, no usaba apenas el correo electrónico, no tenía televisión ni teléfono móvil, aunque era apasionado de los conciertos de música clásica y tocaba el piano.

Es muy conocida su polémica sobre la sentencia GOTO y el código espagueti, pero no todo lo que se dice es totalmente cierto. El escribió un artículo hablando del mal uso que se hacía del GOTO y de la ventaja de cambiarlo por funciones, se lo envió a su amigo Niklaus Wirth para que lo publicara en la revista que dirigía, pero este lo cambió pasando a tener como título "Go To Statement Considered Harmful" (La sentencia Goto considerada perjudicial), añadiendo la famosa frase "el BASIC deforma la mente". Cuando leyó lo publicado no se enfadó con su amigo, que lo conocía bien.

C. A. R. Hoare

Charles Hoare (Fuente: Wikipedia)

Charles Antony Richard Hoare nació en Sri Lanka en 1934, de nacionalidad británica. Estudió filosofía en Oxford, donde se enamoró de la lógica matemática. Luego sirvió en la armada hasta 1956. Estudió luego matemáticas en la Universidad Estatal de Moscú, y en 1960 regresó a Inglaterra, donde entró a trabajar en la empresa Elliott Brothers, desarrollando el primer compilador comercial para el lenguaje ALGOL. Intentó desarrollar un sistema operativo, que no funcionó nunca, y dejó el mundo de la empresa pasando en 1968 a la universidad. Tras retirarse como profesor, le ofrecieron un puesto de investigación en Microsoft.

Buscando una manera de realizar búsquedas de palabras en los diccionarios, desarrolló en 1960 el algoritmo de ordenación QuickShort, el mejor algoritmo con diferencia, nunca superado a pesar de los años que tiene, usando un algoritmo del tipo "divide y vencerás".

Para los que hayan estudiado la carrera de informática, una de las asignaturas es sobre los sistemas formales de desarrollo de la programación, que se basa en la conocida como "Lógica de Hoare", que desarrolló en 1969 a partir de un trabajo anterior de Robert Floyd, definió la Verificación Formal usando el triplete “{Q} S {R}” (Q=Precondición, S=Algoritmo, R=Postcondición), base del desarrollo de programas correctos.

Menos conocido es el lenguaje formal CSP (Comunicación de Procesos Secuenciales), un modelo de programación de sistemas concurrentes basado en la comunicación entre procesos sin recursividad, que es el tercer trabajo más citado en computación de acuerdo con las estadísticas de Citeseer.

En su compilador de ALGOL incorporó el puntero nulo (aunque luego se arrepintió públicamente de haberlo hecho en el 2009), lo que ha dado muchos quebraderos de cabeza a los programadores por no usar el ISNULL adecuadamente.

Niklaus Wirth

Niklaus Wirth (Fuente: wikipedia)

Niklaus Wirth nació en Suiza en 1934. Se graduó en Ingeniería Electrónica en la Escuela Politécnica Federal de Zúrich (ETH). Estudió un post-master en 1960 en la Universidad Laval de Canadá. En 1963 obtiene el Doctorado en la Universidad de California, Berkeley. Siempre relacionado con la docencia, fue profesor en la Universidad de Stanford entre 1963 a 1967, luego pasó a la ETH en Suiza, universidad donde tomó dos años sabáticos para acudir al Xerox PARC en California.

Wirth puede que sea la persona que más ha influido en el diseño de los lenguajes de programación, fue el jefe de diseño de los lenguajes de programación Euler, Algol W, Pascal (solo por esto ya merece ser recordado, heredero el ALGOL, tuvo una enorme influencia en el diseño de los lenguajes bien estructurados y de los compiladores, inspiración directa a muchos otros lenguajes), Modula, Modula-2 y Oberon, y en el equipo que diseño los sistemas operativos Lilith y Oberon, y del hardware para el Lola.

Tiene varios textos que son básicos en la ciencia informática, el libro "The Pascal User Manual and Report" (Pascal, manual de uso e informes", escrito junto con Kathleen Jensen, fue la base para muchos esfuerzos de implementación de lenguajes posteriores, Su artículo "Program development by stepwise refinement" (desarrollo de programas por refinamiento sucesivo) sentó las bases de un buen sistema de desarrollo de programas. Y por supuesto su famoso libro "Algoritmos + Estructuras de datos = Programas", básico para aprender a programar.

Tiene una frase memorable que se conoce como la Ley de Wirth, "El software se ralentiza más deprisa de lo que se acelera el hardware", el ejemplo principal es que los ordenadores tardan lo mismo en arrancar hoy que hace unos años, a pesar del aumento de velocidad de los procesadores.

Y por supuesto la ya mencionada amistad con Dijkstra y los cambios que incluía en los artículos que este le remitía para su publicación como director de las publicaciones informáticas de la ETH.

Donald Knuth

Donald Knuth (fuente: Wikipedia)

Donald Ervin Knuth nació en Milwaukee en 1938. Estudió física en universidad de Cleveland, allí tuvo acceso a un IBM 650, que se programaba en ensamblador, pero como no le gustaba reescribió el código del programa ensamblador. Con este realizó un programa para ayudar al equipo de baloncesto, definió una serie de características y asignó unos puntos a cada jugador, calculando la probabilidad de puntuar, este sistema mejorado se sigue usando hoy día, sobre todo en las casas de apuestas. Cambió la física por las matemáticas, recibió dos títulos, y se doctoró en 1963 en el Caltech (California Institute of Technology), donde pasó a ser profesor. En el 68 pasó a Princeton para trabajar en criptografía, y desde el 69 trabaja en la universidad de Stanford.

Comenzó a escribir un manual sobre programación en ensamblador, que rápidamente se convirtió en un libro pues necesitaba ampliar con muchos temas de base sobre programación, luego se dio cuenta que necesitaría desarrollarlo en 6 libros, y finalmente han sido siete, aunque los últimos divididos en varias partes realmente. En 1968 publicó el primero volumen de "El arte de programar ordenadores", en 1969 el segundo, en 1973 el tercero, en 1981 revisó los 3 primeros, ha publicado por secciones en fascículos los capítulos del libro cuarto y parte del quinto, en 2005 publicó un anexo al primero, en 2011 se publicó el libro 4A, además de revisar continuamente los anteriores. A pesar del ritmo que lleva, espera poder publicar el libro 4B, 4C, 4D y los restantes algún día. La serie completa constaría de estos libros:

  • Volumen 1 – Fundamental Algorithms (Algoritmos fundamentales)
    • Capítulo 1 – Basic concepts (conceptos básicos)
    • Capítulo 2 – Information structures (estructuras de datos)
  • Volumen 2 – Seminumerical Algorithms (Algoritmos semi-numéricos)
    • Capítulo 3 – Random numbers (Números aleatorios)
    • Capítulo 4 – Arithmetic (Artimética)
  • Volumen 3 – Sorting and Searching (Ordenación y búsqueda)
    • Capítulo 5 – Sorting (ordenación)
    • Capítulo 6 – Searching (búsqueda)
  • Volumen 4 – Combinatorial Algorithms (Algoritmos combinatorios)
    • Valumen 4A: Capítulo 7 – Combinatorial searching (búsqueda combinatoria)
    • Volumen 4B: Capítulo 7 – Combinatorial searching (búsqueda combinatoria, continuación)
    • Volumen 4C y 4D Capítulo 8 – Recursion (recursividad)
  • Volumen 5 – Syntactic Algorithms (algoritmos sintácticos)
    • Capítulo 9 – Lexical scanning (Análisis léxico, incluye búsqueda de cadenas y compresión)
    • Capítulo 10 – Parsing techniques (Técnicas de análisis)
  • Volumen 6 – The Theory of Context-Free Languages (Teoría de los lenguajes libres de contexto)
  • Volumen 7 – Compiler Techniques (Técnicas de compilación)

Además de sentar las bases de muchos algoritmos y realizar su análisis, su otra gran aportación es TEX, un estándar para la publicación de libros y artículos, separando la redacción del texto de su posterior impresión, una maravilla en el desarrollo de un sistema de impresión completamente independiente que es ampliamente utilizado.

Ofrecía una recompensa de 2,56 dólares por reportar erratas en sus libros (256 centavos son 1 dólar hexadecimal), envió muchos cheques que los afortunados receptores casi nunca cobraron, ya que tiene más valor el propio cheque firmado para el que lo recibe, pero tras tantos años parece ha dejado de hacerlo.

jueves, 16 de junio de 2022

Los que definieron la ciencia de la Informática (II)


Índices: Historia de la Informática


Grace Murray Hooper

 
Grace Hooper, contralmirante de la armada (fuente: Wikipedia)

Grace Brewster Murray, de casada Grace Murray Hopper nació en Nueva York en 1906, y falleció en Arlington en 1992. Estudió matemáticas, doctorándose en Yale en 1934. Durante la segunda guerra mundial decidió incorporarse a la Armada, siguiendo los pasos de su bisabuelo que fué almirante, por lo que en 1943 pasó por la academia naval obteniendo el grado de teniente. Fue destinada a trabajar en Harvard para el proyecto de computación que dirigía el comandante Howard Aiken para la construcción de la Mark I.

Tras la Segunda Guerra Mundial pasó a la reserva, pero siguió trabajando en la Mark I, para la que diseñó un programa para la gestión de la contabilidad, ya que en eso momento el ordenador estaba siendo usado por una compañía de seguros.

En 1949 pasó a la empresa Eckert-Mauchly Corporation en Filadelfia, más tarde llamada Univac y luego Remington Rand, donde trabajó en el desarrollo de las computadoras BINAC y en la UNIVAC I. Permaneció en la empresa hasta su retiro en 1971, y tras retirase de la armada en 1973 se incorporó como asesora en Digital Equipment Corporation, fue muy activa en foros industriales, dando unas 200 conferencias por año y participando en programas educativos hasta su muerte. Era muy popular, ya que en sus charlas siempre eran divertidas e incluían sus famosas historias de guerra, contando sus batallitas con los ordenadores.

Fue la primera mujer en ostentar un alto rango en la armada. Quiso retirarse varias veces, pero la armada no se lo permitió, permaneció en la reserva hasta finales de 1966 cuando tuvo que retirarse con el grado de Capitán de fragata, pero la Armada la volvió a llamar en 1967 para estandarizara los lenguajes de alto nivel que usaban. Se retiró de nuevo en 1971 pero se le pidió volver de nuevo en 1972. Fue ascendida a Capitán de navío en 1973. En 1983 ascendió a Contraalmirante y en 1986 se retiró de la Armada de manera definitiva. Fue enterrada con todos los honores militares en el cementerio Nacional de Arlington.

Lenguajes de programación

En la Univac I fue donde realizó sus mayores contribuciones a la ciencia de la informática y sentó las bases de la programación. Intentó convencerles de desarrollar un compilador que usara palabras en inglés, pero le dijeron que no era posible, por lo que en 1952 desarrolló el A-0 que fue el primer compilador operativo de la historia, usaba algunas órdenes en inglés, pero era más un linker que permitía llamadas a funciones estándar. Lo evolucionó en 1957 con el lenguaje B-0 o FLOW-MATIC, primer compilador para procesamiento de datos que usaba órdenes en inglés, que utilizó para diseñar programas relacionados con el cálculo de nóminas. 

Poco después apareció el lenguaje FORTRAN en la IBM, pero ella estaba implicada en un proyecto para el departamento de defensa, el desarrollo de un lenguaje de programación para aplicaciones comerciales con instrucciones en inglés, a partir de sus ideas en B-0 y de otro lenguaje de IBM, el COMTRAN desarrollado por Bob Bemer, similar al FORTRAN pero diseñado para aplicaciones de gestión del que se usó el manejo de las variables (las cláusulas PIC o PICTURE), se desarrolló el estándar del COBOL lanzado en 1959. Su idea fue diseñar un lenguaje completamente independiente de la máquina en que se compilara y ejecutara el programa, lo que consiguió completamente, que incluyera el manejo de ficheros y su entrada/salida, fundamental para las aplicaciones de gestión, lo que era una gran ventaja en ese momento en que cada máquina era completamente diferente a las demás, y el manejo de la E/S era muy específico.

Participó en los primeros comités de estandarización de lenguajes, que concluyeron en los estándar ANSI de 1968 para la sintaxis tanto del COBOL como del FORTRAN.

Mary Allen Wilkes

Mary Allen Wilkes nació en Chicago en 1937, y a fecha de hoy sigue con vida. Quería ser abogada pero sus padres no se lo permitieron, ya que en ese momento era muy difícil para una mujer ejercer. Estudió filosofía, pero un profesor le indujo a cambiar a informática por su mente lógica, por lo que entró en el Instituto de Tecnología de Massachusetts (MIT) en 1959, no tuvo problema para entrar a trabajar con computadoras, ya que tras la segunda guerra mundial era terreno copado por mujeres.

En el MIT se mantuvo hasta 1963. Allí trabajó corrigiendo programas, montó un sistema de reconocimiento de voz, y diseño el sistema operativo LAP (LINC Assembly Program) para el ordenador LINC (Laboratory INstrument Computer), uno de los primeros minis de la historia.

Mary Allen Wilkes con el LINC en el salón de su casa (fuente: mujeresconciencia.com)

En 1964 el equipo que trabajaba en el LINC se trasladó a San Luis (Misuri), pero ella prefirió quedarse, por lo que instaló en LINC en el salón, lo conectó al teléfono y continuó trabajando desde casa, desarrollando el sistema operativo LAP6, pensado para que fuera sencillo de utilizar por personas que no supieran de informática. Escribió el "LAP6 Handbook" y fue coautora del libro "Programando en Linc".

Tras esto dejó la informática, retomó su sueño de infancia, estudió derecho y ha ejercido de abogada hasta su jubilación.

Margaret Hamilton

Margaret Hamilton (Indiana 1936, sigue viva a día de hoy) es la creadora de la Ingeniera del Software como disciplina. Estudió matemáticas y se graduó en 1958. Tras su boda pasó una temporada ejerciendo de profesora, pero pronto se divorció. Entró en el MIT, destacó pronto y la nombraron directora de software del Charles Stark Draper Laboratory.

Allí desarrolló en 1965 el software de navegación que usaron las misiones Apolo en su camino a la Luna, trabajando muchas noches y fines de semana para completar el proyecto, a menudo con su hija pequeña jugando a ser astronauta junto a ella. Aquí sentó las bases de que los requisitos de robustez y tolerancia a fallos eran una prioridad para la seguridad y supervivencia de los astronautas. 

Margaret junto al código fuente del programa de navegación de las misiones Apolo impreso en 11 tomos (Fuente: Wikipedia)

 

Posteriormente trabajó en el software para el primer laboratorio espacial de la NASA, el SkyLab. En 1976 crea la empresa Higher Order Software, y en 1986 crea Hamilton Technologies, Inc. en Cambridge, Massachusetts, dode trabajó para desarrollar el paradigma de programación DBTF (Development Before the Fact, desarrollar antes de hacer).

En 2016 recibió la Medalla Presidencial de la Libertad, entregada por Barack Obama, por su trabajo en la NASA durante las misiones Apolo. Es autora de numerosos libros, artículos y ponencias en congresos.


miércoles, 15 de junio de 2022

Los que definieron la ciencia de la Informática (I)


Índices: Historia de la Informática

La cibernética es la ciencia que estudia los sistemas reguladores, y es la base del estudio de los ordenadores, hoy día esa palabra no se usa, se prefiere denominar a la ciencia directamente Informática, y a su aplicación Ingeniería Informática. Al ser una ciencia que nació con los ordenadores, es por tanto muy joven y fue definida por una serie de personas que son poco conocidas por desgracia, a Jobs y Gates los conoce todo el mundo, pero ellos no definieron la ciencia, Tesla es hoy día idolatrado por gente que no sabe realmente lo que hizo, pero la historia de la informática la definieron otras personas que merecen un reconocimiento, estas entradas hablarán de las que yo considero más importantes.

Alan Turing

Alan Turing (Fuente: biografiasyvidas.com)

Alan Mathison Turing nació en Londres en 1912, y falleció en 1954. Estudió matemáticas en Inglaterra y en Estados Unidos. En un momento en que no existía ningún ordenador definió teóricamente en 1936 una formalización de los conceptos de algoritmo y de computación en un artículo titulado "Acerca de los números computables", para lo que creó un artificio, una máquina universal teórica denominada máquina de Turing, gracias a este artificio junto a Alonzo Church demostraron que no se puede dar una solución universal al problema de la parada (esto es un tema muy técnico que no voy a explicar aquí). Hoy día se sigue usando la máquina de Turing en el estudio de los autómatas de proceso de lenguajes.

Como matemático teórico, estudió muchos conceptos relacionados con los algoritmos y con la idea de su automatización, y tuvo mucho interés en los códigos cifrados con varios estudios sobre la máquina de cifrado Enigma, la que usaban los alemanes para comunicaciones secretas entre las unidades combatientes y por la marina, que se emitían por telegrafía, por tanto era posible interceptarlas pero no descifrarlas.

Máquina enigma en uso, se precian los 3 rotores pero no se ve el panel frontal (fuente: Wikipedia)
 

En 1939, al poco de iniciarse la segunda guerra mundial, fue llevado a una instalación de la inteligencia militar británica ubicada en Bletchley Park (si se va por la zona visita obligada a la exposición existente). Allí trabajó en el descifrado de mensajes de la máquina Enigma, por lo que junto a su equipo comenzó a intentarlo manualmente, encontraron pautas en los mensajes que aportaron pequeños triunfos, pero muy lejos de un sistema realmente operativo. Ante eso decidió combatir el fuego con el fuego, y diseñó una máquina que pudiera luchar contra la máquina Enigma. 

Llamó a su máquina "Bombe" o bomba lógica (una máquina de uso específico para un solo propósito, por tanto no es realmente una computadora), lo abordó usando lo se denomina un algoritmo de fuerza bruta, probar combinaciones hasta acertar. Lo que hacía era a partir de un texto cifrado con la enigma, probar combinaciones de los rotores hasta encontrar un mensaje con sentido, probar combinaciones es rápido, pero había millones de combinaciones posibles (con n rotores diferentes hay (26n.n!) posibilidades, con los habituales 5 rotores nos da 1'4 millones de posibilidades, pero había más elementos para complicar el tema por lo que podía llegar a la asombrosa cifra de 158.962.555.217.826.360.000 posibilidades) por lo que su primer logro fue encontrar una forma de reducir las combinaciones, pero detectar cuando el mensaje tiene sentido era la parte más importante y la más complicada que tuvo que resolver. El primer prototipo estuvo funcionando el 14 de marzo de 1940, y en unos meses estaban funcionando hasta 200 máquinas. Como este trabajo estaba clasificado como secreto militar no se ha conocido hasta hace relativamente poco.

Bomba lógica expuesta en el museo de Bletchley Park (fuente: Wikipedia)

 

Nota: En Bletchley Park había otro equipo diferente que diseñó otra máquina denominada Colossus, diseñada para descifrar los mensajes cifrados usando otra máquina alemana, la Lorenz SZ40/42 que era usada para los mensajes de alto nivel y se transmitían por Teletipo. Diseñada por Tommy Flowers, estuvo operativo en febrero de 1944. Posteriormente la mejoró en la Colossus Mark II que empezó a operar en junio de 1944. Se llegaron a construir diez Colossus.

Tras la guerra Turing continuó con la investigación en computación, diseñó uno de los primeros computadores electrónicos programables digitales en el Laboratorio Nacional de Física del Reino Unido y poco tiempo después construyó otra de las primeras máquinas en la Universidad de Mánchester. Además, fue pionero en temas de Inteligencia Artificial, su idea más conocida es la prueba de Turing, definida en 1950, una forma de análisis del grado de "inteligencia" de un programa de ordenador, cosa inexistente en ese momento.

Aunque su contribución al descifrado de Enigma se dice que acortó la guerra en dos años, ahorrando miles de vidas, pero la sociedad inglesa del momento no era tan avanzada como pensamos. La homosexualidad era delito en ese momento, por lo que en 1952 fue procesado por ese delito, lo que le llevó a una crisis importante, a partir de ese momento publicó muy poco, y acabó suicidándose (aunque hay alguna duda sobre esto) dos años más tarde. En el año 2009 Gordon Brown, primer ministro británico, tras presiones populares se disculpó públicamente en nombre del gobierno británico por «la forma espantosa en que [Turing] había sido tratado». La reina Isabel II le otorgó un indulto póstumo en 2013.

Filmografía recomendada: Hay dos películas que se deben ver sobre el tema, "Enigma" de 2001, que trata sobre el equipo de descifrado de códigos de Bletchley Park, en esta se ven las dificultades que afrontaron aunque no se menciona a Turing y no pretende ser fiel a la historia completamente. La película que si trata sobre Turing es "The imitation Game" (El juego de imitación), que en España fué "Descifrando Enigma" y en Hispanoamérica "El código Enigma" de 2014, habla sobre su vida y su trabajo en Bletchley Park, aunque es un poco exagerada la forma de presentar a Turing y pasa de puntillas por el tema del suicidio. De manera accesoria en "Das Boot" (el submarino) de 1981 se ve de refilón la máquina, y en "U-571" del 2000 deben capturar una máquina Enigma de un submarino alemán junto al libro de claves. En "Una mente maravillosa" de 2001 se habla de descifrado de códigos, aunque no tiene que ver con Turing ni con la Enigma.

Konrad Zuse

Konrad Zuse manejando una de sus Z (fuente: zib.de)

Konrad Zuse nació en Berlín en 1910 y falleció en 1995, aunque estudió ingeniería es el primero en construir un ordenador moderno. Al final de la segunda guerra mundial los americanos y los rusos estaban en una dura pugna por ser los primeros en llegar a Berlín, y aunque es menos conocido peleaban por ser los que se llevaran a los mejores científicos alemanes. Así a Wernher von Braun se lo llevaron los americanos y a pesar de ser nazi convencido acabó dirigiendo la NASA, pero los rusos se llevaron a sus ingenieros y se adelantaron en la carrera espacial. Al no ser la informática una ciencia conocida, Zuse pasó de puntillas por los libros de historia, y hasta hace muy poco ni se le mencionaba.

Tras sus estudios de ingenieria pasa por la Ford donde destacó como dibujante y diseñador, para acabar trabajando como ingeniero en la Henschel en el diseño de aviones, la tarea más laboriosa era calcular el perfil alar, había que repetir los cálculos una y otra vez para calcular el perfil a lo largo del ala. En esa época solo se disponían del principio de los logaritmos, ya que \displaystyle \log_{a}{(x \cdot y)} = \log_{a}{x} + \log_{a}{y}, usando tablas de logaritmos y reglas de cálculo (que usaban este principio) se realizaban las multiplicaciones, cansado de esta monótona tarea dejó la empresa y se dedicó a diseñar y construir el primer computador de la historia. 

El resultado fue el Z1 que finalizó en 1938. Era una máquina mecánica movida por electricidad, una calculadora con capacidad de programación, que internamente usaba el sistema binario, se programaba usando una unidad de cinta de papel, operaba con datos en memoria y proporcionaba el resultado. Podía sumar, restar, multiplicar y dividir, más hacer una comparación, a un régimen de una operación cada 3 a 6 segundos, pero no llegó a funcionar perfectamente ya que las limitaciones del sistema mecánico lo hacían poco operativo.

 

Z1 en el salón de la casa de sus padres (fuente: assets.sutori.com)

No se desalentó, comenzó a trabajar en una versión mejorada denominada Z2, y solicitó fondos al estado para continuar sus investigaciones, pero al no ser del partido Nazi ni ver los dirigentes la utilidad real de la máquina, apenas consiguió financiación, pero siguió adelante. Abandonó su idea inicial de una máquina mecánica que le daba muchos problemas y comenzó a utilizar relés, dejó a medias la Z2 desarrollando la Z3 en 1941, versión ya operativa de la Z1 que funcionaba perfectamente. Lamentablemente los bombardeos de Berlín destruyeron tanto las máquinas como los planos, por lo que tras la guerra tuvo que empezar de cero.

Fundó la primera empresa dedicada a fabricar ordenadores en 1946, la Zuse KG, donde construyó la Z4, que se convirtió en 1950 en la primera computadora en ser comercializada, nuevamente en los libros se habla del Ferranti Mark I y del Univac I como los primeros vendidos, pero el se adelantó medio año vendiendo la máquina a la universidad de Zúrich en Suiza. Se puede ver hoy día una réplica en el museo de Múnich. La máquina era una calculadora binaria que pesaba una tonelada, usaba 2200 relés, disponía de una memoria de 500 palabras 32 bits, disponía de una unidad lectora y grabadora de tarjetas perforadas, pudiendo realizar 11 multiplicaciones por segundo. Se mantuvo en uso hasta 1959.

Le siguieron la Z5 y la Z11 de relés, y en 1955 la Z22 funcionando a válvulas y con memoria de núcleos magnéticos. La Universidad de Ciencias Aplicadas de Karlsruhe (Alemania) tiene una Z22 operativa. La Z23 de 1961 trabajaba ya con transistores.

Z22 expuesta en la universidad de Karlsruhe (fuente: Wikipedia)

 

En 1967, la empresa Zuse KG había construido un total de 251 computadoras. Ese mismo año Zuse sugirió que el universo en sí mismo es una retícula de computadoras (lo que se denomina Física computacional), publicando esta hipótesis en su libro Rechnender Raum. Por problemas financieros vendió la empresa a la Siemens y se retiró, dedicándose a su otra afición que era la pintura.

Las programadoras del ENIAC

En la segunda guerra mundial los cañones, obuses y morteros se disparaban según la distancia de tiro, el peso del proyectil, la altura donde querías que explotara y el ángulo de llegada, usando un libro con unas tablas se seleccionaban la cantidad pólvora a emplear, el ángulo de elevación y si la espoleta era de tiempo el tiempo de vuelo. Como los hombres estaban ocupados en la guerra, las mujeres calculaban estas tablas en la base militar de Aberdeen Proving Grounds en Pensilvania. El cálculo se hacía a mano, cada libro contenía unas 3.000 entradas, cada una requería hasta 750 pasos de cálculo (sencillos, sumar, restar multiplicar o dividir cantidades), por lo que compilar un libro requería millones de cálculos. Por esto a las mujeres que se dedicaban a esto se las llamaba Computers, y las reclutaban en la escuela de ingeniería de la Universidad de Pensilvania, donde existían ya máquinas auxiliares para realizar los cálculos.
 
Vista general del ENIAC (fuente: i0.wp.com)

En 1943 el ejercito financió la construcción del Electronic Numerical Integrator And Computer o ENIAC (integrador y computador numérico electrónico), diseñado por John W. Mauchly y John Presper Eckert y montado en la universidad de Pensilvania, completada en diciembre de 1945, estuvo operativa en febrero del 1946. Era un ordenador de base decimal de 27 toneladas de peso con 17.500 lámparas y 90.000 componentes adicionales, que requirió de aproximadamente cinco millones de conexiones. Podía ejecutar 5.000 sumas o 360 multiplicaciones por segundo.

Sufrió continuas modificaciones a lo largo de su vida. En 1947 fue trasladado a la base militar de Aberdeen, donde se usó en secreto hasta 1955 para calcular las trayectorias de los misiles nucleares.

La máquina estaba compuesta de una memoria principal y una serie de unidades de cálculo, cada unidad podía efectuar unas operaciones, pero había varias unidades de cada tipo. Para programarla se disponía de unos paneles con agujeros, similares a los de las centrales telefónicas de la época, mediante hilos se conectaban las memorias con las entradas y salidas de las unidades, cableando un circuito (posteriormente se reconfiguró para usar programación en memoria).

 

Programando el ENIAC (Fuente: s3.amazonaws.com)

Pondré un sencillo ejemplo. Si deseábamos ejecutar la operación consistente en multiplicar las posiciones de memoria 1 y 2, luego dividir el resultado con la posición de memoria 3, guardando el resultado en la posición de memoria 4, lo que hoy día sería M4 = (M1 + M2) / M3. Para realizarlo usaremos estas dos unidades:

  • Unidad de multiplicación A: Con las entradas 1 y 2 y una salida
  • Unidad de división B: con dos entradas para dividendo y divisor, y salidas para Cociente y Resto

Se cableaba así:

  • Memoria 1 a la entrada 1 del multiplicador A
  • Memoria 2 a la entrada 2 del multiplicador A
  • Salida del multiplicador A a la entrada dividendo del divisor B
  • Memoria 3 a la entrada divisor del divisor B
  • Salida de cociente del divisor B a la memoria 4 

Pero además hay que considerar que hasta que no ha concluido la operación anterior el resultado no aparece en su salida, por lo que hay que sincronizar las unidades para que las operaciones se ejecuten en orden, y evitar temas como la división por cero, control de desbordamientos, manejo de decimales, unos cuantos detalles, y pensar que no planteo más que un pequeño programa, sin considerar temas como saltos condicionales o bucles. Además, solo si tenías suerte no se fundía ninguna lámpara a mitad por lo que el control de errores era crítico. En la siguiente imagen se ve un programa real, tiene un aire similar a la programación ladder o por escalera de los PLC modernos.


Programa real para el ENIAC (fuente: computerhistory.org)

Para manejar todo esto se creó un equipo de 6 mujeres, las denominadas "Programadoras del ENIAC", que aparecen en las fotografías de la época. No eran modelos para las fotografías, eras matemáticas e ingenieras que se dedicaban a programar y atender la máquina. Como el nivel de secretismo era muy alto, el acceso al ordenador estaba muy limitado, por lo que primero preparaban los programas teóricos, luego preparaban los paneles, y cuando tenían el acceso los llevaban a la máquina, que ponían a ejecutar el programa, se verificaba que el "programa" era correcto, y se lanzaba el cálculo programado, que podía tardar unos minutos o varias horas.

Las chicas del ENIAC desarrollaron las bases de la programación de los ordenadores, pues no solo programaron, sino que crearon la primera biblioteca de rutinas y las primeras aplicaciones de software, incluso he leído que una de ellas diseñó la primera rutina de ordenación (aunque esto no lo tengo confirmado, y como sus programas eran secretos militares no hay demasiada información). 

Cuatro de las seis programadoras originales del ENIAC. Sostienen el mismo circuito en sus manos, la versión inicial a lámparas se redujo de tamaño en dos versiones manteniendo las lámparas, hasta llegar a la versión final con transistores (fuente: naftic.com/)
 
Las 6 programadoras fueron (figura nombre, apellido de soltera y apellido de casada):

  • Betty Snyder Holberton (1917-2001) Tras el ENIAC participó después en el UNIVAC I junto a Grace Hopper (que tendrá su propia entrada). Contribuyó en el lenguaje C-10 y participó en el desarrollo de los primeros estándares para COBOL y FORTRAN. Escribió el primer paquete de análisis estadístico que fue utilizado en el censo de los EE.UU. En 1997 recibió el premio Ada Lovelace. 
  • Betty Jean Jennings Bartik (1924-2011) formó parte del equipo que transformó el ENIAC en un ordenador con programas almacenados. Después de trabajar con BINAC y UNIVAC I, se convirtió en editora para Publicaciones Auerbach, pionera en tecnologías de la información. En 1981 ingresó en Data Decisions. En 2008 le fue concedido el premio del Computer History Museum. La Northwest Missouri State University tiene un museo dedicado a ella.
  • Ruth Lichterman Teitelbaum (1924-1986) se trasladó en 1947 a Aberdeen junto al ENIAC, donde enseñó a la siguiente generación de programadoras. 
  • Kathleen McNulty Mauchly Antonelli (1921-2006) se trasladó en 1947 con el ENIAC a la base militar de Aberdeen. En 1948 se casó con John W. Mauchly.
  • Frances Bilas Spence (1922-2012) se casó en 1947 con un ingeniero electrónico de la armada que trabajó en el ENIAC. Dejó su puesto para cuidar a su familia.
  • Marlyn Wescoff Meltzer (1922-2008)​ renunció a su puesto antes del traslado del ENIAC a Aberdeen para contraer matrimonio.

sábado, 11 de junio de 2022

Breve historia de los lenguajes de programación


Índices:Historia de la Informática

Otro que escribí en 2018, más vale tarde que nunca para los que gusten de un poco de historia de la informática.


Los ordenadores se clasifican por generaciones, la primera engloba a los primeros electromecánicos y a los de lámparas, la segunda los de transistores, la tercera en adelante la de los chips en función de su escala de integración. Los lenguajes también han tenido sus épocas, en general pasamos de una primera con su nacimiento, la etapa cuando el GOTO era el rey, los lenguajes estructurados, los lenguajes 4GL, y ahora se viven los lenguajes distribuidos. Siempre los lenguajes han seguido la evolución de los ordenadores, ya que hasta que no se disponía de recursos o de potencia de cálculo suficiente no era posible desarrollar ciertas características de los lenguajes.

Primeros ordenadores

Yo considero que es un error englobar en la primera generación todas las máquinas iniciales, ya que opino que debería haber una generación cero con las primeras máquinas en las que el programa estaba completamente separado de los datos, en lo que hoy se conoce como arquitectura Harvard , y empezar la primera generación en el EDVAC y el ILLIAC que fueron los primeros en adoptar lo escrito por Von Newman sobre el programa almacenado en memoria, usando la arquitectura que hoy se denomina Newman-Eckert-Mauchly, o arquitectura Princeton. Hoy día los microcontroladores como los PIC o los Atmel usan arquitectura Harvard, ya que el programa se graba en una memoria (usualmente flash) y permanecen indefinidamente, mientras los datos están en RAM y se pierden al apagar, pero su potencia de proceso y su rico lenguaje máquina hace que esto no sea ya una diferencia importante, solo es cuestión del tipo de memoria adecuada para cada uso.

Las primeras máquinas eran calculadoras y poco más, con las que se podían efectuar muchos cálculos repetitivos y siempre correctos (aunque en las primeras no siempre era así). Las Z las ideó Konrad Zuse pues trabajaba realizando el cálculo de las formas de las alas de los aviones, lo que representa calcular muchos datos usando siempre la misma fórmula, solo cambiaban algunos parámetros. El ENIAC se dedicó inicialmente a compilar tablas para la artillería, en función del tamaño del proyectil (proporcional al calibre del cañón), de su peso, de la carga de pólvora que se le introduce y del ángulo de disparo respecto a la horizontal, se calculaba el alcance del proyectil, y con esto se generaban tablas y más tablas de datos que se imprimían como manuales de tiro para cada cañón concreto.

Cinta de papel perforada (fuente: uvaciberperiodismo)
Las Z y casi todo el resto de los ordenadores usaban una unidad de cinta de papel en la que estaban las instrucciones a ejecutar, mientras que los datos se almacenaban en la memoria del aparato, por contra que en el ENIAC los datos estaban en la memoria igualmente, pero se usaba unos paneles en los que se cableaban las instrucciones a realizar, la máquina disponía de una serie de circuitos (sumadores, restadores, multiplicadores, divisores, etc), mediante el panel se cableaban las salidas de un circuito con la entrada de otro, seleccionando el origen de la información adicional si era necesario. Las Z eran máquinas electromecánicas binarias, el ENIAC usaba tubos de vacío, pero montados para trabajar en decimal, otras como la británica Harwell Computer usaban tubos decatrón que contaban bien de cero a nueve. En todas estas máquinas siempre se actuaba de la misma manera, al pedir desde el panel de control del aparato que se ejecute el programa, se leía una instrucción de la cinta del programa, se ejecutaba operando sobre los datos en memoria, copiándolos a otra ubicación o presentándolos en la salida, se avanzaba el lector de cinta una posición, se leía la nueva instrucción, se ejecutaba, y así sucesivamente hasta encontrar una instrucción especial que detenía la ejecución.

El lector de cinta no podía retroceder ni saltar, pero pronto se dieron cuenta de que esto era necesario incluso para sencillas ecuaciones, por ejemplo el cálculo de una raíz cuadrada puede dar un resultado real o imaginario, por lo que recurrieron a soluciones ingeniosas como usar más de un lector de cinta, el programa se empezaba a ejecutar en la primera cinta, pero en función del valor de algún registro de memoria se podía hacer que continuara en otra unidad, ejecutando así las primeras instrucciones condicionales. Se llegó a maquinas con hasta16 unidades de cinta para ejecutar los programas, pero con la limitación de no poder usar por ejemplo bucles. Se cargaban las cintas de papel, se introducían los datos en la memoria, y se lanzaba la ejecución del programa.

El imperio del código máquina


Con el programa almacenado en memoria esto cambió, ahora el ordenador podía ejecutar la instrucción en una posición de memoria, y en función de su evaluación saltar a la posición de memoria que se deseara (podía incluso modificarse a sí mismo, idea ya aportada por Von Newman y usada por ejemplo por Donald Knuth en "El arte de programar ordenadores"), mezclando en la memoria el programa y los datos se crearon los primeros ordenadores de propósito general auténticos, y los primeros Turing Completos (en este punto hay mucha controversia pues algunos afirman que las Z ya lo eran, pero sin instrucciones de salto yo personalmente no los incluiría en esta categoría). El cambio fue radical, ahora se escribía el programa en la cinta, se leía esta por completo en la memoria, se cargaban los datos en otras posiciones, y el ordenador empezaba a trabajar. Esto hizo necesario disponer de los primeros sistemas operativos muy rudimentarios, encargados de cargar los programas en la memoria de las maquinas.

Pronto se impusieron las unidades lectoras de tarjetas perforadas sobre las de cinta de papel, más cómodas de manejar, en cada tarjeta se escribía una dirección de memoria y su contendido, que era una sola operación o un solo dato, por lo que en caso de necesitar cambiar algo solo había que reemplazar una tarjeta y no volver a teclear todo el programa o cortar la cinta, eliminar un trozo y empalmar otro.

Se seguía trabajando igual, se perforaban las tarjetas con el programa, siempre en código máquina directamente, se añadían los datos, lo que podía hacerse directamente en la memoria o mediante otras tarjetas, y se ejecutaba el programa.

Nuestro cerebro es peor manejando números que palabras, y el número de instrucciones fue creciendo poco a poco, desde las 6 que podía efectuar el Z1 ya había que manejar decenas de ellas, por lo que pronto se desarrollaron nemotécnicos para los códigos de las instrucciones, los programas se empezaron a desarrollar en ensamblador, pero se traducían a código máquina manualmente.

Con el aumento de potencia de las máquinas fue posible desarrollar los primeros programas ensambladores, uno de los primeros fue introducido en el ordenador más vendido del momento, el IBM 650, desarrollado en los años 50, y se denominó SOAP (Symbolic Optimized Assembler Program), el programa se escribía en tarjetas perforadas, y luego se cargaban dos grupos de tarjetas, primero el programa ensamblador, luego las tarjetas con el programa en lenguaje ensamblador. El S.O. leía las tarjetas del ensamblador y lo cargaba en memoria, se ejecutaba el programa y este leía una tarjeta de código, la ensamblaba y luego grababa una tarjeta con el resultado. De esta forma se disponía del programa listo para su ejecución en código máquina de forma más sencilla.

A partir de 1951 surgieron varios lenguajes ensamblador con intentos de hacer uno universal, como el Regional Assembly Language de 1951, pero ante la disparidad de ordenadores del momento no funcionó. IBM por su lado lanzó en 1952 su lenguaje ensamblador denominado Autocoder, que tuvo varias versiones, intentando que se pudiera ejecutar en todos sus modelos pero sin conseguirlo completamente, por lo que cada Autocoder era específico de un ordenador o familia de ellos.

Primeros intentos

El Código Maquina y el Ensamblador fueron los reyes en la primera generación, en los 60 con la segunda generación de ordenadores se popularizaron los primeros lenguajes, desarrollados en los años 50, de los que voy a mencionar los más importantes en su orden cronológico de aparición. Hay que tener en cuenta que inicialmente se siguió utilizando mayoritariamente el Ensamblador, ya que permitía utilizar mejor los escasos recursos de las máquinas de las primeras generaciones.

Esta primera generación de lenguajes marcó los inicios de la computación moderna, marcó el gran hito de conseguir la independencia del lenguaje sobre la máquina en la que se ejecuta, y fijó las pautas de los posteriores lenguajes. Todos son leguajes imperativos, y todos evolucionaron haciéndose cada vez más estructurados, aunque mantienen el uso del GOTO

Aunque el auténtico pionero fue Zuse, en su Plankalkül , que podemos considerar como el primer lenguaje de programación, creado entre 1942 y 1946, que describió en un artículo en 1948, pero su especificación solo se publicó en 1972, como todo lo relacionado con Zuse siempre se tardó en reconocer sus méritos. Era un lenguaje bastante completo, con manejo de tipos de datos o de matrices, pero no era estructurado ni disponía de instrucciones de entrada/salida.

A principios de los 50 se empezó a experimentar con los primeros lenguajes primitivos, Grace Murray Hopper , una de las mayores figuras de la historia de la computación, si no la mayor, desarrolló el Sistema A-0 (Arithmetic Language version 0), considerado el primer lenguaje de alto nivel. Por aquella época ya se habían desarrollado muchas rutinas de código, que eran usadas añadiendo las tarjetas de esas rutinas a las de tu programa, la idea de Grace fue disponer de una gran librería de rutinas de código desarrolladas. Un programa en A-0 consistía en una secuencia de llamadas a esas rutinas junto a sus parámetros de entrada, y alguna instrucción adicional. Esto se perforaba en las tarjetas, y luego se usaban un conjunto de tres grupos de tarjetas, primero un primitivo compilador (poco más que un pequeño linker), que se cargaba en la memoria, seguían las tarjetas del "programa", que el "compilador" convertía en código máquina, y por fin las tarjetas con todas las rutinas que se podían usar, de las que se copiaban solo las necesarias para ejecutar el programa. De esta forma en la salida se encontraba el programa listo para usar.

No hay que menospreciar esto que aparenta ser tan sencillo, pues dependiendo de las rutinas que se cargaran los saltos dentro del programa debían efectuarse a unas u otras posiciones de memoria, por lo que no era tan directo compilar el programa, usualmente se empleaban varias unidades de cinta magnética para almacenar los datos intermedios, y mezclar todo al final en otra cinta, desde donde se podían enviar a la perforadora de tarjetas.

El A-0 evolucionó y se amplió, fue seguido por el A-1, el A-2 (cuyo fuente se publicó considerándose el primer programa de código abierto), evolucionó mucho para convertirse en el A-3 orientado a las matemáticas, en dos variantes denominadas A-3 o ARITH-MATIC, y AT-3 o MATH-MATIC), y por fin el B-0 o FLOW-MATIC, de 1955, orientado a la gestión y precursor directo del COBOL. 

Por otro lado, en 1953 surgió Speedcoding , desarrollado por John Backus. Era muy similar al A-0, pero enfocado a las matemáticas en punto flotante, ya que lo desarrolló para simplificar la escritura de programas para el ordenador científico IBM 701, en el que se solicitó un programa de cálculo de posiciones de estrellas para la década de los años 50, necesario para el manejo por los astrónomos. El leguaje era complicado de manejar, funcionaba bien, pero los programas que desarrollaba eran mucho más lentos que los escritos en código máquina, hasta 20 veces más lentos, lo que no lo hacía muy operativo.

1957 FORTRAN

El primer lenguaje históricamente fue el hoy casi olvidado FORTRAN (Formula-Traslation o traductor de fórmulas), orientado a la computación matemática, desarrollado por otro de los grandes padres de la computación, John Backus en la IBM, a partir de 1953 para el ordenador IBM-704, orientado hacia aplicaciones científicas, a partir de su anterior SpeedCoding. El primer compilador de FORTAN convertía el fuente en ensamblador SOAP, y luego este se ensamblaba y convertía en código máquina. El lenguaje fue lanzado para los clientes de IBM en 1957. El FORTRAN fue ampliamente utilizado en los años 60 para operaciones de cálculo matemático y de ingeniería, marcó el desarrollo del ALGOL y en su sintaxis se inspiró el BASIC .

Como particularidad un programa en FORTAN no tiene en cuenta los espacios en blanco salvo en las cadenas, provocando un dilema de compilación clásico, un bucle tiene la forma DO ETIQUETA VARIABLE = INICIAL . FINAL en donde ETIQUETA es la etiqueta que marca donde termina el bucle, VARIABLE la que lleva la cuenta del bucle, INICIAL y FINAL son los valores por los que iterará. Podemos escribir DO 10 I = 1 . 10 o bien DO10I=1.10 siendo equivalentes, pero también podemos escribir DO10I=1,10 aunque en este caso asignamos el valor 1,10 a la variable DO10I, haciendo que la compilación del programa sea un tanto "divertida", hasta el final de la línea no sabes cómo interpretar la sentencia, por lo que no es posible ir montando los habituales arboles de exploración de los compiladores.

1958 LISP


El segundo lenguaje de la época fue LISP (List Processor, procesados de listas), que todavía es usado. Está basado en un lenguaje anterior denominado IPL. Surgió poco después del FORTAN, pero inicialmente solo contaba con un intérprete y no disponía de compiladores. Especializado en lenguaje matemático inspirado en el Cálculo Lambda, muy bueno en el manejo de listas y usado desde sus inicios en Inteligencia Artificial. Aunque es un lenguaje poco usado fuera de ese campo, sigue vivo en lenguajes como PERL

1959 COBOL


El tercer lenguaje de la historia, que es todavía uno de los más usados hoy día, es COBOL (Common Business-Oriented Language, leguaje común orientado a los negocios), en cuyo diseño intervino un comité denominado CODASYL , aunque se asume que Grace Hopper es la diseñadora principal del lenguaje. Es el primer intento de desarrollar un lenguaje independiente completamente del ordenador en que se compila, pudiendo ejecutarse una vez compilado en otros ordenadores, y el primer intento de desarrollar en lenguaje natural en inglés. Esto ocasionó que los programas se puedan escribir en sentencias muy largas, escribiendo párrafos completos. Esto contrasta mucho con el escueto C, cuya sintaxis intenta hacer que se escriba lo mínimo posible para no perder tiempo escribiendo.

Al ser un lenguaje orientado a la gestión, contiene un extenso manejo de instrucciones de entrada/salida, manejo de ficheros y manejo de datos, incluyendo los primeros sistemas de manejo de ficheros indexados.

La primera versión de un compilador desarrollado en un lenguaje de alto nivel fue la que realizó Hooper para el COBOL, usando el lenguaje Flow-Matic.

1960 ALGOL


Aunque se comenzó a definir en 1958, hasta 1960 no se difundió. A partir del FORTAN, un equipo de científicos de la computación liderados por Backus desarrolló la especificación del cuarto lenguaje importante de esta época, el ALGOL (Algoritmic Languaje, lenguaje algorítmico), primer leguaje moderno de la historia y el que incluyó todo lo que hoy es un lenguaje imperativo, en el que por ejemplo se definió por primera vez el uso de bloques y las variables locales. 

El propio Backus introdujo la notación BNF para la definición de un lenguaje de ordenador, usada desde entonces. Aunque fue un lenguaje muy importante por las ideas que introdujo, su uso no se extendió ya que era difícil construir compiladores para él, ya que los ordenadores del momento no tenían recursos suficientes en general.

El primer compilador de un lenguaje desarrollado en el propio lenguaje que compilaba se desarrolló para ALGOL y se denominó NELIAC, se completó en 1958. Hoy día es poco conocido el ALGOL, pero no así su heredero directo, el lenguaje PASCAL.

1964 BASIC


Como vemos lo podemos considerar otro pionero por fechas, fue el primero que aprendí, mi muy querido BASIC del Spectrum, y luego trabajé con varias variantes del BASIC profesionalmente, por eso cuando puedo hacer algo hoy día prefiero usar Visual Basic, solo por nostalgia. 

BASIC proviene de Beginners' All-purpose Symbolic Instruction Code (Código simbólico de instrucciones de propósito general para principiantes). Fue diseñado en 1964 por John George Kemeny, Thomas Eugene Kurtz y Mary Kenneth Keller en el Dartmouth College en New Hampshire, Estados Unidos (por eso se conoce como el Dartmouth BASIC), fue creado como un medio para facilitar la programación en ordenadores a estudiantes (y profesores) que no fueran de ciencias.

Originalmente era un lenguaje interpretado, diseñado como herramienta de enseñanza, pero al tener una estructura sencilla de aprender, ser un lenguaje muy ligero y que un intérprete de BASIC es muy ligero, estuvo ampliamente disponibles en las microcomputadoras de los años 1970 y 1980.


domingo, 29 de mayo de 2022

Los primeros PC compatibles


Índices: El camino al O.P.       Historia de la Informática

Aunque esto lo escribí en 2018 tenía muy parado el blog, y como quiero hacer algunas entradas nuevas comenzamos por esta.



Mi querido Spectrum tuvo una larga lista de clónicos, sobre todo en la antigua URSS. Otro que le fue a la zaga en clones fue el Apple II, solo uno producido bajo licencia, el resto algunos muy compatibles y otros menos, y su principal origen fue Asia.

Pero la historia de los compatibles comienza con el IMSAI-8008, que es clonado en una serie de ordenadores con el mismo bus S-100 y un montón de slots de expansión, el mas famoso es el ALTAIR-8080, pero hay muchos como el Vector-1 del que ya he comentado su historia.

En esa época es cuando IBM lanza su PC, lo hace enfocado principalmente en la venta interna para que sus ingenieros dispusieran de uno en su casa. Como es muy caro IBM no piensa que se use como un ordenador personal muy popular, por lo que para potenciar su desarrollo publica una especificación completa de la ROM y de la arquitectura. Como se lanza en el momento del boom de la informática personal, inesperadamente el PC triunfa en un momento en que IBM era el rey indiscutible, el gigante de los gigantes, dueño de entre el 80 y el 90% del mercado, con ventas de muchos millones de dólares por encima del resto, lo que era garantía de calidad.

Por eso hay una serie de empresas que lanzan los primeros compatibles con el IBM, en principio sin oposición, pero tras el boom de ventas IBM pone un pleito a algunas (especialmente Eagle, Corona y Handwell) por violar el Copywrite de la ROM, ya que sin las BIOS el MS.DOS no funciona y no sería posible ejecutar los mismos programas. Algunas como Corona llegan a un acuerdo antes del juicio, otras como Eagle reescriben el código de su BIOS. En este artículo de la revista InfoWorld se habla de algunas de estas, pero solo las americanas.

Divido esta entrada en tres partes, primero los clónicos, seguida de una mención a los numerosos compatibles que no eran clones pero ejecutaban MS.DOS decentemente, y en tercer lugar otros ordenadores que se parecian a un PC pero no lo eran.

CLÓNICOS


Esta es la lista ordenada por fecha aproximada de lanzamiento de los primeros ordenadores compatibles con el IBM PC de la historia lanzados en los años 1982 y 1983:


  • Columbia Data Products: Lanza en junio de 1982 el MPC 1600 "Multi Personal Computer", el primer compatible disponible en el mercado. Su BIOS no es una copia sino un producto de ingeniería inversa. En 1983 lanza el Columbia VP con formato de portable.
Fuente: computerarchive.org
Fuente: digitize.textfiles.com
  • Eagle Computer: Esta empresa vendia ordenadores Z80 con CP/M con buenos resultados desde finales de los setenta, en 1982 lanza el Eagle 1600 que ejecutaba MS.DOS aunque no era totalmente compatible, pero el mismo año lanza el Eagle PC que si lo era. En 1983 lanza su portable, el Spirit. Su software más popular para CP/M eran el procesador de textos Spellbinder y una hoja de cálculo, que pasaron a MS.DOS renombrándolos como Eaglewriter e Eaglecalc respectivamente. Tras el pleito de IBM reescribe el código de la BIOS y vende los chips grabados a terceros, aunque la competencia y la bajada de precios de IBM hace que sus ventas bajen y cierra en 1986.
    Fuente: www.digibarn.com
Fuente: www.theretrowagon.com
  • Dynalogic: Empresa canadiense que lanza en enero de 1983 el Hyperion PC, un ordenador portable (aunque menos que el Compaq), y cuyo hardware no era totalmente compatible, su mejor baza era su diseño, el teclado se podía guardar debajo de la unidad ocupando menos en la mesa.
    Fuente: oldcomputers.net
  • Compaq Computer: Creada en 1982 por tres altos directivos de la Texas Instruments, anuncian el Compaq Portable en 1982 pero su lanzamiento fue en marzo de 1983, causando un gran revuelo pues era un buen ordenador, fácilmente portable, se vendió muy bien, tanto que IBM lanzo su propio modelo IBM Portable, más pesado y que no tuvo tanto éxito como el de Compaq. Posteriormente lanzaron un modelo de sobremesa Compaq PC.
Fuente: www.seasip.info
  • Seequa: Lanza en 1983 el Seequa Chameleon, otro portable que incluye un Z80 y un 8086 pudiendo ejecutar tanto CP/M como MS.DOS, aunque no era 100% compatible por lo que tuvo solo críticas regulares en la prensa especializada.
Fuente: www.old-computers.com
  • Corona Data Systems: Lanza un ordenador Corona PC en 1983, y al año siguiente el Corona PPC-400, el modelo portable.
  • Fuente: www.sba.unipi.it

    Fuente: www.ricomputermuseum.org
  • Computer Devices Inc.: lanza en 1983 el DOT, otro portable que como novedad incluye una impresora en su carcasa.
  • Fuente: www.betaarchive.com
  • Logabax (posteriormente Excelvision): Esta empresa francesa lanza el PERSONA 1600, basado en el Olivetti M24 pero mucho más compatible (aunque no al 100% ejecutaba sin problema programas bajo MS.DOS).
    Fuente: forum.homecon.org
  • Normerel: Otra empresa francesa lanza el OPlite, con un diseño diferente a lo habitual.
    Fuente: www.old-computers.com
  • Vadem Inc.: Diseña un sistema que al no poder fabricar por falta de medios cede a la empresa Osborne, que lo comercializa como el Osborne 3 en USA o el Osborne Encore en otros países. Con una pantalla LCD y un peso reducido era un gran portable, con una estética diferente y reducido peso, pero por problemas de coste solo disponía de una pantalla de 16 lineas por lo que las 9 inferiores no eran visibles. Esto era una limitación importante lo que junto a algunos problemas de compatibilidad no lo hicieron muy popular.
    Fuente: oldcomputers.net
  • Panasonic: La japonesa lanza el Senior Partner, otro portable que incluye impresora en la carcasa.
  • Fuente: www.digibarn.com
  • Visual Technology: Lanza el Visual 1083 (también conocido como Commuter), un hibrido ya que admite una pantalla LCD opcional de solo 16 líneas lo que lo convierte en portátil poco práctico, pero se puede conectar a un monitor estándar de 25 líneas y ser un compatible normal.
  • Fuente: www.worthpoint.com

COMPATIBLES MS.DOS

Aparte tenemos una legión de máquinas que podían ejecutar MS.DOS aunque no eran compatibles por hardware o por la BIOS, entre estos hubo modelos de Hewlett-Packard, Digital Equipment Corporation, Olivetti, Sanyo, Tandy, Texas Instruments, Tulip, Xerox o Wang. Un buen ejemplo de este tipo de máquinas es el Olivetti M20, una maquina con un buen diseño, que usaba un procesador Z8001 pero que podía ejecutar sin muchos problemas programas bajo MS.DOS (emulaba bien al 8086 y la BIOS del PC) o CP/M. Otra gran máquina era el Apricot PC que usaba un 8086 y físicamente era muy similar al IBM PC pero no era compatible a nivel de BIOS. La francesa METROLOGIE lanza el BFM 186, especializado en CAD, que no es compatible a nivel de hardware pero si ejecuta MS.DOS. Sharp lanza uno de los primeros portátiles de la historia, el PC-5000, pero su pantalla de 5 líneas no es muy operativa bajo MS.DOS, y su compatibilidad general no es muy buena. El PORTABLE PROFESSIONAL COMPUTER (PPC) de la Texas Instruments, versión portable del TI PC, no es muy compatible, pero TI adapta muchos programas populares para él, como el Lotus 1-2-3.

En otro nivel se sitúan los que intentan unir lo mejor del momento CP/M y MS.DOS a la vez, sistemas con varios procesadores que pueden usar la misma memoria, video y periféricos, aunque en estas máquinas se decide cual se usa en el momento del arranque, ya que no pueden trabajar a la vez:

  • Fujitsu: en 1983 lanza el Micro 16s con una placa Z80 a 4Mhz y CP/M, pero su diseño le permite usar varias placas diferentes para las CPU de la época, por lo que posteriormente se lanza la placa 8086 a 8Mhz con MS.DOS. En el aire quedaron los planes de lanzar las placas para Motorola 68000, Intel 80286 o el Zilog Z8000. Su diseño lo hacía no 100% compatible a nivel de hardware, pero era un maravilloso diseño. Esta máquina es la sucesora del Fujitsu FM16Beta, también con dos placas para Z80 y 8086, pero incompatible por BIOS y hardware que ejecutaba CP/M 86 o una versión propia del MS.DOS.
El Micro 16s. Fuente: computerpreservation.ecrater.com
FM16 beta. Fuente: www.1000bit.it

  • SMT: esta empresa francesa lanza el magnífico Goupil 3 con tres procesadores, Z80, 8086 y 6809, tiene algunos problemas de compatibilidad de hardware y software pero puede ejecutar CP/M, MS.DOS y Uniflex.
  • Fuente: www.obsolete-tears.com
  • Vector Graphics: Esta empresa ya comentada en otra entrada lanza el Vector-4 que dispone de un Z80 y un 8088, pero no es muy compatible, no puede tan siquiera leer los discos de otros sistemas por usar disqueteras Hard Sector.
    Fuente: oldcomputers.net
  • Xerox: con su modelo Xerox 8/16 ofrece lo que denomina en los folletos publicitarios "lo mejor de ambos mundos", el Z80 es su principal procesador y la máquina se vende con un CP/M, el procesador secundario es el 8086 que soporta MS.DOS, pero este SO debe adquirirse como opción, además la máquina no es tan compatible como la venden.
  • Fuente: www.computinghistory.org.uk

IMITADORES


Aunque no sean ya compatibles en absoluto, siempre nos queda el juego de imitiación que intentaron dos máquinas del momento:


  • SPECTRAVIDEO: en su modelo SV 328 permite montar una caja de expansión denominada Super Expander con doble disquetera que lo hace físicamente muy similar a un PC.


    Fuente: wikipedia
  • Texas Instruments: el TI99 dispone también de una unidad externa de expansión que lo asemeja a un PC denominada Periferical Expansion Box, también con doble disquetera.

    Fuente: www.cuevadeclasicos.org