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.

Outro pinos a serem observados são os de dados (O0 até O7) que são os 8 bits que formam o byte. Temos também o OE' (output enable) e o CE' (chip enable), o CE' será importante na gravação da EPROM juntamente com o VPP (Programming Voltage). VCC é a alimentação positiva (5V) e VSS a negativa.

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 1
000 0000 0000 0010 - pino A1 com nível logico 1 - endereço 2
000 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_v01 - Leitor de EPROM que mostra os valores em BIN (invertidos) e HEX de cada posição de memoria pela serial 
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