terça-feira, janeiro 17, 2017

O Microprocessador Zilog Z80

No episódio post anterior, vimos o Intel 8080, o primeiro microprocessador largamente utilizado. O seu projetista, Frederico Faggin, saiu da Intel pouco depois e fundou a ZiLOG ("the last word in integrated logic"). E seu primeiro produto foi o Z80, que é uma extensão e aperfeiçoamento do 8080, com o qual manteve compatibilidade binária (isto é, código de máquina do 8080 executava diretamente no Z80).

Este é meu!


O Z80 se beneficiou de um processo de fabricação mais moderno que o 8080, o que lhe permitiu operar com apenas 5V de alimentação e usar uma quantidade maior de transistores (quase o dobro do 8080). O clock passou a ser de fase única, com amplitude de 5V. Não dava para ligar o cristal direto, mas o circuito do oscilador podia ser feito facilmente. Com estas simplificações, sobraram pinos para não precisar multiplexar sinais e acrescentar um sinal de interrupção não mascarável (que seria usado no ZX-81 para gerar sinais de vídeo enquanto o programa rodava). Novos modos de uso de interrupção simplificaram os periféricos. O Z80 incluía ainda lógica para fazer o refresh de memória dinâmica (a memória dinâmica precisa ser acessada periodicamente para não perder o conteúdo).

Inicialmente o Z80 operava com clock de até 2,5MHz. Modelos seguintes subiram este limite para 4, 6 e 8. Atualmente existem modelos que suportam até 20MHz e versão derivadas que chegam a 50MHz.

No lado da arquitetura, foram acrescentados dois registradores de 16 bits (IX e IY), usados em novos modos de endereçamento. Estes registradores simplificam o código necessário para acessar matrizes e estruturas.

Existem duas cópias completas dos registradores. O processador utiliza apenas uma de cada vez, mas existem instruções para chavear entre as duas cópias. O objetivo é permitir salvar rapidamente o contexto ao tratar uma interrupção (limitado a não ter interrupções dentro de interrupções).

Além dos novos modos de endereçamento, o Z80 acrescentou várias instruções novas. Um problema foi onde colocá-las. Das 256 combinações de um byte, somente 12 não correspondiam a instruções no 8080. Oito delas foram usadas diretamente para novas instruções. As quatro restantes foram usadas como prefixo:
  • CB é usado como prefixo para novas instruções de manipulação de bits
  • ED é usado como prefixo para novas instruções
  • DD é um prefixo que afeta as instruções que fazem referência ao operando M (posição de memória apontada por HL) e algumas instruções que fazem referência ao par HL. As referências a HL são substituídas por IX ou IX+d (onde d é um deslocamento constante de 8 bits com sinal)
  • FD é análogo a DD, mas usa IY
  • DD CB é usado nas instruções de manipulação de bits usando IY 
  • FD CB é usado nas instruções de manipulação de bits usando IY
Quem tiver curiosidades, esta página mostra todas as instruções, as marcadas em vermelho são as não documentadas (efeitos colaterais da decodificação das instruções oficiais).

Embora o Z80 reconheça a linguagem de máquina do 8080, os mnemônicos utilizados na linguagem Assembly da Zilog são diferentes (pois os mnemônicos do 8080 são protegidos por direito autoral). Por exemplo, a sequência 06 09 carrega o valor 9 no registrador B. No Assembly do 8080, esta instrução é codificada como MVI B,9 enquanto que no Assembly do Z80 a sintaxe é LD B,9.

Enquanto que a Intel usava mnemônicos diferentes para cada formato de instrução, a Zilog agrupou instruções semelhantes no mesmo mnemônico; a distinção da operação é feita pelo operando. Por ecxemplo, as várias instruções de movimentação usam o mesmo mnemônico LD. A sintaxe para os operandos é diferente, inclusive para permitir as novas formas de endereçamento.

O Z80 foi um imenso sucesso. Muitos computadores pessoais e videogames clássicos usaram o Z80. A resposta imediata da Intel foi o 8085, uma variante do 8080 com algumas melhorias de hardware e suporte a clock mais alto, mas praticamente sem mudanças na arquitetura interna e no conjunto de instruções (mais precisamente tem duas instruções novas para tratar um mascaramento de interrupções). A resposta a longo prazo foi o 8088, um microprocessador de 16 bits mas com barramento de dados de 8 bits. A Microsoft sugeriu para a IBM usá-lo no seu computador pessoal - e o resto, como dizem, é história.



3 comentários:

O peregrino disse...

Isso é um microprocessador ou um microcontrolador?

Daniel Quadros disse...

Ops... Microprocessador é claro! Corrigido.

Alexandre Mulatinho disse...

Só passando para elogiar seu blog, já está no meu feed há algum tempo e sempre leio coisas boas aqui, quando vi Zilog Z80 fiquei animado, adorava ler o manual desse cara, um dos processadores mais bacanas que li na época, parabéns!