Página 1 de 1

Problemas de memoria ALTA en mi Spectrum [SOLUCIONADO]

NotaPublicado: Jue May 09, 2013 4:53 pm
por djr
Luego de haber cambiado la memoria baja por drams 4164 en lugar de las 4116 siguiendo la guia de flopping aqui: http://foro.speccy.org/viewtopic.php?f=8&t=3249 recuperé el funcionamiento de mi spectrum, luego de haber cambiado TR5 también.

¡Albricias flopping! :D

Pero al hacer consabido PRINT PEEK 23732+PEEK 23733*256 me devuelve 33799 por lo que presumo que la memoria alta también esta dañada.

Aún no tuve tiempo de ver si a todas las memorias les llega la alimentación necesaria, (en cuyo caso el problema sería en otro lugar), pero en caso de que sí a todas ellas les llega la alimentación requerida:

1) ¿ es posible saber de antemano que chips están dañados sin necesidad de sacarlos todos ya que NO ESTAN en zócalos basándonos en el número 33799 ?

2) ¿ es posible que pueda haber problemas en OTRO LADO sin que necesariamente sean las memorias ?

3) 33799 ¿ no es número caprichoso ? no debería ser múltiplo de 8 o algo así... ¿ no es raro ?

Saludos.

P.D.: por si acaso me hice de más 4164... nunca se sabe :roll:

Re: Problemas de memoria ALTA en mi Spectrum

NotaPublicado: Jue May 09, 2013 7:13 pm
por mcleod_ideafix
djr escribió:1) ¿ es posible saber de antemano que chips están dañados sin necesidad de sacarlos todos ya que NO ESTAN en zócalos basándonos en el número 33799 ?

Sí, es posible, si el error es efectivamente cosa de la memoria alta. Esto se ha hablado varias veces en el foro. Mira aquí, por ejemplo:
viewtopic.php?f=8&t=2469&p=25189#p25172
Y cambia el número que dice ese post por el número 33800 (uno más que el que te sale)

djr escribió:2) ¿ es posible que pueda haber problemas en OTRO LADO sin que necesariamente sean las memorias ?

Puede pasar perfectamente. En tal caso, el culpable es uno de los multiplexores 74LS157.

djr escribió:3) 33799 ¿ no es número caprichoso ? no debería ser múltiplo de 8 o algo así... ¿ no es raro ?

En abosluto.

Re: Problemas de memoria ALTA en mi Spectrum

NotaPublicado: Jue May 09, 2013 7:17 pm
por Bone
Para saber que integrado esta afectado tienes que seguir estas instrucciones:
El resultado es que 33799 es la ultima direccion buena encontrada. Asi que 33800 es la primera direccion "mala".

Introduce POKE 33800,85 : PRINT PEEK 33800
Si el resultado del ultimo peek es igual a 85, introduce:
POKE 33800,170 : PRINT PEEK 33800
Si el resultado es diferente de 170, entonces mira la siguiente tabla:

84 - 171 - 1 - 0 IC6 IC15
87 - 168 - 2 - 1 IC7 IC16
81 - 174 - 4 - 2 IC8 IC17
93 - 162 - 8 - 3 IC9 IC18
69 - 186 - 16 - 4 IC10 IC19
117 - 138 - 32 - 5 IC11 IC20
21 - 234 - 64 - 6 IC12 IC21
213 - 42 - 128 - 7 IC13 IC22

El resultado del ultimo peek te da el bit afectado, por tanto el chip de memoria afectada.

Espero que te sirva.
(Extraido del manual de servicio de Sinclair).

Re: Problemas de memoria ALTA en mi Spectrum

NotaPublicado: Jue May 09, 2013 7:54 pm
por mcleod_ideafix
Bone escribió:(Extraido del manual de servicio de Sinclair).

Esa tabla, sin formatear, es un poco liosa de leer. Aquí van unas instrucciones más sencillas:

1. Haz PRINT 1+PEEK 23732+256*PEEK 23733 (esto ya lo habías hecho). El número que sale (33800 en tu caso), lo anotas.

2. Haz:
Código: Seleccionar todo
POKE 33800,0: PRINT PEEK 33800
POKE 33800,255: PRINT PEEK 33800

3. Si en pantalla ves los números 0 y 255 respectivamente, significa que el fallo no es de memoria, o es un fallo de memoria intermitente. En tal caso, haz un programa que haga esta misma operación para todos los valores desde el 33800 hasta el 65535, y reporte las direcciones en las que falla. Algo así como esto:
Código: Seleccionar todo
10 FOR n=33800 TO 65535
20 POKE n,0: LET a=PEEK n: IF a<>0 THEN PRINT n; TAB 10;"0";TAB 20;a
30 POKE n,255: LET a=PEEK n: IF a<>255 THEN PRINT n;TAB 10;"255",TAB 20;a
40 NEXT n

Con suerte, este programa te podrá dar información extra que te valga para el siguiente paso. Si no es así, entonces casi casi seguro que el error no está en la memoria sino en otro sitio.

4. Si, como parece, alguno de los dos resultados es distinto del que debería dar, entonces coge el valor que salió y conviértelo a binario usando 8 bits (usando la calculadora de Windows, por ejemplo). Te saldrá un número con un montón de ceros, y algún que otro bit a 1, o bien un número con un montón de unos, y algún que otro bit a 0.

Los bits que se diferencian de los demás corresponden a chips de memoria estropeados. Cada bit es almacenado por un chip diferente, de forma que en tu resultado, el bit de más a la derecha (el menos significativo, o bit 0) es almacenado por el chip IC15. El siguiente, bit 1, lo almacena IC16, y así hasta el bit 7 (el de más a la izquierda), que es almacenado por IC22.

EJEMPLO 1
Haces los dos POKE's/PEEK's de rigor. En el primero sale un 8, y en el segundo 255. El 8 es el que no coincide con el valor esperado (0) así que lo pasas a binario usando 8 bits. Sale esto: 00001000
Cuenta de derecha a izquierda, y el bit "diferente" sale que está en la posición 3 (contamos siempre desde 0). El número de chip estropeado es IC18

EJEMPLO 2
Haces los dos POKE's/PEEK's de rigor. En el primero sale un 0, y en el segundo 111. El 111 es el que no coincide con el valor esperado (255) así que lo pasas a binario usando 8 bits. Sale esto: 01101111
Contando de derecha a izquierda, los bits "diferentes" son el 4 y el 7. Esto significa que hay dos chips estropeados: IC19 y IC22.

EJEMPLO 3
Haces los dos POKE's/PEEK's de rigor, y no sale nada extraño. Ejecutas el programa que te he puesto y aparecen estas líneas:
Código: Seleccionar todo
33802          0          2
33807          255        251

La segunda columna indica qué valor debería haber salido, y la tercera, el valor que realmente ha salido. En el primer caso, el 2 al pasarlo a binario nos da 00000010 . En el segundo caso, 251 al pasarlo a binario sale 11111011. Esto significa que están estropeados de forma intermitente IC16 e IC17.

Re: Problemas de memoria ALTA en mi Spectrum

NotaPublicado: Jue May 09, 2013 8:02 pm
por Bone
Mucho mejor asi....si señor. :D
Es que yo me explico fatal... :oops:
Se nota que lo tuyo es la "enseñanza" :D

Re: Problemas de memoria ALTA en mi Spectrum

NotaPublicado: Vie May 10, 2013 2:51 pm
por wilco2009
Este sistema que comentáis pienso que sólo serviría solo en el caso de que el chip estuviera completamente estropeado, o que diera la casualidad que la celdilla correspondiente a la dirección citada lo estuviera.

Si el chip está parcialmente estropeado y sólo tiene algunas posiciones de memoria afectadas, no habría más remedio que hacer un test más exhaustivo, con un bucle FOR buscando secuencialmente por todas las memorias haciendo un Poke XXXX,255 y comprobando y luego un poke xxxx,0 y comprobando. El bit que no estuviera en su sitio nos daría el chip.

Lo más habitual es que el chip se estropee por completo, pero no necesariamente tiene porqué ser así.

Re: Problemas de memoria ALTA en mi Spectrum

NotaPublicado: Vie May 10, 2013 4:08 pm
por mcleod_ideafix
wilco2009 escribió:Este sistema que comentáis pienso que sólo serviría solo en el caso de que el chip estuviera completamente estropeado, o que diera la casualidad que la celdilla correspondiente a la dirección citada lo estuviera.

Afortunadamente, el Spectrum precisamente hace un testeo un poco más elaborado y deja en la variable P_RAMPT (la que se mira con PEEK 23732....) la última posición "buena" que ha encontrado.

wilco2009 escribió:Si el chip está parcialmente estropeado y sólo tiene algunas posiciones de memoria afectadas, no habría más remedio que hacer un test más exhaustivo, con un bucle FOR buscando secuencialmente por todas las memorias haciendo un Poke XXXX,255 y comprobando y luego un poke xxxx,0 y comprobando. El bit que no estuviera en su sitio nos daría el chip.

Pues... :shock: .... ¡si eso es precisamente lo que explico en el post anterior! En ese post tienes el programa con el FOR buscando secuencialmente. De todas formas, no suele ser necesario porque, ya digo, la ROM se ha encargado previamente de hacer ese testeo más exhaustivo (no lo es del todo, pero curiosamente es capaz de detectar errores que con el típico test de escribir/leer no se detectan)

Re: Problemas de memoria ALTA en mi Spectrum

NotaPublicado: Vie May 10, 2013 4:22 pm
por wilco2009
Disculpa, no había leido completamente el post. :oops: :oops:

Re: Problemas de memoria ALTA en mi Spectrum

NotaPublicado: Jue May 16, 2013 8:20 am
por djr
Antes que nada, disculpas por haber iniciado este hilo y luego desaparecer, es que estuve alejado por unos días de este vicio.

Gracias McLeod/IdeaFix por tu explicación concisa y clara, me fue de gran ayuda, debería estar en wiki.speccy.org para ayudar a los demás.

Sin embargo, encontré que era todo mucho mas raro de lo que pensaba, sin importar el valor que pokeara en la dirección 33800 siempre obtenía el valor correcto al hacerle PEEK, y así con toda la memoria por encima de ella, es decir que si hacía POKE 33800,255, ese valor era lo que obtenía siempre, si pokeaba otro valor, pues también obtenía el valor correcto.

Llegué al extremo de hacer en assembler una rutinilla, que decrementaba en dicha dirección comenzando en FF hasta 0, y siempre comparando dicha celda de memoria con el valor esperado en cada iteración, y todo metido en un bucle infinito... y siempre daba el valor correcto.

Para no hacerla larga, luego de muchas vueltas me vine a dar cuenta por casualidad que si pokeaba en la dirección anterior a la 33800, (es decir la 33799) el valor que se me antojara, esta acción hacía que se alterara la celda siguiente (33800) dejándole siempre el valor 254 (#FE)....

Es decir: que si hacía POKE 33799,2 por decir algo, entonces se alteraba también la dirección 33800, pero siempre dejando allí el valor 254, y naturalmente el testeo de la rutina de incialización del ROM siempre fallaba por que al decrementar 33800 este nunca iba a ser cero en el segundo DEC (HL), (recordar que cuando se inicializa la memoria, se le pone el valor 2 a todas las celdas).

pues la verdad es la avería más extraña de memoria que ví en mi vida.... ¿ una posición de memoria que se altera cuando se cambia su adyacente.... ? :shock: :shock: :shock:

La verdad no sabía que hacer, así que me puse a buscar detenidamente y con lupa toda la placa a ver si encontraba algo raro.... alguna pista en corto... no sé lo que sea, y je-je-je, no me avergüenza decirlo pero no lo había visto antes, el IC25 se veía así:

Imagen

Es increíble que medio andubiera el Spectrum con ese integrado astillado...., pero en fin, fue cuestión de cambiarlo y finalmente el consabido: PEEK 23732 + 256 * PEEK 23733 me dió el glorioso número 65535.

:D :D :D

Quiero dejar constancia que yo sería incapaz de hacerle algo así a un Spectrum, este es uno de 3 spectrums que compré en una especie de "rastro" o "feria", los 3 rotos pero en condiciones estéticas más que aceptables, especialmente uno de ellos que parece nuevo, ahora toca reparar otro ISSUE 3 y un ISSUE 4S, espero tener suerte, y si la tengo habrá que comprar más membranas. :P

¡ Que satisfacción tan bonita es reparar un Spectrum que se podría considerar muerto sin más utilidad que la de un pisa-papeles !


Saludos.

Re: Problemas de memoria ALTA en mi Spectrum

NotaPublicado: Jue May 16, 2013 5:03 pm
por mcleod_ideafix
djr escribió:La verdad no sabía que hacer, así que me puse a buscar detenidamente y con lupa toda la placa a ver si encontraba algo raro.... alguna pista en corto... no sé lo que sea, y je-je-je, no me avergüenza decirlo pero no lo había visto antes, el IC25 se veía así:

Imagen


No digas que no te avisé ;)

mcleod_ideafix escribió:
djr escribió:2) ¿ es posible que pueda haber problemas en OTRO LADO sin que necesariamente sean las memorias ?

Puede pasar perfectamente. En tal caso, el culpable es uno de los multiplexores 74LS157.