Como foram programados os primeiros microprocessadores?

44

Isso me ocorreu que, se você está escrevendo um sistema operacional, em que está escrevendo? Eu pergunto isso enquanto estou lendo um livro sobre fundamentos de microprocessadores de 1980 e essa pergunta me veio à cabeça:

Como foi programado o primeiro chip de microprocessador?

A resposta pode ser óbvia, mas está me incomodando.

reitor
fonte
6
Se eu tiver permissão para conectar meu próprio trabalho, consulte minha resposta para "Como o kernel do Linux pode se compilar?" no estouro de pilha . A resposta não é óbvia até você entender o princípio geral, em que ponto você vai dizer "Bem, é claro ..."
dmckee
@dmckee Mas ainda não responde à pergunta, como sabia o que fazer :) quem disse ao computador com os switches o que fazer? Eu quero um pouco mais de detalhes.
Dean
4
Então a pergunta é sobre como projetar a sequência de inicialização do primeiro chip? Bem, essa certamente é uma pergunta que pertence a este site, mas é como projetar uma lógica digital construída a partir de componentes ... faça com que ela comece em um estado conhecido e, em seguida, alimente entradas que farão coisas úteis. Eu vou deixar para outro para fornecer a resposta detalhada, porque eu sou instável sobre isso, mas você não sabe que os primeiros computadores foram implementados em tubos de vácuo, certo? Depois, houve uma geração em transistores individuais, tudo antes do primeiro micro chip. Os engenheiros já sabiam o que estavam fazendo.
dmckee
1
Em processadores que não são micro, é claro.
user253751

Respostas:

56

Aceitarei sua pergunta literalmente e discutirei principalmente microprocessadores, não computadores em geral.

Todos os computadores possuem algum tipo de código de máquina. Uma instrução consiste em um código de operação e um ou mais operandos. Por exemplo, a instrução ADD para o Intel 4004 (o primeiro microprocessador) foi codificada como 1000RRRR, onde 1000 é o código de operação para ADD e RRRR representou um número de registro.

Os primeiros programas de computador foram escritos à mão, codificando manualmente os zeros e zeros para criar um programa em linguagem de máquina. Isso é programado no chip. Os primeiros microprocessadores usavam ROM (Read-Only Memory); este foi posteriormente substituído por EPROM (ROM programável apagável, que foi apagada pela luz UV); agora os programas geralmente são programados na EEPROM ( "Eletricamente ... - EPROM" , que pode ser apagada no chip) ou especificamente na memória Flash.

A maioria dos microprocessadores agora pode executar programas a partir da RAM (isso é praticamente o padrão para tudo, exceto microcontroladores), mas é preciso haver uma maneira de carregar o programa na RAM. Como Joby Taffey apontou em sua resposta, isso foi feito com os comutadores do Altair 8080, que era alimentado por um Intel 8080 (que seguia os 4004 e 8008). No seu PC, existe um pouco de ROM chamada BIOS que é usada para iniciar o computador e carregar o sistema operacional na RAM.

A linguagem de máquina torna-se entediante rapidamente, e por isso foram desenvolvidos programas assembler que pegam uma linguagem assembler mnemônica e a traduzem, geralmente uma linha de código de montagem por instrução, em código de máquina. Então, em vez de 10000001, escreveríamos ADD R1.

Mas o primeiro montador teve que ser escrito em código de máquina. Em seguida, ele poderia ser reescrito em seu próprio código assembler e a versão em linguagem de máquina usada para montá-lo pela primeira vez. Depois disso, o programa poderá se montar. Isso é chamado de inicialização e também é feito com os compiladores - eles geralmente são escritos primeiro em assembler (ou outra linguagem de alto nível) e depois reescritos em seu próprio idioma e compilados com o compilador original até que o compilador possa se compilar.

Como o primeiro microprocessador foi desenvolvido muito tempo após a instalação de mainframes e minicomputadores, e o 4004 não era realmente adequado para executar um assembler, a Intel provavelmente escreveu um assembler que rodava em um de seus grandes computadores e traduziu o código de montagem para o 4004 em uma imagem binária que pode ser programada nas ROMs. Mais uma vez, essa é uma técnica comum usada para portar compiladores para uma nova plataforma (chamada de compilação cruzada ).

tcrosley
fonte
Ótima resposta tcrosley! Corrigido um boato sobre EEPROM vs EPROM. +1
tyblu
1
E se você realmente quiser programar um microcontrolador sem outro computador (além do cérebro), poderá fazê-lo construindo circuitos que alimentam o programa diretamente nele. Se foi programado em jtag, você pode alternar os botões para imitar os comandos jtag necessários para programar o dispositivo. Se ele usasse ram externo, você poderia usar muitos desmultiplexadores e enormes matrizes de resistores amarrados alto ou baixo para representar os bits das instruções (e provavelmente usar uma velocidade de clock baixa porque seu hardware será lento).
Nategoose
3
@tyblu: Tenho certeza de que PROMs com fusíveis são anteriores às EPROMs. A forma mais simples de ROM é essencialmente uma matriz de diodos com população seletiva (nos primeiros dias, os diodos seriam literalmente soldados em uma grade para representar uma polaridade de bit; um diodo ausente representava a outra polaridade). Um PROM de fusível coloca uma matriz de diodos em um chip, mas possui transistores de linha muito mais robustos que os diodos nas interseções. Pode-se remover seletivamente os diodos, definindo os fios de endereço e, em seguida, pressionando com muita força os fios de dados conectados aos diodos que se deseja remover.
22711
@tyblu: Observe que as PROMs de fusíveis não são nada semelhantes às OTPROMs modernas, que são simplesmente chips EPROM em pacotes sem janelas. Os dispositivos EPROM / OTP são programados carregando eletricamente as portas de certos transistores (que possuem capacitância suficiente e vazamento suficiente para manter uma carga essencialmente indefinidamente). Por outro lado, os chips PROM com fusível são programados destruindo fisicamente as conexões com os diodos indesejados.
22711
1
verifique esta 'ROM' dos dias dos transistores discretos: en.wikipedia.org/wiki/Core_rope_memory
JustJeff 15/04/11
23

Originalmente, os programas eram escritos em papel e depois transpostos para qualquer método de entrada que o computador tivesse disponível. Isso passou de botões, interruptores e fios de jumper nos primeiros computadores, a cartões perfurados e teclados / placas.

A ilustração abaixo mostra o que os programadores reais atuais usam:

W5VO
fonte
10
Droga, emacs ..
tyblu
6
Eu programo programadores. (E aqueles programadores que eu programar programadores programas da OMS programadores do programa.)
Mateen Ulhaq
4
Eu faço meus próprios programadores.
W5VO
16

Bem, eu estava lá quando os micros surgiram, escrevemos assemblies e compiladores cruzados em mainframes e minis, depois os inicializamos no hardware de 8 bits, as pessoas não se incomodaram em construir compiladores / montadores em micros até que tivessem armazenamento local suficiente para torná-lo útil

Paulo
fonte
14

Uma forma antiga de memória somente leitura era uma grade em que o endereço selecionava uma linha (puxando-a para baixo) e as colunas representavam dados. Cada coluna teria um pull-up e cada interseção teria um diodo soldado para representar um "zero" ou nenhum diodo para representar um "um" [os níveis de bits poderiam ser invertidos, se desejado, nos casos em que isso reduziria a número de diodos necessários]. Qualquer padrão de bits desejado pode ser "programado" soldando nos diodos apropriados.

Esse projeto foi introduzido no mundo dos circuitos integrados na forma de um PROM de fusível. Essencialmente, um PROM de fusível era um circuito como o acima, construído em um chip, exceto que todos os diodos estavam preenchidos e todos os diodos tinham um fusível fraco em série com ele. Conforme enviado, um PROM exibia "0" em todos os locais. Pode-se, no entanto, remover seletivamente os diodos selecionando o endereço apropriado e dirigindo as linhas de dados apropriadas "fortemente" alto [nota: acho que cada bit pode ter seu próprio transistor, em vez de um diodo, mas o princípio é o mesmo].

PROMs programadas por fusíveis foram sucedidas por memórias semicondutoras, que armazenam bits implantando cargas nos capacitores internos. Essas memórias não são apenas mais compactas do que as PROMs de fusíveis, mas se forem alojadas em embalagens transparentes aos raios UV, poderão ser apagadas e reutilizadas. Observe que até as chamadas memórias "programáveis ​​uma vez" quase sempre usam esse mesmo design, mas são simplesmente alojadas em pacotes opacos aos raios UV.

dois homens apontando para uma matriz de diodo grande controle de matriz de diodos do MIT Whirlwind Computer de 1950

matriz de transistor com pequenos transistores SMD armazenamento de controle de matriz de transistor de 2005 a CPU MT15

supercat
fonte
espero que você não se importe com o pequeno ajuste que fiz no seu post.
Davidcary
7

Não tenho certeza de que alguém tenha respondido à verdadeira pergunta do OP, que parece ser "Como o computador sabe como começar?" , então eu vou dar um jeito nisso.

Comece com uma analogia. "Como um transistor sabe como começar?" É claro que não, apenas funciona de acordo com a física, e o engenheiro constrói o circuito para que ele comece em um estado conhecido.

Os computadores sabem como começar, porque são circuitos (muito complicados, é claro) e são construídos para iniciar em um estado específico. Em uma máquina moderna, esse estado pode ser aquele em que o barramento principal remapeia parte do espaço de endereço para usar uma ROM na placa-mãe como pouca memória (a ROM foi gravada com um BIOS). Em uma máquina de primeira geração, o estado inicial pode ter sido interrompido pela CPU, o contador do programa em zero e o subsistema de alternância de memória ativo.

dmckee
fonte
6

Um sistema operacional é um programa de computador que roda diretamente no processador. Pode ser escrito em qualquer idioma que possa ser compilado ou montado de acordo com as instruções da máquina. Montagem e C são escolhas comuns.

O código é carregado nos processadores uma única instrução de cada vez em uma loja - uma ROM ou RAM.

O Z3 , o primeiro processador programável, foi construído a partir de relés eletromecânicos e leu as instruções do filme perfurado.

O Altair 8800, o primeiro computador pessoal, foi programado por interruptores.

Para saber como um processador é construído a partir da lógica digital, consulte https://electronics.stackexchange.com/questions/5516/a-fun-book-to-learn-computer-architecture-for-not-exactly-beginners

Para uma história, consulte http://en.wikipedia.org/wiki/History_of_computing_hardware

Toby Jaffey
fonte
5

Aqui está um pouco sobre computadores realmente antigos:

Até onde eu sei, na época você tinha um grande painel frontal de computador usado para programá-los. Basicamente, cada célula de memória nesses computadores estava conectada aos comutadores. Você alimentaria a memória e usaria comutadores para definir dados em cada célula. Dessa forma, você inserirá o programa pouco a pouco na memória do computador. Então você definiria o ponto de partida do programa e iniciaria a execução.

À medida que a tecnologia avançava, os chamados programas do gerenciador de inicialização foram desenvolvidos. São programas curtos cujo objetivo é iniciar outro programa a partir da memória do computador. O problema ao entrar nos programas pouco a pouco (e mais tarde usando um número octal e depois números hexadecimais) era que era muito lento e havia uma grande chance de o operador cometer um erro ao carregar o programa. Programas curtos seriam usados ​​para carregar programas maiores armazenados na memória do computador. À medida que o tempo avançava, parte do código que tinha que ser digitada manualmente diminuía e, nos computadores modernos, geralmente temos gerenciadores de inicialização escritos em algum tipo de ROM ou até mesmo em memória flash.

AndrejaKo
fonte
4
Nas máquinas do painel frontal, como nos sistemas S-100 anteriores, os comutadores permitem que você assuma o controle do barramento do sistema. Uma opção permitiria suspender o processador. Enquanto o processador estava suspenso, era possível colocar manualmente um endereço no barramento de endereços (via comutadores), colocar dados no barramento de dados (mais comutadores) e causar manualmente um ciclo de gravação no barramento (outro comutador) ou um ciclo de leitura para extrair dados de volta para 8 LEDs individuais e ler o binário, etc. Fazendo isso, você pode armazenar código de máquina suficiente na RAM, suspender o processador e prosseguir a partir daí.
precisa saber é o seguinte
4

Há alguns anos, deparei-me com um programador de microcontrolador que tinha uma tela de quatro dígitos e sete segmentos e um teclado hexadecimal. Tenho certeza de que este não tinha um microcontrolador a bordo e permiti que você digite o código da máquina diretamente, um byte de cada vez.

Portanto, isso permitiria (dolorosamente) compilar uma lista de códigos de operação manualmente, um por um, e inseri-los no chip.

Não tenho idéia se você ainda pode obtê-los, mas acho que algo semelhante foi usado quando os microcontroladores eram relativamente novos.

BG100
fonte
1
Parece o KIM-1 ou o Cosmac ELF, ambos com um microprocessador (MOS 6502 e RCA [CD] 1802). KIM: oldcomputers.net/kim1.html ELF: cosmacelf.com
mctylr
Provavelmente foi algo como o que mctylr disse. Em máquinas desse tipo, geralmente havia um pequeno programa de 'monitor' na ROM. Quando você entrou bytes com o teclado, foi realmente o 6502 (ou 8085 ou qualquer outro) lendo as chaves, modificando memória, atualizando os LEDs, etc.
JustJeff
1

Os primeiros microprocessadores teriam sido programados com a ajuda de computadores existentes que não eram baseados em microprocessadores. Antes da primeira CPU ser produzida em um chip, já existiam arquiteturas avançadas de computador que eram construídas a partir de componentes discretos, em vez de microprocessadores. Dê uma olhada, digamos, no IBM 360.

Kaz
fonte