Série Z80 Project – A CPU Z80

Tempo de leitura: 6 minutes

Nesta série de projetos, exploraremos o que é o Z80 e como usá-lo para construir um sistema de computador básico. Saiba mais sobre o computador Z80, sua CPU e muito mais!

A CPU Z80 é indiscutivelmente a CPU (unidade central de processamento) mais famosa do mundo, tendo sido usada em uma ampla gama de computadores desde os anos 1970 até os anos 1990. Com quase 50 anos, o computador Z80 foi projetado por Federico Fagging e sua equipe em 1974 com o primeiro lançamento do dispositivo em 1976. O chip Z80 foi projetado para ser compatível com o código do Intel 8080, mas na verdade é mais poderoso com mais registros, instruções mais poderosas e um design superior que requer apenas uma única linha de clock, uma única linha de 5V e circuito integrado de atualização de memória para DRAM.

Sim, a placa Z80 foi desenvolvida em 1976, mas por que nos referimos a ela no tempo presente em vez do passado? A resposta irá surpreendê-lo porque o Z80 AINDA ESTÁ EM PRODUÇÃO! Isso mesmo, uma CPU de quase 50 anos ainda está em produção, e há uma série de razões para isso. A primeira é que o Z80 é tão famoso que muitos sistemas projetados nos anos 80 ainda estão em uso hoje, e a natureza delicada dos sistemas significa que eles podem exigir substituições de processadores, criando um mercado. O Z80 também sobreviveu devido ao seu poderoso conjunto de instruções e simplicidade de uso, o que resultou em uma variedade de microcontroladores baseados no Z80, bem como em processadores mais poderosos.

Aprender a construir um computador Z80 faça você mesmo (DIY) não é apenas um projeto divertido de concluir, mas fornece um computador que ensina os fundamentos da computação. Enquanto Arduinos e Raspberry Pis são rápidos de usar, o computador Z80 realmente mostra como uma CPU executa suas tarefas, como ela interage com a RAM e como pode ser feita para conversar com dispositivos externos, como teclados, telas e discos rígidos.

Noções básicas da CPU Z80

O Z80 é uma CPU de 8 bits, o que significa que todos os seus dados estão em 8 bits ou em um único byte. Todos os registradores internos da CPU (os registradores são blocos de armazenamento temporário usados ​​para matemática rápida!), têm tamanho de 8 bits, enquanto o contador de programa, que aponta para onde o programa está sendo executado, é de 16 bits. Como o contador de programa tem 16 bits, o endereço externo para o Z80, que seleciona a memória e os locais de E/S (entradas/saídas), também tem 16 bits. Isso significa que a quantidade máxima de memória que o Z80 pode acessar diretamente é 2^16 = 64KB. O Z80, ao contrário de muitos microcontroladores, é Von Neumann em oposição à arquitetura de Harvard. Isso significa que tanto o programa quanto os dados são armazenados no MESMO espaço de endereço. Isso é muito mais fácil de trabalhar do que quando eles estão separados! Apesar de ter um endereço de 16 bits,

Sistema Z80 Mínimo

É aqui que as coisas começam a ficar interessantes, pois aqui podemos apreciar a verdadeira simplicidade do processador Z80. Ao usar CPUs, eles exigem hardware adicional para fornecer sinais de clock, fontes de alimentação, gerenciamento de memória e procedimentos especiais de inicialização. O Z80, no entanto, é incrivelmente trivial e requer apenas um punhado de sinais externos para começar a funcionar! Abaixo está o circuito mais simples necessário para ver o Z80 em operação.

Este circuito é uma boa ferramenta para ver como o Z80 funciona e verificar se o processador está de fato funcionando. O primeiro subcircuito à esquerda do esquema é um oscilador astável 555 que emite uma onda quadrada com uma frequência de aproximadamente 1Hz. Isso nos permite observar cada ciclo do Z80 enquanto ele executa seus ciclos de instrução. O lado direito do esquema é o próprio processador Z80 e você notará que alguns pinos são puxados para 5V, alguns são puxados para 0V e outros têm LEDs de saída. Os pinos que são puxados para cima são sinais de controle de entrada e é essencial que eles sejam puxados para cima porque o Z80 usa lógica ativa-baixa. Tomemos, por exemplo, o pino RESET, quando este pino for 0V o Z80 irá resetar, e se este pino for 5V então o Z80 continuará normalmente.

Pinos de entrada Z80

  • CLK – Esta é a entrada do relógio Z80. Sem ele, o Z80 não pode funcionar
  • RESET – Isto irá redefinir o processador de volta ao endereço 0 como se tivesse acabado de ser ligado
  • NMI – Esta é a interrupção não mascarável. Quando puxado para baixo, o Z80 executará uma interrupção
  • INT – Esta é a interrupção mascarável. Quando puxado para baixo, o Z80 executará uma interrupção se o sinalizador de interrupção interno estiver definido
  • WAIT – Quando este pino é puxado para baixo, o Z80 irá sentar e esperar (ou seja, travar). Quando este pino voltar a 5V, o Z80 retomará a operação
  • BUSRQ – Quando puxado para baixo, o Z80 permitirá que outros dispositivos controlem o barramento (endereço e pinos de dados)

Alguns pinos no esquema estão conectados a LEDs, para que possamos ver o que esses pinos estão fazendo.

Pinos de saída Z80

  • M1 – Este pino emite 0V quando o Z80 está executando o primeiro ciclo de máquina
  • RFSH – Este é o pino de saída usado para atualizar a lógica, não precisamos saber sobre isso
  • HALT – Este pino emite 0V quando uma instrução HALT é executada
  • RD – Este pino emite 0V quando o Z80 está realizando uma operação de leitura
  • WR – Este pino produz 0V quando o Z80 está executando uma operação de gravação
  • MREQ – Este pino emite 0V quando o Z80 quer ler da memória (RAM ou ROM)
  • IORQ – Este pino emite 0V quando o Z80 deseja acessar um dispositivo de E/S (teclado, monitor etc.)

Pinos de dados Z80

  • A0 – A15 – Esses pinos são os pinos de endereço e estão ativos altos. Esses pinos selecionam qual endereço de memória está sendo acessado ou o dispositivo de E/S que está sendo usado
  • D0 – D7 – Esses pinos são os pinos de dados. Estes irão produzir dados do Z80 ou lê-los de uma memória/dispositivo externo

Se construirmos este circuito e deixá-lo funcionar, veremos que os LEDs piscam em padrões específicos enquanto o Z80 lê continuamente a instrução NOP (dados 0x00). Por que o Z80 lê instruções NOP e como são os ciclos de leitura e gravação da memória?

Ciclos de leitura/gravação de memória

Os ciclos de leitura e gravação da memória são as etapas que o Z80 executa para obter dados da memória ou armazená-los na memória. Esses ciclos são baseados em como os chips de memória paralela funcionam com seus sinais CS, OE e WR. A imagem abaixo mostra um ciclo de leitura e gravação de memória lado a lado.

Quando o Z80 é iniciado, ele começa lendo a primeira instrução na memória no endereço 0x0000. Para obter esta instrução, o Z80 inicia configurando os pinos de endereço para 0x0000 e, em seguida, configura M1 para baixo. M1 indica que o Z80 está no início de um novo ciclo de instrução. Na borda descendente do primeiro pulso de clock, o Z80 configura o pino RD para baixo para indicar que deseja ler dados do mundo exterior, enquanto o pino MREQ fica baixo para indicar que o Z80 deseja ler dados da memória. O próximo ciclo de clock, T2, é um ciclo extra que dá tempo à memória externa para se estabelecer e produzir sua saída. O terceiro ciclo de clock faz com que o Z80 leia os dados nos pinos de dados, e a borda ascendente do terceiro ciclo de clock faz com que o Z80 redefina os pinos RD e MREQ de volta para 5V. Os dados lidos serão uma instrução, e o Z80 executará a instrução ou obterá mais dados da memória para completar a instrução. Como conectamos todas as entradas de dados em 0V, a instrução será 0x00 que é a instrução NOP (sem operação).

Quando o Z80 deseja gravar na memória, ele primeiro define os pinos de endereço para o local em que deseja gravar. Na borda descendente do primeiro clock, o pino MREQ é definido como 0V para indicar que deseja salvar na memória e os pinos de dados são definidos para os dados que devem ser salvos. Na borda descendente do segundo clock, o Z80 configura os pinos WR para 0V, o que faz com que os dados no barramento de dados sejam salvos no chip de memória selecionado. Na borda descendente do terceiro ciclo de clock, o Z80 define WR e MREQ para 5V para indicar o final do ciclo de gravação.

Conclusão – Dissecando o Z80

Este primeiro episódio da série de projetos Z80 demonstra como é simples colocar o Z80 em operação. Apenas alguns componentes são necessários, e a CPU já está executando instruções NOP sem necessidade de múltiplas entradas de energia, clocks multifásicos ou hardware de suporte complexo. O Z80 é incrivelmente poderoso e sua arquitetura é ótima para criar sistemas operacionais multithread ou até mesmo sistemas personalizados em tempo real. No próximo episódio, veremos a implementação de RAM e ROM para fazer com que nosso Z80 execute programas simples!