terça-feira, abril 25, 2017

Z80 na Protoboard: Decodificação de Endereços

Estamos nos aproximando do ponto em vamos conectar uma memória ao Z80. Antes disto precisamos definir o nosso mapeamento de memória e como vamos decodificar os endereços e sinais de controle para acionar os diversos componentes.

Estamos quase lá

O Z80 possui 16 pinos de endereço (A0 até A15), mais os seguintes sinais de controle (entre outros):
  • IORQ: o nível baixo indica que está sendo feito um acesso a um dispositivo de entrada e saída e que os sinais A0 a A7 contém o endereço do dispositivo.
  • MRQ: o nível baixo indica que está sendo feito um acesso à memória e que os sinais A0 a A15 contém o endereço da posição acessada
  • RD: o nível baixo indica que o acesso é uma leitura
  • WR: o nível baixo indica que o acesso é uma gravação 
A nomenclatura "memória" e "dispositivo" está relacionada à instrução que comanda a operação e não ao componente endereçado propriamente dito. As instruções são sempre lidas da memória, mas nada impede que um dispositivo de entrada e saída responda a um endereçamento de memória e vice-versa.

As memórias que vou usar tem 2K bytes, ou seja 11 bits de endereço (A0 a A10).  Resolvi utilizar os dois bits seguintes de endereço para selecionar entre "ROM" (na verdade EEProm) e RAM:

A12 A11  Memória  Endereço
 0   0   ROM      0000h a 07FFh
 1   1   RAM      1800h a 1FFFh

Estas combinações específicas de A12 e A11 foram escolhidas para aproveitar os CIs que estou usando.

As memórias usadas possuem os seguintes sinais de controle:
  • Chip Select (CS) ou Chip Enable (CE): estes sinais indicam quando a memória está selecionada. Quando o sinal for 1 (o sinal é ativo no nível baixo), a memória ignora os demais sinais e mantêm a via de dados desconectada (alta impedância). No meu caso, o CS da ROM deve ser 0 quando A11 e A12 forem 0, o que corresponde a um OU. Já o CS da RAM deve ser 0 quando A11 e A12 forem 0, o que é um NAND (E negado).
  • Output Enable (OE): este sinal indica quando a memória deve acionar a via de dados com o dado endereçado. Novamente é um sinal ativo no nível baixo, 0 aciona a via de dados e 1 deixa desconectada. O Z80 indica uma leitura na memória quando os sinais RD e MREQ forem ambos 0. Novamente, isto é um OU e vale tanto para a RAM como para a ROM.
  • Write Enable (WE): usado apenas na Ram, sinaliza que o conteúdo da via de dados deve ser gravado na posição endereçada; também é ativo no nível baixo. O Z80 indica uma escrita na memória quando os sinais WR e MREQ forem ambos 0, o que é mais um OU.
O circuito de controle das memórias requer, portanto, uma porta NAND e três portas OU. Para a porta NAND usei uma das que sobrou do 74HC00 do circuito de Reset. Para os OU eu usei um 7432, qe contém quatro portas OU com duas entradas. O circuito ficou assim:

No próximo post vamos completar a ligação do Z80 e da ROM, para podermos rodar o nosso primeiro programa.

Nenhum comentário: