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:
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.
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:
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.
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.
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
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 | 416ns | 416ns |
TCAS | 208ns | 208ns |
TCP | 83,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
Publicar un comentario