Mi primera pregunta es: ¿Cuando y cómo se llama a una interrupción?
También he leído que el sistema utiliza las interrupciones 60 veces por segundo (controlar el reloj, controlar la entrada de teclado, flasheo del cursor, etc...) Entonces supongo que esos dos bytes de puntero cambian en la memoria muchísimas veces ( de ahí la necesidad de usar la instrucción SEI) La cuestión es: cuando yo le meta a esas direcciones una dirección de mi rutina, entiendo que se machacará seguidamente por la que quiera usar el sistema. Entonces, si yo quisiera ejecutar esa rutina varias veces, ¿qué tendría que hacer?
Empiezo por el final (como los japoneses que leen desde la ultima página hacia la primera jaja):
Cuando quieras usar tu propia rutina, es buena idea devolver el control a la rutina que se ejecutaba antes de modificar el vector, simplemente con un JMP al final de la tuya.
Las interrupciones no las llama un programa, las llama continuamente la CPU, y como bien dice Carlos, hay varios tipos de interrupciones. Unas (las raster por ejemplo) las llama el chip Vic-II (el encargado del apartado gráficos).
Cada cierto tiempo (60 veces por segundo en sistemas NTSC o 50 en PAL) la cpu salta al fragmento de código especificado en su correspondiente "vector de interrupcion" (ese par de bytes que indican una direccion de los que hablabas)
y lo ejecuta. Pero antes guarda el estado de todos los registros en la pila incluyendo la direccion del PC(puntero de programa) actual antes de iniciar la interrupción, para cuando regrese al programa que se estaba ejecutando, todo este proceso haya sido totalmente "transparente".
Es importantísimo saber que las rutinas que se ejecuten por la interrupcion de cada tipo de interrupcion son responsables de recuperar la pila.Hay interrupciones
enmmascarables (IRQ) o
no enmascarables (NMI). Las enmascarables, son las que pueden ser ignoradas (tocando un bit usando una mascara de bits, de ahi su nombre), las NMI, no tienen una mascara de bits asociada para tocar, por lo que no pueden ser ignoradas (siempre serán llamadas: otra cosa es que apuntemos a una rutina "vacia", por ejemplo).
Tambien está el tipo de interrupción por software, que es una que no se llama automáticamente por la cpu, si no que es un programa la que la genera, y se hace mediante la instrucción BRK o pulsando RUN-STOP/RESTORE
En resumen, solo hay una interrupción (las de software) que podremos "llamarla" nosotros, las otras, son continuamente llamadas por el propio sistema.
En general, además, tal como viene el sistema al encenderlo, el vector de interrupción de cada interrupción están inmutables, no cambian cada vez que tiene que hacer una tarea, en realidad, una interrupción por ejemplo, comprueba el reloj y hace parpadear el cursor en el mismo fragmento de código, y otras tareas las hace otra interrupción, como por ejemplo gestionar el teclado...
En nuestros programas, si que podemos cambiar muchas veces ese vector para hacer cosas como múltiples interrupciones pero no es aconsejable más de dos, por que restan ciclos tambien de la CPU.
Tambien se pueden programar la frecuencia a la que las interrupciones serán ejecutadas, con el raster, o con los timers.