Path: utzoo!attcan!utgpu!jarvis.csri.toronto.edu!clyde.concordia.ca!uunet!mcsun!inria!laas!news From: news@laas.laas.fr (USENET News System) Newsgroups: comp.sys.ibm.pc Subject: Problem with 15H interrupt handler Message-ID: <504@laas.laas.fr> Date: 8 Dec 89 08:56:36 GMT Reply-To: rlacoste@rigel.laas.fr (Robert Lacoste) Organization: LAAS-CNRS, Toulouse, France Lines: 61 Hi netlanders ! I have a problem : I am trying to write a small interrupt handler, in order to get a vga 800x600 screen hardcopy when hitting the ALT+SYSRQ keys on my AT-386 keyboard (AMI Bios). In such a situation, I know the 15H interrupt is called, with 85H in the AX register. The following program install a small driver, executing a delay loop while ALT-SYSRQ is pressed (It's a Turbo-C and assembler version). It works fine, but if I increase the delay (WAIT=2000), the system hangs up on return (The keyboard is no more operant). I think the problem is related to some other events occuring while the handler is executed (timer ?), but inserting a STI instruction before the loop in order to re-enable interrupts doesn't work... Any idea ? Thanks ! /*--------------------- START OF LISTING -----------------------*/ #include #define WAIT 20 /* FAIL IF 2000... */ /*****************************************************/ /* 0x15 INTERRUPT HANDLER, CALLED WHEN SYSRQ PRESSED */ /*****************************************************/ void interrupt my_driver(void) { asm cmp ah,85H /* ALT-SYSRQ ? */ asm jne end asm mov cx,WAIT q1: asm mov ax,WAIT /* IF PRESSED, */ q2: /* WAIT FOR A WHILE */ asm dex ax asm jne q2 asm loop q1 end: asm nop /* AND RETURN TO CALLER */ } /*****************************************************/ /* MAIN PROGRAM: INSTALL HANDLER AND STAY RESIDENT */ /*****************************************************/ main() { setvect(0x15,my_driver); keep(0,100); }