O Microprocessador Intel 8080
Autor: Daniel Quadros | Publicado: 2017-01-11T07:00:00-02:00

Tenho um brinquedo novo para montar: um RC2014, que é um kit básico de microcomputador feito com o Z80. Pretendo fazer (sem pressa) uma série de posts sobre ele. Para começar, vou voltar ao meus tempos de faculdade e falar no Intel 8080, que é o precursor do Z80.



Foto de Konstantin Lanzet




Os Primeiros Microprocessadores
O que é um microprocessador e qual a diferença de um microcontrolador? Bem, às vezes a diferença fica meio nebulosa, mas basicamente um microprocessador costuma ter apenas o processador e um microcontrolador costuma ter também memória e interfaces de entrada e saída. Quando o 8080 foi projetado, a quantidade de transistores que se consegui colocar em um integrado era bastante limitada (o 8080 utiliza cerca de 4500 transistores) e muita funcionalidade era "empurrada" para fora do chip e implementada por CIs especializados de suporte ou por portas lógicas básicas.

Você provavelmente já ouviu falar que a Intel projetou o primeiro microprocessador comercializado, o 4004, para tentar (sem sucesso) ganhar uma concorrência para fornecimento de CI para calculadoras. O Intel 4004 era um microprocessador de 4 bits, o que obviamente era limitado para algumas aplicações. Um ano depois a Intel lançou o 8008 de 8 bits. Mais dois anos e foi lançado o 8080, uma expansão da arquitetura do 8008.

O 8080 foi o primeiro microprocessador largamente usado e se tornou bastante popular na primeira geração de microcomputadores, em parte graças ao sistema operacional CP/M-80. Quando a Intel partiu para um microprocessador de 16 bis (o 8086) uma certa compatibilidade de arquitetura com o 8080 foi um requisito, e os chips x86 atuais ainda trazem algumas marcas disto.

O Hardware de um Microcomputador com o 8080
Como dito, nesta época as coisas ainda eram meio toscas. Começando pela alimentação: o 8080 requer +5, +12 e -5 Volts!

O clock era outro problema. Não tanto a limitação a 2MHz (razoável para a época), mas a necessidade de dois sinais defasados e uma tensão da ordem de 10V. A solução? O CI 8224 da Intel. Alimentado por +5 e +12V, gera os sinais de clock a partir de um cristal.

Para ficar em 40 pinos, alguns sinais de controle foram multiplexados com a via de dados (isto é, o mesmos pinos usados para receber e enviar dados para memória e dispositivos de entrada e saída são usados para fornecer alguns sinais de controle). Além disso, o esquema de interrupções requer que o dispositivo coloque uma instrução na via de dados. O 8228 simplifica tudo isto, funcionando como um controlador da via de dados e gerando sinais de controle decodificados.

A Arquitetura do 8080
Às vezes se cria polêmica quando se fala que um processador é de "x bits". Não no caso do 8080: a unidade lógica aritmética (ALU), os registradores e as vias de dados interna e externa são de 8 bits. Se bem que algumas instruções permitem manipular pares de registradores como um registrador de 16 bits (útil para endereçar a memória, já que o 8080 tem 16 linhas de endereço permitindo até 64Kbytes de memória).



Fonte: Wikimedia Commons

Vejamos alguns pontos interessantes nesta arquitetura (falando somente dos itens acessíveis diretamente pelo programador):

O acumulador é sempre um dos operandos da ALU
Existem seis registradores de 8 bits: B, C, D, E, H e L. Como dito, algumas instruções trabalham com eles em pares BC, DE e HL
O par HL é tipicamente usado para endereçar a memória (H = high e L = low)
O program counter (PC) é o ponteiro para a próxima instrução a executar
O stack pointer (SP) aponta para o último byte salvo na pilha

A pilha pode ficar em qualquer endereço da memória e não tem tamanho fixo
Empilhar (PUSH) decrementa o SP e desempilhar (POP) incrementa o SP. Ou seja, a pilha cresce do endereço mais alto para o endereço mais baixo.


Após um reset, o 8080 começa a executar pelo endereço 0.



Lembrança do tempo de faculdade


O 8080 possui um conjunto de instruções bem organizado (o que certamente facilitou o seu circuito). Uma instrução pode ter de 1 a 3 bytes e a sua execução pode levar de 4 a 16 ciclos (o 8080 não possui nenhum paralelismo interno, as etapas de fetch e execução precisam ser executadas sequencialmente). O programador assembler logo aprendia uns truques (como usar XRA A ao invés de MVI A,0 para zerar o acumulador).



Muitas horas gastas em cima desta referência rápida da Siemens

Várias instruções codificam os seus operandos em 3 bits, permitindo escolher o acumulador, um dos seis registradores ou o byte apontado pelo par HL (M).



A linguagem da máquina!

Os flags são atualizados somente por algumas instruções. Por um lado isto é bom, dá para executar certas coisas sem afetar os flags. Por outro lado, às vezes é necessário executar uma instrução apenas para posicionar os flags (tipicamente um ORA A ou ANA A para testar se o valor no acumulador é zero).