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,
![](https://eva.fing.edu.uy/pluginfile.php/54337/mod_forum/post/640510/Captura%20de%20pantalla%202024-06-12%20130440%20%281%29.png)
en el registro I cargamos 0x01
en cambio si esta en RAM funciona
![](https://eva.fing.edu.uy/pluginfile.php/54337/mod_forum/post/640510/Captura%20de%20pantalla%202024-06-12%20130556.png)
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.