Karoshi MSX Community
05 de Julio de 2021, 07:38:48 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: 1 [2]
  Imprimir  
Autor Tema: Corrupción en la VRAM  (Leído 8362 veces)
0 Usuarios y 1 Visitante están viendo este tema.
nanochess
Karoshi Lover
***
Mensajes: 141


Programando algo buenísimo :)


WWW
« Respuesta #15 : 28 de Enero de 2012, 05:44:29 pm »

Una idea por pasos para depurar (me sirvió muchísimo cuando tuve que poner código directo de VDP):
1. Aisla todo el código de VDP en un solo punto.
2. Asegurate de que los DI/EI solo se usan en ese punto y tal vez al inicio del programa.
3. Si escribes o lees del VDP (DB 98 / D3 98), debes esperar 28 ciclos antes de cambiar la dirección (D3 99). Debes visualizar el código como una lista lineal de instrucciones.
4. Las escrituras (D3 99) afortunadamente no necesitan NOPS. Se sugieren 28 ciclos antes de poner a continuación el (DB 98 / D3 98)
5. Haz una lista de todas las llamadas, pudiera ser que una rutina llama a otra que era diferente antes.
6. Si sigue fallando, desactiva partes sospechosas del código.
Como referencia, los NOP ocupan 5 ciclos.
¡Ánimo!
En línea

Mira mis juegos MSX/Colecovision/Atari/Intellivision http://nanochess.org/retro_es.html, y sígueme en Twitter http://twitter.com/nanochess
assembler
Karoshi Fan
**
Mensajes: 62

assembler@ya.com
Email
« Respuesta #16 : 31 de Enero de 2012, 02:00:11 pm »

Muchas gracias a todos por vuestras respuestas. Me han servido para localizar el problema.

Había de todo un poco: no respetar tiempos, no usar el in a,(0x99), USAR CODIGO DENTRO DE LA INTERRUPCION QUE ACTIVABA LAS INTERRUPCIONES DE NUEVO...



Creo que está listo para presentarlo, a falta de darle un repasito final de betatesting y PA'RRIBA


Tengo que confesar que estuve a punto de abandonar. Puse incluso un mensaje desesperado en este foro comentando la posibilidad y pidiendo un poco más de ayuda, pero  Huh no se publicó  Huh (Al menos no se donde está)

Al volver a entrar más tarde para ver si alguien había respondido, vi que no se había publicado, lo interpreté como una señal del ciberespacio y me puse a darle más vueltas al asunto, hasta que atiné.
En línea
Mortimer
Karoshi Lover
***
Mensajes: 216


WWW
« Respuesta #17 : 31 de Enero de 2012, 02:05:30 pm »

¡Que buena noticia  Cheesy!
En línea
Dioniso
Visitante
« Respuesta #18 : 31 de Enero de 2012, 02:53:36 pm »

Al volver a entrar más tarde para ver si alguien había respondido, vi que no se había publicado, lo interpreté como una señal del ciberespacio y me puse a darle más vueltas al asunto, hasta que atiné.

Alabado sea el ciberespacio  Magical Stones

Enhorabuena por el juego.
En línea
Mortimer
Karoshi Lover
***
Mensajes: 216


WWW
« Respuesta #19 : 01 de Febrero de 2012, 09:12:42 pm »

Si hubiera visto tu post desesperado te hubiera pedido una volcado de la memoria para haberlo metido en mi emulador, porque no hubiera sido difícil añadirle algo de código 'ad hoc' para monitorizar que todas las escrituras al VDP fueran coherentes, no sólo la velocidad, si no que por ejemplo no se envíe un byte bajo de dirección de vram que luego no tenga efecto por una interrupción o un IN, o quizás listados de las posiciones que van tomando los punteros para poder revisar después, porque los fallos así intermitentes y aleatorios son puñeteros de pillar con un debugger normal

No sé si hay algo ya parecido en algún emulador, porque quizás sea una buena idea añadírselo al meisei como lo de escrituras rápidas.

(Ah, y muchas gracias por incluirme en los créditos  Cheesy)

En línea
assembler
Karoshi Fan
**
Mensajes: 62

assembler@ya.com
Email
« Respuesta #20 : 02 de Febrero de 2012, 08:25:33 pm »

Gracias a tí por la ayuda prestada, y por la que me podías haber prestado.  Wink


¿Eso que comentas del código 'ad hoc' me lo puedes explicar?
En línea
Mortimer
Karoshi Lover
***
Mensajes: 216


WWW
« Respuesta #21 : 02 de Febrero de 2012, 10:42:36 pm »

Me refería a modificar el emulador con código específico para acorralar el problema. Se puede hacer casi cualquier cosa desde dentro para intentar forzar el fallo, poner alertas todo lo complejas que quieras, trazar escrituras o lecturas, medir timings del vdp, acortar o alargar los ciclos por INT, contar ciclos...

En línea
Páginas: 1 [2]
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!