#1 Interrupciones 8086/pic 8259 perdida de teclado
Hola amigos! Es mi primer post en esta categoría así que espero no sean muy crueles conmigo. Les comentos lo que ando haciendo:
Trabajo bajao el sistema operativo Free-Dos y empleo el compilador tcc (versión 2.0). Estoy haciendo un código, para sustituir la RTI del teclado por una mía propia. He conseguido realizar la RTI (que ahora mismo no hace nada, más que permitir la salida de un bucle) pero mi problema es que, cualdo acaba la ejecución el main, vuelve al dos pero el teclado esta como "deshabilitado". Ya le he dado mil vueltas a mi problema, y no sé porque me quedo sin teclado. les adjunto el código para que vean y me digan donde esta mi fallo.
Gracias y Salu2.

Código:
#include <dos.h>
#include <stdio.h>

/*Declaraci¢n de Funciones*/
void interrupt (*vieja)();
void interrupt RTI();
void guardaRutina();
void restableceRutina();


/*Variables Globales*/
int salir = 0;


void main(void){
        /*Variables Locales*/
        int x,y;

        /*Bucle de Retardo*/
        x = 9999;
        while (x!=0){
                y = 9999;
                while (y!=0){
                        y = y - 1;
                }
                x = x - 1;
        }   
        x = 9999;
        while (x!=0){
                y = 9999;
                while (y!=0){
                        y = y - 1;
                }
                x = x - 1;
        }     

        /*Guardamos el vector de interrupci¢n*/
        guardaRutina();

        while (!salir){ /*Bucle infinito*/
        
        }        

             
        /*Recuperamos la RTI del teclado*/
        restableceRutina();
}

void guardaRutina(){
        disable(); /*Deshabilitamos las interrupciones*/
        vieja = getvect(0x09); /*Tomamos la RTI correspondiente al teclado*/
        setvect(0x09, RTI); /*Establecemos nuestra RTI para el teclado*/
        enable(); /*Volvemos a habilitar las interrupciones*/
}
void restableceRutina(){
        disable();
        setvect(0x09, vieja);
        enable();
}

void interrupt RTI(){
        salir = 1; /*Para salir del bucle infinito*/
        outportb(0x20,0x20); /*Para indicar el EOI*/
}
+
 
0
Me gusta
 
http://www.psicofxp.com/forums/programacion.313/968549-interrupciones-8086-pic-8259-perdida-teclado.html
| Más