45 votos

¿Cómo se programaron los primeros microprocesadores?

Acabo de darme cuenta de que si estás escribiendo un sistema operativo, ¿en qué lo estás escribiendo? Lo pregunto porque estoy leyendo un libro de fundamentos de microprocesadores de 1980 y esta pregunta me vino a la cabeza:

¿Cómo se programó el primer chip microprocesador?

La respuesta puede ser obvia, pero me molesta.

56voto

Matt McMinn Puntos 6067

Me tomaré tu pregunta al pie de la letra y hablaré sobre todo de microprocesadores, no de ordenadores en general.

Todos los ordenadores tienen algún tipo de código máquina. Una instrucción consta de un opcode y uno o más operandos. Por ejemplo, la instrucción ADD para el Intel 4004 (el primer microprocesador) se codificaba como 1000RRR donde 1000 es el opcode de ADD y RRRR representaba un número de registro.

Los primeros programas de ordenador se escribieron a mano, codificando a mano los 1 y los 0 para crear un programa en lenguaje de máquina. A continuación, se programaba en el chip. Los primeros microprocesadores utilizaban una memoria de sólo lectura (ROM), que posteriormente fue sustituida por EPROM (Erasable Programmable ROM, que se borraba con luz UV); ahora los programas se suelen programar en EEPROM ( "Eléctricamente...-EPROM" que puede ser borrado en el chip), o específicamente la memoria Flash.

La mayoría de los microprocesadores pueden ahora ejecutar programas desde la RAM (esto es prácticamente un estándar para todo excepto para los microcontroladores), pero tiene que haber una forma de cargar el programa en la RAM en primer lugar. Como Joby Taffey señaló en su respuesta, esto se hizo con interruptores de palanca para el Altair 8080, que fue alimentado por un Intel 8080 (que siguió al 4004 y 8008). En tu PC, hay un trozo de ROM llamado BIOS que se utiliza para arrancar el ordenador y cargar el sistema operativo en la memoria RAM.

El lenguaje de máquina se vuelve tedioso rápidamente, por lo que se desarrollaron programas ensambladores que toman un lenguaje ensamblador mnemónico y lo traducen, normalmente una línea de código ensamblador por instrucción, a código de máquina. Así, en lugar de 10000001, se escribiría ADD R1.

Pero el primer ensamblador tuvo que ser escrito en código máquina. Luego se podía reescribir en su propio código ensamblador y utilizar la versión en lenguaje máquina para ensamblarlo la primera vez. Después, el programa podía ensamblarse a sí mismo. Esto se llama el arranque y también se hace con los compiladores -- normalmente se escriben primero en ensamblador (u otro lenguaje de alto nivel), y luego se reescriben en su propio lenguaje y se compilan con el compilador original hasta que el compilador pueda compilarse a sí mismo.

Dado que el primer microprocesador se desarrolló mucho después de que existieran los mainframes y los miniordenadores, y que el 4004 no era realmente adecuado para ejecutar un ensamblador, Intel probablemente escribió un ensamblador cruzado que se ejecutaba en uno de sus grandes ordenadores, y tradujo el código en ensamblador para el 4004 en una imagen binaria que se podía programar en las ROM. Una vez más, esta es una técnica común utilizada para portar compiladores a una nueva plataforma (llamada compilación cruzada ).

23voto

BWW Puntos 302

Al principio, los programas se escribían en papel y luego se trasladaban a cualquier método de entrada que tuviera el ordenador. Se pasó de los mandos, interruptores y puentes de los primeros ordenadores a las tarjetas perforadas y los teclados.

La siguiente ilustración muestra lo que hoy en día real que utilizan los programadores:

16voto

Bob Nadler Puntos 1959

Bueno, yo estaba por aquí cuando salieron los micros, escribimos ensambladores y compiladores cruzados en mainframes y minis, y luego los pasamos al hardware de 8 bits, la gente no se molestó en construir compiladores/ensambladores en los micros hasta que tuvieron suficiente almacenamiento local para hacerlo útil

14voto

Alex Andronov Puntos 178

Una de las primeras formas de memoria de sólo lectura era una cuadrícula en la que la dirección seleccionaba una fila (tirando de ella hacia abajo), y las columnas representaban los datos. Cada columna tendría un pull-up, y cada intersección tendría un diodo soldado para representar un "cero", o ningún diodo para representar un "uno" [los niveles de los bits podían invertirse si se deseaba, en los casos en que eso redujera el número de diodos necesarios]. Se podría "programar" cualquier patrón de bits deseado soldando los diodos adecuados.

Este diseño se introdujo en el mundo de los circuitos integrados en forma de fusible-PROM. Esencialmente, una PROM con fusible era un circuito como el anterior, integrado en un chip, excepto que todos los diodos estaban poblados, y cada diodo tenía un fusible débil en serie con él. Tal y como se envía, una PROM leería "0" en todas las ubicaciones. Sin embargo, se podían eliminar los diodos de forma selectiva seleccionando la dirección adecuada y poniendo las líneas de datos correspondientes a un nivel alto [nota: creo que cada bit tenía su propio transistor, en lugar de un diodo, pero el principio es el mismo].

A las PROM programadas con fusibles les sucedieron las memorias de semiconductores, que almacenan los bits implantando cargas en los condensadores internos. Estas memorias no sólo son más compactas que las PROM con fusible, sino que, si se alojan en paquetes transparentes a los rayos UV, pueden borrarse y reutilizarse. Hay que tener en cuenta que incluso las llamadas memorias "programables una sola vez" utilizan casi siempre este mismo diseño, pero simplemente están alojadas en paquetes opacos a los rayos UV.

two men pointing at a large diode matrix almacén de control de matriz de diodos del 1950 Ordenador Whirlwind del MIT

transistor-matrix with tiny SMD transistors almacén de control de la matriz de transistores de 2005 la CPU MT15

7voto

baudtack Puntos 325

No estoy seguro de que nadie haya abordado la verdadera pregunta del PO, que parece ser "¿Cómo sabe el ordenador cómo ponerse en marcha?" Así que lo intentaré.

Empieza con una analogía. "¿Cómo sabe un transistor cómo ponerse en marcha?" Por supuesto, no lo hace, simplemente funciona de acuerdo con la física, y el ingeniero construye el circuito para que comience en un estado conocido.

Los ordenadores saben cómo arrancar porque son circuitos (muy complicados, por supuesto) y están construidos para empezar en un estado concreto. En una máquina moderna ese estado puede ser uno en el que el bus principal reasigna parte del espacio de direcciones para utilizar una ROM en la placa base como memoria baja (la ROM ha sido grabada con una BIOS). En una máquina de primera generación el estado inicial podría haber sido el de la CPU detenida, el contador de programa a cero y el subsistema de conmutación de memoria activo.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X