A memória Rom usada é a 28C16, uma EEProm de 2Kbytes. Além de dos dados (I/O0 a I/O7), endereços (A0 a A10) e alimentação (VCC e GND), é preciso conectar o sinal -WE a 5V e -OE e -CE aos circuitos que vimos no post anterior.
No Z80, nos temos:
- Endereços: A0 a A10 vai para a Rom e para o circuito dos LEDs, A11 e A12 para a decodificação de endereços e A13 a A15 não são usados
- Dados: D0 a D7 vai para a Rom e para o circuito dos LEDs
- CLK é ligado ao circuito de clock
- +5 e GND são ligados à alimentação
- -INT, -NMI, -WAIT e -BUSRQ são ligados a +5
- -MREQ é ligado ao circuito de seleção da memória e ao circuito dos LEDs de endereço
- -WR e -RD vão ao circuito de seleção da memória
- -RESET é ligado ao circuito de reset
- -RFSH é ligado aos LEDs
- -HALT, -IOREQ,-BUSACK e -M1 não são utilizados
Para este primeiro teste, gravei na Rom o seguinte "programa":
ORG 0 0000 C3 00 00 JMP 0
Apesar de simples, ele permite exercitar uma boa parte do circuito montado. O vídeo abaixo resume o que vimos até agora e mostra o Z80 em funcionamento.
Neste vídeo eu fiz duas mudanças em relação ao circuito mostrado originalmente. O display de endereços é acionado pelo sinal MREQ, que é o complemento do sinal -MREQ gerado pelo Z80 (já comentei isto no post original). O capacitor eletrolítico do circuito de Reset foi substituído por um maior, para permitir ver o sinal no LED.
Como comentado no vídeo, os displays de endereço e dados não ficaram muito práticos. No lado dos dados, é apresentado direto o que está na via de dados, mesmo quando não tem ninguém acionando as linhas.
No endereço existe a questão do refresh. A memória Ram dinâmica requer que as posições sejam acessadas periodicamente, sob risco de perder o conteúdo. O display de endereço mostra também os endereços de refresh, o que me confundiu por um bom tempo.
O próximo (e provavelmente último) passo será ligar a Ram (espero ter fios suficientes para isto). Talvez eu altere o circuito dos displays para mostrar somente os endereços das instruções e para implementar um port simples de saída no lugar da visualização da via de dados.
2 comentários:
Nossa mãe, acompanhei a série de artigos sobre o Z80 e posso dizer que achei excelente, conteúdo de primeiríssima qualidade. Depois de tanto esforço você devia tentar criar um projeto no KICAD semelhante a um raspberry pi e tentar gerar um protótipo.
Posso saber como você fez para gravar na ROM?
Parabéns e continue com o excelente trabalho, tenho aprendido bastante por aqui.
Obrigado pelos elogios... Não pretendo fazer uma placa, para isto eu tenho o RC2014. Tem uns posts aqui no blog sobre a gravação da Rom (mais exatamente uma EEProm); resumindo eu usei um gravador comercial (TL866). Eu fiz algumas experiências de gravar usando um Arduino Mega e funcionou bem, mas daria muito trabalho para suportar vários modelos de EEProm, principalmente os que exigem uma tensão especial para programação.
Postar um comentário