Retro video games delivered to your door every month!
Click above to get retro games delivered to your door ever month!
X-Hacker.org- Watcom C/C++ v10.0 : C library - <b>synopsis:</b> http://www.X-Hacker.org [<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
Synopsis:
    #include <i86.h>
    int int386x( int inter_no,
                 const union REGS *in_regs,
                 union REGS *out_regs,
                 struct SREGS *seg_regs );

Description:
    The int386x function causes the computer's central processor (CPU) to be
    interrupted with an interrupt whose number is given by inter_no.  This
    function is present in the 32-bit C libraries and may be executed on
    Intel 386 compatible systems.  Before the interrupt, the CPU registers
    are loaded from the structure located by in_regs and the DS, ES, FS and
    GS segment registers are loaded from the structure located by seg_regs.
     All of the segment registers must contain valid values.  Failure to do
    so will cause a segment violation when running in protect mode.  If you
    don't care about a particular segment register, then it can be set to 0
    which will not cause a segment violation.  The function  segread can be
    used to initialize seg_regs to their current values.

    Following the interrupt, the structure located by out_regs is filled
    with the contents of the CPU registers.  The in_regs and out_regs
    structures may be located at the same location in memory.  The original
    values of the DS, ES, FS and GS registers are restored.  The structure
    seg_regs is updated with the values of the segment registers following
    the interrupt.

    You should consult the technical documentation for the computer that you
    are using to determine the expected register contents before and after
    the interrupt in question.

Returns:
    The function returns the value of the CPU EAX register after the
    interrupt.

See Also:
    bdos, int386, int86, int86x, intdos, intdosx, intr, segread

Example:
    #include <stdio.h>
    #include <i86.h>

    /* get current mouse interrupt handler address */

    void main()
      {
        union REGS r;
        struct SREGS s;

        s.ds = s.es = s.fs = s.gs = FP_SEG( &s );

    #if defined(__PHARLAP__)
        r.w.ax = 0x2503;    /* get real-mode vector */
        r.h.cl = 0x33;      /* interrupt vector 0x33 */
        int386( 0x21, &r, &r );
        printf( "mouse handler real-mode address="
                "%lx\n", r.x.ebx );
        r.w.ax = 0x2502;    /* get protected-mode vector */
        r.h.cl = 0x33;      /* interrupt vector 0x33 */
        int386x( 0x21, &r, &r, &s );
        printf( "mouse handler protected-mode address="
                "%x:%lx\n", s.es, r.x.ebx );

    #else
        r.h.ah = 0x35;  /* get vector */
        r.h.al = 0x33;  /* vector 0x33 */
        int386x( 0x21, &r, &r, &s );
        printf( "mouse handler protected-mode address="
                "%x:%lx\n", s.es, r.x.ebx );
    #endif
      }

Classification:
    Intel

Systems:
    DOS/32, QNX/32

Online resources provided by: http://www.X-Hacker.org --- NG 2 HTML conversion by Dave Pearson