Ir al contenido principal

¿Puedo utilizar memorias DRAM 4116 de 250ns en mi ZX Spectrum?


En una famosa web china hice un pedido de un lote de memorias TMS4116-15nl, pero al recibirlas lo que realmente me enviaron fueron TMS4116-25nl, es decir, memorias más lentas con un tiempo de acceso de 250ns en lugar de 150ns, que eran las que realmente había pedido. 

Por supuesto, el enfado fue monumental, pero lo máximo que pude hacer fue quejarme amargamente y poner una valoración negativa, pero poco más.

Después de dejar pasar un tiempo para que se me fuera pasando poco a poco el enfado, me pregunté si estas memorias, a priori más lentas, podrían funcionar en mi ZX Spectrum. Como tengo un 48K (Issue 4A y la ULA 6C001E-7) con los chips de memoria en zócalos, sustituí el chip del bit menos significativo (IC6) por el de 250ns, y comprobé que el Spectrum funcionaba perfectamente. Pero ¿por qué funciona con esta memoria más lentas?

La memoria en el Spectrum

En el ZX Spectrum de 48K los primeros 16KB se corresponden con la memoria ROM, y esta empieza desde la dirección 0 hasta la dirección 16384 (16x1024), seguida por los 16KB de RAM de memoria baja hasta la dirección 32768 y continuada por los 32KB de memoria alta que nos lleva hasta el último byte direccionable correpondiente a la dirección 65535. 

Por lo tanto, tenemos una ROM de 16KB, memoria RAM baja de 16KB y memoria RAM alta de 32KB, es decir, 48KB de RAM y 16KB de ROM, que da un total de 65536 posiciones de memoria direccionables (0 - 65535).

La memoria baja son 8 chips que se localizan en la placa base como los ICs que van del IC6 al IC13. Los chips de memoria baja son los 4116, que son memorias DRAM de 16Kx1bit.


Y la memoria alta son otros 8 chips del IC15 al IC22, que suelen ser chips TMS4532 o MSM3732 de 32Kx1bit. 

Con estos 16 chips de memoria se consiguen finalmente los 48KB de memoria RAM. 

El acceso a la memoria baja, también llamada memoria contenida, se puede realizar de dos formas distintas: 
  • La CPU necesita acceder a la memoria para ejecutar una instrucción o acceder a un dato. Un chip de memoria baja está organizada en una matriz de 128 filas x 128 columnas. Por lo que se necesitan 7 bits para direccionar las filas y las columnas, y de esta forma acceder a la localización exacta. Para situarse en una posición de la memoria contenida (entre las direcciones 16384 y 32767), la CPU vuelca la dirección de memoria que quiere acceder en el bus de direcciones (A15-A0), donde, a través de los multiplexores IC3 e IC4, de A6-A0 se selecciona la fila de la memoria que se quiere acceder, y de A13-A7 se indica la columna que se quiere acceder de la matriz. Para seleccionar la fila y la columna de la memoria, la ULA en respuesta a una señal /MREQ, /A15 y A14 de la CPU, genera una secuencia RAS (Row Access Strobe) y CAS (Column Access Strobe). Una vez localizada la ubicación en memoria, la ULA a través de la señal DRAMWE habilita el bus de datos para lectura o escritura. 
  • La ULA necesita acceder a la memoria para mostrar la imagen de vídeo en pantalla. La ULA cuando accede a memoria de vídeo funciona de la siguiente manera:
    • La ULA recibe una señal de reloj de 14MHz, generada por el cristal de cuarzo. Como el reloj maestro de la ULA realmente es de 7MHz, que es el valor resultado de dividir por dos la señal recibida, la ULA hace esta división internamente a través de un biestable tipo D, y como resultado nos da una resolución de 72ns de distancia entre flancos, que se corresponde a la mitad de un período completo de 144ns. Para que las señales RAS y CAS estén sincronizadas, la ULA utiliza otras señales de reloj secundarias y derivadas de la maestra, resultante de dividir ésta por 2, 4 y 8. 
    • La ULA, para que tanto ésta como la CPU puedan acceder a la memoria DRAM, genera dos señales, una RAS (Row Access Strobe) para seleccionar la fila y otra CAS (Column Access Strobe) para seleccionar la columna, donde se encuentra el dato que se quiere leer o escribir.
    • La ULA cuando accede a memoria de vídeo sobrescribe el bus de direcciones con la dirección de la posición de memoria que quiere acceder, con independencia de que ya hubiera una dirección puesta por la CPU. Para que la CPU no pueda continuar con lo que estaba haciendo, la ULA le deja de enviar la señal de reloj de 3,5MHz. 
    • La ULA accede a la memoria en modo página, es decir, en un acceso /RAS se trae una pareja de bytes a la vez obtenido en dos /CAS. La ULA cuando necesita acceder a la memoria de vídeo se trae dos parejas de bytes a la vez para minimizar los tiempos de mostrar la información por pantalla. En una pareja de bytes, el primer byte contiene la información que se va a mostrar en pantalla y el segundo byte contiene los atributos de cómo se va a mostrar, por ejemplo, con qué colores. 

Tiempos de acceso a memoria

Cuando la ULA accede a memoria de vídeo, nos encontramos con los siguientes tiempos para sincronizar las señales RAS y CAS, comparados con los de las memorias de 150ns, 200ns y 250ns:

Tiempos
Tiempos ULA
Tiempos memoria 150ns (mínimo)
Tiempos memoria 200ns (mínimo)
Tiempos memoria 250ns (mínimo)
TRCD
20ns
20ns (min) / 50ns (max)
25ns (min) / 65ns (max)
35ns (min) / 85ns (max)
TRAS
436ns
150ns
200ns
250ns
TCAS
216ns
100ns
135ns
150ns
TCP
72ns
60ns
80ns
100ns
TRSH
90ns
100ns
135ns
165ns
TRP
140ns
100ns
120ns
150ns

Los datos mostrados en esta tabla se han obtenido del datasheet de la memoria TMS4116 y del libro The ZX Spectrum ULA.

Se puede observar que los tiempos durante el cual tienen que estar habilitadas la señales generadas por la ULA, RAS y CAS, se soportan en los tres tipos de memoria, y sobre todo la memoria de 250ns, que acepta un tiempo mínimo para que la señal RAS (TRAS) esté habilitada de 250ns y de CAS (TCAS) de 150ns.




Sin embargo, hay otros tiempos que las memorias con un tiempo de acceso mayor no los cumple, como son, TRSH (RAS hold time), que es el tiempo mínimo que la señal RAS tiene que estar activa después de activar la señal CAS, en el caso de las memorias de 200ns y 250ns, los tiempos mínimos aumentan considerablemente unos 35ns y 65ns respectivamente. Otro tiempo que varía significativamente en la memoria de 250ns es el TCP (CAS precharge time) que consiste en el tiempo mínimo que tiene que pasar para que se active otra señal CAS, que en el caso de la memoria con tiempo de acceso de 250ns soporta un tiempo mínimo de 100ns, contra los 72ns que espera la ULA para generar otra señal CAS.

Por el momento, tirando de especificaciones, parece que lo normal sería sustituir los chips de memoria baja por unos que soporten tiempos de acceso de 150ns. Pero, ahora nos adentramos en el terreno práctico realizando medidas con un analizador de señales y obtener tiempos reales de las señales RAS y CAS enviadas por la ULA en los chips de memoria de 4116-2N y TMS4116-25NL. 

Medidas tomadas con analizador de señales

Para tomar medidas, conecto el analizador al chip de memoria 4116-2N del bit menos significativo (IC6) al pin 4 (RAS) y pin 15 (CAS).


Una vez encendido el Spectrum, capturo la señal de los dos pines con el programa para Windows Saleae Logic.



En la imagen, se puede observar el acceso de la ULA a memoria de vídeo para obtener dos parejas de bytes. El canal 1 se corresponde con la señal RAS y el canal 0 con la señal CAS.

Repito la misma medida, pero esta vez sustituyendo el chip 4116 2N por el TMS4116-25NL.



A priori las dos gráficas son muy parecidas obteniendo los mismos tiempos: 

Tiempos Tiempos memoria 2N Tiempos memoria 250ns
TRCD  -   - 
TRAS 416ns416ns
TCAS 208ns 208ns
TCP83,33ns 83,33ns
TRSH  -   - 
TRP 125ns 125ns

Al ser los tiempos exactamente iguales, tanto en la memoria 2N como la 25N, se podría decir que la memoria de 250ns se puede utilizar sin ningún problema, ya que no afecta al funcionamiento ni de la ULA ni del Spectrum en general. Las señales RAS y CAS están por encima de los valores mínimos requeridos por ambas memorias, por lo que es correcto. Aunque los tiempos TRP y TCP están un 16,6% por debajo de los valores mínimos recomendados en la especificación de la memoria 25N.

Como el Spectrum funcionaba con el chip de 250ns, me decido a cambiar todos los chips del IC6 al IC13 por las memorias TMS4116-25NL. 


Test de funcionamiento

Una vez cambiada la memoria baja al completo, enciendo el Spectrum y hago un test de memoria con la aplicación ZX Spectrum Diagnostics.



Se puede ver que el test de memoria baja aparece como pasado, es decir, que no se ha detectado ningún problema en los 8 chips. 

Realizo un pequeño programa para comprobar el acceso a memoria. Este programa pone a 0 las 704 posiciones de memoria a partir de la dirección 30000, para luego cambiarlas a 1 y leerlas para pintar el valor obtenido en pantalla, es decir, si las 22x32 posiciones en pantalla están a 1, esto quiere decir que se ha escrito y leído la memoria baja correctamente.



Al ejecutar el programa en pantalla se muestra todo a 1, por lo que la CPU accede a memoria sin ningún problema.



Con el Dandanator Mini conectado al puerto de expansión, ejecuto un juego y lo dejo puesto durante una hora aproximadamente. 



Posteriormente cargo varios juegos con la aplicación de Android PlayZX que emula la carga desde cassette, y la carga en todos ellos es correcta. Entre los juegos que cargo se ecuentran Game Over, Mad Mix Game, Indiana Jones and the Temple of Doom, R-Type, Batman the Movie y Freddy Hardest. 


Conclusiones

Las memorias de tiempo de 250ns, tal como se comentaba, sobre el papel no son aptas para sustituir a un chip estropeado ¿pero por qué funcionan? Personalmente creo que son válidas porque el ZX Spectrum no es muy exigente respecto a los tiempos de acceso y refresco que tiene esta memoria, pero si buscamos otras explicaciones, podría ser que los fabricantes de los chips de memoria la cifra que dan de tiempos mínimos los manejan con cierto margen de error, por lo que los tiempos que nos da en las medidas tomadas están dentro del umbral para un correcto funcionamiento. Otra opción sería, que las memorias de 250ns las hayan etiquetado sin testearlas por ahorrar tiempo de fabricación y así disponer rápidamente de un stock, por lo que podría ser que fueran memorias más rápidas. 

De todas formas, lo mejor es quitarse de complicaciones y comprar memorias de tiempo de acceso de 150ns, que son baratas y fácil de conseguir.


D. R Spectrum

Comentarios

Entradas populares de este blog

El botiquín del Spectrum: Componentes de repuesto

Debido a la avanzada edad de nuestros Spectrum, hay que estar prevenidos ante cualquier imprevisto que pueda surgir en forma de avería. Como hemos podido ver en alguna de las reparaciones que he publicado en este blog, me ha hecho falta una serie de componentes electrónicos, que en algún caso no los tenía, y he tenido que esperar a conseguirlos yendo a una tienda de electrónica o comprándolos por internet.  Para no encontrarnos en esta situación, he identificado cuales son las averías más frecuentes y qué componentes harían falta para poner de nuevo en marcha a nuestro Spectrum.  CPU La CPU que nos podemos encontrar en el ZX Spectrum puede ser Zilog Z80A de 4MHz o NEC D780-C, ambas totalmente compatibles. Aunque el cristal de cuarzo para generar una señal de reloj estable es de 14MHz, realmente la señal de reloj que utiliza la CPU es la marcada por el pin 32 (CLK) de la ULA. Esta señal tiene una frecuenca de 3,5MHZ, que es el resultado de dividir por 4 la señal de reloj produci

Cargar juegos con la App PlayZX (ZX81, ZX Spectrum, +2A/B y +3)

Existen varias alternativas para cargar juegos de forma casi instantánea en formatos .TAP y .TZX, como DivIDE, Dandanator, etc... A los más nostálgicos que nos sigue gustando cargar desde cinta y esperar esos minutos mientras contemplamos el screen de turno, tenemos que buscar otras alternativas que sean parecidas para así dar descanso a las cintas de casete que tan buenos momentos nos dieron, y de esta forma proporcionarles ese merecido retiro en una estantería junto a sus viejas compañeras donde podamos contemplarlas y admirar sus carátulas. La alternativa más popular es TZXduino, que junto a una tarjeta de memoria sd podemos reproducir los juegos como si los cargásemos desde un casete. Esta opción nos obliga a tener otro dispositivo, y dada la situación, por un poco más de lo que puede valer casi sería mejor opción comprarse un Divide, aunque en concepto son dispositivos muy distintos.  Otra opción sería utilizar la aplicación para teléfonos móviles Android PlayZX . En la web del de

Mi primer Amstrad CPC 6128: Puesta a punto y cómo sacarle provecho en la actualidad

El Amstrad CPC era el ordenador que siempre quise tener de niño. Recuerdo que, por el año 1986, en el centro comercial Alcampo de mi barrio tenían una especie de "corner" donde se exhibían los ordenadores de Amstrad que se podían tocar y hacer cosas con ellos, una idea muy brillante para aquella época, ya que no era un método muy habitual para captar compradores, y sin embargo, hoy en día se sigue aplicando y funcionando. Al pillarme cerca del instituto nos acercábamos a la hora del recreo y nos poníamos a hacer nuestros pinitos en Basic, de esta forma surgió mi gusto y admiración por este potente ordenador. Sin embargo, al final, en mi casa optamos por comprar el ZX Spectrum +2A, por varias razones, el precio era casi la mitad, eso sí, sin incluir monitor, en el instituto aprendíamos Basic en ordenadores Sinclair, como el de 48K o el QL, y lo más importante, casi todos mis amigos tenían ordenadores Spectrum. Todo esto influyó en la decisión final, viendo como se alejaba la o