INT 31H 0c00H: Setup DPMI TSR Callback
Compatibility: DPMI 1.0+
Expects: AX 0c00H
ES:DI (or ES:EDI) address of 40-byte buffer (see below)
──────────────────────────────────────────────────────────────────
Returns: CF NC (clear) if successful; else AX = DPMI Error Code
──────────────────────────────────────────────────────────────────
Info: This sets up for a DPMI client to provide memory-resident
protected-mode services to other protected-mode clients.
After using this fn and INT 31H 0c00H, you will be notified
whenever another DPMI program in the same VM is loaded or
terminated.
DS:(E)DI this points to a structure formatted as follows:
Offset Size Contents
▀▀▀▀▀▀ ▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
+0 8 lDesc16Data descriptor for 16-bit data segment
+8 8 lDesc16Code descriptor for 16-bit code segment
+10H 2 lOff16Proc offset of 16-bit callback procedure
+12H 2 res reserved
+14H 8 lDesc32Data descriptor for 32-bit data segment
+1cH 8 lDesc32Code descriptor for 32-bit code segment
+24H 4 lOff32Proc offset of 32-bit callback procedure
40 size of this structure
You may use INT 31H 000bH (query descriptor) to obtain info to
fill some of the above fields. If you will support only 16-bit
or only 32-bit applications, put zeros in the structure members
you don't need.
Notes: ■ If you only need to provide services to real-mode applications
in the current VM, then you should use INT 31H 0300H to use DOS
services to intercept interrupt vectors and make yourself RAM-
resident.
■ After calling this fn, use INT 31H 02xxH services to intercept
interrupts and use INT 31H 0c01H to make your code RAM-
resident.
When a DPMI client gets loaded, your callback address will be
called via a FAR CALL with AX=0 when a program is loading or
AX=1 when a program is terminating. On program loads, you will
typically intercept one or more interrupts to supply services
in the current VM.
See Also: DPMI API
INT 2fH: Multiplex Interrupt
DOS Functions
-♦-