CONSULTAS TÉCNICAS (Arcados, reparaciones y servicio técnico) > Placas Arcade

POCKET GAL - Sin sonido [SOLUCIONADO]

(1/2) > >>

Marcos75:
Hola a todos.

Esta reparación en realidad es una excusa para haceros una par de preguntas de un tema que desconozco totalmente :)

Este Pocket Gal no tenía sonido. Lo primero que veo es que alguien ha puesto un cristal de 24 MHz. Otra Pocket Gal que tengo lleva uno de 8 MHz. Ya hemos hablado alguna vez de que hacer eso es posible, ya que el cristal de 24 tiene armónicos, y en este caso oscilaría en uno de sus armónicos ( el de 8 ), pero es una situación "forzada". Así que he quitado el cristal de 24 y he puesto uno de 8.

El sonido sigue sin estar. Os pongo una foto de otra placa casi igual que la mía. En el recuadro rojo está la CPU de sonido (a la derecha), y la ROM y la RAM de sonido (a la izquierda - abajo y arriba respectivamente).



La CPU es una 6502. Tiene dos, iguales, la de abajo, la principal, y la del recuadro rojo, la de sonido. En este caso identificar cual es cual es sencillo, aunque solamente sea por intuición, al estar la del recuadro rojo más cerca de la zona de sonido.

Con la punta lógica veo que el 6502 tiene reloj, señal de RESET correcta, pero no tiene actividad. Sus buses de direcciones y datos están fijos completamente, y solamente saca señal READ, no WRITE.

Como no entiendo muy bien cómo funcionan los ciclos del procesador, entiendo que esta situación indica que el procesador está mal, ya que no es capaz de coger la primera instrucción de la ROM, procesarla, y avanzar (con lo que vería, al menos, variación en el bus de direcciones). Por ello cambio la CPU, pero el problema persiste.

Luego me da por poner una memoria "a caballo" sobre la memoria soldada en placa, y el sonido revive. La cambio, y listo.

Y aquí viene mi duda: yo pensaba que la CPU podía correr código leyéndolo directamente de la ROM, sin tener que pasar por la RAM. Pero en este caso está claro que no: la CPU y la ROM estaban bien, la RAM mal, pero la CPU no era capaz de correr ni siquiera la primera instrucción (que probablemente fuese un sencillo DI, o similar).

¿Alguien nos podría explicar, aunque sea para el Z80, no para el 6502, cómo corre código, es decir, qué sucede en cada ciclo de reloj internamente en la CPU, y en la ROM y la RAM, durante la ejecución de una instrucción? He buscado información, y de momento no he encontrado lo que busco.

Muchas gracias.

Un saludo.

Marcos75:
Por concretar algo más mi pregunta. Estoy leyendo esto (Z80), pero aún me confunde más:

http://home.mit.bme.hu/~benes/oktatas/dig-jegyz_052/Z80-kivonat.pdf

Mi hipótesis sería: durante un ciclo de ejecución de instrucción, la CPU no necesita la RAM, porque lee la instrucción de la ROM, y la ejecuta. Si luego la instrucción necesita en un segundo ciclo o sucesivos acceder a la memoria, lo hará, pero entonces debería ver algo de actividad en el bus de direcciones... ¿Sería esa hipótesis cierta?

Otra opción es que realmente sea así, es decir, que la CPU empiece a correr código, pero en cuanto tenga que acceder a la RAM, si esta está mal, se pare. Es decir, yo vería fijo el bus de direcciones, pero durante un brevísimo instante inicial sí habría tenido actividad...

En resumidas cuentas, la pregunta sería: ¿se necesita la RAM para que la CPU ejecute, por ejemplo, un DI?

Un saludo.

Marcos75:
Bueno, me he estado poniendo un poco al día, con el Z80.

Efectivamente, no pareciera que para correr código le haga falta una RAM, con la ROM sería suficiente. La RAM estaría más enfocada a almacenar datos, a implementar la pila, etc.

Como supongo que finalmente el código va a hacer uso de la pila inmediatamente, y por tanto de la RAM, supongo que realmente la RAM sí es necesaria. Y supongo que lo que yo observo no es exactamente que el bus de direcciones se quede estático desde el principio. Quizá saque una o dos direcciones, y en cuanto necesite hacer uso de la RAM, se pare. O quizá el 6502 funciona distinto al Z80.

Lo mismo, por curiosidad, hago una prueba esta tarde a ver qué veo.

Un saludo.

Characa:
En efecto, un uP cualquiera (menos el TMS 9000 que por particularidades constructivas, hace uso de RAM externa para su propio uso e inaccesible al usuario) es capaz de ejecutar código leyéndolo de una o varias ROMs, sin mediar para nada RAMs, siempre y cuando no se necesiten procesar datos procedentes de unidades E/S, éstos llevan su propia pila y contador de programa aparte de otros registros de uso general.

Marcos75:
Gracias Characa.

Creo que en el caso del Z80 la pila tiene que implementarse en una RAM externa sí o sí. Y como la pila se emplea aunque no ejecutes instrucciones PUSH (por ejemplo, al retornar de subrutinas y demás), entiendo que el Z80 necesitaría RAM sí o sí, aunque pueda leer y ejecutar el código directamente de una ROM. Es decir, teóricamente no necesita una RAM, pero en la práctica sí. ¿Eso es así?

Un saludo.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa