home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / CLIPPER / MISC / INTER34B.ZIP / INTERRUP.F < prev    next >
Encoding:
Text File  |  1993-04-03  |  284.2 KB  |  7,780 lines

  1. Interrupt List, part 6 of 8
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  3. --------F-2FC0-------------------------------
  4. INT 2F - MTEZ XpressFax Hardware TSR (CLASS2) - API
  5.     AH = C0h
  6.     AL = function code (01h to 15h)
  7. Return: ???
  8. SeeAlso: AX=C000h"MTEZ",AX=CB00h"MTEZ"
  9. --------N-2FC000-----------------------------
  10. INT 2F - Novell ODI Link Support Layer (LSL.COM) - INSTALLATION CHECK
  11.     AX = C000h
  12. Return: AL = FFh if installed
  13.         DX:BX -> FAR entry point (see below)
  14.         ES:SI -> signature string "LINKSUP$"
  15. Notes:    LSL.COM may use any multiplex number between C0h and FFh; it searches
  16.       for itself in that range, and installs using the first free multiplex
  17.       number in the range if not already loaded.
  18.     on return, ES = DX for LSL v1.10; LSL makes use of this in its search
  19.       for a previous installation
  20.  
  21. Call LSL entry point with:
  22.     BX = 0001h "Request MLID Registration"
  23.         ES:SI -> ???
  24.         ???
  25.         Return:    AX = completion code (see below)
  26.             DS:DI -> LSL information block
  27.     BX = 0002h get support entry points
  28.         ES:SI -> buffer for entry point record (see below)
  29.         Return: ES:SI buffer filled
  30.     BX = 0003h "Request MLID API entry point"
  31.         Return: ES:SI -> MLID API entry point
  32.                  (call with BX=function 00h-10h, not range-checked)
  33. Notes:    LSL v1.10 executes BX=0003h for all other values of BX
  34.     see "Novell LAN Driver Developer's Guide, Volume III" for details of
  35.       function 0001h
  36.  
  37. Values for completion code:
  38.  0000h    successful
  39.  8001h    out of resources
  40.  8002h    bad parameter
  41.  8003h    no more items
  42.  8004h    item not present
  43.  8005h    failed
  44.  8006h    receive overflow
  45.  8007h    canceled
  46.  8008h    bad command
  47.  8009h    duplicate entry
  48.  800Ah    no such handler
  49.  800Bh    no such driver
  50.  
  51. Format of entry point record:
  52. Offset    Size    Description
  53.  00h    DWORD    pointer to protocol support entry point in LSL (see below)
  54.  04h    DWORD    pointer to general support entry point in LSL (see below)
  55.  
  56. Call protocol support entry point with:
  57.     BX = function number
  58.         0000h ???
  59.         0001h ???
  60.         0002h ???
  61.         0003h "ScheduleAESEvent"
  62.         ES:SI -> AES ECB to be scheduled (see below for format)
  63.         Return: ES,SI preserved
  64.         0004h "CancelAESEvent"
  65.         ES:SI -> ECB to be cancelled (see below for format)
  66.         Return: ES,SI preserved
  67.         0005h "GetIntervalMarker"
  68.         Return: DX:AX = current interval marker in milliseconds
  69.             all other registers preserved
  70.         0006h "RegisterStack"
  71.         AX = logical board number
  72.         ES:SI -> bound stack info structure (see below)
  73.         Return: BX = assigned Stack ID if AX=0000h
  74.         0007h "DeRegisterStack"
  75.         AX = protocol stack's assigned Stack ID
  76.         0008h "RegisterDefaultStack"
  77.         AX = logical board number
  78.         ES:SI -> stack info structure (see below)
  79.         0009h "DeRegisterDefaultStack"
  80.         AX = logical board number
  81.         000Ah "RegisterPrescanStack"
  82.         AX = logical board number
  83.         ES:SI -> stack info structure (see below)
  84.         000Bh "DeRegisterPrescanStack"
  85.         AX = logical board number
  86.         000Ch "SendPacket"
  87.             ES:SI -> send ECB
  88.         Return: interrupts disabled
  89.         000Dh ???
  90.         000Eh ???
  91.         000Fh ???
  92.         0010h "GetStackIDFromName"
  93.         ES:SI -> counted NUL-terminated protocol name (max 15 chars)
  94.         Return: BX = Stack ID if AX=0000h
  95.         0011h "GetPIDFromStackIDBoard"
  96.         AX = Stack ID for protocol
  97.         CX = logical board number
  98.         ES:SI -> 6-byte buffer for protocol ID
  99.         0012h "GetMLIDControlEntry"
  100.         AX = logical board number
  101.         Return: ES:SI -> MLID control handler (see below) if AX=0000h
  102.         0013h "GetProtocolControlEntry"
  103.         AX = Stack ID or
  104.             FFFEh Prescan stack
  105.                 CX = logical board number
  106.             FFFFh default protocol
  107.                 CX = logical board number
  108.         Return: ES:SI -> protocol stack control entry point if AX=0000h
  109.                 (see below)
  110.         0014h "GetLSLStatistics"
  111.         Return: AX = 0000h (successful)
  112.             ZF set
  113.             ES:SI -> LSL statistics table (see below)
  114.         0015h "BindStack"
  115.         AX = protocol stack's assigned Stack ID
  116.         CX = logical board number
  117.         0016h "UnbindStack"
  118.             AX = protocol stack's assigned Stack ID
  119.         CX = logical board number
  120.         0017h "AddProtocolID"
  121.         AX = frame type ID code
  122.         ES:SI -> 6-byte protocol ID
  123.         CX:DI -> counted NUL-terminated short protocol name (max 15 ch)
  124.         0018h "RelinquishControl"
  125.         Return: after LSL performs any necessary background processing
  126.         0019h "GetLSLConfiguration"
  127.         Return: AX = 0000h (successful)
  128.             ZF set
  129.             ES:SI -> LSL configuration table (see below)
  130.         001Ah "GetTickMarker"
  131.         Return: AX = number of 55ms ticks since LSL loaded
  132.             BX destroyed
  133. Return: AX = completion code (see above)
  134.     ZF set if successful
  135.     SS:SP, DS, BP preserved; most other registers may be destroyed
  136.  
  137. Call general support entry point with:
  138.     BX = function number
  139.         0000h "Allocate Memory" (obsolete)
  140.          always returns AX=8008h (BAD_COMMAND)
  141.         0001h "Free Memory" (obsolete)
  142.          always returns AX=8008h (BAD_COMMAND)
  143.         0002h "Realloc Memory" (obsolete)
  144.          always returns AX=8008h (BAD_COMMAND)
  145.         0003h "Memory Statistics" (obsolete)
  146.          always returns AX=8008h (BAD_COMMAND)
  147.         0004h "Add Memory To Pool" (obsolete)
  148.          always returns AX=8008h (BAD_COMMAND)
  149.         0005h "AddGeneralService"
  150.         ES:SI -> General Service Control Block (see below)
  151.         0006h "RemoveGeneralService"
  152.         ES:SI -> General Service Control Block (see below)
  153.         0007h "GetNETcfgPath"
  154.             Return: AX = 0000h (successful)
  155.             DS:DX -> ASCIZ pathname for NET.CFG
  156.         0008h U ???     (in LSL 1.10)
  157.         Return: AX = 0000h
  158.             ES:SI -> ??? (a 22-byte data area)
  159.         000Ah "GetCriticalSectionStatus"
  160.             Return: BX = total outstanding calls to "StartCriticalSection"
  161.         000Bh "ServiceEvents"
  162.             interrupts disabled
  163.         Return: interrupts disabled
  164.         0010h "GetStackECB"
  165.             DS:DI -> Lookahead structure (see below)
  166.         interrupts disabled
  167.         Return: ES:SI -> ECB if successful (AX=0000h,ZF set)
  168.             interrupts disabled
  169.         8000h-FFFFh reserved for user general service providers
  170. Return: AX = completion code (see above)
  171.     ZF set if successful
  172.     SS:SP, DS, BP preserved
  173.  
  174. Call MLID control handler with:
  175.     AX = logical board number
  176.     BX = function number
  177.         0000h "GetMLIDConfiguration"
  178.         Return:    ES:SI -> MLID's configuration table if successful
  179.                 (see below for format)
  180.         0001h "GetMLIDStatistics"
  181.         Return:    ES:SI -> MLID's statistics table if successful
  182.                 (see below for format)
  183.         0002h "AddMulticastAddress"
  184.         ES:SI -> 6-byte multicast address to add
  185.         0003h "DeleteMulticastAddress"
  186.         ES:SI -> 6-byte multicast address to delete
  187.         0005h "MLIDShutdown"
  188.         CX = type
  189.             0000h permanent (also deregisters from LSL)
  190.             other temporary (shutdown hardware only)
  191.         0006h "MLIDReset" reinitialize board / restart from temp shutdown
  192.         0007h "Create Connection" (obsolete?)
  193.         ???
  194.         0008h "Delete Connection" (obsolete?)
  195.         ???
  196.         0009h "SetLookAheadSize"
  197.         CX = requested lookahead size (00h-80h)
  198.         0010h "PromiscuousChange"
  199.         CX = what to receive promiscuously
  200.             bit 0: MAC frames
  201.             bit 1: non-MAC frames
  202.         0011h "RegisterReceiveMonitor"
  203.             CX = subfunction
  204.             0000h disable receive monitoring
  205.             else  enable receive monitoring
  206.         ES:SI -> monitor receive routine
  207.         ES:DI -> monitor transmit routine
  208.         0012h "Driver Poll" (obsolete?)
  209.         ???
  210. Return: AX = completion code (see above)
  211.     ZF set if successful
  212. Note:    not all boards/MLIDs support function 0010h; see bit 13 in the MLID
  213.       mode flags field of the MLID's configuration table
  214.  
  215. Call protocol stack control entry point with:
  216.     BX = function number
  217.         0000h "GetProtocolStackConfiguration"
  218.         Return: ES:SI -> protocol stack's configuration table
  219.                 (see below)
  220.         0001h "GetProtocolStackStatistics"
  221.         Return: ES:SI -> protocol stack's statistics table (see below)
  222.         0002h "BindToMLID"
  223.         CX = board number to bind to
  224.         ES:SI -> implementation-dependant parameter string
  225.         0003h "UnBindFromMLID"
  226.         CX = board number from which protocol should unbind
  227.         ES:SI -> optional implementation-dependant parameter string
  228.         0004h "MLIDDeRegistered"
  229.         CX = board number that has de-registered from LSL
  230. Return: AX = status
  231.         0000h successful
  232.         else implementation-dependant error codes
  233.     ZF set if successful
  234.     SS:SP, DS, BP preserved
  235.  
  236. Format of AES ECB:
  237. Offset    Size    Description
  238.  00h    DWORD    "AESLink" pointer used by LSL for list management
  239.  04h    DWORD    number of milliseconds to wait
  240.  08h    DWORD    "AESStatus" (is set to 00000000h when AES ESR is invoked)
  241.  0Ch    DWORD    -> function to be invoked when time expires
  242.         ES:SI will point to this structure on entry,
  243.         DS, BP, and SS:SP must be preserved.
  244.  
  245. Format of LSL Configuration Table:
  246. Offset    Size    Description
  247.  00h    BYTE    major version of configuration table
  248.  01h    BYTE    minor version of configuration table (decimal, 0-99)
  249.  02h  8 BYTEs    reserved
  250.  0Ah    BYTE    LSL major version (decimal)
  251.  0Bh    BYTE    LSL minor version (decimal, 0-99)
  252. ---LSL 1.0x ---
  253.  0Ch 14 BYTEs    reserved
  254. ---LSL 1.10+ ---
  255.  0Ch    WORD    maximum number of boards which LSL can handle
  256.  0Eh    WORD    maximum number of protocol IDs which LSL can handle
  257.  10h 12 BYTES    reserved
  258.  
  259. Format of LSL Statistics Table:
  260. Offset    Size    Description
  261.  00h    BYTE    major version of statistics table format
  262.  01h    BYTE    minor version of statistics table format (decimal, 0-99)
  263.  02h    WORD    "GenericCounters" number of counters in static portion of 
  264.          table
  265.  04h    DWORD    "ValidCountersMask" bit mask indicating which generic
  266.         counters are actually used.  Bit 31 = TotalTxPackets, bit 30
  267.         is the next field, etc.
  268.  08h    DWORD    "TotalTxPackets" total SendPacket requests made
  269.  0Ch    DWORD    reserved
  270.  10h    DWORD    reserved
  271.  14h    DWORD    "AESEventsCount" number of completed AES events
  272.  18h    DWORD    "PostponedEvents" number of events postponed due to critical
  273.          sections inside the MLIDs
  274.  1Ch    DWORD    "CancelAESFailures" number of times CancelAESEvent failed
  275.  20h    DWORD    reserved
  276.  24h    DWORD    reserved
  277.  28h    DWORD    "TotalRxPackets" total number of GetStackECB requests
  278.  2ch    DWORD    "UnclaimedPackets" total number of packets not consumed by a
  279.         protocol stack
  280.  30h    WORD    "NumberCustom" number of custom variables that follow
  281.  32h  N DWORDs    custom counters
  282.       N DWORDs    -> CustomCounterStrN (one per custom counter)
  283.     var    length-prepended and NULL terminated string for Counter 0
  284.     ...
  285.     var    length-prepended and NULL terminated string for Counter N-1
  286.  
  287. Format of Protocol Stack Statistics Table:
  288. Offset    Size    Description
  289.  00h    BYTE    statistics table major version
  290.  01h    BYTE    statistics table minor version (decimal, 0-99)
  291.  02h    WORD    number of generic counters following
  292.  04h    DWORD    "ValidCountersMask" (bitmask, bit 31 is TotalTxPackets)
  293.  08h    DWORD    TotalTxPackets
  294.  0ch    DWORD    TotalRxPackets
  295.  10h    DWORD    IgnoredRxPackets
  296.  14h    WORD    number of custom counters
  297.  16h  N DWORDs    custom counters
  298.       N DWORDs    -> CustomCounterStrN (one per custom counter)
  299.           var    length-prepended and NULL terminated string for Counter 0
  300.     ...
  301.     var    length-prepended and NULL terminated string for Counter N-1
  302.  
  303. Format of Protocol Stack Configuration Table:
  304. Offset    Size    Description
  305.  00h    BYTE    configuration table major version
  306.  01h    BYTE    configuration table minor version (decimal, 0-99)
  307.  02h    DWORD    -> counted NUL-terminated long descriptive name for protocol
  308.  06h    DWORD    -> counted NUL-terminated short name for protocol (15 chars)
  309.  0Ah    BYTE    protocol stack major version
  310.  0Bh    BYTE    protocol stack minor version (decimal, 0-99)
  311.  0Ch 16 BYTEs    reserved for future use
  312.  
  313. Format of MLID Configuration Table:
  314. Offset    Size    Description
  315.  00h 26 BYTEs    signature 'HardwareDriverMLID         ' (8 spaces on end)
  316.  1ah    BYTE    configuration table major version
  317.  1bh    BYTE    configuration table minor version (decimal, 0-99)
  318.  1ch  6 BYTEs    node address 
  319.  22h    WORD    MLID mode flags (see below)
  320.  24h    WORD    board number
  321.  26h    WORD    board instance (if more than one of same board installed)
  322.  28h    WORD    maximum packet size
  323.  2Ah    WORD    BestDataSize
  324.  2Ch    WORD    WorstDataSize
  325.  2Eh    DWORD    -> counted NUL-terminated long name for NIC
  326.  32h    DWORD    -> counted NUL-terminated short name for NIC (8 chars max)
  327.  36h    DWORD    -> counted NUL-terminated Frame and Media type 
  328.  3Ah    WORD    reserved (0000h)
  329.  3Ch    WORD    frame type ID
  330.  3Eh    WORD    TransportTime (milliseconds)
  331.  40h    DWORD    -> SourceRouteHandler for TokenRing. (Used by ROUTE.COM)
  332.  44h    WORD    lookahead size
  333.  46h    WORD    line speed (Mbps if high bit clear, else Kbps)
  334.  48h    WORD    QueueDepth
  335.  4Ch  6 BYTEs    reserved (0)
  336.  54h    BYTE    driver major version
  337.  55h    BYTE    driver minor version (decimal, 0-99)
  338.  56h    WORD    flags
  339.         bits 10-9: specialized multicast support
  340.             00 = Group addressing is default for medium
  341.             01 = Invalid
  342.             10 = Filter group address in MLID.
  343.             11 = Adapter filters group address.
  344.         bit 2: supports Micro Channel cards
  345.         bit 1: supports ISA cards
  346.         bit 0: supports EISA cards
  347.  58h    WORD    send retries
  348.  5Ah    DWORD    ConfigTableLink
  349.  5Eh    WORD    MLID sharing flags (see below)
  350.  60h    WORD    slot number
  351.  62h    WORD    I/O address 1
  352.  64h    WORD    I/O range 1
  353.  66h    WORD    I/O address 2
  354.  68h    WORD    I/O range 2
  355.  6Ah    DWORD    memory address 1
  356.  6Eh    WORD    memory size 1
  357.  70h    DWORD    memory address 2
  358.  74h    WORD    memory size 2
  359.  76h    BYTE    interrupt line 1
  360.  77h    BYTE    interrupt line 2
  361.  78h    BYTE    DMA line 1
  362.  79h    BYTE    DMA line 2
  363.  
  364. Bitfields for MLID mode flags:
  365.  bit 15    MLID supports Octet Bit Reversal
  366.  bit 14    node address is non-canonical
  367.  bit 13    promiscuous mode is supported
  368.  bit 12-8 reserved
  369.  bit 7    LDataSize field in LookAhead structure supported
  370.  bit 6    raw send supported
  371.  bit 5    MLID needs to be polled by LSL
  372.  bit 4    reserved (0)
  373.  bit 3    multicasting is supported
  374.  bit 2    not currently used by DOS ODI, set to 0.
  375.  bit 1    network card uses DMA.
  376.  bit 0    RealDriverBit, always set to 1.
  377.  
  378. Bitfields for MLID sharing flags:
  379.  bit 8    NIC can share DMA2
  380.  bit 7    NIC can share DMA1
  381.  bit 6    NIC can share IRQ2
  382.  bit 5    NIC can share IRQ1
  383.  bit 4    NIC can share Memory2
  384.  bit 3    NIC can share Memory1
  385.  bit 2    NIC can share IO2
  386.  bit 1    NIC can share IO1
  387.  bit 0    MLID is currently shut down
  388.  
  389. Format of MLID Statistics Table:
  390. Offset    Size    Description
  391.  00h    BYTE    driver statistics table major version
  392.  01h    BYTE    driver statistics table minor version (decimal, 0-99)
  393.  02h    WORD    number of generic counters (typically 13)
  394.  04h    DWORD    "ValidCountersMask" (bit mask, bit 31 is TotalTxCount)
  395.  08h    DWORD    TotalTxCount
  396.  0Ch    DWORD    TotalRxCount
  397.  10h    DWORD    NoECBAvailableCount
  398.  14h    DWORD    TxTooBigCount
  399.  18h    DWORD    TxTooSmallCount
  400.  1ch    DWORD    RxOverflowCount
  401.  20h    DWORD    RxTooBigCount
  402.  24h    DWORD    RxTooSmallCount
  403.  28h    DWORD    TxMiscCount
  404.  2ch    DWORD    RxMiscCount
  405.  30h    DWORD    TxRetryCount
  406.  34h    DWORD    RxChecksumErrorCount
  407.  38h    DWORD    RxMismatchCount
  408.  3Ch    WORD    number of custom counters
  409.  3Eh  N DWORDs    custom counters
  410.       N DWORDs    -> CustomCounterStrN (one per custom counter)
  411.     var    length-prepended and NULL terminated string for Counter 0
  412.     ...
  413.     var    length-prepended and NULL terminated string for Counter N-1
  414.  
  415. Format of bound stack info structure:
  416. Offset    Size    Description
  417.  00h    DWORD    -> protocol stack's short name (counted, NUL-terminated)
  418.  04h    DWORD    -> receive handler
  419.  08h    DWORD    -> control handler
  420.  
  421. Format of stack info structure:
  422. Offset    Size    Description
  423.  00h    DWORD    -> receive handler
  424.  04h    DWORD    -> control handler
  425.  
  426. Format of General Service Control Block:
  427. Offset    Size    Description
  428.  00h    DWORD    -> next GSCB (maintained internally by LSL)
  429.  04h    DWORD    -> entry point for general service handler
  430.  08h    WORD    command code for this general service (8000h-FFFFh)
  431. Note:    the control block must not be altered or deallocated until the general
  432.       service is removed
  433.  
  434. Format of Lookahead structure:
  435. Offset    Size    Description
  436.  00h    DWORD    -> Media header
  437.  04h    DWORD    -> lookahead buffer
  438.  08h    WORD    length of lookahead buffer
  439.  0Ah  6 BYTEs    protocol ID
  440.  10h    WORD    logical board number
  441.  12h    WORD    lookahead size
  442. --------f-2FC000-----------------------------
  443. INT 2F - FN32 32 character filename utilities - INSTALLATION CHECK
  444.     AX = C000h
  445. Return: AL = FFh if installed
  446.        ES:DI -> signature string "FN32 32CHAR TSR"
  447. Program: FN32 is a TSR which supports 32 character filenames under PC/MS-DOS
  448. Note:    the TSR intercepts INT 21 calls and performs filename substitution by
  449.       managing dictionary files in each directory which contains long
  450.       filenames
  451. --------F-2FC000BX444B-----------------------
  452. INT 2F - MTEZ XpressFax Hardware TSR (CLASS2) - INSTALLATION CHECK
  453.     AX = C000h
  454.     BX = 444Bh
  455.     CX = 4A4Eh
  456. Return: AL = status
  457.         00h not installed, OK to install
  458.         FFh installed
  459.         BX = 646Bh
  460.         CX = 6A6Eh
  461. Note:    this TSR will use any free multiplex number from C0h to FFh
  462. SeeAlso: AH=C0h"MTEZ"
  463. --------V-2FC000-----------------------------
  464. INT 2F - AD-DOS - INSTALLATION CHECK
  465.     AX = C000h
  466. Return: AL = FFh if installed
  467.         BX = 4144h ('AD')
  468.         CX = 2D44h ('-D')
  469.         DX = 4F53h ('OS')
  470. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  471.       MS Windows
  472. Note:    AH=C0h is the default multiplex number; if this is already in use,
  473.       After Dark will try successive values up to AH=FFh
  474. SeeAlso: AX=C001h,AX=C003h,AX=C005h,AX=C007h,AX=C009h,AX=C020h
  475. --------V-2FC001ES0000-----------------------
  476. INT 2F - AD-DOS - GET RESIDENT CODE SEGMENT
  477.     AX = C001h
  478.     ES = 0000h
  479. Return: AL = 00h if successful
  480.         ES = AD-DOS TSR Code Segment
  481. SeeAlso: AX=C000h"AD-DOS"
  482. --------V-2FC002-----------------------------
  483. INT 2F - AD-DOS - CHECK FOR NEW INPUT
  484.     AX = C002h
  485. Return: AL = 00h if succesful
  486.         BX = status
  487.         0000h no input since last check
  488.         0001h new input available
  489. Note:    this call also resets the new-input flag
  490. SeeAlso: AX=C000h"AD-DOS",AX=C004h
  491. --------V-2FC003-----------------------------
  492. INT 2F - AD-DOS - SET MINUTES TO WAIT
  493.     AX = C003h
  494.     BX = minutes to wait before blanking screen
  495. Return: AL = 00h if successful
  496. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  497.       MS Windows
  498. Notes:    AH=C0h is the default multiplex number; if this is already in use,
  499.       After Dark will try successive values up to AH=FFh
  500.     this call also resets the delay timer
  501. SeeAlso: AX=C000h"AD-DOS",AX=C004h
  502. --------V-2FC004-----------------------------
  503. INT 2F - AD-DOS - GET MINUTES TO WAIT
  504.     AX = C004h
  505. Return: AL = 00h if succesful
  506.         BX = minutes to wait before blanking screen
  507. SeeAlso: AX=C000h"AD-DOS",AX=C003h
  508. --------V-2FC005-----------------------------
  509. INT 2F - AD-DOS - SET BLANKER STATUS
  510.     AX = C005h
  511.     BX = new state (0000h inactive, 0001h active) (default 0001h)
  512. Return: AL = 00h if successful
  513. SeeAlso: AX=C006h
  514. --------V-2FC006-----------------------------
  515. INT 2F - AD-DOS - GET BLANKER STATUS
  516.     AX = C006h
  517. Return: AL = 00h if successful
  518.         BX = current state of screen blanker (0000h inactive, 0001h active)
  519. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  520.       MS Windows
  521. Note:    AH=C0h is the default multiplex number; if this is already in use,
  522.       After Dark will try successive values up to AH=FFh
  523. SeeAlso: AX=C000h"AD-DOS",AX=C005h
  524. --------V-2FC007-----------------------------
  525. INT 2F - AD-DOS - SET HOT KEY
  526.     AX = C007h
  527.     BX = hot key
  528.     CL = hot key shift status
  529. Return: AL = 00h if successful
  530. SeeAlso: AX=C008h
  531. --------V-2FC008-----------------------------
  532. INT 2F - AD-DOS - GET CURRENT HOT KEY
  533.     AX = C008h
  534. Return: AX = status
  535.         0000h successful
  536.         BX = Hot Key
  537.         CL = Hot Key Shift Status
  538.         0008h otherwise
  539. SeeAlso: AX=C000h"AD-DOS",AX=C007h
  540. --------V-2FC009-----------------------------
  541. INT 2F - AD-DOS - UNBLANK MONITOR
  542.     AX = C009h
  543. Return: AL = 00h if successful
  544. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  545.       MS Windows
  546. Notes:    AH=C0h is the default multiplex number; if this is already in use,
  547.       After Dark will try successive values up to AH=FFh
  548.     this function works by simulating keyboard activity
  549. --------V-2FC00A-----------------------------
  550. INT 2F - AD-DOS - ???
  551.     AX = C00Ah
  552. Return: AX = status
  553.         0000h successful
  554.         BH = ??
  555.         BL = ??
  556.         000Ah failed
  557. --------V-2FC00B-----------------------------
  558. INT 2F - AD-DOS - ???
  559.     AX = C00Bh
  560. Return: AX = status 
  561.         0000h successful
  562.         000Bh failed
  563. --------V-2FC00C-----------------------------
  564. INT 2F - AD-DOS - SET ??? INTERNAL FLAG TO 01h
  565.     AX = C00Ch
  566. Return: AX = status
  567.         0000h successful
  568.         000Ch failed
  569. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  570.       MS Windows
  571. Note:    AH=C0h is the default multiplex number; if this is already in use,
  572.       After Dark will try successive values up to AH=FFh
  573. --------V-2FC00E-----------------------------
  574. INT 2F - AD-DOS - SET PASSWORD STATUS
  575.     AX = C00Eh
  576.     BX = new state (0000h disabled, 0001h enabled)
  577. Return: ???
  578. SeeAlso: AX=C000h"AD-DOS",AX=C00Fh
  579. --------V-2FC00F-----------------------------
  580. INT 2F - AD-DOS - GET PASSWORD STATUS
  581.     AX = C00Fh
  582. Return: BX = current state (0000h disabled, 0001h enabled)
  583. SeeAlso: AX=C00Eh
  584. --------V-2FC020-----------------------------
  585. INT 2F - AD-DOS - GET AND RESET VxD API STATUS
  586.     AX = C020h
  587. Return: AL = 00h if successful
  588.         BX = VxD API Status
  589.         0000h no error
  590.         0001h error
  591.         0100h neither Windows 3.X enhanced mode nor
  592.             Windows/386 2.x is running
  593.         0200h VM API entry point not found (VxD not installed)
  594. Notes:    AH=C0h is the default multiplex number; if this is already in use,
  595.       After Dark will try successive values up to AH=FFh
  596.     this call resets the VxD API Status to zero
  597. SeeAlso: AX=1602h,AX=1607h
  598. --------V-2FC050-----------------------------
  599. INT 2F U - Explosiv 2.00 - INSTALLATION CHECK
  600.     AX = C050h
  601. Return: AL = 51h if installed
  602. Program: Explosiv is a shareware animated screen blanker for DOS and Windows 3
  603.       by Reidar Gresseth and Chris Hook
  604. Note:    AH=C0h is the default multiplex number, but may be reconfigured to
  605.       any value from C0h to C9h
  606. SeeAlso: AX=C052h
  607. --------V-2FC052-----------------------------
  608. INT 2F U - Explosiv 2.00 - UNINSTALL
  609.     AX = C052h
  610.     DX:BX = address to return to on successful uninstall
  611. Return: at specified address if successful
  612.     AL = 53h on error
  613. Note:    specified return address must have the segment of the caller's PSP
  614. SeeAlso: AX=C050h
  615. --------V-2FC054-----------------------------
  616. INT 2F U - Explosiv 2.00 - GET ???
  617.     AX = C054h
  618. Return: AL = ???
  619. Note:    returns value set by AX=C057h
  620. SeeAlso: AX=C057h
  621. --------V-2FC055-----------------------------
  622. INT 2F U - Explosiv 2.00 - SET BLANKING INTERVAL
  623.     AX = C055h
  624.     BX = new interval in clock ticks
  625. --------V-2FC056-----------------------------
  626. INT 2F U - Explosiv 2.00 - SET ???
  627.     AX = C056h
  628.     BL = ???
  629. --------V-2FC057-----------------------------
  630. INT 2F U - Explosiv 2.00 - SET ???
  631.     AX = C057h
  632.     BL = ???
  633. SeeAlso: AX=C054h
  634. --------V-2FC058-----------------------------
  635. INT 2F U - Explosiv 2.00 - SET ???
  636.     AX = C058h
  637.     BL = ???
  638. --------V-2FC059-----------------------------
  639. INT 2F U - Explosiv 2.00 - CLEAR ???
  640.     AX = C059h
  641. Note:    clears flag set by AX=C05Ah
  642. SeeAlso: AX=C05Ah
  643. --------V-2FC05A-----------------------------
  644. INT 2F U - Explosiv 2.00 - SET ???
  645.     AX = C05Ah
  646.     BL = ???
  647. Note:    sets flag cleared by AX=C059h then stores BL
  648. SeeAlso: AX=C059h,AX=C05Bh
  649. --------V-2FC05B-----------------------------
  650. INT 2F U - Explosiv 2.00 - SET ???
  651.     AX = C05Bh
  652.     BL = ???
  653. SeeAlso: AX=C05Ah,AX=C05Ch
  654. --------V-2FC05C-----------------------------
  655. INT 2F U - Explosiv 2.00 - SET ???
  656.     AX = C05Ch
  657.     BL = ???
  658. SeeAlso: AX=C05Bh
  659. --------v-2FC900BP0000-----------------------
  660. INT 2F U - ThunderByte??? - INSTALLATION CHECK
  661.     AX = C900h
  662.     BP = 0000h
  663. Return: AL = FFh if installed
  664.         BP >= 0014h
  665. Note:    called by TBSCANX
  666. SeeAlso: AX=C987h,AX=CA00h
  667. --------v-2FC987-----------------------------
  668. INT 2F U - ThunderByte??? - DISINFECT FILE???
  669.     AX = C987h
  670.     BX:DX -> filename
  671.     BX:CX -> virus name
  672. Return: AX = status
  673.         0000h successful???
  674. Note:    called by TBSCANX
  675. SeeAlso: AX=CA00h
  676. ----------2FC9FF-----------------------------
  677. INT 2F C - STACKMAN - INSTALLATION BROADCAST
  678.     AX = C9FFh
  679.     BL = BCD version number
  680.     CX = number of stacks
  681.     DX = stack size in bytes
  682. Notes:    called by STACKMAN when it goes resident to inform interested TSRs that
  683.       its API is available
  684.     the installation check consists of testing for the string "STACKXXX" at
  685.       offset 0Ah from the INT B4 handler
  686. SeeAlso: INT B4"STACKMAN",INT B5"STACKMAN"
  687. Index:    installation check;STACKMAN
  688. --------v-2FCA00BX5442-----------------------
  689. INT 2F - TBSCANX - INSTALLATION CHECK
  690.     AX = CA00h
  691.     BX = 5442h ('TB')
  692. Return:    AL = 00h not installed
  693.        = FFh installed
  694.         BX = 7462h ('tb') if BX was 5442h on entry
  695. Program: TBSCANX is a resident virus scanning module by Frans Veldman.
  696. Note:    programs may perform virus checks on themselves, other program files,
  697.       or their data files by invoking the TBSCANX API.
  698. SeeAlso: AX=4653h,AX=C900h
  699. --------v-2FCA01-----------------------------
  700. INT 2F - TBSCANX - GET STATUS
  701.     AX = CA01h
  702. Return: AH = BCD version number (v2.2+)
  703.        = CAh for versions before 2.2
  704.     AL = state (00h = disabled, 01h = enabled)
  705.     CX = number of signatures which will be searched
  706. ---v2.0---
  707.     BX = EMS handle, 0000h if not using EMS
  708. ---v2.3+---
  709.     BX = segment of swap area, 0000h if not swapped
  710.     DX = EMS or XMS handle (XMS handle if BX=0000h), FFFFh if not using EMS
  711. SeeAlso: AX=CA02h
  712. --------v-2FCA02-----------------------------
  713. INT 2F - TBSCANX - SET STATE
  714.     AX = CA02h
  715.     BL = new state (00h = disabled, 01h = enabled)
  716. SeeAlso: AX=CA01h
  717. --------v-2FCA03-----------------------------
  718. INT 2F - TBSCANX - SCAN BUFFER
  719.     AX = CA03h
  720.     CX = size of buffer
  721.     DS:DX -> buffer containing data to scan
  722. Return: CF clear if no virus signatures found
  723.         BX,ES destroyed
  724.     CF set if signature found
  725.         ES:BX -> ASCIZ virus name (v2.3+)
  726.         DS:DX -> ASCIZ virus name (v2.0)
  727.     AX,CX,DX destroyed (v2.3+)
  728.     all other registers except CS:IP and SS:SP destroyed (v2.0)
  729. SeeAlso: AX=CA04h
  730. --------v-2FCA04-----------------------------
  731. INT 2F - TBSCANX - SCAN FILE
  732.     AX = CA04h
  733.     DS:DX -> filename
  734. Return: CF clear if no virus signatures found
  735.         BX,ES destroyed
  736.     CF set if signature found
  737.         ES:BX -> ASCIZ virus name
  738.     AX,CX,DX destroyed
  739. Note:    this function requires at least 4K free memory
  740. SeeAlso: AX=CA03h
  741. --------U-2FCAFEBX0000-----------------------
  742. INT 2F U - THELP v3.0 - INSTALLATION CHECK
  743.     AX = CAFEh
  744.     BX = 0000h
  745. Return: BX = segment of resident code if installed
  746.        = 0000h if not installed
  747. SeeAlso: AX=5453h
  748. --------F-2FCB00-----------------------------
  749. INT 2F - Communicating Applications Specification - INSTALLATION CHECK
  750.     AX = CB00h
  751. Return: AL = status
  752.         00h not installed, OK to install
  753.         01h not installed, not OK to install
  754.         FFh installed
  755. Note:    AH = CBh is the default identifier, but may be reconfigured
  756. SeeAlso: AH=2Ah,AX=8000h"FaxBIOS",AX=CB0Eh,AX=CBDCh
  757. --------F-2FCB00BX4D53-----------------------
  758. INT 2F - MTEZ XpressFax CASMGR - INSTALLATION CHECK
  759.     AX = CB00h
  760.     BX = 4D53h
  761.     CX = 4949h
  762. Return: AL = status
  763.         00h not installed, OK to install
  764.         01h not installed, not OK to install
  765.         FFh installed
  766.         BX = 6D73h
  767.         CX = 6969h
  768. Note:    this function is equivalent to the standard CASMGR installation check,
  769.       but uses the additional magic values to identify which CAS is
  770.       installed
  771. SeeAlso: AH=2Ah,AX=8000h"FaxBIOS",AX=C000h"MTEZ",AX=CB0Eh,AX=CB16h
  772. --------F-2FCB01-----------------------------
  773. INT 2F - Communicating Applications Specification - SUBMIT A TASK
  774.     AX = CB01h
  775.     DS:DX -> ASCIZ name of task control file
  776. Return: AX >= 0: event handle
  777.        < 0: error code
  778. Note:    files needed for an event must be kept until task is complete or error
  779. SeeAlso: AX=CB0Bh,AX=CB15h
  780.  
  781. Error codes (AH = class, AL = subcode, value passed back is 2's complement):
  782.   Class 00h    --- FAX warnings
  783.     Subcode 00h    no error
  784.         02h    bad scanline count
  785.         03h    page sent with errors, could not retransmit
  786.         04h    received data lost
  787.         05h    invalid or missing logo file
  788.         06h    filename does not match nonstandard format (NSF) header
  789.         07h    file size does not match NSF header
  790.   Class 01h    --- DOS warnings (data was sent)
  791.     Subcode 01h    invalid function
  792.         05h    access denied
  793.         06h    invalid handle
  794.         others    see INT 21/AH=59h
  795.   Class 02h    --- fatal errors (data not sent)
  796.     Subcode    00h    multiplex handler failed
  797.         01h    unknown command
  798.         02h    bad event handle
  799.         03h    FIND NEXT attempted before FIND FIRST
  800.         04h    no more events
  801.         07h    invalid queue type
  802.         08h    bad control file
  803.         09h    communication board busy
  804.         0Ah    invalid command parameter
  805.         0Bh    can't uninstall resident code
  806.         0Ch    file exists
  807.         80h    unknown task type
  808.         81h    bad phone number
  809.         82h    bad .PCX file header
  810.         83h    unexpected EOF
  811.         84h    unexpected disconnect
  812.         85h    too many dialing retries
  813.         86h    no file specified for send
  814.         87h    communication board timeout
  815.         88h    received too many pages (>1023) of data
  816.         89h    manual connect initiated too long ago
  817.         8Ah    hardware command set error
  818.         8Bh    bad NonStandard Format (NSF) header file
  819.   Class 03h    --- fatal DOS errors
  820.     Subcode 02h    file not found
  821.         03h    path not found
  822.         others    see INT 21/AH=59h
  823.   Class 04h    --- FAX errors
  824.     Subcode 01h    remote unit not Group 3 compatible
  825.         02h    remote unit did not send capabilities
  826.         03h    other FAX machine incompatible
  827.         04h    other FAX incapable of file transfers
  828.         05h    exceeded retrain or FAX resend limit
  829.         06h    line noise or failure to agree on bit rate
  830.         07h    remote disconnected after receiving data
  831.         08h    no response from remote after sending data
  832.         09h    remote's capabilities incompatible
  833.         0Ah    no dial tone (v1.2+)
  834.         0Bh    invalid response from remote unit after sending data
  835.         0Dh    phone line dead or remote unit disconnected
  836.         0Eh    timeout while waiting for secondary dial tone (v1.2+)
  837.         11h    invalid command from remote after receiving data
  838.         15h    tried to receive from incompatible hardware
  839.         5Ch    received data overflowed input buffer
  840.         5Dh    remote unexpectedly stopped sending data
  841.         5Eh    other FAX machine jammed (no data sent)
  842.         5Fh    remote took too long to send fax scan line
  843.         63h    can't get through to remote unit
  844.         64h    user canceled event
  845.   Class 05h    --- application-specific (v1.2+)
  846.   ---Intel FAXPOP.EXE
  847.     Subcode 00h    tried to send while in graphics mode
  848.         01h    insufficient disk space
  849.         02h    internal buffer overflow
  850.   Class 06h    --- CAS implementation-specific (v1.2+)
  851. --------F-2FCB02-----------------------------
  852. INT 2F - Communicating Applications Specification - ABORT CURRENT EVENT
  853.     AX = CB02h
  854. Return: AX >= 0: event handle of aborted event
  855.        < 0: error code (see AX=CB01h)
  856. Note:    termination could take up to 30 seconds
  857. SeeAlso: AX=CB08h,AX=CB10h
  858. --------F-2FCB05-----------------------------
  859. INT 2F - Communicating Applications Specification - FIND FIRST QUEUE ENTRY
  860.     AX = CB05h
  861.     CX = status of events to find
  862.         0000h successful completion
  863.         0001h waiting to be processed
  864.         0002h number has been dialed
  865.         0003h connection established, sending
  866.         0004h connection established, receiving
  867.         0005h event aborted
  868.         FFFFh find any event, regardless of status
  869.         other negative values, match error code
  870.     DH = direction
  871.         00h chronological order, earliest to latest
  872.         01h reverse chronological order, latest to earliest
  873.     DL = queue to search
  874.         00h task queue
  875.         01h receive queue
  876.         02h log queue
  877. Return: AX = 0000h successful
  878.         BX = event handle for found event
  879.        < 0       error code (see AX=CB01h)
  880. SeeAlso: AX=CB06h,AX=CB07h
  881. --------F-2FCB06-----------------------------
  882. INT 2F - Communicating Applications Specification - FIND NEXT QUEUE ENTRY
  883.     AX = CB06h
  884.     DL = queue to search
  885.         00h task queue
  886.         01h receive queue
  887.         02h log queue
  888. Return: AX = 0000h successful
  889.         BX = event handle for found event
  890.        < 0       error code (see AX=CB01h)
  891. Note:    direction of search is same as preceding FIND FIRST call
  892. SeeAlso: AX=CB05h
  893. --------F-2FCB07-----------------------------
  894. INT 2F - Communicating Applications Specification - OPEN FILE
  895.     AX = CB07h
  896.     BX = event handle from find (AL=05h,06h) or submit task (AL=01h)
  897.     CX = receive file number (ignored for task queue and log queue)
  898.         0000h  open receive control file
  899.         N       open Nth received data file
  900.     DL = queue
  901.         00h task queue
  902.         01h receive queue control file or received file, as given by CX
  903.         02h log queue
  904.         03h group file in task queue (v1.2+)
  905.         04h group file in log queue (v1.2+)
  906. Return: AX = 0000h successful
  907.         BX = DOS file handle for requested file
  908.        < 0       error code (see AX=CB01h)
  909. Note:    the returned file handle has been opened in read-only mode and should
  910.       be closed with INT 21/AH=3Eh after use
  911. SeeAlso: AX=CB01h,AX=CB05h,AX=CB14h
  912. --------F-2FCB08-----------------------------
  913. INT 2F - Communicating Applications Specification - DELETE FILE
  914.     AX = CB08h
  915.     BX = event handle
  916.     CX = receive file number
  917.         0000h delete ALL received files and receive control file
  918.         N      delete Nth received file
  919.     DL = queue
  920.         00h delete control file in task queue and corresponding group file
  921.         if it exists
  922.         01h delete file in receive queue, as given by CX
  923.         02h delete control file in log queue (individual deletions not
  924.         recommended, to maintain integrity of log) and corresponding
  925.         group file if it exists
  926. Return: AX = 0000h successful
  927.        < 0       error code (see AX=CB01h)\
  928. SeeAlso: AX=CB02h,AX=CB09h
  929. --------F-2FCB09-----------------------------
  930. INT 2F - Communicating Applications Specification - DELETE ALL FILES IN Q
  931.     AX = CB09h
  932.     DL = queue
  933.         00h delete all control files in task queue, including all group
  934.         files
  935.         01h delete all files in receive queue
  936.         02h delete all control files in log queue, including all group
  937.         files
  938. Return: AX = 0000h successful
  939.        < 0       error code (see AX=CB01h)
  940. SeeAlso: AX=CB08h
  941. --------F-2FCB0A-----------------------------
  942. INT 2F - Communicating Applications Specification - GET EVENT DATE
  943.     AX = CB0Ah
  944.     BX = event handle
  945.     DL = queue
  946.         00h task queue
  947.         01h receive queue
  948.         02h log queue
  949. Return: AX = 0000h successful
  950.         CX = year
  951.         DH = month
  952.         DL = day
  953.        < 0       error code (see AX=CB01h)
  954. SeeAlso: AX=CB0Bh,AX=CB0Ch
  955. --------F-2FCB0B-----------------------------
  956. INT 2F - Communicating Applications Specification - SET TASK DATE
  957.     AX = CB0Bh
  958.     BX = event handle (task event only)
  959.     CX = year
  960.     DH = month
  961.     DL = day
  962. Return: AX = 0000h successful
  963.        < 0       error code (see AX=CB01h)
  964. Note:    setting a task's date and time to before the current date and time
  965.       causes it to execute immediately
  966. SeeAlso: AX=CB01h,AX=CB0Ah,AX=CB0Dh
  967. --------F-2FCB0C-----------------------------
  968. INT 2F - Communicating Applications Specification - GET EVENT TIME
  969.     AX = CB0Ch
  970.     BX = event handle
  971.     DL = queue
  972.         00h task queue
  973.         01h receive queue
  974.         02h log queue
  975. Return: AX = 0000h successful
  976.         CH = hour
  977.         CL = minute
  978.         DH = second
  979.         DL = 00h
  980.        < 0       error code (see AX=CB01h)
  981. SeeAlso: AX=CB0Ah,AX=CB0Dh
  982. --------F-2FCB0D-----------------------------
  983. INT 2F - Communicating Applications Specification - SET TASK TIME
  984.     AX = CB0Dh
  985.     BX = event handle (task events only)
  986.     CH = hour
  987.     CL = minute
  988.     DH = second
  989.     DL unused
  990. Return: AX = 0000h successful
  991.        < 0       error code (see AX=CB01h)
  992. Note:    setting a task's date and time to before the current date and time
  993.       causes it to execute immediately
  994. SeeAlso: AX=CB0Bh,AX=CB0Ch,AX=CB10h
  995. --------F-2FCB0E-----------------------------
  996. INT 2F - Communicating Applications Specification - GET EXTERNAL DATA BLOCK
  997.     AX = CB0Eh
  998.     DS:DX -> 256-byte buffer
  999. Return: AX = 0000h successful
  1000.         buffer filled
  1001.        < 0       error code (see AX=CB01h)
  1002.  
  1003. Format of external data block:
  1004. Offset    Size    Description
  1005.  00h    BYTE    CAS major version
  1006.  01h    BYTE    CAS minor version
  1007.  02h 68 BYTEs    ASCIZ path to directory containing CAS software, ends in slash
  1008.  46h 13 BYTEs    ASCIZ name of current phonebook (in CAS directory)
  1009.  53h 13 BYTEs    ASCIZ name of current logo file (in CAS directory)
  1010.  60h 32 BYTEs    ASCIZ default sender name
  1011.  80h 21 BYTEs    ASCIZ CCITT identification of fax device
  1012.  95h 107 BYTEs    reserved
  1013. --------F-2FCB0F-----------------------------
  1014. INT 2F - Communicating Applications Specification - GET/SET AUTORECEIVE
  1015.     AX = CB0Fh
  1016.     DL = subfunction
  1017.         00h get current autoreceive state
  1018.         01h set autoreceive state
  1019.         DH = number of rings before answer, 00h = never
  1020. Return: AX = 0000h autoreceive disabled
  1021.        = N       number of rings before answer
  1022.        < 0       error code (see AX=CB01h)
  1023. --------F-2FCB10-----------------------------
  1024. INT 2F - Communicating Applications Specification - GET CURRENT EVENT STATUS
  1025.     AX = CB10h
  1026.     DS:DX -> 512-byte buffer
  1027. Return: AX = 0000h successful
  1028.         BX = event handle of current event or negative error code if
  1029.             no current event
  1030.         buffer filled
  1031.        < 0       error code (see AX=CB01h)
  1032. SeeAlso: AX=CB02h,AX=CB0Dh
  1033.  
  1034. Format of status area:
  1035. Offset    Size    Description
  1036.  00h    BYTE    event type
  1037.         00h send
  1038.         01h receive
  1039.         02h polled send
  1040.         03h polled receive
  1041.         04h to 7Fh reserved
  1042.         FFh serious hardware error
  1043.  01h    BYTE    transfer type
  1044.         00h 200x200 dpi, FAX mode
  1045.         01h 100x200 dpi, FAX mode
  1046.         02h file transfer mode
  1047.         03h to 7Fh reserved
  1048.  02h    WORD    event status 
  1049.         0000h completed successfully
  1050.         0001h waiting
  1051.         0002h number dialed
  1052.         0003h connected, sending
  1053.         0004h connected, receiving
  1054.         0005h aborted
  1055.         0006h to 007Fh reserved
  1056.         0080h to 7FFFh application-specific events
  1057.         8000h to FFFFh error codes
  1058.  04h    WORD    event time (packed DOS time format, see INT 21/AX=5700h)
  1059.  06h    WORD    event date (packed DOS date format, see INT 21/AX=5700h)
  1060.  08h    WORD    number of files to transfer, max 7FFFh
  1061.  0Ah    WORD    offset of file transfer record
  1062.  0Ch 47 BYTEs    ASCIZ phone number to call
  1063.  3Bh 64 BYTEs    ASCIZ application-specific tag string
  1064.  7Bh    BYTE    reserved (00h)
  1065.  7Ch    BYTE    connect time, seconds
  1066.  7Dh    BYTE    connect time, minutes
  1067.  7Eh    BYTE    connect time, hours
  1068.  7Fh    DWORD    total number of pages in all files
  1069.  83h    DWORD    pages already transmitted 
  1070.  87h    WORD    number of files already transmitted
  1071.  89h    BYTE    cover page flag
  1072.         00h don't transmit cover page
  1073.         01h transmit cover page
  1074.         02h to 7Fh reserved
  1075.  8Ah    WORD    total number of transmission errors
  1076.  8Ch 78 BYTEs    reserved (zeros)
  1077.  DAh 21 BYTEs    ASCIZ remote FAX's CCITT identification
  1078.  EFH 32 BYTEs    ASCIZ destination name
  1079. 10Fh 32 BYTEs    ASCIZ sender name
  1080. 12Fh 80 BYTEs    filename of PCX logo file (max 1780x800 pixels)
  1081. 17Fh 128 BYTEs    file transfer record for current event (see below)
  1082.  
  1083. Format of file transfer record:
  1084. Offset    Size    Description
  1085.  00h    BYTE    file type (ignored unless FAX)
  1086.         00h ASCII
  1087.         01h PCX
  1088.         02h DCX
  1089.         03h to 7Fh reserved
  1090.  01h    BYTE    text size for ASCII FAX file
  1091.         00h = 80 columns by 66 lines (11 inches)
  1092.         01h = 132 columns by 88 lines (11 inches)
  1093.         02h to 7Fh reserved
  1094.  02h    BYTE    status of file
  1095.         00h untouched
  1096.         01h opened
  1097.         02h moved
  1098.         03h deleted
  1099.         04h not yet received
  1100.         05h to 7Fh reserved
  1101.  03h    DWORD    bytes already transmitted
  1102.  07h    DWORD    file size in bytes
  1103.  0Bh    WORD    pages alread transmitted
  1104.  0Dh    WORD    number of pages in file
  1105.  0Fh 80 BYTEs    ASCIZ filename
  1106.  5Fh    BYTE    1/8 inch page length
  1107.         if page length below set to 01h through 7Fh, this value 
  1108.         specifies additional 1/8 inch increments to page length
  1109.  60h    BYTE    page length
  1110.         00h = 11 inches
  1111.         01h to 7Fh = page length is this number of inches plus value of
  1112.             1/8 inch field above
  1113.         80h to FEh reserved
  1114.         FFh = ASCII pages ending with formfeed
  1115.  61h 31 BYTEs    reserved (zeros)
  1116. --------F-2FCB11-----------------------------
  1117. INT 2F - Communicating Applications Specification - GET QUEUE STATUS
  1118.     AX = CB11h
  1119.     DL = queue to get status of
  1120.         00h task queue
  1121.         01h receive queue
  1122.         02h log queue
  1123.         03h send events (v1.2+)
  1124.         04h receive events (v1.2+)
  1125. Return: AX >= 0     total number of changes made to queue, modulo 32768
  1126.         BX = number of control files currently in queue
  1127.         CX = number of received files (zero for task and log queues)
  1128.     AX < 0    error code (see AX=CB01h)
  1129. SeeAlso: AX=CB12h
  1130. --------F-2FCB11DL03-------------------------
  1131. INT 2F - Communicating Applications Spec v1.2+ - GET NUMBER OF SEND EVENTS
  1132.     AX = CB11h
  1133.     DL = 03h
  1134. Return: AX = number of successful sends since resident manager started
  1135.     BX = number of unsuccessful sends, including warnings
  1136. SeeAlso: AX=CB11h/DL=04h
  1137. --------F-2FCB11DL04-------------------------
  1138. INT 2F - Communicating Applications Spec v1.2+ - GET NUMBER OF RECEIVE EVENTS
  1139.     AX = CB11h
  1140.     DL = 04h
  1141. Return:    AX = number of received file events since resident manager started
  1142.     BX = number of received FAX events
  1143. SeeAlso: AX=CB11h/DL=03h
  1144. --------F-2FCB12-----------------------------
  1145. INT 2F - Communicating Applications Specification - GET HARDWARE STATUS
  1146.     AX = CB12h
  1147.     DS:DX -> 128-byte status buffer
  1148. Return: AX = 0000h successful
  1149.         buffer filled with hardware-dependent status information
  1150.        < 0       error code (see AX=CB01h)
  1151. SeeAlso: AX=CB10h,AX=CB11h
  1152.  
  1153. Format of status buffer for Intel Connection CoProcessor:
  1154. Offset    Size    Description
  1155.  00h    BYTE    bit flags
  1156.         bit 7: hardware busy sending or receiving
  1157.         bit 6: last page of data
  1158.         bit 5: no data on current page
  1159.         bit 4: retransmit request for current page being transmitted
  1160.         bit 3: NSF mode active
  1161.         bits 2-0: reserved
  1162.  01h    BYTE    number of kilobytes of free buffer space
  1163.  02h    BYTE    page buffer status
  1164.         bit 7: Connection CoProcessor has documents to send
  1165.         bits 6-0: number of pages in buffer
  1166.  03h    BYTE    number of retries left for dialing number
  1167.  04h    BYTE    page number to retransmit
  1168.  05h    BYTE    communications status
  1169.         bit 7: originating call
  1170.         bit 6: FAX message to be sent
  1171.         bit 5: on line
  1172.         bit 4: ring detected and receive enabled
  1173.         bit 3: buffer dumped on receive
  1174.         bits 2-0: hardware sequence state
  1175.             000 idle
  1176.             001 dial
  1177.             010 answer
  1178.             011 transmit
  1179.             100 receive
  1180.             101 pre-message
  1181.             110 post-message
  1182.             111 disconnect
  1183.  06h    BYTE    baud rate
  1184.         bit 7: reserved
  1185.         bits 6-4: baud rate
  1186.             000 = 300 baud    (V.21 SDLC or HDLC mode)
  1187.             100 = 2400 baud (V.27 ter)
  1188.             101 = 4800 baud (V.27 ter)
  1189.             110 = 7200 baud (V.29)
  1190.             111 = 9600 baud (V.29)
  1191.         bits 3-0: reserved, should be 0110
  1192.  07h  3 BYTEs    reserved
  1193.  0Ah    BYTE    hardware status
  1194.         bit 7: modem option installed
  1195.         bit 6: Connection CoProcessor has control of DAA (not latched)
  1196.         bit 5: on line (not latched)
  1197.         bit 4: ring detected (not latched)
  1198.         bit 3: data in command buffer (not latched)
  1199.         bit 2: set if using DMA channel 1, clear if using DMA channel 3
  1200.         bit 1: line length compensation bit 1 set (not latched)
  1201.         bit 0: line length compensation bit 0 set (not latched)
  1202.  0Bh    BYTE    switch states
  1203.         bit 7: reserved
  1204.         bit 6: unused
  1205.         bit 5: spare switch open
  1206.         bit 4: FAX ADR1 switch open
  1207.         bit 3: FAX ADR0 switch open
  1208.         bit 2: alternate interrupt switch open
  1209.         bit 1: COM SEL 1 switch open
  1210.         bit 0: COM SEL 0 switch open
  1211.             Note: valid combinations of bits 0-2 are
  1212.                 000  COM2 IRQ3 IObase 2F8h
  1213.                 001  COM1 IRQ4 IObase 3F8h
  1214.                 010  COM4 IRQ3 IObase 2E8h
  1215.                 011  COM3 IRQ4 IObase 3E8h
  1216.                 110  COM4 IRQ2 IObase 2E8h
  1217.                 111  COM3 IRQ5 IObase 3E8h
  1218.  0Ch    BYTE    bit flags
  1219.         bit 7: reserved
  1220.         bit 6: auxiliary relay forced ON
  1221.         bit 5: modem select relay forced ON
  1222.         bit 4: offhook relay forced ON
  1223.         bit 3: 9600 bps enabled
  1224.         bit 2: 7200 bps enabled
  1225.         bit 1: 4800 bps enabled
  1226.         bit 0: 2400 bps enabled
  1227.  0Dh    BYTE    reserved
  1228.  0Eh    WORD    error count (only valid while busy, reset when idle)
  1229.  10h    DWORD    size of nonstandard format (NSF) file in bytes
  1230.  14h    BYTE    'A' if Connection CoProcessor board present
  1231.  15h  9 BYTEs    reserved
  1232.  1Eh 21 BYTEs    ASCIZ CCITT identification
  1233.  33h 77 BYTEs    reserved
  1234.  
  1235. Format of status buffer for Intel SatisFAXtion board:
  1236. Offset    Size    Description
  1237.  00h    BYTE    connection status flags
  1238.         bit 7: busy in T.30 CCITT fax protocol
  1239.         bit 6: data on current page/file (only used for block xfers)
  1240.         bit 5: retransmission of last page requested
  1241.         bit 4: in file transfer mode
  1242.         bit 3: data in buffer
  1243.         bit 2: data buffer dumped on receive
  1244.         bit 1: 200x100 dpi resolution instead of 200x200 dpi
  1245.         bit 0: data modem in use, FAX image modem not available
  1246.  01h    BYTE    board state
  1247.         bit 7: reserved
  1248.         bit 6: handset jack active, data and FAX modems not available
  1249.         bits 5-3: current bit rate
  1250.             000     300 bps (V.21 HDLC)
  1251.             100 2400 bps (V.27 ter)
  1252.             101 4800 bps (V.27 ter)
  1253.             110 7200 bps (V.29)
  1254.             111 9600 bps (V.29)
  1255.         bits 2-0: T.30 CCITT protocol state
  1256.             000 idle
  1257.             001 dialing
  1258.             010 answering
  1259.             011 transmitting
  1260.             100 receiving
  1261.             101 pre-message
  1262.             110 post-message
  1263.             111 disconnect
  1264.  02h    BYTE    number of KB free in buffer
  1265.  03h    BYTE    number of pages or files in buffer
  1266.  04h    BYTE    number of redials remaining on current number
  1267.  05h    BYTE    FAX page number to retransmit
  1268.  06h    BYTE    current page/file in block transfer
  1269.  07h    BYTE    number of rings received (only if auto-answer enabled)
  1270.  08h    WORD    error count
  1271.  0Ah    DWORD    length of file being transferred
  1272.  0Eh  6 BYTEs    reserved
  1273.  14h    BYTE    'B' is SatisFAXtion board present
  1274.  15h 13 BYTEs    ASCIZ transfer agent name
  1275.  22h  5 BYTEs    ASCIZ transfer agent version number
  1276.  27h 13 BYTEs    ASCIZ resident loader name
  1277.  34h  5 BYTEs    ASCIZ resident loader version number
  1278.  39h 21 BYTEs    ASCIZ remote CSID
  1279.  4Eh 13 BYTEs    ASCIZ resident manager name
  1280.  5Bh  5 BYTEs    ASCIZ resident manager version number
  1281.  60h 32 BYTEs    reserved
  1282. Note:    the Intel Connection CoProcessor and SatisFAXtion may be distinguished
  1283.       by examining the byte at offset 14h
  1284. --------F-2FCB13DL00-------------------------
  1285. INT 2F - Communicating Applications Specification - GET DIAGNOSTICS RESULTS
  1286.     AX = CB13h
  1287.     DL = 00h
  1288. Return: AX = 0040h in progress
  1289.        >= 0       passed
  1290.        < 0       hardware-dependent failure code (see below)
  1291. SeeAlso: AX=CB13h/DL=01h
  1292.  
  1293. Intel Connection CoProcessor failure codes:
  1294.  bit 3    9600 bps FAX modem module failed
  1295.  bit 2    SDLC chip failed
  1296.  bit 1    RAM failed
  1297.  bit 0    ROM checksum failed
  1298.  
  1299. Intel SatisFAXtion failure codes:
  1300.  bit 1    2400 bps data modem failed
  1301.  bit 0    9600 bps FAX modem failed
  1302. --------F-2FCB13DL01-------------------------
  1303. INT 2F - Communicating Applications Specification - START DIAGNOSTICS
  1304.     AX = CB13h
  1305.     DL = 01h
  1306. Return: AX = 0000h successfully started
  1307.        < 0       error code (see AX=CB01h)
  1308. SeeAlso: AX=CB13h/DL=00h
  1309. --------F-2FCB14-----------------------------
  1310. INT 2F - Communicating Applications Specification - MOVE RECEIVED FILE
  1311.     AX = CB14h
  1312.     BX = event handle
  1313.     CX = receive file number
  1314.          0001h first received file
  1315.          N       Nth received file
  1316.     DS:DX -> ASCIZ string specifying new name for file (must not exist)
  1317. Return: AX = 0000h successful
  1318.        < 0       error code (see AX=CB01h)
  1319. --------F-2FCB15-----------------------------
  1320. INT 2F - Communicating Applications Specification - SUBMIT FILE TO SEND
  1321.     AX = CB15h
  1322.     DS:DX -> variable-length data area (see below)
  1323. Return: AX >= 0    event handle
  1324.        < 0    error code (see AX=CB01h)
  1325. SeeAlso: AX=CB01h
  1326.  
  1327. Format of data area:
  1328. Offset    Size    Description
  1329.  00h    BYTE    transfer type
  1330.         00h = 200x200 dpi, fax mode
  1331.         01h = 100x200 dpi, fax mode
  1332.         02h = file transfer mode
  1333.         03h to 7Fh reserved
  1334.  01h    BYTE    text size
  1335.         00h = 80 columns
  1336.         01h = 132 columns
  1337.         02h to 7Fh reserved
  1338.  02h    WORD    time to send (DOS packed time format, see INT 21/AX=5700h)
  1339.  04h    WORD    date to send (DOS packed date format, see INT 21/AX=5700h)
  1340.  06h 32 BYTEs    ASCIZ destination name
  1341.  26h 80 BYTEs    ASCIZ name of file to send
  1342.  76h 47 BYTEs    ASCIZ phone number to dial
  1343.  A5h 64 BYTEs    ASCIZ application-specific tag string
  1344.  E5h    BYTE    reserved (00h)
  1345.  E6h    BYTE    cover page
  1346.         00h don't send cover page
  1347.         01h send cover page
  1348.         02h to 7Fh reserved
  1349.  E7h 23 BYTEs    reserved (zeros)
  1350.  FEh variable    ASCIZ string containing text of cover page (if cover page flag
  1351.         set to 01h)
  1352. --------F-2FCB16BX1234-----------------------
  1353. INT 2F - Communicating Applications Spec v1.2+ - UNLOAD RESIDENT MANAGER
  1354.     AX = CB16h
  1355.     BX = 1234h
  1356.     CX = 5678h
  1357.     DX = 9ABCh
  1358. Return: AX = 0000h successful
  1359.        < 0       error code
  1360. Note:    the MTEZ XpressFax CASMGR ignores the values in BX,CX, and DX
  1361. SeeAlso: AX=C000h"MTEZ",AX=CB00h
  1362. --------F-2FCB17-----------------------------
  1363. INT 2F - Communicating Applications Spec v1.2+ - SET COVER PAGE STATUS
  1364.     AX = CB17h
  1365.     BX = event handle
  1366.     CL = cover page status
  1367.         00h not read
  1368.         01h read by user
  1369. Return: AX = 0000h successful
  1370.        < 0       error code
  1371. --------F-2FCB80-----------------------------
  1372. INT 2F - Intel SatisFAXtion CASMGR - ???
  1373.     AX = CB80h
  1374.     ???
  1375. Return: ???
  1376. --------F-2FCB81-----------------------------
  1377. INT 2F - Intel SatisFAXtion CASMGR - ???
  1378.     AX = CB81h
  1379.     ???
  1380. Return: ???
  1381. --------F-2FCB82-----------------------------
  1382. INT 2F - Intel SatisFAXtion CASMGR - ???
  1383.     AX = CB82h
  1384.     ???
  1385. Return: ???
  1386. --------F-2FCBDCBL56-------------------------
  1387. INT 2F - Comwave Microfax Specification - GET STATUS ARRAY
  1388.     AX = CBDCh
  1389.     BL = 56h
  1390.     BH = line number (starts with 1)
  1391.     CX:DX -> 32-byte status buffer or 80 character string
  1392. Return: AX = number of cards installed, or FFFFh on error
  1393. Program: Comwave manufacturers the Microfax line of fax cards which are a high-
  1394.       performance multi-card FAX solution for OEMs.
  1395. Note:    defaults to AH=CBh but can be changed
  1396. SeeAlso: AX=CBDDh,AX=DA00h
  1397. --------F-2FCBDDBL56-------------------------
  1398. INT 2F - Comwave Microfax Specification - COMMAND SUBMISSION
  1399.     AX = CBDDh
  1400.     BL = 56h
  1401.     BH = ?
  1402.     CX:DX -> command to execute
  1403. Return: AX = status
  1404.         0000h success
  1405.         FFFFh on error
  1406. SeeAlso: AH=2Ah,AX=CBDCh,AX=80FBh
  1407. --------c-2FCC--SI5453-----------------------
  1408. INT 2F U - Qualitas Qcache v4.00
  1409.     AH = CCh
  1410.     SI = 5453h or 7473h
  1411.     AL = ???
  1412.     DL = 00h or ???
  1413. Return: SI = 7473h
  1414.     ???
  1415. ----------2FCD00-----------------------------
  1416. INT 2F - Intel Image Processing Interface - INSTALLATION CHECK
  1417.     AX = CD00h
  1418. Return: AL = 00h not installed, OK to install
  1419.          01h not installed, not OK to install
  1420.          FFh installed
  1421. SeeAlso: AX=CD02h"Image"
  1422. --------P-2FCD00-----------------------------
  1423. INT 2F - LaserPort Interface - INSTALLATION CHECK
  1424.     AX = CD00h
  1425. Return: AL = status
  1426.         FFh installed
  1427. SeeAlso: AX=CD0Fh"LaserPort"
  1428. --------U-2FCD00-----------------------------
  1429. INT 2F - SWELL.EXE - INSTALLATION CHECK
  1430.     AX = CD00h
  1431. Return: AX = 00FFh installed
  1432.         BH = major version
  1433.         BL = minor version
  1434. Program: SWELL.EXE is a TSR which swaps programs to disk when they EXEC a child
  1435.       process with INT 21/AH=4Bh
  1436. ----------2FCD01-----------------------------
  1437. INT 2F - Intel Image Processing Interface - SET DEVICE NAME
  1438.     AX = CD01h
  1439.     CX:BX -> ASCIZ character device name ("LPTn", "COMn", "PRN")
  1440. Return: AL = 00h successful
  1441.         CX:BX -> internal character device name
  1442.        = 80h error
  1443. --------U-2FCD01-----------------------------
  1444. INT 2F - SWELL.EXE - SUSPEND ONCE
  1445.     AX = CD01h
  1446. Return: AX = 0000h
  1447. SeeAlso: AX=CD02h"SWELL"
  1448. ----------2FCD02-----------------------------
  1449. INT 2F - Intel Image Processing Interface - GET VERSION NUMBER
  1450.     AX = CD02h
  1451. Return: AL = 00h/01h successful
  1452.         BH = major version number (BCD)
  1453.         BL = minor version number (BCD)
  1454.        = 80h error
  1455. Note:    if return AL = 01h, the IPI supports network redirection
  1456. SeeAlso: AX=CD00h"Image"
  1457. --------U-2FCD02-----------------------------
  1458. INT 2F - SWELL.EXE - SUSPEND
  1459.     AX = CD02h
  1460. Return: AX = 0000h
  1461. SeeAlso: AX=CD03h"SWELL"
  1462. ----------2FCD03-----------------------------
  1463. INT 2F - Intel Image Processing Interface - SELECT SCAN LINE
  1464.     AX = CD03h
  1465.     BX = scan line
  1466.     CX = requested density in dots per inch (300, 600, or 1200)
  1467. Return: AL = 00h succesful
  1468.         CX = density at which scan line was mapped
  1469.         ES:DI -> start of scan line
  1470.     AL = 80h unsuccessful
  1471.        = 81h scan line out of range
  1472.        = 82h unsupported scan line density
  1473.        = 83h out of memory
  1474. SeeAlso: AX=CD04h"Image"
  1475. --------U-2FCD03-----------------------------
  1476. INT 2F - SWELL.EXE - ACTIVATE
  1477.     AX = CD03h
  1478. Return: AX = 0000h
  1479. SeeAlso: AX=CD02h"SWELL"
  1480. ----------2FCD04-----------------------------
  1481. INT 2F - Intel Image Processing Interface - MOVE BITMAP TO SCANLINE
  1482.     AX = CD04h
  1483.     CX:BX -> structure (see below)
  1484. Return: AL = 00h successful
  1485.        = 80h unsuccessful
  1486.        = 81h scan line out of range
  1487.        = 82h unsupported scan line density
  1488.        = 83h out of memory
  1489.        = 84h unrecognized source
  1490.        = 85h initialization error
  1491. SeeAlso: AX=CD03h"Image"
  1492.  
  1493. Format of structure:
  1494. Offset    Size    Description
  1495.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  1496.  02h    DWORD    pointer to image data
  1497.  06h    WORD    scan line on which to place
  1498.  08h    WORD    bit offset from start of scan line at which to place
  1499.  0Ah    WORD    density of bitmap data (300, 600, or 1200 dpi)
  1500.  0Ch    WORD    width in bits of data
  1501.  0Eh    WORD    source logical page number
  1502.  10h    WORD    source handle (only if source in expanded memory)
  1503.  12h    WORD    source offset (only if source in expanded memory)
  1504. --------U-2FCD04-----------------------------
  1505. INT 2F - SWELL.EXE - TURN OFF VERBOSE MODE
  1506.     AX = CD04h
  1507. Return: AX = 0000h
  1508. SeeAlso: AX=CD05h"SWELL"
  1509. ----------2FCD05-----------------------------
  1510. INT 2F - Intel Image Processing Interface - PRINT PAGE
  1511.     AX = CD05h
  1512. Return: AL = 00h successful
  1513.        = 80h unsuccessful
  1514. Note:    page image is retained, so multiple calls will print multiple copies of
  1515.       the page
  1516. SeeAlso: AX=CD06h"Image"
  1517. --------U-2FCD05-----------------------------
  1518. INT 2F - SWELL.EXE - TURN ON VERBOSE MODE
  1519.     AX = CD05h
  1520. Return: AX = 0000h
  1521. SeeAlso: AX=CD04h"SWELL"
  1522. ----------2FCD06-----------------------------
  1523. INT 2F - Intel Image Processing Interface - CLEAR PAGE
  1524.     AX = CD06h
  1525. Return: AL = 00h successful
  1526.        = 80h unsuccessful
  1527. Note:    palette is reset to default
  1528. SeeAlso: AX=CD09h"Image"
  1529. --------U-2FCD06-----------------------------
  1530. INT 2F - SWELL.EXE - UNINSTALL
  1531.     AX = CD06h
  1532. Return: AX = 0000h uninstalled
  1533.        = 8002h programs still swapped, not uninstalled
  1534. ----------2FCD07-----------------------------
  1535. INT 2F - Intel Image Processing Interface - reserved
  1536.     AX = CD07h
  1537. --------U-2FCD07-----------------------------
  1538. INT 2F - SWELL.EXE - GET INFO
  1539.     AX = CD07h
  1540.     ES:BX -> 32-byte buffer for info
  1541. Return: AX = 0000h successful
  1542.         ES:BX buffer filled
  1543.        = 8001h buffer wrong size
  1544.  
  1545. Format of info buffer:
  1546. Offset    Size    Description
  1547.  00h    WORD    20h  (total size of buffer)
  1548.  02h    BYTE    suspend-once mode active if nonzero
  1549.  03h    BYTE    00h active, 01h suspended
  1550.  04h    BYTE    00h quiet, 01h verbose
  1551.  05h    BYTE    "Borland support" (allowing INT 21/AX=4B01h) on if nonzero
  1552.  06h 26 BYTEs    unused???
  1553. ----------2FCD08-----------------------------
  1554. INT 2F - Intel Image Processing Interface - SCREEN IMAGE
  1555.     AX = CD08h
  1556.     CX:BX -> structure (see below)
  1557. Return: AL = 00h successful
  1558.        = 80h unsuccessful
  1559.        = 81h scan line out of range
  1560.        = 82h unsupported scan line density
  1561.        = 83h out of memory
  1562.        = 84h unrecognized source
  1563.        = 85h initialization error
  1564. SeeAlso: AX=CD05h"Image",AX=CD09h"Image"
  1565.  
  1566. Format of structure:
  1567. Offset    Size    Description
  1568.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  1569.  02h    DWORD    pointer to image data
  1570.  06h    WORD    horizontal position on paper of left edge (in 1200 dpi units)
  1571.  08h    WORD    vertical position on paper of top edge (in 1200 dpi units)
  1572.  0Ah    WORD    left cropping (currently must be zero)
  1573.  0Ch    WORD    top cropping (currently must be zero)
  1574.  0Eh    WORD    width (currently must be 8000h)
  1575.  10h    WORD    height (currently must be 8000h)
  1576.  12h    WORD    horizontal size of image in 1200 dpi units
  1577.  14h    WORD    vertical size of image in 1200 dpi units
  1578.  16h    WORD    aspect ratio (currently reserved)
  1579.  18h    WORD    initialization flag (if 01h, initialization is performed)
  1580.  1Ah    WORD    pixels per line of source data
  1581.  1Ch    WORD    number of scan lines in source data
  1582.  1Eh    WORD    number of scan lines in packet
  1583.  20h    WORD    bits per pixel (1,2,4,6, or 8)
  1584.  22h    WORD    pixels per byte (1,2,4, or 8)
  1585.  24h    WORD    compression type (currently only 00h [uncompressed] supported)
  1586.  26h    WORD    source page number (if in expanded memory)
  1587.  28h    WORD    source handle (if in expanded memory)
  1588.  2Ah    WORD    source offset (if in expanded memory)
  1589. --------U-2FCD08-----------------------------
  1590. INT 2F - SWELL.EXE - UNUSED
  1591.     AX = CD08h
  1592. Return: AX = FFFFh (error)
  1593. ----------2FCD09-----------------------------
  1594. INT 2F - Intel Image Processing Interface - LOAD SCREEN
  1595.     AX = CD09h
  1596.     CX:BX -> structure (see below)
  1597. Return: AL = 00h successful
  1598.        = 80h unsuccessful
  1599. SeeAlso: AX=CD06h"Image Processing",AX=CD0Ah"Image Processing"
  1600.  
  1601. Format of structure:
  1602. Offset    Size    Description
  1603.  00h    BYTE    style
  1604.         44h ('D') diamond style
  1605.         4Ch ('L') line style
  1606.  01h    BYTE    reserved (00h)
  1607.  02h    WORD    frequency in lines per inch [sic]
  1608.         currently, coerced to nearest of 50, 60, 68, 70, 75, 85, or 100
  1609.  04h    WORD    screen angle in degrees (-360 to 360)
  1610.         currently coerced to nearest of -45, 0, 45, or 90
  1611. --------U-2FCD09-----------------------------
  1612. INT 2F - SWELL.EXE - TURN OFF "BORLAND SUPPORT"
  1613.     AX = CD09h
  1614. Return: AX = 0000h
  1615. SeeAlso: AX=CD0Ah"SWELL"
  1616. ----------2FCD0A-----------------------------
  1617. INT 2F - Intel Image Processing Interface - LOAD PALETTE
  1618.     AX = CD0Ah
  1619.     CX:BX -> palette structure (see below)
  1620. Return: AL = 00h successful
  1621.        = 80h unsuccessful
  1622. SeeAlso: AX=CD09h"Image Processing"
  1623.  
  1624. Format of palette structure:
  1625. Offset    Size    Description
  1626.  00h    BYTE    bits per pixel for which palette is to be used (1,2,4,6, or 8)
  1627.  01h    2**N    palette translation values, one per possible pixel value
  1628. --------U-2FCD0A-----------------------------
  1629. INT 2F - SWELL.EXE - TURN ON "BORLAND SUPPORT"
  1630.     AX = CD0Ah
  1631. Return: AX = 0000h
  1632. SeeAlso: AX=CD09h"SWELL"
  1633. --------P-2FCD0F-----------------------------
  1634. INT 2F - LaserPort Interface - EXECUTE FUNCTION
  1635.     AX = CD0Fh
  1636.     BL = function
  1637.         01h enable
  1638.         02h disable
  1639.         03h ???
  1640. Return: AL = status
  1641.         00h success
  1642. SeeAlso: AX=CD00h"LaserPort"
  1643. --------K-2FCF00-----------------------------
  1644. INT 2F - TEMPLEXX - INSTALLATION CHECK
  1645.     AX = CF00h
  1646. Return: AL = FFh if installed
  1647. Program: TEMPLEXX is a popup keyboard template by Henson Scientific, Inc.
  1648. Note:    values in AL other than 00h cause an immediate return without modifying
  1649.       any registers
  1650. --------G-2FD000-----------------------------
  1651. INT 2F - MDEBUG display driver - GET DRIVER STATUS
  1652.     AX = D000h
  1653. Return: CF set on error
  1654.         all other registers must be unchanged)
  1655.     CF clear if successful
  1656.         AL = FFh
  1657.         AH = driver semaphor
  1658.         00h driver is not active
  1659.         01h driver is active
  1660.         BX = CS of the driver
  1661.         CX = driver version (CH = major, CL = minor, must be >= 013Ch)
  1662.         DL = buffer semaphor
  1663.         00h driver is not pending
  1664.         01h driver is pending between functions 02h and 03h
  1665.         DH = show semaphor
  1666.         00h driver is not pending
  1667.         01h driver is pending between functions 04h and 05h
  1668. Program: MDEBUG is a shareware memory-resident debugging tool by Bernd
  1669.       Schemmer, including a memory monitor, an interpreter and a
  1670.       disassembler
  1671. Notes:    MDEBUG can use any two consecutive multiplex numbers between C0h and
  1672.       FFh; the default is D0h for the display driver and D1h for the
  1673.       command driver (see INT 60/AH=00h"MDEBUG" for the actual multiplex
  1674.       numbers used)
  1675.     this function MUST be reentrant, as MDEBUG calls it after every popup
  1676.       before any other actions.  The handler should not change any
  1677.       registers if the display is in an unsupported mode or in a mode
  1678.       MDEBUG supports itself, e.g. a normal text mode with at least 80x25
  1679.       characters (i.e. 80x43 or 132x44 (v1.60+)). In this case MDEBUG will
  1680.       not call any of the other functions for this popup session.
  1681.     MDEBUG will not call the other functions if the returned version is
  1682.       less than the actual version of MDEBUG.
  1683.     if the driver is reentrant, DL and DH should be 00h
  1684. SeeAlso: AX=D001h,AX=D002h,AX=D003h,AX=D004h,AX=D005h
  1685. --------M-2FD000-----------------------------
  1686. INT 2F - ZWmous - INSTALLATION CHECK
  1687.     AX = D000h
  1688. Return: AX = 5A57h ("ZW") if installed
  1689.         BX = segment of resident code
  1690. Program: ZWmous is a shareware TSR by Zen Wu which permits the use of a mouse
  1691.       with many non-mouse applications by entering the letter under the
  1692.       mouse cursor on button presses
  1693. SeeAlso: INT 33/AX=0003h
  1694. --------N-2FD000-----------------------------
  1695. INT 2F - Lotus CD/Networker - INSTALLATION CHECK
  1696.     AX = D000h
  1697. Return: AL = FF if CD/Networker TSR is loaded
  1698.     BX = 4D44h ("MD") signature
  1699.     CX = Windows mode word (from INT 2F/AX=1600h) at time of TSR load
  1700.     DX = bitmap identifying all loaded CD/Networker TSRs.
  1701. Notes:    INT 2F/AH=D0h is used by CD/Networker to communicate between a
  1702.       resident redirector TSR and a transient program that controls the
  1703.       TSR's CD-ROM drive emulation (volume attachments, caching, etc).
  1704.     At present there is only one CD/Networker TSR; the bitmap always = 4.
  1705. SeeAlso: AX=D002h"Lotus",INT 2F/AX=1500h"CD-ROM"
  1706. --------G-2FD001-----------------------------
  1707. INT 2F - MDEBUG display driver - INITIALIZE DRIVER
  1708.     AX = D001h
  1709. Return: CF set on error
  1710.     AL = driver semaphor
  1711.     AH = buffer semaphor
  1712. Notes:    MDEBUG calls this function after every succesful call of the function
  1713.       00h. The function should reset all internal data and the status of
  1714.       the driver. If this function returns an error, MDEBUG will not call
  1715.       the other functions in this popup session.
  1716.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  1717.       FFh; the default is D0h for the display driver and D1h for the
  1718.       command driver
  1719. SeeAlso: AX=D000h
  1720. --------G-2FD002-----------------------------
  1721. INT 2F - MDEBUG display driver - SAVE GRAPHIC DATA
  1722.     AX = D002h
  1723. Return: CF set on error
  1724.     CF clear if successful
  1725.         display memory saved and display switched to one of the text modes
  1726.           02h, 03h or 07h.
  1727. Note:    MDEBUG calls this function only once every popup session before
  1728.       displaying its windows.
  1729. SeeAlso: AX=D000h,AX=D003h
  1730. --------N-2FD002BX4D44-----------------------
  1731. INT 2F - Multiplex - Lotus CD/Networker GET DATA AREA
  1732.     AX = D002h
  1733.     BX = 4D44h
  1734.     DX = bitmap identifying one loaded CD/Networker TSR
  1735. Return: ES:DI -> data area owned by TSR
  1736. Note:    the format of the data area changes with each minor revision, so it
  1737.       cannot be counted on
  1738. SeeAlso: AX=D000h"Lotus"
  1739. --------G-2FD003-----------------------------
  1740. INT 2F - MDEBUG display driver - RESTORE GRAPHIC DATA
  1741.     AX = D003h
  1742. Return: CF set on error
  1743.     CF clear if successful
  1744.         display restored to the mode it was in before calling AX=D002h and
  1745.           the display memory is restored
  1746. Note:    MDEBUG calls this function only once every popup session just before
  1747.      it exits to normal DOS.
  1748. SeeAlso: AX=D000h,AX=D002h
  1749. --------G-2FD004-----------------------------
  1750. INT 2F - MDEBUG display driver - SHOW SAVED DATA
  1751.     AX = D004h
  1752. Return: CF set on error
  1753.     CF clear if successful
  1754.         display switched to mode it was in before calling AX=D002h and the
  1755.           display memory is restored
  1756. Note:    This function needn't save the display memory before changing it.
  1757. SeeAlso: AX=D000h,AX=D005h
  1758. --------G-2FD005-----------------------------
  1759. INT 2F - MDEBUG display driver - SWITCH BACK TO TEXT SCREEN
  1760.     AX = D005h
  1761. Return: CF set on error
  1762.     CF clear if successful
  1763.         display restored to mode it was in before calling AX=D004h
  1764. Note:    This function needn't save or change the display memory
  1765. SeeAlso: AX=D000h,AX=D004h
  1766. --------G-2FD0-------------------------------
  1767. INT 2F - MDEBUG display driver - RESERVED FUNCTION NUMBERS
  1768.     AH = D0h
  1769.     AL = 06h-7Fh
  1770. Note:    these functions are reserved for future use
  1771. --------G-2FD0-------------------------------
  1772. INT 2F - MDEBUG display driver - USER DEFINED FUNCTION NUMBERS
  1773.     AH = D0h
  1774.     AL = 80h-FFh
  1775. Note:    these functions numbers are reserved for user defined features (e.g.
  1776.       communication between the transient und resident parts of the driver)
  1777. --------G-2FD100-----------------------------
  1778. INT 2F C - MDEBUG command driver - GET STATUS
  1779.     AX = D100h
  1780.     BX = version of MDEBUG (BH = major, BL = minor)
  1781.     CX = command driver counter
  1782. ---v1.60+---
  1783.     DS:SI -> MDEBUG identification table (see below)
  1784.     ES = segment of display memory used by MDEBUG
  1785.     DI = size of video mode used by MDEBUG
  1786.         (high byte = lines, low byte = columns)
  1787. Return: DL = FFh
  1788.     BX = version number of the driver if it is less than the version in BX,
  1789.          else unchanged
  1790.     CX incremented
  1791. Program: MDEBUG is a shareware memory-resident debugging tool by Bernd
  1792.       Schemmer, including a memory monitor, an interpreter, and a
  1793.       disassembler
  1794. Notes:    called by MDEBUG at start of popup session; if the version number
  1795.       returned in BX is less than 1.52 (1.60 for MDEBUG v1.70), MDEBUG will
  1796.       not call any of the other functions during this popup session
  1797.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  1798.       FFh; the default is D0h for the display driver and D1h for the
  1799.       command driver (see INT 60/AH=00h"MDEBUG" for the multiplex numbers
  1800.       actually used)
  1801.     this function must end with a far call to the old INT 2F handler after
  1802.       changing the registers
  1803.     this function MUST be reentrant
  1804.     command drivers must also declare the following data at the given
  1805.       offsets in the code segment
  1806.         100h  3 BYTEs    JMP-command in .COM-files
  1807.         103h    BYTE    NOP-command (90h)
  1808.         104h 26 BYTEs    signature "Kommandotreiber für MDEBUG"
  1809.         11Eh 12 BYTEs    name of driver, e.g. "MDHISDRV.COM"
  1810.                 each driver must have a unique name
  1811.     MDEBUG will pass every key and command to the command driver(s) before
  1812.       checking for a valid internal command
  1813. SeeAlso: AX=D000h,AX=D101h
  1814.  
  1815. Format of MDEBUG identification table:
  1816. Offset    Size    Description
  1817.  -2    WORD    entry offset
  1818.  00h    WORD    CS of MDEBUG
  1819.  02h    DWORD    old INT 08h vector
  1820.  06h    DWORD    old INT 09h vector
  1821.  0Ah    DWORD    address INT 16h routine used by MDEBUG
  1822.  0Eh    BYTE    length of version string
  1823.  0Fh  N BYTEs    version string
  1824. --------G-2FD101-----------------------------
  1825. INT 2F - MDEBUG command driver - INITIALIZE DRIVER
  1826.     AX = D101h
  1827.     CX = command driver counter
  1828. Return: DL = FFh if successful
  1829.         CX incremented
  1830.          else error: all registers unchanged
  1831. Note:    this function must end with a  far call to the old INT 2F handler after
  1832.       changing the registers
  1833.     this function must be reentrant
  1834. --------G-2FD102-----------------------------
  1835. INT 2F - MDEBUG command driver - EXECUTE INTERPRETER COMMAND
  1836.     AX = D102h
  1837.     BL = first character of the interpreter command
  1838.     BH = last character of the interpreter command (or blank)
  1839.     DS:SI -> parameter for the interpreter command as ASCIZ string
  1840.     DS:DI -> MDEBUG data structure (see below)
  1841. Return: AL = FFh
  1842.     CF set on error
  1843.         AH = error number
  1844.         01h syntax error
  1845.         02h first shell of the command.com is activ
  1846.         03h esc pressed
  1847.         04h break pressed
  1848.         05h DOS is busy
  1849.         06h command ended
  1850.         07h division by zero
  1851.         08h invalid display driver
  1852.         09h invalid command driver
  1853.         0Ah error 8 and 9
  1854.         0Bh unknown error
  1855.         0Ch new error
  1856.             DS:SI -> ASCIZ error message (max 30 characters)
  1857.            else unknown error
  1858.     CF clear if successful
  1859.         AH = return code
  1860.         00h continue processing the command line
  1861.         01h leave MDEBUG popup session
  1862.         02h leave MDEBUG popup session and automatically popup again
  1863.             if the InDOS flag is zero
  1864.         03h not used (same as 00h)
  1865.         04h not used (same as 00h)
  1866.         05h put new command line into the input buffer,
  1867.             DS:SI -> new command line (ASCIZ string, max 66 chars)
  1868.         06h process new command line
  1869.             DS:SI -> new command line (ASCIZ string, max 66 chars)
  1870.            else unknown status, but continue processing commmand line
  1871. Note:    this function must end with a far call to the old INT 2F handler (with
  1872.       registers unchanged) if the driver does not support the interpreter
  1873.       command in BX.  Otherwise, the driver must not chain to the old
  1874.       INT 2F.
  1875.  
  1876. Format of MDEBUG data structure:
  1877. Offset    Size    Description
  1878.  00h    WORD    register SE
  1879.  02h    WORD    register OF
  1880.  04h    WORD    register FS
  1881.  06h    WORD    register FO
  1882.  08h    WORD    register AX
  1883.  0Ah    WORD    register BX
  1884.  0Ch    WORD    register CX
  1885.  0Eh    WORD    register DX
  1886.  10h    WORD    register SI
  1887.  12h    WORD    register DI
  1888.  14h    WORD    register DS
  1889.  16h    WORD    register ES
  1890.  18h    WORD    register BP
  1891.  1Ah    WORD    register SS
  1892.  1Ch    WORD    register SP
  1893.  1Eh    WORD    register FL (flags)
  1894.  20h    WORD    register R0
  1895.  22h    WORD    register R1
  1896.  24h    WORD    register R2
  1897.  26h    WORD    register R3
  1898.  28h    WORD    register R4
  1899.  2Ah    WORD    register R5
  1900.  2Ch    WORD    register R6
  1901.  2Eh    WORD    register R7
  1902.  30h    WORD    register R8
  1903.  32h    WORD    register CS, return-address
  1904.  34h    WORD    register IP, return-address
  1905.  36h    DWORD    saved pointer to data for key <F6> (v1.60)
  1906.         saved monitor address (v1.70)
  1907.  3Ah 12 WORDs    saved register values on last popup entry (for <F8> key)
  1908.         (original register values at popup entry of MDEBUG)
  1909.         AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags
  1910.  52h 12 WORDs    saved register values on last popup exit (for <SHIFT-F8> key)
  1911.         AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags
  1912.  6Ah    DWORD    address of the DOS-invars-table
  1913.  6Eh    DWORD    address of the InDOS flag
  1914.  72h    WORD    offset of the register which is used for the segment of the
  1915.         first monitor window
  1916.  74h    WORD    offset of the register which is used for the offset of the
  1917.         first monitor window
  1918.  76h    WORD    name of the register which is used for the segment of the
  1919.         first monitor segment
  1920.  78h    WORD    name of the register which is used for the offset of the first
  1921.         monitor window     
  1922.  7Ah    WORD    pseudo register 1
  1923.  7Ch    WORD    pseudo register 2
  1924. --------G-2FD103-----------------------------
  1925. INT 2F - MDEBUG command driver - EXECUTE KEY IN THE MONITOR
  1926.     AX = D103h
  1927.     BX = key code (like result of an interrupt 16h call)
  1928.     CX = 0 -> the cursor is in the ASCII column of the monitor
  1929.     CX = 1 -> the cursor is in one of the hex fields of the monitor
  1930.     DS:SI -> MDEBUG data structure (see AX=D102h)
  1931.     ES:DI -> actual byte in the monitor
  1932. Return: AL = FFh
  1933.     AH = return code
  1934.         00h key processed, read next key
  1935.         01h leave MDEBUG popup session
  1936.         02h leave MDEBUG popup session and automatically popup again if DOS
  1937.         is not busy
  1938.         03h signal an error (beep)
  1939.         04h driver has redefined the key, proceed with the new key
  1940.         BX = new key code
  1941.         MDEBUG will not pass the new key to the command driver(s)
  1942.        else treat like code 00h
  1943. Note:    this function must end with a far call to the old INT 2F handler (with
  1944.       registers unchanged) if the driver does not support the key in BX.
  1945.       Otherwise, the driver must not chain to the old INT 2F.
  1946. SeeAlso: AX=D104h
  1947. --------G-2FD104-----------------------------
  1948. INT 2F - MDEBUG command driver - EXECUTE KEY IN THE INTERPRETER
  1949.     AX = D104h
  1950.     DS:SI -> MDEBUG data structure (see AX=D102h)
  1951. Return: AL = FFh
  1952.     AH = return code
  1953.         00h key processed, read next key
  1954.         01h leave MDEBUG popup session
  1955.         02h leave MDEBUG popup session and automactically popup again if
  1956.         DOS is not busy
  1957.         03h signal an error (beep)
  1958.         04h driver has redefined the key, proceed with the new key
  1959.         BX = new key code
  1960.         MDEBUG won't pass the new key to the command driver(s)
  1961.         05h put new command line into the input buffer
  1962.         DS:SI -> new command line (ASCIZ string, max 66 chars)
  1963.         06h process new command line
  1964.         DS:SI -> new command line (ASCIZ string, max 66 chars)
  1965.        else treat like code 00h
  1966. Note:    this function must end with a far call to the old INT 2F handler if the
  1967.       driver does not support the key in BX.  Otherwise, the driver must
  1968.       not chain to the old INT 2F.
  1969. SeeAlso: AX=D103h
  1970. --------G-2FD1-------------------------------
  1971. INT 2F - MDEBUG command driver - RESERVED FUNCTIONS
  1972.     AH = D1h
  1973.     AL = 05h-0Ah
  1974. Note:    these functions are reserved for future use
  1975. --------G-2FD110-----------------------------
  1976. INT 2F - MDEBUG command driver - GET ADDRESS OF THE OLD INT 2F
  1977.     AX = D110h
  1978. Return: DL = FFh
  1979.     ES:BX -> next program in the chain for INT 2F
  1980.     CX = code segment of this driver
  1981.     DI = offset of driver identification table (see below) (v1.60+)
  1982. Notes:    only called by the transient part of the driver
  1983.     must be reentrant and the driver must not chain this function to the
  1984.       old INT 2F
  1985.  
  1986. Format of the driver identification table:
  1987. Offset    Size    Description
  1988.  00h  26 BYTEs     signature "Kommandotreiber für MDEBUG"
  1989.                          ^- Note: ASCII 129,German U-umlaut
  1990.  27h  12 BYTEs     name of driver, e.g. "MDHISDRV.COM"
  1991.          each driver must have a unique name
  1992. --------G-2FD111-----------------------------
  1993. INT 2F - MDEBUG command driver - START DRIVER
  1994.     AX = D111h
  1995. Return: DL = FFh
  1996. Notes:    only called by the transient part of the driver to inform the resident
  1997.       part that it is installed
  1998.     the function must be reentrant and the driver mustn't chain this
  1999.       function to the old INT 2F
  2000. SeeAlso: AX=D101h,AX=D112h
  2001. --------G-2FD112-----------------------------
  2002. INT 2F - MDEBUG command driver - END DRIVER
  2003.     AX = D112h
  2004. Return: DL = FFh
  2005. Notes:    only called by the transient part of the driver to inform the resident
  2006.       part that it will be released after this function
  2007.     the function must be reentrant and the driver mustn't chain this
  2008.       function to the old INT 2F
  2009. SeeAlso: AX=D101h,AX=D111h
  2010. --------G-2FD1-------------------------------
  2011. INT 2F - MDEBUG command driver - RESERVED FUNCTIONS
  2012.     AH = D1h
  2013.     AL = 13h-7Fh
  2014. Note:    these functions are reserved for future use
  2015. --------G-2FD1-------------------------------
  2016. INT 2F - MDEBUG command driver - USER DEFINED FUNCTIONS
  2017.     AH = D1h
  2018.     AL = 80h-FFh
  2019. Note:    these functions are reserved for user defined features (e.g.
  2020.       communication between the transient und resident parts of the    driver)
  2021. --------Q-2FD200BX5144-----------------------
  2022. INT 2F U - Quarterdeck - QEMM/QRAM/VIDRAM/MANIFEST v5.0+ - INSTALLATION CHECK
  2023.     AX = D200h
  2024.     BX = 5144h ("QD")
  2025.     CX = 4D45h ("ME")
  2026.     DX = 4D30h ("M0")
  2027. Return: AL = FFh installed      
  2028.     if BX,CX,DX registers were as specified on entry:
  2029.         BX = 4D45h ("ME")
  2030.         CX = 4D44h ("MD")
  2031.         DX = 5652h ("VR")
  2032. Notes:    Quarterdeck programs (QEMM/QRAM/VIDRAM/MANIFEST/etc) will search for a
  2033.       free AH value from D2h through FFh, then C0h through D1h
  2034.     for AL <> 0, if the BX/CX/DX values don't match a the identifier of a
  2035.       Quarterdeck product, it just chains to the previous INT 2F handler
  2036. --------m-2FD201BX4849-----------------------
  2037. INT 2F U - Quarterdeck - GET QD HIMEM PRESENCE
  2038.     AX = D201h
  2039.     BX = 4849h ("HI")
  2040.     CX = 4D45h ("ME")
  2041.     DX = 4D51h ("MQ")
  2042. Return: BX = 4F4Bh ("OK")
  2043.     ES:DI -> HIMEM entry point
  2044. Notes:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  2045.       through FFh, then C0h through D1h
  2046. SeeAlso: AX=D200h,AX=D201h/BX=5145h
  2047. --------m-2FD201BX4849-----------------------
  2048. INT 2F U - Quarterdeck - QEMM/QRAM v5.0+ - GET HIRAM MEMORY CHAIN
  2049.     AX = D201h
  2050.     BX = 4849h ("HI")
  2051.     CX = 5241h ("RA")
  2052.     DX = 4D30h ("M0")
  2053. Return: BX = 4F4Bh ("OK")
  2054.     CX = segment of start of HIRAM chain
  2055.     DX = QEMM/QRAM code segment
  2056. Notes:    Quarterdeck programs (QEMM/QRAM/VIDRAM/MANIFEST/etc) will search for a
  2057.       free AH value from D2h through FFh, then C0h through D1h
  2058.     QEMM and QRAM both responded the same
  2059.     the HIRAM memory chain has the same format as the regular DOS 4.0
  2060.       memory chain (see INT 21/AH=52h), except that XMS Upper Memory Blocks
  2061.       have the block header program name field set to "UMB"; blocks whose
  2062.       "owner" field is set to the QEMM/QRAM code segment returned in DX
  2063.       are locked out regions such as video memory and ROMs.
  2064. SeeAlso: AX=D200h
  2065. --------G-2FD201BX4D41-----------------------
  2066. INT 2F U - Quarterdeck - MANIFEST v1.0+ - INSTALLATION CHECK
  2067.     AX = D201h
  2068.     BX = 4D41h ("MA")
  2069.     CX = 4E49h ("NI")
  2070.     DX = 4645h ("FE")
  2071. Return: BX = 5354h ("ST")
  2072. Note:    Quarterdeck programs (QEMM/QRAM/VIDRAM/MANIFEST/etc) will search for a
  2073.       free AH value from D2h through FFh, then C0h through D1h
  2074. SeeAlso: AX=D200h
  2075. --------E-2FD201BX4D45-----------------------
  2076. INT 2F U - Quarterdeck - DVDOS4GX.DVR - ???
  2077.     AX = D201h
  2078.     BX = 4D45h ("ME")
  2079.     CX = 5155h ("QU")
  2080.     DX = 5044h ("PD")
  2081. Return: AL = FFh
  2082.     BX = 4F4Bh ("OK")
  2083. Notes:    AH=D2h is the default; use the Quarterdeck installation check described
  2084.       under AX=D200h
  2085.     called by QEMM 6.03
  2086.     performs a variety of actions before setting return registers
  2087. SeeAlso: AX=D200h
  2088. --------m-2FD201BX5145-----------------------
  2089. INT 2F U - Quarterdeck - QEMM v5.0+ - INSTALLATION CHECK
  2090.     AX = D201h
  2091.     BX = 5145h ("QE")
  2092.     CX = 4D4Dh ("MM")
  2093.     DX = 3432h ("42")
  2094. Return: BX = 4F4Bh ("OK")
  2095.     ES:DI -> QEMM API entry point (see INT 67/AH=3Fh)
  2096. Notes:    Quarterdeck programs (QEMM/QRAM/VIDRAM/MANIFEST/etc) will search for a
  2097.       free AH value from D2h through FFh, then C0h through D1h
  2098.     this call is not available under QEMM v6.00 unless Windows3 support
  2099.       has been disabled with the NW3 switch to QEMM386.SYS
  2100. SeeAlso: AX=D200h,AX=D201h/BX=4849h,INT 67/AH=3Fh
  2101. --------V-2FD201BX5649-----------------------
  2102. INT 2F U - Quarterdeck - VIDRAM v5.0+ - INSTALLATION CHECK
  2103.     AX = D201h
  2104.     BX = 5649h ("VI")
  2105.     CX = 4452h ("DR")
  2106.     DX = 414dh ("AM")
  2107. Return: BX = 4F4Bh ("OK")
  2108.     ES:DI -> VIDRAM entry point
  2109. Note:    Quarterdeck programs (QEMM/QRAM/VIDRAM/MANIFEST/etc) will search for a
  2110.       free AH value from D2h through FFh, then C0h through D1h
  2111. SeeAlso: AX=D200h
  2112.  
  2113. Call VIDRAM entry point with:
  2114.     AH = 00h get status
  2115.         Return: AL = VIDRAM state (see below)
  2116.             BL = extra RAM status
  2117.                 00h VIDRAM does not use extra RAM
  2118.                 01h VIDRAM uses EMS as extra RAM
  2119.                 02h VIDRAM uses EGA as extra RAM
  2120.             BH = feature flags
  2121.                 bit 0: override enabled
  2122.                 bit 1: mapped memory detected in A000h-B000h range
  2123.                 bit 2: top of memory not at 640K
  2124.                 bit 3: MDA detected
  2125.                 bit 4: high RAM exists in video area
  2126.                 bit 5: mapped memory detected in video area
  2127.                 bits 6-7: reserved???
  2128.             CL = current monitor (01h = mono, 80h = color)
  2129.             SI = current top of memory (paragraph)
  2130.             DI = segment of start of HiRAM chain
  2131.     AH = 01h setup
  2132.         AL = VIDRAM state (00h off, 01h no EGA graphics, 02h no graph)
  2133.         BL = extra RAM status (see above)
  2134.         BH = feature flags (see above)
  2135.         CL = monitor (01h = monochrome, 80h = color)
  2136.         SI = new top of memory (paragraph)
  2137.         DI = segment of start of HiRAM chain
  2138.     AH = 02h get end address of VIDRAM code
  2139.         Return: ES:DI -> VIDRAM partial map context (see below)
  2140. Return: CF set on error
  2141.     CF clear if successful
  2142.  
  2143. Format of partial map context (EMS 3.2):
  2144. Offset    Size    Description
  2145.  00h    BYTE    EMS version ID (32h)
  2146.  01h    WORD    EMM handle for this entry
  2147.  03h    BYTE    number of frames
  2148.  04h    BYTE    first page frame
  2149.  05h    WORD    offset from ES to previously saved map
  2150.  
  2151. Format of partial map context (EMS 4.0):
  2152. Offset    Size    Description
  2153.  00h    BYTE    EMS version ID (40h)
  2154.  01h    WORD    mappable segment count
  2155.  03h  N WORD    mappable segments
  2156.     WORD    offset to previously saved map???
  2157. --------R-2FD300BX4562-----------------------
  2158. INT 2F U - TeleReplica - INSTALLATION CHECK
  2159.     AX = D300h
  2160.     BX = 4562h
  2161.     CX = 2745h
  2162.     DX = serial port I/O base address??? (03F8h for v3.9)
  2163. Return: SI = segment of resident code
  2164.     AX = 251Dh
  2165.     BX = DF21h
  2166.     CX = F321h
  2167.     DX = ???
  2168. --------R-2FD3CB-----------------------------
  2169. INT 2F U - LapLink Quick Connect v6 - API
  2170.     AX = D3CBh
  2171.     CX = function
  2172.         0002h get ???
  2173.         Return: BX:AX -> ???
  2174.             CL = ???
  2175.             CH = ???
  2176.             DX = ???
  2177.             DI = COM1 I/O port???
  2178.             SI = COM2 I/O port???
  2179.         0003h initialization???
  2180.         0004h ???
  2181.         0005h initialization???
  2182.         0006h reset/clear ???
  2183.         Return: AX = 0000h
  2184.             ES:DI -> next byte after ??? cleared by this call
  2185.         0007h initialization???
  2186.         0008h uninstall
  2187.         Return: BX = status
  2188.                 0000h successful
  2189.                 FFFFh incomplete, stub remains in memory
  2190. Return: CX = 534Bh (except function 0002h)
  2191. Index:    uninstall;LapLink Quick Connect
  2192. --------l-2FD44D-----------------------------
  2193. INT 2F - 4DOS.COM v2.1+ - API
  2194.     AX = D44Dh
  2195.     BH = function
  2196.         00h installation check
  2197.         Return: AX = 44DDh
  2198.             BL = minor version number
  2199.             BH = major version number
  2200.             CX = PSP segment address for current invocation
  2201.             DL = 4DOS shell number (0 for the first (root) shell,
  2202.                  updated each time a new copy is loaded)
  2203.         01h (internal, v2.1-3.03) terminate current copy of 4DOS
  2204.         Return: nothing
  2205.         (internal, v4.0) ???
  2206.         Return: ES:BX -> data area (see below)
  2207.         02h ???
  2208.         DX = ???
  2209.     ---v2.1-3.03 only---
  2210.         03h EXEC program
  2211.         CX:DX -> EXEC record
  2212.         FEh deallocate shell number (passed through to root shell)
  2213.         ???
  2214.         FFh allocate shell number (passed through to root shell)
  2215. Note:    bug in v3.00 will crash system if unrecognized value in BH
  2216. SeeAlso: AX=D44Eh,AX=E44Dh,INT 21/AX=4403h
  2217. Index:    installation check;4DOS|installation check;NDOS
  2218.  
  2219. Format of EXEC record:
  2220. Offset    Size    Description
  2221.  00h    WORD    offset of ASCIZ program name in same segment as EXEC record
  2222.  02h    WORD    offset of DOS commandline in same segment as EXEC record
  2223.  04h    WORD    segment of environment for child process (see INT 21/AH=26h)
  2224.  
  2225. Format of 4DOS v4.0 data area:
  2226. Offset    Size    Description
  2227.  00h  2 BYTEs    ???
  2228.  06h    WORD    XMS handle for swapping
  2229.     ???
  2230. --------l-2FD44E-----------------------------
  2231. INT 2F - 4DOS v3.0+ - AWAITING USER INPUT
  2232.     AX = D44Eh
  2233. ---4DOS v3.01+---
  2234.     BX = 0000h 4DOS is ready to display prompt
  2235.        = 0001h 4DOS has displayed the prompt, about to accept user input
  2236. Return: handler must preserve SI, DI, BP, SP, DS, ES, and SS
  2237. Note:    v3.00 only makes the call corresponding to BX=0001h, does not set BX
  2238. SeeAlso: AX=D44Dh
  2239. --------K-2FD44FBX0000-----------------------
  2240. INT 2F - 4DOS v4.0+ - KSTACK.COM - INSTALLATION CHECK
  2241.     AX = D44Fh
  2242.     BX = 0000h
  2243. Return: AX = 44DDh if installed
  2244. SeeAlso: AX=D44Fh/BX=0001h
  2245. --------K-2FD44FBX0001-----------------------
  2246. INT 2F - 4DOS v4.0+ - KSTACK.COM - PLACE KEYSTROKES INTO KEYSTACK
  2247.     AX = D44Fh
  2248.     BX = 0001h
  2249.     CX = number of keystrokes (01h-FFh)
  2250.     DS:DX -> keystroke list (one word per keystroke)
  2251. Return: AX = status
  2252.         0000h successful
  2253.         nonzero failed
  2254.     BX,CX,DX destroyed
  2255. Notes:    the keystrokes are the exact values to return from subsequent calls to
  2256.       INT 16 with AH=00h,01h,10h, or 11h, with the following exceptions:
  2257.         0000h causes subfunctions 01h and 11h to indicate an empty
  2258.             keyboard buffer
  2259.         FFFFh is followed by a word indicating the number of clock
  2260.             ticks to delay before the next faked keystroke
  2261.     v4.00 KSTACK overwrites any unread keystrokes from the previous
  2262.       invocation, and does not range-check CX; it will overwrite memory
  2263.       following the resident portion if CX is greater than 100h.
  2264. SeeAlso: AX=D44Fh/BX=0000h,INT 16/AH=00h,INT 21/AX=4403h
  2265. --------G-2FD600-----------------------------
  2266. INT 2F - HEART.COM - INSTALLATION CHECK
  2267.     AX = D600h
  2268. Return: AX = 0303h (two hearts) if installed
  2269.         ES:DI -> buffer (see below)
  2270. Program: HEART.COM is a CPU lock-up/critical indicator utility by Mitch Davis.
  2271. Notes:    Once the host program has identified the address of the data area, it
  2272.       can change this to indicate safe/critical, alternate colours, etc.
  2273.     The entries for the color table are in char/attrib form.  Every two
  2274.       entries form a pair which is alternated between 68 times a minute.
  2275.       The first half of the table is for color videos, the second mono.
  2276.       Within each half, the first half is for the safe chars, and the
  2277.       second for the critical chars.
  2278.  
  2279. Format of buffer:
  2280. Offset    Size    Description
  2281.  00h  8 WORDs    table of colors/attributes (see notes above)
  2282.  10h    BYTE    flags
  2283.         bit 0: program is in critical section, so flash double
  2284.             exclamation mark
  2285.         bit 1: program is in safe code, so flash the heart character
  2286.  11h    WORD    position of heartbeat on screen, normally 009Eh (last column
  2287.         of second line)
  2288. ----------2FD600-----------------------------
  2289. INT 2F U - VEDIT VSWAP - INSTALLATION CHECK
  2290.     AX = D600h
  2291. Return: AL = D6h if installed
  2292. Program: VSWAP is the resident portion of VEDIT's "swapper" capability; VEDIT
  2293.       is a programmer's text editor by Greenview Data.
  2294. SeeAlso: AX=D601h,AX=D602h
  2295. ----------2FD601-----------------------------
  2296. INT 2F U - VEDIT VSWAP - ???
  2297.     AX = D601h
  2298.     BL = subfunction number???
  2299. Return: BL = return code ???
  2300.     ES = resident portion's data??? segment
  2301.     DX = resident portion's code segment
  2302. SeeAlso: AX=D600h"VSWAP"
  2303. ----------2FD602-----------------------------
  2304. INT 2F U - VEDIT VSWAP - EXEC PROGRAM WITH SWAP
  2305.     AX = D602h
  2306.     other registers set as for INT 21/AX=4B00h
  2307. Return: CF set on error
  2308.         AL = error code
  2309.         82h = failure due to ???
  2310.     CF clear on success
  2311. SeeAlso: AX=D600h"VSWAP",INT 21/AH=4Bh"EXEC"
  2312. --------N-2FD701BX0000-----------------------
  2313. INT 2F - BANYAN VINES v4+ - GET BANV INTERRUPT NUMBER
  2314.     AX = D701h
  2315.     BX = 0000h
  2316. Return: AX = 0000h installed
  2317.         BX = interrupt number (60h to 66h)
  2318.        nonzero not present
  2319. Note:    if AX is nonzero, VINES 3.x or earlier may be installed, thus it is
  2320.       necessary to examine the four bytes preceding the handlers for
  2321.       INT 60 through INT 66 for the string "BANV"
  2322. SeeAlso: AX=D702h,AX=D703h,AX=D704h
  2323. --------N-2FD702-----------------------------
  2324. INT 2F U - BANYAN VINES v4+ - PCPRINT interface
  2325.     AX = D702h
  2326.     BX = function
  2327.     ???
  2328. Return: ???
  2329. SeeAlso: AX=D701h,AX=D703h,INT 61/AX=0005h"Banyan"
  2330. --------N-2FD703-----------------------------
  2331. INT 2F U - BANYAN VINES v4+ - MAIL interface
  2332.     AX = D703h
  2333.     BX = function
  2334.     ???
  2335. Return: ???
  2336. SeeAlso: AX=D702h,AX=D704h
  2337. --------N-2FD704-----------------------------
  2338. INT 2F U - BANYAN VINES v4+ - Streettalk Directory Assistance interface
  2339.     AX = D704h
  2340.     BX = function
  2341.     ???
  2342. Return: ???
  2343. SeeAlso: AX=D703h,INT 61/AX=0007h"Banyan"
  2344. --------N-2FD800-----------------------------
  2345. INT 2F - Novell NetWare Lite - CLIENT.EXE - INSTALLATION CHECK
  2346.     AX = D800h
  2347. Return:    AL = FFh if installed
  2348.         DX = version number??? (0100h in 1.00)
  2349.         BX = data segment of resident copy???
  2350.         ES:DI = FAR entry point for API routines
  2351.             Load BX = function number and call for various
  2352.             functions.    Functions 00h - 10h supported in 1.00.
  2353. SeeAlso: AX=7A00h,AX=D880h
  2354. --------N-2FD880-----------------------------
  2355. INT 2F - Novell NetWare Lite - SERVER.EXE - INSTALLATION CHECK
  2356.     AX = D880h
  2357. Return:    AL = FFh if installed
  2358.         DX = version number??? (0100h in 1.00)
  2359.         BX = Data segment of resident copy???
  2360.         CL = 01h if SERVER is active
  2361.            = 00h if SERVER is disabled
  2362. SeeAlso: AX=7A00h,AX=D800h
  2363. --------F-2FDA00-----------------------------
  2364. INT 2F - ZyXEL ZFAX - INSTALLATION CHECK
  2365.     AX = DA00h
  2366. Return: AH = enabled state (00h = enabled, 01h = disabled)
  2367.     AL = 5Ah installed
  2368. Note:    ZFAX is the bundled FAX software which comes with the ZyXEL model
  2369.       fax modems.
  2370. SeeAlso: AX=CBDCh,AX=DA01h,AX=DA02h,AX=DA03h
  2371. --------F-2FDA01-----------------------------
  2372. INT 2F - ZyXEL ZFAX - UNINSTALL
  2373.     AX = DA01h
  2374. Return: AL = 00h Success
  2375.          01h Failure
  2376. SeeAlso: AX=DA00h
  2377. --------F-2FDA02-----------------------------
  2378. INT 2F - ZyXEL ZFAX - DISABLE
  2379.     AX = DA02h
  2380. Return: AL = 00h
  2381. SeeAlso: AX=DA03h
  2382. --------F-2FDA03-----------------------------
  2383. INT 2F - ZyXEL ZFAX - ENABLE
  2384.     AX = DA03h
  2385. Return: AL = 00h
  2386. SeeAlso: AX=DA02h
  2387. --------G-2FDA55-----------------------------
  2388. INT 2F U - TRAP.COM - INSTALLATION CHECK
  2389.     AX = DA55h
  2390.     DL = interrupt number
  2391.     DH = ???
  2392. Return: if installed
  2393.         AH = interrupt number
  2394.         AL = ???
  2395.         ES:BX -> ???
  2396. Program: TRAP is an interrupt call tracer by Patrick Phillipot/Udo Chrosziel
  2397. Note:    a separate copy of TRAP is loaded for each interrupt to be traced; thus
  2398.       the interrupt number is part of the installation check
  2399. --------K-2FDC00-----------------------------
  2400. INT 2F - GOLD.COM - INSTALLATION CHECK
  2401.     AX = DC00h
  2402. Return: AL = 00h not installed
  2403.        = FFh installed
  2404. Program: GOLD is a TSR by Bob Eager which makes the NumLock key return the code
  2405.       for F1; the purpose is to improve Kermit's VTxxx emulation
  2406. --------K-2FDC01-----------------------------
  2407. INT 2F - GOLD.COM - GET STATE
  2408.     AX = DC01h
  2409. Return:    AL = status
  2410.         00h off
  2411.         01h on
  2412. SeeAlso: AX=DC00h,AX=DC02h
  2413. --------K-2FDC02-----------------------------
  2414. INT 2F - GOLD.COM - SET STATE
  2415.     AX = DC02h
  2416.     DL = new state
  2417.         00h off
  2418.         01h on
  2419. Return: AL = 00h (OK)
  2420. SeeAlso: AX=DC01h
  2421. --------t-2FDD-------------------------------
  2422. INT 2F - SoftCom programs - API
  2423.     AH = DDh
  2424.     AL = FEh get info
  2425.         Return: ES:BX -> TSR info list (see below)
  2426.     AL = program identifier
  2427.         BH = function
  2428.         FDh get version
  2429.             Return: BX = version
  2430.         FFh installation check
  2431.             Return: AL = FFh if installed
  2432.                 BX = version
  2433.                 ES = segment of resident code
  2434.         others vary by program
  2435. Return: AL = status
  2436.         bit 7 set on error
  2437.         AL = 81h unknown function
  2438. Index:    installation check;SoftCom programs
  2439.  
  2440. Format of TSR info list:
  2441. Offset    Size    Description
  2442.  00h  9 BYTEs    blank-padded ASCIZ program name
  2443.  09h    BYTE    program ID
  2444.  0Ah    WORD    program's PSP segment
  2445.  0Ch    WORD    program version (major in high byte)
  2446.  0Eh    DWORD    pointer to next item in info list or 0000h:0000h
  2447.  12h    BYTE    number of interrupts hooked
  2448.  13h  5 BYTEs    interrupt numbers hooked by program
  2449.  18h  8 BYTEs    reserved
  2450. --------Q-2FDE00BX4445-----------------------
  2451. INT 2F - DESQview v2.26+ External Device Interface - INSTALLATION CHECK
  2452.     AX = DE00h
  2453.     BX = 4445h ("DE")
  2454.     CX = 5844h ("XD")
  2455.     DX = 4931h ("I1")
  2456. Return: AL = FFh if installed (even if other registers do not match)
  2457.     if BX,CX, and DX were as specified on entry,
  2458.         BX = 4845h ("HE")
  2459.         CX = 5245h ("RE")
  2460.         DX = 4456h ("DV")
  2461. Notes:    AH=DEh is the default XDI multiplex number, but may range from C0h-FFh
  2462.     programs should check for XDI starting at DEh to FFh, then C0h to DDh
  2463.     the XDI handler should not issue any DOS or BIOS calls, nor should it
  2464.       issue DESQview API calls other than those allowed from hardware ints
  2465. SeeAlso: AX=DE02h,INT 15/AX=5400h
  2466. --------Q-2FDE01-----------------------------
  2467. INT 2F - DESQview v2.26+ External Device Interface - DRIVER CUSTOM SUBFUNCTION
  2468.     AX = DE01h
  2469.     BX = driver ID
  2470.     other registers as needed by driver
  2471. Notes:    XDI drivers should pass this call through to previous handler if ID
  2472.       does not match
  2473.     DESQview never calls this function
  2474. --------Q-2FDE01BX4450-----------------------
  2475. INT 2F U - Quarterdeck QDPMI.SYS v1.0 - INSTALLATION CHECK
  2476.     AX = DE01h
  2477.     BX = 4450h ("DP")
  2478.     CX = 4D49h ("MI")
  2479.     DX = 3039h ("09")
  2480. Return: AL = FFh if installed
  2481.         BX = 4D42h ("MB")
  2482.         CX = 4921h ("I!")
  2483.         DX = 8F4Fh
  2484.         ES:DI -> filename of DPMI host overlay
  2485. Note:    the installation check consists of testing for the existence of the
  2486.       character device QDPMI$$$
  2487. SeeAlso: INT 2F/AX=1687h,INT 31/AX=0000h
  2488. Index:    installation check;QDPMI
  2489. --------U-2FDE01BX5242-----------------------
  2490. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, Ralf Brown's XDI drivers
  2491.     AX = DE01h
  2492.     BX = 5242h ("RB")
  2493.     CX:DX = program identifier
  2494.         656F7000h ("eop",0) for DVeop
  2495. Return: AX = 5242h ("RB") if installed
  2496.         ES:BX -> data or entry point
  2497.         CX = version number (CH = major, CL = minor)
  2498.  
  2499. Call DVeop entry point with:
  2500.     ES:DI -> callback address or 0000h:0000h to remove callback
  2501. Return: AX = status
  2502.         0000h failed (callback table full or attempted to remove non-
  2503.             existent callback)
  2504.         0001h successful
  2505.         ES:DI -> chaining address
  2506.     BX,CX,DX destroyed
  2507. Notes:    the callback function is called with a simulated interrupt when the
  2508.       DESQview window containing it is closed; it should perform all
  2509.       necessary cleanup and then perform a FAR jump to the chaining address
  2510.       or an IRET if the chaining address is 0000h:0000h
  2511.     if the program wishes to remove itself before the window is closed, it
  2512.       should call the DVeop entry point with the previously returned
  2513.       chaining address and ignore the returned chaining address.
  2514. --------U-2FDE01BX7474-----------------------
  2515. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVTXDI.COM
  2516.     AX = DE01h
  2517.     BX = 7474h
  2518.     CL = function
  2519.         00h installation check
  2520.         Return: AL = FFh
  2521.         01h get process handle
  2522.         DX = keys on Open Window menu (DL = first, DH = second)
  2523.         Return: AX = process handle or 0000h if not running
  2524.         02h (v1.3+) set TMAN handle
  2525.         DX = TMAN process handle
  2526.         03h (v1.3+) set open keys to ignore on next CL=01h call
  2527.         DX = keys on Open Window menu (DL = first, DH = second)
  2528. Return: BX = 4F4Bh ("OK")
  2529.     DL destroyed
  2530. Note:    DVTXDI is distributed as part of the shareware products DVTree (DOS
  2531.      shell/DESQview process manager) and DVTMAN by Mike Weaver
  2532. Index:    installation check;DVTXDI
  2533. --------U-2FDE01BX7575-----------------------
  2534. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVSIXDI.COM
  2535.     AX = DE01h
  2536.     BX = 7575h
  2537.     CX = function
  2538.         0000h installation check
  2539.         Return: AX = 00FFh if installed
  2540.         0001h turn on notification (currently unused)
  2541.         Return: AX = 0001h
  2542.         0002h turn off notification (currently unused)
  2543.         Return: AX = 0001h
  2544.         0003h get process information
  2545.         Return: AX = status
  2546.                 0000h failed
  2547.                 0001h successful
  2548.                 BX = last instantaneous time slice
  2549.                     in 1/100s (v1.10)
  2550.                     in 1/18s (v1.11+)
  2551.                 CX = number of processes
  2552.                 DX = number of "(starting)" records (v2.00+)
  2553.                 SI = number of records in process info array
  2554.                      (v2.00+) (always 15 for v1.x)
  2555.                 ES:DI -> process info array (see below)
  2556.         0004h get version
  2557.         Return: AH = major version
  2558.             AL = minor version
  2559.         0005h (v1.10+) get time since DESQview started
  2560.         Return: DX:AX = 1/100s since DV start (v1.10)
  2561.             DX:AX = 1/18s since DV start (v1.11+)
  2562.         0006h (v1.10+) get number of task switches
  2563.         Return: DX:AX = total task switches
  2564.             CX = task switches in last instantaneous interval
  2565. Notes:    DVSIXDI is part of the DVSI (DESQview System Information) package by
  2566.       Daniel J. Bodoh
  2567.     for v1.00, function 0003h allocates common memory, which the caller
  2568.       must deallocate after reading the process information; only the
  2569.       currently used records are placed in the buffer
  2570.     for v1.10+, function 0003h merely returns a pointer to the internal
  2571.       array of process information; the caller should make a copy of the
  2572.       array while inside a critical section (see INT 15/AX=101Bh).    Only
  2573.       those records with bit 7 of the first byte set are valid.
  2574. Index:    installation check;DVSIXDI
  2575.  
  2576. Format of information for one process (v1.00):
  2577. Offset    Size    Description
  2578.  00h    BYTE    flags
  2579.         bit 7: process slot is valid
  2580.  01h    WORD    offset into DESQVIEW.DVO of program's record if started from
  2581.         Open Windows menu, else undefined
  2582.  03h    WORD    Switch Windows window number
  2583.  05h    WORD    segment of process handle
  2584.  07h    WORD    number of tasks owned by process
  2585.  09h    WORD    mapping context of process (see INT 15/AX=1016h)
  2586.  0Bh    DWORD    hook for other programs
  2587.  
  2588. Format of information for one process (v1.10-v2.00):
  2589. Offset    Size    Description
  2590.  00h    BYTE    flags
  2591.         bit 7: valid record
  2592.         bit 6: (v2.00+) record is allocated; if bit 7 clear, process
  2593.             is "(starting)" and only offsets 01h and 09h are valid
  2594.         bit 5: (v2.00+) this app currently owns the CPU
  2595.         bit 4: reserved (0)
  2596.         bit 3: DESQview system task
  2597.         bit 2: reserved (0)
  2598.         bit 1: task has keyboard (currently unused)
  2599.         bit 0: task swapped out (currently unused)
  2600.  01h    WORD    Open Window keys
  2601.  03h    WORD    Switch Windows number
  2602.  05h    WORD    segment of process handle
  2603.  07h    WORD    number of tasks for process
  2604.  09h    WORD    process mapping context
  2605.  0Bh    DWORD    time process started (relative to start of DESQview)
  2606.  0Fh    DWORD    time process last got CPU (relative to start of DESQview)
  2607.  13h    DWORD    time process last gave up CPU (relative to start of DESQview)
  2608.  17h    DWORD    total CPU time since process started
  2609.  1Bh    DWORD    CPU time at start of current instantaneous interval
  2610.  1Fh    DWORD    CPU time in current instantaneous interval
  2611.  23h    DWORD    hook for other programs
  2612. Note:    all times are in 1/100s for v1.10, in 1/18s for v1.11+
  2613. --------Q-2FDE01BXFFFE-----------------------
  2614. INT 2F U - DESQview v2.26+ XDI - DVXMS.DVR - ???
  2615.     AX = DE01h
  2616.     BX = FFFEh
  2617.     CX = 4D47h ("MG")
  2618.     DX = 0052h (0,"R")
  2619. Return: AL = FFh
  2620.     DX = 584Dh
  2621. --------Q-2FDE02-----------------------------
  2622. INT 2F C - DESQview v2.26+ External Dev Interface - DV INITIALIZATION COMPLETE
  2623.     AX = DE02h
  2624.     BX = mapping context of DESQview
  2625.     DX = handle of DESQview system task
  2626. Note:    driver should pass this call to previous handler after doing its work
  2627. SeeAlso: AX=DE03h,AX=DE0Fh,INT 15/AX=5400h
  2628. --------Q-2FDE03-----------------------------
  2629. INT 2F C - DESQview v2.26+ External Dev Interface - DV TERMINATION
  2630.     AX = DE03h
  2631.     BX = mapping context of DESQview
  2632.     DX = handle of DESQview system task
  2633. Notes:    driver should pass this call to previous handler before doing its work
  2634.     DESQview makes this call when it is exiting, but before unhooking any
  2635.       interrupt vectors
  2636. SeeAlso: AX=DE02h,AX=DE0Fh,INT 15/AX=5407h
  2637. --------Q-2FDE04-----------------------------
  2638. INT 2F C - DESQview v2.26+ External Dev Interface - ADD PROCESS
  2639.     AX = DE04h
  2640.     BX = mapping context of new process (see INT 15/AX=1016h)
  2641.     DX = handle of process
  2642. Return: nothing
  2643. Notes:    XMS XDI handler (installed by default) allocates a 22-byte record
  2644.       (see below) from "common" memory to control access to XMS memory
  2645.     all DOS, BIOS, and DV API calls are valid in handler
  2646.     driver should pass this call to previous handler after processing it
  2647. SeeAlso: AX=DE05h,AX=DE06h,INT 15/AX=5401h
  2648.  
  2649. Format of XMS XDI structure:
  2650. Offset    Size    Description
  2651.  00h    DWORD    pointer to 10-byte record???
  2652.  04h    DWORD    pointer to next XMS XDI structure
  2653.  08h    WORD    mapping context
  2654.  0Ah    BYTE    ???
  2655.  0Bh  5 BYTEs    XMS entry point to return for INT 2F/AX=4310h
  2656.         (FAR jump to next field)
  2657.  10h  6 BYTEs    FAR handler for XMS driver entry point
  2658.         (consists of a FAR CALL followed by RETF)
  2659. --------Q-2FDE05-----------------------------
  2660. INT 2F C - DESQview v2.26+ External Dev Interface - REMOVE PROCESS
  2661.     AX = DE05h
  2662.     BX = mapping context of process (see INT 15/AX=1016h)
  2663.     DX = handle of last task in process
  2664. Return: nothing
  2665. Notes:    XMS XDI handler releases the structure allocated by AX=DE04h
  2666.     driver should pass this call to previous handler before processing it
  2667.     all DOS, BIOS, and DV API calls except those generating a task switch
  2668.       are valid in handler
  2669. SeeAlso: AX=DE04h,AX=DE07h,INT 15/AX=5402h
  2670. --------Q-2FDE06-----------------------------
  2671. INT 2F C - DESQview v2.26+ External Dev Interface - CREATE TASK
  2672.     AX = DE06h
  2673.     BX = mapping context of process containing task
  2674.     DX = handle of new task
  2675. Notes:    driver should pass this call to previous handler after processing it
  2676.     all DOS, BIOS, and DV API calls are valid in handler
  2677. --------Q-2FDE07-----------------------------
  2678. INT 2F C - DESQview v2.26+ External Dev Interface - TERMINATE TASK
  2679.     AX = DE07h
  2680.     BX = mapping context of process containing task
  2681.     DX = handle of task
  2682. Notes:    driver should pass this call to previous handler before processing it
  2683.     all DOS, BIOS, and DV API calls except those generating a task switch
  2684.       are valid in handler
  2685. SeeAlso: AX=DE04h,AX=DE06h,AX=DE10h
  2686. --------Q-2FDE08-----------------------------
  2687. INT 2F C - DESQview v2.26+ External Dev Interface - SAVE STATE
  2688.     AX = DE08h
  2689.     BX = mapping context of task being switched from (see INT 15/AX=1016h)
  2690.     DX = handle of task being switched from
  2691. Notes:    invoked prior to task swap, interrupts, etc
  2692.     driver should pass this call to previous handler after processing it
  2693. SeeAlso: AX=DE09h,INT 15/AX=5403h,INT 15/AX=DE27h
  2694. --------Q-2FDE09-----------------------------
  2695. INT 2F C - DESQview v2.26+ External Dev Interface - RESTORE STATE
  2696.     AX = DE09h
  2697.     BX = mapping context of task being switched to (see INT 15/AX=1016h)
  2698.     DX = handle of task being switched to
  2699. Notes:    state is restored except for interrupts
  2700.     driver should pass this call to previous handler before processing it
  2701. SeeAlso: AX=DE08h,INT 15/AX=5404h,INT 15/AX=DE27h
  2702. --------Q-2FDE0A-----------------------------
  2703. INT 2F C - DESQview v2.26+ External Dev Interface - CHANGE KEYBOARD FOCUS
  2704.     AX = DE0Ah
  2705.     BX = mapping context of task receiving focus
  2706.     DX = handle of running task
  2707. Notes:    driver should pass this call to previous handler before processing it
  2708.     this call often occurs inside a keyboard interrupt
  2709.     DV 2.42 does not provide this call to XDI handlers running inside a
  2710.       window; instead, it directly calls the INT 2F handler which was
  2711.       active at the time DV started
  2712. SeeAlso: INT 15/AX=DE26h,INT 15/AX=DE2Fh
  2713. --------Q-2FDE0B-----------------------------
  2714. INT 2F C - DESQview v2.26+ External Dev Interface - DVP PROCESSING COMPLETE
  2715.     AX = DE0Bh
  2716.     BX = mapping context of DESQview system task
  2717.     CX = number of system memory paragraphs required for the use of all
  2718.         XDI drivers (DV will add this to system memory in DVP buffer)
  2719.     DX = handle of DESQview system task
  2720.     SI = mapping context of new process if it starts
  2721.     ES:DI -> DVP buffer
  2722. Return: CX incremented as needed
  2723. Notes:    once DV invokes this function, the DVP buffer contents may be changed
  2724.     driver should pass this call to previous handler before processing it
  2725. --------Q-2FDE0C-----------------------------
  2726. INT 2F C - DESQview v2.26+ External Dev Interface - SWAP OUT PROCESS
  2727.     AX = DE0Ch
  2728.     BX = mapping context of task being swapped out (see INT 15/AX=1016h)
  2729.     DX = handle of DESQview system task
  2730. Note:    driver should pass this call to previous handler after processing it
  2731. --------Q-2FDE0D-----------------------------
  2732. INT 2F C - DESQview v2.26+ External Dev Interface - SWAP IN PROCESS
  2733.     AX = DE0Dh
  2734.     BX = mapping context of process just swapped in (see INT 15/AX=1016h)
  2735.     DX = handle of DESQview system task
  2736. Note:    driver should pass this call to previous handler before processing it
  2737. --------Q-2FDE0E-----------------------------
  2738. INT 2F C - DESQview v2.26+ External Dev Interface - DVP START FAILED
  2739.     AX = DE0Eh
  2740.     BX = mapping context of DESQview system task
  2741.     DX = handle of DESQview system task
  2742.     SI = mapping context of failed process (same as for call to AX=DE0Bh)
  2743. Note:    driver should pass this call to previous handler after processing it
  2744. --------Q-2FDE0F-----------------------------
  2745. INT 2F C - DESQview v2.50+ External Dev Interface - INITIALIZE DV
  2746.     AX = DE0Fh
  2747. Note:    DESQview 2.50+ calls this function just before it completes its
  2748.       initialization.  At the time of the call, DESQview has not yet
  2749.       changed any interrupt vectors
  2750. SeeAlso: AX=DE02h
  2751. --------Q-2FDE10-----------------------------
  2752. INT 2F C - DESQview v2.50+ External Dev Interface - FREE TASK
  2753.     AX = DE10h
  2754.     BX = mapping context of process (see INT 15/AX=1016h)
  2755.     DX = task handle of process
  2756. Note:    DESQview 2.50+ calls this function before it frees the task; it is
  2757.       similar to AX=DE07h but allows the XDI handler to make calls which
  2758.       cause context switches
  2759. SeeAlso: AX=DE06h,AX=DE07h
  2760. --------c-2FDF00-----------------------------
  2761. INT 2F - HyperWare programs - INSTALLATION CHECK
  2762.     AX = DF00h
  2763.     BX = product code
  2764.         4248h ('BH') HyperStb
  2765.         4448h ('DH') HyperDisk v4.20+
  2766.         4B48h ('KH') HyperKey
  2767.         5348h ('SH') HyperScreen
  2768.     CX = 0000h
  2769.     DX = 0000h
  2770. Return: AL = status
  2771.         00h not installed
  2772.         FFh multiplex number in use
  2773.         CX = 5948h ('YH') if selected product installed
  2774.         ---HyperDisk---
  2775.         BX = code segment of resident portion
  2776.         DX = HyperDisk local data version
  2777. Program: HyperDisk is a shareware disk cache by HyperWare (Roger Cross)
  2778. Note:    AH=DFh is the default; if it is already in use by some other program,
  2779.       HyperWare programs then scan multiplex numbers from C0h through FFh
  2780. SeeAlso: INT 13/AX=8EEDh
  2781. --------c-2FDF01BX4448-----------------------
  2782. INT 2F - HyperDisk v4.50+ - GET CURRENT CACHE STATE
  2783.     AX = DF01h
  2784.     BX = 4448h ('DH')
  2785. Return: AX = 0000h if function supported
  2786.         BX = number of cache buffers in use
  2787.         CX = number of cache buffers which have been modified
  2788.         DL = caching flags (see below)
  2789. Note:    AH=DFh is the default; if it is already in use by some other program,
  2790.       HyperWare programs then scan multiplex numbers from C0h through FFh
  2791. SeeAlso: AX=DF00h,AX=DF02h
  2792.  
  2793. Bitfields for caching flags:
  2794.  bit 0    staged writes enabled for floppy disks
  2795.  bit 1    staged writes enabled for hard disks
  2796.  bit 2    writes verified on floppy disks
  2797.  bit 3    writes verified on hard disks
  2798.  bit 4    reserved (0)
  2799.  bit 5    reserved (0)
  2800.  bit 6    floppy caching enabled
  2801.  bit 7    all caching functions enabled
  2802. --------c-2FDF02BX4448-----------------------
  2803. INT 2F - HyperDisk v4.50+ - SET CACHE STATE
  2804.     AX = DF02h
  2805.     BX = 4448h ('DH')
  2806.     DL = new caching flags (see AX=DF01h)
  2807. Return: AX = 0000h if supported
  2808.         BX = number of cache buffers in use
  2809.         CX = number of cache buffers which have been modified
  2810.         DL = previous caching flags (see AX=DF01h)
  2811. Program: HyperDisk is a shareware disk cache by HyperWare (Roger Cross)
  2812. Note:    AH=DFh is the default; if it is already in use by some other program,
  2813.       HyperWare programs then scan multiplex numbers from C0h through FFh
  2814. SeeAlso: AX=DF00h,AX=DF01h
  2815. --------U-2FE000-----------------------------
  2816. INT 2F - SETDRVER.COM v2.10+ - INSTALLATION CHECK
  2817.     AX = E000h
  2818. Return: AX = 4A52h ("JR") if present
  2819. Program: SETDRVER is a public domain TSR by Jacob Rieper which sets the
  2820.       apparent DOS version analogously to MS-DOS SETVER
  2821. Note:    this installation check differs from the usual one of returning AL=FFh
  2822. SeeAlso: AX=E001h,INT 21/AH=52h
  2823. --------U-2FE001-----------------------------
  2824. INT 2F - SETDRVER.COM v2.10+ - GET SETDRVER VERSION
  2825.     AX = E001h
  2826. Return: AH = major version
  2827.     AL = minor version
  2828. SeeAlso: AX=E000h
  2829. --------U-2FE002-----------------------------
  2830. INT 2F - SETDRVER.COM v2.10+ - GET ORIGINAL DOS VERSION INFO
  2831.     AX = E002h
  2832. Return: AL = FFh if successful
  2833.         BH = major DOS version
  2834.         BL = minor DOS version
  2835.         CH = DOS version flag
  2836.         CL = OEM number
  2837.         DH = major DR-DOS version number (FFh if unknown)
  2838.         DL = minor DR-DOS version number (FFh if unknown)
  2839. SeeAlso: AX=E003h,AX=E007h,INT 21/AH=30h
  2840. --------U-2FE003-----------------------------
  2841. INT 2F - SETDRVER.COM v2.10+ - RESET INTERNAL VARIABLES
  2842.     AX = E003h
  2843.     BH = new major DOS version
  2844.     BL = new minor DOS version
  2845.     CH = new DOS version flag
  2846.     CL = new DOS revision number
  2847.     DH = new OEM number
  2848. SeeAlso: AX=E002h
  2849. --------U-2FE004-----------------------------
  2850. INT 2F - SETDRVER.COM v2.10+ - ENABLE TSR
  2851.     AX = E004h
  2852. Return: AL = FFh if successful
  2853. SeeAlso: AX=E000h,AX=E005h,AX=E006h
  2854. --------U-2FE005-----------------------------
  2855. INT 2F - SETDRVER.COM v2.10+ - DISABLE TSR
  2856.     AX = E005h
  2857. Return: AL = FFh if successful
  2858. SeeAlso: AX=E000h,AX=E004h,AX=E006h
  2859. --------U-2FE006-----------------------------
  2860. INT 2F - SETDRVER.COM v2.10+ - GET TSR STATUS
  2861.     AX = E006h
  2862. Return: AL = FFh if successful
  2863.         BL = status
  2864.         01h resident and active
  2865.         02h resident and inactive
  2866. --------U-2FE007-----------------------------
  2867. INT 2F - SETDRVER.COM v2.10+ - GET TaskMAX STATUS AT INSTALLATION
  2868.     AX = E007h
  2869. Return: AL = FFh if successful
  2870.         BL = status
  2871.         00h if TaskMAX not loaded before SETDRVER
  2872.         FFh if TaskMAX was loaded before SETDRVER
  2873. SeeAlso: AX=E003h
  2874. --------U-2FE0-------------------------------
  2875. INT 2F - SETDRVER.COM - RESERVED FOR FUTURE USE
  2876.     AH = E0h
  2877.     AL = 08h-10h
  2878. --------K-2FE300-----------------------------
  2879. INT 2F - ANARKEY.COM - INSTALLATION CHECK
  2880.     AX = E300h
  2881. Return: AL = 00h not installed
  2882.          FEh if installed but suspended (v3.0+)
  2883.          FFh installed
  2884. Program: ANARKEY.COM is a commandline recall program by Steven Calwas
  2885. Note:    E3h is the default function number, but can be set to any value from
  2886.       C0h to FFh
  2887. SeeAlso: AX=E301h,AX=E302h,AX=E303h,AX=E304h,AX=E305h,AX=E306h,AX=E307h
  2888. --------K-2FE301-----------------------------
  2889. INT 2F U - ANARKEY.COM v2+ - GET ???
  2890.     AX = E301h
  2891. Return: DX:BX -> ???
  2892. SeeAlso: AX=E300h
  2893.  
  2894. Format of returned data structure for ANARKEY v2.0:
  2895. Offset    Size    Description
  2896.  -7   7 BYTEs    signature ('ANARKEY')
  2897.  00h    WORD    ??? (I see 0001h in v2.0)
  2898.  02h    WORD    ??? (I see 0001h in v2.0)
  2899.  04h    WORD    ??? (I see 0 in v2.0)
  2900.  06h    WORD    PSP segment of next program loaded
  2901.  
  2902. Format of returned data structure for ANARKEY v3+:
  2903. Offset    Size    Description
  2904.  -1    BYTE    multiplex number
  2905.  00h    WORD    ??? (I see 0001h in v3.0-4.0)
  2906.  02h    WORD    ??? (I see 0001h in v3.0-4.0)
  2907.  04h    BYTE    ??? (I see 0 in v3.0-4.0)
  2908.  05h    WORD    PSP segment of next program loaded
  2909. --------K-2FE302-----------------------------
  2910. INT 2F U - ANARKEY.COM v3+ - ???
  2911.     AX = E302h
  2912.     BL = ???
  2913. Return: ???
  2914. SeeAlso: AX=E300h
  2915. --------K-2FE303-----------------------------
  2916. INT 2F U - ANARKEY.COM v3+ - ANARKMD API
  2917.     AX = E303h
  2918.     BL = function
  2919.         01h    toggle insert mode
  2920.         02h    display contents of history buffer
  2921.         03h    write history buffer to file
  2922.         ES:DX -> file name
  2923.         04h    clear history buffer
  2924.         05h    undefine all aliases
  2925.         06h    show aliases
  2926.         07h    list programs using Unix switchar
  2927.         08h    jump to bottom of history buffer    
  2928.         09h (v4.0) add string to history buffer
  2929.         ES:DX -> ASCIZ string
  2930.         0Ah (v4.0) ???
  2931.         ES:DX -> ???
  2932.         0Bh (v4.0) copy string to edit buffer for use as next input line
  2933.         ES:DX -> ASCIZ string
  2934.         0Ch (v4.0) ???
  2935.         0Dh (v4.0) copy ??? to ???
  2936.         0Eh (v4.0) ???
  2937.         0Fh (v4.0) ???
  2938.         10h (v4.0) set ??? flag
  2939.         11h (v4.0) display error message about running in EMS under Windows
  2940. Return: ???
  2941. SeeAlso: AX=E300h
  2942. --------K-2FE304-----------------------------
  2943. INT 2F U - ANARKEY.COM v2+ - ???
  2944.     AX = E304h
  2945.     BL = ???
  2946. Return: ???
  2947. SeeAlso: AX=E300h
  2948. --------K-2FE305-----------------------------
  2949. INT 2F U - ANARKEY.COM v3+ - ENABLE/SUSPEND ANARKEY
  2950.     AX = E305h
  2951.     BL = new state
  2952.         01h suspended
  2953.         00h enabled
  2954. SeeAlso: AX=E300h
  2955. --------K-2FE306-----------------------------
  2956. INT 2F U - ANARKEY.COM v4.0 - GET ???
  2957.     AX = E306h
  2958. Return: AX = ???
  2959. SeeAlso: AX=E300h
  2960. --------K-2FE307-----------------------------
  2961. INT 2F U - ANARKEY.COM v4.0 - GET ???
  2962.     AX = E307h
  2963. Return: AX = ???
  2964.     BL = ???
  2965. SeeAlso: AX=E300h
  2966. --------l-2FE44D-----------------------------
  2967. INT 2F - NDOS - API
  2968.     AX = E44Dh
  2969. Note:    as NDOS is a licensed version of 4DOS v3.03, the API is identical to
  2970.       that for 4DOS, except that AH=E4h instead of D4h and the installation
  2971.       check returns AX=44EEh instead of AX=44DDh
  2972. SeeAlso: AX=D44Dh,AX=E44Eh
  2973. --------l-2FE44EBX0000-----------------------
  2974. INT 2F - NDOS - AWAITING USER INPUT
  2975.     AX = E44Eh
  2976.     BX = 0000h NDOS is ready to display prompt
  2977.        = 0001h NDOS has displayed the prompt, about to accept user input
  2978. Return: handler must preserve SI, DI, BP, SP, DS, ES, and SS
  2979. SeeAlso: AX=E44Dh
  2980. --------E-2FED00-----------------------------
  2981. INT 2F - Phar Lap DOS EXTENDERS - INSTALLATION CHECK
  2982.     AX = ED00h
  2983.     BL = DOS extender
  2984.         01h 286dosx v1.3+ (Software Development Kit)
  2985.         02h 286dosx v1.3+ (Run-Time Kit)
  2986.         03h 386dosx v4.0+ (SDK)
  2987.         04h 386dosx v4.0+ (RTK)
  2988. Return: AL = status
  2989.         00h not installed
  2990.         FFh installed
  2991.         SI = 5048h ("PH")
  2992.         DI = 4152h ("AR")
  2993.         CH = major version number
  2994.         CL = minor version number
  2995.         DX = flags
  2996.             bit 0: running under DPMI
  2997.             bit 1: running under Phar Lap VMM
  2998. SeeAlso: AH=A1h,AX=F100h,AX=FBA1h
  2999. --------E-2FED80-----------------------------
  3000. INT 2F - Phar Lap 286|DOS Extender Lite v2.5 - ???
  3001.     AX = ED80h
  3002.     BL = DOS extender ID (see AX=ED00h)
  3003.     SI = 5048h ("PH")
  3004.     DI = 4152h ("AR")
  3005.     ???
  3006. Return: ???
  3007. --------y-2FEE00-----------------------------
  3008. INT 2F - GRIDLOC.EXE - INSTALLATION CHECK
  3009.     AX = EE00h
  3010. Return: AL = FFh if installed
  3011. Program: GRIDLOC is a PC security program by Intelligent Security Systems, Inc.
  3012. --------U-2FEE00-----------------------------
  3013. INT 2F - XVIEW - INSTALLATION CHECK
  3014.     AX = EE00h
  3015. Return: AX = 00FFh if installed
  3016. Program: XVIEW is a hypertext viewer by Flambeaux Software, Inc.
  3017. --------U-2FEE01-----------------------------
  3018. INT 2F - XVIEW - POP UP GIVING TOPIC SEARCH KEYWORD
  3019.     AX = EE01h
  3020.     DS:DX -> ASCIZ string containing case-insensitive keyword to look up
  3021. Return: AX = status (see below)
  3022. Note:    the specified keyword should be a hyperlink in the _IndexPage of some
  3023.       database; the current database is searched first
  3024. SeeAlso: AX=EE00h"XVIEW",AX=EE02h,AX=EE03h,AX=EE04h,AX=EE06h
  3025. Values for status:
  3026.  0000h successful
  3027.  00F1h unknown subfunction
  3028.  00F2h unable to pop up
  3029. --------U-2FEE02-----------------------------
  3030. INT 2F - XVIEW - POP UP GIVING A PAGE NUMBER
  3031.     AX = EE02h
  3032.     DX = physical page number or anchor page number (see below)
  3033. Return: AX = status (see AX=EE01h)
  3034. Note:    physical page numbers are assigned by the hypertext compiler, and
  3035.       will change if a page is inserted in the middle
  3036. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE05h,AX=EE06h
  3037.  
  3038. Values for anchor page number:
  3039.  FFEAh    _Credits
  3040.  FFECh    _SearchTopics
  3041.  FFEDh    _SearchText
  3042.  FFF0h    _ManualList
  3043.  FFF5h    _HelpOnHelp
  3044.  FFF8h    _HomePage
  3045.  FFF9h    _IndexPage
  3046. --------U-2FEE03-----------------------------
  3047. INT 2F - XVIEW - POP UP GIVING FILENAME AND SEARCH TOPIC OR PAGE NUMBER
  3048.     AX = EE03h
  3049.     DS:DX -> data packet (see below)
  3050. Return: AX = status (see AX=EE01h)
  3051. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE02h,AX=EE06h
  3052.  
  3053. Format of data packet:
  3054. Offset    Size    Description
  3055.  00h    DWORD    -> ASCIZ database filespec (0000h:0000h for current database)
  3056.  04h    DWORD    -> ASCIZ text to look up or 0000h:0000h
  3057.  08h    WORD    page number (0000h if keyword used)
  3058.  0Ah  6 BYTEs    reserved
  3059. --------U-2FEE04-----------------------------
  3060. INT 2F - XVIEW - POP UP AND READ SCREEN FOR SEARCH TOPIC KEYWORD
  3061.     AX = EE04h
  3062. Return: AX = status (see AX=EE01h)
  3063. Note:    equivalent to the action taken when the user presses the Alt-L hotkey
  3064. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE03h,AX=EE06h
  3065. --------U-2FEE05-----------------------------
  3066. INT 2F - XVIEW - POP UP TO MOST-RECENTLY VIEWED PAGE
  3067.     AX = EE05h
  3068. Return: AX = status (see AX=EE01h)
  3069. Note:    equivalent to the action taken when the user presses the Alt-H hotkey
  3070. SeeAlso: AX=EE00h"XVIEW",AX=EE02h,AX=EE06h
  3071. --------U-2FEE06-----------------------------
  3072. INT 2F - XVIEW - WAIT FOR POP-DOWN AND GET EXIT CODE
  3073.     AX = EE06h
  3074. Return: AX = status (see also AX=EE01h)
  3075.         0001h specified filename is not an xText database
  3076.         0002h no databases found
  3077.         0003h bad data in file
  3078.         0004h memory shortage
  3079.         0005h unable to open the requested file
  3080.         0007h invalid page number for file
  3081. Note:    although this call is not required, the exit code can alert the
  3082.       caller to problems; if the call is not made, the program should
  3083.       enforce a delay of about 1/2 second to allow the viewer to pop up,
  3084.       and should not get keyboard input or attempt disk accesses during
  3085.       the delay
  3086. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE02h,AX=EE03h,AX=EE04h,AX=EE05h
  3087. --------K-2FF000-----------------------------
  3088. INT 2F U - 4MAP - INSTALLATION CHECK
  3089.     AX = F000h
  3090. Return: AX = 00FFh
  3091. Program: 4MAP is a keybinding program for 4DOS (see AX=D44Dh) by Ho-Ping Tseng
  3092. Note:    returns AX=00FFh for any value of AL not listed here
  3093. SeeAlso: AX=D44Dh,AX=F001h,AX=F002h
  3094. --------K-2FF001-----------------------------
  3095. INT 2F U - 4MAP - GET KEY MAPPINGS
  3096.     AX = F001h
  3097. Return: ES:BX -> key mappings
  3098. SeeAlso: AX=F000h
  3099. --------K-2FF002-----------------------------
  3100. INT 2F U - 4MAP - INSERT CHARACTER INTO ???
  3101.     AX = F002h
  3102.     BL = character to insert
  3103. Return: AX = status
  3104.         0000h successful
  3105.         0001h buffer full
  3106. SeeAlso: AX=F000h,AX=F003h
  3107. --------K-2FF003-----------------------------
  3108. INT 2F U - 4MAP - INSERT CHARACTER INTO ???
  3109.     AX = F003h
  3110.     BL = character to insert
  3111. Return: AX = status
  3112.         0000h successful
  3113.         0001h buffer full
  3114. Program: 4MAP is a keybinding program for 4DOS (see AX=D44Dh) by Ho-Ping Tseng
  3115. SeeAlso: AX=F000h,AX=F002h
  3116. --------m-2FF1-------------------------------
  3117. INT 2F U - MIN-MEM v2.11 - INSTALLATION CHECK
  3118.     AH = F1h
  3119.     AL <> F1h
  3120. Return: AL = F1h if installed
  3121. Program: MIN-MEM is a shareware TSR manager by Biologic which permits up to 24
  3122.       popup TSRs to be loaded but swapped out to disk, EMS, or XMS.     One
  3123.       TSR at a time is brought back into memory at the user's request.
  3124. --------E-2FF100-----------------------------
  3125. INT 2F - DOS EXTENDER INSTALLATION CHECK
  3126.     AX = F100h
  3127. Return: AL = FFh if DOS extender present
  3128.         SI = 444Fh ("DO")
  3129.         DI = 5358h ("SX")
  3130. Note:    supported or soon to be supported by Phar Lap, Rational, Ergo, and IGC
  3131. SeeAlso: AH=A1h,AX=ED00h,AX=FBA1h/BX=0081h,INT 15/AX=BF02h
  3132. --------d-2FF700-----------------------------
  3133. INT 2F - AUTOPARK.COM - INSTALLATION CHECK
  3134.     AX = F700h
  3135. Return: AL = 00h not installed
  3136.          FFh installed
  3137. Program: AUTOPARK.COM is a resident hard disk parker by Alan D. Jones
  3138. --------d-2FF701-----------------------------
  3139. INT 2F - AUTOPARK.COM - SET PARKING DELAY
  3140.     AX = F701h
  3141.     BX:CX = 32-bit count of 55ms timer ticks
  3142. --------d-2FF800CX4455-----------------------
  3143. INT 2F U - SuperStor PRO 2XON.COM - INSTALLATION CHECK
  3144.     AX = F800h
  3145.     CX = 4455h ("DU")
  3146.     DL = 45h ("E")
  3147. Return: AL = FFh if installed
  3148.         ES:BX -> ASCII signature "Universal Data Exchange"
  3149. Program: SuperStor is a disk-compression program by Addstor.
  3150. Note:    returns AX=0001h if AL is not 00h or 01h
  3151. SeeAlso: AX=1001h,AX=F801h
  3152. --------d-2FF801CX4455-----------------------
  3153. INT 2F U - SuperStor PRO 2XON.COM - UNINSTALL
  3154.     AX = F801h
  3155.     CX = 4455h ("DU")
  3156.     DL = 45h ("E")
  3157.     ES:BX = return address if successful
  3158. Return: at specified address if successfully removed from memory
  3159.     else
  3160.         AL = error code
  3161.         ???
  3162. Program: SuperStor is a disk-compression program by Addstor.
  3163. Note:    returns AX=0001h if AL is not 00h or 01h
  3164. SeeAlso: AX=1001h,AX=F800h
  3165. --------*-2FFB-------------------------------
  3166. INT 2F - Multiplex - RESERVED BY BORLAND INTERNATIONAL
  3167.     AH = FBh
  3168. --------a-2FFB00-----------------------------
  3169. INT 2F U - AutoBraille v1.1A - INSTALLATION CHECK
  3170.     AX = FB00h
  3171. Return: AX = 00FFh if installed
  3172. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  3173. SeeAlso: INT 10/AH=38h,INT 14/AX=F0F1h
  3174. --------U-2FFB00-----------------------------
  3175. INT 2F U - Jot-It! v1.50 - INSTALLATION CHECK
  3176.     AX = FB00h
  3177. Return: AX = FFFFh if installed
  3178.         BX = version (BCD, BH=major, BL=minor)
  3179. SeeAlso: AX=FB03h"Jot-It",AX=FB01h"Jot-It"
  3180. --------a-2FFB01-----------------------------
  3181. INT 2F U - AutoBraille v1.1A - ???
  3182.     AX = FB01h
  3183.     ???
  3184. Return: ???
  3185. --------U-2FFB01-----------------------------
  3186. INT 2F U - Jot-It! v1.50 - GET USER NAME
  3187.     AX = FB01h
  3188. Return: DX:BX -> ASCIZ user name
  3189. SeeAlso: AX=FB02h"Jot-It"
  3190. --------a-2FFB02-----------------------------
  3191. INT 2F U - AutoBraille v1.1A - ???
  3192.     AX = FB02h
  3193. Return: AH = ???
  3194.     AL = ???
  3195. --------U-2FFB02-----------------------------
  3196. INT 2F U - Jot-It! v1.50 - GET MESSAGE DIRECTORY
  3197.     AX = FB02h
  3198. Return: DX:BX -> ASCIZ name of directory in which messages are stored
  3199. SeeAlso: AX=FB01h"Jot-It"
  3200. --------a-2FFB03-----------------------------
  3201. INT 2F U - AutoBraille v1.1A - GET NEXT ???
  3202.     AX = FB03h
  3203. Return: AX = ???
  3204. --------U-2FFB03-----------------------------
  3205. INT 2F U - Jot-It! v1.50 - UNINSTALL
  3206.     AX = FB03h
  3207. Return: resident code removed from memory
  3208. Note:    CAUTION: NO checks are performed to ensure that the interrupt vectors
  3209.       being unhooked (08h,09h,28h,2Fh) actually point at the Jot-It! code
  3210. SeeAlso: AX=FB00h"Jot-It"
  3211. --------a-2FFB-------------------------------
  3212. INT 2F U - AutoBraille v1.1A - SET ???
  3213.     AH = FBh
  3214.     AL = 04h-08h
  3215. Return: AX = 0000h
  3216. --------a-2FFB-------------------------------
  3217. INT 2F U - AutoBraille v1.1A - SET ???
  3218.     AH = FBh
  3219.     AL = 09h-0Fh (???, 0Eh = COM1, 0Fh = COM2)
  3220. Return: ???
  3221. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  3222. --------a-2FFB-------------------------------
  3223. INT 2F U - AutoBraille v1.1A - SET ???
  3224.     AH = FBh
  3225.     AL = 10h-1Fh
  3226.     ???
  3227. Return: ???
  3228. --------a-2FFB20-----------------------------
  3229. INT 2F U - AutoBraille v1.1A - SET ??? FLAGS
  3230.     AX = FB20h
  3231.     BL = flags to set
  3232. SeeAlso: AX=FB21h"AutoBraille"
  3233. --------a-2FFB21-----------------------------
  3234. INT 2F U - AutoBraille v1.1A - CLEAR ??? FLAGS
  3235.     AX = FB21h
  3236.     BL = flags to clear
  3237. SeeAlso: AX=FB20h"AutoBraille"
  3238. --------a-2FFB22-----------------------------
  3239. INT 2F U - AutoBraille v1.1A - SET ???
  3240.     AX = FB22h
  3241.     BL = ???
  3242. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  3243. --------a-2FFB28-----------------------------
  3244. INT 2F U - AutoBraille v1.1A - ???
  3245.     AX = FB28h
  3246.     BX = ???
  3247.     ???
  3248. Return: ???
  3249. SeeAlso: AX=FB29h"AutoBraille"
  3250. --------a-2FFB29-----------------------------
  3251. INT 2F U - AutoBraille v1.1A - ???
  3252.     AX = FB29h
  3253.     BX = ???
  3254.     ???
  3255. Return: ???
  3256. SeeAlso: AX=FB28h"AutoBraille"
  3257. --------a-2FFB-------------------------------
  3258. INT 2F U - AutoBraille v1.1A - SET ???
  3259.     AH = FBh
  3260.     AL = 2Bh-34h
  3261.     BX = ???
  3262. --------a-2FFB35-----------------------------
  3263. INT 2F U - AutoBraille v1.1A - SET ???
  3264.     AX = FB35h
  3265.     BL = ???
  3266. --------a-2FFB36-----------------------------
  3267. INT 2F U - AutoBraille v1.1A - SET ???
  3268.     AX = FB36h
  3269.     BL = ???
  3270. --------a-2FFB37-----------------------------
  3271. INT 2F U - AutoBraille v1.1A - SET ???
  3272.     AX = FB37h
  3273.     BL = ???
  3274. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  3275. --------E-2FFB42BX0001-----------------------
  3276. INT 2F PU - Borland C++ DPMILOAD.EXE - INSTALLATION CHECK???
  3277.     AX = FB42h
  3278.     BX = 0001h
  3279. Return: AX = version number??? (AL=major, AH=minor)
  3280.     CX = next-selector increment
  3281. ---BC2.0---
  3282.     ES:BX -> 80-byte buffer for ???
  3283.     DX = DPMI version
  3284. ---BC3.0---
  3285.     BX = ??? (0000h)
  3286.     DX = ???
  3287.     ES:SI -> list of valid selectors ???
  3288. Notes:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  3289.       as version 1.000, while the version distributed with BC++ 3.0
  3290.       identifies itself as version 1.0; the former is 10864 bytes, the
  3291.       latter 22180 bytes.  The BC2.0 version is a DPMI loader, while
  3292.       the BC3.0 version also adds a DPMI host and DOS extender
  3293.     the BC++ 2.0 version displays an error message if called with BX
  3294.       values other than 0001h-0008h
  3295. SeeAlso: AX=1687h,AX=FB42h/BX=1001h,AX=FB43h
  3296. --------E-2FFB42BX0002-----------------------
  3297. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ALLOCATE MEMORY
  3298.     AX = FB42h
  3299.     BX = 0002h
  3300.     CX = size in bytes
  3301.     DX = bit flags
  3302.         bit 2: set to allocate DOS memory, clear for DPMI memory
  3303.     SI = selector of descriptor to be modified to access allocated memory
  3304.     DI = selector of a second descriptor to be modified
  3305. Return: AX = ??? or 0000h on error
  3306.     CX:DX = linear base address of DPMI memory block
  3307.     SI:DI = handle for DPMI memory block or FFFFh:FFFFh
  3308.     ???
  3309. Note:    two segment descriptors may be set if a code and an aliased data
  3310.       segment are required; if only one descriptor is needed, SI should
  3311.       equal DI on entry
  3312. BUG:    when allocating DOS memory, the code computes the linear address by
  3313.       multiplying the segment number by 4 rather than shifting by 4
  3314. SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h,INT 31/AX=0501h
  3315. --------E-2FFB42BX0002-----------------------
  3316. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ALLOCATE MEMORY
  3317.     AX = FB42h
  3318.     BX = 0002h
  3319.     ES:SI -> memory block info (see below)
  3320. Return: ???
  3321. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  3322.       as version 1.000, while the version distributed with BC++ 3.0
  3323.       identifies itself as version 1.0; the former is 10864 bytes, the
  3324.       latter 22180 bytes.
  3325. SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h,INT 31/AX=0501h
  3326.  
  3327. Format of memory block info:
  3328. Offset    Size    Description
  3329.  00h    WORD    flags
  3330.         bit 0: set if data segment rather than code segment
  3331.         bit 1: information valid
  3332.         bit 2: set if DOS memory block rather than DPMI memory block
  3333.         bit 4: ???
  3334.         bit 15: set if no LDT selectors for memory block???
  3335.  02h    DWORD    block size in bytes
  3336. ---DPMI memory block---
  3337.  06h    DWORD    DPMI memory block handle
  3338. ---DOS memory block---
  3339.  06h    WORD    real-mode segment of memory block
  3340.  08h    WORD    selector of memory block
  3341. ---
  3342.  0Ah    DWORD    linear address of memory
  3343.  0Eh    WORD    memory operation error code
  3344.         0008h no more free LDT descriptors
  3345. ---if flags bit 0 clear---
  3346.  10h    WORD    code segment selector for memory block or 0000h or FFFFh
  3347.  12h    WORD    data alias selector for memory block or 0000h or FFFFh
  3348. ---if flags bit 0 set---
  3349.  10h    WORD    data segment selector for memory block or 0000h or FFFFh
  3350.  12h    WORD    unused???
  3351. --------E-2FFB42BX0003-----------------------
  3352. INT 2F PU - Borland C++ DPMILOAD.EXE - GET AVAILABLE MEMORY
  3353.     AX = FB42h
  3354.     BX = 0003h
  3355. Return: DX:AX = size of largest free block in paragraphs
  3356.         0000h:0000h on error (BC3.0 version only)
  3357. Note:    AX and DX are destroyed on error, but no other error indicator is
  3358.       returned, under the BC++ 2.0 version of DPMILOAD
  3359. SeeAlso: AX=FB42h/BX=0002h
  3360. --------E-2FFB42BX0004-----------------------
  3361. INT 2F PU - Borland C++ DPMILOAD.EXE - LOAD PROTECTED-MODE EXECUTABLE???
  3362.     AX = FB42h
  3363.     BX = 0004h
  3364.     DS:DX -> ASCIZ filename of protected-mode executable
  3365. Return: CX = selector of ??? or 0000h
  3366. ---BC3.0---
  3367.     DX = status (0000h,FFF4h,others???) (see below)
  3368. Note:    the filename may also be terminated by a CR rather than a NUL under the
  3369.       BC++ 3.0 version of DPMILOAD
  3370.  
  3371. Values for status:
  3372.  0000h    successful
  3373.  0001h    ??? failure
  3374.  0002h    invalid selector
  3375.  0004h    unknown error
  3376.  0008h    no more LDT descriptors available???
  3377.  FFDEh    unable to set descriptor
  3378.  FFDFh    unable to get segment base address
  3379.  FFE0h    ???
  3380.  FFF2h    invalid parameter value
  3381.  FFF4h    component of filename too long (name not in 8.3 format)
  3382.  FFF5h    pathname too long (>79 chars)
  3383.  FFF6h    ???
  3384.  FFF8h    ???
  3385.  FFF9h    index out of range
  3386.  FFFAh    ???
  3387.  FFFCh    invalid access to code segment???
  3388.  FFFEh    ???
  3389.  FFFFh    general error
  3390. --------E-2FFB42BX0005-----------------------
  3391. INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NAME
  3392.     AX = FB42h
  3393.     BX = 0005h
  3394.     CX = selector of DPMILOAD data (see below)
  3395.     DS:DX -> ASCIZ or CR-terminated name of ??? (case ignored)
  3396. Return: DX = status (see AX=FB42h/BX=0004h)
  3397.         0000h successful
  3398.         AX:BX -> ??? FAR function (called with two words on top of stk)
  3399.         else
  3400.         BX destroyed
  3401. SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=000Eh
  3402.  
  3403. Format of DPMILOAD data:
  3404. Offset    Size    Description
  3405.  00h 12 BYTEs    ???
  3406.  0Ch    WORD    ??? bit flags
  3407.  0Eh 14 BYTEs    ???
  3408.  1Ch    WORD    number of memory control records
  3409.  1Eh 25 BYTEs    ???
  3410.  37h    BYTE    ??? bit flags
  3411.         bit 4: data valid???
  3412.  38h  4 BYTEs    ???
  3413.  3Ch    WORD    ???
  3414.  3Eh 12 BYTEs    ???
  3415.  46h    BYTE    ??? counter
  3416.  47h    BYTE    ???
  3417.  48h    BYTE    ???
  3418.  49h    BYTE    ???
  3419.  4Ah    WORD    ???
  3420.  4Ch  2 BYTEs    ???
  3421.  4Eh    WORD    offset of array of 64-byte memory control records
  3422.  52h    WORD    offset of name list (see below)
  3423.  54h  4 BYTEs    ???
  3424.  58h    WORD    offset of array of 6-byte objects
  3425.  5Ah  8 BYTEs    ???
  3426.  62h  9 BYTEs    ASCIZ name for ???
  3427.  6Bh  9 BYTEs    ASCIZ name for ???
  3428.     ???
  3429.  
  3430. Format of name list entry [array]:
  3431. Offset    Size    Description
  3432.  00h    BYTE    length of name (00h if end of array)
  3433.  01h  N BYTEs    name
  3434.  N+1    WORD    1-based index into array of unknown 6-byte objects
  3435.  
  3436. Format of 6-byte objects:
  3437. Offset    Size    Description
  3438.  00h    BYTE    ???
  3439.  01h    BYTE    ???
  3440.  02h    BYTE    ???
  3441.  03h    BYTE    1-based index of memory control record
  3442.  04h    WORD    ???
  3443.  
  3444. Format of memory control record:
  3445. Offset    Size    Description
  3446.  00h 20 BYTEs    memory block info (see AX=FB42h/BX=0002h)
  3447.  14h  6 BYTEs    ???
  3448.  1Ah    BYTE    ???
  3449.  1Bh  2 BYTEs    ???
  3450.  1Dh    BYTE    ??? bit flags
  3451.  1Eh 14 BYTEs    ???
  3452.  2Ch    DWORD    pointer to ??? memory control record or 0000h:0000h
  3453.  30h    DWORD    pointer to ??? memory control record or 0000h:0000h
  3454.  34h    DWORD    pointer to next??? memory control record or 0000h:0000h
  3455.  38h    DWORD    pointer to prev??? memory control record or 0000h:0000h
  3456.  3Ch  4 BYTEs    ???
  3457. Note:    the pointers at offsets 2Ch and 30h form a doubly-linked list, as do
  3458.       the pointers at offsets 34h and 38h
  3459. --------E-2FFB42BX0006-----------------------
  3460. INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NUMBER
  3461.     AX = FB42h
  3462.     BX = 0006h
  3463.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  3464.     DX = 1-based index into array of ??? 6-byte objects
  3465. Return: DX = status (see AX=FB42h/BX=0004h)
  3466.         0000h successful
  3467.         AX:BX -> ??? FAR function (called with two words on top of stk)
  3468.         else
  3469.         BX destroyed
  3470. SeeAlso: AX=FB42h/BX=0005h,AX=FB42h/BX=000Eh
  3471. --------E-2FFB42BX0007-----------------------
  3472. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ???
  3473.     AX = FB42h
  3474.     BX = 0007h
  3475.     CX = selector of ???
  3476. Return: ???
  3477. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  3478.       as version 1.000, while the version distributed with BC++ 3.0
  3479.       identifies itself as version 1.0; the former is 10864 bytes, the
  3480.       latter 22180 bytes.
  3481. --------E-2FFB42BX0007-----------------------
  3482. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3483.     AX = FB42h
  3484.     BX = 0007h
  3485.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  3486.     ???
  3487. Return: DX = status (see AX=FB42h/BX=0004h)
  3488.         0000h successful    
  3489.         AX = ???
  3490. --------E-2FFB42BX0008-----------------------
  3491. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - FREE MEMORY BLOCK
  3492.     AX = FB42h
  3493.     BX = 0008h
  3494.     CX = bit flags
  3495.         bit 2: set if DPMI memory, clear if DOS memory
  3496.     DX = selector of DOS memory block
  3497.     SI:DI = handle of DPMI memory block
  3498. Return: DX = 0000h on error, unchanged if succcessful
  3499. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  3500.       as version 1.000, while the version distributed with BC++ 3.0
  3501.       identifies itself as version 1.0; the former is 10864 bytes, the
  3502.       latter 22180 bytes.
  3503. SeeAlso: AX=FB42h/BX=0002h
  3504. --------E-2FFB42BX0008-----------------------
  3505. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE MEMORY BLOCK
  3506.     AX = FB42h
  3507.     BX = 0008h
  3508.     ES:SI -> memory block info (see AX=FB42h/BX=0002h"3.0")
  3509. Return: ???
  3510. SeeAlso: AX=FB42h/BX=0009h
  3511. --------E-2FFB42BX0009-----------------------
  3512. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - RESIZE MEMORY BLOCK
  3513.     AX = FB42h
  3514.     BX = 0009h
  3515.     ES:SI -> memory block info (see AX=FB42h/BX=0002h"3.0")
  3516.     ???
  3517. Return: ???
  3518. SeeAlso: AX=FB42h/BX=0008h"3.0"
  3519. --------E-2FFB42BX000A-----------------------
  3520. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - INIT DPMI HOST AND SPAWN SUBSHELL
  3521.     AX = FB42h
  3522.     BX = 000Ah
  3523.     CX = 0001h
  3524.     DX = ???
  3525.     SI = ???
  3526. Return: after user exits subshell
  3527. Notes:    this call is used by DPMIRES; unlike most of the DPMILOAD calls, this
  3528.       function is not available in protected mode.
  3529.     the BC2.0 version of DPMILOAD is purely a DPMI loader, while the BC3.0
  3530.       version also adds a DPMI host and DOS extender.
  3531. SeeAlso: AX=FB42h/BX=0004h,AX=FB42h/BX=0015h
  3532. --------E-2FFB42BX000B-----------------------
  3533. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - UNUSED
  3534.     AX = FB42h
  3535.     BX = 000Bh
  3536. --------E-2FFB42BX000C-----------------------
  3537. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE DESCRIPTORS FOR MEMORY BLOCK???
  3538.     AX = FB42h
  3539.     BX = 000Ch ???
  3540.     ES:SI -> memory block info ??? (see AX=FB42h/BX=0002h"3.0")
  3541. Return: DX = status???
  3542. SeeAlso: AX=FB42h/BX=000Fh
  3543. --------E-2FFB42BX000D-----------------------
  3544. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SIMULATE REAL MODE INTERRUPT
  3545.     AX = FB42h
  3546.     BX = 000Dh
  3547.     CX = number of words to copy from protected-mode to real mode stack
  3548.     DL = interrupt number
  3549.     DH = flags
  3550.         bit 0: reset the interrupt controller and A20 line
  3551.     ES:DI -> real-mode call structure (see INT 31/AX=0300h)
  3552. Return: CX = status
  3553.         0000h successful
  3554.         0001h failed
  3555. SeeAlso: INT 31/AX=0300h
  3556. --------E-2FFB42BX000E-----------------------
  3557. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ???
  3558.     AX = FB42h
  3559.     BX = 000Eh
  3560.     DS:DX -> ASCIZ or CR-terminated name of ???
  3561. Return: CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h) corresponding to
  3562.         name, 0000h on error
  3563. SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=001Fh
  3564. --------E-2FFB42BX000F-----------------------
  3565. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - REALLOCATE LDT DESCRPS TO MEMBLK???
  3566.     AX = FB42h
  3567.     BX = 000Fh
  3568.     ES:SI -> memory block info (see AX=FB42h/BX=0002h"3.0")
  3569. Return: ???
  3570. SeeAlso: AX=FB42h/BX=000Ch
  3571. --------E-2FFB42BX0010-----------------------
  3572. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SEGMENT TO SELECTOR
  3573.     AX = FB42h
  3574.     BX = 0010h
  3575.     DX = segment number
  3576. Return: CX = status (see also AX=FB42h/BX=0004h)
  3577.         0000h successful
  3578.         DX = selector number for descriptor
  3579.         0008h failed
  3580. SeeAlso: AX=FB42h/BX=0023h
  3581. --------E-2FFB42BX0011-----------------------
  3582. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3583.     AX = FB42h
  3584.     BX = 0011h
  3585.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  3586.     ???
  3587. Return: DX = status (see also AX=FB42h/BX=0004h)
  3588.         0000h successful
  3589.         AX:BX -> ??? name
  3590.         0002h invalid selector
  3591.         FFFEh ??? error
  3592. --------E-2FFB42BX0012-----------------------
  3593. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3594.     AX = FB42h
  3595.     BX = 0012h
  3596.     CX = selector for ???
  3597. Return: CX = selector for ???
  3598. --------E-2FFB42BX0013-----------------------
  3599. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3600.     AX = FB42h
  3601.     BX = 0013h
  3602.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  3603.     DX = 1-based index of ???
  3604. Return: CX = status (see also AX=FB42h/BX=0004h)
  3605.         0000h successful
  3606.         BX = ??? or 0000h
  3607.         0002h invalid selector
  3608.         FFF9h ??? error
  3609. --------E-2FFB42BX0014-----------------------
  3610. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3611.     AX = FB42h
  3612.     BX = 0014h ???
  3613.         CX = 0001h
  3614.         Return: BX = 0000h
  3615. Note:    unlike most of the DPMILOAD functions, this call is available only in
  3616.       real or V86 mode
  3617. SeeAlso: AX=FB42h/BX=000Ah
  3618. --------E-2FFB42BX0015-----------------------
  3619. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - UNINSTALL
  3620.     AX = FB42h
  3621.     BX = 0015h
  3622.     CX = 0001h
  3623. Return: ???
  3624. Note:    unlike most of the DPMILOAD functions, this call is available only in
  3625.       real or V86 mode
  3626. SeeAlso: AX=FB42h/BX=000Ah
  3627. --------E-2FFB42BX0016-----------------------
  3628. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  3629.     AX = FB42h
  3630.     BX = 0016h
  3631.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  3632. Return: DX = status (see also AX=FB42h/BX=0004h)
  3633.         0000h successful
  3634.         CX = ???
  3635. --------E-2FFB42BX0017-----------------------
  3636. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3637.     AX = FB42h
  3638.     BX = 0017h
  3639.     CX = ???
  3640.     DX = ???
  3641.     ???
  3642. Return: DX = status (0000h,0001h) (see below)
  3643. --------E-2FFB42BX0018-----------------------
  3644. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET ???
  3645.     AX = FB42h
  3646.     BX = 0018h
  3647.     CX = ???
  3648. --------E-2FFB42BX0019-----------------------
  3649. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3650.     AX = FB42h
  3651.     BX = 0019h
  3652.     CX = selector for ???
  3653.     ???
  3654. Return: DX = status (see also AX=FB42h/BX=0004h)
  3655.         0000h successful
  3656.         CX = selector for ???
  3657. --------E-2FFB42BX001A-----------------------
  3658. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3659.     AX = FB42h
  3660.     BX = 001Ah
  3661.     CX = selector for ???
  3662.     ???
  3663. Return: DX = status (see also AX=FB42h/BX=0004h)
  3664.         0000h successful
  3665.         0004h failed
  3666.     CX:BX -> ???
  3667. --------E-2FFB42BX001B-----------------------
  3668. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3669.     AX = FB42h
  3670.     BX = 001Bh
  3671.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  3672.     DX = offset of ???
  3673. Return: DX = status (see also AX=FB42h/BX=0004h)
  3674.         0000h successful
  3675.         BX = selector for ???
  3676.         CX = selector for ???
  3677.         0002h invalid selector
  3678. --------E-2FFB42BX001C-----------------------
  3679. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3680.     AX = FB42h
  3681.     BX = 001Ch
  3682.     ES = selector for DPMILOAD data (see AX=FB42h/BX=0005h)
  3683.     CX = 1-based index of ???
  3684.     DX = 1-based index of ???
  3685. Return: DX = status (0000h,0002h,FFF9h) (see AX=FB42h/BX=0004h)
  3686. --------E-2FFB42BX001D-----------------------
  3687. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  3688.     AX = FB42h
  3689.     BX = 001Dh
  3690. Return: CX:DX = ???
  3691. --------E-2FFB42BX001E-----------------------
  3692. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3693.     AX = FB42h
  3694.     BX = 001Eh
  3695.     CX = ???
  3696.     ???
  3697. Return: DX = status (see also AX=FB42h/BX=0004h)
  3698.         0000h successful
  3699.         FFF7h ??? error
  3700.     CX:BX -> ???
  3701. --------E-2FFB42BX001F-----------------------
  3702. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ???
  3703.     AX = FB42h
  3704.     BX = 001Fh
  3705.     DS:DX -> 8-character name of ???
  3706.     ???
  3707. Return: CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h) for ???
  3708.         0000h on error
  3709. SeeAlso: AX=FB42h/BX=000Eh
  3710. --------E-2FFB42BX0020-----------------------
  3711. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION???
  3712.     AX = FB42h
  3713.     BX = 0020h
  3714. Return: DX = ??? (always 0000h)
  3715. --------E-2FFB42BX0021-----------------------
  3716. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROCESSOR EXCEPTION HANDLER VECT
  3717.     AX = FB42h
  3718.     BX = 0021h
  3719.     CL = exception number (00h-1Fh)
  3720. Return: DX = status (see also AX=FB42h/BX=0004h)
  3721.         0000h successful
  3722.         AX:BX = selector:offset of handler
  3723.         FFF2h unable to get exception handler vector
  3724. SeeAlso: AX=FB42h/BX=0022h,AX=FB42h/BX=0024h,INT 31/AX=0202h
  3725. --------E-2FFB42BX0022-----------------------
  3726. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROCESSOR EXCEPTION HANDLER VECT
  3727.     AX = FB42h
  3728.     BX = 0022h
  3729.     CL = exception number (00h-1Fh)
  3730.     SI:DX = selector:offset of new handler
  3731. Return: DX = status (0000h,0004h,FFF2h) (see AX=FB42h/BX=0004h)
  3732. SeeAlso: AX=FB42h/BX=0021h,AX=FB42h/BX=0025h,INT 31/AX=0203h
  3733. --------E-2FFB42BX0023-----------------------
  3734. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SELECTOR TO SEGMENT NUMBER
  3735.     AX = FB42h
  3736.     BX = 0023h
  3737.     CX = selector
  3738. Return: DX = status (see also AX=FB42h/BX=0004h)
  3739.         0000h successful
  3740.         CX = real-mode segment number
  3741.         FFF2h descriptor has invalid base address for real-mode segment
  3742. SeeAlso: AX=FB42h/BX=0010h
  3743. --------E-2FFB42BX0024-----------------------
  3744. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROTECTED-MODE INTERRUPT VECTOR
  3745.     AX = FB42h
  3746.     BX = 0024h
  3747.     CL = interrupt number
  3748. Return: DX = status (0000h) (see also AX=FB42h/BX=0004h)
  3749.     AX:BX = selector:offset of handler
  3750. SeeAlso: AX=FB42h/BX=0025h,INT 31/AX=0204h
  3751. --------E-2FFB42BX0025-----------------------
  3752. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROTECTED-MODE INTERRUPT VECTOR
  3753.     AX = FB42h
  3754.     BX = 0025h
  3755.     CL = interrupt number
  3756.     SI:DX = selector:offset of new handler
  3757. Return: DX = status (0000h,0004h,FFF2h) (see AX=FB42h/BX=0004h)
  3758. SeeAlso: AX=FB42h/BX=0024h,INT 31/AX=0205h
  3759. --------E-2FFB42BX0026-----------------------
  3760. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3761.     AX = FB42h
  3762.     BX = 0026h
  3763.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  3764.     DX = 1-based index of ???
  3765.     ???
  3766. Return: DX = status (0000h,0002h,FFF9h) (see AX=FB42h/BX=0004h)
  3767.         0000h successful
  3768.         BX = offset of ??? within data structure
  3769. --------E-2FFB42BX0027-----------------------
  3770. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  3771.     AX = FB42h
  3772.     BX = 0027h
  3773.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  3774.     DX = offset of ???
  3775. Return: DX = status (see also AX=FB42h/BX=0004h)
  3776.         0000h successful
  3777.         BX = ???
  3778. --------E-2FFB42BX0080-----------------------
  3779. INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE
  3780.     AX = FB42h
  3781.     BX = 0080h
  3782.     ???
  3783. Return: AX = ???
  3784.     ???
  3785. --------E-2FFB42BX0081-----------------------
  3786. INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE
  3787.     AX = FB42h
  3788.     BX = 0081h
  3789.     ???
  3790. Return: AX = ???
  3791.     ???
  3792. --------E-2FFB42BX1001-----------------------
  3793. INT 2F U - Borland RTM.EXE 1.0 - INSTALLATION CHECK???
  3794.     AX = FB42h
  3795.     BX = 1001h
  3796. Return: BX = 0000h
  3797. SeeAlso: AX=FB42h/BX=0001h,AX=FB42h/BX=1002h,AX=FB42h/BX=1003h
  3798. --------E-2FFB42BX1002-----------------------
  3799. INT 2F U - Borland RTM.EXE 1.0 - ???
  3800.     AX = FB42h
  3801.     BX = 1002h
  3802.     ???
  3803. Return: ???
  3804. SeeAlso: AX=FB42h/BX=1001h
  3805. --------E-2FFB42BX1003-----------------------
  3806. INT 2F U - Borland RTM.EXE 1.0 - ???
  3807.     AX = FB42h
  3808.     BX = 1003h
  3809.     ???
  3810. Return: ???
  3811. SeeAlso: AX=FB42h/BX=1001h
  3812. --------E-2FFB43-----------------------------
  3813. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION
  3814.     AX = FB43h
  3815.     BX = subfunction (at least 0000h-000Eh)
  3816. Notes:    this function is only present in protected mode; it does nothing but
  3817.       an immediate IRET
  3818.     DPMILOAD.EXE itself calls various subfunctions:
  3819.         subfunction 0004h is called with CX=selector of ???, DI=selector
  3820.         of DPMILOAD data
  3821.         subfunction 0008h is called with CX=selector of DPMILOAD data
  3822. SeeAlso: AX=FB42h/BX=0001h
  3823. --------a-2FFB64-----------------------------
  3824. INT 2F U - AutoBraille v1.1A - GET ???
  3825.     AX = FB64h
  3826. Return: AX = ??? (0006h seen)
  3827. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  3828. --------E-2FFBA1BX0081-----------------------
  3829. INT 2F U - TKERNEL (Borland DOS extender) - INSTALLATION CHECK
  3830.     AX = FBA1h
  3831.     BX = 0081h
  3832.     ES:DI -> 16-byte buffer
  3833. Return: if installed, first four bytes of ES:DI buffer are "IABH"
  3834. Program: TKERNEL is a licensed version of AI Architects/Ergo's OS/x86.
  3835. Note:    TKERNEL was present only in Borland C++ 2.0; with version 3.0, the DOS
  3836.       extender was moved into DPMILOAD.
  3837. SeeAlso: AH=A1h,AX=F100h,AX=FBA1h/BX=0082h,AX=FBA1h/BX=0084h,INT 15/AX=BF02h 
  3838. SeeAlso: INT 21/AX=4403h"TKERNEL"
  3839. --------E-2FFBA1BX0082-----------------------
  3840. INT 2F U - TKERNEL (Borland DOS extender) - GET ENTRY POINT
  3841.     AX = FBA1h
  3842.     BX = 0082h
  3843.     ES:DI -> response buffer (see below)
  3844. Return: ES:DI buffer filled
  3845. SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h
  3846.  
  3847. Format of response buffer:
  3848. Offset    Size    Description
  3849.  00h  4 BYTEs    signature "IABH"
  3850.  04h    DWORD    pointer to FAR extender entry point
  3851.  
  3852. Call entry point with:
  3853.     AX = function number
  3854.         0000h initialize???
  3855.         STACK:    WORD  ???
  3856.         Return: AX = status???
  3857.             STACK unchanged
  3858.         0001h get version???
  3859.         Return: AX = 0200h for v2.0.34
  3860.         0002h get ???
  3861.         Return: AX = ??? (011Eh or 0182h seen)
  3862.         0003h load protected-mode executable
  3863.         STACK:    DWORD -> ASCIZ filename of executable
  3864.             DWORD    ???
  3865.             DWORD -> program arguments (counted string plus CR)
  3866.             DWORD -> environment for protected-mode executable
  3867.                 (terminated with two consecutive NULs)
  3868.             DWORD -> WORD buffer for ???
  3869.         Return:    AX = status???
  3870.             STACK unchanged
  3871.         0004h get descriptor
  3872.         STACK:    WORD    selector for which to get descriptor
  3873.             WORD    segment number (when running in real mode)
  3874.             DWORD -> buffer for descriptor
  3875.         Return: CF clear if successful
  3876.                 buffer filled
  3877.             CF set on error
  3878.                 AX destroyed???
  3879.             STACK unchanged
  3880.         0005h ???
  3881.         STACK:    WORD    selector for ???
  3882.             WORD    subfunction number???
  3883.                 0000h run previously-loaded program???
  3884.                 0001h ??? (similar to 0000h)
  3885.                 0002h
  3886.                 0003h
  3887.                 0005h ??? (similar to 0000h and 0001h)
  3888.         Return: AX = status???
  3889.             STACK unchanged
  3890.         0006h ???
  3891.         STACK:    WORD ???
  3892.             DWORD -> WORD (call) max iterations of ???
  3893.                       (return) remaining iterations
  3894.         Return: AX = ???
  3895.             STACK unchanged
  3896.         0007h unused
  3897.         Return: AX = 0001h
  3898.         0008h unused
  3899.         Return: AX = 0001h
  3900.         0009h copy protected-mode memory into conventional memory
  3901.         STACK:    WORD    selector for source segment
  3902.             WORD    segment of source if in real mode???
  3903.             DWORD    offset of source
  3904.             WORD    number of bytes to copy
  3905.             DWORD -> low-memory destination
  3906.         Return: AX = status
  3907.             STACK unchanged
  3908.         000Ah copy conventional memory into protected-mode memory
  3909.         STACK:    WORD    selector for destination segment
  3910.             WORD    segment of destination if in real mode???
  3911.             DWORD    offset of destination
  3912.             WORD    number of bytes to copy
  3913.             DWORD -> low-memory source
  3914.         Return: AX = status
  3915.             STACK unchanged
  3916.         000Bh get ??? pointers
  3917.         STACK:    WORD desired pointer
  3918.                 0000h get ???
  3919.                 0002h get protected-mode CR3
  3920.                 0003h get 4K page table buffer pointer
  3921.                 else Return: DX:AX = FFFFh:FFFFh
  3922.         Return: DX:AX = requested pointer
  3923.             STACK unchanged
  3924.         000Ch set ??? pointers
  3925.         STACK:    WORD desired pointer
  3926.                 0000h set ???
  3927.                 0002h set protected-mode CR3
  3928.                 0003h set 4K page table buffer pointer
  3929.                 else ignore
  3930.             DWORD new value for pointer
  3931.         Return: STACK unchanged
  3932.         000Dh get ??? pointers
  3933.         STACK:    WORD desired pointer
  3934.                 0000h get ???
  3935.                 0001h get ???
  3936.                 0002h get ???
  3937.                 0003h get ???
  3938.                 0004h get ???
  3939.                 0005h get ???
  3940.                 0006h get ???
  3941.                 0007h get ???
  3942.                 else Return: DX:AX = FFFFh:FFFFh
  3943.         Return: DX:AX = desired pointer
  3944.             STACK unchanged
  3945.         000Eh set ??? pointer
  3946.         STACK:    WORD desired pointer
  3947.                 0000h set ???
  3948.                 0001h set ???
  3949.                 0002h set ???
  3950.                 0003h set ???
  3951.                 0004h set ???
  3952.                 0005h set ???
  3953.                 0006h set ???
  3954.                 0007h set ???
  3955.                 else Return: DX:AX = FFFFh:FFFFh
  3956.         Return: STACK unchanged
  3957.         000Fh get ???
  3958.         Return: AX = ??? (seen 0008h)
  3959.         0010h get ???
  3960.         Return: AX = ???
  3961.         0011h determine whether selector is valid
  3962.         STACK:    WORD    possible selector
  3963.         Return: AX = selector or 0000h if invalid
  3964.             STACK unchanged
  3965.         0012h get physical address
  3966.         STACK:    WORD    selector for desired segment
  3967.             WORD    segment number if in real mode
  3968.             DWORD    offset within segment
  3969.         Return: DX:AX = 32-bit physical address or 00000000h on error
  3970.             BX destroyed
  3971.             STACK unchanged
  3972.         0013h ???
  3973.         Note:    normally jumps to code for function 0012h
  3974.         0014h copy protected-mode memory to conventional memory, with ???
  3975.         STACK:    WORD    selector for source segment
  3976.             WORD    segment of source if in real mode???
  3977.             DWORD    offset of source
  3978.             WORD    number of bytes to copy
  3979.             DWORD -> low-memory destination
  3980.         Return: AX = status???
  3981.             STACK unchanged
  3982.         0015h copy conventional memory to protected-mode memory, with ???
  3983.         STACK:    WORD    selector for destination segment
  3984.             WORD    segment of destination if in real mode???
  3985.             DWORD    offset of destination
  3986.             WORD    number of bytes to copy
  3987.             DWORD -> low-memory source
  3988.         Return: AX = status???
  3989.             STACK unchanged
  3990.         0016h set ??? pointer
  3991.         STACK:    WORD    unused
  3992.             DWORD -> ??? or 0000h:0000h
  3993.         Return: AX = 0000h
  3994.             STACK unchanged
  3995.         0017h allocate real-mode procedure???
  3996.         STACK:    DWORD    ASCIZ name of procedure
  3997.             DWORD ???
  3998.             DWORD    address of subroutine to invoke
  3999.         Return: AX = status
  4000.                 0032h procedure by that name exists
  4001.                 0033h no more real-mode procedures available
  4002.             DX destroyed
  4003.             STACK unchanged
  4004.         0018h unused
  4005.         Return: AX = 0001h
  4006.         0019h get parameter block
  4007.         Return: DX:AX -> parameter block (format unknown at this time,
  4008.                 but 92h bytes)
  4009.                 (preceded by signature "!!PARAM-BLOCK!!")
  4010.         001Ah get ???
  4011.         Return: AX = ??? (0148h seen)
  4012.         001Bh free real-mode procedure???
  4013.         STACK:    DWORD -> ASCIZ name of procedure
  4014.         Return: ???
  4015.             STACK unchanged
  4016.         001Ch check whether packets from protected mode task pending
  4017.         Return: AX = 0001h if packets pending, 0000h if not
  4018.         001Dh set ???
  4019.         STACK:    DWORD ??? or 0000h:0000h
  4020.         Return: AX,BX destroyed
  4021.             STACK unchanged
  4022.         001Eh ???
  4023.         STACK:    WORD ??? (high byte ignored)
  4024.             DWORD -> data structure (see below)
  4025.         Return: AX,BX,CX,DX destroyed
  4026.             data structure updated
  4027.             STACK unchanged
  4028.         Format of data structure
  4029.         Offset    Size    Description
  4030.          00h  2 BYTEs    unused
  4031.          02h    WORD    ???
  4032.          04h    WORD    ???
  4033.          06h    WORD    ???
  4034.          08h  2 BYTEs    unused
  4035.          0Ah    WORD    ???
  4036.          0Ch    WORD    (call) ???
  4037.                 (return) offset of this data structure (BUG?)
  4038.         001Fh set ???
  4039.         STACK:    WORD ??? (set to 0001h if zero)
  4040.         Return: AX destroyed
  4041.             STACK unchanged
  4042.         0020h ???
  4043.         STACK:    DWORD -> ??? (8 bytes of data)
  4044.         Return: AX = ???
  4045.             STACK unchanged
  4046.         0021h ???
  4047.         STACK:    DWORD -> ??? (8 bytes of data)
  4048.             WORD    ???
  4049.             WORD    ???
  4050.         Return: AX = ???
  4051.             STACK unchanged
  4052.         0022h ???
  4053.         STACK:    DWORD -> ??? (8 bytes of data)
  4054.             DWORD -> 4-byte buffer for results
  4055.         Return: AX = ???
  4056.             STACK unchanged
  4057.         0023h ???
  4058.         STACK:    DWORD -> ??? (8 bytes of data)
  4059.         Return: AX = ???
  4060.             STACK unchanged
  4061.         0024h set ???
  4062.         STACK:    WORD ???
  4063.         Return: AX destroyed
  4064.             STACK unchanged
  4065.         0025h get ???
  4066.         Return: AX = ??? (value set with func 0024h)
  4067.         0026h BUG: jumps to hyperspace due to fencepost error
  4068.         FFFFh set DOS memory management functions
  4069.         BX:SI -> FAR routine for allocating DOS memory
  4070.             (called with AH=48h,BX=number of paragraphs to alloc;
  4071.              returns CF clear, AX=segment of allocated memory, or
  4072.                  CF set on error)
  4073.         CX:DI -> FAR routine for freeing DOS memory
  4074.             (called with AH=49h,ES=segment of block to free;
  4075.              returns CF set on error,AX=error code)
  4076.         Note: each of these pointers normally points at INT 21/RETF
  4077.         other Return: AX = 0001h
  4078. Note:    BX may be destroyed by any of the API calls
  4079. --------E-2FFBA1BX0084-----------------------
  4080. INT 2F U - TKERNEL (Borland DOS extender) - UNINSTALL
  4081.     AX = FBA1h
  4082.     BX = 0084h
  4083.     ES:DI -> response buffer (see below)
  4084. Return: ES:DI buffer filled
  4085. SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h
  4086.  
  4087. Format of response buffer:
  4088. Offset    Size    Description
  4089.  00h  4 BYTEs    signature "IABH"
  4090.  04h    WORD    success indicator
  4091.         0001h failed (INT 2F hooked by another program)
  4092.         unchanged if successful
  4093.  06h    WORD    segment of ???
  4094.  08h    WORD    segment of ??? memory block to free if nonzero
  4095.  0Ah    WORD    segment of ??? memory block to free if nonzero
  4096. --------s-2FFBFBES0000-----------------------
  4097. INT 2F U - SoundBlaster speech driver - INSTALLATION CHECK
  4098.     AX = FBFBh
  4099.     ES = 0000h
  4100. Return: ES nonzero if installed
  4101.         ES:BX -> entry point data structure (see below)
  4102. SeeAlso: INT 80/BX=0000h,INT F3"SoundBlaster"
  4103.  
  4104. Format of entry point data structure:
  4105. Offset    Size    Description
  4106.  00h  3 BYTEs    signature "FB "
  4107.  03h    BYTE    driver major version number???
  4108.  04h    DWORD    speech driver entry point
  4109.  08h 24 BYTEs    ???
  4110.  20h  ? BYTEs    data buffer for calling speech driver
  4111.  
  4112. Call driver entry point with:
  4113.     AL = function
  4114.         07h speak a string
  4115.         data buffer (see above) contains:
  4116.             BYTE  length of string
  4117.               N BYTEs string to speak
  4118. --------N-2FFE00BX4454-----------------------
  4119. INT 2F - PC-NFS ??? - INSTALLATION CHECK
  4120.     AX = FE00h
  4121.     BX = 4454h ("DT")
  4122.     CX = 4B52h ("KR")
  4123.     DX = 4E4Dh ("NM")
  4124. Return: AL = FFh if installed
  4125.        BX = 524Eh ("RM")
  4126.        CX = 4D44h ("MD")
  4127.        DX = 544Bh ("TK")
  4128. Note:    DV/X 1.10 DVPCNFS.DVR searches AH=FEh,FFh,C0h-FDh for a valid response
  4129. SeeAlso: AX=FE08h
  4130. --------N-2FFE00BX4454-----------------------
  4131. INT 2F - PC-NFS ??? - INSTALLATION CHECK
  4132.     AX = FE00h
  4133.     BX = 4454h ("DT")
  4134.     CX = 4B52h ("KR")
  4135.     DX = 544Dh ("TM")
  4136. Return: AL = FFh if installed
  4137.        BX = 5254h ("RT")
  4138.        CX = 4D44h ("MD")
  4139.        DX = 544Bh ("TK")
  4140. Note:    DV/X 1.10 DVPCNFS.DVR searches AH=FEh,FFh,C0h-FDh for a valid response
  4141. SeeAlso: AX=FE08h
  4142. --------U-2FFE00DI4E55-----------------------
  4143. INT 2F U - NORTON UTILITIES 5.0+ TSRs - INSTALLATION CHECK/STATUS REPORT
  4144.     AX = FE00h
  4145.     DI = 4E55h ("NU")
  4146.     SI = TSR identifier
  4147.         4346h ("CF") NCACHE-F (v5) / NCACHE (v6.0+)
  4148.         4353h ("CS") NCACHE-S (v5 only)
  4149.         4443h ("DC") DISKREET
  4150.         444Dh ("DM") DISKMON
  4151.         4653h ("FS") FILESAVE (v5) / EP (v6.0+)
  4152. Return: SI = TSR reply
  4153.         lowercase version of SI on entry (i.e. SI OR 2020h)
  4154.     AH = status
  4155.         00h installed but disabled internally
  4156.         01h installed and enabled
  4157.     AL = status
  4158.         00h    NCACHE-x or DISKREET installed
  4159.         01h FILESAVE / EP / DISKMON v6 installed
  4160.         45h    DISKMON v5 installed
  4161.     BX = length of *.INI file (DISKMON and FILESAVE/EP only) (see below)
  4162.     CX = segment of resident portion
  4163.         FFFFh if completely loaded high (NCACHE)
  4164. ---FILESAVE/EP---
  4165.     DL = ??? (apparently always 00h)
  4166. ---DISKMON---
  4167.     DX = ??? (apparently always 1AE6h [v5] / 1B86h [v6])
  4168. Note:    the value returned in CX is incorrect for NCACHE 6.00
  4169. SeeAlso: AX=FE01h,AX=FE02h,AX=FE03h,AX=FE04h,AX=FE05h
  4170.  
  4171. Format of DISKMON.INI file:
  4172. Offset    Size    Description
  4173. -6Ch 108 BYTEs    (in memory copy only)
  4174.         list of filenames which are always protected:
  4175.           IBMBIO.COM/IBMDOS.COM, IO.SYS/MSDOS.SYS, TBIOS.SYS/TDOS.SYS,
  4176.           MIO.SYS/IO.BIN, COMMAND.COM
  4177.  00h    BYTE    ??? always 01h
  4178.  01h    BYTE    disk light (00h off, 01h on)
  4179.  02h    BYTE    disk protection (00h off, 01h on)
  4180.  03h    BYTE    protected areas
  4181.         01h system area
  4182.         02h files
  4183.         03h system area and files
  4184.         04h entire disk
  4185.  04h    BYTE    floppy access (00h not allowed, 01h allowed)
  4186.  05h 27 BYTEs    filename extension list (9 entries)
  4187.         (lowercase, blank padded or = 000000h)
  4188.  20h 240 BYTEs    filename list (20 entries)
  4189.         (lowercase, name and extension blank padded, with '.')
  4190. Note:    CX:0508h -> copy in installed TSR (v5)
  4191.     CX:052Fh -> copy in installed TSR (v6)
  4192.  
  4193. Format of FILESAVE.INI / EP.INI file:
  4194. Offset    Size    Description
  4195.  00h 26 BITs    drive list (bit set: file protection on, cleared: off):
  4196.  00h    BYTE    drives    A: - H:
  4197.  01h    BYTE    drives    I: - P:
  4198.  02h    BYTE    drives    Q: - X:
  4199.  03h    BYTE    drives    Y: - Z:
  4200.  04h    BYTE    which files to protect
  4201.         00h all files
  4202.         01h all files with extension in list
  4203.         02h all files except those with extension in list
  4204.  05h 27 BYTEs    filename extension list (9 entries, uppercase, ASCIZ)
  4205.  20h    BYTE    include files with archive bit clear (00h no, 01h yes)
  4206.  21h    WORD    number of days after which files are purged (0 = never)
  4207.  23h    WORD    max kilobytes of erased file space to hold (0 = all)
  4208. Note:    CX:03D2h -> copy in installed TSR (v5.0)
  4209.     CX:03F5h -> copy in installed TSR (v6.0)
  4210. --------U-2FFE01DI4E55-----------------------
  4211. INT 2F U - NORTON UTILITIES 5.0+ TSRs - ENABLE
  4212.     AX = FE01h
  4213.     DI = 4E55h ("NU")
  4214.     SI = TSR identifier (see AX=FE00h)
  4215. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  4216.     AX = status
  4217.         0002h successful (DISKMON, FILESAVE, EP)
  4218.         FE00h successful (NCACHE-x, DISKREET)
  4219. Notes:    if the enable/disable calls are used on DISKMON or NCACHE-x, the status
  4220.       report generated by the programs still indicates the previous state,
  4221.       and DISKMON.INI is not updated
  4222.     apparently has no effect on DISKREET
  4223. SeeAlso: AX=FE00h,AX=FE02h
  4224. --------U-2FFE02DI4E55-----------------------
  4225. INT 2F U - NORTON UTILITIES 5.0+ TSRs - DISABLE
  4226.     AX = FE02h
  4227.     DI = 4E55h ("NU")
  4228.     SI = TSR identifier (see AX=FE00h)
  4229. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  4230.     AX = status
  4231.         0004h successful (DISKMON, FILESAVE)
  4232.         FE00h successful (NCACHE-x, DISKREET)
  4233. Note:    (see AX=FE01h)
  4234. SeeAlso: AX=FE00h,AX=FE01h
  4235. --------U-2FFE03DI4E55-----------------------
  4236. INT 2F U - NORTON UTILITIES 5.0+ TSRs - FLUSH BUFFERS
  4237.     AX = FE03h
  4238.     DI = 4E55h ("NU")
  4239.     SI = TSR identifier (see AX=FE00h)
  4240. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  4241.     AX = status
  4242.         0006h successful???
  4243. Notes:    only supported by DISKMON, FILESAVE, and NCACHE-x
  4244.     useful for flushing NCACHE before rebooting
  4245. SeeAlso: AX=FE00h,AX=FE10h
  4246. --------U-2FFE04DI4E55-----------------------
  4247. INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ???
  4248.     AX = FE04h
  4249.     DI = 4E55h ("NU")
  4250.     SI = TSR identifier (see AX=FE00h)
  4251. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  4252.     AX = status
  4253.         0008h successful???
  4254. SeeAlso: AX=FE00h
  4255. --------U-2FFE05DI4E55-----------------------
  4256. INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ???
  4257.     AX = FE05h
  4258.     DI = 4E55h ("NU")
  4259.     SI = TSR identifier (see AX=FE00h)
  4260. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  4261.     AX = status
  4262.         000Ah successful???
  4263. Note:    reportedly dangerous
  4264. SeeAlso: AX=FE00h
  4265. --------N-2FFE08-----------------------------
  4266. INT 2F - PC-NFS ??? - GET ???
  4267.     AX = FE08h
  4268. Return: ES:BX -> ???
  4269. Notes:    DV/X 1.10 DVPCNFS.DVR searches AH=FEh,FFh,C0h-FDh for a valid response
  4270.     both the driver responding to AX=FE00h/DX=4E4Dh and the one responding
  4271.       to AX=FE00h/DX=544Dh support this function
  4272. SeeAlso: AX=FE00h/BX=4454h
  4273. --------U-2FFE10DI4E55-----------------------
  4274. INT 2F U - NORTON UTILITIES 6.0 NCACHE - REBOOT
  4275.     AX = FE10h
  4276.     DI = 4E55h ("NU")
  4277.     SI = TSR identifier (see AX=FE00h)
  4278. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  4279.     AX = status
  4280. Note:    probably used to flush NCACHE buffers and reboot when Ctrl-Alt-Del is
  4281.       detected
  4282. SeeAlso: AX=FE03h
  4283. --------N-2FFF00-----------------------------
  4284. INT 2F - Topware Network Operating System - INSTALLATION CHECK
  4285.     AX = FF00h
  4286. Return: AL = 00h not installed, OK to install
  4287.        = 01h not installed, not OK to install
  4288.        = FFh installed
  4289. SeeAlso: AX=FF01h,INT 21/AH=FFh"Topware",INT 7A"Topware"
  4290. --------N-2FFF01-----------------------------
  4291. INT 2F - Topware Network Operating System - GET VERSION
  4292.     AX = FF01h
  4293. Return: AX = version
  4294. SeeAlso: AX=FF00h
  4295. --------D-30---------------------------------
  4296. INT 30 - (NOT A VECTOR!) - DOS 1+ - FAR JMP instruction for CP/M-style calls
  4297.    the CALL 5 entry point does a FAR jump to here
  4298. Note:    under DOS 2+, the instruction at PSP:0005 points two bytes too low in
  4299.       memory
  4300. SeeAlso: INT 21/AH=26h
  4301. --------D-31---------------------------------
  4302. INT 31 - overwritten by CP/M jump instruction in INT 30
  4303. --------E-310000-----------------------------
  4304. INT 31 P - DPMI 0.9+ - ALLOCATE LDT DESCRIPTORS
  4305.     AX = 0000h
  4306.     CX = number of descriptors to allocate
  4307. Return: CF clear if successful
  4308.         AX = base selector
  4309.     CF set on error
  4310.         AX = error code (DPMI 1.0+)
  4311.         0000h-7FFFh DOS error passed through by DPMI
  4312.         8001h unsupported function
  4313.         8002h object in wrong state for function
  4314.         8003h system integrity would be endangered
  4315.         8004h deadlock detected
  4316.         8005h pending serialization request cancelled
  4317.         8010h out of DPMI internal resources
  4318.         8011h descriptor unavailable
  4319.         8012h linear memory unavailable
  4320.         8013h physical memory unavailable
  4321.         8014h backing store unavailable
  4322.         8015h callback unavailable
  4323.         8016h handle unavailable
  4324.         8017h maximum lock count exceeded
  4325.         8018h shared memory already serialized exclusively by another
  4326.         8019h shared memory already serialized shared by another client
  4327.         8021h invalid value for numeric or flag parameter
  4328.         8022h invalid segment selector
  4329.         8023h invalid handle
  4330.         8024h invalid callback
  4331.         8025h invalid linear address
  4332.         8026h request not supported by hardware
  4333. Notes:    DPMI is the DOS Protected-Mode Interface
  4334.     the base and limit of the returned descriptors will be 0, and the type
  4335.       will be "data"
  4336.     add the value returned by INT 31/AX=0003h to move to subsequent
  4337.       descriptors if multiple descriptors were allocated
  4338.     not supported by MS Windows 3.0 in Standard mode
  4339. SeeAlso: AX=0001h,AX=000Dh,INT 21/AX=3501h
  4340. --------E-310001-----------------------------
  4341. INT 31 P - DPMI 0.9+ - FREE LDT DESCRIPTOR
  4342.     AX = 0001h
  4343.     BX = selector to free
  4344. Return: CF clear if successful
  4345.     CF set on error
  4346.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  4347. Notes:    only one descriptor is freed per call
  4348.     the program's initial CS, DS, and SS descriptors may be freed
  4349.     (DPMI 1.0+) any segment registers containing the freed selector are
  4350.       set to 0000h
  4351.     not supported by MS Windows 3.0 in Standard mode
  4352. SeeAlso: AX=0000h,AX=000Ah,AX=000Dh,INT 21/AX=3502h
  4353. --------E-310002-----------------------------
  4354. INT 31 P - DPMI 0.9+ - SEGMENT TO DESCRIPTOR
  4355.     AX = 0002h
  4356.     BX = real mode segment
  4357. Return: CF clear if successful
  4358.         AX = selector corresponding to real mode segment (64K limit)
  4359.     CF set on error
  4360.         AX = error code (DPMI 1.0+) (8011h) (see AX=0000h)
  4361. Notes:    multiple calls for the same real mode segment return the same selector
  4362.     the returned descriptor can never be modified or freed
  4363.     not supported by MS Windows 3.0 in Standard mode
  4364. --------E-310003-----------------------------
  4365. INT 31 P - DPMI 0.9+ - GET NEXT SELECTOR INCREMENT VALUE
  4366.     AX = 0003h
  4367. Return: CF clear
  4368.         AX = value to add to get next sequential selector
  4369. Notes:    the increment will be a power of two
  4370.     not supported by MS Windows 3.0 in Standard mode
  4371. SeeAlso: AX=0000h
  4372. --------E-310004-----------------------------
  4373. INT 31 P - DPMI 0.9+ - LOCK SELECTOR
  4374.     AX = 0004h
  4375.     BX = selector to lock (prevent paging)
  4376. Return: ???
  4377. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  4378.       specification, this function is called by MS Windows TASKMAN,
  4379.       PROGMAN, and KERNEL
  4380. SeeAlso: AX=0005h,AX=0600h
  4381. --------E-310005-----------------------------
  4382. INT 31 P - DPMI 0.9+ - UNLOCK SELECTOR
  4383.     AX = 0005h
  4384.     BX = selector to unlock (permit paging)
  4385. Return: ???
  4386. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  4387.       specification, this function is called by MS Windows TASKMAN,
  4388.       PROGMAN, and KERNEL
  4389. SeeAlso: AX=0004h,AX=0601h
  4390. --------E-310006-----------------------------
  4391. INT 31 P - DPMI 0.9+ - GET SEGMENT BASE ADDRESS
  4392.     AX = 0006h
  4393.     BX = selector
  4394. Return: CF clear if successful
  4395.         CX:DX = linear base address of segment
  4396.     CF set on error
  4397.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  4398. Note:    not supported by MS Windows 3.0 in Standard mode
  4399. SeeAlso: AX=0007h,INT 21/AX=3504h
  4400. --------E-310007-----------------------------
  4401. INT 31 P - DPMI 0.9+ - SET SEGMENT BASE ADDRESS
  4402.     AX = 0007h
  4403.     BX = selector
  4404.     CX:DX = linear base address
  4405. Return: CF clear if successful
  4406.     CF set on error
  4407.         AX = error code (DPMI 1.0+) (8022h,8025h) (see AX=0000h)
  4408. Notes:    only modify descriptors allocated with INT 31/AX=0000h
  4409.     only the low 24 bits of the address will be used by 16-bit DPMI
  4410.       implementations even on a 386 or higher
  4411.     DPMI 1.0+ automatically reloads any segment registers containing the
  4412.       selector being modified
  4413.     not supported by MS Windows 3.0 in Standard mode
  4414. SeeAlso: AX=0006h,AX=0008h,AX=0009h,AX=000Ch,INT 21/AX=3503h
  4415. SeeAlso: INT 21/AH=E9h"OS/286"
  4416. --------E-310008-----------------------------
  4417. INT 31 P - DPMI 0.9+ - SET SEGMENT LIMIT
  4418.     AX = 0008h
  4419.     BX = selector
  4420.     CX:DX = segment limit
  4421. Return: CF clear if successful
  4422.     CF set on error
  4423.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see AX=0000h)
  4424. Notes:    CX must be zero for 16-bit DPMI implementations
  4425.     limits greater than 1MB must be page aligned (low 12 bits set)
  4426.     only modify descriptors allocated with INT 31/AX=0000h
  4427.     DPMI 1.0+ automatically reloads any segment registers containing the
  4428.       selector being modified
  4429.     not supported by MS Windows 3.0 in Standard mode
  4430. SeeAlso: AX=0007h,AX=0009h,AX=000Ch,INT 21/AX=3505h,INT 21/AH=E9h"OS/286"
  4431. --------E-310009-----------------------------
  4432. INT 31 P - DPMI 0.9+ - SET DESCRIPTOR ACCESS RIGHTS
  4433.     AX = 0009h
  4434.     BX = selector
  4435.     CL = access rights/type byte
  4436.     CH = 80386 extended rights/type byte (32-bit DPMI implementations only)
  4437. Return: CF clear if successful
  4438.     CF set on error
  4439.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see AX=0000h)
  4440. Notes:    if the Present bit is clear, CL bits 0-3 may have any value
  4441.     DPMI 1.0+ automatically reloads any segment registers containing the
  4442.       selector being modified
  4443.     not supported by MS Windows 3.0 in Standard mode
  4444. SeeAlso: AX=0007h,AX=0008h,AX=000Ch,INT 21/AX=2514h
  4445. --------E-31000A-----------------------------
  4446. INT 31 P - DPMI 0.9+ - CREATE ALIAS DESCRIPTOR
  4447.     AX = 000Ah
  4448.     BX = selector
  4449. Return: CF clear if successful
  4450.         AX = new data selector
  4451.     CF set on error
  4452.         AX = error code (DPMI 1.0+) (8011h,8022h) (see AX=0000h)
  4453. Notes:    fails if selector in BX is not a code segment or is invalid
  4454.     use INT 31/AX=0001h to free new selector
  4455.     future changes to the original selector will not be reflected in the
  4456.       returned alias selector
  4457.     not supported by MS Windows 3.0 in Standard mode
  4458. SeeAlso: AX=0001h
  4459. --------E-31000B-----------------------------
  4460. INT 31 P - DPMI 0.9+ - GET DESCRIPTOR
  4461.     AX = 000Bh
  4462.     BX = LDT selector
  4463.     ES:(E)DI -> 8-byte buffer for copy of descriptor
  4464. Return: CF clear if successful
  4465.         buffer filled
  4466.     CF set on error
  4467.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  4468. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  4469.     not supported by MS Windows 3.0 in Standard mode
  4470. SeeAlso: AX=000Ch
  4471. --------E-31000C-----------------------------
  4472. INT 31 P - DPMI 0.9+ - SET DESCRIPTOR
  4473.     AX = 000Ch
  4474.     BX = LDT selector
  4475.     ES:(E)DI -> 8-byte buffer containing descriptor
  4476. Return:    CF clear if successful
  4477.     CF set on error
  4478.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see AX=0000h)
  4479. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  4480.     only modify descriptors allocated with INT 31/AX=0000h
  4481.     DPMI 1.0+ automatically reloads any segment registers containing the
  4482.       selector being modified
  4483.     not supported by MS Windows 3.0 in Standard mode
  4484. SeeAlso: AX=000Bh
  4485. --------E-31000D-----------------------------
  4486. INT 31 P - DPMI 0.9+ - ALLOCATE SPECIFIC LDT DESCRIPTOR
  4487.     AX = 000Dh
  4488.     BX = LDT selector
  4489. Return: CF clear if successful
  4490.         descriptor allocated
  4491.     CF set on error
  4492.         AX = error code (DPMI 1.0+) (8011h,8022h) (see AX=0000h)
  4493. Notes:    free descriptor with INT 31/AX=0001h
  4494.     the first 16 descriptors (04h-7Ch) are reserved for this function, but
  4495.       some may already be in use by other applications under DPMI 0.9;
  4496.       DPMI 1.0 guarantees 16 descriptors per client
  4497.     not supported by MS Windows 3.0 in Standard mode
  4498. SeeAlso: AX=0000h,AX=0001h
  4499. --------E-31000E-----------------------------
  4500. INT 31 P - DPMI 1.0+ - GET MULTIPLE DESCRIPTORS
  4501.     AX = 000Eh
  4502.     CX = number of descriptors to copy
  4503.     ES:(E)DI -> descriptor buffer (see below)
  4504. Return: CF clear if successful
  4505.         descriptors copied
  4506.     CF set on error
  4507.         AX = error code (8022h) (see AX=0000h)
  4508.         CX = number of descriptors successfully copied
  4509. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  4510.     if the function fails, the first CX descriptors are valid; the
  4511.       remainder are not modified
  4512. SeeAlso: AX=000Bh,AX=000Fh
  4513.  
  4514. Format of descriptor buffer entry (one per descriptor to get):
  4515. Offset    Size    Description
  4516.  00h    WORD    selector (set by client)
  4517.  02h    QWORD    descriptor (set by host)
  4518. --------E-31000F-----------------------------
  4519. INT 31 P - DPMI 1.0+ - SET MULTIPLE DESCRIPTORS
  4520.     AX = 000Fh
  4521.     CX = number of descriptors to copy
  4522.     ES:(E)DI -> descriptor buffer (see below)
  4523. Return: CF clear if successful
  4524.         descriptors copied
  4525.     CF set on error
  4526.         AX = error code (8021h,8022h,8025h) (see AX=0000h)
  4527.         CX = number of descriptors successfully copied
  4528. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  4529.     if the function fails, the first CX descriptors are valid; the
  4530.       remainder are not modified
  4531.     DPMI 1.0+ automatically reloads any segment registers containing a
  4532.       selector being modified
  4533. SeeAlso: AX=000Ch,AX=000Eh
  4534.  
  4535. Format of descriptor buffer entry (one per descriptor to set):
  4536. Offset    Size    Description
  4537.  00h    WORD    selector
  4538.  02h    QWORD    descriptor
  4539. --------E-310100-----------------------------
  4540. INT 31 P - DPMI 0.9+ - ALLOCATE DOS MEMORY BLOCK
  4541.     AX = 0100h
  4542.     BX = number of paragraphs to allocate
  4543. Return: CF clear if successful
  4544.         AX = real mode segment of allocated block
  4545.         DX = first selector for allocated block
  4546.     CF set on error
  4547.         AX = DOS error code (07h,08h) (see INT 21/AH=59h)
  4548.          (DPMI 1.0+) DPMI error code (8011h) (see AX=0000h)
  4549.         BX = size (in paragraphs) of largest available block
  4550. Notes:    multiple contiguous selectors are allocated for blocks of more than 64K
  4551.       if the caller is a 16-bit program
  4552.     never modify or deallocate returned descriptors
  4553.     not supported by MS Windows 3.0 in Standard mode
  4554. SeeAlso: AX=0101h,AX=0501h
  4555. --------E-310101-----------------------------
  4556. INT 31 P - DPMI 0.9+ - FREE DOS MEMORY BLOCK
  4557.     AX = 0101h
  4558.     DX = selector of block
  4559. Return: CF set if successful
  4560.     CF set on error
  4561.         AX = DOS error code (07h,09h) (see INT 21/AH=59h)
  4562. Notes:    all descriptors allocated for the block are automatically freed
  4563.     DPMI 1.0+ automatically zeros any segment registers containing a
  4564.       selector freed by this function
  4565.     not supported by MS Windows 3.0 in Standard mode
  4566. SeeAlso: AX=0100h,AX=0102h,AX=0502h
  4567. --------E-310102-----------------------------
  4568. INT 31 P - DPMI 0.9+ - RESIZE DOS MEMORY BLOCK
  4569.     AX = 0102h
  4570.     BX = new block size in paragraphs
  4571.     DX = selector of block
  4572. Return: CF clear if successful
  4573.     CF set on error
  4574.         AX = DOS error code (07h,08h,09h) (see INT 21/AH=59h)
  4575.          (DPMI 1.0+) DPMI error code (8011h,8022h) (see AX=0000h)
  4576.         BX = maximum block size (in paragraphs) possible
  4577. Notes:    increasing the size of a block past a 64K boundary will fail if the
  4578.       next descriptor in the LDT is already in use
  4579.     shrinking a block past a 64K boundary will cause some selectors to be
  4580.       freed; DPMI 1.0+ automatically zeros any segment registers containing
  4581.       a selector freed by this function
  4582.     not supported by MS Windows 3.0 in Standard mode
  4583. SeeAlso: AX=0100h
  4584. --------E-310200-----------------------------
  4585. INT 31 P - DPMI 0.9+ - GET REAL MODE INTERRUPT VECTOR
  4586.     AX = 0200h
  4587.     BL = interrupt number
  4588. Return: CF clear
  4589.     CX:DX = segment:offset of real mode interrupt handler
  4590. Note:    the DPMI implementation is required to support all 256 vectors
  4591. SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2503h
  4592. --------E-310201-----------------------------
  4593. INT 31 P - DPMI 0.9+ - SET REAL MODE INTERRUPT VECTOR
  4594.     AX = 0201h
  4595.     BL = interrupt number
  4596.     CX:DX = segment:offset of real mode handler
  4597. Return: CF clear
  4598. Note:    all memory that may be touched by a hardware interrupt handler must be
  4599.       locked down with INT 31/AX=0600h    
  4600. SeeAlso: AX=0200h,AX=0205h,AX=0600h,INT 21/AX=2505h
  4601. --------E-310202-----------------------------
  4602. INT 31 P - DPMI 0.9+ - GET PROCESSOR EXCEPTION HANDLER VECTOR
  4603.     AX = 0202h
  4604.     BL = exception number (00h-1Fh)
  4605. Return:    CF clear if successful
  4606.         CX:(E)DX = selector:offset of handler
  4607.     CF set on error
  4608.         AX = error code (DPMI 1.0+) (8021h) (see AX=0000h)
  4609. Notes:    16-bit programs receive the pointer in CX:DX, 32-bit programs in CX:EDX
  4610.     DPMI 1.0+ supports this function only for backward compatibility; use
  4611.        AX=0210h or AX=0211h instead
  4612.     not supported by MS Windows 3.0 in Standard mode
  4613. SeeAlso: AX=0203h,AX=0210h,AX=0211h,INT 2F/AX=FB42h/BX=0021h
  4614. --------E-310203-----------------------------
  4615. INT 31 P - DPMI 0.9+ - SET PROCESSOR EXCEPTION HANDLER VECTOR
  4616.     AX = 0203h
  4617.     BL = exception number (00h-1Fh)
  4618.     CX:(E)DX = selector:offset of handler
  4619. Return: CF clear if successful
  4620.     CF set on error
  4621.         AX = error code (DPMI 1.0+) (8021h,8022h) (see AX=0000h)
  4622. Notes:    32-bit programs must supply an offset in EDX and use a 32-bit interrupt
  4623.       stack frame on chaining to the next exception handler
  4624.     the handler should return using a FAR return
  4625.     all fault stack frames contain an error code, but it is only valid for
  4626.       exceptions 08h and 0Ah-0Eh
  4627.     handlers will only be called if the exception occurs in protected mode,
  4628.       and the DPMI host does not transparently handle the exception
  4629.     the handler may change certain values on the stack frame (see below)
  4630.     DPMI 1.0+ supports this function only for backward compatibility; use
  4631.        AX=0212h or AX=0213h instead
  4632.     not supported by MS Windows 3.0 in Standard mode
  4633. SeeAlso: AX=0202h,AX=0212h,AX=0213h,INT 2F/AX=FB42h/BX=0022h
  4634.  
  4635. Format of stack frame for 16-bit programs: (offset from SS:SP)
  4636. Offset    Size    Description
  4637.  00h    DWORD    return CS:IP (do not change)
  4638.  04h    WORD    error code
  4639.  06h    DWORD    CS:IP of exception
  4640.  0Ah    WORD    flags
  4641.  0Ch    DWORD    SS:SP
  4642.  
  4643. Format of stack frame for 32-bit programs: (offset from SS:ESP)
  4644. Offset    Size    Description
  4645.  00h    DWORD    return EIP (do not change)
  4646.  04h    WORD    return CS selector (do not change)
  4647.  06h    WORD    reserved (do not change)
  4648.  08h    DWORD    error code
  4649.  0Ch    DWORD    EIP of exception
  4650.  10h    WORD    CS selector of exception
  4651.  12h    WORD    reserved (do not change)
  4652.  14h    DWORD    EFLAGS
  4653.  18h    DWORD    ESP
  4654.  1Ch    WORD    SS
  4655.  1Eh    WORD    reserved (do not change)
  4656. --------E-310204-----------------------------
  4657. INT 31 P - DPMI 0.9+ - GET PROTECTED MODE INTERRUPT VECTOR
  4658.     AX = 0204h
  4659.     BL = interrupt number
  4660. Return:    CF clear
  4661.     CX:(E)DX = selector:offset of handler
  4662. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  4663.     DPMI implementations are required to support all 256 vectors
  4664.     not supported by MS Windows 3.0 in Standard mode
  4665. SeeAlso: AX=0200h,AX=0205h,INT 21/AX=2502h,INT 2F/AX=FB42h/BX=0024h
  4666. --------E-310205-----------------------------
  4667. INT 31 P - DPMI 0.9+ - SET PROTECTED MODE INTERRUPT VECTOR
  4668.     AX = 0205h
  4669.     BL = interrupt number
  4670.     CX:(E)DX = selector:offset of handler
  4671. Return: CF clear if successful
  4672.     CF set on error
  4673.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  4674. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  4675.     32-bit programs must use a 32-bit interrupt stack frame when chaining
  4676.       to the next handler
  4677.     DPMI implementations are required to support all 256 vectors
  4678.     hardware interrupts are reflected to the virtual machine's primary
  4679.       client, software interrupts to the current client
  4680.     not supported by MS Windows 3.0 in Standard mode
  4681. SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2504h,INT 2F/AX=FB42h/BX=0025h
  4682. --------E-310210-----------------------------
  4683. INT 31 P - DPMI 1.0+ - GET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  4684.     AX = 0210h
  4685.     BL = exception number (00h-1Fh)
  4686. Return: CF clear if successful
  4687.         CX:(EDX) = selector:offset of exception handler
  4688.     CF set on error
  4689.         AX = error code (8021h) (see AX=0000h)
  4690. Note:    DPMI host reflects exception to current client's handler
  4691. SeeAlso: AX=0202h,AX=0211h,AX=0212h
  4692. --------E-310211-----------------------------
  4693. INT 31 P - DPMI 1.0+ - GET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  4694.     AX = 0211h
  4695.     BL = exception number (00h-1Fh)
  4696. Return: CF clear if successful
  4697.         CX:(EDX) = selector:offset of exception handler
  4698.     CF set on error
  4699.         AX = error code (8021h) (see AX=0000h)
  4700. Notes:    returns address of protected-mode handler for real-mode exception
  4701.     DPMI host performs a switch to protected mode, reflects the exception
  4702.       to the virtual machine's primary client, and returns to real mode
  4703.       on the handler's completion
  4704. SeeAlso: AX=0202h,AX=0210h,AX=0213h
  4705. --------E-310212-----------------------------
  4706. INT 31 P - DPMI 1.0+ - SET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  4707.     AX = 0212h
  4708.     BL = exception or fault number (00h-1Fh)
  4709.     CX:(E)DX = exception handler selector:offset
  4710. Return: CF clear if successful
  4711.     CF set on error
  4712.         AX = error code (8021h,8022h) (see AX=0000h)
  4713. Note:    DPMI host sends exception to current client's handler
  4714. SeeAlso: AX=0203h,AX=0210h,AX=0213h
  4715. --------E-310213-----------------------------
  4716. INT 31 P - DPMI 1.0+ - SET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  4717.     AX = 0213h
  4718.     BL = exception or fault number (00h-1Fh)
  4719.     CX:(E)DX = exception handler selector:offset
  4720. Return: CF clear if successful
  4721.     CF set on error
  4722.         AX = error code (8021h,8022h) (see AX=0000h)
  4723. Notes:    specifies address of protected-mode handler for real-mode exception
  4724.     DPMI host performs a switch to protected mode, reflects the exception
  4725.       to the virtual machine's primary client, and returns to real mode
  4726.       on the handler's completion
  4727. SeeAlso: AX=0203h,AX=0211h,AX=0212h
  4728. --------E-310300-----------------------------
  4729. INT 31 P - DPMI 0.9+ - SIMULATE REAL MODE INTERRUPT
  4730.     AX = 0300h
  4731.     BL = interrupt number
  4732.     BH = flags
  4733.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  4734.            reserved, must be 0 (DPMI 1.0+)
  4735.         others must be 0
  4736.     CX = number of words to copy from protected mode to real mode stack
  4737.     ES:(E)DI = selector:offset of real mode call structure (see below)
  4738. Return:    CF clear if successful
  4739.         real mode call structure modified (all fields except SS:SP, CS:IP
  4740.           filled with return values from real mode interrupt)
  4741.     CF set on error
  4742.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see AX=0000h)
  4743.     protected mode stack unchanged
  4744. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  4745.     CS:IP in the real mode call structure is ignored for this call,
  4746.       instead, the indicated interrupt vector is used for the address
  4747.     the flags in the call structure are pushed on the real mode stack to
  4748.       form an interrupt stack frame, and the trace and interrupt flags are
  4749.       clear on entry to the handler
  4750.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  4751.     the real mode handler must return with the stack in the same state as
  4752.       it was on being called
  4753. SeeAlso: AX=0302h,INT 21/AX=2511h,INT 21/AH=E3h"OS/286"
  4754. SeeAlso: INT 2F/AX=FB42h/BX=000Dh
  4755.  
  4756. Format of real mode call structure:
  4757. Offset    Size    Description
  4758.  00h    DWORD    EDI
  4759.  04h    DWORD    ESI
  4760.  08h    DWORD    EBP
  4761.  0Ch    DWORD    reserved (00h)
  4762.  10h    DWORD    EBX
  4763.  14h    DWORD    EDX
  4764.  18h    DWORD    ECX
  4765.  1Ch    DWORD    EAX
  4766.  20h    WORD    flags
  4767.  22h    WORD    ES
  4768.  24h    WORD    DS
  4769.  26h    WORD    FS
  4770.  28h    WORD    GS
  4771.  2Ah    WORD    IP
  4772.  2Ch    WORD    CS
  4773.  2Eh    WORD    SP
  4774.  30h    WORD    SS
  4775. --------E-310301-----------------------------
  4776. INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH FAR RETURN FRAME
  4777.     AX = 0301h
  4778.     BH = flags
  4779.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  4780.            reserved, must be 0 (DPMI 1.0+)
  4781.         others must be 0
  4782.     CX = number of words to copy from protected mode to real mode stack
  4783.     ES:DI / ES:EDI = selector:offset of real mode call structure
  4784.             (see INT 31/AX=0300h)
  4785. Return: CF clear if successful
  4786.         real mode call structure modified (all fields except SS:SP, CS:IP
  4787.           filled with return values from real mode interrupt)
  4788.     CF set on error
  4789.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see AX=0000h)
  4790.     protected mode stack unchanged
  4791. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  4792.     the real mode procedure must exit with a FAR return
  4793.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  4794.     the real mode handler must return with the stack in the same state as
  4795.       it was on being called
  4796. SeeAlso: AX=0300h,AX=0302h,INT 21/AX=250Eh,INT 21/AH=E1h"OS/286"
  4797. --------E-310302-----------------------------
  4798. INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH IRET FRAME
  4799.     AX = 0302h
  4800.     BH = flags
  4801.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  4802.            reserved, must be 0 (DPMI 1.0+)
  4803.         others must be 0
  4804.     CX = number of words to copy from protected mode to real mode stack
  4805.     ES:DI / ES:EDI = selector:offset of real mode call structure
  4806.             (see INT 31/AX=0300h)
  4807. Return:    CF clear if successful
  4808.         real mode call structure modified (all fields except SS:SP, CS:IP
  4809.           filled with return values from real mode interrupt)
  4810.     CF set on error
  4811.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see AX=0000h)
  4812.     protected mode stack unchanged
  4813. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  4814.     the flags in the call structure are pushed on the real mode stack to
  4815.       form an interrupt stack frame, and the trace and interrupt flags are
  4816.       clear on entry to the handler
  4817.     the real mode procedure must exit with an IRET
  4818.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  4819.     the real mode handler must return with the stack in the same state as
  4820.       it was on being called
  4821. SeeAlso: AX=0300h
  4822. --------E-310303-----------------------------
  4823. INT 31 P - DPMI 0.9+ - ALLOCATE REAL MODE CALLBACK ADDRESS
  4824.     AX = 0303h
  4825.     DS:SI / DS:ESI = selector:offset of procedure to call
  4826.     ES:DI / ES:EDI = selector:offset of real mode call structure
  4827.             (see AX=0300h)
  4828. Return: CF clear if successful
  4829.         CX:DX = segment:offset of real mode call address
  4830.     CF set on error
  4831.         AX = error code (DPMI 1.0+) (8015h) (see AX=0000h)
  4832. Notes:    the real mode call structure is static, causing reentrancy problems;
  4833.       its contents are only valid at the time of a callback
  4834.     the called procedure must modify the real mode CS:IP before returning
  4835.     values are returned to real mode by modifying the real mode call struc
  4836.     DPMI hosts must provide at least 16 callbacks per client
  4837. SeeAlso: AX=0304h,AX=0C00h
  4838.  
  4839. Values callback procedure is called with:
  4840.     DS:SI / DS:ESI = selector:offset of real mode SS:SP
  4841.     ES:DI / ES:EDI = selector:offset of real mode call structure
  4842.     SS:SP / SS:ESP = locked protected mode API stack
  4843.     interrupts disabled
  4844. Return: (with IRET)
  4845.     ES:DI / ES:EDI = selector:offset of real mode call structure to restore
  4846. --------E-310304-----------------------------
  4847. INT 31 P - DPMI 0.9+ - FREE REAL MODE CALLBACK ADDRESS
  4848.     AX = 0304h
  4849.     CX:DX = real mode callback address
  4850. Return: CF clear if successful
  4851.     CF set on error
  4852.         AX = error code (DPMI 1.0+) (8024h) (see AX=0000h)
  4853. SeeAlso: AX=0303h
  4854. --------E-310305-----------------------------
  4855. INT 31 P - DPMI 0.9+ - GET STATE SAVE/RESTORE ADDRESSES
  4856.     AX = 0305h
  4857. Return: CF clear
  4858.     AX = size in bytes of state buffer
  4859.     BX:CX = real mode address of procedure to save/restore state
  4860.     SI:DI / SI:EDI = protected mode procedure to save/restore state
  4861. Notes:    the buffer size will be zero if it is not necessary to preserve state
  4862.     16-bit programs should call SI:DI, 32-bit programs should call SI:EDI
  4863.     this function is only needed if using the raw mode switch service
  4864. SeeAlso: AX=0306h
  4865.  
  4866. Values to call state-save procedures with:
  4867.     AL = direction
  4868.         00h save state
  4869.         01h restore state
  4870.     ES:DI / ES:EDI -> state buffer
  4871. Return: all registers preserved
  4872. --------E-310306-----------------------------
  4873. INT 31 P - DPMI 0.9+ - GET RAW MODE SWITCH ADDRESSES
  4874.     AX = 0306h
  4875. Return:    CF clear
  4876.     BX:CX -> procedure to switch from real to protected mode
  4877.     SI:DI / SI:EDI -> procedure to switch from protected to real mode
  4878. Notes:    16-bit programs should jump to SI:DI, 32-bit programs should use SI:EDI
  4879.     the caller must save and restore the state of the task with AX=0305h
  4880.     not supported by MS Windows 3.0 in Standard mode
  4881. SeeAlso: AX=0305h
  4882.  
  4883. Values to JUMP at mode-switch procedures with:
  4884.     AX = new DS
  4885.     CX = new ES
  4886.     DX = new SS
  4887.     BX / EBX = new SP / ESP
  4888.     SI = new CS
  4889.     DI / EDI = new IP / EIP
  4890. Notes:    BP/EBP is preserved across the call, but AX/EAX, BX/EBX, CX/ECX,
  4891.       DX/EDX, SI/ESI, and DI/EDI will be undefined; FS and GS will be 0000h
  4892.     interrupts will stay disabled during the entire mode switch if they
  4893.       are disabled on entry to the mode-switch procedure
  4894. --------E-310400-----------------------------
  4895. INT 31 P - DPMI 0.9+ - GET DPMI VERSION
  4896.     AX = 0400h
  4897. Return: CF clear
  4898.     AH = major version of DPMI spec supported
  4899.     AL = two-digit minor version of DPMI spec supported
  4900.     BX = flags
  4901.         bit 0: running under an 80386 (32-bit) implementation
  4902.         bit 1: processor returns to real mode for reflected interrupts
  4903.            instead of V86 mode
  4904.         bit 2: virtual memory supported
  4905.         bit 3: reserved (undefined)
  4906.         others reserved (zero)
  4907.     CL = processor type (02h=80286, 03h=80386, 04h=80486)
  4908.     DH = curr value of virtual master interrupt controller base interrupt
  4909.     DL = curr value of virtual slave interrupt controller base interrupt
  4910. SeeAlso: AX=0401h,INT 21/AX=250Ch,INT 2F/AX=1687h,INT 67/AX=DE0Ah
  4911. --------E-310401-----------------------------
  4912. INT 31 P - DPMI 1.0+ - GET DPMI CAPABILITIES
  4913.     AX = 0401h
  4914.     ES:(E)DI -> 128-byte buffer (see below)
  4915. Return: CF clear if successful
  4916.         AX = capabilities
  4917.         bit 0: paged accessed/dirty supported (see AX=0506h,AX=0507h)
  4918.         bit 1: exceptions restartability supported
  4919.         bit 2: device mapping supported (see AX=0508h)
  4920.         bit 3: conventional memory mapping supported (see AX=0509h)
  4921.         bit 4: demand zero-fill supported
  4922.         bit 5: write-protect client capability supported
  4923.         bit 6: write-protect host capability supported
  4924.         bits 7-15 reserved
  4925.         CX = reserved (00h)
  4926.         DX = reserved (00h)
  4927.         buffer filled
  4928.     CF set on error (DPMI 0.9 only)
  4929. SeeAlso: AX=0400h
  4930.  
  4931. Format of buffer:
  4932. Offset    Size    Description
  4933.  00h    BYTE    host major version number
  4934.  01h    BYTE    host minor version number
  4935.  02h 126 BYTEs    ASCIZ host vendor name
  4936. --------E-310500-----------------------------
  4937. INT 31 P - DPMI 0.9+ - GET FREE MEMORY INFORMATION
  4938.     AX = 0500h
  4939.     ES:DI / ES:EDI -> buffer for memory information (see below)
  4940. Return: CF clear
  4941. Notes:    16-bit programs use ES:DI, 32-bit programs use ES:EDI
  4942.     this function must be considered advisory because other applications
  4943.       may affect the results at any time after the call
  4944.     fields not supported by the DPMI implementation are filled with
  4945.       FFFFFFFFh
  4946.     DPMI 1.0+ supports this function solely for backward compatibility; use
  4947.       AX=050Bh instead
  4948. SeeAlso: AX=0501h,AX=0604h
  4949.  
  4950. Format of memory information:
  4951. Offset    Size    Description
  4952.  00h    DWORD    largest available block in bytes
  4953.  04h    DWORD    maximum unlocked page allocation
  4954.  08h    DWORD    maximum locked page allocation
  4955.  0Ch    DWORD    total linear address space in pages
  4956.  10h    DWORD    total unlocked pages
  4957.  14h    DWORD    free pages
  4958.  18h    DWORD    total physical pages
  4959.  1Ch    DWORD    free linear address space in pages
  4960.  20h    DWORD    size of paging file/partition in pages
  4961.  24h 12 BYTEs    reserved
  4962. --------E-310501-----------------------------
  4963. INT 31 P - DPMI 0.9+ - ALLOCATE MEMORY BLOCK
  4964.     AX = 0501h
  4965.     BX:CX = size in bytes
  4966. Return: CF clear if successful
  4967.         BX:CX = linear address of block
  4968.         SI:DI = memory block handle for resizing and freeing block
  4969.     CF set on error
  4970.         AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h)(see AX=0000h)
  4971. Notes:    no selectors are allocated
  4972.     the memory block is allocated unlocked (can be locked with AX=0600h)
  4973.     allocations are often page granular (see AX=0604h)
  4974. SeeAlso: AX=0000h,AX=0100h,AX=0500h,AX=0502h,AX=0503h,AX=0504h,AX=0D00h
  4975. SeeAlso: INT 2F/AX=FB42h/BX=0002h
  4976. --------E-310502-----------------------------
  4977. INT 31 P - DPMI 0.9+ - FREE MEMORY BLOCK
  4978.     AX = 0502h
  4979.     SI:DI = handle of memory block
  4980. Return: CF clear if successful
  4981.     CF set on error
  4982.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  4983. Note:    any selectors allocated for the memory block must also be freed,
  4984.       preferably before freeing the memory block
  4985. SeeAlso: AX=0001h,AX=0101h,AX=0501h,AX=0D01h
  4986. --------E-310503-----------------------------
  4987. INT 31 P - DPMI 0.9+ - RESIZE MEMORY BLOCK
  4988.     AX = 0503h
  4989.     BX:CX = new size in bytes (nonzero)
  4990.     SI:DI = handle of memory block
  4991. Return: CF clear if successful
  4992.         BX:CX = new linear address
  4993.         SI:DI = new handle of memory block
  4994.     CF set on error
  4995.         AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h,8023h)
  4996.         (see AX=0000h)
  4997. Notes:    any selectors pointing at the block must be updated
  4998.     the previous memory block handle becomes invalid
  4999.     an error is returned if the new size is 0
  5000. SeeAlso: AX=0102h,AX=0501h,AX=0505h
  5001. --------E-310504-----------------------------
  5002. INT 31 P - DPMI 1.0+ - ALLOCATE LINEAR MEMORY BLOCK
  5003.     AX = 0504h
  5004.     EBX = page-aligned linear address of memory block (00000000h if any
  5005.         address is acceptable)
  5006.     ECX = size in bytes (nonzero)
  5007.     EDX = flags
  5008.         bit 0: set to create committed pages instead of uncommitted pages
  5009.         bits 1-31 reserved (0)
  5010. Return: CF clear if successful
  5011.         EBX = linear address of memory block
  5012.         ESI = memory block handle
  5013.     CF set on error
  5014.         AX = error code (8001h,8012h-8014h,8016h,8021h,8025h)(see AX=0000h)
  5015. Note:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  5016. SeeAlso: AX=0501h,AX=0505h
  5017. --------E-310505-----------------------------
  5018. INT 31 P - DPMI 1.0+ - RESIZE LINEAR MEMORY BLOCK
  5019.     AX = 0505h
  5020.     ESI = memory block handle
  5021.     ECX = new size in bytes (nonzero)
  5022.     EDX = flags
  5023.         bit 0: create committed pages rather than uncommitted pages
  5024.         bit 1: segment descriptor update required
  5025.         ES:EBX -> buffer containing array of WORDs with selectors
  5026.         EDI = number of selectors in array
  5027.         bits 2-31 reserved (0)
  5028. Return: CF clear if successful
  5029.         EBX = new linear base address
  5030.         ESI = new memory block handle
  5031.     CF set on error
  5032.         AX = error code (8001h,8012h-8014h,8016h,8021h,8023h)(see AX=0000h)
  5033. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  5034.     the old memory block handle becomes invalid
  5035.     if EDX bit 1 set and the block's base address is changed, DPMI updates
  5036.       all descriptors for selectors in the update buffer which fall within
  5037.       the memory block
  5038. SeeAlso: AX=0503h,AX=0504h
  5039. --------E-310506-----------------------------
  5040. INT 31 P - DPMI 1.0+ - GET PAGE ATTRIBUTES
  5041.     AX = 0506h
  5042.     ESI = memory block handle
  5043.     EBX = offset in memory block of first page
  5044.     ECX = number of pages
  5045.     ES:EDX -> array of WORDs to hold page attributes (see below)
  5046. Return: CF clear if successful
  5047.         buffer filled
  5048.     CF set on error
  5049.         AX = error code (8001h,8023h,8025h) (see AX=0000h)
  5050. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  5051.     if EBX is not page-aligned, it will be rounded down
  5052. SeeAlso: AX=0504h,AX=0507h,INT 21/AX=251Dh,INT 21/AX=EB00h
  5053.  
  5054. Format of page attribute words:
  5055.  bits 0-2    page type
  5056.         000 uncommitted
  5057.         001 committed
  5058.         010 mapped (see AX=0508h,AX=0509h)
  5059.         other currently unused
  5060.  bit 3        page is read/write rather than read-only
  5061.  bit 4        accessed/dirty bits supplied in bits 5 and 6
  5062.  bit 5        page has been accessed (only valid if bit 4 set)
  5063.  bit 6        page has been written (only valid if bit 4 set)
  5064.  bits 7-15    reserved (0)
  5065. --------E-310507-----------------------------
  5066. INT 31 P - DPMI 1.0+ - MODIFY PAGE ATTRIBUTES
  5067.     AX = 0507h
  5068.     ESI = memory block handle
  5069.     EBX = offset in memory block of first page
  5070.     ECX = number of pages
  5071.     ES:EDX -> array of WORDs with new page attributes (see AX=0506h)
  5072. Return: CF clear if successful
  5073.     CF set on error
  5074.         AX = error code (8001h,8002h,8013h,8014h,8021h,8023h,8025h)
  5075.         (see AX=0000h)
  5076.         ECX = number of pages which have been set
  5077. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  5078.     if EBX is not page-aligned, it will be rounded down
  5079. SeeAlso: AX=0504h,AX=0506h,INT 21/AX=251Eh
  5080. --------E-310508-----------------------------
  5081. INT 31 P - DPMI 1.0+ - MAP DEVICE IN MEMORY BLOCK
  5082.     AX = 0508h
  5083.     ESI = memory block handle
  5084.     EBX = page-aligned offset within memory block of page(s) to be mapped
  5085.     ECX = number of pages to map
  5086.     EDX = page-aligned physical address of device
  5087. Return: CF clear if successful
  5088.     CF set on error
  5089.         AX = error code (8001h,8003h,8023h,8025h) (see AX=0000h)
  5090. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  5091.     support of this function is optional; hosts are also allowed to support
  5092.       the function for some devices but not others
  5093. SeeAlso: AX=0504h,AX=0509h,AX=0800h,AX=0801h
  5094. --------E-310509-----------------------------
  5095. INT 31 P - DPMI 1.0+ - MAP CONVENTIONAL MEMORY IN MEMORY BLOCK
  5096.     AX = 0509h
  5097.     ESI = memory block handle
  5098.     EBX = page-aligned offset within memory block of page(s) to map
  5099.     ECX = number of pages to map
  5100.     EDX = page-aligned linear address of conventional (below 1M) memory
  5101. Return: CF clear if successful
  5102.     CF set on error
  5103.         AX = error code (8001h,8003h,8023h,8025h) (see AX=0000h)
  5104. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  5105.     support of this function is optional
  5106. SeeAlso: AX=0504h,AX=0508h,AX=0801h
  5107. --------E-31050A-----------------------------
  5108. INT 31 P - DPMI 1.0+ - GET MEMORY BLOCK SIZE AND BASE
  5109.     AX = 050AH
  5110.     SI:DI = memory block handle
  5111. Return: CF clear if successful
  5112.         SI:DI = size in bytes
  5113.         BX:CX = base address
  5114.     CF set on error
  5115.         AX = error code (8023h) (see AX=0000h)
  5116. SeeAlso: AX=0501h,AX=0504h
  5117. --------E-31050B-----------------------------
  5118. INT 31 P - DPMI 1.0+ - GET MEMORY INFORMATION
  5119.     AX = 050Bh
  5120.     ES:(E)DI -> 128-byte buffer for memory information (see below)
  5121. Return: CF clear if successful
  5122.     CF set on error (DPMI 0.9 only)
  5123. Note:    16-bit programs use ES:DI, 32-bit programs must use ES:EDI
  5124. SeeAlso: AX=0500h
  5125.  
  5126. Format of memory information:
  5127. Offset    Size    Description
  5128.  00h    DWORD    total allocated bytes of physical memory controlled by host
  5129.  04h    DWORD    total allocated bytes of virtual memory controlled by host
  5130.  08h    DWORD    total available bytes of virtual memory controlled by host
  5131.  0Ch    DWORD    total allocated bytes of virtual memory for curr virtual mach
  5132.  10h    DWORD    total available bytes of virtual memory for curr virtual mach
  5133.  14h    DWORD    total allocated bytes of virtual memory for current client
  5134.  18h    DWORD    total available bytes of virtual memory for current client
  5135.  1Ch    DWORD    total locked bytes for current client
  5136.  20h    DWORD    maximum locked bytes for current client
  5137.  24h    DWORD    highest linear address available to current client
  5138.  28h    DWORD    largest available memory block in bytes
  5139.  2Ch    DWORD    minimum allocation unit in bytes
  5140.  30h    DWORD    allocation alignment unit size in bytes
  5141.  34h 76 BYTEs    reserved (00h)
  5142. --------E-310600-----------------------------
  5143. INT 31 P - DPMI 0.9+ - LOCK LINEAR REGION
  5144.     AX = 0600h
  5145.     BX:CX = starting linear address
  5146.     SI:DI = size of region in bytes
  5147. Return: CF clear if successful
  5148.     CF set on error
  5149.         none of the memory is locked
  5150.         AX = error code (DPMI 1.0+) (8013h,8017h,8025h) (see AX=0000h)
  5151. Notes:    pages at beginning and end will be locked if the region overlaps them
  5152.     may be called multiple times for a given page; the DPMI host keeps a
  5153.       lock count for each page
  5154. SeeAlso: AX=0004h,AX=0601h,INT 21/AX=251Ah,INT 21/AX=EB06h
  5155. --------E-310601-----------------------------
  5156. INT 31 P - DPMI 0.9+ - UNLOCK LINEAR REGION
  5157.     AX = 0601h
  5158.     BX:CX = starting linear address
  5159.     SI:DI = size of region in bytes
  5160. Return: CF clear if successful
  5161.     CF set on error
  5162.         none of the memory is unlocked
  5163.         AX = error code (DPMI 1.0+) (8002h,8025h) (see AX=0000h)
  5164. Notes:    pages at beginning and end will be unlocked if the region overlaps them
  5165.     memory whose lock count has not reached zero remains locked
  5166. SeeAlso: AX=0005h,AX=0600h,INT 21/AX=251Bh,INT 21/AX=EB07h
  5167. --------E-310602-----------------------------
  5168. INT 31 P - DPMI 0.9+ - MARK REAL MODE REGION AS PAGEABLE
  5169.     AX = 0602h
  5170.     BX:CX = starting linear address
  5171.     SI:DI = size of region in bytes
  5172. Return: CF clear if successful
  5173.     CF set on error    
  5174.         none of the memory is made pageable
  5175.         AX = error code (DPMI 1.0+) (8002h,8025h) (see AX=0000h)
  5176. Notes:    must relock all unlocked real mode memory before terminating process
  5177.       for DPMI 0.9; DPMI 1.0+ automatically relocks real mode memory
  5178.     pages at beginning and end will be unlocked if the region overlaps them
  5179.     pageability of real mode pages is binary, not a count
  5180. SeeAlso: AX=0600h,AX=0603h
  5181. --------E-310603-----------------------------
  5182. INT 31 P - DPMI 0.9+ - RELOCK REAL MODE REGION
  5183.     AX = 0603h
  5184.     BX:CX = starting linear address
  5185.     SI:DI = size of region in bytes
  5186. Return: CF clear if successful
  5187.     CF set on error    
  5188.         none of the memory is relocked
  5189.         AX = error code (DPMI 1.0+) (8002h,8013h,8025h) (see AX=0000h)
  5190. Notes:    pages at beginning and end will be relocked if the region overlaps them
  5191.     pageability of real mode pages is binary, not a count
  5192. SeeAlso: AX=0602h
  5193. --------E-310604-----------------------------
  5194. INT 31 P - DPMI 0.9+ - GET PAGE SIZE
  5195.     AX = 0604h
  5196. Return: CF clear if successful
  5197.         BX:CX = page size in bytes
  5198.     CF set on error
  5199.         AX = error code (DPMI 1.0+)
  5200.         8001h unsupported, 16-bit host
  5201. --------E-310700-----------------------------
  5202. INT 31 P - DPMI 0.9+ - MARK PAGES AS PAGING CANDIDATES
  5203.     AX = 0700h
  5204.     BX:CX = starting linear page number
  5205.     SI:DI = number of pages to mark as paging candidates
  5206. Return: ???
  5207. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  5208.       specification, this function is called by MS Windows TASKMAN,
  5209.       PROGMAN, and KERNEL
  5210. SeeAlso: AX=0701h,AX=0702h
  5211. --------E-310701-----------------------------
  5212. INT 31 P - DPMI 0.9+ - DISCARD PAGES
  5213.     AX = 0701h
  5214.     BX:CX = starting linear page number
  5215.     SI:DI = number of pages to discard
  5216. Return: ???
  5217. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  5218.       specification, this function is called by MS Windows TASKMAN,
  5219.       PROGMAN, and KERNEL
  5220. SeeAlso: AX=0700h,AX=0703h
  5221. --------E-310702-----------------------------
  5222. INT 31 P - DPMI 0.9+ - MARK PAGE AS DEMAND PAGING CANDIDATE
  5223.     AX = 0702h
  5224.     BX:CX = starting linear address
  5225.     SI:DI = number of bytes to mark as paging candidates
  5226. Return: CF clear if successful
  5227.     CF set on error
  5228.         AX = error code (DPMI 1.0+) (8025h) (see AX=0000h)
  5229. Notes:    this function is advisory, and does not force immediate paging
  5230.     partial pages will not be discarded
  5231. SeeAlso: AX=0700h,AX=0703h
  5232. --------E-310703-----------------------------
  5233. INT 31 P - DPMI 0.9+ - DISCARD PAGE CONTENTS
  5234.     AX = 0703h
  5235.     BX:CX = starting linear address
  5236.     SI:DI = number of bytes to mark as discarded
  5237. Return: CF clear if successful
  5238.     CF set on error
  5239.         AX = error code (DPMI 1.0+) (8025h) (see AX=0000h)
  5240. Notes:    this function is advisory, and may be ignored by DPMI implementations
  5241.     partial pages will not be discarded
  5242. SeeAlso: AX=0701h,AX=0702h
  5243. --------E-310800-----------------------------
  5244. INT 31 P - DPMI 0.9+ - PHYSICAL ADDRESS MAPPING
  5245.     AX = 0800h
  5246.     BX:CX = physical address (should be above 1 MB)
  5247.     SI:DI = size in bytes
  5248. Return:    CF clear if successful
  5249.         BX:CX = linear address which maps the requested physical memory
  5250.     CF set on error
  5251.         AX = error code (DPMI 1.0+) (8003h,8021h) (see AX=0000h)
  5252. Notes:    implementations may refuse this call because it can circumvent protects
  5253.     the caller must build an appropriate selector for the memory
  5254.     do not use for memory mapped in the first megabyte
  5255. SeeAlso: AX=0002h,AX=0508h,AX=0509h,AX=0801h,INT 21/AX=250Ah,INT 21/AX=EB05h
  5256. --------E-310801-----------------------------
  5257. INT 31 P - DPMI 1.0+ - FREE PHYSICAL ADDRESS MAPPING
  5258.     AX = 0801h
  5259.     BX:CX = linear address returned by AX=0800h
  5260. Return: CF clear if successful
  5261.     CF set on error
  5262.         AX = error code (8025h) (see AX=0000h)
  5263. Note:    should be called at end of access to device mapped with AX=0800h
  5264. SeeAlso: AX=0508h,AX=0509h,AX=0800h,INT 21/AX=EB03h
  5265. --------E-310900-----------------------------
  5266. INT 31 P - DPMI 0.9+ - GET AND DISABLE VIRTUAL INTERRUPT STATE
  5267.     AX = 0900h
  5268. Return: CF clear
  5269.     virtual interrupts disabled
  5270.     AL = 00h if previously disabled
  5271.        = 01h if previously enabled
  5272.     AH preserved
  5273. Notes:    the previous state may be restored simply by executing another INT 31
  5274.     a CLI instruction may be used if the previous state is unimportant,
  5275.       but should be assumed to be very slow due to trapping by the host
  5276. SeeAlso: AX=0901h,AX=0902h
  5277. --------E-310901-----------------------------
  5278. INT 31 P - DPMI 0.9+ - GET AND ENABLE VIRTUAL INTERRUPT STATE
  5279.     AX = 0901h
  5280. Return: CF clear
  5281.     virtual interrupts enabled
  5282.     AL = 00h if previously disabled
  5283.        = 01h if previously enabled
  5284.     AH preserved
  5285. Notes:    the previous state may be restored simply by executing another INT 31
  5286.     a STI instruction may be used if the previous state is unimportant,
  5287.       but should be assumed to be very slow due to trapping by the host
  5288. SeeAlso: AX=0900h,AX=0902h
  5289. --------E-310902-----------------------------
  5290. INT 31 P - DPMI 0.9+ - GET VIRTUAL INTERRUPT STATE
  5291.     AX = 0902h
  5292. Return: CF clear
  5293.     AL = 00h if disabled
  5294.        = 01h if enabled
  5295. Note:    should be used rather than PUSHF because that instruction yields the
  5296.       physical interrupt state rather than the per-client virtualized
  5297.       interrupt flag
  5298. SeeAlso: AX=0900h,AX=0901h
  5299. --------E-310A00-----------------------------
  5300. INT 31 P - DPMI 0.9+ - GET VENDOR SPECIFIC API ENTRY POINT
  5301.     AX = 0A00h
  5302.     DS:SI / DS:ESI -> case-sensitive ASCIZ vendor name or identifier
  5303. Return: CF clear if successful
  5304.         ES:DI / ES:EDI -> FAR extended API entry point
  5305.         DS, FS, GS, EAX, EBX, ECX, EDX, ESI, EBP destroyed
  5306.     CF set on error
  5307.         AX = error code (DPMI 1.0+) (8001h) (see AX=0000h)
  5308. Notes:    extended API parameters are vendor-specific
  5309.     DPMI 1.0+ supports this function solely for backward compatibility; use
  5310.       INT 2F/AX=168Ah instead
  5311. SeeAlso: INT 2F/AX=168Ah
  5312. --------E-310B00-----------------------------
  5313. INT 31 P - DPMI 0.9+ - SET DEBUG WATCHPOINT
  5314.     AX = 0B00h
  5315.     BX:CX = linear address
  5316.     DL = size (1,2,4 bytes)
  5317.     DH = type (00h execute, 01h write, 02h read/write)
  5318. Return: CF clear if successful
  5319.         BX = watchpoint handle
  5320.     CF set on error
  5321.         AX = error code (DPMI 1.0+) (8016h,8021h,8025h) (see AX=0000h)
  5322. SeeAlso: AX=0212h,AX=0601h
  5323. --------E-310B01-----------------------------
  5324. INT 31 P - DPMI 0.9+ - CLEAR DEBUG WATCHPOINT
  5325.     AX = 0B01h
  5326.     BX = watchpoint handle
  5327. Return: CF clear if successful
  5328.     CF set on error
  5329.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  5330. Note:    the watchpoint handle is freed
  5331. SeeAlso: AX=0B00h
  5332. --------E-310B02-----------------------------
  5333. INT 31 P - DPMI 0.9+ - GET STATE OF DEBUG WATCHPOINT
  5334.     AX = 0B02h
  5335.     BX = watchpoint handle
  5336. Return: CF clear if successful
  5337.         AX = status flags
  5338.         bit 0: watch point has been executed since AX=0B00h or AX=0B03h
  5339.     CF set on error
  5340.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  5341. SeeAlso: AX=0B00h,AX=0B03h
  5342. --------E-310B03-----------------------------
  5343. INT 31 P - DPMI 0.9+ - RESET DEBUG WATCHPOINT
  5344.     AX = 0B03h
  5345.     BX = watchpoint handle
  5346. Return: CF clear if successful
  5347.     CF set on error
  5348.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  5349. SeeAlso: AX=0B02h
  5350. --------E-310C00-----------------------------
  5351. INT 31 P - DPMI 1.0+ - INSTALL RESIDENT HANDLER INIT CALLBACK
  5352.     AX = 0C00h
  5353.     ES:(E)DI -> resident service provider structure (see below)
  5354. Return: CF clear if successful
  5355.     CF set on error
  5356.         AX = error code (8015h,8021h,8025h) (see AX=0000h)
  5357. Note:    calling this function declares an intent to provide resident
  5358.       protected mode services after terminating with AX=0C01h
  5359. SeeAlso: AX=0303h,AX=0C01h
  5360.  
  5361. Format of resident service provider structure:
  5362. Offset    Size    Description
  5363.  00h    QWORD    descriptor for 16-bit data segment
  5364.  08h    QWORD    descriptor for 16-bit code segment (zeros if not supported)
  5365.  10h    WORD    offset of 16-bit callback procedure
  5366.  12h  2 BYTEs    reserved
  5367.  14h    QWORD    descriptor for 32-bit data segment
  5368.  1Ch    QWORD    descriptor for 32-bit code segment (zeros if not supported)
  5369.  24h    DWORD    offset of 32-bit callback procedure
  5370. --------E-310C01-----------------------------
  5371. INT 31 P - DPMI 1.0+ - TERMINATE AND STAY RESIDENT
  5372.     AX = 0C01h
  5373.     BL = return code
  5374.     DX = number of paragraphs of DOS memory to reserve (0 or >= 6)
  5375. Return: never
  5376. Notes:    should only be used if the program will only provide services to
  5377.       other DPMI programs
  5378.     any protected mode memory remains allocated to the program unless
  5379.       explicitly freed before this call
  5380.     must first call AX=0C00h or program will simply be terminated
  5381. SeeAlso: AX=0C00h,INT 21/AH=31h
  5382. --------E-310D00-----------------------------
  5383. INT 31 P - DPMI 1.0+ - ALLOCATE SHARED MEMORY
  5384.     AX = 0D00h
  5385.     ES:(E)DI -> shared memory allocation request structure (see below)
  5386. Return: CF clear if successful
  5387.         request structure updated
  5388.     CF set on error
  5389.         AX = error code (8012h,8013h,8014h,8016h,8021h) (see AX=0000h)
  5390. Note:    first 16 bytes of memory block will be initialized to zeros on the
  5391.       first allocation
  5392. SeeAlso: AX=0501h,AX=0D01h,AX=0D02h
  5393.  
  5394. Format of shared memory allocation request structure:
  5395. Offset    Size    Description
  5396.  00h    DWORD    requested length of shared memory block in bytes
  5397.  04h    DWORD    (return) allocated length of block
  5398.  08h    DWORD    (return) shared memory handle
  5399.  0Ch    DWORD    (return) linear address of memory block
  5400.  10h  6 BYTEs    selector:offset32 of ASCIZ name for memory block
  5401.         (name max 128 bytes)
  5402.  16h  2 BYTEs    reserved
  5403.  18h  4 BYTEs    reserved (00h)
  5404. --------E-310D01-----------------------------
  5405. INT 31 P - DPMI 1.0+ - FREE SHARED MEMORY
  5406.     AX = 0D01h
  5407.     SI:DI = shared memory block handle
  5408. Return: CF clear if successful
  5409.     CF set on error
  5410.         AX = error code (8023h) (see AX=0000h)
  5411. Notes:    handle becomes invalid after this call
  5412.     DPMI maintains separate global and virtual machine use counts for each
  5413.       shared memory block; when the global use counts reaches zero, the
  5414.       block is finally destroyed
  5415. SeeAlso: AX=0502h,AX=0D00h
  5416. --------E-310D02-----------------------------
  5417. INT 31 P - DPMI 1.0+ - SERIALIZE SHARED MEMORY
  5418.     AX = 0D02h
  5419.     SI:DI = shared memory block handle
  5420.     DX = flags
  5421.         bit 0: return immediately rather than suspending if serialization
  5422.             unavailable
  5423.         bit 1: shared rather than exclusive serialization
  5424.         bits 2-15 reserved (0)
  5425. Return: CF clear if successful
  5426.     CF set on error
  5427.         AX = error code (8004h,8005h,8017h-8019h,8023h) (see AX=0000h)
  5428. Notes:    an exclusive serialization blocks any other serialization attempts for
  5429.       the same block by another virtual machine; a shared serialization
  5430.       blocks attempts at exclusive serialization by another virtual machine
  5431.     hosts are not required to detect deadlock
  5432.     a client's interrupt handler can cancel a serialization call which
  5433.       caused it to block by calling AX=0D03h
  5434. SeeAlso: AX=0D00h,AX=0D03h
  5435. --------E-310D03-----------------------------
  5436. INT 31 P - DPMI 1.0+ - FREE SERIALIZATION ON SHARED MEMORY
  5437.     AX = 0D03h
  5438.     SI:DI = shared memory block handle
  5439.     DX = flags
  5440.         bit 0: release shared serialization rather than exclusive serialztn
  5441.         bit 1: free pending serialization
  5442.         bits 2-15 reserved (0)
  5443. Return: CF clear if successful
  5444.     CF set on error
  5445.         AX = error code (8002h,8023h) (see AX=0000h)
  5446. SeeAlso: AX=0D00h,AX=0D02h
  5447. --------E-310E00-----------------------------
  5448. INT 31 P - DPMI 1.0+ - GET COPROCESSOR STATUS
  5449.     AX = 0E00h
  5450. Return: CF clear
  5451.     AX = coprocessor status
  5452.         bit 0: numeric coprocessor enabled for current client
  5453.         bit 1: client is emulating coprocessor
  5454.         bit 2: numeric coprocessor is present
  5455.         bit 3: host is emulating coprocessor instructions
  5456.         bits 4-7: coprocessor type
  5457.         0000 none
  5458.         0010 80287
  5459.         0011 80387
  5460.         0100 80486 with numeric coprocessor
  5461.         other reserved
  5462.         bits 8-15 not used
  5463. Note:    supported by 386MAX v6.01, which otherwise only supports DPMI 0.9
  5464. SeeAlso: AX=0E01h
  5465. --------E-310E01-----------------------------
  5466. INT 31 P - DPMI 1.0+ - SET EMULATION
  5467.     AX = 0E01h
  5468.     BX = coprocessor flag bits
  5469.         bit 0: enable numeric coprocessor for current client
  5470.         bit 1: client will emulate coprocessor
  5471.         bits 2-15 not used
  5472. Return: CF clear if successful
  5473.     CF set on error
  5474.         AX = error code (8026h) (see AX=0000h)
  5475. Note:    supported by 386MAX v6.01, which otherwise only supports DPMI 0.9
  5476. SeeAlso: AX=0E00h
  5477. --------v-32---------------------------------
  5478. INT 32 - VIRUS - reportedly used by "Tiny" Viruses
  5479. SeeAlso: INT 60"VIRUS"
  5480. --------M-330000-----------------------------
  5481. INT 33 - MS MOUSE - RESET DRIVER AND READ STATUS
  5482.     AX = 0000h
  5483. Return: AX = status
  5484.         0000h hardware/driver not installed
  5485.         FFFFh hardware/driver installed
  5486.     BX = number of buttons
  5487.         0000h other than two
  5488.         0002h two buttons (many drivers)
  5489.         0003h Mouse Systems/Logitech three-button mouse
  5490.         FFFFh two buttons
  5491. Notes:    to use mouse on a Hercules-compatible monographics card in graphics
  5492.       mode, you must first set 0040h:0049h to 6 for page 0 or 5 for page 1,
  5493.       and then call this function.    Logitech drivers v5.01 and v6.00
  5494.       reportedly do not correctly use Hercules graphics in dual-monitor
  5495.       systems, while version 4.10 does.
  5496.     the Logitech mouse driver contains the signature string "LOGITECH" 
  5497.       three bytes past the interrupt handler; many of the Logitech mouse
  5498.       utilities check for this signature.
  5499. SeeAlso: AX=0011h,AX=0021h,AX=002Fh,INT 62/AX=007Ah,INT 74
  5500. --------M-330001-----------------------------
  5501. INT 33 - MS MOUSE - SHOW MOUSE CURSOR
  5502.     AX = 0001h
  5503. SeeAlso: AX=0002h,INT 16/AX=FFFEh,INT 62/AX=007Bh
  5504. --------M-330002-----------------------------
  5505. INT 33 - MS MOUSE - HIDE MOUSE CURSOR
  5506.     AX = 0002h
  5507. Note:    multiple calls to hide the cursor will require multiple calls to
  5508.       function 01h to unhide it.
  5509. SeeAlso: AX=0001h,AX=0010h,INT 16/AX=FFFFh,INT 62/AX=007Bh
  5510. --------M-330003-----------------------------
  5511. INT 33 - MS MOUSE - RETURN POSITION AND BUTTON STATUS
  5512.     AX = 0003h
  5513. Return: BX = button status
  5514.        bit 0  left button pressed if 1
  5515.        bit 1  right button pressed if 1
  5516.        bit 2  middle button pressed if 1 (Mouse Systems/Logitech mouse)
  5517.     CX = column
  5518.     DX = row
  5519. SeeAlso: AX=0004h,AX=000Bh,INT 2F/AX=D000h"ZWmous"
  5520. --------M-330004-----------------------------
  5521. INT 33 - MS MOUSE - POSITION MOUSE CURSOR
  5522.     AX = 0004h
  5523.     CX = column
  5524.     DX = row
  5525. Note:    the row and column are truncated to the next lower multiple of the cell
  5526.       size; however, some versions of the Microsoft documentation
  5527.       incorrectly state that the coordinates are rounded
  5528. SeeAlso: AX=0003h,INT 62/AX=0081h
  5529. --------M-330005-----------------------------
  5530. INT 33 - MS MOUSE - RETURN BUTTON PRESS DATA
  5531.     AX = 0005h
  5532.     BX = button
  5533.         0000h left
  5534.         0001h right
  5535.         0002h middle (Mouse Systems/Logitech mouse)
  5536. Return: AX = button states
  5537.         bit 0 left button pressed if 1
  5538.         bit 1 right button pressed if 1
  5539.         bit 2 middle button pressed if 1 (Mouse Systems/Logitech mouse)
  5540.     BX = number of times specified button has been pressed since last call
  5541.     CX = column at time specified button was last pressed
  5542.     DX = row at time specified button was last pressed
  5543. SeeAlso: AX=0006h,INT 62/AX=007Ch
  5544. --------M-330006-----------------------------
  5545. INT 33 - MS MOUSE - RETURN BUTTON RELEASE DATA
  5546.     AX = 0006h
  5547.     BX = button
  5548.         0000h left
  5549.         0001h right
  5550.         0002h middle (Mouse Systems/Logitech mouse)
  5551. Return: AX = button states
  5552.         bit 0 left button pressed if 1
  5553.         bit 1 right button pressed if 1
  5554.         bit 2 middle button pressed if 1 (Mouse Systems/Logitech mouse)
  5555.     BX = number of times specified button has been released since last call
  5556.     CX = column at time specified button was last released
  5557.     DX = row at time specified button was last released
  5558. SeeAlso: AX=0005h,INT 62/AX=007Ch
  5559. --------M-330007-----------------------------
  5560. INT 33 - MS MOUSE - DEFINE HORIZONTAL CURSOR RANGE
  5561.     AX = 0007h
  5562.     CX = minimum column
  5563.     DX = maximum column
  5564. SeeAlso: AX=0008h,AX=0010h,AX=0031h,INT 62/AX=0080h
  5565. --------M-330008-----------------------------
  5566. INT 33 - MS MOUSE - DEFINE VERTICAL CURSOR RANGE
  5567.     AX = 0008h
  5568.     CX = minimum row
  5569.     DX = maximum row
  5570. SeeAlso: AX=0007h,AX=0010h,AX=0031h,INT 62/AX=0080h
  5571. --------M-330009-----------------------------
  5572. INT 33 - MS MOUSE - DEFINE GRAPHICS CURSOR
  5573.     AX = 0009h
  5574.     BX = column of cursor hot spot in bitmap (-16 to 16)
  5575.     CX = row of cursor hot spot (-16 to 16)
  5576.     ES:DX -> bitmap
  5577.         16 words screen mask
  5578.         16 words cursor mask
  5579.             each word defines the sixteen pixels of a row, low bit
  5580.             rightmost
  5581. SeeAlso: AX=000Ah,AX=0012h,AX=002Ah,INT 62/AX=007Fh
  5582. --------M-33000A-----------------------------
  5583. INT 33 - MS MOUSE - DEFINE TEXT CURSOR
  5584.     AX = 000Ah
  5585.     BX = hardware/software text cursor
  5586.         0000h software
  5587.         CX = screen mask
  5588.         DX = cursor mask
  5589.         0001h hardware
  5590.         CX = start scan line
  5591.         DX = end scan line
  5592. Note:    when the software cursor is selected, the char/attribute data at the
  5593.       current screen position is ANDed with the screen mask and then XORed
  5594.       with the cursor mask
  5595. SeeAlso: AX=0009h,INT 62/AX=007Eh
  5596. --------M-33000B-----------------------------
  5597. INT 33 - MS MOUSE - READ MOTION COUNTERS
  5598.     AX = 000Bh
  5599. Return: CX = number of mickeys mouse moved horizontally since last call
  5600.     DX = number of mickeys mouse moved vertically
  5601. Notes:    a mickey is the smallest increment the mouse can sense
  5602.     positive values indicate down/right
  5603. SeeAlso: AX=0003h,AX=001Bh,AX=0027h
  5604. --------M-33000C-----------------------------
  5605. INT 33 - MS MOUSE - DEFINE INTERRUPT SUBROUTINE PARAMETERS
  5606.     AX = 000Ch
  5607.     CX = call mask
  5608.          bit 0 call if mouse moves
  5609.          bit 1 call if left button pressed
  5610.          bit 2 call if left button released
  5611.          bit 3 call if right button pressed
  5612.          bit 4 call if right button released
  5613.          bit 5 call if middle button pressed (Mouse Systems/Logitech mouse)
  5614.          bit 6 call if middle button released (Mouse Sys/Logitech mouse)
  5615.     ES:DX -> FAR routine
  5616. Notes:    when the subroutine is called, it is passed the following values:
  5617.       AX = condition mask (same bit assignments as call mask)
  5618.       BX = button state
  5619.       CX = cursor column
  5620.       DX = cursor row
  5621.       SI = horizontal mickey count
  5622.       DI = vertical mickey count
  5623.     some versions of the Microsoft documentation incorrectly state that CX
  5624.       bit 0 means call if mouse cursor moves, and swap the meanings of SI
  5625.       and DI
  5626. SeeAlso: AX=0018h
  5627. --------M-33000D-----------------------------
  5628. INT 33 - MS MOUSE - LIGHT PEN EMULATION ON
  5629.     AX = 000Dh
  5630. SeeAlso: AX=000Eh,INT 10/AH=04h
  5631. --------M-33000E-----------------------------
  5632. INT 33 - MS MOUSE - LIGHT PEN EMULATION OFF
  5633.     AX = 000Eh
  5634. SeeAlso: AX=000Dh
  5635. --------M-33000F-----------------------------
  5636. INT 33 - MS MOUSE - DEFINE MICKEY/PIXEL RATIO
  5637.     AX = 000Fh
  5638.     CX = number of mickeys per 8 pixels horizontally (default 8)
  5639.     DX = number of mickeys per 8 pixels vertically (default 16)
  5640. SeeAlso: AX=0013h,AX=001Ah,INT 62/AX=0082h
  5641. --------M-330010-----------------------------
  5642. INT 33 - MS MOUSE - DEFINE SCREEN REGION FOR UPDATING
  5643.     AX = 0010h
  5644.     CX,DX = X,Y coordinates of upper left corner
  5645.     SI,DI = X,Y coordinates of lower right corner
  5646. Note:    mouse cursor is hidden in the specified region, and needs to be
  5647.       explicitly turned on again
  5648. SeeAlso: AX=0001h,AX=0002h,AX=0007h,AX=0010h"Genius MOUSE",AX=0031h
  5649. --------M-330010-----------------------------
  5650. INT 33 - Genius MOUSE - DEFINE SCREEN REGION FOR UPDATING
  5651.     AX = 0010h
  5652.     ES:DX -> update region list (see below)
  5653. Notes:    mouse cursor is hidden in the specified region, and needs to be
  5654.       explicitly turned on again
  5655.     this version of the call is described in an August 1988 version of the
  5656.       Genius Mouse programmer's reference; it has been changed to conform
  5657.       to the Microsoft version shown above by version 9.06 (and possibly
  5658.       earlier versions)
  5659. SeeAlso: AX=0001h,AX=0002h,AX=0007h,AX=0010h"MS MOUSE"
  5660.  
  5661. Format of update region list:
  5662. Offset    Size    Description
  5663.  00h    WORD    left-most column
  5664.  02h    WORD    top-most row
  5665.  04h    WORD    right-most column
  5666.  06h    WORD    bottom-most row
  5667. --------M-330011-----------------------------
  5668. INT 33 - Genius Mouse 9.06 - GET NUMBER OF BUTTONS
  5669.     AX = 0011h
  5670. Return: AX = FFFFh
  5671.     BX = number of buttons
  5672. SeeAlso: AX=0000h
  5673. --------M-330012-----------------------------
  5674. INT 33 - MS MOUSE - SET LARGE GRAPHICS CURSOR BLOCK
  5675.     AX = 0012h
  5676.     BH = cursor width in words
  5677.     CH = rows in cursor
  5678.     BL = horizontal hot spot (-16 to 16)
  5679.     CL = vertical hot spot (-16 to 16)
  5680.     ES:DX -> bit map of screen and cursor maps
  5681. Return: AX = FFFFh if successful
  5682. SeeAlso: AX=0009h,AX=002Ah,AX=0035h
  5683. --------M-330013-----------------------------
  5684. INT 33 - MS MOUSE - DEFINE DOUBLE-SPEED THRESHOLD
  5685.     AX = 0013h
  5686.     DX = threshold speed in mickeys/second, 0000h = default of 64/second
  5687. Note:    if speed exceeds threshold, the cursor's on-screen motion is doubled
  5688. SeeAlso: AX=000Fh,AX=001Bh,AX=002Ch
  5689. --------M-330014-----------------------------
  5690. INT 33 - MS MOUSE - EXCHANGE INTERRUPT SUBROUTINES
  5691.     AX = 0014h
  5692.     CX = call mask (see AX=000Ch)
  5693.     ES:DX -> FAR routine 
  5694. Return: CX = call mask of previous interrupt routine
  5695.     ES:DX = FAR address of previous interrupt routine
  5696. SeeAlso: AX=000Ch,AX=0018h
  5697. --------M-330015-----------------------------
  5698. INT 33 - MS MOUSE - RETURN DRIVER STORAGE REQUIREMENTS
  5699.     AX = 0015h
  5700. Return: BX = size of buffer needed to store driver state
  5701. SeeAlso: AX=0016h,AX=0017h,AX=0042h
  5702. --------M-330016-----------------------------
  5703. INT 33 - MS MOUSE - SAVE DRIVER STATE
  5704.     AX = 0016h
  5705.     BX = size of buffer (see AX=0015h)
  5706.     ES:DX -> buffer for driver state
  5707. Note:    although not documented, many drivers appear to require BX on input
  5708. SeeAlso: AX=0015h,AX=0017h
  5709. --------M-330017-----------------------------
  5710. INT 33 - MS MOUSE - RESTORE DRIVER STATE
  5711.     AX = 0017h
  5712.     BX = size of buffer (see AX=0015h)
  5713.     ES:DX -> buffer containing saved state
  5714. Notes:    although not documented, many drivers appear to require BX on input
  5715.     some mouse drivers range-check the values in the saved state based on
  5716.       the current video mode; thus, the video mode should be restored
  5717.       before the mouse driver's state is restored
  5718. SeeAlso: AX=0015h,AX=0016h
  5719. --------M-330018-----------------------------
  5720. INT 33 - MS MOUSE - SET ALTERNATE MOUSE USER HANDLER
  5721.     AX = 0018h
  5722.     CX = call mask
  5723.          bit 0 call if mouse moves
  5724.          bit 1 call if left button pressed
  5725.          bit 2 call if left button released
  5726.          bit 3 call if right button pressed
  5727.          bit 4 call if right button released
  5728.          bit 5 call if shift button pressed during event
  5729.          bit 6 call if ctrl key pressed during event
  5730.          bit 7 call if alt key pressed during event
  5731.     ES:DX -> FAR routine
  5732. Return: AX = 0018h if successful
  5733.        = FFFFh on error
  5734. Notes:    when the subroutine is called, it is passed the following values:
  5735.       AX = condition mask (same bit assignments as call mask)
  5736.       BX = button state
  5737.       CX = cursor column
  5738.       DX = cursor row
  5739.       SI = horizontal mickey count
  5740.       DI = vertical mickey count
  5741.     up to three handlers can be defined by separate calls to this function
  5742. SeeAlso: AX=000Ch,AX=0014h,AX=0019h
  5743. --------M-330019-----------------------------
  5744. INT 33 - MS MOUSE - RETURN USER ALTERNATE INTERRUPT VECTOR
  5745.     AX = 0019h
  5746.     CX = call mask (see AX=0018h)
  5747. Return: BX:DX = user interrupt vector
  5748.     CX = call mask (0000h if not found)
  5749. Note:    attempts to find a user event handler (defined by function 18h)
  5750.       whose call mask matches CX
  5751. SeeAlso: AX=0018h
  5752. --------M-33001A-----------------------------
  5753. INT 33 - MS MOUSE - SET MOUSE SENSITIVITY
  5754.     AX = 001Ah
  5755.     BX = horizontal speed \
  5756.     CX = vertical speed   / (see AX=000Fh)
  5757.     DX = double speed threshold (see AX=0013h)
  5758. SeeAlso: AX=0013h,AX=001Bh,INT 62/AX=0082h
  5759. --------M-33001B-----------------------------
  5760. INT 33 - MS MOUSE - RETURN MOUSE SENSITIVITY
  5761.     AX = 001Bh
  5762. Return: BX = horizontal speed
  5763.     CX = vertical speed
  5764.     DX = double speed threshold
  5765. SeeAlso: AX=000Bh,AX=001Ah
  5766. --------M-33001C-----------------------------
  5767. INT 33 - MS MOUSE - SET INTERRUPT RATE
  5768.     AX = 001Ch
  5769.     BX = rate
  5770.         00h no interrupts allowed
  5771.         01h 30 per second
  5772.         02h 50 per second
  5773.         03h 100 per second
  5774.         04h 200 per second
  5775. Notes:    only available on InPort mouse
  5776.     values greater than 4 may cause unpredictable driver behavior
  5777. --------M-33001D-----------------------------
  5778. INT 33 - MS MOUSE - DEFINE DISPLAY PAGE NUMBER
  5779.     AX = 001Dh
  5780.     BX = display page number
  5781. Note:    the cursor will be displayed on the specified page
  5782. SeeAlso: AX=001Eh
  5783. --------M-33001E-----------------------------
  5784. INT 33 - MS MOUSE - RETURN DISPLAY PAGE NUMBER
  5785.     AX = 001Eh
  5786. Return: BX = display page number
  5787. SeeAlso: AX=001Dh
  5788. --------M-33001F-----------------------------
  5789. INT 33 - MS MOUSE - DISABLE MOUSE DRIVER
  5790.     AX = 001Fh
  5791. Return: AX = 001Fh unsuccessful
  5792.          FFFFh successful
  5793.     ES:BX = vector for INT 33h before mouse driver was first installed
  5794. Notes:    restores vectors for INT 10h and INT 71h (8086) or INT 74h (286/386)
  5795.     if you restore Int 33h to ES:BX, driver will be completely disabled
  5796.     many drivers return AX=001Fh even though the driver has been disabled
  5797. SeeAlso: AX=0020h
  5798. --------M-330020-----------------------------
  5799. INT 33 - MS MOUSE - ENABLE MOUSE DRIVER
  5800.     AX = 0020h
  5801. Return: AX = 0020h unsuccessful (or driver not installed)
  5802.          FFFFh successful
  5803. Notes:    restores vectors for INT 10h and INT 71h (8086) or INT 74h (286/386)
  5804.       which were removed by function 1Fh
  5805.     many drivers return AX=0020h even though the driver has been enabled
  5806. SeeAlso: AX=001Fh
  5807. --------M-330021-----------------------------
  5808. INT 33 - MS MOUSE - SOFTWARE RESET
  5809.     AX = 0021h
  5810. Return: AX = FFFFh if mouse driver installed
  5811.         BX = number of buttons (FFFFh = two buttons)
  5812.          0021h if mouse driver not installed
  5813. Note:    identical to funtion 00h, but does not reset the mouse
  5814. SeeAlso: AX=0000h
  5815. --------M-330022-----------------------------
  5816. INT 33 - MS MOUSE - SET LANGUAGE FOR MESSAGES
  5817.     AX = 0022h
  5818.     BX = language
  5819.         00h English
  5820.         01h French
  5821.         02h Dutch
  5822.         03h German
  5823.         04h Swedish
  5824.         05h Finnish
  5825.         06h Spanish
  5826.         07h Portugese
  5827.         08h Italian
  5828. Note:    only available on international versions of the driver, US versions
  5829.       ignore this call
  5830. SeeAlso: AX=0023h
  5831. --------M-330023-----------------------------
  5832. INT 33 - MS MOUSE - GET LANGUAGE FOR MESSAGES
  5833.     AX = 0023h
  5834. Return:    BX = language (see AX=0022h)
  5835. Note:    the US version of the driver always returns zero 
  5836. SeeAlso: AX=0022h
  5837. --------M-330024-----------------------------
  5838. INT 33 - MS MOUSE v6.26+ - GET SOFTWARE VERSION, MOUSE TYPE, AND IRQ NUMBER
  5839.     AX = 0024h
  5840. Return: AX = FFFFh on error
  5841.     otherwise,
  5842.         BH = major version
  5843.         BL = minor version
  5844.         CH = type (1=bus, 2=serial, 3=InPort, 4=PS/2, 5=HP)
  5845.         CL = interrupt (0=PS/2, 2=IRQ2, 3=IRQ3,...,7=IRQ7)
  5846. SeeAlso: AX=004Dh,AX=006Dh
  5847. --------M-330025-----------------------------
  5848. INT 33 - MS MOUSE v6.26+ - GET GENERAL DRIVER INFORMATION
  5849.     AX = 0025h
  5850. Return: AX = general information
  5851.         bit 15: driver loaded as device driver rather than TSR
  5852.         bit 14: driver is newer integrated type
  5853.         bits 13,12: current cursor type
  5854.             00 software text cursor
  5855.             01 hardware text cursor
  5856.             1X graphics cursor
  5857.         bits 11-8: interrupt rate (see AX=001Ch)
  5858.         bits 7-0:  count of currently-active Mouse Display Drivers (MDD),
  5859.             the newer integrated driver type
  5860.     BX = cursor lock flag for OS/2 to prevent reentrancy problems
  5861.     CX = mouse code active flag (for OS/2)
  5862.     DX = mouse driver busy flag (for OS/2)
  5863. --------M-330026-----------------------------
  5864. INT 33 - MS MOUSE v6.26+ - GET MAXIMUM VIRTUAL COORDINATES
  5865.     AX = 0026h
  5866. Return: BX = mouse-disabled flag
  5867.     CX = maximum virtual X (for current video mode)
  5868.     DX = maximum virtual Y
  5869. SeeAlso: AX=0031h
  5870. --------M-330026-----------------------------
  5871. INT 33 - Genius Mouse 9.06 - ???
  5872.     AX = 0026h
  5873. Return: CX = 0204h if CX was 0105h on entry, else unchanged
  5874. --------M-330027-----------------------------
  5875. INT 33 - MS MOUSE v7.01+ - GET SCREEN/CURSOR MASKS AND MICKEY COUNTS
  5876.     AX = 0027h
  5877. Return: AX = screen-mask value (or hardware cursor scan-line start for v7.02+)
  5878.     BX = cursor-mask value (or hardware cursor scan-line stop for v7.02+)
  5879.     CX = horizontal mickeys moved since last call
  5880.     DX = vertical mickeys moved since last call
  5881. SeeAlso: AX=000Bh
  5882. --------M-330028-----------------------------
  5883. INT 33 - MS MOUSE v7.0+ - SET VIDEO MODE
  5884.     AX = 0028h
  5885.     CX = new video mode (call is NOP if 0000h)
  5886.     DH = Y font size (00h = default)
  5887.     DL = X font size (00h = default)
  5888. Return: CL = status (00h = successful)
  5889. Note:    DX is ignored unless the selected video mode supports font size control
  5890. SeeAlso: AX=0029h,INT 10/AH=00h
  5891. --------M-330029-----------------------------
  5892. INT 33 - MS MOUSE v7.0+ - ENUMERATE VIDEO MODES
  5893.     AX = 0029h
  5894.     CX = previous video mode
  5895.         0000h get first supported video mode
  5896.         other get next supported mode after mode CX
  5897. Return: CX = first/next video mode (0000h = no more video modes)
  5898.     BS:DX -> description of video mode or 0000h:0000h if none
  5899. Notes:    the enumerated video modes may be in any order and may repeat
  5900.     the description string (if available) is terminated by '$' followed by
  5901.       a NUL byte
  5902. SeeAlso: AX=0028h
  5903. --------M-33002A-----------------------------
  5904. INT 33 - MS MOUSE v7.02+ - GET CURSOR HOT SPOT
  5905.     AX = 002Ah
  5906. Return: AX = internal counter controlling cursor visibility
  5907.     BX = cursor hot spot column
  5908.     CX = cursor hot spot row
  5909.     DX = mouse type (00h none, 01h bus, 02h serial, 03h InPort, 04h IBM,
  5910.              05h Hewlett-Packard)
  5911. Note:    the hot spot location is relative to the upper left corner of the
  5912.       cursor block and may range from -128 to +127 both horizontally and
  5913.       vertically
  5914. SeeAlso: AX=0009h,AX=0012h,AX=0035h
  5915. --------M-33002B-----------------------------
  5916. INT 33 - MS MOUSE v7.0+ - LOAD ACCELERATION PROFILES
  5917.     AX = 002Bh
  5918.     BX = active acceleration profile
  5919.         0001h-0004h or FFFFh to restore default curves
  5920.     ES:SI -> buffer containing acceleration profile data (see below)
  5921. Return: AX = success flag
  5922. SeeAlso: AX=002Ch,AX=002Dh,AX=0033h
  5923.  
  5924. Format of acceleration profile data:
  5925. Offset    Size    Description
  5926.  00h    BYTE    length of acceleration profile 1
  5927.  01h    BYTE    length of acceleration profile 2
  5928.  02h    BYTE    length of acceleration profile 3
  5929.  03h    BYTE    length of acceleration profile 4
  5930.  04h 32 BYTEs    threshold speeds for acceleration profile 1
  5931.  24h 32 BYTEs    threshold speeds for acceleration profile 2
  5932.  44h 32 BYTEs    threshold speeds for acceleration profile 3
  5933.  64h 32 BYTEs    threshold speeds for acceleration profile 4
  5934.  84h 32 BYTEs    speedup factor for acceleration profile 1
  5935.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  5936.  A4h 32 BYTEs    speedup factor for acceleration profile 2
  5937.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  5938.  C4h 32 BYTEs    speedup factor for acceleration profile 3
  5939.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  5940.  E4h 32 BYTEs    speedup factor for acceleration profile 4
  5941.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  5942. 104h 16 BYTEs    name of acceleration profile 1 (blank-padded)
  5943. 114h 16 BYTEs    name of acceleration profile 2 (blank-padded)
  5944. 124h 16 BYTEs    name of acceleration profile 3 (blank-padded)
  5945. 134h 16 BYTEs    name of acceleration profile 4 (blank-padded)
  5946. Note:    unused bytes in the threshold speed fields are filled with 7Fh and
  5947.       unused bytes in the speedup factor fields are filled with 10h
  5948. --------M-33002C-----------------------------
  5949. INT 33 - MS MOUSE v7.0+ - GET ACCELERATION PROFILES
  5950.     AX = 002Ch
  5951. Return: AX = status (0000h success)
  5952.     BX = currently-active acceleration profile
  5953.     ES:SI -> acceleration profile data (see AX=002Bh)
  5954. SeeAlso: AX=002Bh,AX=002Dh,AX=0033h
  5955. --------M-33002D-----------------------------
  5956. INT 33 - MS MOUSE v7.0+ - SELECT ACCELERATION PROFILE
  5957.     AX = 002Dh
  5958.     BX = acceleration level
  5959.         0001h-0004h to set profile, or FFFFh to get current profile
  5960. Return: AX = status
  5961.         0000h successful
  5962.         ES:SI -> 16-byte blank-padded name of acceleration profile
  5963.         FFFEh invalid acceleration curve number
  5964.         ES:SI destroyed
  5965.     BX = active acceleration curve number
  5966. SeeAlso: AX=0013h,AX=002Bh,AX=002Ch,AX=002Eh
  5967. --------M-33002E-----------------------------
  5968. INT 33 - MS MOUSE v8.10+ - SET ACCELERATION PROFILE NAMES
  5969.     AX = 002Eh
  5970.     BL = flag (if nonzero, fill ES:SI buffer with default names on return)
  5971.     ES:SI -> 64-byte buffer for profile names (16 bytes per name)
  5972. Return: AX = status (0000h success)
  5973.     ES:SI buffer filled with default names if BL nonzero on entry
  5974. Note:    not supported by Logitech driver v6.10
  5975. SeeAlso: AX=002Ch,AX=002Dh,AX=012Eh,AX=022Eh
  5976. --------M-33002F-----------------------------
  5977. INT 33 - MS MOUSE v7.02+ - MOUSE HARDWARE RESET
  5978.     AX = 002Fh
  5979. Return: AX = status
  5980. Note:    invoked by mouse driver v8.20 on being called with INT 2F/AX=530Bh
  5981. SeeAlso: INT 2F/AH=53h
  5982. --------M-330030-----------------------------
  5983. INT 33 - MS MOUSE v7.04+ - GET/SET BallPoint INFORMATION
  5984.     AX = 0030h
  5985.     CX = command
  5986.         0000h get status of BallPoint device
  5987.         other set rotation angle and masks
  5988.         BX = rotation angle (-32768 to 32767 degrees)
  5989.         CH = primary button mask
  5990.         CL = secondary button mask
  5991. Return: AX = button status (FFFFh if no BallPoint)
  5992.         bit 5: button 1
  5993.         bit 4: button 2
  5994.         bit 3: button 3
  5995.         bit 2: button 4
  5996.         other: zero
  5997.     BX = rotation angle (0-360 degrees)
  5998.     CH = primary button mask
  5999.     CL = secondary button mask
  6000. --------M-330031-----------------------------
  6001. INT 33 - MS MOUSE v7.05+ - GET CURRENT MINIMUM/MAXIMUM VIRTUAL COORDINATES
  6002.     AX = 0031h
  6003. Return: AX = virtual X minimum
  6004.     BX = virtual Y minimum
  6005.     CX = virtual X maximum
  6006.     DX = virtual Y maximum
  6007. Note:    the minimum and maximum values are those set by AX=0007h and AX=0008h;
  6008.       the default is minimum = 0 and maximum = absolute maximum
  6009.       (see AX=0026h)
  6010. SeeAlso: AX=0007h,AX=0008h,AX=0010h,AX=0026h
  6011. --------M-330032-----------------------------
  6012. INT 33 - MS MOUSE v7.05+ - GET ACTIVE ADVANCED FUNCTIONS
  6013.     AX = 0032h
  6014. Return: AX = active function flags (FFFFh for v8.10)
  6015.         bit 15: function 0025h supported
  6016.         bit 14: function 0026h supported
  6017.         ...
  6018.         bit 0: function 0034h supported
  6019.     BX = ??? (0000h) officially unused
  6020.     CX = ??? (E000h) officially unused
  6021.     DX = ??? (0000h) officially unused
  6022. --------M-330033-----------------------------
  6023. INT 33 - MS MOUSE v7.05+ - GET SWITCH SETTINGS AND ACCELERATION PROFILE DATA
  6024.     AX = 0033h
  6025.     CX = size of buffer
  6026.         0000h get required buffer size
  6027.         Return: AX = 0000h
  6028.             CX = required size (0154h for Logitech v6.10, 0159h
  6029.                 for MS v8.10-8.20)
  6030.         other
  6031.         ES:DX -> buffer of CX bytes
  6032.         Return: AX = 0000h
  6033.             CX = number of bytes returned
  6034.             ES:DX buffer filled (see below)
  6035. SeeAlso: AX=002Bh
  6036.  
  6037. Format of data buffer:
  6038. Offset    Size    Description
  6039.  00h    BYTE    mouse type
  6040.  01h    BYTE    current language
  6041.  02h    BYTE    horizontal sensitivity (00h-64h)
  6042.  03h    BYTE    vertical sensitivity (00h-64h)
  6043.  04h    BYTE    double-speed threshold (00h-64h)
  6044.  05h    BYTE    ballistic curve (01h-04h)
  6045.  06h    BYTE    interrupt rate (01h-04h)
  6046.  07h    BYTE    cursor override mask
  6047.  08h    BYTE    laptop adjustment
  6048.  09h    BYTE    memory type (00h-02h)
  6049.  0Ah    BYTE    SuperVGA support (00h,01h)
  6050.  0Bh    BYTE    rotation angle
  6051.  0Ch    BYTE    ???
  6052.  0Dh    BYTE    primary button (01h-04h)
  6053.  0Eh    BYTE    secondary button (01h-04h)
  6054.  0Fh    BYTE    click lock enabled (00h,01h)
  6055.  10h 324 BYTEs    acceleration profile data (see AX=002Bh)
  6056. 154h  5 BYTEs    ??? (Microsoft driver, but not Logitech)
  6057. --------M-330034-----------------------------
  6058. INT 33 - MS MOUSE v8.0+ - GET INITIALIZATION FILE
  6059.     AX = 0034h
  6060. Return: AX = status (0000h successful)
  6061.     ES:DX -> ASCIZ initialization (.INI) file name
  6062. --------M-330035-----------------------------
  6063. INT 33 - MS MOUSE v8.10+ - LCD SCREEN LARGE POINTER SUPPORT
  6064.     AX = 0035h
  6065.     BX = function
  6066.         FFFFh get current settings
  6067.         Return: AX = 0000h
  6068.             BH = style (see below)
  6069.             BL = size (see below)
  6070.             CH = threshold
  6071.             CL = active flag (00h disabled, 01h enabled)
  6072.             DX = delay
  6073.         other
  6074.         BH = style (00h normal, 01h reverse, 02h transparent)
  6075.         BL = size (00h small "1", 01h medium "1.5", 02h large "2")
  6076.         CH = threshold (00h-64h)
  6077.         CL = active flag (00h disable size change, 01h enable)
  6078.         DX = delay (0000h-0064h)
  6079.         Return: AX = 0000h
  6080. Note:    not supported by Logitech driver v6.10
  6081. SeeAlso: AX=0012h,AX=002Ah
  6082. --------M-330042-----------------------------
  6083. INT 33 - PCMOUSE - GET MSMOUSE STORAGE REQUIREMENTS
  6084.     AX = 0042h
  6085. Return: AX = FFFFh successful
  6086.         BX = buffer size in bytes for functions 50h and 52h
  6087.        = 0000h MSMOUSE not installed
  6088.        = 0042h functions 42h, 50h, and 52h not supported
  6089. Note:    this function is also supported by the Genius Mouse 9.06 driver
  6090. SeeAlso: AX=0015h,AX=0050h,AX=0052h
  6091. --------M-330043-----------------------------
  6092. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - CONFIGURE MOUSE???
  6093.     AX = 0043h
  6094.     CX:BX -> ??? buffer (see below)
  6095.     DL = ???
  6096. Return: ???
  6097. Notes:    also calls routines for INT 33/AX=0053h and INT 33/AX=004Fh
  6098.     this function is also supported by the Genius Mouse 9.06 driver
  6099.  
  6100. Format of buffer:
  6101. Offset    Size    Description
  6102.  00h    WORD    I/O port address
  6103.  02h    BYTE    ???
  6104.  03h    BYTE    interrupt number
  6105.  04h    BYTE    interrupt mask for interrupt controller
  6106.  05h  5 BYTEs    ???
  6107. --------M-330044CXCDEF-----------------------
  6108. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - TOGGLE ???
  6109.     AX = 0044h
  6110.     CX = CDEFh
  6111. Return: AX = new state of ???
  6112. Note:    this function is also supported by the Genius Mouse 9.06 driver
  6113. SeeAlso: AX=0045h
  6114. --------M-330045CXCDEF-----------------------
  6115. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - TOGGLE ???
  6116.     AX = 0045h
  6117.     CX = CDEFh
  6118. Return: AX = new state of ???
  6119. Note:    this function is also supported by the Genius Mouse 9.06 driver
  6120. SeeAlso: AX=0044h
  6121. --------M-330047-----------------------------
  6122. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SET BUTTON ASSIGNMENTS
  6123.     AX = 0047h
  6124.     ES:BX -> button assignments (3 bytes, combinations of "L", "M", "R")
  6125. Return: ???
  6126. Note:    also supported by Genius Mouse 9.06 driver
  6127. SeeAlso: AX=0067h
  6128. --------M-330048BXCDEF-----------------------
  6129. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - GET ???
  6130.     AX = 0048h
  6131.     BX = CDEFh
  6132. Return: CX = ???
  6133.     BH = ???
  6134.     BL = ??? (if 50h, driver is using PS/2 pointing device BIOS interface)
  6135. Note:    also supported by Genius Mouse 9.06 driver
  6136. --------M-33004B-----------------------------
  6137. INT 33 - Z-NIX MOUSE DRIVER v7.04d - INSTALLATION CHECK
  6138.     AX = 004Bh
  6139. Return: ES:DI -> signature/description string if installed
  6140. Note:    the signature string in v7.04d is
  6141.       "Z-NIX;BUS,AUX,Serial 3-byte and 5-byte Mouse Driver;ZMOUSE;v7.04d"
  6142. --------M-33004CBXCDEF-----------------------
  6143. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SET ??? FLAG
  6144.     AX = 004Ch
  6145.     BX = CDEFh
  6146. Note:    also supported by Genius Mouse 9.06
  6147. SeeAlso: AX=006Ch
  6148. --------M-33004D-----------------------------
  6149. INT 33 - MS MOUSE - RETURN POINTER TO COPYRIGHT STRING
  6150.     AX = 004Dh
  6151. Return: ES:DI -> copyright message "*** This is Copyright 1983 Microsoft"
  6152. Notes:    also supported by Logitech, Kraft, Genius Mouse, and Mouse Systems
  6153.       mouse drivers
  6154.     in the Genius Mouse 9.06 driver, the ASCIZ signature "KYE" immediately
  6155.       follows the above copyright message (KYE Corp. manufactures the
  6156.       driver)
  6157. SeeAlso: AX=0024h,AX=006Dh
  6158. --------M-33004F-----------------------------
  6159. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ENABLE MOUSE
  6160.     AX = 004Fh
  6161. Return: nothing
  6162. Note:    also supported by Genius Mouse 9.06
  6163. SeeAlso: AX=0043h,AX=0053h
  6164. --------M-330050-----------------------------
  6165. INT 33 - PCMOUSE - SAVE MSMOUSE STATE
  6166.     AX = 0050h
  6167.     BX = buffer size (ignored by some driver versions)
  6168.     ES:DX -> buffer
  6169. Return: AX = FFFFh if successful
  6170. Notes:    the buffer must be large enough to hold the entire state, or following
  6171.       data will be overwritten by state data in versions which ignore BX;
  6172.       use INT 33/AX=0042h to get the required size
  6173.     this function is also supported by the Genius Mouse 9.06 driver
  6174. SeeAlso: AX=0042h,AX=0052h
  6175. --------M-330052-----------------------------
  6176. INT 33 - PCMOUSE - RESTORE MSMOUSE STATE
  6177.     AX = 0052h
  6178.     BX = buffer size (ignored by some driver versions)
  6179.     ES:DX -> buffer
  6180. Return: AX = FFFFh if successful
  6181. Note:    also supported by Genius Mouse 9.06 driver
  6182. SeeAlso: AX=0050h
  6183. --------M-330053-----------------------------
  6184. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - DISABLE MOUSE
  6185.     AX = 0053h
  6186. Return: nothing
  6187. Note:    also supported by Genius Mouse 9.06
  6188. SeeAlso: AX=0043h,AX=004Fh
  6189. --------M-330054CXCDEF-----------------------
  6190. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SELECT ULTRARES ACCELERATION LEVEL
  6191.     AX = 0054h
  6192.     CX = CDEFh
  6193.     BX = ??? (NOP if <= 0000h)
  6194. Return: ???
  6195. Note:    this function is also supported by the Genius Mouse 9.06 driver
  6196. SeeAlso: AX=005Ah
  6197. --------M-330055-----------------------------
  6198. INT 33 - Kraft Mouse - GET ???
  6199.     AX = 0055h
  6200. Return: CX = ???
  6201.     DX = ???
  6202.     ES = ???
  6203. --------M-330058-----------------------------
  6204. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ???
  6205.     AX = 0058h
  6206. Return: AX = CS of driver
  6207.     CX:BX = original INT 33 vector
  6208.     DX = ???
  6209. Note:    this function is also supported by the Genius Mouse 9.06 driver
  6210. --------M-33005A-----------------------------
  6211. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SET ULTRARES ACCELERATIONS
  6212.     AX = 005Ah
  6213.     CX = number of WORDs to copy (max 0014h, but not range-checked)
  6214.     DX:SI -> buffer containing thresholds??? (CX words)
  6215.     DX:BX -> buffer containing acceleration values???
  6216.         (9*14h words, only first CX of each 14h used)
  6217.     ???
  6218. Return: CF clear
  6219.     ???
  6220. Note:    this function is also supported by Genius Mouse 9.06
  6221. SeeAlso: AX=0054h
  6222. --------M-330061BXCDEF-----------------------
  6223. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ???
  6224.     AX = 0061h
  6225.     BX = CDEFh
  6226. Return: CX = ???
  6227. Note:    also supported by Genius Mouse 9.06
  6228. --------M-330067-----------------------------
  6229. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - GET MOUSE BUTTONS???
  6230.     AX = 0067h         
  6231. Return: BL = number of buttons???
  6232. Note:    also supported by Genius Mouse 9.06
  6233. SeeAlso: AX=0047h
  6234. --------M-33006CBXCDEF-----------------------
  6235. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - CLEAR ??? FLAG
  6236.     AX = 006Ch
  6237.     BX = CDEFh
  6238. Note:    also supported by Genius Mouse 9.06
  6239. SeeAlso: AX=004Ch   
  6240. --------M-33006D-----------------------------
  6241. INT 33 - MS MOUSE - GET VERSION STRING
  6242.     AX = 006Dh
  6243. Return: ES:DI -> Microsoft version number of resident driver (see below)
  6244. Notes:    also supported by Logitech, Mouse Systems, Kraft, and Genius mouse
  6245.       drivers
  6246.     the Mouse Systems 7.01 and Genius Mouse 9.06 drivers report their
  6247.       Microsoft version as 7.00 even though they do not support any of the
  6248.       functions from 0025h through 002Dh supported by the MS 7.00 driver
  6249.       (the Genius Mouse driver supports function 0026h, but it differs
  6250.       from the Microsoft function)
  6251. SeeAlso: AX=0024h,AX=004Dh,AX=266Ch
  6252.  
  6253. Format of Microsoft version number:
  6254. Offset    Size    Description
  6255.  00h    BYTE    major version
  6256.  01h    BYTE    minor version (BCD)
  6257. --------M-330070BXABCD-----------------------
  6258. INT 33 - Mouse Systems MOUSE DRIVER - POPUP.COM - INSTALLATION CHECK
  6259.     AX = 0070h
  6260.     BX = ABCDh
  6261. Return: AX = ABCDh if installed
  6262.         BX:CX -> data structure (see below)
  6263. Notes:    this function is also supported by the Genius Mouse 9.06 driver
  6264.     the v7.01 POPUP.COM and menu drivers also check for the signature
  6265.       CDh ABh BAh DCh at offset -2Ch from the interrupt handler
  6266.     if POPUP is not loaded, the returned data structure contains the proper
  6267.       signature at offset 00h, but not at offset 08h
  6268.  
  6269. Format of data structure:
  6270. Offset    Size    Description
  6271.  00h    WORD    signature ABCDh
  6272.  02h    DWORD    pointer to info structure???
  6273.  06h  2 BYTEs    ???
  6274.  08h    WORD    signature ABCDh
  6275.  
  6276. Format of info structure:
  6277. Offset    Size    Description
  6278.  00h    WORD    driver version
  6279.  02h  8 BYTEs    ???
  6280.  0Ah    WORD    segment of ???
  6281.     ???
  6282. --------M-330072BXABCD-----------------------
  6283. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ???
  6284.     AX = 0072h
  6285.     BX = ABCDh
  6286. Return: ???
  6287. Note:    this function is also supported by the Genius Mouse 9.06 driver
  6288. --------M-330073BXCDEF-----------------------
  6289. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - GET BUTTON ASSIGNMENTS
  6290.     AX = 0073h
  6291.     BX = CDEFh
  6292.     ES:DX -> 3-byte buffer for button assignments
  6293. Return: CX = number of buttons???
  6294.     ES:DX buffer filled (default is "LMR")
  6295. Note:    also supported by Genius Mouse 9.06
  6296. SeeAlso: AX=0067h
  6297. --------M-33012E-----------------------------
  6298. INT 33 - MS MOUSE v8.10+ - ???
  6299.     AX = 012Eh
  6300.     BL = ???
  6301. Return: AX = 0000h
  6302. Note:    not supported by Logitech driver v6.10
  6303. SeeAlso: AX=002Eh,AX=022Eh
  6304. --------M-33022E-----------------------------
  6305. INT 33 - MS MOUSE v8.10+ - ???
  6306.     AX = 022Eh
  6307.     BL = ???
  6308. Return: AX = 0000h
  6309. Note:    not supported by Logitech driver v6.10
  6310. SeeAlso: AX=002Eh,AX=012Eh
  6311. --------M-33136C-----------------------------
  6312. INT 33 - LOGITECH MOUSE v6.10+ - ???
  6313.     AX = 136Ch
  6314.     BX = ???
  6315. Return: AX = ???
  6316.     BX = ???
  6317. --------M-33146C-----------------------------
  6318. INT 33 - LOGITECH MOUSE v6.10+ - GET/SET ???
  6319.     AX = 146Ch
  6320.     BL = function
  6321.         00h set ???
  6322.         BH = new value (zero/nonzero to clear/set)
  6323.         else get ???
  6324.         Return: ???
  6325. --------M-33156C-----------------------------
  6326. INT 33 - LOGITECH MOUSE v6.10+ - GET SIGNATURE AND VERSION STRINGS
  6327.     AX = 156Ch
  6328. Return: ES:DI -> signature "LOGITECH MOUSE DRIVER"
  6329.     ES:SI -> version string, terminated with CRLF
  6330. --------M-33166C-----------------------------
  6331. INT 33 - LOGITECH MOUSE v6.10+ - ???
  6332.     AX = 166Ch
  6333.     BL = ???
  6334.         00h ???
  6335.         01h ???
  6336.         other ???
  6337.         BH = new value of ???
  6338.         Return: AX = FFFFh
  6339. --------M-33176C-----------------------------
  6340. INT 33 - LOGITECH MOUSE v6.10+ - ???
  6341.     AX = 176Ch
  6342.     ???
  6343. Return: ???
  6344. --------M-33186C-----------------------------
  6345. INT 33 - LOGITECH MOUSE v6.10+ - ???
  6346.     AX = 186Ch
  6347.     ???
  6348. Return: ???
  6349. --------M-33196C-----------------------------
  6350. INT 33 - LOGITECH MOUSE v6.10+ - ???
  6351.     AX = 196Ch
  6352.     ???
  6353. Return: ???
  6354. --------M-331A6C-----------------------------
  6355. INT 33 - LOGITECH MOUSE v6.10+ - GET ???
  6356.     AX = 1A6Ch
  6357. Return: AX = FFFFh
  6358.     BX = ???
  6359.     CX = ???
  6360. SeeAlso: AX=1B6Ch
  6361. --------M-331B6C-----------------------------
  6362. INT 33 - LOGITECH MOUSE v6.10+ - SET ???
  6363.     AX = 1B6Ch
  6364.     BX = new value for ??? (0000h-0003h)
  6365. Return: AX = FFFFh
  6366. SeeAlso: AX=1A6Ch
  6367. --------M-331C6C-----------------------------
  6368. INT 33 - LOGITECH MOUSE v6.10+ - ???
  6369.     AX = 1C6Ch
  6370.     BX = ???
  6371.         <42h ???
  6372.         =42h ???
  6373.         >42h ???
  6374.             ES:DI -> ???
  6375.             Return: AX = ???
  6376. --------M-331D6C-----------------------------
  6377. INT 33 - LOGITECH MOUSE - GET COMPASS PARAMETER
  6378.     AX = 1D6Ch
  6379. Return: BX = direction (0=north, 1=south, 2=east, 3=west)
  6380. SeeAlso: AX=1E6Ch
  6381. --------M-331E6C-----------------------------
  6382. INT 33 - LOGITECH MOUSE - SET COMPASS PARAMETER
  6383.     AX = 1E6Ch
  6384.     BX = direction (0=north, 1=south, 2=east, 3=west)
  6385. SeeAlso: AX=1D6Ch
  6386. --------M-331F6C-----------------------------
  6387. INT 33 - LOGITECH MOUSE - GET BALLISTICS INFORMATION
  6388.     AX = 1F6Ch
  6389. Return: BX = 0=off, 1=on
  6390.     CX = 1=low, 2=high
  6391. SeeAlso: AX=002Ch,AX=236Ch
  6392. --------M-33206C-----------------------------
  6393. INT 33 - LOGITECH MOUSE - SET LEFT OR RIGHT PARAMETER
  6394.     AX = 206Ch
  6395.     BX = parameter (00h = right, FFh = left)
  6396. SeeAlso: AX=216Ch
  6397. --------M-33216C-----------------------------
  6398. INT 33 - LOGITECH MOUSE - GET LEFT OR RIGHT PARAMETER
  6399.     AX = 216Ch
  6400. Return: BX = parameter (00h = right, FFh = left)
  6401. SeeAlso: AX=206Ch
  6402. --------M-33226C-----------------------------
  6403. INT 33 - LOGITECH MOUSE - REMOVE DRIVER FROM MEMORY
  6404.     AX = 226Ch
  6405. Note:    this only frees memory; does not restore hooked interrupts
  6406. --------M-33236C-----------------------------
  6407. INT 33 - LOGITECH MOUSE - SET BALLISTICS INFORMATION
  6408.     AX = 236Ch
  6409.     BX = 0=off, 1=on
  6410.     CX = 1=low, 2=high
  6411. SeeAlso: AX=002Ch,AX=1F6Ch
  6412. --------M-33246C-----------------------------
  6413. INT 33 - LOGITECH MOUSE - GET PARAMETERS AND RESET SERIAL MOUSE
  6414.     AX = 246Ch
  6415.     ES:DX -> parameter table buffer (see below)
  6416. Return: AX = FFFFh if driver installed for serial mouse
  6417. SeeAlso: AX=0000h,AX=256Ch
  6418.  
  6419. Format of parameter table:
  6420. Offset    Size    Description
  6421.  00h    WORD    baud rate divided by 100  (serial mouse only)
  6422.  02h    WORD    emulation          (serial mouse only)
  6423.  04h    WORD    report rate          (serial mouse only)
  6424.  06h    WORD    firmware revision      (serial mouse only)
  6425.  08h    WORD    0              (serial mouse only)
  6426.  0Ah    WORD    port              (serial mouse only)
  6427.  0Ch    WORD    physical buttons
  6428.  0Eh    WORD    logical buttons
  6429. --------M-33256CBX00h -----------------------
  6430. INT 33 - LOGITECH MOUSE - SET PARAMETERS
  6431.     AX = 256Ch
  6432.     BX = 00h set baud rate (serial mouse only)
  6433.         CX = rate (0=1200, 1=2400, 2=4800, 3=9600)
  6434.        = 01h set emulation (serial mouse only)
  6435.         CX = emulation
  6436.             0 = 5 byte packed binary
  6437.             1 = 3 byte packed binary
  6438.             2 = hexadecimal
  6439.             3 = relative bit pad
  6440.             4 = not supported
  6441.             5 = MM Series
  6442.             6 = not supported
  6443.             7 = Microsoft
  6444.        = 02h set report rate (serial mouse only)
  6445.         CX = rate (0=10, 1=20, 2=35, 3=50, 4=70, 5=100, 6=150)
  6446.        = 03h set port (serial mouse only)
  6447.         CX = port (1, 2)
  6448.        = 04h set mouse logical buttons
  6449.         CX = buttons (2, 3)
  6450. Return: AX = FFFFh if driver installed for serial mouse
  6451. SeeAlso: AX=246Ch,AX=276Ch
  6452. --------M-33266C-----------------------------
  6453. INT 33 - LOGITECH MOUSE - GET VERSION???
  6454.     AX = 266Ch
  6455. Return: BX = 'SS'
  6456.     CH = '4'  major version number
  6457.     CL = '1'  minor version number
  6458. SeeAlso: AX=006Dh
  6459. --------M-33276C-----------------------------
  6460. INT 33 - LOGITECH MOUSE - ??? Tries MMSeries, Baud 2400
  6461.     AX = 276Ch
  6462. SeeAlso: AX=256Ch
  6463. --------M-333000-----------------------------
  6464. INT 33 - Smooth Mouse Driver, PrecisePoint - INSTALLATION CHECK
  6465.     AX = 3000h
  6466. Return: AX = FFFFh if installed
  6467.         BX = version number (BH = major, BL = minor)
  6468. Program: SMD is a programmer's library by Andy Hakim which provides a
  6469.       graphics-style mouse cursor in text mode.  PrecisePoint is an
  6470.       SMD-based TSR which replaces the block mouse cursor in text
  6471.       applications.
  6472. SeeAlso: AX=0000h,AX=3001h,AX=3003h
  6473. --------M-333001-----------------------------
  6474. INT 33 - Smooth Mouse Driver, PrecisePoint - ENABLE SMOOTH MOUSE
  6475.     AX = 3001h
  6476. Return: AX = status (0000h = disabled, 0001h = enabled)
  6477. Note:    SMD remains disabled if running under Desqview or in graphics mode
  6478. SeeAlso: AX=0001h,AX=0002h,AX=3002h
  6479. --------M-333002-----------------------------
  6480. INT 33 - Smooth Mouse Driver, PrecisePoint - DISABLE SMOOTH MOUSE
  6481.     AX = 3002h
  6482. Return: AX = status (0000h = disabled, 0001h = enabled)
  6483. SeeAlso: AX=0001h,AX=0002h,AX=3000h,AX=3001h
  6484. --------M-333003-----------------------------
  6485. INT 33 - Smooth Mouse Driver, PrecisePoint - GET INFORMATION
  6486.     AX = 3003h
  6487.     BL = data structure selector
  6488.         00h Primary Bitmap (used for 25 line mode)
  6489.         01h Secondary Bitmap (used for 43/50 line modes)
  6490.         02h Sacrifice Character Map
  6491.         03h Program Information
  6492. Return: ES:DX -> selected data structure
  6493. SeeAlso: AX=3000h
  6494.  
  6495. Format of Primary/Secondary Bitmap [SMD_BITMAP_STRUCT]
  6496. Offset    Size    Description
  6497.  00h    BYTE    vertical size of bitmap (00h - 10h)
  6498.  01h    BYTE    horizontal size of bitmap (00h - 10h)
  6499.  02h    BYTE    vertical hotspot position (00h - 10h)
  6500.  03h    BYTE    horizontal hotspot position (00h - 10h)
  6501.  04h 16 WORDs    cursor bitmap data
  6502.  14h 16 WORDs    screen bitmap data
  6503.  
  6504. Format of Sacrifice Character Map [SMD_SMAP_STRUCT]
  6505. Offset    Size    Description
  6506.  00h    BYTE    bytes are character values (00h-FFh) used in place of the
  6507.  01h    BYTE    actual character for the corresponding position on the screen
  6508.  02h    BYTE         +--------------+      occupied by part or all of the mouse
  6509.  03h    BYTE         | 0h | 1h | 2h |      cursor
  6510.  04h    BYTE         |----+----+----|
  6511.  05h    BYTE         | 3h | 4h | 5h |
  6512.  06h    BYTE         |----+----+----|
  6513.  07h    BYTE         | 6h | 7h | 8h |
  6514.  08h    BYTE         +--------------+
  6515.  
  6516. Format of Program Information [SMD_INFO_STRUCT]
  6517. Offset    Size    Description
  6518.  00h    WORD    segment of old interrupt 33h handler
  6519.  02h    WORD    offset of old interrupt 33h handler
  6520.  04h    WORD    PSP of SMD
  6521.  06h    BYTE    ENABLE/DISABLE manual setting status
  6522.  07h    BYTE    ENABLE/DISABLE internal usage status
  6523. --------M-333004-----------------------------
  6524. INT 33 - Smooth Mouse Driver, PrecisePoint - RESERVED FUTURE EXPANSION
  6525.     AX = 3004h
  6526. SeeAlso: AX=3000h
  6527. --------M-333005-----------------------------
  6528. INT 33 - Smooth Mouse Driver, PrecisePoint - RESERVED FUTURE EXPANSION
  6529.     AX = 3005h
  6530. SeeAlso: AX=3000h
  6531. --------M-334F00-----------------------------
  6532. INT 33 - LOGITECH MOUSE v6.10+ - GET ???
  6533.     AX = 4F00h
  6534. Return: AX = 004Fh if supported
  6535.     BX = ???
  6536.     ES:DI -> ???
  6537. SeeAlso: AX=4F01h
  6538. --------M-334F01-----------------------------
  6539. INT 33 - LOGITECH MOUSE v6.10+ - ???
  6540.     AX = 4F01h
  6541.     ES = ???
  6542. Return: AX = 004Fh if supported
  6543.     ES:DI -> ???
  6544. SeeAlso: AX=4F00h
  6545. --------r-34---------------------------------
  6546. INT 34 - FLOATING POINT EMULATION - OPCODE D8h
  6547. Desc:    this interrupt is used to emulate floating-point instructions with
  6548.       an opcode of D8h
  6549. Note:    the floating-point emulators in Borland and Microsoft languages and
  6550.       Lahey FORTRAN use this interrupt
  6551. SeeAlso: INT 35,INT 3E
  6552. --------r-35---------------------------------
  6553. INT 35 - FLOATING POINT EMULATION - OPCODE D9h
  6554. Desc:    this interrupt is used to emulate floating-point instructions with
  6555.       an opcode of D9h
  6556. Note:    the floating-point emulators in Borland and Microsoft languages and
  6557.       Lahey FORTRAN use this interrupt
  6558. SeeAlso: INT 34,INT 36
  6559. --------r-36---------------------------------
  6560. INT 36 - FLOATING POINT EMULATION - OPCODE DAh
  6561. Desc:    this interrupt is used to emulate floating-point instructions with
  6562.       an opcode of DAh
  6563. Note:    the floating-point emulators in Borland and Microsoft languages and
  6564.       Lahey FORTRAN use this interrupt
  6565. SeeAlso: INT 35,INT 37
  6566. --------r-37---------------------------------
  6567. INT 37 - FLOATING POINT EMULATION - OPCODE DBh
  6568. Desc:    this interrupt is used to emulate floating-point instructions with
  6569.       an opcode of DBh
  6570. Note:    the floating-point emulators in Borland and Microsoft languages and
  6571.       Lahey FORTRAN use this interrupt
  6572. SeeAlso: INT 36,INT 38
  6573. --------r-38---------------------------------
  6574. INT 38 - FLOATING POINT EMULATION - OPCODE DCh
  6575. Desc:    this interrupt is used to emulate floating-point instructions with
  6576.       an opcode of DCh
  6577. Note:    the floating-point emulators in Borland and Microsoft languages and
  6578.       Lahey FORTRAN use this interrupt
  6579. SeeAlso: INT 37,INT 39
  6580. --------O-3802-------------------------------
  6581. INT 38 - PC-MOS/386 v3.0 - GET MOS INTERNAL DATA POINTER
  6582.     AH = 02h
  6583. Return: AX = 0000h
  6584.     ES:BX -> ??? internal data structure
  6585. Program: PC-MOS/386 is a multitasking/multiuser MS-DOS-compatible operating
  6586.       system by Software Links, Inc.
  6587. SeeAlso: AH=04h,AH=10h,INT 21/AX=3000h,INT D4
  6588. --------O-3804-------------------------------
  6589. INT 38 - PC-MOS/386 v3.0 - GET TASK CONTROL BLOCK
  6590.     AH = 04h
  6591. Return: ES = segment of Task Control Block (TCB) (see below)
  6592. SeeAlso: AH=02h,INT D4
  6593.  
  6594. Format of Task Control Block:
  6595. Offset    Size    Description
  6596.  00h  2 BYTEs    signature "HT"
  6597.  02h 23 BYTEs    ???
  6598.  19h    BYTE    task time slice
  6599.  1Ah  7 BYTEs    ???
  6600.  21h 11 BYTEs    name of currently executing task
  6601.  2Ch 79 BYTEs    ???
  6602.  7Bh  4 BYTEs    user name
  6603.  7Fh    BYTE    current output class
  6604.  80h  7 BYTEs    protection access rights, 2 bits per class (writeable!)
  6605.     ???
  6606. --------O-380703-----------------------------
  6607. INT 38 - PC-MOS/386 v3.0 - WAIT FOR KEYPRESS OR TIMEOUT
  6608.     AX = 0703h
  6609.     CX = timeout (in seconds???)
  6610. Return: AH bit 0 set if key pressed, clear otherwise
  6611. SeeAlso: INT 16/AH=00h,INT D4
  6612. --------O-3810-------------------------------
  6613. INT 38 - PC-MOS/386 v3.0 - ENTER NATIVE 386 EXECUTION MODE
  6614.     AH = 10h
  6615.     CX = NCA (???) length in bytes (at least 1024???)
  6616.     DX = NCA segment
  6617. Return: in protected mode
  6618.     all segment registers converted to appropriate selectors
  6619. Note:    MS-DOS calls are available in protected mode
  6620. SeeAlso: AH=11h,AH=12h,INT 2F/AX=1687h,INT 67/AX=DE0Ch,INT D4
  6621. --------O-3811-------------------------------
  6622. INT 38 - PC-MOS/386 v3.0 - ALLOCATE NATIVE MODE MEMORY BLOCK
  6623.     AH = 11h
  6624.     EBX = block length
  6625. Return: ES = selector for allocated block
  6626. SeeAlso: AH=10h,AH=12h,INT D4
  6627. --------O-3812-------------------------------
  6628. INT 38 - PC-MOS/386 v3.0 - FREE NATIVE MODE MEMORY BLOCK
  6629.     AH = 12h
  6630.     ES = selector for block to free
  6631. SeeAlso: AH=10h,AH=11h,INT D4
  6632. --------r-39---------------------------------
  6633. INT 39 - FLOATING POINT EMULATION - OPCODE DDh
  6634. Desc:    this interrupt is used to emulate floating-point instructions with
  6635.       an opcode of DDh
  6636. Note:    the floating-point emulators in Borland and Microsoft languages and
  6637.       Lahey FORTRAN use this interrupt
  6638. SeeAlso: INT 38,INT 3A
  6639. --------r-3A---------------------------------
  6640. INT 3A - FLOATING POINT EMULATION - OPCODE DEh
  6641. Desc:    this interrupt is used to emulate floating-point instructions with
  6642.       an opcode of DEh
  6643. Note:    the floating-point emulators in Borland and Microsoft languages and
  6644.       Lahey FORTRAN use this interrupt
  6645. SeeAlso: INT 39,INT 3B
  6646. --------r-3B---------------------------------
  6647. INT 3B - FLOATING POINT EMULATION - OPCODE DFh
  6648. Desc:    this interrupt is used to emulate floating-point instructions with
  6649.       an opcode of DFh
  6650. Note:    the floating-point emulators in Borland and Microsoft languages and
  6651.       Lahey FORTRAN use this interrupt
  6652. SeeAlso: INT 3A,INT 3C
  6653. --------r-3C---------------------------------
  6654. INT 3C - FLOATING POINT EMULATION - INSTRUCTIONS WITH SEGMENT OVERRIDE
  6655. Notes:    the floating-point emulators in Borland and Microsoft languages and
  6656.       Lahey FORTRAN use this interrupt
  6657.     the generated code is  CD 3C xy mm ....
  6658.       where xy is a modified ESC instruction and mm is the modR/M byte.
  6659.       The xy byte appears to be encoded as
  6660.         s s 0 1 1 x x x      or    s s 0 0 0 x x x
  6661.       where "ss" specifies the segment override:
  6662.         00 -> DS:
  6663.         01 -> SS:
  6664.         10 -> CS:
  6665.         11 -> ES:
  6666. SeeAlso: INT 3B,INT 3D
  6667. --------r-3D---------------------------------
  6668. INT 3D - FLOATING POINT EMULATION - STANDALONE FWAIT
  6669. Notes:    the floating-point emulators in Borland and Microsoft languages and
  6670.       Lahey FORTRAN use this interrupt
  6671.     this vector is modified but not restored by Direct Access v4.0, and
  6672.       may be left dangling by other programs written with the same version
  6673.       of compiled BASIC
  6674. SeeAlso: INT 3C,INT 3E
  6675. --------r-3E---------------------------------
  6676. INT 3E - FLOATING POINT EMULATION - Borland LANGUAGES "SHORTCUT" CALL
  6677. Notes:    the two bytes following the INT 3E instruction are the subcode and
  6678.       a NOP (90h), except for subcodes DCh and DEh, where the second byte
  6679.       is a register count (01h-08h)
  6680.     this vector is modified but not restored by Direct Access v4.0, and
  6681.       may be left dangling by other programs written with the same version
  6682.       of compiled BASIC
  6683. SeeAlso: INT 3D
  6684.  
  6685. Subcode        Function
  6686.  DCh    load 8086 stack with 8087 registers; overwrites the 10*N bytes at the
  6687.       top of the stack prior to the INT 3E with the 8087 register contents
  6688.  DEh    load 8087 registers from top of 8086 stack; ST0 is furthest from top
  6689.       of 8086 stack
  6690.  E0h    round TOS and R1 to single precision, compare, pop twice
  6691.       returns AX=8087 status word, FLAGS=8087 condition bits
  6692.  E2h    round TOS and R1 to double precision, compare, pop twice
  6693.       returns AX=8087 status word, FLAGS=8087 condition bits
  6694.     Note: buggy in TPas5.5, because it sets the 8087 precision control
  6695.       field to the undocumented value 01h; this results in actually
  6696.       rounding to single precision
  6697.  E4h    compare TOS/R1 with two POP's
  6698.       returns FLAGS=8087 condition bits
  6699.  E6h    compare TOS/R1 with POP
  6700.       returns FLAGS=8087 condition bits
  6701.  E8h    FTST (check TOS value)
  6702.       returns FLAGS=8087 condition bits
  6703.  EAh    FXAM (check TOS value)
  6704.       returns AX=8087 status word
  6705.  ECh    sine(ST0)
  6706.  EEh    cosine(ST0)
  6707.  F0h    tangent(ST0)
  6708.  F2h    arctangent(ST0)
  6709.  F4h    ST0 = ln(ST0)
  6710.  F6h    ST0 = log2(ST0)
  6711.  F8h    ST0 = log10(ST0)
  6712.  FAh    ST0 = e**ST0
  6713.  FCh    ST0 = 2**ST0
  6714.  FEh    ST0 = 10**ST0
  6715. --------r-3F---------------------------------
  6716. INT 3F - Overlay manager interrupt (Microsoft LINK.EXE, Borland TLINK VROOMM)
  6717. Notes:    INT 3F is the default, and may be overridden while linking
  6718.     this vector is modified but not restored by Direct Access v4.0, and
  6719.       may be left dangling by other programs written with the same version
  6720.       of compiled BASIC
  6721. SeeAlso: INT FE"OVERLAY"
  6722. --------r-3F---------------------------------
  6723. INT 3F - Microsoft Dynamic Link Library manager
  6724. SeeAlso: INT 21/AH=4Bh
  6725. --------B-40---------------------------------
  6726. INT 40 - DISKETTE - ROM BIOS DISKETTE HANDLER RELOCATED BY HARD DISK BIOS
  6727. SeeAlso: INT 13,INT 63
  6728. --------h-40---------------------------------
  6729. INT 40 - Z100 - Master 8259 - Parity error or S100 error
  6730. SeeAlso: INT 41"Z100",INT FF"Z100"
  6731. --------O-40---------------------------------
  6732. INT 40 - Acorn BBC Master 512 - "OSFIND" - OPEN FILE
  6733.     AL = operation
  6734.         00h close file
  6735.         40h open file for reading
  6736.         80h open file for writing
  6737.         C0h open file for random access
  6738.     DS:BX -> CR-terminated filename
  6739. Return: AL = file handle (00h if file closed or could not be opened)
  6740. Note:    the Acorn BBC Master 512 is an 80186-based add-on board for the
  6741.       6502-based Master 128 which uses the original CPU as an I/O processor
  6742. SeeAlso: INT 41"Acorn",INT 42"Acorn",INT 43"Acorn",INT 44"Acorn",INT 4C"Acorn"
  6743. --------B-41---------------------------------
  6744. INT 41 - SYSTEM DATA - HARD DISK 0 PARAMETER TABLE
  6745. Note:    the default parameter table array is located at F000h:E401h in 100%
  6746.       compatible BIOSes; the pointer may be overridden by the hard disk
  6747.       controller's BIOS to support drive formats unknown to the ROM BIOS
  6748. SeeAlso: INT 13/AH=09h,INT 1E,INT 46
  6749.  
  6750. Format of fixed disk parameters:
  6751. Offset    Size    Description
  6752.  00h    WORD    number of cylinders
  6753.  02h    BYTE    number of heads
  6754.  03h    WORD    starting reduced write current cylinder (XT only, 0 for others)
  6755.  05h    WORD    starting write precompensation cylinder number
  6756.  07h    BYTE    maximum ECC burst length (XT only)
  6757.  08h    BYTE    control byte
  6758.            bits 0-2: drive option (XT only, 0 for others)
  6759.            bit 3:    set if more than 8 heads (AT and later only)
  6760.            bit 4:    always 0
  6761.            bit 5:    set if manufacturer's defect map on max cylinder+1
  6762.                  (AT and later only)
  6763.            bit 6:    disable ECC retries
  6764.            bit 7:    disable access retries
  6765.  09h    BYTE    standard timeout (XT only, 0 for others)
  6766.  0Ah    BYTE    formatting timeout (XT only, 0 for others)
  6767.  0Bh    BYTE    timeout for checking drive (XT only, 0 for others)
  6768.  0Ch    WORD    cylinder number of landing zone (AT and later only)
  6769.  0Eh    BYTE    number of sectors per track (AT and later only)
  6770.  0Fh    BYTE    reserved
  6771. --------h-41---------------------------------
  6772. INT 41 - Z100 - Master 8259 - Processor Swap
  6773. SeeAlso: INT 40"Z100",INT 42"Z100"
  6774. --------O-41---------------------------------
  6775. INT 41 - Acorn BBC Master 512 - "OSGBPB" - MULTI-BYTE GET/PUT
  6776.     AL = function
  6777.         01h put bytes sequentially
  6778.         02h put bytes, ignoring sequential pointer
  6779.         03h get bytes sequentially
  6780.         04h get bytes, ignoring sequential pointer
  6781.         05h get media title and boot option
  6782.         06h get current device and directory
  6783.         07h get current library and device
  6784.         08h search directory
  6785.     DS:BX -> control block (see below)
  6786. Return: CF clear if successful
  6787.     CF set on error
  6788.     AL = 00h if operation attempted
  6789.     AL unchanged if unsupported function
  6790. SeeAlso: INT 40"Acorn",INT 42"Acorn",INT 43"Acorn"
  6791.  
  6792. Format of control block:
  6793. Offset    Size    Description
  6794.  00h    BYTE    file handle
  6795.  01h    DWORD    pointer to data in either I/O processor or Tube processor
  6796.  05h    DWORD    number of bytes to be transferred
  6797.  09h    DWORD    transfer address
  6798. --------G-4112-------------------------------
  6799. INT 41 P - MS Windows debugging kernel - "OutputDebugString"
  6800.     AH = 12h
  6801.     ???
  6802. Return: ???
  6803. SeeAlso: AH=50h
  6804. --------G-4150-------------------------------
  6805. INT 41 P - MS Windows debugging kernel - "DefineDebugSegment"
  6806.     AH = 50h
  6807.     ???
  6808. Return: ???
  6809. SeeAlso: AH=12h
  6810. --------V-42---------------------------------
  6811. INT 42 - VIDEO - RELOCATED DEFAULT INT 10 VIDEO SERVICES (EGA,VGA)
  6812. SeeAlso: INT 10
  6813. Note:    not used by PS/2 built-in VGA or XGA
  6814. --------h-42---------------------------------
  6815. INT 42 - Z100 - Master 8259 - Timer
  6816. SeeAlso: INT 41"Z100",INT 43"Z100"
  6817. --------O-42---------------------------------
  6818. INT 42 - Acorn BBS Master 512 - "OSBPUT" - WRITE SINGLE BYTE TO FILE
  6819.     AL = byte to be written
  6820.     BH = file handle
  6821. Return: flags destroyed
  6822. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 43"Acorn",INT 47"Acorn",INT 49"Acorn"
  6823. --------V-43---------------------------------
  6824. INT 43 - VIDEO DATA - CHARACTER TABLE (EGA,MCGA,VGA)
  6825.    points at graphics data for characters 00h-7Fh of the current font
  6826. SeeAlso: INT 1F,INT 44"VIDEO"
  6827. --------h-43---------------------------------
  6828. INT 43 - Z100 - Master 8259 - Slave 8259 input
  6829. Note:    slave runs in special fully nested mode
  6830. SeeAlso: INT 42"Z100",INT 44"Z100"
  6831. --------O-43---------------------------------
  6832. INT 43 - Acorn BBC Master 512 - "OSBGET" - READ SINGLE BYTE FROM FILE
  6833.     BH = file handle
  6834. Return: CF clear if successful
  6835.         AL = byte read from file
  6836.     CF set on error
  6837. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 42"Acorn",INT 46"Acorn"
  6838. --------V-44---------------------------------
  6839. INT 44 - VIDEO DATA - ROM BIOS CHARACTER FONT, CHARACTERS 00h-7Fh (PCjr)
  6840.    points at graphics data for current character font
  6841. SeeAlso: INT 1F,INT 43"VIDEO"
  6842. --------N-44---------------------------------
  6843. INT 44 - Novell NetWare - HIGH-LEVEL LANGUAGE API
  6844. --------I-44---------------------------------
  6845. INT 44 - IBM 3270-PC High Level Language API
  6846.     DS:SI -> parameter control block
  6847. --------h-44---------------------------------
  6848. INT 44 - Z100 - Master 8259 - Serial A
  6849. SeeAlso: INT 43"Z100",INT 45"Z100"
  6850. --------O-4400-------------------------------
  6851. INT 44 - Acorn BBC Master 512 - "OSARGS" - GET/SET FILE PARAMS FOR OPEN FILE
  6852.     AH = 00h
  6853.         AL = function
  6854.         00h get current filing system
  6855.             Return: AL = filing system (see below)
  6856.         01h get address of commandline tail
  6857.             Return: BX buffer filled with address of command tail
  6858.                     in I/O processor address space
  6859.                     (use INT 4A/AL=05h to retrieve)
  6860.         FFh flush all files onto secondary storage
  6861.     AH = file handle
  6862.         AL = function
  6863.         00h get sequential pointer for file
  6864.         01h set sequential pointer for file
  6865.         02h get length of file
  6866.     BX -> 4-byte data buffer
  6867. Return: BX buffer updated if appropriate
  6868. Note:    the commandline tail is terminated with a carriage return (0Dh)
  6869. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 45"Acorn",INT 4A"Acorn"
  6870.  
  6871. Values for filing system:
  6872.  00h none
  6873.  01h 1200 bps cassette
  6874.  02h 300 bps cassette
  6875.  03h ROM FS
  6876.  04h DFS
  6877.  05h ANFS/NFS
  6878.  06h TFS
  6879.  08h ADFS
  6880. --------h-45---------------------------------
  6881. INT 45 - Z100 - Master 8259 - Serial B
  6882. SeeAlso: INT 44"Z100",INT 46"Z100"
  6883. --------O-45---------------------------------
  6884. INT 45 - Acorn BBC Master 512 - "OSFILE" - READ/WRITE FILE OR DIRECTORY INFO
  6885.     AL = function
  6886.         00h save block of memory as file
  6887.         01h update directory entry for existing file
  6888.         02h set load address for existing file
  6889.         03h set execution address for existing file
  6890.         04h set attributes for existing file
  6891.         05h read directory
  6892.         06h delete file
  6893.         FFh load file
  6894.     DS:BX -> control block (see below)
  6895. Return: FLAGS destroyed
  6896.     AL = file type
  6897.         00h not found
  6898.         01h file found
  6899.         02h directory found
  6900.         FFh    protected file
  6901. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 44"Acorn",INT 46"Acorn"
  6902.  
  6903. Format of control block:
  6904. Offset    Size    Description
  6905.  00h    WORD    address of CR-terminated filename
  6906.  02h    DWORD    load address of file
  6907.  06h    DWORD    execution address of file
  6908.  0Ah    DWORD    start address of data to save
  6909.  0Eh    DWORD    end address of data to save, or file attributes
  6910.         file attributes in low byte:
  6911.             bit 0: no owner read access
  6912.             bit 1: no owner write access
  6913.             bit 2: not executable by owner
  6914.             bit 3: not deletable by owner
  6915.             bit 4: no public read access
  6916.             bit 5: no public write access
  6917.             bit 6: not executable with public access
  6918.             bit 7: not deletable with public access
  6919.         other three bytes are filing-system specific file attributes
  6920. --------B-46---------------------------------
  6921. INT 46 - SYSTEM DATA - HARD DISK 1 DRIVE PARAMETER TABLE
  6922. SeeAlso: INT 13/AH=09h,INT 41
  6923. --------h-46---------------------------------
  6924. INT 46 - Z100 - Master 8259 - Keyboard, Retrace, and Light Pen
  6925. SeeAlso: INT 45"Z100",INT 47"Z100"
  6926. --------O-46---------------------------------
  6927. INT 46 - Acorn BBC Master 512 - "OSRDCH" - GET CHARACTER FROM CUR INPUT STREAM
  6928. Return: CF clear if successful
  6929.         AL = character read
  6930.     CF set on error
  6931.         AL = error code
  6932. SeeAlso: INT 40"Acorn",INT 43"Acorn",INT 47"Acorn",INT 49"Acorn"
  6933. --------h-47---------------------------------
  6934. INT 47 - Z100 - Master 8259 - Printer
  6935. SeeAlso: INT 46"Z100",INT 48"Z100"
  6936. --------O-47---------------------------------
  6937. INT 47 - Acorn BBC Master 512 - "OSWRCH" - WRITE CHARACTER TO CUR OUTPUT STREAM
  6938.     AL = character to be written
  6939. Return: FLAGS destroyed
  6940. SeeAlso: INT 40"Acorn",INT 46"Acorn",INT 49"Acorn"
  6941. ----------478000-----------------------------
  6942. INT 47 - SQL Base - DATABASE ENGINE API
  6943.     AX = 8000h
  6944.     DS:BX -> parameter block, first word is function number
  6945. Program: SQL Base is a network-oriented database engine by Gupta Technologies
  6946. SeeAlso: AX=8001h
  6947.  
  6948. Values for function number:
  6949.  01h    "SQLFINI" initalialize application's use of the database
  6950.  02h    "SQLFDON" application is done using the database
  6951.  03h    "SQLFCON" connect to a cursor/database
  6952.  04h    "SQLFDIS" disconnect from a cursor/database
  6953.  05h    "SQLFCOM" compile a SQL command
  6954.  06h    "SQLFEXE" execute a SQL command
  6955.  07h    "SQLFCEX" compile and execute a SQL command
  6956.  08h    "SQLFCMT" commit a transaction to the database
  6957.  09h    "SQLFDES" describe the items of a SELECT statement
  6958.  0Ah    "SQLFGFI" get fetch information
  6959.  0Bh    "SQLFFBK" fetch previous result row from SELECT statement
  6960.  0Ch    "SQLFFET" fetch next result row from SELECT statement
  6961.  0Dh    "SQLFEFB" enable fetch backwards
  6962.  0Eh    "SQLFPRS" position in result set
  6963.  0Fh    "SQLFURS" undo result set
  6964.  10h    "SQLFNBV" get number of bind variables
  6965.  11h    "SQLFBND" bind data variables
  6966.  12h    "SQLFBNN" bind numerics
  6967.  13h    "SQLFBLN" bind long number
  6968.  14h    "SQLFBLD" bind long data variables
  6969.  15h    "SQLFSRS" start restriction set processing
  6970.  16h    "SQLFRRS" restart restriction set processing
  6971.  17h    "SQLFCRS" close restriction set
  6972.  18h    "SQLFDRS" drop restriction set
  6973.  19h    "SQLFARF" apply Roll Forward journal
  6974.  1Ah    "SQLFERF" end Roll Forward journal
  6975.  1Bh    "SQLFSRF" start Roll Forward journal
  6976.  1Ch    "SQLFSTO" store a compiled SQL command
  6977.  1Dh    "SQLFRET" retrieve a compiled SQL command
  6978.  1Eh    "SQLFDST" drop a stored command
  6979.  1Fh    "SQLFCTY" get command type
  6980.  20h    "SQLFEPO" get error position
  6981.  21h    "SQLFGNR" get number of rows
  6982.  22h    "SQLFNSI" get number of select items
  6983.  23h    "SQLFRBF" get Roll Back flag
  6984.  24h    "SQLFRCD" get return code
  6985.  25h    "SQLFROW" get number of ROWs
  6986.  26h    "SQLFSCN" set cursor name
  6987.  27h    "SQLFSIL" set isolation level
  6988.  28h    "SQLFSLP" set log parameters
  6989.  29h    "SQLFSSB" set select buffer
  6990.  2Ah    "SQLFSSS" set sort space
  6991.  2Bh    "SQLFRLO" read long
  6992.  2Ch    "SQLFWLO" write long
  6993.  2Dh    "SQLFLSK" long seek
  6994.  2Eh    "SQLFGLS" get long size
  6995.  2Fh    "SQLFELO" end long operation
  6996.  30h    "SQLFRBK" roll back a transaction from the database
  6997.  31h    "SQLFERR" error message
  6998.  32h    "SQLFCPY" copy
  6999.  33h    "SQLFR01" reserved
  7000.  34h    "SQLFSYS" system
  7001.  35h    "SQLFSTA" statistics
  7002.  36h    "SQLFR02" reserved
  7003.  37h    "SQLFXAD" extra add
  7004.  38h    "SQLFXCN" extra character to number
  7005.  39h    "SQLFXDA" extra date add
  7006.  3Ah    "SQLFXDP" extra date picture
  7007.  3Bh    "SQLFXDV" extra divide
  7008.  3Ch    "SQLFXML" extra multiply
  7009.  3Dh    "SQLFXNP" extra number picture
  7010.  3Eh    "SQLFXPD" extra picture date
  7011.  3Fh    "SQLFXSB" extra subtract
  7012.  40h    "SQLFINS" install database
  7013.  41h    "SQLFDIN" deinstall database
  7014.  42h    "SQLFDIR" directory of databases
  7015.  43h    "SQLFTIO" timeout
  7016.  44h    "SQLFFQN" get fully qualified column name
  7017.  45h    "SQLFEXP" explain execution plan
  7018.  46h    "SQLFFER" get full error
  7019.  47h    "SQLFBKP" begin online backup
  7020.  48h    "SQLFRDC" read backup data chunk
  7021.  49h    "SQLFEBK" end backup
  7022.  4Ah    "SQLFRES" begin restore from backup
  7023.  4Bh    "SQLFWDC" write backup data chunk for restore
  7024.  4Ch    "SQLFRRD" recover restored database to consistent state
  7025.  4Dh    "SQLFERS" end restore
  7026.  4Eh    "SQLFNRR" return number of result set rows
  7027.  4Fh    "SQLFSTR" start restriction mode
  7028.  50h    "SQLFSPR" stop restriction mode
  7029.  51h    "SQLFCNC" connect 2
  7030.  52h    "SQLFCNR" connect with no recovery
  7031.  53h    "SQLFOMS" set output message size
  7032.  54h    "SQLFIMS" set input message size
  7033.  55h    "SQLFSCP" set cache pages
  7034.  56h    "SQLFDSC" describe items of a SELECT statement (external)
  7035.  57h    "SQLFLAB" get label info for items in SELECT statement
  7036.  58h    "SQLFCBV" clear bind variables
  7037.  59h    "SQLFGET" get database information
  7038.  5Ah    "SQLFSET" set database information
  7039.  5Bh    "SQLFTEC" translate error code
  7040. ----------478001-----------------------------
  7041. INT 47 - SQL Base - GET VERSION NUMBER
  7042.     AX = 8001h
  7043. Return: ???
  7044. Program: SQL Base is a network-oriented database engine by Gupta Technologies
  7045. SeeAlso: AX=8000h
  7046. --------B-48---------------------------------
  7047. INT 48 - KEYBOARD - CORDLESS KEYBOARD TRANSLATION (PCjr)
  7048. SeeAlso: INT 49"PCjr"
  7049. --------h-48---------------------------------
  7050. INT 48 - Z100 - Slave 8259 - S100 vectored line 0
  7051. SeeAlso: INT 47"Z100",INT 49"Z100"
  7052. --------N-48---------------------------------
  7053. INT 48 - Watstar PC Network data pointer 1
  7054. SeeAlso: INT 49"Watstar"
  7055. --------O-48---------------------------------
  7056. INT 48 - Acorn BBC Master 512 - "OSNEWL" - SEND NEWLINE TO OUTPUT STREAM
  7057. Return: FLAGS destroyed
  7058. Note:    writes a carriage return (0Dh) followed by a linefeed (0Ah)
  7059. SeeAlso: INT 40"Acorn",INT 47"Acorn",INT 49"Acorn"
  7060. --------B-49---------------------------------
  7061. INT 49 - SYSTEM DATA - NON-KEYBOARD SCAN-CODE TRANSLATION TABLE (PCjr)
  7062. SeeAlso: INT 48"PCjr"
  7063.  
  7064. Format of translation table:
  7065. Offset    Size    Description
  7066.  00h    BYTE    number of nonkeyboard scancodes in the table
  7067.  01h  N WORDs    high byte 00h (NUL) byte scancode with low order byte
  7068.         representing the scancode mapped values relative to their
  7069.         input values within the range of 56h through 7Eh
  7070. --------h-49---------------------------------
  7071. INT 49 - Z100 - Slave 8259 - S100 vectored line 1
  7072. SeeAlso: INT 48"Z100",INT 4A"Z100"
  7073. ----------49---------------------------------
  7074. INT 49 - Texas Instruments PC - VIDEO I/O???
  7075.     apparently provides direct video display on the TI Professional PC
  7076. --------N-49---------------------------------
  7077. INT 49 - Watstar PC Network data pointer 2
  7078. SeeAlso: INT 49"Watstar"
  7079. --------O-49---------------------------------
  7080. INT 49 - Acorn BBC Master 512 - "OSASCI" - WRITE CHARACTER TO CUR OUTPUT STREAM
  7081.     AL = character to be written
  7082. Return: FLAGS destroyed
  7083. Note:    converts carriage return (0Dh) into CRLF sequence (0Dh 0Ah)
  7084. SeeAlso: INT 40"Acorn",INT 46"Acorn",INT 47"Acorn",INT 48"Acorn"
  7085. --------a-490001-----------------------------
  7086. INT 49 - MAGic v1.16+ - TURN ON MAGNIFICATION
  7087.     AX = 0001h
  7088. Return: AX = status
  7089.         0000h cannot magnify current video mode
  7090.         0002h magnified (text mode)
  7091.         0003h magnified (graphics mode)
  7092.         FFFDh function works only in magnified mode
  7093.         FFFFh MAGic busy, retry later
  7094.     BX,CX,DX destroyed
  7095. Program: MAGic (MAGnification In Color) is a TSR by Microsystems Software, Inc.
  7096.       providing 2x2 text and graphics magnification on VGA, XGA, and SVGA
  7097. Note:    INT 49 is the default, but may be overridden on the commandline.  The
  7098.       actual interrupt in use may be found by searching for the signature
  7099.       "MAGic" or "xMAGic" (for the deluxe version) immediately preceding
  7100.       the interrupt handler (this is also the installation check).    MAGic
  7101.       uses CodeRunneR, which places the signature "RT" at offset 0000h in
  7102.       the interrupt handler's segment, followed by MAGic's TSR ID of
  7103.       "VMAG".
  7104. SeeAlso: AX=0001h,AX=0003h,AX=0004h,AX=0008h
  7105. Index:    installation check;MAGic
  7106. --------a-490002-----------------------------
  7107. INT 49 - MAGic v1.16+ - TURN OFF MAGNIFICATION
  7108.     AX = 0002h
  7109. Return: AX = status (see AX=0001h)
  7110.     BX,CX,DX destroyed
  7111. SeeAlso: AX=0001h
  7112. --------a-490003-----------------------------
  7113. INT 49 - MAGic v1.16+ - SHIFT MAGNIFIED WINDOW TO INCLUDE SPECIFIED LOCATION
  7114.     AX = 0003h
  7115.     BX = vertical position (character row [text] or pixel row [graphics])
  7116.     DX = horizontal position (char column [text] or 8-pixel units [gr])
  7117. Return: AX = status
  7118.         0000h successful
  7119.         FFFFh MAGic busy, retry later
  7120.     BX,CX,DX destroyed
  7121. Note:    window is not moved if the position is inside the current window
  7122. SeeAlso: AX=0001h,AX=0004h,AX=0005h
  7123. --------a-490004-----------------------------
  7124. INT 49 - MAGic v1.16+ - REPOSITION MAGNIFIED WINDOW
  7125.     AX = 0004h
  7126.     BX = vertical position of upper left corner
  7127.     DX = horizontal position
  7128. Return: AX = status (see AX=0003h)
  7129.     BX,CX,DX destroyed
  7130. SeeAlso: AX=0001h,AX=0003h,AX=0005h
  7131. --------a-490005-----------------------------
  7132. INT 49 - MAGic v1.16+ - GET POSITION OF MAGNIFIED WINDOW
  7133.     AX = 0005h
  7134. Return: AX = status
  7135.         0000h successful
  7136.         BX = vertical position (char row or pixel row)
  7137.         DX = horizontal position (char column or 8-pixel units)
  7138.         FFFFh MAGic busy, retry later
  7139.         BX,DX destroyed
  7140.     CX destroyed
  7141. SeeAlso: AX=0001h,AX=0003h,AX=0004h,AX=0006h,AX=0007h
  7142. --------a-490006-----------------------------
  7143. INT 49 - MAGic v1.16+ - GET SIZE OF FULL SCREEN
  7144.     AX = 0006h
  7145. Return: AX = status
  7146.         0000h successful
  7147.         BX = vertical size (char rows or pixel rows)
  7148.         DX = horizontal size (char cols or 8-pixel units)
  7149.         FFFFh MAGic busy, retry later
  7150.         BX,DX destroyed
  7151.     CX destroyed
  7152. SeeAlso: AX=0001h,AX=0005h,AX=0007h
  7153. --------a-490007-----------------------------
  7154. INT 49 - MAGic v1.16+ - GET SIZE OF MAGNIFICATION WINDOW
  7155.     AX = 0007h
  7156. Return: AX = status
  7157.         0000h successful
  7158.         BX = vertical size (char rows or pixel rows)
  7159.         DX = horizontal size (char cols or 8-pixel units)
  7160.         FFFEh invalid function
  7161.         FFFFh MAGic busy, retry later
  7162.         BX,DX destroyed
  7163.     CX destroyed
  7164. BUG:    in v1.16 and v1.17, this function is not recognized as valid, but
  7165.       AX=0000h is accepted and will branch into hyperspace
  7166. SeeAlso: AX=0001h,AX=0006h
  7167. --------a-490008-----------------------------
  7168. INT 49 - MAGic v1.23+ - SET TEXT MODE MAGNIFICATION SIZE
  7169.     AX = 0008h
  7170.     BX = scaling factor (01h=1.4 times, 02h, 04h, 06h, 08h, 09h=12 times)
  7171. Return: AX = status
  7172.         0000h successful
  7173.         FFFBh scaling factor only available in MAGic Deluxe
  7174.         FFFCh already in magnified state, can't set size
  7175. Notes:    this call specifies the amount a subsequent call to AX=0001h should
  7176.       magnify the display
  7177.     scaling factors greater than 2 are only available in MAGic Deluxe
  7178. SeeAlso: AX=0001h
  7179. --------B-4A---------------------------------
  7180. INT 4A C - SYSTEM - USER ALARM HANDLER
  7181. Desc:    This interrupt is invoked by the BIOS when a real-time clock alarm
  7182.       occurs; an application may use it to perform an action at a
  7183.       predetermined time.
  7184. Note:    this interrupt is called from within a hardware interrupt handler,
  7185.       so all usual precautions against reentering DOS must be taken
  7186. SeeAlso: INT 1A/AH=06h
  7187. --------h-4A---------------------------------
  7188. INT 4A - Z100 - Slave 8259 - S100 vectored line 2
  7189. SeeAlso: INT 49"Z100",INT 4B"Z100"
  7190. --------O-4A---------------------------------
  7191. INT 4A - Acorn BBC Master 512 - "OSWORD" - MISC FUNCTIONS USING CONTROL BLOCK
  7192.     AL = function code
  7193.         FAh transfer data between 80186 and 65C12 I/O processor
  7194.     DS:BX -> control block (see below)
  7195. Return: FLAGS destroyed
  7196.     control block updated
  7197. Note:    there are more functions than are listed here, but details are not
  7198.       available
  7199. SeeAlso: INT 40"Acorn",INT 4B"Acorn",INT 4C"Acorn"
  7200.  
  7201. Format of control block for function FAh:
  7202. Offset    Size    Description
  7203.  00h    BYTE    number of parameters sent to I/O processor (0Dh,0Eh)
  7204.  01h    BYTE    number of parameters read from I/O processor (01h)
  7205.  02h    DWORD    I/O processor address
  7206.  06h    DWORD    80186 segment:offset address
  7207.  0Ah    WORD    number of bytes to transfer
  7208.  0Ch    BYTE    operation type
  7209.         00h write to 65C12 at 24 us/byte
  7210.         01h read from 65C12 at 24 us/byte
  7211.         02h write to 65C12 at 26 us/word
  7212.         03h read from 65C12 at 26 us/word
  7213.         04h write to 65C12 at 10 us/byte using 256-byte blocks
  7214.         05h read from 65C12 at 10 us/byte using 256-byte blocks
  7215.  0Dh    BYTE    65C12 memory access control (only used if offset 00h = 0Eh)
  7216.         bit 7: unused
  7217.         bit 6: always use main screen memory if I/O addr 3000h-7FFFh
  7218.             (overrides bit 5)
  7219.         bit 5: use shadow screen memory if screen address specified
  7220.         bit 4: use current ROM rather than ROM selected by bits 3-0
  7221.             (only if I/O address between 8000h and BFFFh)
  7222.         bits 3-0: paged ROM number
  7223. --------h-4B---------------------------------
  7224. INT 4B - Z100 - Slave 8259 - S100 vectored line 3
  7225. SeeAlso: INT 4A"Z100",INT 4C"Z100"
  7226. --------d-4B---------------------------------
  7227. INT 4B - Common Access Method SCSI interface (draft revision 1.9)
  7228.     ES:DI -> CAM Control Block (see INT 4F/AX=8100h)
  7229. Notes:    the CAM committee moved the interface to INT 4F after revision 1.9
  7230.       to avoid conflicting with the IBM SCSI interface and the Virtual
  7231.       DMA specification
  7232.     the installation check for the driver is the string "SCSI_CAM" eight
  7233.       bytes past the INT 4Bh handler
  7234.     it is not known whether any drivers actually implemented this
  7235.       interface on INT 4B instead of INT 4F
  7236. SeeAlso: INT 4F/AX=8100h
  7237. Index:    installation check;Common Access Method SCSI interface
  7238. --------O-4B---------------------------------
  7239. INT 4B - Acorn BBC Master 512 - "OSBYTE" - MISC FUNCTIONS USING REGISTER PARAMS
  7240.     AL = function code
  7241.     BL = first parameter
  7242.     BH = second parameter (if needed)
  7243. Return: BL = first return parameter
  7244.     BH = second return parameter
  7245.     CF depends on function
  7246. SeeAlso: INT 40"Acorn",INT 4A"Acorn",INT 4C"Acorn"
  7247. --------d-4B80-------------------------------
  7248. INT 4B - IBM SCSI interface
  7249.     AH = 80h
  7250.     details not yet available
  7251. --------d-4B8102DX0000-----------------------
  7252. INT 4B - Virtual DMA Specification (VDS) - GET VERSION
  7253.     AX = 8102h
  7254.     DX = 0000h
  7255. Return: CF clear if successful
  7256.         AH = major version number
  7257.         AL = minor version number
  7258.         BX = product number
  7259.         0000h for Quadtel's QMAPS and Hewlett-Packard's HPMM.SYS
  7260.         0001h for Microsoft's EMM386.EXE
  7261.         4560h ("E`") for Qualitas' 386MAX
  7262.         4D43h ("MC") for V Communication's Memory Commander
  7263.         5145h ("QE") for Quarterdeck's QEMM-386
  7264.         CX = product revision number
  7265.         always 0000h for QMAPS and HPMM.SYS
  7266.         always 0001h for Microsoft's EMM386.EXE v4.20-4.41
  7267.         SI:DI = maximum DMA buffer size
  7268.         DX = flags
  7269.         bit 0: PC/XT bus (DMA in first megabyte only)
  7270.         bit 1: physical buffer/remap region in first megabyte
  7271.         bit 2: automatic remap enabled
  7272.         bit 3: all memory is physically contiguous
  7273.         bits 4-15 reserved (zero)
  7274.     CF set on error
  7275.         AL = error code (see below)
  7276. Note:    bit 5 of 0040h:007Bh is supposed to be set if VDS is supported; this is
  7277.       apparently not always the case
  7278. SeeAlso: INT 31
  7279. Index:    installation check;Virtual DMA Spec
  7280.  
  7281. Values for error code:
  7282.  01h    region not in contiguous memory
  7283.  02h    region crossed a physical alignment boundary
  7284.  03h    unable to lock pages
  7285.  04h    no buffer available
  7286.  05h    region too large for buffer
  7287.  06h    buffer currently in use
  7288.  07h    invalid memory region
  7289.  08h    region was not locked
  7290.  09h    number of physical pages greater than table length
  7291.  0Ah    invalid buffer ID
  7292.  0Bh    copy out of buffer range
  7293.  0Ch    invalid DMA channel number
  7294.  0Dh    disable count overflow
  7295.  0Eh    disable count underflow
  7296.  0Fh    function not supported
  7297.  10h    reserved flag bits set in DX
  7298.  
  7299. Format of DMA descriptor structure (DDS):
  7300. Offset    Size    Description
  7301.  00h    DWORD    region size
  7302.  04h    DWORD    offset
  7303.  08h    WORD    segment/selector
  7304.  0Ah    WORD    buffer ID
  7305.  0Ch    DWORD    physical address
  7306.  
  7307. Format of Extended DMA descriptor structure (EDDS):
  7308. Offset    Size    Description
  7309.  00h    DWORD    region size
  7310.  04h    DWORD    offset
  7311.  08h    WORD    segment/selector
  7312.  0Ah    WORD    reserved
  7313.  0Ch    WORD    number available
  7314.  0Eh    WORD    number used
  7315.  10h    DWORD    region 0 physical address
  7316.  14h    DWORD    region 0 size in bytes
  7317.  18h    DWORD    region 1 physical address
  7318.  1Ch    DWORD    region 1 size in bytes
  7319.     ...
  7320.  
  7321. Format of Extended DMA descriptor structure (EDDS) with page table entries:
  7322. Offset    Size    Description
  7323.  00h    DWORD    region size
  7324.  04h    DWORD    offset
  7325.  08h    WORD    segment/selector
  7326.  0Ah    WORD    reserved
  7327.  0Ch    WORD    number available
  7328.  0Eh    WORD    number used
  7329.  10h    DWORD    page table entry 0 (same as 80386 page table entry)
  7330.  14h    DWORD    page table entry 1
  7331.     ...
  7332. Note:    bits 1-11 of the page table entries should be zero; bit 0 set if page
  7333.       is present and locked
  7334. --------d-4B8103-----------------------------
  7335. INT 4B - Virtual DMA Specification - LOCK DMA REGION
  7336.     AX = 8103h
  7337.     DX = flags
  7338.         bit 0: reserved (zero)
  7339.         bit 1: data should be copied into buffer (ignored if bit 2 set)
  7340.         bit 2: buffer should not be allocated if region noncontiguous or
  7341.            crosses physical alignment boundary specified by bits 4-5
  7342.         bit 3: don't attempt automatic remap
  7343.         bit 4: region must not cross 64K physical alignment boundary
  7344.         bit 5: region must not cross 128K physical alignment boundary
  7345.          6-15: reserved (zero)
  7346.     ES:DI -> DMA descriptor structure (see AX=8102h)
  7347. Return:    CF clear if successful
  7348.         DDS physical address field filled in
  7349.         DDS buffer ID field filled (0000h if no buffer allocated)
  7350.     CF set on error
  7351.         AL = error code (see AX=8102h)
  7352.         DDS region size field filled wth maximum contiguous length in bytes
  7353. BUGS:    Windows 3.0 does not correctly support automatic remapping or copying
  7354.       in enhanced mode
  7355.     Windows 3.0 in enhanced mode does not return a correct code on error
  7356. SeeAlso: AX=8104h,AX=8105h
  7357. --------d-4B8104-----------------------------
  7358. INT 4B - Virtual DMA Specification - UNLOCK DMA REGION
  7359.     AX = 8104h
  7360.     DX = flags
  7361.         bit 0: reserved (zero)
  7362.         bit 1: data should be copied out of buffer
  7363.         bits 2-15 reserved (zero)
  7364.     ES:DI -> DMA descriptor structure (see AX=8102h) with region size,
  7365.         physical address, and buffer ID fields set
  7366. Return: CF clear if successful
  7367.         DDS physical address field set
  7368.         DDS buffer ID field set (0000h if no buffer allocated)
  7369.     CF set on error
  7370.         AL = error code (see AX=8102h)
  7371.         DDS region size field filled wth maximum contiguous length in bytes
  7372. Note:    Windows 3.0 does not check whether the region extends beyond the end of
  7373.       a segment
  7374. BUG:    Windows 3.0 in enhanced mode does not return a correct code on error
  7375. SeeAlso: AX=8103h,AX=8106h
  7376. --------d-4B8105-----------------------------
  7377. INT 4B - Virtual DMA Specification - SCATTER/GATHER LOCK REGION
  7378.     AX = 8105h
  7379.     DX = flags
  7380.         bits 0-5 reserved (zero)
  7381.         bit 6: EDDS should be returned with page table entries
  7382.         bit 7: only present pages should be locked (not-present pages
  7383.             receive entry of 0000h)
  7384.         bits 8-15 reserved (zero)
  7385.     ES:DI -> Extended DMA descriptor structure (see AX=8102h)
  7386.         region size, linear segment, linear offset, and number avail
  7387.         fields set
  7388. Return: CF clear if successful
  7389.         EDDS number used field set
  7390.         if DX bit 6 set, lower 12 bits of BX = offset in first page
  7391.     CF set on error
  7392.         AL = error code (see AX=8102h)
  7393.         EDDS region size field filled with max length in bytes that can be
  7394.         locked and described in the EDDS table
  7395. BUG:    Windows 3.0 in enhanced mode may return zero instead of the physical
  7396.       page address for pages which were originally not present
  7397. SeeAlso: AX=8103h,AX=8106h
  7398. --------d-4B8106-----------------------------
  7399. INT 4B - Virtual DMA Specification - SCATTER/GATHER UNLOCK REGION
  7400.     AX = 8106h
  7401.     DX = flags
  7402.         bits 0-5 reserved (zero)
  7403.         bit 6: EDDS contains page table entries
  7404.         bit 7: EDDS may contain not-present pages (entry = 0000h)
  7405.         bits 8-15 reserved (zero)
  7406.     ES:DI -> Extended DMA descriptor structure (see AX=8102h) returned
  7407.         by AX=8105h    
  7408. Return: CF clear if successful
  7409.     CF set on error
  7410.         AL = error code (see AX=8102h)
  7411. Note:    according to the Microsoft version of the VDS specification, the
  7412.       actual scatter/gather list is ignored, while according to the IBM
  7413.       version of the specification, "the result of a LOCK operation"
  7414.       must be provided to this function
  7415. SeeAlso: AX=8104h,AX=8105h
  7416. --------d-4B8107-----------------------------
  7417. INT 4B - Virtual DMA Specification - REQUEST DMA BUFFER
  7418.     AX = 8107h
  7419.     DX = flags
  7420.         bit 0: reserved (zero)
  7421.         bit 1: data should be copied into buffer
  7422.         bits  2-15 reserved (zero)
  7423.     ES:DI -> DMA descriptor structure (see AX=8102h) with region size set
  7424.         (also region offset and region segment if DX bit 1 set)
  7425. Return: CF clear if successful
  7426.         DDS physical address and buffer ID set
  7427.         DDS region size filled with length of buffer
  7428.     CF set on error
  7429.         AL = error code (see AX=8102h)
  7430. SeeAlso: AX=8108h
  7431. --------d-4B8108-----------------------------
  7432. INT 4B - Virtual DMA Specification - RELEASE DMA BUFFFER
  7433.     AX = 8108h
  7434.     DX = flags
  7435.         bit 0: reserved (zero)
  7436.         bit 1: data should be copied out of buffer
  7437.         bits 2-15 reserved (zero)
  7438.     ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID set
  7439.         (also region size/region offset/segment if DX bit 1 set)
  7440. Return: CF clear if successful
  7441.     CF set on error
  7442.         AL = error code (see AX=8102h)
  7443. BUG:    under Windows 3.0 Enhanced mode, you must specify that data be copied
  7444.       for this function to work correctly
  7445. SeeAlso: AX=8107h
  7446. --------d-4B8109DX0000-----------------------
  7447. INT 4B - Virtual DMA Specification - COPY INTO DMA BUFFER
  7448.     AX = 8109h
  7449.     DX = 0000h
  7450.     ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID,
  7451.         region segment/offset, and region size fields set
  7452.     BX:CX = starting offset into DMA buffer
  7453. Return: CF clear if successful
  7454.     CF set on error
  7455.         AL = error code (see AX=8102h)
  7456. BUG:    Windows 3.0 Enhanced mode does not correctly interpret the copy count
  7457. SeeAlso: AX=810Ah
  7458. --------d-4B810ADX0000-----------------------
  7459. INT 4B - Virtual DMA Specification - COPY OUT OF DMA BUFFER
  7460.     AX = 810Ah
  7461.     DX = 0000h
  7462.     ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID,
  7463.         region segment/offset, and region size fields set
  7464.     BX:CX = starting offset into DMA buffer
  7465. Return: CF clear if successful
  7466.     CF set on error
  7467.         AL = error code (see AX=8102h)
  7468. BUG:    Windows 3.0 Enhanced mode does not correctly interpret the copy count
  7469. SeeAlso: AX=8109h
  7470. --------d-4B810B-----------------------------
  7471. INT 4B - Virtual DMA Specification - DISABLE DMA TRANSLATION
  7472.     AX = 810Bh
  7473.     BX = DMA channel number
  7474.     DX = 0000h
  7475. Return: CF clear if successful
  7476.     CF set on error
  7477.         AL = error code (see AX=8102h)
  7478. SeeAlso: AX=810Ch
  7479. --------d-4B810C-----------------------------
  7480. INT 4B - Virtual DMA Specification - ENABLE DMA TRANSLATION
  7481.     AX = 810Ch
  7482.     BX = DMA channel number
  7483.     DX = 0000h
  7484. Return: CF clear if successful
  7485.         ZF set if disable count decremented to zero
  7486.     CF set on error
  7487.         AL = error code (see AX=8102h)
  7488. SeeAlso: AX=810Bh
  7489. --------Q-4B810D-----------------------------
  7490. INT 4B - QEMM-386 - BUG
  7491.     AX = 810Dh
  7492. Note:    the code in QEMM v5.11 and 6.00 jumps to an invalid location on this
  7493.       call
  7494. --------h-4C---------------------------------
  7495. INT 4C - Z100 - Slave 8259 - S100 vectored line 4
  7496. SeeAlso: INT 4B"Z100",INT 4D"Z100"
  7497. --------O-4C---------------------------------
  7498. INT 4C - Acorn BBC Master 512 - "OSCLI" - INTERPRET COMMAND LINE
  7499.     DS:BX -> CR-terminated command string
  7500. Return: FLAGS destroyed
  7501. SeeAlso: INT 40"Acorn",INT 4A"Acorn",INT 4B"Acorn"
  7502. --------h-4D---------------------------------
  7503. INT 4D - Z100 - Slave 8259 - S100 vectored line 5
  7504. SeeAlso: INT 4C"Z100",INT 4E"Z100"
  7505. --------d-4E---------------------------------
  7506. INT 4E - TI Professional PC - DISK I/O
  7507.     used instead of INT 13 on the TI Professional PC
  7508. SeeAlso: INT 13
  7509. --------h-4E---------------------------------
  7510. INT 4E - Z100 - Slave 8259 - S100 vectored line 6
  7511. SeeAlso: INT 4D"Z100",INT 4F"Z100"
  7512. --------h-4F---------------------------------
  7513. INT 4F - Z100 - Slave 8259 - S100 vectored line 7
  7514. SeeAlso: INT 4E"Z100"
  7515. --------d-4F8100-----------------------------
  7516. INT 4F - Common Access Method SCSI interface rev 2.3 - SEND CCB TO XPT/SIM
  7517.     AX = 8100h
  7518.     ES:BX -> CAM Control Block (CCB) (see below)
  7519. Return: AH = status
  7520.         00h successful
  7521.         01h invalid CCB address (0000h:0000h)
  7522. Note:    the SCSI Interface Module (SIM) may complete the requested function
  7523.       and invoke the completion callback function before this call returns
  7524. SeeAlso: AX=8200h,INT 2F/AX=7F01h,INT 4B"Common Access Method"
  7525.  
  7526. Values for CAM function code:
  7527.  00h NOP
  7528.  01h execute SCSI I/O
  7529.  02h get device type
  7530.  03h path inquiry
  7531.  04h release SIM queue
  7532.  05h set async callback
  7533.  06h set device type
  7534.  07h-0Fh reserved
  7535.  10h abort SCSI command
  7536.  11h reset SCSI bus
  7537.  12h reset SCSI device
  7538.  13h terminate I/O process
  7539.  14h-1Fh reserved
  7540.  20h engine inquiry
  7541.  21h execute engine request
  7542.  22h-2Fh reserved
  7543.  30h enable logical unit number
  7544.  31h execute target I/O
  7545.  32h-7Fh reserved
  7546.  80h-FFh vendor-specific functions
  7547.  
  7548. Format of CAM Control Block:
  7549. Offset    Size    Description
  7550.  00h    DWORD    physical address of this CCB
  7551.  04h    WORD    CAM control block length
  7552.  06h    BYTE    function code (see above)
  7553.  07h    BYTE    CAM status (see below)
  7554.  08h    BYTE    SCSI status
  7555.  09h    BYTE    path ID (FFh = XPT)
  7556.  0Ah    BYTE    target ID
  7557.  0Bh    BYTE    logical unit number
  7558.  0Ch    BYTE    CAM flags
  7559.         bits 7-6: direction
  7560.             00 reserved
  7561.             01 in
  7562.             10 out
  7563.             11 no data transfer
  7564.         bit 5: disable autosense
  7565.         bit 4: scatter/gather
  7566.         bit 3: disable callback on completion
  7567.         bit 2: linked CDB
  7568.         bit 1: tagged queue action enable
  7569.         bit 0: CDB is a pointer
  7570.  0Dh    BYTE    CAM flags
  7571.         bit 7: disable disconnect
  7572.         bit 6: initiate synchronous transfers  \ mutually
  7573.         bit 5: disable synchronous transfers   / exclusive
  7574.         bit 4: SIM queue priority
  7575.             1 head insertion
  7576.             0 tail insertion (normal)
  7577.         bit 3: SIM queue freeze
  7578.         bit 2: engine synchronize
  7579.         bits 1-0: reserved
  7580.  0Eh    BYTE    CAM address flags
  7581.         bit 7: SG list/data (0 = host, 1 = engine)
  7582.         bit 6: CDB pointer    (bits 6-1: 0=virtual addr, 1=phys addr)
  7583.         bit 5: SG list/data
  7584.         bit 4: sense buffer
  7585.         bit 3: message buffer
  7586.         bit 2: next CCB
  7587.         bit 1: callback on completion
  7588.         bit 0: reserved
  7589.  0Fh    BYTE    target-mode flags (see below)
  7590. ---function 02h---
  7591.  10h    DWORD    pointer to 36-byte buffer for inquiry data or 0000h:0000h
  7592.  14h    BYTE    peripheral device type of target logical unit number
  7593. ---function 03h---
  7594.  10h    BYTE    version number (00h-07h prior to rev 1.7, 08h = rev 1.7,
  7595.         09h-FFh = rev no, i.e. 23h = rev 2.3)
  7596.  11h    BYTE    SCSI capabilities (see below)
  7597.  12h    BYTE    target mode support
  7598.         bit 7: processor mode
  7599.         bit 6: phase-cognizant mode
  7600.         bit 5-0: reserved
  7601.  13h    BYTE    miscellaneous flags
  7602.         bit 7: scanned high to low instead of low to high
  7603.         bit 6: removables not included in scan
  7604.         bit 5: inquiry data not kept by XPT
  7605.         bits 4-0: reserved
  7606.  14h    WORD    engine count
  7607.  16h 14 BYTEs    vendor-specific data
  7608.  24h    DWORD    size of private data area
  7609.  28h    DWORD    asynchronous event capabilities (see below)
  7610.  2Ch    BYTE    highest path ID assigned
  7611.  2Dh    BYTE    SCSI device ID of initiator
  7612.  2Eh  2 BYTEs    reserved
  7613.  30h 16 BYTEs    SIM vendor ID
  7614.  40h 16 BYTEs    HBA (host bus adaptor) vendor ID
  7615.  50h  4 BYTEs    operating-system dependant usage
  7616. ---functions 00h,04h,11h,12h---
  7617.  no additional fields
  7618. ---function 05h---
  7619.  10h    DWORD    asynchronous event enables (see function 03h above)
  7620.  14h    DWORD    pointer to asynchronous callback routine
  7621.  18h    DWORD    pointer to peripheral driver buffer
  7622.  1Ch    BYTE    size of peripheral buffer
  7623. ---function 06h---
  7624.  10h    BYTE    peripheral device type of target
  7625. ---functions 10h,13h---
  7626.  10h    DWORD    pointer to CCB to be aborted
  7627. ---function 20h---
  7628.  10h    WORD    engine number
  7629.  12h    BYTE    engine type
  7630.         00h buffer memory
  7631.         01h lossless compression
  7632.         02h lossy compression
  7633.         03h encryption
  7634.  13h    BYTE    engine algorithm ID
  7635.         00h vendor-unique
  7636.         01h LZ1 variation 1 (STAC)
  7637.         02h LZ2 variation 1 (HP DCZL)
  7638.         03h LZ2 variation 2 (Infochip)
  7639.  14h    DWORD    engine memory size
  7640. ---function 21h---
  7641.  10h    DWORD    pointer to peripheral driver
  7642.  14h  4 BYTEs    reserved
  7643.  18h    DWORD    OS-dependent request-mapping info
  7644.  1Ch    DWORD    address of completion callback routine
  7645.  20h    DWORD    pointer to scatter/gather list or data buffer
  7646.  24h    DWORD    length of data transfer
  7647.  28h    DWORD    pointer to engine buffer data
  7648.  2Ch  2 BYTEs    reserved
  7649.  2Eh    WORD    number of scatter/gather entries
  7650.  30h    DWORD    maximum destination data length
  7651.  34h    DWORD    length of destination data
  7652.  38h    DWORD    source residual length
  7653.  3Ch 12 BYTEs    reserved
  7654.  48h    DWORD    OS-dependent timeout value
  7655.  4Ch  4 BYTEs    reserved
  7656.  50h    WORD    engine number
  7657.  52h    WORD    vendor-unique flags
  7658.  54h  4 BYTEs    reserved
  7659.  58h  N BYTEs    private data area for SIM
  7660. ---function 30h---
  7661.  10h    WORD    group 6 vendor-unique CDB length
  7662.  12h    WORD    group 7 vendor-unique CDB length
  7663.  14h    DWORD    pointer to target CCB list
  7664.  18h    WORD    number of target CCBs
  7665. ---other functions---
  7666.  10h    DWORD    pointer to peripheral driver
  7667.  14h    DWORD    pointer to next CCB
  7668.  18h    DWORD    OS-dependent request mapping information
  7669.  1Ch    DWORD    address of completion callback routine
  7670.  20h    DWORD    pointer to scatter/gather list or data buffer
  7671.  24h    DWORD    length of data transfer
  7672.  28h    DWORD    pointer to sense info buffer
  7673.  2Ch    BYTE    length of sense info buffer
  7674.  2Dh    BYTE    CDB length
  7675.  2Eh    WORD    number of scatter/gather entries
  7676.  30h  4 BYTEs    reserved
  7677.  34h    BYTE    SCSI status
  7678.  35h  3 BYTEs    reserved
  7679.  38h    DWORD    residual length
  7680.  40h 12 BYTEs    Command Descriptor Block (CDB)
  7681.  44h    DWORD    OS-dependent timeout value
  7682.  48h    DWORD    pointer to message buffer
  7683.  4Ch    WORD    length of message buffer
  7684.  4Eh    WORD    vendor-unique flags
  7685.  50h    BYTE    tag queue action
  7686.  51h  3 BYTEs    reserved
  7687.  54h  N BYTEs    private data area for SIM
  7688.  
  7689. Values for CAM status:
  7690.  00h request in progress
  7691.  01h request successful
  7692.  02h host aborted request
  7693.  03h unable to abort request
  7694.  04h request completed with error
  7695.  05h CAM is busy
  7696.  06h invalid request
  7697.  07h invalid path ID
  7698.  08h no such SCSI device
  7699.  09h unable to terminate I/O process
  7700.  0Ah timeout on target selection
  7701.  0Bh timeout on command
  7702.  0Dh receive message rejection
  7703.  0Eh sent/received SCSI bus reset
  7704.  0Fh detected uncorrectable parity error
  7705.  10h Autosense request failed
  7706.  11h no HBA detected
  7707.  12h data over/underrun
  7708.  13h bus freed unexpectedly
  7709.  14h target bus phase sequence failure
  7710.  15h CCB too small
  7711.  16h requested capability not available
  7712.  17h sent bus device reset
  7713.  18h terminate I/O process
  7714.  38h invalid LUN
  7715.  39h invalid target ID
  7716.  3Ah unimplemented function
  7717.  3Bh nexus not established
  7718.  3Ch invalid initiator ID
  7719.  3Dh received SCSI Command Descriptor Block
  7720.  3Eh LUN already enabled
  7721.  3Fh SCSI bus busy
  7722. Note:    bit 6 set to indicate frozen SIM queue
  7723.     bit 7 set to indicate valid autosense
  7724.  
  7725. Bitfields for target-mode flags:
  7726.  bit 7    data buffer valid
  7727.  bit 6    status valid
  7728.  bit 5    message buffer valid
  7729.  bit 4    reserved
  7730.  bit 3    phase-cognizant mode
  7731.  bit 2    target CCB available
  7732.  bit 1    disable autodisconnect
  7733.  bit 0    disable autosave/restore
  7734.  
  7735. Bitfields for SCSI capabilities:
  7736.  bit 7    modify data pointers
  7737.  bit 6    wide bus (32 bits)
  7738.  bit 5    wide bus (16 bits)
  7739.  bit 4    synchronous transfers
  7740.  bit 3    linked commands
  7741.  bit 2    reserved
  7742.  bit 1    tagged queueing
  7743.  bit 0    soft reset
  7744.  
  7745. Bitfields for asynchronous event capabilities:
  7746.  bits 31-24    vendor-specific
  7747.  bits 23-8    reserved
  7748.  bit 7    new devices found during rescan
  7749.  bit 6    SIM module deregistered
  7750.  bit 5    SIM module registered
  7751.  bit 4    sent bus device reset to target
  7752.  bit 3    SCSI AEN
  7753.  bit 2    reserved
  7754.  bit 1    unsolicited reselection
  7755.  bit 0    unsolicited SCSI bus reset
  7756.  
  7757. Completion callback function called with:
  7758.     interrupts disabled
  7759.     ES:BX -> completed CCB
  7760.  
  7761. Asynchronous callback function called with:
  7762.     AH = opcode
  7763.     AL = path ID generating callback
  7764.     DH = target ID causing event
  7765.     DL = LUN causing event
  7766.     CX = data byte count (if applicable)
  7767.     ES:BX -> data buffer (if applicable)
  7768. Return: all registers preserved
  7769. --------d-4F8200CX8765-----------------------
  7770. INT 4F - Common Access Method SCSI interface rev 2.3 - INSTALLATION CHECK
  7771.     AX = 8200h
  7772.     CX = 8765h
  7773.     DX = CBA9h
  7774. Return: AH = 00h if installed
  7775.         CX = 9ABCh
  7776.         DX = 5678h
  7777.         ES:DI -> "SCSI_CAM"
  7778. SeeAlso: AX=8100h,INT 4B"Common Access Method"
  7779. ---------------------------------------------
  7780.