Antoni Burguera Burguera soltó algo así como:
Una pregunta técnica: alguien puede indicarme (con el código ensamblador
si no es mucho pedir) que debo hacer para que una rutina que tengo hecha
se ejecute en la interrupción del timer (o sea, 50 veces por segundo).
Pues es sencillo.
Tienes que poner un salto en la dirección &HFD9F a tu rutina ....
Supnogamos que tu rutina comienza en la etiqueta MYINT
Lo primero es guardar el contenido de &HFD9F
para llamarlo después de ejecutar tu rutina.
Ahora, instalas el salto a tu rutina:
DI ;deshabilita interrupciones
LD HL,&HFD9F ;guarda la antigua INT para ejecutarla tras la nuestra
LD DE,OLDINT
LD BC,5
LDIR
LD A,&HC3 ;intrucción JP
LD (&HFD9F),A
LD HL,MYINT
LD (&HFD9B),HL
EI
RET
;--aquí termina la instalación de la rutina
;--aquí comienza la rutina que será llamada en cada interrupción
MYINT: lo primero que hay que hacer es guardar todos
los registros que vayas a utilizar para que la
interrupción no te modifique nada cada vez que
se ejecuta ...
supongamos que tú rutina sólo modifica AF y HL
DI ;si la rutina es larga y piensas que puede ocurrir
;que dé tiempo a producirse otra INT mientras aún
;se ejecuta tu rutina, comienzala y termínala con
;DI y EI
PUSH AF
PUSH HL
LD HL,(POINTER) ;supongamos que la rutina sólo consiste en ir
;multiplicando x 2 los valores de una tabla
;(no se me ocurre otro ejemplo tonto ahora mismo)
LD A,(HL)
ADD A,(HL)
LD (HL),A
LD (PONTER),HL
POP HL
POP AF
EI
JP OLDINT ;ejecutamos la rutina original de &HFD9F
OLDINT: DS 5 ;aquí guardamos la rutina
;antigua de &HFD9F
Me puedo haber equivocado, pues me lo he inventado sobre la marcha,
pero vamos, a grandes rasgos, es así.
Un saludo,
Jose Angel Morente (jam(_en_)ag0ny(_punto_)com)
(warau(_en_)inicia(_punto_)es)
*MSX DREAMS* (msxdreams(_en_)hotmail(_punto_)com)
¡Suscríbete a HispaMSX!
http://www.egroups.com/group/hispamsx
hispamsx-subscribe(_en_)egroups(_punto_)com
msxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsxmsx