Minhas aventuras com o Z80 - Leitura da EPROM
Para o Z80 carregar um programa é necessário que este programa esteja em uma memoria, normalmente EPROM ou EEPROM. A EPROM é aquela memoria bem antiga que para apagar precisa de uma lampada UV. Na EEPROM o "E" a mais vem de electronic e significa que ela pode ser apagada de forma eletrônica, sem a necessidade de lampada UV.
Como no pacote que ganhei tem muitas EPROM, decidi usa-las e assim aprender um pouco sobre EPROM. Aproveitei e construí um leitor e gravador de EPROM com um Arduino Mega que vou mostrar aqui.
Eu tenho disponível EPROM da linha 27Cxx, desde 27C16 até 27C256 onde o ultimo numero indica a quantidade em bits. Para 27C256 é 256k bits ou 32KBytes (256 /8). Cada endereço de memoria ocupa um byte, a 25C256 possui 32767 (32K) endereços de memoria. Na figura da pinagem abaixo é possível observar os 15 pinos de endereço (A0 até A14), onde (2^15) - 1 = 32767.
As formas de onda dos pinos para o formato de leitura de dados são bem simples conforme figura abaixo. Basta deixar os pinos OE' e CE' em nível logico baixo e trabalhar nos pinos de endereço.
A EPROM funciona de forma onde colocando nível logico 1 nos pinos de endereço, temos uma sequencia binária:
000 0000 0000 0001 - pino A0 com nível logico 1 - endereço 1000 0000 0000 0010 - pino A1 com nível logico 1 - endereço 2000 0000 0000 0011 - pino A0 e A1 com nível logico 1 - endereço 3
E assim por diante, rodando todos os 32767 endereços de memoria. Em cada endereço de memoria teremos um valor para os 8 bits nas portas de dados (O0 a O7).
Nos bits de dados, quando a memoria está apagada temos todos os bits com nível logico 1
1111 1111 - FF em HEX
Um exemplo de bits de dados ocupando determinado endereço:
0110 1001 - 69 em HEX
Um circuito simples para leitura manual pode ser feito da forma abaixo, neste caso está sendo usando apenas os três primeiros bits de endereço, sendo possível verificar até o oitavo endereço de memoria apenas. Caso deseje verificar mais endereços de memoria, basta ir adicionando mais chaves e resistores de pull-down.
Eu fiz um leitor de EPROM com um Aduino Mega onde é possível verificar qual o valor de dados em cada posição de memoria ou apenas verificar se a memoria está limpa e caso não esteja ele informa quantas posições de memoria estão ocupadas.
O código está disponível aqui:
Onde:
EPROM_v02 - Leitor de EPROM que mostra se a memoria está limpa ou a quantidade de posições ocupadas
EPROM_Burn_v01 - Este é o gravador de EPROM e estarei comentado em outro tópico.
O esquema de ligação das pinagens estão dentro dos sketch, observar que os pinos de endereços estão definidos como pinos pares e os de dados como pinos impares.
Comentários
Postar um comentário