Probando nuevos instrumentos para el diagnóstico de placas..

Si por algo se caracteriza el Spectrum es por su gran variedad de periféricos (clásicos y modernos)

Moderador: Sir Cilve Sinclair

Probando nuevos instrumentos para el diagnóstico de placas..

Notapor mcleod_ideafix el Mie Jul 08, 2009 3:55 am

Pues resulta que en mi departamento han adquirido unos cuantos analizadores lógicos por USB para las clases de prácticas. Hasta ahora habíamos usado otros, bastante mamotréticos, con su pantalla incorporada y que cargaban el programa mediante disquete, pero no son PC's.

Estos de ahora son cajas pequeñas que por USB se conectan al PC, y desde él se manejan. Todas las señales, etc. se visualizan en la propia pantalla del PC.

He hecho una prueba, analizando parte de las señales de un Spectrum, en concreto, uno que estoy arreglando para Metalbrain. He puesto puntas de prueba en el bus de datos, y en las señales CLK, MREQ, RD e INT.
Imagen

La prueba consiste concretamente en pedirle al analizador que comience a capturar datos en cuanto la señal INT pase de nivel alto a nivel bajo, es decir, en el momento en que la ULA dispare una interrupción enmascarable. En pantalla he agrupado los bits D0-D7 para que muestre su valor en decimal. Me interesa el valor cuando MREQ y RD pasan ambos de nivel bajo a nivel alto. Ese es el momento en que la CPU lee el dato que hay en el bus.

También veremos que hay momentos en que se escribe a memoria, aunque no he puesto la señal WR (mea culpa). Podremos, hasta cierto punto, discernir cuando es una lectura de una escritura porque en ésta última, RD se mantiene a nivel alto. Hay ocasiones no obstante, en que MREQ cambia de valor, RD está a nivel alto, y sin embargo no hay ninguna escritura. Esto pasa por ejemplo en los ciclos de refresco, que se suceden justo después de leer el código de operación de una instrucción.

Para obtener resultados predecibles, le he metido una rutinita consistente en:
Código: Seleccionar todo
ORG 23296
JP 23296


Que se traduce en código máquina a: 195,0,91. Estos tres bytes es todo lo que ejecuta mientras no ocurra una interrupción.

Este ha sido el resultado (clic para ampliar):
Imagen

En la parte de abajo de la figura se puede ver lo que ha tardado el procesador desde que saltó la interrupción hasta que comenzó a ejecutar la primera instrucción: 6,04 microsegundos. También podemos leer la frecuencia en la señal CLK2, que está conectada al CLK del procesador: 3,546 MHz .

El analizador lógico permite colocar cursores, que son simplemente marcas verticales de un color determinado, para poder señalar instantes determinados en el tiempo. Uno de ellos, el cursor T, se posiciona en el momento en que comenzó la captura de datos, es decir, cuando se dispara la interrupción. Se puede observar que ésta pilló al procesador en el segundo ciclo de la instrucción JP 23296, así que la interrupción tuvo que esperar a que finalizara (un ciclo después de leer el 91). En ese momento comienza el ciclo de aceptación de interrupción, en donde se ve cómo almacena en memoria (MREQ cae a nivel bajo pero RD queda a nivel alto, con lo que está escribiendo y no leyendo) los valores 91 y 0, en este orden. Ahí lo que está haciendo es almacenar en pila la dirección de retorno, y dado que la pila crece hacia abajo, lo almacena de tal forma que el LSB queda en la dirección más baja, así que la dirección que almacena es 0+256*91 = 23296, precisamente la dirección de retorno a la que debe saltar el procesador cuando termine la interrupción.

El cursor C está situado en el comienzo del primer ciclo de búsqueda de instrucción de la rutina de interrupción. En este ciclo se lee de memoria el código de operación de la primera instrucción de la rutina de interrupciones estándar de la ROM, que comienza en la dirección 56 decimal, o 38h hexadecimal. Si haceis PRINT PEEK 56 vereis cuál es ese código: el 245. En la figura, la lectura de memoria que se hace dos ciclos a continuación de la posición de C da el número 245. Es el código de PUSH AF.
Después de leer el 245 se ve que hace dos accesos a memoria pero no de lectura, sino de escritura: primero guarda el 0 y después el 84. Así que esos deben de ser los valores de A y F.

El siguiente acceso a lectura de memoria obtiene el valor 229. Ese es precisamente el número almacenado en la siguiente posición de la ROM: PRINT PEEK 57. Corresponde a PUSH HL.

Bueno, esto es lo que pasa cuando un Spectrum está "sano", o como en este caso, cuando se arranca con una ROM modificada para que no use la memoria superior (que es el síntoma que ofrece este Spectrum). ¿Qué pasa cuando lo enchufamos tal cual? ¿Ejecuta algo?

Este es el Spectrum, sin cartucho ROM de test, encendido. El aspecto es muy similar a cualquier otro Spectrum "estropeado" que hayáis podido ver, y que muchos dan por perdidos.
Imagen

Y esta es la captura del analizador, tomada en el momento en que la ULA dispara una interrupción:
Imagen

Como se ve, el Spectrum no está mirando a las musarañas, ni está completamente muerto. Se ve un patrón de bytes que se repite: 24,254,24,254,24,254. Al parecer la interrupción no ha hecho que se ejecute la rutina de interrupción, como en el caso anterior. Significa que cuando se ejecuta este código, lo hace con las interrupciones deshabilitadas. En algún punto anterior a éste, se ejecutó un DI, o bien este bucle se ejecutó poco después de arrancar la máquina, cuando aún no se habían habilitado las interrupciones (el Z80 arranca con las interrupciones deshabilitadas).

Mirando el código de operación 24, vemos que corresponde a JR disp. En este caso disp es 254, que en complemento a 2 es -1, así que esto es:
Código: Seleccionar todo
JR -1


O puesto con etiquetas:
Código: Seleccionar todo
bucle:  JR bucle


Es decir, un bucle sin fin con las interrupciones deshabilitadas. Podría haber puesto más puntas lógicas para averiguar en qué dirección de memoria se está leyendo esa instrucción en la ROM, pero por vagueza no lo he hecho. En lugar de ello, he traceado la ROM en un emulador, hasta encontrar el punto donde se llama a la parte de la ROM que contiene el bucle infinito. Ese salto se produce durante el testeo de memoria, aquí:

Imagen

Se mete FF en una posición de memoria y acto seguido se comprueba si sigue allí. Si no, hay fallo de lectura y se salta a 0131.
Un poco más abajo se repite el test pero para el valor complementario, el 00. Si hay error se salta al mismo sitio.

Imagen

Esta es la rutina donde todo finaliza. Se recupera el valor de B que indica qué banco de memoria es el que se está probando, y se pone el borde del color indicado en B. En la foto que he adjuntado el color es negro, lo que significa que el banco 0 falla. Hecho esto, se llega a un bucle sin fin, que es lo que hemos visto en el analizador.
Web: ZX Projects | Twitter: @zxprojects
Avatar de Usuario
mcleod_ideafix
Johnny Jones
 
Mensajes: 3982
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera

Re: Probando nuevos instrumentos para el diagnóstico de placas..

Notapor JULIO el Mie Jul 08, 2009 8:41 am

Hola, interesantes anotaciones del manejo de esa herramienta de análisis.

Ese cartucho que observamos, ¿De fabricación propia? es que no lo he visto como proyecto DIY
¿es el cartucho de Paul Farrow? ¿y vale tambien para un 128?

saludos
Julio.
Avatar de Usuario
JULIO
Freddy Hardest
 
Mensajes: 587
Registrado: Mar May 08, 2007 10:30 am
Ubicación: Castilla La Mancha.

Re: Probando nuevos instrumentos para el diagnóstico de placas..

Notapor winston el Mie Jul 08, 2009 10:36 am

Estoy pensando en hacer algo así (cuando acabo con el Spectranet por supuesto...) que se puede conectar al "edge connector" del Spectrum. Estoy pensando en crear un dispositivo que capture por lo menos 32 señales del bus y guarde los datos en SRAM para enviar a un PC a través de USB. Creo que puedo hacerlo usando un CPLD (tal como el XC9572) y el USB FIFO de FTDI, y un microcontrolador.

La verdad es (como siempre) la software será la parte más grande de un proyecto así...
Tarjeta ethernet para el Spectrum - http://spectrum.alioth.net/doc

Debemos practicar un quirkafleeg
Avatar de Usuario
winston
Sabreman
 
Mensajes: 469
Registrado: Mar Ago 19, 2008 4:17 pm
Ubicación: Isla de Man

Re: Probando nuevos instrumentos para el diagnóstico de placas..

Notapor mcleod_ideafix el Mie Jul 08, 2009 11:28 am

JULIO escribió:Hola, interesantes anotaciones del manejo de esa herramienta de análisis.

Gracias! :)

JULIO escribió:Ese cartucho que observamos, ¿De fabricación propia? es que no lo he visto como proyecto DIY

Sí. Es un simple cartucho con una flash y unos puentes para elegir qué ROM vas a ejecutar. Nunca he hablado de él porque tampoco es nada del otro mundo.

JULIO escribió:¿es el cartucho de Paul Farrow? ¿y vale tambien para un 128?

No, es diseño mio. Cualquier cartucho (y por ende, el Interface II) puede funcionar en un 128K o en un +2 gris además de en los modelos de 48K.
Web: ZX Projects | Twitter: @zxprojects
Avatar de Usuario
mcleod_ideafix
Johnny Jones
 
Mensajes: 3982
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera

Re: Probando nuevos instrumentos para el diagnóstico de placas..

Notapor mcleod_ideafix el Mie Jul 08, 2009 12:52 pm

winston escribió:Estoy pensando en hacer algo así (cuando acabo con el Spectranet por supuesto...) que se puede conectar al "edge connector" del Spectrum. Estoy pensando en crear un dispositivo que capture por lo menos 32 señales del bus y guarde los datos en SRAM para enviar a un PC a través de USB. Creo que puedo hacerlo usando un CPLD (tal como el XC9572) y el USB FIFO de FTDI, y un microcontrolador.


Pues mira: puedes ahorrar componentes si usas un microcontrolador que ya tenga soporte de USB, como los microcontroladores de Silicon Labs. De esta forma, desde USB puedes no solamente recoger datos, sino también configurar la captura de señales para añadir triggers y cosas así.

O puedes guardar los resultados en una pequeña tarjeta SD en el formato usado por este programa y luego no tienes más que ver offline el resultado de la captura. El formato es texto plano, y no creo que sea difícil de replicar.

Mäs opciones: en la página web de BITSCOPE tienes incluso los esquemáticos para hacerte uno, con todo el software, que además vale para Linux.

Para los que no puedan hacerse uno propio, y no quieran gastarse mucho, están los analizadores lógicos de Rocky Labs.
Web: ZX Projects | Twitter: @zxprojects
Avatar de Usuario
mcleod_ideafix
Johnny Jones
 
Mensajes: 3982
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera


Volver a Hardware

¿Quién está conectado?

Usuarios navegando este Foro: Google [Bot] y 2 invitados