domingo, 22 de noviembre de 2015

Avería en la RAM alta del ZX Spectrum

La zona de la memoria RAM alta del ZX Spectrum está formada por los siguientes chips:

IC15-IC22:  8 x 4532 (32768 x 1 bit, 16 pines)
IC23:           1 x 74LS32
IC24:           1 x 74LS00
IC25-IC26:  2 x 74LS157


Microhobby nº 5 pag. 29

















Había dos fabricantes que suministraban los chips DRAM 4532; Texas Instruments y OKI (modelos 3732). Estos chips eran en realidad modelos 4164 (65536 x 1 bit) en lo que solo funcionaba la mitad de la memoria. Tanto TI como OKI macaban en la especificación de su producto la parte de la memoria que funcionaba. Además, la placa del ZX Spectrum esta preparada con una serie de puentes para permitir cualquier tipo de combinación de fabricante y modelo.

Texas Instruments: modelos TI 4532-3 o TI 4532-4
OKI: modelos MSM3732L o MSM3732H




El pinout del 4532 se muestra a continuación:














El pin 9 (AR) está conectado a través del IC26 a los puentes de selección de la marca y el modelo.

Las memorias 4532 son muy difíciles de encontrar hoy en día. Los modelos 4164 e incluso plaquitas con memorias SRAM de reciente fabricación pueden ser un buen sustituto.

Lo más normal es que en averías relacionadas con la memoria sea la RAM baja (4116) el problema. Para estas averías hay muchos tests por software que identifican muy bien el chip averiado, además de las pruebas que se pueden hacer si se tienen conocimientos de electrónica. Las averías en la RAM alta son, en mi opinión, más difíciles de determinar. Aunque también hay buenos programas, sirva el siguiente ejemplo cómo el software disponible no fija claramente la avería.

La siguiente placa es una issue#3B que mostraba dos cuadrados estáticos de color magenta siempre en la misma ubicación. El ordenador funcionaba correctamente, pero estos cuadrados siempre aparecían después de conectar y usar una interface RAMTurbo o la Boardtest (interface de chequeo de memoria por hardware conectada al bus de expansión). Esta placa solo direccionaba 16 kb.




Al correr los tests, todos daban error en la RAM alta. Las conclusiones de cada test eran diferentes, los errores eran aleatorios y erráticos. Alguna vez hasta los pasaba.

Test de Phil Ruston: error en IC15 e IC16
Test de Paul Farrow: error en la línea 0, y a veces en la línea 1, la 3,...
Test mcleod: Daba fallo.
Test ZX Diagnostics: error en multiplexores LS157, LS00 y LS32
Boardtest: error generalizado. Se bloquea.

Resultado Test de Phil Ruston:
















Resultado Test de Paul Farrow:
















Resultado Test ZX Diagnostics:
















El Inversión Test (series de POKE-PEEK sobre las direcciones de memoria) daba fallos en continuo, en todos los ICS y aleatorios, es decir, no eran siempre las mismas direcciones y bits los afectados.

Este test parte de la última localización de memoria válida que marca la instrucción:

PRINT PEEK 23732 + PEEK 23733 * 256

El valor obtenido para un 48 kb debería ser 65535
El valor obtenido para un 16 kb debería ser 32767

Si el valor obtenido es diferente, recomiendo la lectura de la sección 4.2 del Service Manual del ZX Spectrum. En esta sección se explica cómo realizar este test y como interpretar los valores obtenidos.

Estas son las pruebas que realicé.

  • Medidas de tensiones: correctas
  • Cambio ICs Z80, ULA, ROM y todos los 4532: todos correctos
  • Cambios multiplexores LS157, LS32 y LS00: todos correctos. La medida de la resistencia daba valores correctos, aunque esta prueba solo da resultados si hay un corto.
  • Medida de continuidad de las señales /CAS, /RAS, /WRITE, /MREQ, /WR y /RD: todas correctas. La señal /MREQ es la encargada de refrescar la DRAM.
  • Medida de continuidad de la línea A15 del bus de direcciones: correcta. Esta línea habilita la memoria por encima de la dirección 32767.
  • Medida de continuidad de la línea A14 del bus de direcciones: correcta. Esta línea está conectada a los puentes de selección de marca y modelo de memoria.
  • Medida líneas de datos (D0-D7): obtenía valores de resistencia elevadas entre 7 y 10,5 kohm, cuando estas líneas deben tener 5-6 kohm. Con osciloscopio y sonda lógica medí las señales de pull-up de las resistencias R9-R16 y estaban correctas.

Pero aquí había algo. Revisando el zócalo de la ROM vi que tenía malas soldaduras en algunos pines. Las hice yo hace un par de años. ¡Vaya chapuza que hice!. Cambié el zócalo y obtuve los valores de resistencia correctos.
















Pero no fue suficiente. Después de esto me puse a repasar las soldaduras de los zócalos de los multiplexores. Estaban bien. Pero al medir continuidad del pin 7 (A0) de IC26 (LS157), a veces tenía, a veces no. Una cosa rara. Medía resistencia en el zócalo y vi que tenía cierta medida en ese pin.

Finalmente cambié el zócalo del IC26 porque es de un tipo que no me gusta. En la foto siguiente se ve el zócalo de IC26 ya cambiado, y el modelo similar que había en su lugar (de color rojo a la izquierda del IC26).

















Además repasé con un osciloscopio los condensadores cerámicos C63 y C64. Normalmente estos no cascan pero como participan en el circuito de los multiplexores LS00 y LS32 que establecen las señales CAS y RAS de direccionamiento de la RAM alta, quise asegurarme. Ambos condensadores estaban bien.

Con el cambio de los zócalos de la ROM y del IC26 resolví el problema. Pero hasta llegar ahí tuve que hacer un montón de pruebas ya que los programas de test daban resultados dispares. Una vez cambiados estos zócalos el ordenador ya direccionaba 48 kb y pasó todos los tests.