1 pontos por GN⁺ 7 시간 전 | 1 comentários | Compartilhar no WhatsApp
  • 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

 
GN⁺ 7 시간 전
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

    • Três anos depois, comecei com um computador Radio Shack de 4 KB baseado no 6809 e, mesmo sem escrever código 6809 há mais de 40 anos, ainda lembro vários opcodes e recentemente ajudei a resolver um bug complicado de assembly no retrocomputing.stackexchange.com
      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
    • Recomendo Turing Complete(https://turingcomplete.game/)
      É 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
    • Tanto o Z80 quanto o 6502 nasceram de projetos rejeitados dentro das empresas. Hoje tudo ficou muito mais complexo, mas eu gostaria de ver outro projetista lançar algo como FORK86-64
    • Eu também cheguei a fazer periféricos externos para o ZX81 por conta própria
  • Aos 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

    • Aos 12 anos, na verdade foi mais fácil entender assembly do Z80 por causa da estrutura simples do BASIC. Endereços de memória eram números de linha, registradores eram variáveis, JP era GOTO, CALL era GOSUB, CP era IF, JP Z era THEN GOTO e LD correspondia a LET
    • Meu primeiro computador foi um ZX-81 em kit, e virei um pioneiro da tecnologia da informação numa cidade pequena. Era uma época em que tudo era complicado e simples ao mesmo tempo, e até um simulador de voo rodava com só 1 KB de RAM
    • Meu primeiro contato com computadores foi pelo ZX-81, e fiquei fascinado com o jeito de desligar a tela no modo rápido e com os compromissos interessantes entre hardware e software
  • A 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

    • Não ter compatibilidade perfeita na flag de paridade foi uma escolha inteligente. Programas existentes quase nunca a verificavam e, depois das instruções que se comportavam diferente no Z80, na prática não a verificavam nunca
      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
    • Instruções indefinidas não fazem parte do conjunto de instruções do 8080, então dar suporte a elas se refere não ao conjunto de instruções, mas à compatibilidade binária com o silício do 8080. Ainda assim, a diferença na flag de paridade realmente quebra a compatibilidade, então o correto seria dizer “é binariamente compatível com código que depende apenas do conjunto de instruções do 8080, exceto pelo valor da flag de paridade”
  • 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

    • Quando eu era adolescente, por volta de 1980, comprava e lia os livros que conseguia pagar na Radio Shack do bairro, e como o TRS-80 usava Z80, também tive contato com os livros de Z80 do Bill Barden publicados pela Howard Sams
      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++

    • Nos anos 1980, muita gente, eu inclusive, conseguia ler os códigos hexadecimais das instruções do Z80 tão facilmente quanto assembly simbólico. Isso foi muito útil para fazer engenharia reversa do interpretador Microsoft CP/M BASIC ou do compilador FORTRAN
    • Parece coisa do fim dos anos 1970, mas na verdade era 1991. Era incrível poder saber exatamente o que o programa estava fazendo a cada momento, mas implementar algo complexo assim era um grande sofrimento
    • Era uma conversão direta de assembly para código de máquina, a única linguagem entendida pela CPU
  • 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

    • Na Europa também havia escolas de ensino médio que exigiam a compra da TI-84 Plus, e pelo fato de ainda parecer ser vendida em lojas, imagino que continue em uso
      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
    • A TI-84+ talvez seja um dos meus computadores retrô favoritos
    • A minha era uma TI-83, que não tinha esse tipo de recurso avançado