miércoles, 14 de noviembre de 2012

El camino a los ordenadores personales: El Kenbak-1


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


Aunque la máquina de Olivetti Programma 101 (ver esta entrada) estaba en el mercado desde 1965, se le consideraba solo una calculadora programable, ya que su capacidad de cómputo era muy limitada. Al principio de los 70 varios aficionados habían montado ya sus propios ordenadores, pero solo para su uso personal. Por eso el Kenbak-1 está considerado como el primer ordenador personal comercial de la historia.

Fue anunciado en la revista Scientific American de septiembre de 1971 por un precio de 750$- Solo se vendieron 40 unidades (se conocen solo 10 unidades en colecciones particulares, además del prototipo de la máquina en un museo), por lo que la  Kenbak Corporation cerro en 1973 por falta de ventas.

Una unidad del modelo de producción


Fue diseñado por John V. Blankenbaker en 1970 en una sola placa de circuito impreso, usando chips de media escala de integración, sin un procesador propio (el 4004 apareció el año siguiente), todo a base de 132 chips TTL, trabajando a 1Mhz, usando interruptores para la entrada y luces para la salida, lo que le permitía trabajar bit a bit con sus 256 posiciones de memoria, construida usando dos registros tipo MOS de 1.024 bits cada uno. Dentro de la caja estaba la placa base, en el frontal el panel de control, y pegado a la zona trasera una fuente de alimentación que proporcionaba +5 y -12 voltios, junto a un pequeño ventilador. La caja medía 49cm de ancho, 27cm de profundidad y 12 cm de altura, alcanzando un peso de 6.2 kg.

Se pensó para uso educativo, pero su falta de posibilidad de expansión y sus evidentes limitaciones de entrada/salida lo hicieron poco atractivo para un mercado, según comenta el propio John Blankenbaker, fracasó porque "el mundo simplemente no estaba listo para la computación personal".

Como funcionaba

La máquina disponía de un conjunto de interruptores en el panel frontal, mediante el que se interactuaba con la máquina. Mediante 8 conmutadores se introducía bit a bit una posición de memoria, se pulsaba el botón de "Guardar dirección", luego se establecía el valor deseado en esa posición de memoria bit a bit, se pulsaba el botón "Guardar valor" y era almacenado en la posición guardada. Los datos de la memoria se visualizaban mediante 8 bombillas en el frontal, seleccionando en los interruptores la posición a leer, pulsando luego "Leer dirección" o "Leer valor". Disponía de un botón "Ejecutar" para lanzar el programa. Este podía detenerse esperando obtener un valor de los interruptores del frontal, o mostrando una posición de memoria en las luces.

La máquina disponía de una ranura en el frontal, pensada para alojar un lector de tarjetas como unidad de expansión, pero nunca se llegó a desarrollar.

Internamente funcionaba como una máquina de estados, con 32 posibles estados (aunque no se usaban todos), que representaban acciones internas como actualizar el contador del programa, o ejecutar una de las 21 instrucciones posibles. Cada instrucción era de 2 bytes, el primero contenía el código de operación, y el segundo la dirección de memoria, usando 5 tipos de direccionamiento: Inmediato, Directo a memoria, Indirecto, Indexado o Indirecto indexado.

La máquina carecía de registros, usando posiciones de memoria para ello, por lo que estas posiciones de memoria  tenían un uso prefijado:

  • Dirección de memoria 000 decimal - 000 octal: Registro A
  • Dirección de memoria 001 decimal - 001 octal: Registro B
  • Dirección de memoria 002 decimal - 002 octal: Registro X (índice para indirectos)
  • Dirección de memoria 003 decimal - 003 octal: Registro P (contador de programa)
  • Dirección de memoria 128 decimal - 200 octal: Registro de Salida
  • Dirección de memoria 129 decimal - 201 octal: Estado del registro A (desbordamiento y acarreo)
  • Dirección de memoria 130 decimal - 202 octal: Estado del registro B (desbordamiento y acarreo)
  • Dirección de memoria 131 decimal - 203 octal: Estado del registro X (desbordamiento y acarreo)
  • Dirección de memoria 255 decimal - 377 octal: Registro de Entrada
Realizaba operaciones de suma, negación y resta con los registros A, B o X. Solo operaba con números enteros en un único byte con signo (127 a -128) o sin signo (0 a 256), pudiendo manejar fracciones en las que el denominado era siempre 128 (de 127/128 a -128/128), aunque siempre podías hacer que tu programa manejara números de varios bytes.

No hay comentarios:

Publicar un comentario