Adjunto mi solución al ejercicio, la variable global programaInterrupt no se muy bien como inicializarla en el main, aunque en la rutina de servicio a la interrupción siempre cuando se utiliza tiene un valor definido
bool ESC; //variable que es 1 si la ultima tecla ingresada es ESC
rutina* programaInterrupt; //guarda la direccion del programa
bool estoyEnRutina; //variable que me dice si estoy en rutina o no
void main(){
disable();
//instalo interrupcion
ESC = 0;
estoyEnRutina = 0;
enable();
}
//rutina de atencion a la interrupcion
void keyboard(){
char TECLA = in(TECLA);
if(TECLA == ESC && !estoyEnRutina){
ESC = 1;
jmp(padr());
}else if(TECLA == ESC && estoyEnRutina){
ESC = 1;
jmp(programaInterrupt);//me voy de rutina
}else if(ESC == 1 && TECLA == 1){
ESC = 0;
programaInterrupt = padr();
jmp(radr(RUTINA1));
}else if(ESC == 1 && TECLA == 2){
ESC = 0;
programaInterrupt = padr();
jmp(radr(RUTINA2));
}else if(ESC == 1 && TECLA == 3){
ESC = 0;
programaInterrupt = padr();
jmp(radr(RUTINA3));
}else{
ESC = 0;
jmp(padr());
}
}