Karoshi MSX Community
05 de Julio de 2021, 03:31:50 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]
  Imprimir  
Autor Tema: Dudas con respecto a HALT  (Leído 4311 veces)
0 Usuarios y 1 Visitante están viendo este tema.
SapphiRe
Visitante
« : 16 de Abril de 2006, 01:09:39 am »

Hola a todos:

  Esta mañana comentábamos JLTurSan y yo sobre la sincronización utilizando la instrucción HALT y nos ha surgido una duda que igual alguien puede despejarnos para bien o para mal.

  El caso es el siguiente: ¿cuándo se detiene la ejecución de un HALT? La respuesta parece fácil y lo es: cuando le llega una interrupción al Z80 siempre que éstas estén habilitadas, claro. Ahora viene la pregunta complicada, no iba a ser todo tan sencillo, jejeje. Supongamos que nuestra rutina termina dentro del primer tercio de pantalla y ahí comienza a ejecutarse el HALT, que se detendrá en la próxima interrupción que, nosotros esperamos, debería suceder al terminar el barrido de la pantalla.

  Y aquí viene la pregunta gorda: ¿puede dispararse una interrupción (no provocada por el VDP) digamos a media pantalla y destrozarnos la sincronización? En caso afirmativo, ¿quién podría provocarla? ¿Cómo podríamos evitar que se produjera?

Gracias
--
SapphiRe
En línea
WYZ
Visitante
« Respuesta #1 : 16 de Abril de 2006, 12:12:03 pm »

Es mas! Si la sincronizacion se fuera al garete por esa causa, podríamos usar el bit 7 del registro de estado del VDP para evitar el problema?  Wink



En línea
SapphiRe
Visitante
« Respuesta #2 : 16 de Abril de 2006, 12:27:43 pm »

Es mas! Si la sincronizacion se fuera al garete por esa causa, podríamos usar el bit 7 del registro de estado del VDP para evitar el problema?  Wink

¡Sí! Esa sería una buena solución: si no es debida al VDP ejecutamos otro halt dentro de la rutina de servicio de interrupciones y en paz. La pregunta es... ¿haría falta?
En línea
WYZ
Visitante
« Respuesta #3 : 16 de Abril de 2006, 12:31:45 pm »

y otra custion mas: ¿es esa interrupcion del registro de estado una copia de la del z80? Huh

PS:Jodidos analisis!!
En línea
SapphiRe
Visitante
« Respuesta #4 : 16 de Abril de 2006, 12:51:43 pm »

Mira en snippets que ahí tienes una actualización de la rutina de parcheo de interrupciones Cheesy Lo he hecho un poco de memoria sin probarlo, espero no haberme equivocado.

Saludos
--
SapphiRe
En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #5 : 17 de Abril de 2006, 09:19:01 am »

Esto es demasiado para mí un lunes por la mañana.... Tongue
En línea

Doom dee doom dee doom
SapphiRe
Visitante
« Respuesta #6 : 17 de Abril de 2006, 12:36:12 pm »

Pues aún hay un pequeño retoque que hacer, luego lo explicaré con más detalle, ya que en algunas ocasiones puede ser que salte una interrupción justo entre el ret y el halt... hay que mover el EI de sitio Cheesy
En línea
SapphiRe
Visitante
« Respuesta #7 : 17 de Abril de 2006, 04:01:47 pm »

Pues en Snippets tenéis actualizada la rutina. De nuevo lo he hecho de cabeza pero ahora (al menos en teoría) no cabría la posibilidad de que se colase una interrupción antes de que llegase el HALT, ya que justo antes se ejecuta EI. Es un pelín más lenta que la anterior, ya que hay un call más, pero no debería ser un tremendo aumento del coste.

Saludos
--
SapphiRe
En línea
Páginas: [1]
  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!