Mail Archives: djgpp/1995/05/30/14:51:07
> If I uncommend the real mode handler calls in main(), the beeping
>doesn't happen, but if you type fast enough, the program will issue
>the message 'Unsupported INT 0xd' followed a keypress or two later
>by a segmentation fault.
>
[snip]
>static void install_rm_interrupt()
>{
> int ret;
>
> rm_si.pm_offset = (int)key_intr;
You must set the pm_selector to go32_my_cs(); otherwise you might not
have the correct overall address. I don't know why it's required; it's
left out of the docs; but if you don't set both the offset and the
selector, performance is unreliable. [I think this is the right
call, but I don't have my dual rm/pm keyboard handler code handy right
now so you should check the dpmi functions reference.]
> ret = _go32_dpmi_allocate_real_mode_callback_iret(&rm_si, &rm_regs);
> if (ret != 0) {
> printf("cannot allocate real mode callback, error=%04x\n", ret);
> exit(1);
> }
>
[snip]
Also, if you don't have a real-mode keyboard handler it's quite likely that
some keypresses will get caught in real mode and miss your handlers completely.
At least that's my experience; typically I lost about 50% of them.
--
Carl Burke
- Raw text -