Retrogames.cl
Página principal Sección Atari Articulos para leer

Proyectos y modificaciones de hardware

Clases elementales RG, su gente y actividades

El foro más antiguo de Chile

Un lugar para recordar


GRABADOR DE EPROMS PARA ATARI

Por ZZT

Es un agrado publicar este circuito que permite grabar o leer eproms. Este se conecta al puerto de los joysticks y al cartridge de cualquier computador Atari, de preferencia el modelo 800XL. No se preocupen si usan otro modelo (65XE o 130XE), el programa trabaja con bloques de 8K y por lo tanto no importa la cantidad de RAM.
En mi caso, por comodidad y debido al poco espacio disponible en mi taller, preferí atornillar el circuito directamente en un noble Atari 800XL que estaba en desuso, pero comprendo que no todo el mundo tiene varios Atari, como para llegar y perforarles la carcaza, así que es más recomendable ponerlo en una caja aparte. Yo mismo, anteriormente, desarrollé una versión que fue ensamblada en la carcaza de una casetera Atari XC12 y otra versión "light" la realizé en un cartridge.

El circuito en cuestión sirve para grabar o leer la eprom más popular del mundo, me refiero a la 27C512 de 64K. Esta puede ser encontrada en placas madres de PC-XT y en una gran cantidad de artefactos electrónicos, por lo tanto es ideal a modo de ejemplo.
Aunque no todas las eproms se graban de la misma manera, ésta se acerca bastante al promedio y en todo caso, el sistema aquí propuesto pueden adaptarlo a otros tipos de eprom, redirecionando las funciones de cada pin mediante dip-switch.

El circuito consta de 2 contadores binarios 74LS393, que es un contador binario doble. Ellos proveerán las direcciones de la eprom desde A0 hasta A15. Los datos fluirán desde el puerto de los joysticks por el chip 74LS245, que es un buffer paralelo de 8 bits.

Las señales de control provienen del chip 74LS259, que es un latch direccionable controlado por unas NAND 74LS00, que solo son unas compuertas lógicas que se usan para detectar los pokes correspondientes.

¿Por que usar el puerto de los joysticks para enviar o leer el dato?

Por que el puerto de los joysticks nos aliviana el diseño del circuito. Esto se debe por que al enviar el dato, éste permanece sin cambiar hasta que enviemos el siguiente (latch). Así nos evitamos tener que poner un Latch externo y circuitos que lo controlen, fácilmente nos ahorramos 3 chips y varios cables. Y lo más importante es que puerto de los joysticks es bidirecional, por eso podemos leer o grabar.

Breve descripción del dispositivo EPROM 27C512:

Eprom significa Erasable Programable Read Only Memory (Memoria solo de lectura borrable y programable). Esto quiere decir que en una eprom podemos guardar información para luego leerla y/o borrarla (por si queremos volver a grabarla). Su estructura interna es una matrix de celdas que se cargan al aplicarle un voltaje de 12.5V y 6V y así quedan hasta que por medio de una ventana en su parte superior le aplicamos luz UV de una longitud de onda específica.

La eprom 27C512 almacena 64KB, osea 1024x64=65535 direcciones, de 8 bits cada una. Las cuales son seleccionadas en los pines marcados "A" (address) y van desde A0 a A15. El bus de datos es de 8 bits y corresponde a los pines marcados "Q" (Data) y van desde Q0 a Q7. La alimentación del dispositivo es de 5V para el modo normal de lectura y 6V en el modo de grabación. Esa alimentación entra por el pin 28 "Vcc" (positivo 5v-6v) y el pin 14 "Vss"" es GND o tierra. El pin 20 "E" tiene 2 funciones: en el modo de lectura solo habilita (0) o deshabilita (1) el dispositivo, pero en el modo de grabación es el que indica grabar el dato. El pin 22 "GVpp" también tiene 2 funciones: en el modo de lectura debe estar a 0 (gnd), pero en el modo de grabación debe recibir 12.5V. Esta eprom se borra aplicándole luz UV de un largo de onda de 253,7 nanometros a unos 2.5cms. encima de la ventana transparente.

¿De donde saco 12V y 6V?

Para solucionar el problema de los voltajes, deberán hacer una fuente doble con un integrado LM7812 y un LM7806, para los 12 y 6 volts respectivamente.

¿Como se graba una eprom?

En el caso particular de la eprom 27C512, ésta graba un dato siempre y cuando la pata 28 (Vcc) este alimentada por 6V, la pata 22 reciba 12.5V y la pata 20 pase de estar en 1 a 0 (Este es el famoso pulso de grabación). Reitero: el dato NO se graba hasta que la pata 20 es 0.

Ahora cada eprom tiene una data sheet en la cual se indica el "tamaño" o duración de ese pulso, expresado en mili segundos (ms). Eso es realmente crítico, pues si no lo respetamos al final del proceso de grabación lo más probable es que tengamos una eprom en blanco o bien una eprom con muchos errores de grabación.

¿Como se borra una eprom?

Acá tenemos un punto que desalentará a muchos. Las Eproms una vez grabadas se pueden borrar (en el caso que queden mal grabadas), pero para tal efecto deben ser expuestas a una luz UV de una longitud de onda especifica generada en un borrador de eproms. No sirven los aparatos para detectar billetes falsos ni los tubos de luz "UV" utilizados en discotecs. La luz del sol y tubos fluorescentes normales las borran, pero en un lapso de varias semanas. Hay versiones comerciales de estos, aunque por el precio no son recomendables. En el peor de los casos, deberán fabricarse o comprar uno.

CIRCUITO ESQUEMÁTICO

MATERIALES

2 74LS393
1 74LS245
1 74LS259
1 74LS00
1 EPROM 27C512 (o varias)
1 Placa perforada para montar el circuito
x Bases porta integrado para cada chip
1 Interruptor de doble acción
1 Resistencia de 1K

ARMADO

Planea una placa para contener todos los chips. Puedes usar una perforada o hacer una personalizada. Recuerda poner bases porta integrado para todos los chips.

Se recomienda esta distribución de los componentes. Como se puede apreciar es bastante simple. No trates de hacer un circuito muy complejo, con líneas que pasen a través de pines de los integrados. Si es necesario realizar varios "puentes" no te precocupes, a nadie le va a importar eso. Lo realmente importante es que el circuito funcione bien.

Con más experiencia se puede llegar a realizar un circuito más complejo como el presentado a continuación:

Click para agrandar

Se que les va a llamar la atención que en este circuito hay muchos LEDS. Estos son muy útiles para controlar las funciones del sistema, además se ve muy bonito. También hay unos dip-sw para poder grabar diferentes tipos de eproms, un contador extra para eproms más grandes y un plug para la entrada de los 12.5v.

Para la eprom recomiendo una base ZIF (Zero Insertion Force), pero sabiendo que son caras y/o difíciles de encontrar puedes usar una normal de 28 pines. Yo no pude conseguirla, así que use una común y corriente, la que me ha dado buenos resultados, aunque se desgasta bastante dependiendo del uso.

Las señales marcadas J1 y J2 van a los joystick 1 y 2 respectivamente. Hay otras señales que provienen de conector del cartridge: CCTL, 02, A0, A1, A2, D0, Vcc y Gnd. Tendrás que usar un cartridge para enchufar al conector del mismo o bien usar el puerto paralelo del Atari, que se encuentra en la parte de atrás, excepto que la señal CCTL no está presente ahí y deberás cablearla.

Aquí está el detalle de la ranura del cartridge de un 800XL mirado desde arriba y teniendo el teclado hacia adelante.

1=S4

6=D4

11=D6

A=RD4

F=A7

L=D7

2=A3

7=D5

12=S5

B=GND

G=A8

M=A11

3=A2

8=D2

13=+5V

C=A4

H=A9

N=A10

4=A1

9=D1

14=RD5

D=A5

J=A12

O=R/W

5=A0

10=D0

15=CCTL

E=A6

K=D3

P=02

En está imagen se puede apreciar la distribución de las datos en el puerto de los joysticks de un noble Atari 800XL.

Para los voltajes de grabación VccEprom y Vpp recomiendo colocar un interruptor doble que conmute los voltajes, ya que en modo de lectura VccEprom debe ser 5V y Vpp debe conectarse a GND.

Todos los chips son TTL, muy baratos y se encuentran en el comercio o placas antiguas.

Eventualmente puedes colocar el circuito en una casetera (como el de la imagen), que es uno de los primeros que realizé. Quedo bastante cool y soluciona el problema de comprar una caja de plástico o metalica.

Funcionamiento:

El lector/grabador se maneja de la siguiente manera:

Puerto de los joy modo de escritura o entrada de datos: POKE 54018,60
Puerto de los joy modo de grabación o salida de datos: POKE 54018,43
Borrar los contadores: POKE 54600,1/POKE 54600,0 (debe permanecer en 0 para contar)

Pulso de reloj POKE 54601,1 + POKE 54601,1 (aumenta en uno al pasar de 1 a 0)

Pulso para grabar la eprom POKE 54602,0 + POKE 54602,1
Para enviar los datos al puerto de los joy POKE 54016,DATO
Para recibir los datos del puerto de los joy DATO=PEEK(54016)

Para setear lectura al buffer POKE 54603,1
Para setear grabación al buffer POKE 54603,0

Programas para usar el sistema:

Necesitaras una imagen .atr con MYDOS, y otra que contenga un archivo .ROM en el caso que quieras grabarlo en la eprom o bien solo el MYDOS en caso que quieras leer una eprom y pasarla a archivo. Recomiendo utilicen una .atr vacía para insertar la imagen de la eprom.

Conecta el cable SIO2PC al Atari, arranca con el MYDOS, tipea y graba los siguientes programas en la imagen .atr. Si no tienes el cable puedes usar el sistema solo con cualquier disketera y DOS 2.5, aunque este DOS tiene muchas limitaciones.

Para grabar una eprom:

10 POKE 764,255: GR.0: PRINT "MODO GRABACIÓN"
11 POKE 54018,43:REM PONE EL PUERTO DE LOS JOYSTICK EN MODO DE SALIDA DE DATOS

12 POKE 54600,1:POKE 54600,0 : REM BORRA LOS CONTADORES Y DEJA LISTO PARA COMENZAR A CONTAR
13 POKE 54601,1: REM DEJA EL PULSO DE RELOJ DE LOS CONTADORES EN 1
14 POKE 54602,1: REM DEJA EL PULSO DE GRABACIÓN EN MODO DE ESPERA
15 POKE 54603,1: DEJA EL GRABADOR EN MODO GRABACIÓN
16 PRINT "CONECTE Vpp Y VccEPROM Y PRESIONE UNA TECLA PARA COMENZAR"
17 IF PEEK(764)=255 THEN GOTO 16

30 OPEN#1,4,0,"D:NOMBRE.ROM" : ABRE EL ARCHIVO QUE QUEREMOS TRASPASAR A LA EPROM
40 TRAP 90: GET#1,DATO: REM TOMA UN DATO DEL ARCHIVO Y LO DEJA EN LA VARIABLE "DATO"
50 POKE 54016,DATO : ENVÍA EL DATO AL PUERTO DE LOS JOYSTICKS
60 POKE 54602,0:POKE 54602,1 : REM PULSO DE GRABACIÓN
70 POKE 54601,1:POKE 54601,0: REM AUMENTA LOS CONTADORES EN UNO
80 GOTO 40: VAYA A TOMAR EL SIGUIENTE DATO (HASTA QUE SE ACABEN)
90 CLOSE#1 : REM CIERRE EL ARCHIVO DEL CANAL 1
100 PRINT ".:: HAVE A NICE DAY:.": REM MENSAJE DE FINALIZACIÓN

SAVE"D:GRABADOR.BAS"

Para leer una eprom:

10 POKE 764,255: GR.0: PRINT "MODO LECTURA"
11 POKE 54600,0:POKE 54600,1 : REM BORRA LOS CONTADORES Y DEJA LISTO PARA COMENZAR A CONTAR
12 POKE 54601,1: REM DEJA EL PULSO DE RELOJ DE LOS CONTADORES EN 1
13 POKE 54602,0: REM DEJA EL PULSO DE GRABACIÓN EN MODO DE LECTURA
14 POKE 54603,0: REM DEJA EL GRABADOR EN MODO DE LECTURA

30 OPEN#1,8,0,"D:NOMBRE.ROM" : REM CREA EN EL DISKETE EL ARCHIVO QUE RECIBIRÁ LOS DATOS
35 FOR CONTADOR=0 TO 65535: REM CANTIDAD DE BYTES QUE SERAN LEIDOS
40 DATO=PEEK(54016): REM LEE EL DATO DESDE EL PUERTO DE LOS JOYSTICKS

50 PUT#1,DATO: REM TOMA EL DATO Y LO GRABA EN EL ARCHIVO

70 POKE 54601,1:POKE 54601,0: REM AUMENTA LOS CONTADORES EN UNO
80 NEXT CONTADOR: REM VAYA A TOMAR EL SIGUIENTE DATO HASTA QUE SE ACABEN
90 CLOSE#1 : REM CIERRE EL ARCHIVO DEL CANAL 1
100 PRINT ".: HAVE A NICE DAY:.": REM MENSAJE DE FINALIZACIÓN

SAVE"D:LECTOR.BAS"

REM: Los REM pueden ser borrados si gustan. :-)

Esto es lo más básico, verán que los programas son sencillos y esto es debido a que el hardware diseñado por mi le ayuda en ese sentido. Espero que les sea de utilidad. Los invito a implemententar mejoras o hacer los programas en otro lenguaje para una mayor perfomance del sistema.

Cualquier duda pueden consultar en el foro.