Hola de nuevo.
Pero, para compatibilizar con MSX1, el ordenador SUPONE que el registro de
estado seleccionado con el R#15 del VDP es el CERO !!
Por lo cual, si tu lo has modificado antes, y no lo has vuelto a poner a
cero, entonces, la rutina de tratamiento de interrupción de la Bios lee
otro registro de estado, en lugar del cero, y no detecta la INT del VDP
como tal, así que se queda colgado (como si se hubiesen desactivado las
INTs)
mas que no detectarla es que la lectura de r0 supone el eoi (end of
interrupt) al vdp y por tanto no se produce otra interrupcion porque sigue
activa la anterior, ¿no?
Sasto! Esa era la explicación correcta. Una vez que se produce una INT del
VDP, si no lees el bit que lo indica, no se vuelve a producir otra nueva INT
del mismo tipo. Por eso, el cacharro se queda colgado.
Podría pensarse que la Bios del MSX podría volver a seleccionar el registro 0
antes de leerlo, para evitar esta situación. Pero el que no lo haga, tiene un
significado: La INT de la Bios del MSX, en principio, sólo accede al VDP para
leer dicho bit del registro de estado 0. Hace un simple IN, y ningún OUT. Por
lo que aunque en el programa principal no desactives las INTS para hacer OUTs
al VDP, no tiene que pasar nada.
Entonces, si el MSX fijase en cada INT el registro de estado 0 para
consultarlo sin equívoco, pasaría que como tiene que hacer un par de OUTs al
VDP para dicha selección de registro, podría colarse entre los 2 OUTs
consecutivos donde no se deshabilitaron las INTs.
Así pues, ¿por qué hay que desactivar las INTs al acceder al VDP si digo que
no pasa nada si no se hace?
Porque más adelante, se pueden añadir otros tipos de interrupción de VDP, como
la INT de línea. En cuyo caso, es necesario que la rutina de interrupción
seleccione otro registro de estado distinto al cero, para leer el bit de la int
de línea y permitir que se produzca una nueva int de línea. Y entonces, como
esta rutina de interrupción hace OUTs al VDP, sí que se te puede meter entre
tus 2 OUTs.
Aparte, claro está, que tú puedes hacer accesos al VDP dentro de tu rutina de
interrupción, por lo que sea.
Pues nada, perdón por el rollo, pero es mejor que sobren explicaciones, a que
se diga: 'Esto se hace así y punto'.
Pos nada, muchacho, que palante con los experimentos del VDP, que son de lo
más entretenido y gratificante que se puede hacer con un MSX2.
Hasta luego.
Daniel Zorita.
_____________________________________________________________________
¿Qué harías si dispusieras del doble de tiempo? Contesta en
http://www.wanadoo.es/animacion/promoverano/
y gana una cadena de música.