HispaMSX

Re: [hispamsx] Ensamblador

2000-08-23 19:28:28
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


<Anterior en la conversación] Conversación actual [Siguiente en la conversación>