int86() Execute 8086 Software Interrupt
#include <dos.h>
int int86(intno,inregs,outregs);
int intno; Interrupt number
union REGS *inregs; Register values going into call
union REGS *outregs; Register values on return
int86() executes the 8086 software interrupt 'intno'. The registers
are set to the values in 'inregs' before the interrupt is executed.
'outregs' is set to the value of the registers after the interrupt is
executed. The 'cflag' field of 'outregs' is set to the status of the
system carry flag.
Returns: The value of the AX register after the system call. If
the 'cflag' field in 'outregs' is non-zero, an error has
occurred and '_doserrno' (defined in <stdlib.h>) is set
to the error code.
Notes: If 'far' or 'huge' addresses are passed to the interrupt
routine, int86x() may needed instead of int86().
DOS interrupts (interrupt #21H) can also be executed with
intdos().
The union type REGS is defined in <dos.h>.
-------------------------------- Example ---------------------------------
The following statements clear the screen by using BIOS interrupt 10H
to first read the current video mode, then reset the video mode to
its current mode:
#include <dos.h> /* for int86() and union REGS */
main()
{
union REGS inregs, outregs;
inregs.h.ah = 0x0F; /* set BIOS function number */
int86(0x10, &inregs, &outregs); /* read video mode */
inregs.h.ah = 0; /* set BIOS function number */
inregs.h.al = outregs.h.al; /* set video mode number */
int86(0x10, &inregs, &outregs); /* set video mode */
/* also clears the screen) */
}
Seealso:
This page last updated on Fri Nov 30 10:48:32 MSK 2001
Copyright © 1992-2001, Vitaly Filatov, Moscow, Russia
Webmaster