Mail Archives: djgpp/1997/10/06/09:49:52
From: | Olivier PERRON <olivier DOT perron AT art DOT alcatel DOT fr>
|
Newsgroups: | comp.os.msdos.djgpp
|
Subject: | Problem with interrupt handling
|
Date: | Mon, 06 Oct 1997 13:21:18 +0200
|
Organization: | Alcatel/Bell
|
Lines: | 67
|
Message-ID: | <3438C9AE.2BBD@art.alcatel.fr>
|
NNTP-Posting-Host: | rtbsci143s.art.alcatel.fr
|
Mime-Version: | 1.0
|
To: | djgpp AT delorie DOT com
|
DJ-Gateway: | from newsgroup comp.os.msdos.djgpp
|
Hi,
I'm trying to work with interrupt and interrupt handler. My problem is
that the following sample program doesn't work. Under a Windows 95 dos
box, I have a "non conform operation" error message.
What am I doing wrong ?
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <string.h>
#include <values.h>
#include <go32.h>
#include <dpmi.h>
_go32_dpmi_seginfo _v0xF1;
int my_exit(void);
void my_handler(void)
{
printf("I'm in my_handler\n");
}
void main(void)
{
_go32_dpmi_seginfo info;
__dpmi_regs r;
char rep[10];
/* save current 0xF1 int context */
_go32_dpmi_get_protected_mode_interrupt_vector( 0xF1, &_v0xF1 );
memset(&info, 0, sizeof(_go32_dpmi_seginfo));
info.pm_selector = _go32_my_cs();
info.pm_offset = (unsigned long )my_handler;
_go32_dpmi_allocate_iret_wrapper(&info);
_go32_dpmi_set_protected_mode_interrupt_vector(0xF1, &info);
/*
big_loop();
*/
printf("Press <ENTER> to continue: ");
scanf("%c", rep);
printf("Generating 0xF1 interrupt\n");
memset(&r, 0, sizeof(__dpmi_regs));
__dpmi_int(0xF1, &r);
printf("Returning from 0xF1 interrupt\n");
my_exit();
}
int my_exit(void)
{
/* restore previous context */
_go32_dpmi_set_protected_mode_interrupt_vector(0xF1, &_v0xF1);
exit(0);
}
- Raw text -