Hola, al usar una tabla para las interrupciones nos da el error Program received signal SIGEMT, Emulation trap. pero cuando usamos loads para guardar las direcciones de las rutinas de atención a interrupción no tenemos ese problema.
Hola Franco,
Con la primera opción (usar una tabla) te referís a poner la tabla en ROM e inicializar los valores con las direcciones de las rutinas, y con la segunda (usar loads) a poner la tabla en RAM e inicializarla con las direcciones en el programa principal? Si podes mostrar los cambios entre una opción y otra (donde ponen la tabla y como la inicializan) podemos ver bien que es lo que les pasa.
Con la primera opción (usar una tabla) te referís a poner la tabla en ROM e inicializar los valores con las direcciones de las rutinas, y con la segunda (usar loads) a poner la tabla en RAM e inicializarla con las direcciones en el programa principal? Si podes mostrar los cambios entre una opción y otra (donde ponen la tabla y como la inicializan) podemos ver bien que es lo que les pasa.
Si es eso, cuando esta en ROM nos da el error,
en el registro I cargamos 0x01
en cambio si esta en RAM funciona
Cuando usan la directiva .org, el salto de memoria no es absoluto, sino que es relativo al lugar de memoria donde están ubicados actualmente. Entonces es probable que la tabla_int no esté en 0x0100, y cuando cargan 0x01 en I en realidad no están cargando la dirección de la tabla, y cuando van a buscar las rutinas de atención a interrupciones terminan ejecutando lo que sea que haya en ese lugar de memoria.
Lo que tienen que hacer ahí para asegurarse de que están cargando el valor correcto en I es usar la etiqueta tabla_int, por ejemplo así:
LD HL, tabla_int
LD A, H
LD I, A
De esta forma siempre van a tener en I el byte alto de la dirección de la tabla sin importar donde quede ubicada.
Lo que tienen que hacer ahí para asegurarse de que están cargando el valor correcto en I es usar la etiqueta tabla_int, por ejemplo así:
LD HL, tabla_int
LD A, H
LD I, A
De esta forma siempre van a tener en I el byte alto de la dirección de la tabla sin importar donde quede ubicada.
Cargándolo de esa forma se soluciono el problema, gracias.