X-Authentication-Warning: delorie.com: mailnull set sender to djgpp-bounces using -f From: "Jean-Pierre GHYS" Newsgroups: comp.os.msdos.djgpp Subject: WHY IRQ WANT RUN ???? HELP ??? Date: Thu, 7 Feb 2002 09:09:12 -0000 Organization: I.N.R.E.T.S. Lines: 121 Message-ID: NNTP-Posting-Host: pc-ghys.inrets.fr X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 5.00.2919.6600 X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6600 To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com HI I try this prog ,he come from a example of use of IRQ ,he work wery well with IRQ 0 but refuse to work with IRQ7 , my computer is ready with is IRQ7 on the LPT1 where is the big bug ???? //Simple Example of chaining interrupt handlers //Adopted from Matthew Mastracci's code #include #include #include #include #include //macros by Shawn Hargreaves from the Allegro library for locking //functions and variables. #define LOCK_VARIABLE(x) _go32_dpmi_lock_data((void *)&x,(long)sizeof(x)); #define LOCK_FUNCTION(x) _go32_dpmi_lock_code(x,(long)sizeof(x)); #define IRQ_7 0X0F // nø d'int : 15 pour le port parallele #define DATA 0X378 // adresse l'imprimante #define STATUS DATA+1 // 0X379 etat le l'imprimante #define CONTROL DATA+2 // 0X37 connnande de l'imprim int compteur = 0; int val_config= 0; // variable config du 8259 void init_port(void); // configuration port // void init_8259(void); // configuration du 8259 IN void RE_SET_8259(void); // configuration du 8259 OUT //********************************************************************* void int_port_para(void) { compteur++; // increment du compteur d'INT outportb(0X20,0X20); // int accomplie } //********************************************************************* int main(void) { //structures to hold selector:offset info for the ISRs _go32_dpmi_seginfo OldISR, NewISR; init_port(); // initialisation de l'ack du port // init_8259(); // autorisation de l'int 7 dans 8259 LOCK_FUNCTION(int_port_para); // verrouillage de la fonction LOCK_VARIABLE(compteur); // verrouillage des variables _go32_dpmi_get_protected_mode_interrupt_vector(IRQ_7, &OldISR); //load the address of the old timer ISR into the OldISR structure NewISR.pm_offset = (int)int_port_para; //point NewISR to the proper selector:offset for handler function NewISR.pm_selector = _go32_my_cs(); //chain the new ISR onto the old one so that first the old timer ISR //will be called, then the new timer ISR _go32_dpmi_chain_protected_mode_interrupt_vector(IRQ_7,&NewISR); //notice no changes to counter in this loop- the interrupt //changes it while (!kbhit()) // l'interruption devrait incrementer le compteur { // if (compteur != 0) printf("%d\n",compteur); } _go32_dpmi_set_protected_mode_interrupt_vector(IRQ_7, &OldISR); RE_SET_8259(); printf("Removing new ISR from the timer ISR chain\n"); getkey(); return 0; } //************************************************************************** ****** void init_port(void) { int val; val = inportb(CONTROL); // lecture de la config du port parallele printf("valeur config adresse 0X37A = %X\n",val); outportb(CONTROL,val|0X10); // autorisation de l'interruption PORT // while (!kbhit()) // test de la valeur de ACK { val = inportb(STATUS); // lecture de la config du port verification printf("valeur etat ACK = %X\n",val); } getkey(); } //************************************************************************** ******* void init_8259(void) { val_config = inportb(0X21); // lecture de la config 8259 printf("valeur de config 8259 %x \n",val_config); outportb(0X21,val_config & ~0X80); // mise a 1 de lautorisation de l'int val_config = inportb(0X21); // lecture de la config 8259 printf("valeur de config apres 8259 %x \n",val_config); getkey(); } //************************************************************************** ******* void RE_SET_8259(void) { val_config = inportb(0X21); // lecture de la config 8259 outportb(0X21,val_config | 0X80); // mise a 0 de lautorisation de l'int printf("valeur de config apres 8259 %x \n",val_config); getkey(); } //************************************************************************** *******