#include <dpmi.h> int _go32_dpmi_allocate_real_mode_callback_iret(_go32_dpmi_seginfo *info, _go32_dpmi_registers *regs);
See section DPMI Overview
This function allocates a "real-mode callback". Fill in the
pm_offset
field of info and call this function. It will
fill in the rm_segment
and rm_offset
fields. Any time a
real-mode program calls the real-mode address, your function gets
called. The registers in affect will be stored in regs, which
should be a global, and will be passed to your function. Any changes in
regs will be reflected back into real mode. A wrapper will be
added to your function to simulate the effects of an iret
instruction, so this function is useful for trapping real-mode software
interrupts (like 0x1b - Ctrl-Break hit).
Zero on success, nonzero on failure.
not ANSI, not POSIX
_go32_dpmi_registers regs; my_handler(_go32_dpmi_registers *r) { r->d.eax = 4; } setup() { _go32_dpmi_seginfo info; _go32_dpmi_seginfo old_vector; _go32_dpmi_get_real_mode_interrupt_vector(0x84, &old_vector); info.pm_offset = my_handler; _go32_dpmi_allocate_real_mode_callback_iret(&info, ®s); _go32_dpmi_set_real_mode_interrupt_vector(0x84, &info); do_stuff(); _go32_dpmi_set_real_mode_interrupt_vector(0x84, &old_vector); _go32_dpmi_free_real_mode_callback(&info); }
Go to the first, previous, next, last section, table of contents.