50º aniversário do lançamento do Zilog Z80
(goliath32.com)- Lançado em julho de 1976, o Zilog Z80 foi amplamente usado de computadores pessoais e de hobby a equipamentos embarcados e industriais, tornando-se um símbolo da era dos microprocessadores de 8 bits
- Mantendo compatibilidade binária com o Intel 8080, expandiu registradores, modos de endereçamento, instruções e recursos de interrupção, além de ter sido projetado com conexões elétricas mais simples
- A pilha limitada e o espaço de endereçamento de 14 bits do 8008 foram melhorados no 8080 com uma pilha em memória e espaço de endereçamento de 16 bits, e o Z80 acrescentou a isso registradores de índice, bancos alternativos de registradores e instruções de bloco
- Graças à alimentação única de 5V, clock único, sinais de controle MREQ·IORQ·RD·WR e refresh de DRAM embutido, era possível montar um computador com poucos chips periféricos
- A família Z80 gerou vários derivados, como o Sharp LR35902 do Game Boy e o eZ80, e o Z80 original, após uma longa vida útil industrial, foi descontinuado em junho de 2024
Do Datapoint 2200 ao Intel 8008
- A Computer Terminal Corporation (CTC) desenvolveu o terminal programável Datapoint 2200, equipado com um processador de 8 bits feito com chips TTL discretos
- O plano de substituir parte dos circuitos TTL por ICs personalizados se ampliou para colocar a CPU inteira em um único chip, e a Texas Instruments e a Intel ficaram encarregadas dos projetos
- Nenhuma das duas empresas conseguiu concluir o projeto no prazo, e quando o chip da Intel ficou pronto, a CTC já vendia terminais baseados em TTL
- Os engenheiros da CTC também não ficaram satisfeitos com o desempenho do chip, e a arquitetura do terminal de próxima geração já havia sido alterada
- A TI encerrou o projeto, mas a Intel comercializou o produto, originalmente chamado 1201, com o nome de marketing 8008
Estrutura e limitações do 8008
- O 8008 oferece 7 registradores: A·B·C·D·E·H·L
- A é o acumulador, e H e L formam o ponteiro de memória HL
- O pseudorregistrador M representa o byte de memória apontado por HL
- O estado da ALU é mantido pelas flags Carry, Parity, Zero e Sign, usadas em saltos, chamadas e retornos condicionais
- O contador de programa era difícil de manipular diretamente, e chamadas de função usavam uma pilha interna de 8 níveis para endereços de retorno
- Era uma decisão de projeto baseada na ideia de que, como o Datapoint 2200 usaria memória serial, uma pilha de chamadas em memória poderia virar um gargalo
- O endereço de memória tem 14 bits e oferece 32 portas de I/O em um espaço de endereçamento separado
- Quando ocorre uma interrupção, o periférico coloca uma instrução RST no barramento de dados e a CPU a executa
- O RST chama um dos 8 slots no início do espaço de endereçamento
- Como não havia pilha de memória de uso geral e todo acesso à memória exigia HL, para salvar registradores durante o tratamento de interrupções era preciso usar latches externos no barramento de I/O como registradores temporários
- Usava cerca de 3.500 transistores e encapsulamento DIP18, com barramentos de endereço e dados multiplexados
- O circuito externo precisava fazer latch do barramento e interpretar os sinais de estado internos da CPU
- Eram necessários dois clocks de 500kHz com fases diferentes e alimentação de +5V e -9V
Do 8008 ao 8080
- As discussões para corrigir as limitações do 8008 começaram antes mesmo do fim de seu desenvolvimento, mas a diretoria da Intel queria primeiro verificar a reação do mercado
- Federico Faggin impulsionou o desenvolvimento da versão aprimorada, e ao esperar o anúncio de produtos concorrentes de 8 bits, a Intel acabou perdendo 9 meses de vantagem
- Antes mesmo da aprovação do projeto, Faggin recrutou Masatoshi Shima, da Busicom, e o colocou no projeto do 8080
- Também foram incorporadas críticas e feedback de potenciais clientes obtidos em demonstrações do 8008, e desde o início decidiu-se abandonar a compatibilidade binária com o 8008
Arquitetura do 8080
- O 8080 manteve uma configuração de registradores semelhante à do 8008, mas eliminou a pilha interna de endereços de retorno e introduziu uma pilha em memória apontada por SP
- Os pares de registradores BC·DE·HL·AF podem ser empilhados ou removidos da pilha
- No assembly da Intel, AF é chamado de PSW, a palavra de status do programa
- O espaço de endereçamento passou para 64KB com 16 bits, e as portas de I/O aumentaram para 256
- Tornou-se possível um acesso indireto limitado por meio de BC e DE
- O acumulador e HL podem ser lidos ou gravados em endereços especificados imediatamente
- Foram adicionadas operações de 16 bits, como incremento e decremento de pares de registradores, permitindo cálculo de ponteiros e contadores de 16 bits
- Como esse bloco de operações não afeta as flags da ALU, após decrementar BC é preciso verificar separadamente se ambos os bytes chegaram a 0
- As interrupções mantiveram o método baseado em RST, mas passaram a poder ser ativadas ou desativadas por software
- Graças à pilha explícita em memória, deixou de ser necessário hardware de I/O para salvar registradores
- O assembly do Intel 8080 tinha correspondência quase 1:1 entre mnemônicos e opcodes, o que facilitava a implementação do montador, mas podia ser incômodo para leitura humana
- Instruções de pares de registradores usam apenas o nome de um dos registradores, e o X de INX serve para distingui-la do INC de um byte
Interface elétrica do 8080
- Para aumentar a velocidade, adotou lógica NMOS, o que exigia três alimentações, -5V·+5V·+12V, e dois clocks com fases diferentes
- Graças ao encapsulamento de 40 pinos, as linhas de endereço e de dados foram separadas, mas parte do estado de controle ainda era multiplexada no barramento de dados, de modo que latches e decodificadores externos continuavam necessários
- A Intel vendia chips de suporte para decodificação de estado e geração de clock, e, dependendo do sistema, também eram necessários controlador de interrupção, timer e controlador DMA
- O timer programável podia ser usado ao menos para acionar o refresh de DRAM
- O sucessor 8085 passou a usar alimentação única de 5V e clock único de 5V, além de adicionar alguns sinais de controle, mas ainda exigia chips de suporte especializados
Fundação da Zilog e desenvolvimento do Z80
- Insatisfeito com o atraso na aprovação do projeto 8080 e com conflitos com a diretoria da Intel, Faggin deixou a Intel junto com o chefe da divisão de microprocessadores, Ralph Ungermann, e fundou uma empresa
- No início, consideraram um microcontrolador, mas concluíram que a margem era baixa demais para uma startup fabless de semicondutores
- Depois decidiram projetar o Super 80, uma versão aprimorada do 8080, e esse produto acabou levando ao Zilog Z80
- Conseguiram financiamento da Exxon e também trouxeram Shima da Intel
- A equipe, responsável por layout, simulação de software e outros trabalhos, cresceu para um total de 11 pessoas
- O objetivo era manter compatibilidade binária com o 8080, acrescentando registradores, modos de endereçamento e instruções, além de incorporar características de processadores contemporâneos, como o 6800
- Velocidade superior à do 8080 e conexões elétricas mais simples também eram metas
- Foram gastos cerca de 400 mil dólares até o primeiro protótipo funcional, e o cronograma foi cumprido com custo abaixo do orçamento de 500 mil dólares obtido com a Exxon
- A produção passou a depender da Mostek após conflitos com a Synertek, contratada inicialmente
- Depois, com investimento adicional da Exxon, foi construída uma fábrica própria, mas o fornecimento múltiplo do Z80 continuou
Expansões na arquitetura do Z80
- O Z80 é totalmente compatível em binário com o conjunto de instruções do 8080
- Foram adicionados os registradores de índice de 16 bits IX e IY, inspirados no 6800
- Eles podem ser usados no lugar de HL por meio de prefixos de opcode e também suportam deslocamento imediato
- Os pares de registradores AF·BC·DE·HL têm bancos alternativos, permitindo troca rápida durante o tratamento de interrupções
- As interrupções oferecem três modos
- O modo 0 é compatível com o 8080
- O modo 1 sempre chama um endereço fixo
- O modo 2 usa o valor no barramento como índice para desviar para uma tabela de chamadas, e um registrador separado define o endereço-base dessa tabela na memória
- Foram adicionadas rotação, teste e ajuste de bits, operações BCD, instruções de repetição usando BC como contador, transferência em bloco, comparação e operações de string
- Um loop inteiro de cópia de bytes pode ser substituído por uma única instrução de repetição interna, LDIR
- Como a Intel alegava direitos autorais sobre os mnemônicos de assembly, o Z80 adotou sua própria sintaxe
- Os operandos são escritos de forma mais explícita, e os mnemônicos básicos são sobrecarregados, tornando a sintaxe mais legível que a do 8080
Projeto de barramento simplificado
- O Z80 requer apenas alimentação única de 5V e clock único
- O estado que no 8080 precisava ser latched e interpretado por circuitos externos é fornecido diretamente por sinais dedicados
- MREQ e IORQ diferenciam acessos a memória e a I/O
- RD e WR indicam leitura e escrita
- M1 informa que o acesso atual à memória é um fetch de instrução
- É possível montar um computador básico ligando diretamente linhas de endereço e dados e usando apenas algo como um 74xx138 para selecionar EEPROM, RAM e UART
- Um contador interno de refresh coloca valores no barramento de endereços durante o ciclo de decodificação de instruções e ativa as linhas de controle para realizar o refresh de DRAM
- Com o modo 1 de interrupção, é possível ligar um único dispositivo ao pino de interrupção sem controlador externo
- Vários dispositivos podem ser tratados com circuitos simples, como um codificador de prioridade 74xx148 e latches
Desdobramentos após o Z80
- Antes mesmo do lançamento do Z80, em julho de 1976, já havia começado o projeto inicial do Z8000 de 16 bits, que seria lançado em 1979, depois do Intel 8086 e antes do Motorola 68000
- O Z8000 usava memória segmentada, como o 8086, mas emitia o número do segmento no barramento e deixava para uma MMU externa a tradução de endereço linear e a verificação de limites e permissões
- No conjunto de instruções do 8086 aparecem, além da linhagem do 8080, também características próprias do Z80, como instruções de repetição em bloco, string e loop
- O projeto da MMU do Z8000 também influenciou o modo protegido de 16 bits baseado em tabelas de descritores do 286
Exxon, IBM PC e as mudanças na Zilog
- A Zilog mirava o mercado de computadores desde a época em que microprocessadores eram vistos como substitutos de lógica discreta, mas sua relação com a Exxon acabou sendo um dos motivos pelos quais a IBM escolheu o Intel 8088 em vez da Zilog para o PC
- A Exxon tentou criar seu próprio grupo de negócios de computação para competir com a IBM e investiu estrategicamente em fabricantes de máquinas de escrever, processadores de texto e impressoras
- Algumas dessas empresas projetaram produtos baseados em componentes da Zilog e tiraram participação de mercado dos produtos da IBM
- A relação estreita com a Exxon também gerou conflito entre Faggin e Ungermann, e Ungermann deixou a Zilog antes de ela se tornar subsidiária integral da Exxon em 1980
- A Zilog voltou a se separar da Exxon em 1989 e abriu capital em 1991
- Depois disso, mudou de dono várias vezes entre fundos de private equity e empresas de eletrônicos, e hoje pertence à Littelfuse
- O Z80, após longa utilização como processador embarcado, foi descontinuado em junho de 2024
Experiência pessoal com o Z80 e impacto de longo prazo
- O 8080 e o 8085, compatíveis em binário com o Z80, ajudaram a formar o padrão de hardware de fato dos microcomputadores de 8 bits e serviram de base para que CP/M e Microsoft BASIC se consolidassem como padrão de software de fato
- O Z80 foi usado em PCs iniciais, computadores domésticos e de hobby, além de vários sistemas embarcados e industriais
- Também surgiram clones e arquiteturas derivadas, incluindo o Sharp LR35902 do Game Boy original
- Depois de abandonar famílias derivadas de 16 e 32 bits, a Zilog voltou aos microcontroladores baseados no Z80, como o eZ80, com pipeline e clocks mais altos
- Ao descobrir que o Z80 ainda era vendido em catálogos de componentes eletrônicos no fim da adolescência, o autor projetou um pequeno computador e usou o laboratório fotográfico da escola à noite para corroer PCBs
- Ouviu de professores relatos sobre antigos computadores domésticos e consoles, além de um computador montado com wire-wrap dentro de uma caixa Tupperware, rodando CP/M e WordStar
- Também recebeu componentes MCS-85 e chips Z80·8085·6502·6522 para usar em projetos próprios
- Nesse processo, aprendeu que um reset confiável na energização é mais difícil do que parece, que um linker é muito mais difícil de implementar do que um assembler, e que até uma pessoa sozinha pode realmente criar um compilador
1 comentários
Comentários do Hacker News
Comecei a programar em assembly em 1978 e queria entender não só software, mas também como o hardware funcionava
Depois de montar um kit Z80, aprendi eletrônica digital com uma ponta lógica e um osciloscópio, e estudei o conjunto de instruções mergulhando no manual. Hoje tenho quase 70 anos, mas isso ainda é tão vívido quanto ontem, e o Z80 era realmente uma CPU excelente
Aprendi sozinho desmontando ROMs e consultando cartões-resumo da Motorola, sem aulas nem livros, mas depois fundei várias startups e construí uma carreira de sucesso. Aprender computadores a partir dos primeiros princípios, no nível mais baixo, ainda tem um valor insubstituível
É um jogo de simulação de lógica digital em que você cria circuitos básicos com portas NAND, combina unidades funcionais e decodificadores de instruções para construir uma arquitetura Turing-completa e depois programa nela com uma linguagem assembly definida por você. Se precisar de um novo opcode, pode implementá-lo você mesmo, então é difícil, mas muito recompensador; está perto do lançamento oficial e um trailer também foi divulgado
FORK86-64Aos 12 anos, montei um computador Z80 com o kit do programa de TV “Klein Microcomputer Sebstgebaut und Programmiert”
Usei um transformador Märklin como fonte e um gravador de fita Telefunken como dispositivo de armazenamento de dados, e depois de digitar um jogo de pouso lunar em código de máquina do Z80, fiquei com tanto medo de perder o programa que não desliguei a energia por duas semanas
Dá uma sensação de volta aos anos 1980 com o ZX Spectrum, quando 128 KB de RAM eram um luxo difícil de bancar. Um pouco parecido com hoje
https://spectrumcomputing.co.uk/entry/2000237/Book/Mastering...
http://www.primrosebank.net/computers/zxspectrum/docs/Comple...
Lembro de olhar a tabela de referência de instruções do Z80 no fim do manual do ZX-81 e não entender nada. Ao contrário de abstrações de alto nível como BASIC, levei bastante tempo para entender como a CPU realmente executava programas
JPeraGOTO,CALLeraGOSUB,CPeraIF,JP ZeraTHEN GOTOeLDcorrespondia aLETA afirmação de que “o Z80 é totalmente compatível em binário com o conjunto de instruções do 8080” não é verdadeira se considerar também o registrador de flags. Em algumas operações, o comportamento da flag de paridade era diferente
Além disso, programas que usavam opcodes indefinidos do 8080 podiam ser executados de maneiras arbitrárias, mas o Z80 reutilizou esses opcodes para novas instruções
Isso permitiu reutilizar a flag de paridade como flag de overflow, o que foi uma extensão muito útil. Datapoint 2200, Intel 8008, Intel 8080 e RISC-V são conjuntos de instruções raros em que o hardware não detecta overflow, e ao contrário dos projetos iniciais simples e baratos, o RISC-V não tem desculpa, e eu considero isso seu maior erro
No começo de 1983, entrei na programação com assembly Z80 em um TRS-80 Model I. Os livros de Bill Barden e a série ‘The Next Step’, dos Hardin Brothers, publicada na revista 80 Micro, abriram o caminho, e resumi essa experiência neste texto
Eram tão claros que até uma criança podia entender, então li de ponta a ponta e, embora eu nunca tenha mexido num Z80 real, isso me deu a base para entender sem muita dificuldade o 6502 e microcontroladores iniciais como 8051 e PIC. Até hoje parece que entendo microprocessadores modernos comparando-os ao Z80, e recomendo estudar microprocessadores de 8 bits simples o bastante para que uma pessoa comum consiga compreender o todo
Comecei com o Z80 numa época em que compiladores de linguagens de alto nível eram caros e shareware não era tão fácil de conseguir quanto o open source de hoje. Para entender o que você está mandando a máquina fazer, todo mundo deveria aprender pelo menos um pouco de assembly, e o Z80 era simples o bastante para raciocinar sobre ele
Há 35 anos, era preciso montar programas à mão e inserir código de máquina em hexadecimal na placa. Para facilitar isso, escrevi meu próprio assembler, e essa experiência acabou me levando pela área de ferramentas de desenvolvimento até trabalhar em um grande compilador C++
Ainda faltou citar a calculadora TI-84, que até hoje é usada por milhões de estudantes nos EUA e pode ser programada em BASIC. Os modelos em preto e branco usam Z80, e os com tela colorida usam eZ80
Passei muito tempo fazendo e exibindo pequenos programas em TI-BASIC com amigos, mas nunca cheguei a aprender assembly Z80. Cheguei a imprimir todo o manual de assembly Z80 para a TI-84 Plus e comecei a ler, mas ainda não escrevi uma linha sequer