¿Cómo se programaron los primeros microprocesadores?

43

Esto me acaba de dar cuenta de que si estás escribiendo un sistema operativo, ¿en qué lo estás escribiendo? Le pregunto esto cuando estoy leyendo un libro de fundamentos de microprocesador de 1980 y esta pregunta se me vino a la cabeza:

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

La respuesta puede ser obvia pero me está molestando.

    
pregunta Dean

9 respuestas

54

Tomaré su pregunta literalmente y discutiré sobre todo los microprocesadores, no las computadoras en general.

Todas las computadoras tienen algún tipo de código de máquina. Una instrucción consiste en un código de operación y uno o más operandos. Por ejemplo, la instrucción ADD para el Intel 4004 (el primer microprocesador) se codificó como 1000RRRR donde 1000 es el código de operación para ADD y RRRR representaron un número de registro.

Los primeros programas de computadora fueron escritos a mano, codificando a mano los 1 y 0 para crear un programa en lenguaje de máquina. Esto se programa en el chip. Los primeros microprocesadores utilizaron ROM (memoria de solo lectura); luego fue reemplazado por EPROM (ROM programable borrable, que se borró con luz UV); ahora los programas generalmente se programan en EEPROM ( "Electrically ...- EPROM" , que puede borrarse en el chip), o específicamente en la memoria Flash.

La mayoría de los microprocesadores ahora pueden ejecutar programas sin RAM (esto es bastante estándar para todo menos microcontroladores), pero en primer lugar, debe haber una forma de cargar el programa en la RAM. Como señaló Joby Taffey 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 su PC, hay un poco de ROM llamada BIOS que se utiliza para iniciar la computadora y cargar el sistema operativo en la memoria RAM.

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

Pero el primer ensamblador tenía que estar escrito en código de máquina. Luego se podría reescribir en su propio código de ensamblador, y la versión en lenguaje de máquina se usó para ensamblarlo la primera vez. Después de eso, el programa podría ensamblarse. Esto se denomina bootstrapping y también se realiza con compiladores; normalmente se escriben primero en ensamblador (u otro lenguaje de alto nivel), y luego se reescriben en su propio idioma y se compilan con el compilador original hasta que el compilador pueda compilarse por sí mismo.

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

    
respondido por el tcrosley
23

Originalmente, los programas se escribían en papel y luego se transponían a cualquier método de entrada que la computadora tuviera disponible. Esto pasó de perillas, interruptores y cables de puente en las primeras computadoras, a tarjetas perforadas, a teclados / tableros.

La siguiente ilustración muestra lo que usan los programadores actuales reales :

    
respondido por el W5VO
16

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

    
respondido por el Paul
14

Una forma temprana de memoria de solo lectura era una cuadrícula donde 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 bits podrían invertirse si se desea, en los casos en que eso reduciría el número de diodos requeridos]. Cualquier patrón deseado de bits se podría "programar" soldando en los diodos apropiados.

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

Las PROM programadas con fusibles fueron sucedidas por las memorias de los semiconductores, que almacenan bits mediante la implantación de cargas en los condensadores internos. Estas memorias no solo son más compactas que las PROM con fusibles, sino que, si se encuentran en paquetes transparentes a los rayos UV, pueden borrarse y reutilizarse. Tenga en cuenta que incluso las llamadas memorias "programables de una sola vez" casi siempre usan este mismo diseño, pero simplemente se encuentran en paquetes opacos a los rayos UV.

diode-matrixcontrolstorede1950 MIT Whirlwind Computer

transistor-matrixcontrolstorede2005 la CPU MT15

    
respondido por el supercat
7

No estoy seguro de que alguien haya respondido a la pregunta real del OP, que parece ser "¿Cómo sabe la computadora cómo empezar?" , así que lo intentaré .

Comienza con una analogía. "¿Cómo sabe un transistor cómo comenzar?" Por supuesto que no, simplemente funciona de acuerdo con la física, y el ingeniero construye el circuito para que se inicie en un estado conocido.

Las computadoras saben cómo comenzar porque son circuitos (muy complicados, por supuesto) y están diseñadas para iniciarse en un estado particular. En una máquina moderna, ese estado podría ser uno en el que el bus principal reasigne parte del espacio de direcciones al usuario de una ROM en la placa base como memoria baja (la ROM se ha grabado con un BIOS). En una máquina de primera generación, el estado inicial podría haberse detenido en la CPU, el contador del programa a cero y el subsistema de conmutación de memoria activo.

    
respondido por el dmckee
6

Un sistema operativo es un programa de computadora que se ejecuta directamente en el procesador. Puede escribirse en cualquier idioma que pueda compilarse o agruparse según las instrucciones de la máquina. Asamblea y C son opciones comunes.

El código se carga en los procesadores con una sola instrucción a la vez desde una tienda: una ROM o RAM.

El Z3 , el primer procesador programable se creó a partir de relés electromecánicos y leyó las instrucciones de la película perforada .

La Altair 8800, la primera computadora personal, se programó mediante la activación de interruptores.

Para saber cómo se construye un procesador a partir de la lógica digital, consulte enlace

Para un historial, vea enlace

    
respondido por el Toby Jaffey
5

Aquí hay un poco de computadoras realmente viejas:

Por lo que sé, en sus días, tenía un gran panel frontal de la computadora que se usaba para programar ellos. Básicamente, cada celda de memoria en esas computadoras estaba conectada a los conmutadores. Podrías alimentar la memoria y luego usar los interruptores para configurar los datos en cada celda. De esta manera, ingresaría el programa bit a bit en la memoria de la computadora. Luego establecerías el punto de inicio del programa y comenzarías la ejecución.

A medida que avanzaba la tecnología, se desarrollaron los llamados programas de cargador de arranque. Son programas cortos cuyo objetivo principal es iniciar otro programa desde la memoria de la computadora. El problema con la introducción de programas bit a bit (y más de un bit usando números hexadecimales octales y posteriores) fue que era muy lento y que había muchas posibilidades de que el operador cometiera un error al cargar el programa. Por lo tanto, los programas cortos se usarían para cargar programas más grandes almacenados en la memoria de la computadora. A medida que el tiempo avanzaba, la porción de código que debía ingresarse manualmente disminuía y en las computadoras modernas a menudo tenemos cargadores de arranque escritos en algún tipo de ROM o incluso memoria flash.

    
respondido por el AndrejaKo
4

Hace algunos años me encontré con un programador de microcontroladores que tenía una pantalla de siete dígitos de siete segmentos y un teclado hexadecimal. Estoy seguro de que no tenía un microcontrolador a bordo y le permitió ingresar el código de la máquina directamente de un byte a la vez.

Así que esto le permitiría compilar (dolorosamente) una lista de códigos de Operación uno por uno manualmente e ingresarlos en el chip.

No tengo idea si todavía puedes obtenerlos, pero supongo que se usó algo similar cuando los microcontroladores eran relativamente nuevos.

    
respondido por el BG100
1

Los primeros microprocesadores se habrían programado con la ayuda de computadoras existentes que no estaban basadas en microprocesadores. Antes de que se produjera la primera CPU en un chip, ya existían arquitecturas informáticas avanzadas que se construían a partir de componentes discretos en lugar de microprocesadores. Eche un vistazo a, oh, digamos, IBM 360.

    
respondido por el Kaz

Lea otras preguntas en las etiquetas