home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 15 / CD_ASCQ_15_070894.iso / maj / 4266 / interrup.g < prev    next >
Text File  |  1994-06-05  |  337KB  |  9,093 lines

  1. Interrupt List, part 7 of 11
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993,1994 Ralf Brown
  3. --------D-2D---------------------------------
  4. INT 2D - DOS 2+ - RESERVED
  5. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  6. --------t-2D---------------------------------
  7. INT 2D - ALTERNATE MULTIPLEX INTERRUPT SPECIFICATION (AMIS) [v3.5.1]
  8.     AH = multiplex number
  9.     AL = function
  10.         00h installation check
  11.         Return: AL = 00h if free
  12.             AL = FFh if multiplex number in use
  13.                 CX = binary version number (CH = major, CL = minor)
  14.                 DX:DI -> signature string (see #1211) identifying
  15.                     the program using the multiplex number
  16.         01h get entry point
  17.         Return: AL = 00h if all API calls via INT 2D
  18.             AL = FFh if entry point supported
  19.                 DX:BX -> entry point for bypassing interrupt chain
  20.         02h uninstall
  21.         DX:BX = return address for successful uninstall (may be
  22.             ignored by TSR)
  23.         Return: AL = status
  24.                 00h not implemented
  25.                 01h unsuccessful
  26.                 02h can not uninstall yet, will do so when able
  27.                 03h safe to remove, but no resident uninstaller
  28.                 (TSR still enabled)
  29.                 BX = segment of memory block with resident code
  30.                 04h safe to remove, but no resident uninstaller
  31.                 (TSR now disabled)
  32.                 BX = segment of memory block with resident code
  33.                 05h not safe to remove now, try again later
  34.                 FFh successful
  35.             return at DX:BX with AX destroyed if successful and
  36.               TSR honors specific return address
  37.         03h request pop-up
  38.         Return: AL = status
  39.                 00h not implemented or TSR is not a pop-up
  40.                 01h can not pop up at this time, try again later
  41.                 02h can not pop up yet, will do so when able
  42.                 03h already popped up
  43.                 04h unable to pop up, user intervention required
  44.                 BX = standard reason code
  45.                     0000h unknown failure
  46.                     0001h interrupt chain passes through memory
  47.                       which must be swapped out to pop up
  48.                     0002h swap-in failed
  49.                 CX = application's reason code if nonzero
  50.                 FFh TSR popped up and was exited by user
  51.                 BX = return value
  52.                     0000h no return value
  53.                     0001h TSR unloaded
  54.                     0002h-00FFh reserved
  55.                     0100h-FFFFh application-dependent
  56.         04h determine chained interrupts
  57.         BL = interrupt number (except 2Dh)
  58.         Return: AL = status
  59.                 00h not implemented
  60.                 01h (obsolete) unable to determine
  61.                 02h (obsolete) interrupt hooked
  62.                 03h (obsolete) interrupt hooked, address returned
  63.                 DX:BX -> TSR's interrupt BL handler
  64.                 04h list of hooked interrupts returned
  65.                 DX:BX -> interrupt hook list (see #1212)
  66.                 FFh interrupt not hooked
  67.         Notes:    since INT 2D is known to be hooked, the resident code
  68.               need not test for BL=2Dh (to minimize its size), and
  69.               the return value is therefore undefined in that case.
  70.             BL is ignored if the TSR returns AL=04h; in that case,
  71.               the caller needs to scan the return list rather than
  72.               making additional calls to this function.  If the
  73.               return is not 00h or 04h, then the caller must cycle
  74.               through the remaining interrupt numbers it wishes to
  75.               check.
  76.             return values 01h thru 03h are disparaged and will be
  77.               removed from the next version of this specification;
  78.               they are included for compatibility with version 3.3,
  79.               though they were probably never used in any
  80.               implementation
  81.         05h get hotkeys
  82.         Return: AL = status
  83.                 00h not implemented
  84.                 FFh supported
  85.                 DX:BX -> hotkey list (see #1213)
  86.         06h-0Fh reserved for future enhancements
  87.         Return: AL = 00h (not implemented)
  88.         other  application-dependent
  89. Notes:    programs should not use fixed multiplex numbers; rather, a program
  90.       should scan all multiplex numbers from 00h to FFh, remembering the
  91.       first unused multiplex in case the program is not yet installed.
  92.       For multiplex numbers which are in use, the program should compare
  93.       the first 16 bytes of the signature string to determine whether it
  94.       is already installed on that multiplex number.  If not previously
  95.       installed, it should use the first free multiplex number.
  96.     functions other than 00h are not valid unless a program is installed
  97.       on the selected multiplex number
  98.     to be considered fully compliant with version 3.5 of the specification,
  99.       programs must implement at least functions 00h, 02h (no resident
  100.       uninstall code required), and 04h (return value 04h).     TSRs that
  101.       provide hotkeys with which the user can activate them must also
  102.       implement function 05h.  The absolute minimum fully-compliant
  103.       implementation has an overhead of 64 bytes (80 bytes with function
  104.       05h) plus 22 bytes per hooked interrupt (for the interrupt sharing
  105.       protocol header and hook list entry).
  106.     the signature string and description may be used by memory mappers
  107.       to display the installed programs
  108.     users of this proposal should adhere to the IBM interrupt sharing
  109.       protocol (see #1217), which will permit removal of TSRs in
  110.       arbitrary order and interrupt handler reordering.  All TSRs
  111.       following this proposal should be removable, though they need not
  112.       keep the code for removing themselves resident; it is acceptable
  113.       for a separate program to perform the removal.
  114.     A sample implementation including example TSRs and utility programs
  115.       may be found in a separate package distributed as AMISLnnn.ZIP
  116.       (AMISL091.ZIP as of this writing).
  117.     Please let me know if you choose to follow this proposal.  The
  118.       signature and a list of the private API calls you use would be
  119.       appreciated, as well.
  120. SeeAlso: INT 2F
  121. Index:    installation check;Alternate Multiplex Interrupt Specification
  122. Index:    installation check;AMIS|installation check;FASTMOUS
  123. Index:    installation check;SPELLER|installation check;Monitor
  124. Index:    installation check;NOLPT|installation check;NOTE
  125. Index:    installation check;RBkeyswp|installation check;SWITCHAR
  126. Index:    installation check;VGABLANK|installation check;EATMEM
  127. Index:    installation check;RECALL|installation check;XPTR2
  128. Index:    uninstall;Alternate Multiplex Interrupt Specification|uninstall;AMIS
  129. Index:    entry point;Alternate Multiplex Interrupt|entry point;AMIS
  130.  
  131. Format of AMIS signature string:
  132. Offset    Size    Description    (Table 1211)
  133.  00h  8 BYTEs    blank-padded manufacturer's name (possibly abbreviated)
  134.  08h  8 BYTEs    blank-padded product name
  135.  10h 64 BYTEs    ASCIZ product description (optional, may be a single 00h)
  136. Note:    it is not necessary to reserve a full 64 bytes for the description,
  137.       just enough to store the actual ASCIZ string
  138.  
  139. Format of AMIS interrupt hook list [array]:
  140. Offset    Size    Description    (Table 1212)
  141.  00h    BYTE    interrupt number (last entry in array is 2Dh)
  142.  01h    WORD    offset within hook list's segment of the interrupt handler
  143.         this will point at the initial short jump of the interrupt
  144.           sharing protocol header (see #1217)
  145.  
  146. Format of AMIS hotkey list:
  147. Offset    Size    Description    (Table 1213)
  148.  00h    BYTE    type of hotkey checking (see #1214)
  149.  01h    BYTE    number of hotkeys (may be zero if TSR can disable hotkeys)
  150.  02h 6N BYTEs    array of hotkey definitions
  151.         (one per hotkey, first should be primary hotkey)
  152.         Offset    Size    Description
  153.          00h    BYTE    hotkey scan code (00h/80h if shift states only)
  154.                 hotkey triggers on release if bit 7 set
  155.          01h    WORD    required shift states (see #1215)
  156.          03h    WORD    disallowed shift states (see #1215)
  157.          05h    BYTE    hotkey flags (see #1216)
  158. Notes:    except for bit 7, the shift states correspond exactly to the return
  159.       values from INT 16/AH=12h.  A set bit in the required states word
  160.       indicates that the corresponding shift state must be active when the
  161.       hotkey's scan code is received for the hotkey to be recognized; a
  162.       clear bit means that the corresponding state may be ignored.    A set
  163.       bit in the disallowed shift states word indicates that the
  164.       corresponding shift state must be inactive.
  165.     for the disallowed-states word, if one of the "either" bits is set,
  166.       then both the corresponding left bit and right bit must be set
  167.     examples:
  168.         Ctrl-Alt-Del monitoring: 53h 000Ch 0003h 06h
  169.         Alt-key tap (DESQview):     B8h 0000h 0007h 08h
  170.         Shf-Shf-N (NOTE.COM):     31h 0003h 000Ch 00h
  171. Index:    hotkeys;AMIS
  172.  
  173. Bitfields for type of AMIS hotkey checking:
  174. Bit(s)    Description    (Table 1214)
  175.  0    checks before chaining INT 09
  176.  1    checks after chaining INT 09
  177.  2    checks before chaining INT 15/AH=4Fh
  178.  3    checks after chaining INT 15/AH=4Fh
  179.  4    checks on INT 16/AH=00h,01h,02h
  180.  5    checks on INT 16/AH=10h,11h,12h
  181.  6    checks on INT 16/AH=20h,21h,22h
  182.  7    reserved (0)
  183.  
  184. Bitfields for AMIS shift states:
  185. Bit(s)    Description    (Table 1215)
  186.  0    right shift pressed
  187.  1    left shift pressed
  188.  2    either control key pressed
  189.  3    either Alt key pressed
  190.  4    ScrollLock active
  191.  5    NumLock active
  192.  6    CapsLock active
  193.  7    either shift key pressed
  194.  8    left control key pressed
  195.  9    left Alt key pressed
  196.  10    right control key pressed
  197.  11    right Alt key pressed
  198.  12    ScrollLock pressed
  199.  13    NumLock pressed
  200.  14    CapsLock pressed
  201.  15    SysReq key pressed
  202. Notes:    if bit 2 is set, either control key may be pressed for the hotkey; if
  203.       bits 8 and 10 are both set, then both control keys must be pressed.
  204.       Similarly for bits 3 and 9/11, as well as 7 and 0/1.
  205.     the SysReq key is often labeled SysRq
  206.  
  207. Bitfields for AMIS hotkey flags:
  208. Bit(s)    Description    (Table 1216)
  209.  0    hotkey chained before processing
  210.  1    hotkey chained after processing
  211.  2    others should pass through this hotkey so that it can be monitored
  212.  3    hotkey will not activate if other keys pressed/released before hotkey
  213.       press is completed
  214.  4    this key is remapped into some other key
  215.  5-7    reserved (0)
  216.  
  217. Format of interrupt sharing protocol interrupt handler entry point:
  218. Offset    Size    Description    (Table 1217)
  219.  00h  2 BYTEs    short jump to actual start of interrupt handler, immediately
  220.           following this data block (EBh 10h)
  221.  02h    DWORD    address of next handler in chain
  222.  06h    WORD    signature 424Bh
  223.  08h    BYTE    EOI flag
  224.         00h software interrupt or secondary hardware interrupt handler
  225.         80h primary hardware interrupt handler (will issue EOI)
  226.  09h  2 BYTEs    short jump to hardware reset routine
  227.         must point at a valid FAR procedure (may be just RETF)
  228.  0Bh  7 BYTEs    reserved (0)
  229.  
  230. (Table 1218)
  231. Values of AMIS signatures known to be in use:
  232.  'Byrial J' 'EKLAVO  '    permits keyboard entry of Esperanto accented letters
  233.  'CoveSoft' 'Burnout+'    shareware screen saver Burnout Plus
  234.  'Crynwr  ' 'SPELLER '    TSR spelling-checker
  235.  'CSJewell' 'Modula3L'    Curtis Jewell's Modula-3 compiler (non-TSR)
  236.  'DAISYCHA' 'INDRIVER'    Advanced Parallel Port daisy chain driver (vendor name
  237.               in product description field, if desired)
  238.             (see also INT 2D/AL=DCh)
  239.  'ECLIPSE ' 'PLUMP   '    Eclipse Software's printer and plotter spooler
  240.  'GraySoft' 'GIPC    '    GraySoft's Inter-Process Communications driver
  241.  'heathh  ' 'Monitor '
  242.  'J. Berry' 'RATSR   '    RemoteAccess Network Manager workstation module
  243.  'JWB      ' 'RAMLIGHT'    James Birdsall's on-screen RAMdisk activity indicator
  244.  'Nildram ' 'ST         '    Screen Thief graphics screen grabber
  245.  'R-Ware  ' 'dLite   '    run-time data decompression TSR
  246.  'Ralf B  ' 'FASTMOUS'    example TSR included with sample AMIS library code
  247.  'Ralf B  ' 'NOLPT n '    example TSR -- turn LPTn into bit-bucket
  248.  'Ralf B  ' 'NOTE    '    example TSR -- popup note-taker
  249.  'Ralf B  ' 'RBkeyswp'    RBkeyswap v3.0+ -- swap Esc/~ and LCtrl/CapsLock keys
  250.  'Ralf B  ' 'SWITCHAR'    example TSR -- add switchar() support removed from DOS5
  251.  'Ralf B  ' 'VGABLANK'    example TSR -- VGA-only screen blanker
  252.  'Sally IS' 'Mdisk   '    removeable, resizeable RAMdisk
  253.  'Sally IS' 'Scr2Tex '    screen dumper with output in (La)Tex format
  254.  'Thaco      ' 'NEST    '    Eirik Pedersen's programmer's delimiter matcher
  255.  'TifaWARE' 'EATMEM  '    George A. Theall's public domain memory restrictor for
  256.             testing programs (v1.1+)
  257.  'TifaWARE' 'RECALL  '    public domain commandline editor and history (v1.2+)
  258.  'Todd      ' 'XPTR2   '    PC-to-Transputer interface by Todd Radel
  259. --------N-2D--10-----------------------------
  260. INT 2D - RATSR 2.0+ - GET STATUS
  261.     AL = 10h
  262.     AH = AMIS multiplex number for RATSR
  263. Return: AL = status
  264.         01h listening (no connection)
  265.         02h receiving          \
  266.         03h sending               > station being monitored
  267.         04h initializing receive  /
  268.     AH = keyboard lock status (00h unlocked, 01h locked)
  269. Program: RATSR is a utility by James Berry provided with
  270.       RemoteAccess/Professional, a commercial bulletin board system, that
  271.       allows remote control of a station over a network
  272. SeeAlso: INT 2D"AMIS"
  273. --------d-2D--10-----------------------------
  274. INT 2D - dLite 1.0+ - GET PARAMETER BLOCK ADDRESS
  275.     AL = 10h
  276.     AH = AMIS multiplex number for dLite
  277. Return: CF clear if successful
  278.         ES:BX -> parameter block (see #1219)
  279.     CF set on error
  280. Program: dLite is a shareware TSR by Rainer Schuetze which transparently
  281.       expands compressed files when they are read
  282. SeeAlso: AL=11h"dLite",AL=12h"dLite",INT 21/AX=FEDCh"PCMANAGE"
  283.  
  284. Format of dLite parameter block:
  285. Offset    Size    Description    (Table 1219)
  286.  00h    BYTE    TSR flags (see #1220)
  287.  01h    WORD    maximum number of programs needing original filesize
  288.  03h    WORD    current number of programs needing original filesize
  289.  05h    WORD    maximum number of files that can be handled by dLite (should
  290.           be the same as FILES= in CONFIG.SYS)
  291.  07h    WORD    offset (in the same segment as the parameter block) of the
  292.           table of programs needing the original filesize (8 bytes
  293.           each,    without path or extension, uppercase, and zero \
  294.           terminated if    shorter than 8 bytes)
  295.  
  296. Bitfields for dLite TSR flags:
  297. Bit(s)    Description    (Table 1220)
  298.  0    deny FCB access
  299.  1    dLite sleeping rather than activated
  300.  2    always indicate original filesize when reading directory entries,
  301.       rather than only for specified programs
  302.  3-7    reserved
  303. --------V-2D--10-----------------------------
  304. INT 2D - Burnout Plus v3.00 - GET STATE/CONTROL INFORMATION
  305.     AL = 10h
  306.     AH = AMIS multiplex number for Burnout Plus
  307. Return: AL = 01h
  308.     BX = Burnout Plus status (see #1221)
  309.     CX = record of features loaded (see #1222)
  310.     ES:DI -> Burnout Plus control structure (see #1223)
  311. Program: Burnout Plus is a DOS screen saver from Cove Software
  312. SeeAlso: INT 14/AX=AA01h,INT 2D"AMIS"
  313. Index:    screen saver;Burnout Plus
  314.  
  315. Bitfields for Burnout Plus status:
  316. Bit(s)    Description    (Table 1221)
  317.  0    screen is blanked
  318.  1    MS Windows is active (Burnout Plus deactivated)
  319.  2-15    reserved
  320.  
  321. Bitfields for Burnout Plus features loaded/features enabled:
  322. Bit(s)    Description    (Table 1222)
  323.  0    mouse activity monitor
  324.  1    passkey support
  325.  2    password support
  326.  3    continuous clear
  327.  4    software blanking
  328.  5    video activity monitor
  329.  6    disk activity monitor
  330.  7    activating keystroke suppression
  331.  
  332. Format of Burnout Plus control structure:
  333. Offset    Size    Description    (Table 1223)
  334.  00h    BYTE    size of structure in bytes
  335.  01h    WORD    Burnout Plus version
  336.  03h    WORD    screen blanking reset count in clock ticks
  337.  05h    WORD    current countdown value in clock ticks
  338.  07h    BYTE    type of timeout specification
  339.  08h    BYTE    instant-blank hotkey
  340.  09h    WORD    extended status information (see #1224)
  341.         the bits for password, passkey, and software blanking are
  342.           ignored and cannot be enabled or disabled externally
  343.  0Bh    WORD    features enabled (see #1222)
  344. Note:    all fields except the first two may be modified by external programs
  345.       to affect the operation of Burnout Plus
  346. Index:    hotkeys;Burnout Plus
  347.  
  348. Bitfields for extended Burnout Plus status information:
  349. Bit(s)    Description    (Table 1224)
  350.  0    Burnout Plus disabled
  351.  1    force screen to blank on next clock tick
  352.  2    restore screen if currently blanked
  353.  3-15    reserved
  354. Note:    1 and 2 are automatically cleared by Burnout Plus after blanking
  355.       or restoring the screen
  356. --------V-2D--10-----------------------------
  357. INT 2D U - Screen Thief v1.00 - FREE HIGH MEMORY BUFFERS
  358.     AL = 10h
  359.     AH = AMIS multiplex number for Screen Thief
  360. Return: nothing
  361. Program: Screen Thief is a graphics screen grabber
  362. Note:    releases any code and data stored in EMS, DOS UMBs, or XMS UMBs, but
  363.       does not release the low-memory stub; this may be used to effect a
  364.       partial uninstall if INT 2D/AL=02h fails
  365. SeeAlso: INT D8"Screen Thief"
  366. --------i-2D--10-----------------------------
  367. INT 2D U - RAMLIGHT v1.0 - GET MONITORING INFORMATION
  368.     AL = 10h
  369.     AH = AMIS multiplex number for RAMLIGHT
  370. Return: ES:BX -> array of fake device driver headers used in monitoring
  371.     CX = number of drives being monitored???
  372. --------d-2D--11-----------------------------
  373. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET ORIGINAL SIZE
  374.     AL = 11h
  375.     AH = AMIS multiplex number for dLite
  376.     BX = file handle
  377. Return: CF clear if successful
  378.         DX:AX = size of uncompressed file
  379.     CF set on error (not dPressed file)
  380. SeeAlso: AL=10h"dLite",AL=12h"dLite"
  381. --------d-2D--12-----------------------------
  382. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET COMPRESSED SIZE
  383.     AL = 12h
  384.     AH = AMIS multiplex number for dLite
  385.     BX = file handle
  386. Return: CF clear if successful
  387.         DX:AX = size of compressed file
  388.     CF set on error (not dPressed file)
  389. SeeAlso: AL=10h"dLite",AL=11h"dLite"
  390. --------b-2D--DC-----------------------------
  391. INT 2D C - DAISY.SYS - BROADCAST: CHAIN RESCANNED
  392.     AL = DCh
  393.     AH = AMIS multiplex number for signature 'DAISYCHA' 'INDRIVER'
  394.     DL = LPT Port Rescanned
  395. Program: DAISY.SYS is a daisy chain manager for parallel port peripherals
  396.       conforming to the Advanced Parallel Port Committee's daisy chain
  397.       specification.
  398. Desc:    This Broadcast is sent whenever daisy chain IDs are reassigned to
  399.       warn parallel port device drivers that their daisy chain ID may
  400.       have been changed.
  401. Note:    This function is a callout from DAISY.SYS, NOT a call into DAISY.SYS
  402. SeeAlso: INT 17/AX=0200h"Advanced Parallel Port"
  403. --------l-2E---------------------------------
  404. INT 2E U - DOS 2+ - PASS COMMAND TO COMMAND INTERPRETER FOR EXECUTION
  405.     DS:SI -> commandline to execute (see #1225)
  406. Return: all registers except CS:IP destroyed
  407.     AX = status (4DOS v4.0)
  408.        0000h successful
  409.        FFFFh error before processing command (not enough memory, etc)
  410.        other error number returned by command
  411. Notes:    this call allows execution of arbitrary commands (including COMMAND.COM
  412.       internal commands) without loading another copy of COMMAND.COM
  413.     if COMMAND.COM is the user's command interpreter, the primary copy
  414.       executes the command; this allows the master environment to be
  415.       modified by issuing a "SET" command, but changes in the master
  416.       environment will not become effective until all programs descended
  417.       from the primary COMMAND.COM terminate
  418.     since COMMAND.COM processes the string as if typed from the keyboard,
  419.       the transient portion needs to be present, and the calling program
  420.       must ensure that sufficient memory to load the transient portion can
  421.       be allocated by DOS if necessary
  422.     results are unpredictable if invoked by a program run from a batch file
  423.       because this call is not reentrant and COMMAND.COM uses the same
  424.       internal variables when processing a batch file
  425.     hooked but ignored by 4DOS v3.0 COMMAND.COM replacement unless SHELL2E
  426.       has been loaded
  427.     the MS-DOS 5 Programmer's Reference calls this "Reload Transient"
  428.  
  429. Format of DOS commandline:
  430. Offset    Size    Description    (Table 1225)
  431.  00h    BYTE    length of command string, not counting trailing CR
  432.  01h    var    command string
  433.   N    BYTE    0Dh (CR)
  434. --------O-2E---------------------------------
  435. INT 2E UP - Windows NT - NATIVE API
  436.     EAX = function number
  437.     EDX = address of parameter block
  438. Return: ???
  439. --------l-2E----BXE22E-----------------------
  440. INT 2E - 4DOS v2.x-3.03 SHELL2E.COM - UNINSTALL
  441.     BX = E22Eh
  442.     DS:SI -> zero byte
  443. Return: if successful, SHELL2E terminates itself with INT 21/AH=4Ch
  444. ----------2F---------------------------------
  445. INT 2F - Multiplex - NOTES
  446.     AH = identifier of program which is to handle the interrupt
  447.        00h-7Fh reserved for DOS
  448.        B8h-BFh reserved for networks
  449.        C0h-FFh reserved for applications
  450.     AL is the function code
  451.    This is a general mechanism for verifying the presence of a TSR and
  452.    communicating with it.  When searching for a free identifier code for AH
  453.    using the installation check (AL=00h), the calling program should set
  454.    BX/CX/DX to 0000h and must not depend on any registers other than CS:IP
  455.    and SS:SP to be valid on return, since numerous programs now use additional
  456.    registers on input and/or output for the installation check.
  457. Notes:    Since the multiplex chain is growing so long, and beginning to
  458.       experience multiplex number collisions, I am proposing an alternate
  459.       multiplex interrupt on INT 2D.  If you decide to use the alternate
  460.       multiplex, please let me know.
  461.     DOS and some other programs return values in the flags register, so
  462.       any TSR which chains by calling the previous handler rather than
  463.       jumping to it should ensure that the returned flags are preserved
  464.       and passed back to the original caller
  465. SeeAlso: INT 2D
  466. --------t-2F---------------------------------
  467. INT 2F - BMB Compuscience Canada Utilities Interface - INSTALLATION CHECK
  468.     AH = xx (dynamically assigned based upon a search for a multiplex
  469.          number which doesn't answer installed)
  470.     AL = 00h installation check
  471.     ES:DI = EBEBh:BEBEh
  472. Return: AL = 00h not installed
  473.          01h not installed, not OK to install
  474.          FFh installed; if ES:DI was EBEBh:BEBEh on entry, ES:DI will point
  475.          to a string of the form 'MMMMPPPPPPPPvNNNN' where MMMM is a
  476.          short form of the manufacturer's name, PPPPPPPP is a product
  477.          name and NNNN is the product's version number
  478. --------t-2F---------------------------------
  479. INT 2F - Ross Wentworth's Turbo Pascal POPUP LIBRARY
  480.     AH = programmer-selected multiplex number
  481.     AL = function
  482.         00h installation check
  483.         Return: AL = FFh if installed
  484.         01h get TSR interrupt vectors
  485.         Return: DX:AX -> vector table (see #1226)
  486.         02h get TSR code segment
  487.         Return: AX = code segment for all interrupt handlers
  488.         03h call user exit routine and release TSR's memory
  489.         04h get signature string
  490.         Return: DX:AX -> counted string containing signature
  491.         05h get TSR's INT 2F handler
  492.         Return: DX:AX -> INT 2F handler
  493.         06h enable/disable TSR
  494.         BL = new state (00h disabled, 01h enabled)
  495.         07h activate TSR (popup if not disabled)
  496.         08h get hotkeys
  497.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  498.         Return: AX = hotkey (AH = keyflags, AL = scancode)
  499.         09h set hotkey
  500.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  501.         CX = new hotkey (CH = keyflags, CL = scancode)
  502.         0Ah-1Fh reserved
  503. Index:    installation check;Ross Wentworth POPUP library
  504. Index:    hotkeys;Ross Wentworth POPUP library
  505.  
  506. Format of POPUP vector table entry:
  507. Offset    Size    Description    (Table 1226)
  508.  00h    BYTE    vector number (00h = end of table)
  509.  01h    DWORD    original vector
  510.  05h    WORD    offset of interrupt handler in TSR's code segment
  511. --------t-2F---------------------------------
  512. INT 2F - CiriSOFT Spanish University of Valladolid TSR's Interface
  513.     AH = xx (dynamically assigned based upon a search for a multiplex
  514.          number from C0h to FFh which doesn't answer installed)
  515.     AL = 00h installation check
  516.     ES:DI = 1492h:1992h
  517. Return: AL = 00h not installed
  518.          01h not installed, not OK to install
  519.          FFh installed; and if ES:DI was 1492h:1992h on entry, ES:DI will
  520.          point to author_name_ver table (see #1227)
  521.     AH = FFh
  522. Note:    this interface permits advanced communication with TSRs: it is possible
  523.       to make a generic uninstall utility, advanced TSR relocator programs
  524.       in order to fit fragmented memory areas, etc.
  525. See also: INT 2D"AMIS",INT 2F"Compuscience"
  526. Index:    installation check;CiriSOFT TSR interface
  527. Index:    uninstall;CiriSOFT TSR interface
  528.  
  529. Format of CiriSOFT author_name_ver table:
  530. Offset    Size    Description    (Table 1227)
  531.  -16    WORD    segment of the start of the resident TSR code (CS in programs
  532.           with PSP, XMS upper memory segment if installed as UMB...)
  533.  -14    WORD    offset of the start of the resident TSR code (frequently 100h
  534.           in *.COM programs and 0 in upper memory TSR's).
  535.  -12    WORD    memory used by TSR (in paragraphs). Knowing the memory area
  536.           used by TSR is possible to determine if hooked vectors are
  537.           still pointing it (and if it is safe to uninstall).
  538.  -10    BYTE    characteristics byte (see #1228)
  539.  -9    BYTE    number of multiplex entry used (redefinition available). Note
  540.           that the TSR must use THIS variable in it's INT 2Fh handler.
  541.  -8    WORD    offset to vector_area table (see #1229)
  542.  -6    WORD    offset to extra_area table (see bit 7 in offset -10 and below)
  543.  -4   4 BYTEs    signature string "*##*"
  544.  00h    var    "AUTHOR:PROGRAM_NAME:VERSION",0     (variable length, this area
  545.           is used in order to determine if the TSR is already resident
  546.           and it's version code; the ':' char is used as delimiter)
  547.  
  548. Bitfields for CiriSOFT characteristics byte:
  549. Bit(s)    Description    (Table 1228)
  550.  0-2    type
  551.     000 normal program (with PSP)
  552.     001 upper XMS memory block (needed HIMEM.SYS function to free memory
  553.           when uninstalling)
  554.     010 device driver (*.SYS)
  555.     011 device driver in EXE format
  556.     1xx others (reserved)
  557.  3-6    reserved
  558.  7    set if extra_table defined and supported
  559.  
  560. Format of CiriSOFT vector_area table:
  561. Offset    Size    Description    (Table 1229)
  562.  -1    BYTE    number of vectors intercepted by TSR
  563.  00h    BYTE    first vector number
  564.  01h    DWORD    first vector pointer before installing the TSR
  565.  05h    BYTE    second vector number
  566.  06h    DWORD    second vector pointer before installing the TSR
  567.  0Ah    ...    (and so on)
  568. Note:    the TSR must use these variables to invoke the previous interrupt
  569.       handler routines
  570.  
  571. Format of extra_area table (needed only to improve relocation feature):
  572. Offset    Size    Description    (Table 1230)
  573.  00h    WORD    offset to external_ctrl table (0 if not supported)
  574.  02h    WORD    reserved for future use (0)
  575.  
  576. Format of CiriSOFT external_ctrl table:
  577. Offset    Size    Description    (Table 1231)
  578.  00h    BYTE    bit 0: TSR is relocatable (no absolute segment references)
  579.  01h    WORD    offset to a variable which can activate/inhibit the TSR
  580.  ---And if bit 0 in offset 00h is off:
  581.  03h    DWORD    pointer to ASCIZ pathname for executable file which supports
  582.           /SR parameter (silent installation & inhibit)
  583.  07h    DWORD    pointer to first variable to initialize on the copy reloaded
  584.           from the previous TSR still resident
  585.  0Bh    DWORD    pointer to last variable (all variables packed in one block)
  586. --------c-2F00-------------------------------
  587. INT 2F U - DOS 2.x only PRINT.COM - ???
  588.     AH = 00h
  589.     ???
  590. Return: ???
  591. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  592.     values in AH other than 00h or 01h cause PRINT to return the number of
  593.       files in the queue in AH
  594. SeeAlso: AH=01h
  595. --------P-2F00-------------------------------
  596. INT 2F U - PSPRINT - PRINT JOB CONTROL
  597.     AH = 00h
  598.     ???
  599. Return: ???
  600. --------c-2F0080-----------------------------
  601. INT 2F - DOS 3.1+ PRINT - GIVE PRINT A TIME SLICE
  602.     AX = 0080h
  603. Return: after PRINT executes
  604. Notes:    PRINT returns AL=01h if AH=00h but AL is not 80h on entry
  605.     this function is not supported by the Novell DOS 7 PRINT.COM
  606. --------N-2F00D8-----------------------------
  607. INT 2F - Personal NetWare - VLM - ???
  608.     AX = 00D8h
  609.     ???
  610. Return: ???
  611. Note:    hooked by one of the .VLMs loaded by VLM.EXE v1.10, but apparently a
  612.       NOP
  613. --------c-2F01-------------------------------
  614. INT 2F U - DOS 2.x only PRINT.COM - ???
  615.     AH = 01h
  616.     ???
  617. Return: ???
  618. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  619.     values in AH other than 00h or 01h cause PRINT to return the number of
  620.       files in the queue in AH
  621. SeeAlso: AH=00h
  622. --------c-2F0100-----------------------------
  623. INT 2F - DOS 3+ PRINT - INSTALLATION CHECK
  624.     AX = 0100h
  625. Return: AL = status
  626.         00h not installed
  627.         01h not installed, but not OK to install
  628.         FFh installed
  629.         AH = 00h (Novell DOS 7)
  630. SeeAlso: AX=0101h
  631. --------c-2F0100SI20D6-----------------------
  632. INT 2F U - PrintCache 3.1 PRINT.COM - INSTALLATION CHECK
  633.     AX = 0100h
  634.     SI = 20D6h
  635.     DI = 8761h
  636. Return: AX = 00FFh if installed
  637.     DI = 0001h if PrintCache's PRINT.COM installed and magic values match
  638.         SI = resident code segment
  639. Program: PrintCache PRINT.COM is a DOS PRINT replacement included in
  640.       LaserTools' PrintCache memory/disk-based print spooler package
  641. Note:    if either of SI or DI differ from the indicated magic values, only AX
  642.       will be modified on return, for compatibility with DOS PRINT
  643. SeeAlso: AX=0101h/SI=20D6h,AX=C000h"PCACHE"
  644. --------c-2F0101-----------------------------
  645. INT 2F - DOS 3+ PRINT - SUBMIT FILE FOR PRINTING
  646.     AX = 0101h
  647.     DS:DX -> submit packet (see #1232)
  648. Return: CF clear if successful
  649.         AL = status
  650.         01h added to queue
  651.         9Eh now printing
  652.     CF set on error
  653.         AX = error code (see #1233,#0770 at INT 21/AH=59h)
  654. SeeAlso: AX=0102h
  655.  
  656. Format of PRINT submit packet:
  657. Offset    Size    Description    (Table 1232)
  658.  00h    BYTE    level (must be 00h)
  659.  01h    DWORD    pointer to ASCIZ filename (no wildcards)
  660.  
  661. (Table 1233)
  662. Values for PRINT error code:
  663.  0001h    invalid function
  664.  0002h    file not found
  665.  0003h    path not found
  666.  0004h    out of file handles
  667.  0005h    access denied
  668.  0008h    print queue full
  669.  0009h    spooler busy
  670.  000Ch    name too long
  671.  000Fh    invalid drive
  672. --------c-2F0101SI20D6-----------------------
  673. INT 2F U - PrintCache v3.1 PRINT.COM - SUBMIT FILE FOR PRINTING
  674.     AX = 0101h
  675.     SI = 20D6h
  676.     DI = 8761h
  677.     DS:DX -> submit packet (see #1232)
  678.     CL = print options
  679.         bit 4: use default options
  680. Return: CF clear if successful
  681.         AL = status
  682.         01h added to queue
  683.         9Eh now printing
  684.     CF set on error
  685.         AX = error code (see #1233)
  686. Program: PrintCache PRINT.COM is a DOS PRINT replacement included in
  687.       LaserTools' PrintCache memory/disk-based print spooler package
  688. Note:    if either SI or DI differs from the indicated magic values on entry,
  689.       PrintCache will use the default print options for the file for
  690.       compatibility with DOS PRINT
  691. SeeAlso: AX=0100h/SI=20D6h,AX=0101h,AX=0107h"PrintCache"
  692. --------c-2F0102-----------------------------
  693. INT 2F - DOS 3+ PRINT - REMOVE FILE FROM PRINT QUEUE
  694.     AX = 0102h
  695.     DS:DX -> ASCIZ filename (wildcards allowed)
  696. Return: CF clear if successful
  697.     CF set on error
  698.         AX = error code (see #1233)
  699. SeeAlso: AX=0101h,AX=0103h
  700. --------c-2F0103-----------------------------
  701. INT 2F - DOS 3+ PRINT - CANCEL ALL FILES IN PRINT QUEUE
  702.     AX = 0103h
  703. Return: CF clear if successful
  704.     CF set on error
  705.         AX = error code (see #1233)
  706. SeeAlso: AX=0102h
  707. --------c-2F0104-----------------------------
  708. INT 2F - DOS 3+ PRINT - FREEZE PRINT QUEUE TO READ JOB STATUS
  709.     AX = 0104h
  710. Return: CF clear if successful
  711.         DX = error count since status last read
  712.         DS:SI -> print queue
  713.     CF set on error
  714.         AX = error code (see #1233)
  715. Desc:    get the list of print jobs, temporarily suspending PRINT's activities
  716.       to avoid changing the list while it is being examined
  717. Notes:    the print queue is an array of 64-byte ASCIZ filenames terminated by
  718.       an empty filename; the first name is the file currently being printed
  719.     printing is stopped until AX=0105h is called to prevent the queue
  720.       from changing while the filenames are being read
  721. SeeAlso: AX=0101h,AX=0105h
  722. --------c-2F0105-----------------------------
  723. INT 2F - DOS 3+ PRINT - RESTART PRINT QUEUE AFTER STATUS READ
  724.     AX = 0105h
  725. Return: CF clear if successful
  726.     CF set on error
  727.         AX = error code (see #1233)
  728. Desc:    restart PRINT's activities once an application finishes examining the
  729.       print queue
  730. SeeAlso: AX=0104h
  731. --------c-2F0106-----------------------------
  732. INT 2F - DOS 3.3+ PRINT - GET PRINTER DEVICE
  733.     AX = 0106h
  734. Return: CF set if files in print queue
  735.         AX = error code 0008h (queue full)
  736.         DS:SI -> device driver header
  737.     CF clear if print queue empty
  738.         AX = 0000h
  739. Desc:    determine which device, if any, PRINT is currently using for output
  740. Notes:    undocumented prior to the release of MS-DOS 5.0
  741.     this function can be used to allow a program to avoid printing to the
  742.       printer on which PRINT is currently performing output
  743. SeeAlso: AX=0104h
  744. --------c-2F0107-----------------------------
  745. INT 2F U - PrintCache v3.1 PRINT.COM - SET TRAILING FORM FEEDS
  746.     AX = 0107h
  747.     CL bit 0: output form feed between print jobs
  748. Return: AL destroyed
  749. SeeAlso: AX=0100h/SI=20D6h,AX=0101h/SI=20D6h
  750. --------N-2F0200-----------------------------
  751. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALLATION CHECK
  752.     AX = 0200h
  753. Return: AL = FFh if installed
  754. Desc:    determine whether the PC LAN Program redirector is installed
  755. SeeAlso: AX=0201h,AX=0203h
  756. --------N-2F0201-----------------------------
  757. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  758.     AX = 0201h
  759. Return: nothing???
  760. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  761.     AX=0202h appears to be the opposite function
  762.     these functions are supposedly used to signal opening and closing of
  763.       printers
  764. SeeAlso: AX=0202h
  765. --------N-2F0202-----------------------------
  766. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  767.     AX = 0202h
  768.     ???
  769. Return: nothing???
  770. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  771.     these functions are supposedly used to signal opening and closing of
  772.       printers
  773. SeeAlso: AX=0201h
  774. --------N-2F0203-----------------------------
  775. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  776.     AX = 0203h
  777. Return: nothing???
  778. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  779.     AX=0204h appears to be the opposite function
  780.     these functions are supposedly used to signal opening and closing of
  781.       printers
  782. SeeAlso: AX=0200h,AX=0204h
  783. --------N-2F0204-----------------------------
  784. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  785.     AX = 0204h
  786.     ???
  787. Return: nothing???
  788. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  789.     AX=0203h appears to be the opposite function
  790.     these functions are supposedly used to signal opening and closing of
  791.       printers
  792. SeeAlso: AX=0200h,AX=0203h
  793. --------N-2F---------------------------------
  794. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  795.     AX = 02xxh
  796.     ???
  797. Return: ???
  798. --------l-2F0500-----------------------------
  799. INT 2F U - DOS 3+ CRITICAL ERROR HANDLER - INSTALLATION CHECK
  800.     AX = 0500h
  801. Return: AL = 00h not installed, OK to install
  802.          01h not installed, can't install
  803.          FFh installed
  804. Desc:    determine whether a critical error message override is installed
  805. Note:    this set of functions allows a user program to partially or completely
  806.       override the default critical error handler's message in COMMAND.COM
  807. SeeAlso: AH=05h,INT 24
  808. --------l-2F05-------------------------------
  809. INT 2F CU - DOS 3+ CRITICAL ERROR HANDLER - EXPAND ERROR INTO STRING
  810.     AH = 05h
  811. ---DOS 3.x---
  812.     AL = extended error code (not zero)
  813. ---DOS 4+ ---
  814.     AL = error type
  815.         01h DOS extended error code
  816.         02h parameter error
  817.     BX = error code
  818. Return: CF clear if successful
  819.         ES:DI -> ASCIZ error message (read-only)
  820.         AL = completion state
  821.         00h message requires completion with device name, drive, etc.
  822.         01h message is complete as returned
  823.     CF set if error code can't be converted to string
  824.         AX,DI,ES destroyed
  825.     other flags corrupted
  826. Notes:    called at start of COMMAND.COM's default critical error handler if
  827.       installed by a user program, allowing partial or complete overriding
  828.       of the default error messages
  829.     subfunction 02h is called by many DOS 4 external programs
  830.     DR-DOS's COMMAND.COM appends additional info ("0 files copied") to the
  831.       returned string
  832. SeeAlso: AX=0500h,AX=122Eh,INT 24
  833. --------U-2F0600-----------------------------
  834. INT 2F - DOS 3+ ASSIGN - INSTALLATION CHECK
  835.     AX = 0600h
  836. Return: AL = status
  837.         00h not installed
  838.         01h not installed, but not OK to install
  839.         FFh installed
  840. Notes:    ASSIGN is not a TSR in DR-DOS 5.0; it is internally replaced by SUBST
  841.       (see INT 21/AH=52h)
  842.     undocumented prior to the release of DOS 5.0
  843. SeeAlso: AX=0601h,INT 21/AH=52h
  844. --------U-2F0601-----------------------------
  845. INT 2F U - DOS 3+ ASSIGN - GET DRIVE ASSIGNMENT TABLE
  846.     AX = 0601h
  847. Return: ES = segment of ASSIGN work area and assignment table
  848. Note:    under DOS 3+, the 26 bytes starting at ES:0103h specify which drive
  849.       each of A: to Z: is mapped to.  Initially set to 01h 02h 03h....
  850. SeeAlso: AX=0600h
  851. --------D-2F0800-----------------------------
  852. INT 2F U - DRIVER.SYS support - INSTALLATION CHECK
  853.     AX = 0800h
  854. Return: AL = status
  855.         00h not installed, OK to install
  856.         01h not installed, not OK to install
  857.         FFh installed
  858. Desc:    determine whether the internal support code used by DRIVER.SYS is
  859.       present; it is always present in DOS 3.2+
  860. Note:    supported by DR-DOS 5.0
  861. --------D-2F0801-----------------------------
  862. INT 2F U - DRIVER.SYS support - ADD NEW BLOCK DEVICE
  863.     AX = 0801h
  864.     DS:DI -> drive data table (see #1240,#1241,#1242)
  865. Return: AX,BX,SI,ES destroyed
  866. Notes:    moves down internal list of drive data tables, copying and modifying
  867.       the drive description flags word for tables referencing same physical
  868.       drive
  869.     the data table is appended to the chain of tables
  870.     supported by DR-DOS 5.0
  871. SeeAlso: AX=0803h
  872. --------D-2F0802-----------------------------
  873. INT 2F U - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST
  874.     AX = 0802h
  875.     ES:BX -> device driver request header (see #1236)
  876. Return: request header updated as per requested operation
  877. Notes:    supported by DR-DOS 5.0
  878.     DOS 3.2 executes this function on any AL value from 02h through F7h;
  879.       DOS 4+ executes this function on AL=02h and AL=04h-F7h
  880.     the command codes and structures described below apply to all drivers
  881.       which support the appropriate commands; this call is just one of a
  882.       number of ways in which a device driver request may be invoked
  883. SeeAlso: AX=0800h,AX=0801h,AX=0803h,INT 21/AH=52h,INT 21/AH=99h,INT 21/AH=9Ah
  884.  
  885. (Table 1234)
  886. Values for device driver command code:
  887.  00h    INIT
  888.  01h    MEDIA CHECK (block devices)
  889.  02h    BUILD BPB (block devices)
  890.  03h    IOCTL INPUT
  891.  04h    INPUT
  892.  05h    NONDESTRUCTIVE INPUT, NO WAIT (character devices)
  893.  06h    INPUT STATUS (character devices)
  894.  07h    INPUT FLUSH (character devices)
  895.  08h    OUTPUT
  896.  09h    OUTPUT WITH VERIFY
  897.  0Ah    OUTPUT STATUS (character devices)
  898.  0Bh    OUTPUT FLUSH (character devices)
  899.  0Ch    IOCTL OUTPUT
  900.  0Dh    (DOS 3+) DEVICE OPEN
  901.  0Eh    (DOS 3+) DEVICE CLOSE
  902.  0Fh    (DOS 3+) REMOVABLE MEDIA (block devices)
  903.  10h    (DOS 3+) OUTPUT UNTIL BUSY (character devices)
  904.  11h    (European MS-DOS 4.0) STOP OUTPUT (console screen drivers only)
  905.  12h    (European MS-DOS 4.0) RESTART OUTPUT (console screen drivers only)
  906.  13h    (DOS 3.2+) GENERIC IOCTL
  907.  14h    unused
  908.  15h    (European MS-DOS 4.0) RESET UNCERTAIN MEDIA FLAG
  909.  16h    unused
  910.  17h    (DOS 3.2+) GET LOGICAL DEVICE
  911.  18h    (DOS 3.2+) SET LOGICAL DEVICE
  912.  19h    (DOS 5+) CHECK GENERIC IOCTL SUPPORT
  913.  80h    (CD-ROM) READ LONG
  914.  81h    (CD-ROM) reserved
  915.  82h    (CD-ROM) READ LONG PREFETCH
  916.  83h    (CD-ROM) SEEK
  917.  84h    (CD-ROM) PLAY AUDIO
  918.  85h    (CD-ROM) STOP AUDIO
  919.  86h    (CD-ROM) WRITE LONG
  920.  87h    (CD-ROM) WRITE LONG VERIFY
  921.  88h    (CD-ROM) RESUME AUDIO
  922.  
  923. Bitfields for device request status:
  924. Bit(s)    Description    (Table 1235)
  925.  15    error
  926.  14-11    reserved
  927.  10    ??? set by DOS kernel on entry to some driver calls
  928.  9    busy
  929.  8    done (may be clear on return under European MS-DOS 4.0)
  930.  7-0    error code if bit 15 set (see #1237)
  931.  
  932. Format of device driver request header:
  933. Offset    Size    Description    (Table 1236)
  934.  00h    BYTE    length of request header
  935.  01h    BYTE    subunit within device driver
  936.  02h    BYTE    command code (see #1234)
  937.  03h    WORD    status (filled in by device driver) (see #1235)
  938. ---DOS---
  939.  05h  4 BYTEs    reserved (unused in DOS 2.x and 3.x)
  940.  09h    DWORD    (European MS-DOS 4.0 only) pointer to next request header in
  941.               device's request queue
  942.         (other versions) reserved (unused in DOS 2.x and 3.x)
  943. ---STARLITE architecture---
  944.  05h    DWORD    pointer to next request header
  945.  09h  4 BYTEs    reserved
  946. ---command code 00h---
  947.  0Dh    BYTE    (return) number of units
  948.  0Eh    DWORD    (call) pointer to DOS device helper function (see #1238)
  949.               (European MS-DOS 4.0 only)
  950.         (call) pointer past end of memory available to driver (DOS 5+)
  951.         (return) address of first free byte following driver
  952.  12h    DWORD    (call) pointer to commandline arguments
  953.         (return) pointer to BPB array (block drivers) or
  954.               0000h:0000h (character drivers)
  955.  16h    BYTE    (DOS 3+) drive number for first unit of block driver (0=A)
  956.    ---European MS-DOS 4.0---
  957.  17h    DWORD    pointer to function to save registers on stack
  958.    ---DOS 5+ ---
  959.  17h    WORD    (return) error-message flag
  960.         0001h MS-DOS should display error msg on init failure
  961. ---command code 01h---
  962.  0Dh    BYTE    media descriptor
  963.  0Eh    BYTE    (return) media status
  964.         00h don't know
  965.         01h media has not changed
  966.         FFh media has been changed
  967.  0Fh    DWORD    (return, DOS 3+) pointer to previous volume ID if OPEN/CLOSE/RM
  968.           bit in device header is set and disk changed
  969. ---command code 02h---
  970.  0Dh    BYTE    media descriptor
  971.  0Eh    DWORD    transfer address
  972.         -> scratch sector if NON-IBM FORMAT bit in device header set
  973.         -> first FAT sector otherwise
  974.  12h    DWORD    pointer to BPB (set by driver) (see INT 21/AH=53h)
  975. ---command codes 03h,0Ch--- (see also INT 21/AX=4402h,INT 21/AX=4403h)
  976.  0Dh    BYTE    media descriptor (block devices only)
  977.  0Eh    DWORD    transfer address
  978.  12h    WORD    (call) number of bytes to read/write
  979.         (return) actual number of bytes read or written
  980. ---command codes 04h,08h,09h---
  981.  0Dh    BYTE    media descriptor (block devices only)
  982.  0Eh    DWORD    transfer address
  983.  12h    WORD    byte count (character devices) or sector count (block devices)
  984.  14h    WORD    starting sector number (block devices only)
  985.  16h    DWORD    (DOS 3+) pointer to volume ID if error 0Fh returned
  986.  1Ah    DWORD    (DOS 4+) 32-bit starting sector number (block devices with
  987.           device attribute word bit 1 set only) if starting sector
  988.           number above is FFFFh (see INT 21/AH=52h)
  989. ---command code 05h---
  990.  0Dh    BYTE    byte read from device if BUSY bit clear on return
  991. ---command codes 06h,07h,0Ah,0Bh,0Dh,0Eh,0Fh---
  992.  no further fields
  993. ---command code 10h---
  994.  0Dh    BYTE    unused
  995.  0Eh    DWORD    transfer address
  996.  12h    WORD    (call) number of bytes to write
  997.         (return) actual number of bytes written
  998. ---command codes 11h,12h---
  999.  0Dh    BYTE    reserved
  1000. ---command code 15h---
  1001.  no further fields
  1002. ---command codes 13h,19h---
  1003.  0Dh    BYTE    category code
  1004.         00h unknown
  1005.         01h COMn:
  1006.         03h CON
  1007.         05h LPTn:
  1008.         07h mouse (European MS-DOS 4.0)
  1009.         08h disk
  1010.         9Eh (STARLITE) Media Access Control driver
  1011.  0Eh    BYTE    function code
  1012.         00h (STARLITE) MAC Bind request
  1013.  0Fh    WORD    copy of DS at time of IOCTL call (apparently unused in DOS 3.3)
  1014.         SI contents (European MS-DOS 4.0)
  1015.  11h    WORD    offset of device driver header
  1016.         DI contents (European MS-DOS 4.0)
  1017.  13h    DWORD    pointer to parameter block from INT 21/AX=440Ch or AX=440Dh
  1018. ---command codes 80h,82h---
  1019.  0Dh    BYTE    addressing mode
  1020.         00h HSG (default)
  1021.         01h Phillips/Sony Red Book
  1022.  0Eh    DWORD    transfer address (ignored for command 82h)
  1023.  12h    WORD    number of sectors to read
  1024.         (if 0 for command 82h, request is an advisory seek)
  1025.  14h    DWORD    starting sector number
  1026.         logical sector number in HSG mode
  1027.         frame/second/minute/unused in Red Book mode
  1028.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  1029.  18h    BYTE    data read mode
  1030.         00h cooked (2048 bytes per frame)
  1031.         01h raw (2352 bytes per frame, including EDC/ECC)
  1032.  19h    BYTE    interleave size (number of sectors stored consecutively)
  1033.  1Ah    BYTE    interleave skip factor
  1034.         (number of sectors between consecutive portions)
  1035. ---command code 83h---
  1036.  0Dh    BYTE    addressing mode (see above)
  1037.  0Eh    DWORD    transfer address (ignored)
  1038.  12h    WORD    number of sectors to read (ignored)
  1039.  14h    DWORD    starting sector number (see also above)
  1040. ---command code 84h---
  1041.  0Dh    BYTE    addressing mode (see above)
  1042.  0Eh    DWORD    starting sector number (see also above)
  1043.  12h    DWORD    number of sectors to play
  1044. ---command codes 85h,88h---
  1045.  no further fields
  1046. ---command codes 86h,87h---
  1047.  0Dh    BYTE    addressing mode (see above)
  1048.  0Eh    DWORD    transfer address (ignored in write mode 0)
  1049.  12h    WORD    number of sectors to write
  1050.  14h    DWORD    starting sector number (see also above)
  1051.  18h    BYTE    write mode
  1052.         00h mode 0 (write all zeros)
  1053.         01h mode 1 (default) (2048 bytes per sector)
  1054.         02h mode 2 form 1 (2048 bytes per sector)
  1055.         03h mode 2 form 2 (2336 bytes per sector)
  1056.  19h    BYTE    interleave size (number of sectors stored consecutively)
  1057.  1Ah    BYTE    interleave skip factor
  1058.         (number of sectors between consecutive portions)
  1059.  
  1060. (Table 1237)
  1061. Values for device driver error code:
  1062.  00h    write-protect violation
  1063.  01h    unknown unit
  1064.  02h    drive not ready
  1065.  03h    unknown command
  1066.  04h    CRC error
  1067.  05h    bad drive request structure length
  1068.  06h    seek error
  1069.  07h    unknown media
  1070.  08h    sector not found
  1071.  09h    printer out of paper
  1072.  0Ah    write fault
  1073.  0Bh    read fault
  1074.  0Ch    general failure
  1075.  0Dh    reserved
  1076.  0Eh    (CD-ROM) media unavailable
  1077.  0Fh    invalid disk change
  1078.  
  1079. (Table 1238)
  1080. Call European MS-DOS 4.0 device helper function with:
  1081.     DL = function
  1082.         00h "SchedClock" called on each timer tick
  1083.         AL = tick interval in milliseconds
  1084.         01h "DevDone" device I/O complete
  1085.         ES:BX -> request header
  1086.         Note:    must update status word first; may be called from
  1087.               an interrupt handler
  1088.         02h "PullRequest" pull next request from queue
  1089.         DS:SI -> DWORD pointer to start of device's request queue
  1090.         Return: ZF clear if pending request
  1091.                 ES:BX -> request header
  1092.             ZF set if no more requests
  1093.         03h "PullParticular" remove specific request from queue
  1094.         DS:SI -> DWORD pointer to start of device's request queue
  1095.         ES:BX -> request header
  1096.         Return: ZF set if request header not found
  1097.         04h "PushRequest" push the request onto the queue
  1098.         DS:SI -> DWORD pointer to start of device's request queue
  1099.         ES:BX -> request header
  1100.         interrupts disabled
  1101.         05h "ConsInputFilter" keyboard input check
  1102.         AX = character (high byte 00h if PC ASCII character)
  1103.         Return: ZF set if character should be discarded
  1104.             ZF clear if character should be handled normally
  1105.         Note:    called by keyboard interrupt handler so DOS can scan
  1106.               for special input characters
  1107.         06h "SortRequest" push request in sorted order by starting sector
  1108.         DS:SI -> DWORD pointer to start of device's request queue
  1109.         ES:BX -> request header
  1110.         interrupts disabled
  1111.         07h "SigEvent" send signal on keyboard event
  1112.         AH = event identifier
  1113.         Return: AL,FLAGS destroyed
  1114.         09h "ProcBlock" block on event
  1115.         AX:BX = event identifier (typically a pointer)
  1116.         CX = timeout in ms or 0000h for never
  1117.         DH = interruptable flag (nonzero if pause may be interrupted)
  1118.         interrupts disabled
  1119.         Return: after corresponding ProcRun call
  1120.             CF clear if event wakeup, set if unusual wakeup
  1121.             ZF set if timeout wakeup, clear if interrupted
  1122.             AL = wakeup code, nonzero if unusual wakeup
  1123.             interrupts enabled
  1124.             BX,CX,DX destroyed
  1125.         Note:    block process and schedules another to run
  1126.         0Ah "ProcRun" unblock process
  1127.         AX:BX = event identifier (typically a pointer)
  1128.         Return: AX = number of processes awakened
  1129.             ZF set if no processes awakened
  1130.             BX,CX,DX destroyed
  1131.         0Bh "QueueInit" initialize/clear character queue
  1132.         DS:BX -> character queue structure (see #1239)
  1133.         Note:    the queue size field must be set before calling
  1134.         0Dh "QueueWrite" put a character in the queue
  1135.         DS:BX -> character queue (see #1239)
  1136.         AL = character to append to end of queue
  1137.         Return: ZF set if queue is full
  1138.             ZF clear if character stored
  1139.         0Eh "QueueRead" get a character from the queue
  1140.         DS:BX -> character queue (see #1239)
  1141.         Return: ZF set if queue is empty
  1142.             ZF clear if characters in queue
  1143.                 AL = first character in queue
  1144.         10h "GetDOSVar" return pointer to DOS variable
  1145.         AL = index of variable
  1146.             03h current process ID
  1147.         BX = index into variable if AL specifies an array
  1148.         CX = expected length of variable
  1149.         Return: CF clear if successful
  1150.                 DX:AX -> variable
  1151.             CF set on error
  1152.                 AX,DX destroyed
  1153.             BX,CX destroyed
  1154.         Note:    the variables may not be modified
  1155.         14h "Yield" yield CPU if higher-priority task ready to run
  1156.         Return: FLAGS destroyed
  1157.         1Bh "CritEnter" begin system critical section
  1158.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  1159.         Return: AX,BX,CX,DX destroyed
  1160.         1Ch "CritLeave" end system critical section
  1161.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  1162.         Return: AX,BX,CX,DX destroyed
  1163.         Note:    must be called in the context of the process which
  1164.               called CritEnter on the semaphore
  1165. Note:    the DWORD pointing at the request queue must be allocated by the driver
  1166.       and initialized to 0000h:0000h.  It always points at the next request
  1167.       to be executed
  1168.  
  1169. Format of European MS-DOS 4.0 character queue:
  1170. Offset    Size    Description    (Table 1239)
  1171.  00h    WORD    size of queue in bytes
  1172.  02h    WORD    index of next character out
  1173.  04h    WORD    count of characters in the queue
  1174.  06h  N BYTEs    queue buffer
  1175. --------D-2F0803-----------------------------
  1176. INT 2F U - DOS 4+ DRIVER.SYS support - GET DRIVE DATA TABLE LIST
  1177.     AX = 0803h
  1178. Return: DS:DI -> first drive data table in list
  1179. Note:    not available under DR-DOS 5.0
  1180. SeeAlso: AX=0801h
  1181.  
  1182. Format of DOS 3.30 drive data table:
  1183. Offset    Size    Description    (Table 1240)
  1184.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  1185.  04h    BYTE    physical unit number (for INT 13)
  1186.  05h    BYTE    logical drive number (0=A:)
  1187.  06h 19 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  1188.         Offset    Size    Description
  1189.          00h    WORD    bytes per sector
  1190.          02h    BYTE    sectors per cluster, FFh if unknown
  1191.          03h    WORD    number of reserved sectors
  1192.          05h    BYTE    number of FATs
  1193.          06h    WORD    number of root dir entries
  1194.          08h    WORD    total sectors
  1195.          0Ah    BYTE    media descriptor, 00h if unknown
  1196.          0Bh    WORD    sectors per FAT
  1197.          0Dh    WORD    sectors per track
  1198.          0Fh    WORD    number of heads
  1199.          11h    WORD    number of hidden sectors
  1200.  19h    BYTE    flags
  1201.         bit 6: 16-bit FAT instead of 12-bit FAT
  1202.  1Ah    WORD    number of DEVICE OPEN calls without corresponding DEVICE CLOSE
  1203.  1Ch 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  1204.           fixed media)
  1205.  27h    BYTE    terminating null for volume label???
  1206.  28h    BYTE    device type (see INT 21/AX=440Dh)
  1207.  29h    WORD    bit flags describing drive (see #1243)
  1208.  2Bh    WORD    number of cylinders
  1209.  2Dh 19 BYTEs    BIOS Parameter Block for highest capacity supported
  1210.  40h  3 BYTEs    ???
  1211.  43h  9 BYTEs    filesystem type???, default = "NO NAME    "
  1212.         (apparently only MS-DOS 3.30 fixed media, nulls for removable
  1213.           media and PC-DOS 3.30)
  1214.  4Ch    BYTE    least-significant byte of last-accessed cylinder number
  1215. ---removable media---
  1216.  4Dh    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  1217. ---fixed media---
  1218.  4Dh    WORD    partition (FFFFh = primary, 0001h = extended)
  1219.  4Fh    WORD    absolute cylinder number of partition's start on physical
  1220.           drive (always FFFFh if primary partition)
  1221.  
  1222. Format of COMPAQ DOS 3.31 drive data table:
  1223. Offset    Size    Description    (Table 1241)
  1224.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  1225.  04h    BYTE    physical unit number (for INT 13)
  1226.  05h    BYTE    logical drive number (0=A:)
  1227.  06h 25 BYTEs    BIOS Parameter Block (see DOS 4.0-6.0 drive data table below)
  1228.  1Fh  6 BYTEs    reserved fields from BPB above???
  1229.  25h    BYTE    flags
  1230.         bit 6: 16-bit FAT instead of 12-bit FAT
  1231.         bit 5: large volume???
  1232.  26h    WORD    device-open count???
  1233.  28h 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  1234.           fixed media)
  1235.  33h    BYTE    terminating null for volume label
  1236.  34h    BYTE    device type (see INT 21/AX=440Dh)
  1237.  35h    WORD    bit flags describing drive (see #1243)
  1238.  37h    WORD    number of cylinders
  1239.  39h 25 BYTEs    BIOS parameter block for highest capacity drive supports
  1240.  52h  6 BYTEs    ??? apparently always zeros
  1241.  58h    BYTE    least-significant byte of last-accessed cylinder number
  1242. ---removable media---
  1243.  59h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  1244. ---fixed media---
  1245.  59h    WORD    partition (FFFFh = primary, 0001h = extended)
  1246.  5Bh    WORD    absolute cylinder number of partition's start on physical
  1247.           drive (always FFFFh if primary partition)
  1248.  
  1249. Format of DOS 4.0-6.0 drive data table:
  1250. Offset    Size    Description    (Table 1242)
  1251.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  1252.  04h    BYTE    physical unit number (for INT 13)
  1253.  05h    BYTE    logical drive number (0=A:)
  1254.  06h 25 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  1255.         Offset    Size    Description
  1256.          00h    WORD    bytes per sector
  1257.          02h    BYTE    sectors per cluster, FFh if unknown
  1258.          03h    WORD    number of reserved sectors
  1259.          05h    BYTE    number of FATs
  1260.          06h    WORD    number of root dir entries
  1261.          08h    WORD    total sectors (see offset 15h if zero)
  1262.          0Ah    BYTE    media descriptor, 00h if unknown
  1263.          0Bh    WORD    sectors per FAT
  1264.          0Dh    WORD    sectors per track
  1265.          0Fh    WORD    number of heads
  1266.          11h    DWORD    number of hidden sectors
  1267.          15h    DWORD    total sectors if WORD at 08h is zero
  1268.  1Fh    BYTE    flags
  1269.         bit 6: 16-bit FAT instead of 12-bit
  1270.         bit 7: unsupportable disk (all accesses will return Not Ready)
  1271.  20h    WORD    device-open count
  1272.  22h    BYTE    device type (see INT 21/AX=440Dh)
  1273.  23h    WORD    bit flags describing drive (see #1243)
  1274.  25h    WORD    number of cylinders (for partition only, if hard disk)
  1275.  27h 25 BYTEs    BIOS Parameter Block for default (highest) capacity supported
  1276.  40h  6 BYTEs    reserved (part of BPB above)
  1277.  46h    BYTE    last track accessed
  1278. ---removable media---
  1279.  47h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  1280. ---fixed media---
  1281.  47h    WORD    partition (FFFFh = primary, 0001h = extended)
  1282.         always 0001h for DOS 5+
  1283.  49h    WORD    absolute cylinder number of partition's start on physical drive
  1284.         (FFFFh if primary partition in DOS 4.x)
  1285. ------
  1286.  4Bh 11 BYTEs    volume label or "NO NAME    " if none (apparently taken from
  1287.           extended boot record rather than root directory)
  1288.  56h    BYTE    terminating null for volume label
  1289.  57h    DWORD    serial number
  1290.  5Bh  8 BYTEs    filesystem type ("FAT12      " or "FAT16    ")
  1291.  63h    BYTE    terminating null for filesystem type
  1292.  
  1293. Bitfields for flags describing drive:
  1294. Bit(s)    Description    (Table 1243)
  1295.  0    fixed media
  1296.  1    door lock ("changeline") supported
  1297.  2    current BPB locked
  1298.  3    all sectors in a track are the same size
  1299.  4    physical drive has multiple logical units
  1300.  5    current logical drive for shared physical drive
  1301.  6    disk change detected
  1302.  7    set DASD before formatting
  1303.  8    disk reformatted
  1304.  9    unformatted (fixed media only, disables reads and writes)
  1305. --------f-2F1000-----------------------------
  1306. INT 2F - SHARE - INSTALLATION CHECK
  1307.     AX = 1000h
  1308. Return: AL = status
  1309.         00h not installed, OK to install
  1310.         01h not installed, not OK to install
  1311.         FFh installed
  1312. BUGS:    values of AL other than 00h put DOS 3.x SHARE into an infinite loop
  1313.       (08E9: OR  AL,AL
  1314.        08EB: JNZ 08EB) <- the buggy instruction (DOS 3.3)
  1315.     values of AL other than described here put PC-DOS 4.00 into the same
  1316.       loop (the buggy instructions are the same)
  1317. Notes:    supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  1318.     if DOS 4.01 SHARE was automatically loaded, file sharing is in an
  1319.       inactive state (due to the undocumented /NC flag used by the autoload
  1320.       code) until this call is made
  1321.     DOS 5+ chains to the previous handler if AL <> 00h on entry
  1322.     Windows Enhanced mode hooks this call and reports that SHARE is
  1323.       installed even when it is not
  1324. SeeAlso: AX=1080h,INT 21/AH=52h
  1325. --------d-2F1001-----------------------------
  1326. INT 2F U - DR-DOS 6.0 SHARE internal - SET ???
  1327.     AX = 1001h
  1328.     DX:BX -> ???function
  1329. Notes:    this function is also supported by SuperStor, a disk-compression
  1330.       program by Addstor which is bundled with DR-DOS 6.0, and the
  1331.       Novell DOS 7 DELWATCH.EXE
  1332.     the default handler for the pointer set by this call under DELWATCH
  1333.       simply returns with CF set
  1334. SeeAlso: AX=1000h,X=F800h
  1335. --------f-2F1040-----------------------------
  1336. INT 2F U - DOS 4 only SHARE internal - ???
  1337.     AX = 1040h
  1338.     ???
  1339. Return: AL = FFh???
  1340. SeeAlso: AX=1000h
  1341. --------f-2F1080-----------------------------
  1342. INT 2F U - DOS 4 only SHARE internal - TURN ON FILE SHARING CHECKS
  1343.     AX = 1080h
  1344. Return: AL = status
  1345.         F0h successful
  1346.         FFh checking was already on
  1347. Note:    DOS 4.x SHARE has dual functions: FCB support for large (>32M) media
  1348.       and file sharing checks.  The undocumented commandline flag /NC can
  1349.       be used to disable the sharing code.
  1350. SeeAlso: AX=1000h,AX=1081h
  1351. --------f-2F1081-----------------------------
  1352. INT 2F U - DOS 4 only SHARE internal - TURN OFF FILE SHARING CHECKS
  1353.     AX = 1081h
  1354. Return: AL = status
  1355.         F0h successful
  1356.         FFh checking was already off
  1357. Note:    (see AX=1080h)
  1358. SeeAlso: AX=1000h,AX=1080h
  1359. ----------2F10FE-----------------------------
  1360. INT 2F U - Novell DOS 7 DELWATCH.EXE - INSTALLATION CHECK
  1361.     AX = 10FEh
  1362. Return: AX = 20FFh if installed and active
  1363.         DX:BX -> private entry point
  1364.  
  1365. (Table 1244)
  1366. Call DELWATCH private entry point with:
  1367.     AH = function
  1368.         00h NOP???
  1369.         Return: AX = 0000h
  1370.             CX = 0004h (unsupported function)
  1371.         01h disable DELWATCH on drive
  1372.         AL = drive number (00h = A:)
  1373.         Return: AX = status (0000h if failed, FFFFh if successful)
  1374.         02h ???
  1375.         AL = drive number (00h = A:)
  1376.         ???
  1377.         Return: ???
  1378.         03h    ???
  1379.         AL = drive number (00h = A:)
  1380.         CX = ??? (0000h/0001h)
  1381.         ???
  1382.         Return: ???
  1383.         04h ???
  1384.         AL = drive number (00h = A:)
  1385.         ???
  1386.         Return: ???
  1387.         05h ???
  1388.         AL = drive number (00h = A:)
  1389.         ???
  1390.         Return: ???
  1391.         06h enable DELWATCH on drive
  1392.         AL = drive number with bit 7 set (80h = A:, etc.)
  1393.         BX = maximum files of same name in one directory to save
  1394.         CX = maximum files to save on this disk
  1395.         ???
  1396.         Return: AX = status
  1397.                 0000h failed
  1398.                 FFFFh successful
  1399.             CX = error code on failure
  1400.                 (0004h if AL < 80h on entry)
  1401.         07h ???
  1402.         08h set file extensions list
  1403.         AL = sense (00h exclude named extensions, 01h only named ext.)
  1404.         DS:BX -> 31-byte ASCIZ extension list (three blank-padded bytes
  1405.               per extension)
  1406.         Return: AX = FFFFh (successful)
  1407.         09h    ???
  1408.         AL = drive number (00h = A:)
  1409.         ???
  1410.         Return: ???
  1411.         0Ah ???
  1412.         AL = drive number (00h = A:)
  1413.         ???
  1414.         Return: ???
  1415.         0Bh reset ???
  1416.         Return: AX = FFFFh (successful)
  1417.         see also function 0Dh
  1418.         0Ch check if drive enabled
  1419.         AL = drive number with bit 7 set (80h = A:, etc.)
  1420.         Return: AX = state
  1421.                 0000h disabled or error (check CX)
  1422.                 0001h drive enabled
  1423.             CX = error code (0004h invalid drive number)
  1424.         0Dh set ???
  1425.         BX = ???
  1426.         Return: AX = FFFFh (successful)
  1427.         see also function 0Bh
  1428.         0Eh ???
  1429.         AL = drive number (00h = A:)
  1430.         ???
  1431.         Return: ???
  1432. Return: AX = 0000h, CX = 0001h if DELWATCH busy
  1433.     registers unchanged if AH >= 0Fh on entry
  1434. --------O-2F10FF-----------------------------
  1435. INT 2F U - Multiplex - DR-DOS 5.0 - ???
  1436.     AX = 10FFh
  1437.     ES:BX -> ???
  1438. Note:    sets pointer in kernel
  1439. --------N-2F1100-----------------------------
  1440. INT 2F C - NETWORK REDIRECTOR - INSTALLATION CHECK
  1441.     AX = 1100h
  1442. Return: AL = status
  1443.         00h not installed, OK to install
  1444.         01h not installed, not OK to install
  1445.         FFh installed
  1446.         AH = product identifier (ad hoc by various manufacturers)
  1447.             00h if PC Tools v8 DRIVEMAP
  1448.             42h ('B') for Beame&Whiteside BWNFS v3.0a
  1449.             6Eh ('n') for NetWare Lite v1.1 CLIENT
  1450. Notes:    this function is called by the DOS 3.1+ kernel
  1451.     in DOS 4.x only, the 11xx calls are all in IFSFUNC.EXE, not in the
  1452.       PC LAN Program redirector; DOS 5+ moves the calls back into the
  1453.       redirector
  1454.     the PC Network 1.00 redirector (renamed to PC LAN Program in 1.1-1.3)
  1455.       only supports AL=00h-27h
  1456. --------d-2F1100SFDADA-----------------------
  1457. INT 2F - MSCDEX (MS CD-ROM Extensions) - INSTALLATION CHECK
  1458.     AX = 1100h subfn DADAh
  1459.     STACK: WORD DADAh
  1460. Return: AL = status
  1461.         00h not installed, OK to install
  1462.         STACK unchanged
  1463.         01h not installed, not OK to install
  1464.         STACK unchanged
  1465.         FFh installed
  1466.         STACK: WORD    ADADh if MSCDEX installed
  1467.                 DADBh if Lotus CD/Networker installed
  1468. Note:    although MSCDEX sets the stack word to ADADh on return, any value other
  1469.       than DADAh is considered to mean that MSCDEX is already installed;
  1470.       Lotus CD/Networker v4+ uses this feature to fool MSCDEX into
  1471.       thinking it is already installed when it is in fact CD/Networker
  1472.       that is installed
  1473. Index:    installation check;Lotus CD/Networker
  1474. Index:    Lotus CD/Networker;installation check
  1475. --------N-2F1101-----------------------------
  1476. INT 2F CU - NETWORK REDIRECTOR - REMOVE REMOTE DIRECTORY
  1477.     AX = 1101h
  1478.     SS = DOS DS
  1479.     SDA first filename pointer -> fully-qualified directory name
  1480.     SDA CDS pointer -> current directory structure for drive with dir
  1481. Return: CF set on error
  1482.         AX = DOS error code (see #0770 at INT 21/AH=59h)
  1483.     CF clear if successful
  1484. Note:    this function is called by the DOS 3.1+ kernel
  1485. SeeAlso: AX=1103h,AX=1105h,INT 21/AH=3Ah,INT 21/AH=60h
  1486. --------N-2F1102-----------------------------
  1487. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - REMOVE REMOTE DIRECTORY
  1488.     AX = 1102h
  1489.     SS = DOS DS
  1490.     SDA first filename pointer -> fully-qualified directory name
  1491.     SDA CDS pointer -> current directory structure for drive with dir
  1492. Return: CF set on error
  1493.         AX = DOS error code (see #0770 at INT 21/AH=59h)
  1494.     CF clear if successful
  1495. Note:    appears to be identical to AX=1101h; MS internal documentation calls
  1496.       this function "SEQ_RMDIR"
  1497. SeeAlso: AX=1101h
  1498. --------N-2F1103-----------------------------
  1499. INT 2F CU - NETWORK REDIRECTOR - MAKE REMOTE DIRECTORY
  1500.     AX = 1103h
  1501.     SS = DOS DS
  1502.     SDA first filename pointer -> fully-qualified directory name
  1503.     SDA CDS pointer -> current directory structure for drive with dir
  1504. Return: CF set on error
  1505.         AX = DOS error code (see #0770 at INT 21/AH=59h)
  1506.     CF clear if successful
  1507. Note:    this function is called by the DOS 3.1+ kernel
  1508. SeeAlso: AX=1101h,AX=1105h,INT 21/AH=39h,INT 21/AH=60h
  1509. --------N-2F1104-----------------------------
  1510. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - MAKE REMOTE DIRECTORY
  1511.     AX = 1104h
  1512.     SS = DOS DS
  1513.     SDA first filename pointer -> fully-qualified directory name
  1514.     SDA CDS pointer -> current directory structure for drive with dir
  1515. Return: CF set on error
  1516.         AX = DOS error code (see #0770 at INT 21/AH=59h)
  1517.     CF clear if successful
  1518. Note:    appears to be identical to AX=1103h
  1519. SeeAlso: AX=1103h
  1520. --------N-2F1105-----------------------------
  1521. INT 2F CU - NETWORK REDIRECTOR - CHDIR
  1522.     AX = 1105h
  1523.     SS = DOS DS
  1524.     SDA first filename pointer -> fully-qualified directory name
  1525.     SDA CDS pointer -> current directory structure for drive with dir
  1526. Return: CF set on error
  1527.         AX = DOS error code (see #0770 at INT 21/AH=59h)
  1528.     CF clear if successful
  1529.         CDS updated with new path
  1530. Notes:    this function is called by the DOS 3.1+ kernel
  1531.     directory string in CDS should not have a terminating backslash unless
  1532.       the current directory is the root
  1533. SeeAlso: AX=1101h,AX=1103h,INT 21/AH=3Bh,INT 21/AH=60h
  1534. --------N-2F1106-----------------------------
  1535. INT 2F CU - NETWORK REDIRECTOR - CLOSE REMOTE FILE
  1536.     AX = 1106h
  1537.     BX = device info word from SFT
  1538.     ES:DI -> SFT
  1539.         SFT DPB field -> DPB of drive containing file
  1540. Return: CF set on error
  1541.         AX = DOS error code (see #0770 at INT 21/AH=59h)
  1542.     CF clear if successful
  1543.         SFT updated (redirector must decrement open count, which may be
  1544.           done with INT 2F/AX=1208h)
  1545. Note:    this function is called by the DOS 3.1+ kernel
  1546. SeeAlso: AX=1116h,AX=1201h,AX=1208h,AX=1227h,INT 21/AH=3Eh
  1547. --------N-2F1107-----------------------------
  1548. INT 2F CU - NETWORK REDIRECTOR - COMMIT REMOTE FILE
  1549.     AX = 1107h
  1550.     ES:DI -> SFT
  1551.         SFT DPB field -> DPB of drive containing file
  1552. Return: CF set on error
  1553.         AX = DOS error code (see #0770 at INT 21/AH=59h)
  1554.     CF clear if successful
  1555.         all buffers for file flushed
  1556.         directory entry updated
  1557. Note:    this function is called by the DOS 3.1+ kernel
  1558. SeeAlso: INT 21/AH=68h,INT 21/AX=5D01h
  1559. --------N-2F1108-----------------------------
  1560. INT 2F CU - NETWORK REDIRECTOR - READ FROM REMOTE FILE
  1561.     AX = 1108h
  1562.     ES:DI -> SFT
  1563.         SFT DPB field -> DPB of drive containing file
  1564.     CX = number of bytes
  1565.     SS = DOS DS
  1566.     SDA DTA field -> user buffer
  1567. Return: CF set on error
  1568.         AX = DOS error code (see #0770 at INT 21/AH=59h)
  1569.     CF clear if successful
  1570.         CX = number of bytes read (0000h = end of file)
  1571.         SFT updated
  1572. Note:    this function is called by the DOS 3.1+ kernel
  1573. SeeAlso: AX=1109h,AX=1229h,INT 21/AH=3Fh,INT 21/AX=5D06h
  1574. --------N-2F1109-----------------------------
  1575. INT 2F CU - NETWORK REDIRECTOR - WRITE TO REMOTE FILE
  1576.     AX = 1109h
  1577.     ES:DI -> SFT
  1578.         SFT DPB field -> DPB of drive containing file
  1579.     CX = number of bytes
  1580.     SS = DOS DS
  1581.     SDA DTA field -> user buffer
  1582. Return: CF set on error
  1583.         AX = DOS error code (see #0770 at INT 21/AH=59h)
  1584.     CF clear if successful
  1585.         CX = number of bytes written
  1586.         SFT updated
  1587. Notes:    this function is called by the DOS 3.1+ kernel
  1588.     PrintCache v3.1 PCACHE.EXE intercepts this function for SFTs where
  1589.       the Device Driver Header field points at PCACHE, but does not
  1590.       intercept any other network redirector functions
  1591. SeeAlso: AX=1107h,AX=1108h,INT 21/AH=40h,INT 21/AX=5D06h
  1592. --------N-2F110A-----------------------------
  1593. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - LOCK REGION OF FILE
  1594.     AX = 110Ah
  1595.     BX = file handle
  1596.     CX:DX = starting offset
  1597.     SI = high word of size
  1598.     STACK: WORD low word of size
  1599.     ES:DI -> SFT
  1600.         SFT DPB field -> DPB of drive containing file
  1601.     SS = DOS DS
  1602. Return: CF set on error
  1603.        AL = DOS error code (see #0770 at INT 21/AH=59h)
  1604.     STACK unchanged
  1605. Notes:    this function is called by the DOS 3.10-3.31 kernel
  1606.     the redirector is expected to resolve lock conflicts
  1607. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  1608. --------N-2F110A-----------------------------
  1609. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - LOCK/UNLOCK REGION OF FILE
  1610.     AX = 110Ah
  1611.     BL = function
  1612.         00h lock
  1613.         01h unlock
  1614.     CX = number of lock/unlock parameters (0001h for DOS 4.0-6.1)
  1615.     DS:DX -> parameter block (see #1245)
  1616.     ES:DI -> SFT
  1617.         SFT DPB field -> DPB of drive containing file
  1618.     SS = DOS DS
  1619. Return: CF set on error
  1620.        AL = DOS error code (see #0770 at INT 21/AH=59h)
  1621. Notes:    this function is called by the DOS 4.0+ kernel
  1622.     the redirector is expected to resolve lock conflicts
  1623. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  1624.  
  1625. Format of parameter block entry [array, but currently limited to single entry]:
  1626. Offset    Size    Description    (Table 1245)
  1627.  00h    DWORD    start offset
  1628.  04h    DWORD    size of region
  1629. --------N-2F110B-----------------------------
  1630. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - UNLOCK REGION OF FILE
  1631.     AX = 110Bh
  1632.     BX = file handle
  1633.     CX:DX = starting offset
  1634.     SI = high word of size
  1635.     STACK: WORD low word of size
  1636.     ES:DI -> SFT for file
  1637.         SFT DPB field -> DPB of drive containing file
  1638. Return: CF set on error
  1639.        AL = DOS error code (see #0770 at INT 21/AH=59h)
  1640.     STACK unchanged
  1641. Note:    this function is called by the DOS 3.1-3.31 kernel; DOS 4.0+ calls AX=110Ah instead
  1642. SeeAlso: AX=110Ah,INT 21/AH=5Ch
  1643. --------N-2F110C-----------------------------
  1644. INT 2F CU - NETWORK REDIRECTOR - GET DISK INFORMATION
  1645.     AX = 110Ch
  1646.     ES:DI -> current directory structure for desired drive
  1647. Return: CF clear if data valid
  1648.         AL = sectors per cluster
  1649.         AH = media ID byte
  1650.         BX = total clusters
  1651.         CX = bytes per sector
  1652.         DX = number of available clusters
  1653.     CF set if data invalid
  1654. Note:    this function is called by the DOS 3.1+ kernel
  1655. SeeAlso: INT 21/AH=36h
  1656. --------N-2F110D-----------------------------
  1657. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - SET REMOTE FILE'S ATTRIBUTES
  1658.     AX = 110Dh
  1659.     SDA first filename pointer -> name of file
  1660.     ???
  1661. Return: ???
  1662. Note:    similar to AX=110Eh
  1663. SeeAlso: AX=110Eh
  1664. --------N-2F110E-----------------------------
  1665. INT 2F CU - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES
  1666.     AX = 110Eh
  1667.     SS = DOS DS
  1668.     SDA first filename pointer -> fully-qualified name of file
  1669.     SDA CDS pointer -> current directory structure for drive with file
  1670.     STACK: WORD new file attributes
  1671. Return: CF set on error
  1672.         AX = DOS error code (see #0770 at INT 21/AH=59h)
  1673.     CF clear if successful
  1674.     STACK unchanged
  1675. Note:    this function is called by the DOS 3.1+ kernel
  1676. SeeAlso: AX=110Dh,AX=110Fh,INT 21/AX=4301h,INT 21/AH=60h
  1677. --------N-2F110F-----------------------------
  1678. INT 2F CU - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  1679.     AX = 110Fh
  1680.     SS = DOS DS
  1681.     SDA first filename pointer -> fully-qualified name of file
  1682.     SDA CDS pointer -> current directory structure for drive with file
  1683. Return: CF set on error
  1684.         AX = DOS error code (see #0770 at INT 21/AH=59h)
  1685.     CF clear if successful
  1686.         AX = file attributes
  1687.         BX:DI = file size
  1688. Note:    this function is called by the DOS 3.1+ kernel
  1689. SeeAlso: AX=110Eh,INT 21/AX=4300h,INT 21/AH=60h
  1690. --------N-2F1110-----------------------------
  1691. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  1692.     AX = 1110h
  1693.     SDA first filename pointer -> name of file
  1694.     ???
  1695. Return: ???
  1696. Note:    appears to be similar to AX=110Fh
  1697. SeeAlso: AX=110Eh
  1698. --------N-2F1111-----------------------------
  1699. INT 2F CU - NETWORK REDIRECTOR - RENAME REMOTE FILE
  1700.     AX = 1111h
  1701.     SS = DS = DOS DS
  1702.     SDA first filename pointer = offset of fully-qualified old name
  1703.     SDA second filename pointer = offset of fully-qualified new name
  1704.     SDA CDS pointer -> current directory structure for drive with file
  1705. Return: CF set on error
  1706.         AX = DOS error code (see #0770 at INT 21/AH=59h)
  1707.     CF clear if successful
  1708. Note:    this function is called by the DOS 3.1+ kernel
  1709. SeeAlso: AX=1112h,INT 21/AH=56h,INT 21/AH=60h
  1710. --------N-2F1112-----------------------------
  1711. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - RENAME REMOTE FILE
  1712.     AX = 1112h
  1713.     SS = DS = DOS DS
  1714.     SDA first filename pointer -> name of file
  1715.     ???
  1716. Return: ???
  1717. Note:    similar to AX=1111h
  1718. SeeAlso: AX=1111h
  1719. --------N-2F1113-----------------------------
  1720. INT 2F CU - NETWORK REDIRECTOR - DELETE REMOTE FILE
  1721.     AX = 1113h
  1722.     SS = DS = DOS DS
  1723.     SDA first filename pointer -> fully-qualified filename in DOS DS
  1724.     SDA CDS pointer -> current directory structure for drive with file
  1725. Return: CF set on error
  1726.         AX = DOS error code (see #0770 at INT 21/AH=59h)
  1727.     CF clear if successful
  1728. Notes:    this function is called by the DOS 3.1+ kernel
  1729.     the filespec may contain wildcards
  1730. SeeAlso: AX=1114h,INT 21/AH=41h,INT 21/AH=60h
  1731. --------N-2F1114-----------------------------
  1732. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - DELETE REMOTE FILE
  1733.     AX = 1114h
  1734.     SDA first filename pointer -> name of file
  1735.     ???
  1736. Return: ???
  1737. Note:    similar to AX=1113h
  1738. SeeAlso: AX=1113h
  1739. --------N-2F1115-----------------------------
  1740. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - OPEN REMOTE FILE
  1741.     AX = 1115h
  1742.     SS = DOS DS
  1743.     ES:DI -> SFT ???
  1744.     ???
  1745. Return: ???
  1746. Note:    similar to AX=1116h
  1747. SeeAlso: AX=1116h,AX=112Eh
  1748. --------N-2F1116-----------------------------
  1749. INT 2F CU - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE
  1750.     AX = 1116h
  1751.     ES:DI -> uninitialized SFT
  1752.     SS = DOS DS
  1753.     SDA first filename pointer -> fully-qualified name of file to open
  1754.     STACK: WORD file access and sharing modes (see INT 21/AH=3Dh)
  1755. Return: CF set on error
  1756.         AX = DOS error code (see #0770 at INT 21/AH=59h)
  1757.     CF clear if successful
  1758.         SFT filled (except handle count, which DOS manages itself)
  1759.     STACK unchanged
  1760. Note:    this function is called by the DOS 3.1+ kernel
  1761. SeeAlso: AX=1106h,AX=1115h,AX=1117h,AX=1118h,AX=112Eh,INT 21/AH=3Dh
  1762. SeeAlso: INT 21/AH=60h
  1763. --------N-2F1117-----------------------------
  1764. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE REMOTE FILE
  1765.     AX = 1117h
  1766.     ES:DI -> uninitialized SFT
  1767.     SS = DOS DS
  1768.     SDA first filename pointer -> fully-qualified name of file to open
  1769.     SDA CDS pointer -> current directory structure for drive with file
  1770.     STACK: WORD file creation mode
  1771.             low byte = file attributes (see INT 21/AH=3Ch)
  1772.             high byte = 00h normal create, 01h create new file
  1773. Return: CF set on error
  1774.         AX = DOS error code (see #0770 at INT 21/AH=59h)
  1775.     CF clear if successful
  1776.         SFT filled (except handle count, which DOS manages itself)
  1777.     STACK unchanged
  1778. Note:    this function is called by the DOS 3.1+ kernel
  1779. SeeAlso: AX=1106h,AX=1116h,AX=1118h,AX=112Eh,INT 21/AH=3Ch,INT 21/AH=60h
  1780. --------N-2F1118-----------------------------
  1781. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE FILE WITHOUT CDS
  1782.     AX = 1118h
  1783.     ES:DI -> uninitialized SFT
  1784.     SS = DOS DS
  1785.     SDA first filename pointer -> fully-qualified name of file
  1786.     STACK: WORD file creation mode
  1787.             low byte = file attributes
  1788.             high byte = 00h normal create, 01h create new file
  1789. Return: ???
  1790.     STACK unchanged
  1791. Note:    this function is called by the DOS 3.1+ kernel when creating a file
  1792.       on a drive for which the SDA CDS pointer has offset FFFFh
  1793. SeeAlso: AX=1106h,AX=1116h,AX=1117h,AX=112Eh,INT 21/AH=60h
  1794. --------N-2F1119-----------------------------
  1795. INT 2F CU - NETWORK REDIRECTOR - FIND FIRST FILE WITHOUT CDS
  1796.     AX = 1119h
  1797.     SS = DS = DOS DS
  1798.     [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
  1799.     SDA first filename pointer -> fully-qualified search template
  1800.     SDA search attribute = attribute mask for search
  1801. Return: CF set on error
  1802.         AX = DOS error code (see #0770 at INT 21/AH=59h)
  1803.     CF clear if successful
  1804.         [DTA] = updated findfirst search data
  1805.             (bit 7 of first byte must be set)
  1806.         [DTA+15h] = standard directory entry for file
  1807. Notes:    this function is called by the DOS 3.1+ kernel
  1808.     DOS 4.x IFSFUNC returns CF set, AX=0003h
  1809. SeeAlso: AX=111Ah,AX=111Bh
  1810. --------N-2F111A-----------------------------
  1811. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - FIND NEXT FILE WITHOUT CDS
  1812.     AX = 111Ah
  1813.     ???
  1814. Return: CF set
  1815.         AX = error code (03h for DOS 4.01 IFSFUNC)
  1816. Note:    use AX=111Ch for DOS 5+
  1817. SeeAlso: AX=1119h,AX=111Ch
  1818. --------N-2F111B-----------------------------
  1819. INT 2F CU - NETWORK REDIRECTOR - FINDFIRST
  1820.     AX = 111Bh
  1821.     SS = DS = DOS DS
  1822.     [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
  1823.     SDA first filename pointer -> fully-qualified search template
  1824.     SDA CDS pointer -> current directory structure for drive with file
  1825.     SDA search attribute = attribute mask for search
  1826. Return: CF set on error
  1827.         AX = DOS error code (see #0770 at INT 21/AH=59h)
  1828.     CF clear if successful
  1829.         [DTA] = updated findfirst search data
  1830.             (bit 7 of first byte must be set)
  1831.         [DTA+15h] = standard directory entry for file
  1832. Note:    this function is called by the DOS 3.1+ kernel
  1833. SeeAlso: AX=1119h,AX=111Ch,INT 21/AH=4Eh,INT 21/AH=60h
  1834. --------N-2F111C-----------------------------
  1835. INT 2F CU - NETWORK REDIRECTOR - FINDNEXT
  1836.     AX = 111Ch
  1837.     SS = DS = DOS DS
  1838.     ES:DI -> CDS
  1839.     [DTA] = 21-byte findfirst search data (see INT 21/AH=4Eh)
  1840. Return: CF set on error
  1841.         AX = DOS error code (see #0770 at INT 21/AH=59h)
  1842.     CF clear if successful
  1843.         [DTA] = updated findfirst search data
  1844.             (bit 7 of first byte must be set)
  1845.         [DTA+15h] = standard directory entry for file
  1846. Note:    this function is called by the DOS 3.1+ kernel
  1847. SeeAlso: AX=1119h,AX=111Bh,INT 21/AH=4Fh
  1848. --------N-2F111D-----------------------------
  1849. INT 2F CU - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS (ABORT)
  1850.     AX = 111Dh
  1851.     SS = DOS DS
  1852.     SDA PSP segment field = PSP of terminating process
  1853. Return: nothing
  1854. Notes:    used when a process is aborted; the process being terminated is
  1855.       indicated by the "sharing PSP" field in the SDA (offset 1Ah/1Ch)
  1856.     this function is called by the DOS 3.1+ kernel
  1857.     closes all FCBs opened by process
  1858. SeeAlso: INT 21/AX=5D04h
  1859. --------N-2F111E-----------------------------
  1860. INT 2F CU - NETWORK REDIRECTOR - DO REDIRECTION
  1861.     AX = 111Eh
  1862.     SS = DOS DS
  1863.     STACK: WORD function to execute
  1864.         5F00h  get redirection mode
  1865.             BL = type (03h printer, 04h disk)
  1866.             Return: BH = state (00h off, 01h on)
  1867.         5F01h  set redirection mode
  1868.             BL = type (03h printer, 04h disk)
  1869.             BH = state (00h off, 01h on)
  1870.         5F02h  get redirection list entry
  1871.             BX = redirection list index
  1872.             DS:SI -> 16-byte local device name buffer
  1873.             ES:DI -> 128-byte network name buffer
  1874.             Return: must set user's BX to device type and CX to
  1875.                 stored parameter value, using AX=1218h to get
  1876.                 stack frame address
  1877.         5F03h  redirect device
  1878.             BL = device type (see INT 21/AX=5F03h)
  1879.             CX = stored parameter value
  1880.             DS:SI -> ASCIZ source device name
  1881.             ES:DI -> destination ASCIZ network path + ASCIZ passwd
  1882.         5F04h  cancel redirection
  1883.             DS:SI -> ASCIZ device name or network path
  1884.         5F05h  get redirection list extended entry
  1885.             BX = redirection list index
  1886.             DS:SI -> buffer for ASCIZ source device name
  1887.             ES:DI -> buffer for destination ASCIZ network path
  1888.             Return: BH = status flag
  1889.                 BL = type (03h printer, 04h disk)
  1890.                 CX = stored parameter value
  1891.                 BP = NETBIOS local session number
  1892.         5F06h  similar to 5F05h???
  1893. Return: CF set on error
  1894.         AX = error code (see #0770 at INT 21/AH=59h)
  1895.     STACK unchanged
  1896. Notes:    this function is called by the DOS 3.1+ kernel on INT 21/AH=5Fh
  1897.       (including LAN Manager calls)
  1898.     the PC Network 1.00 redirector does not support function 5F06h
  1899. SeeAlso: INT 21/AX=5F00h,INT 21/AX=5F01h,INT 21/AX=5F02h,INT 21/AX=5F03h
  1900. SeeAlso: INT 21/AX=5F04h,INT 21/AX=5F05h,INT 21/AX=5F06h
  1901. --------N-2F111F-----------------------------
  1902. INT 2F CU - NETWORK REDIRECTOR - PRINTER SETUP
  1903.     AX = 111Fh
  1904.     STACK: WORD function
  1905.         5E02h  set printer setup
  1906.         5E03h  get printer setup
  1907.         5E04h  set printer mode
  1908.         5E05h  get printer mode
  1909. Return: CF set on error
  1910.         AX = error code (see #0770 at INT 21/AH=59h)
  1911.     STACK unchanged
  1912. Note:    this function is called by the DOS 3.1+ kernel
  1913. SeeAlso: INT 21/AX=5E02h,INT 21/AX=5E03h,INT 21/AX=5E04h,INT 21/AX=5E05h
  1914. --------N-2F1120-----------------------------
  1915. INT 2F CU - NETWORK REDIRECTOR - FLUSH ALL DISK BUFFERS
  1916.     AX = 1120h
  1917.     DS = DOS DS
  1918.     ???
  1919. Return: CF clear (successful)
  1920. Notes:    this function is called by the DOS 3.1+ kernel
  1921.     uses CDS array pointer and LASTDRIVE= entries in DOS list of lists
  1922. SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h
  1923. --------N-2F1121-----------------------------
  1924. INT 2F CU - NETWORK REDIRECTOR - SEEK FROM END OF REMOTE FILE
  1925.     AX = 1121h
  1926.     CX:DX = offset (in bytes) from end
  1927.     ES:DI -> SFT
  1928.         SFT DPB field -> DPB of drive with file
  1929.     SS = DOS DS
  1930. Return: CF set on error
  1931.         AL = DOS error code (see #0770 at INT 21/AH=59h)
  1932.     CF clear if successful
  1933.         DX:AX = new file position
  1934. Note:    this function is called by the DOS 3.1+ kernel, but only when seeking
  1935.       from the end of a file opened with sharing modes set in such a
  1936.       manner that another process is able to change the size of the file
  1937.       while it is already open
  1938. SeeAlso: AX=1228h,INT 21/AH=42h
  1939. --------N-2F1122-----------------------------
  1940. INT 2F CU - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK
  1941.     AX = 1122h
  1942.     SS = DOS DS
  1943.     DS = PSP of process about to terminate
  1944. Return: ???
  1945. Notes:    this function is called by the DOS 3.1+ kernel
  1946.     after calling this function, the kernel calls INT 2F/AX=111Dh
  1947. SeeAlso: AX=111Dh,INT 21/AH=4Ch,INT 60/DI=0601h
  1948. --------N-2F1123-----------------------------
  1949. INT 2F CU - NETWORK REDIRECTOR - QUALIFY REMOTE FILENAME
  1950.     AX = 1123h
  1951.     DS:SI -> ASCIZ filename to canonicalize
  1952.     ES:DI -> 128-byte buffer for qualified name
  1953. Return: CF set if not resolved
  1954. Notes:    called by MS-DOS 3.1+ kernel, but not called by DR-DOS 5.0 unless the
  1955.       filename matches the name of a character device
  1956.     called first when DOS attempts to resolve a filename (unless inside an
  1957.       AX=5D00h server call); if this fails, DOS resolves the name locally
  1958. SeeAlso: AX=1221h,INT 21/AH=60h
  1959. --------N-2F1124-----------------------------
  1960. INT 2F CU - NETWORK REDIRECTOR - TURN OFF REMOTE PRINTER
  1961.     AX = 1124h
  1962.     ES:DI -> SFT
  1963.     SS = DOS DS
  1964.     ???
  1965. Return: CX = ???
  1966. Note:    this function is called by the DOS 3.1+ kernel if AX=1126h returns CF set
  1967. SeeAlso: AX=1126h
  1968. --------N-2F1125-----------------------------
  1969. INT 2F CU - NETWORK REDIRECTOR - REDIRECTED PRINTER MODE
  1970.     AX = 1125h
  1971.     STACK: WORD subfunction
  1972.         5D07h get print stream state
  1973.             Return: DL = current state
  1974.         5D08h set print stream state
  1975.             DL = new state
  1976.         5D09h finish print job
  1977. Return: CF set on error
  1978.         AX = error code (see #0770 at INT 21/AH=59h)
  1979.     STACK unchanged
  1980. Note:    this function is called by the DOS 3.1+ kernel
  1981. SeeAlso: INT 21/AX=5D07h,INT 21/AX=5D08h,INT 21/AX=5D09h
  1982. --------N-2F1126-----------------------------
  1983. INT 2F CU - NETWORK REDIRECTOR - REMOTE PRINTER ECHO ON/OFF
  1984.     AX = 1126h
  1985.     ES:DI -> SFT for file handle 4???
  1986.     SS = DOS DS???
  1987.     ???
  1988. Return: CF set on error
  1989. Notes:    this function is called by the DOS 3.1+ kernel
  1990.     called when print echoing (^P, ^PrtSc) changes state and STDPRN has
  1991.       bit 11 of the device information word in the SFT set
  1992. SeeAlso: AX=1124h
  1993. --------N-2F1127-----------------------------
  1994. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  1995.     AX = 1127h
  1996. Return: CF set
  1997.         AX = 0001h (invalid function) (see #0770 at INT 21/AH=59h)
  1998. --------N-2F1128-----------------------------
  1999. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  2000.     AX = 1128h
  2001. Return: CF set
  2002.         AX = 0001h (invalid function) (see #0770 at INT 21/AH=59h)
  2003. --------N-2F1129-----------------------------
  2004. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  2005.     AX = 1129h
  2006. Return: CF set
  2007.         AX = 0001h (invalid function) (see #0770 at INT 21/AH=59h)
  2008. --------N-2F112A-----------------------------
  2009. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - CLOSE ALL FILES FOR PROCESS
  2010.     AX = 112Ah
  2011.     DS = DOS DS
  2012.     ???
  2013. Return: ???
  2014. Note:    does something to each IFS driver
  2015. --------N-2F112B-----------------------------
  2016. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GENERIC IOCTL
  2017.     AX = 112Bh
  2018.     SS = DOS DS
  2019.     CX = function/category
  2020.     DS:DX -> parameter block
  2021.     STACK: WORD value of AX on entry to INT 21 (440Ch or 440Dh)
  2022.     ???
  2023. Return: CF set on error
  2024.         AX = DOS error code (see #0770 at INT 21/AH=59h)
  2025.     CF clear if successful
  2026. Note:    this function is called by the DOS 4.0 kernel
  2027. --------N-2F112C-----------------------------
  2028. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - "UPDATE_CB" - ???
  2029.     AX = 112Ch
  2030.     SS = DOS DS
  2031.     SDA current SFT pointer -> SFT for file
  2032.     ???
  2033. Return: CF set on error
  2034. Note:    called by SHARE in DOS 5.0-6.0
  2035. --------N-2F112D-----------------------------
  2036. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - EXTENDED ATTRIBUTES
  2037.     AX = 112Dh
  2038.     BL = subfunction (value of AL on INT 21)
  2039.         02h get extended attributes
  2040.         03h get extended attribute properties
  2041.         04h set extended attributes
  2042.         Return: CF clear
  2043.         else ???
  2044.         Return: CX = ??? (00h or 02h for DOS 4.01)
  2045.     ES:DI -> SFT for file
  2046.     SS = DOS DS
  2047. Return: DS = DOS DS
  2048. Note:    this function is called by the DOS 4.0 kernel on INT 21/AX=5702h,
  2049.       INT 21/AX=5703h, and INT 21/AX=5704h
  2050. SeeAlso: INT 21/AX=5702h,INT 21/AX=5703h,INT 21/AX=5704h,INT 21/AH=6Eh
  2051. --------N-2F112E-----------------------------
  2052. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - EXTENDED OPEN/CREATE FILE
  2053.     AX = 112Eh
  2054.     SS = DS = DOS DS
  2055.     ES:DI -> uninitialized SFT for file
  2056.     STACK: WORD file attribute for created/truncated file
  2057.             low byte = file attributes
  2058.             high byte = 00h normal create/open, 01h create new file
  2059.     SDA first filename pointer -> fully-qualified filename
  2060.     SDA extended file open action = action code (see INT 21/AX=6C00h)
  2061.     SDA extended file open mode = open mode for file (see INT 21/AX=6C00h)
  2062. Return: CF set on error
  2063.         AX = error code
  2064.     CF clear if successful
  2065.         CX = result code
  2066.         01h file opened
  2067.         02h file created
  2068.         03h file replaced (truncated)
  2069.         SFT initialized (except handle count, which DOS manages itself)
  2070. Note:    this function is called by the DOS 4+ kernel
  2071. BUG:     this function is not called correctly under some DOS versions
  2072.        (at least 5.0 and 6.2):
  2073.          the file attribute on the stack is not correct if the action 
  2074.            code is 11h,
  2075.          the result code in CX is not passed back to the application.
  2076. SeeAlso: AX=1115h,AX=1116h,AX=1117h,INT 21/AX=6C00h
  2077. --------N-2F112F-----------------------------
  2078. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - IFS IOCTL
  2079.     AX = 112Fh
  2080.     SS = DOS DS
  2081.     STACK: WORD function in low byte
  2082.         00h ???
  2083.             DS:SI -> Current Directory Structure???
  2084.             CL = drive (1=A:)
  2085.         01h ???
  2086.             DS:SI -> ???
  2087.             CL = file handle???
  2088.         02h ???
  2089.             DS:SI -> Current Directory Structure???
  2090.             DI = ???
  2091.             CX = drive (1=A:)
  2092.     ???
  2093. Return: CF set on error
  2094.         AX = DOS error code (see #0770 at INT 21/AH=59h)
  2095.     CF clear if successful
  2096. Note:    this function is called by the DOS 4.0 kernel
  2097. SeeAlso: INT 21/AH=6Bh
  2098. --------N-2F1130-----------------------------
  2099. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET IFSFUNC SEGMENT
  2100.     AX = 1130h
  2101. Return: ES = CS of resident IFSFUNC
  2102. --------N-2F1180-----------------------------
  2103. INT 2F - LAN Manager Enhanced DOS Services - ???
  2104.     AX = 1180h
  2105.     ???
  2106. Return: ???
  2107. --------N-2F1182-----------------------------
  2108. INT 2F - LAN Manager Enhanced DOS Services - INSTALL SERVICE
  2109.     AX = 1182h
  2110.     ???
  2111. Return: ???
  2112. --------N-2F1184-----------------------------
  2113. INT 2F - LAN Manager Enhanced DOS - ???
  2114.     AX = 1184h
  2115.     ???
  2116. Return: ???
  2117. --------N-2F1186-----------------------------
  2118. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe
  2119.     AX = 1186h
  2120.     DS:SI -> stack frame (see #1246)
  2121. Return: CF clear if successful
  2122.     CF set if error
  2123.         AX = error code
  2124. Note:    LAN Manager enhance mode adds features beyond the standard redirector
  2125.       file/printer services
  2126. SeeAlso: AX=118Fh,AX=1190h,AX=1191h,INT 21/AX=5F39h
  2127.  
  2128. Format of LAN Manager DosReadAsynchNmPipe stack frame:
  2129. Offset    Size    Description    (Table 1246)
  2130.  00h    DWORD    -> number of bytes read
  2131.  04h    WORD    size of buffer
  2132.  06h    DWORD    -> buffer
  2133.  0Ah    DWORD    -> return code
  2134.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  2135.  12h    WORD    handle
  2136. --------N-2F118A-----------------------------
  2137. INT 2F - LAN Manager 2.0+ DOS Enhanced ENCRYPT.EXE - STREAM ENCRYPTION SERVICE
  2138.     AX = 118Ah
  2139.     BX = function (0000h or 0001h)
  2140. Return: CF clear if successful
  2141.         AX = 1100h success
  2142.     CF set if error
  2143.         AX = 0001h, etc.
  2144. SeeAlso: AX=1186h,AH=41h,AH=42h,AH=4Bh
  2145. --------N-2F118B-----------------------------
  2146. INT 2F - LAN Manager Enhanced DOS - ???
  2147.     AX = 118Bh
  2148.     ???
  2149. Return: ???
  2150. --------N-2F118C-----------------------------
  2151. INT 2F - LAN Manager Enhanced DOS - ???
  2152.     AX = 118Ch
  2153.     ???
  2154. Return: ???
  2155. --------N-2F118E-----------------------------
  2156. INT 2F - LAN Manager Enhanced DOS - ???
  2157.     AX = 118Eh
  2158.     ???
  2159. Return: ???
  2160. --------N-2F118F-----------------------------
  2161. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe
  2162.     AX = 118Fh
  2163.     DS:SI -> stack frame (see #1247)
  2164. Return: CF clear if successful
  2165.     CF set if error
  2166.         AX = error code
  2167. SeeAlso: AX=1186h,AX=1191h,INT 21/AX=5F3Ah
  2168.  
  2169. Format of LAN Manager DosReadAsynchNmPipe stack frame:
  2170. Offset    Size    Description    (Table 1247)
  2171.  00h    DWORD    -> number of bytes read
  2172.  04h    WORD    Size of buffer
  2173.  06h    DWORD    -> buffer
  2174.  0Ah    DWORD    -> return code
  2175.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  2176.  12h    WORD    handle
  2177. --------N-2F1190-----------------------------
  2178. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe2
  2179.     AX = 1190h
  2180.     DS:SI -> stack frame (see #1248)
  2181. Return: CF clear if successful
  2182.     CF set if error
  2183.         AX = error code
  2184. SeeAlso: AX=1186h,AX=1191h
  2185.  
  2186. Format of LAN Manager DosReadAsynchNmPipe2 stack frame:
  2187. Offset    Size    Description    (Table 1248)
  2188.  00h    DWORD    -> number of bytes read
  2189.  04h    WORD    size of buffer
  2190.  06h    DWORD    -> buffer
  2191.  0Ah    DWORD    -> return code
  2192.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  2193.  12h    WORD    handle
  2194.  14h    DWORD    ???
  2195. --------N-2F1191-----------------------------
  2196. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe2
  2197.     AX = 1191h
  2198.     DS:SI -> stack frame (see #1249)
  2199. Return: CF clear if successful
  2200.     CF set if error
  2201.         AX = error code
  2202. SeeAlso: AX=118Fh,AX=1190h,INT 21/AX=5F3Ah
  2203.  
  2204. Format of LAN Manager DosReadAsynchNmPipe2 stack frame:
  2205. Offset    Size    Description    (Table 1249)
  2206.  00h    DWORD    -> number of bytes read
  2207.  04h    WORD    size of buffer
  2208.  06h    DWORD    -> buffer
  2209.  0Ah    DWORD    -> return code
  2210.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  2211.  12h    WORD    handle
  2212.  14h    DWORD    ???
  2213. --------D-2F1200-----------------------------
  2214. INT 2F U - DOS 3+ internal - INSTALLATION CHECK
  2215.     AX = 1200h
  2216. Return: AL = FFh (for compatibility with other INT 2F functions)
  2217. --------D-2F1201-----------------------------
  2218. INT 2F U - DOS 3+ internal - CLOSE CURRENT FILE
  2219.     AX = 1201h
  2220.     SS = DOS DS (must be using a DOS internal stack)
  2221.     SDA current SFT pointer -> SFT of file to close
  2222. Return: CF set on error
  2223.     BX???
  2224.     CX new reference count of SFT
  2225.     ES:DI -> SFT for file
  2226. SeeAlso: AX=1106h,AX=1227h,INT 21/AH=3Eh
  2227. --------D-2F1202-----------------------------
  2228. INT 2F U - DOS 3+ internal - GET INTERRUPT ADDRESS
  2229.     AX = 1202h
  2230.     STACK: WORD vector number
  2231. Return: ES:BX -> interrupt vector
  2232.     STACK unchanged
  2233. --------D-2F1203-----------------------------
  2234. INT 2F U - DOS 3+ internal - GET DOS DATA SEGMENT
  2235.     AX = 1203h
  2236. Return: DS = data segment of IBMDOS.COM/MSDOS.SYS
  2237. Note:    for DOS prior to version 5.0, the data segment is the same as the code
  2238.       segment
  2239. --------D-2F1204-----------------------------
  2240. INT 2F U - DOS 3+ internal - NORMALIZE PATH SEPARATOR
  2241.     AX = 1204h
  2242.     STACK: WORD character to normalize
  2243. Return: AL = normalized character (forward slash turned to backslash, all
  2244.           others unchanged)
  2245.     ZF set if path separator
  2246.     STACK unchanged
  2247. --------D-2F1205-----------------------------
  2248. INT 2F U - DOS 3+ internal - OUTPUT CHARACTER TO STANDARD OUTPUT
  2249.     AX = 1205h
  2250.     STACK: WORD character to output
  2251. Return: STACK unchanged
  2252. Note:    can be called only from within DOS
  2253. --------D-2F1206-----------------------------
  2254. INT 2F U - DOS 3+ internal - INVOKE CRITICAL ERROR
  2255.     AX = 1206h
  2256.     DI = error code
  2257.     BP:SI -> device driver header
  2258.     SS = DOS DS (must be using a DOS internal stack)
  2259.     STACK: WORD value to be passed to INT 24 in AX
  2260. Return: AL = 0-3 for Abort, Retry, Ignore, Fail
  2261.     STACK unchanged
  2262. SeeAlso: INT 24
  2263. --------D-2F1207-----------------------------
  2264. INT 2F U - DOS 3+ internal - MAKE DISK BUFFER MOST-RECENTLY USED
  2265.     AX = 1207h
  2266.     DS:DI -> disk buffer
  2267. Return: nothing
  2268. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  2269.       recently used is first); under DOS 3.3, the buffer is then moved to
  2270.       the start of the disk buffer chain if it was marked unused
  2271. Notes:    can be called only from within DOS
  2272.     this function is nearly the same as AX=120Fh
  2273. SeeAlso: AX=120Fh
  2274. --------D-2F1208-----------------------------
  2275. INT 2F U - DOS 3+ internal - DECREMENT SFT REFERENCE COUNT
  2276.     AX = 1208h
  2277.     ES:DI -> SFT
  2278. Return: AX = original value of reference count
  2279. Notes:    if the reference count was 1, it is set to FFFFh (since 0 indicates
  2280.       that the SFT is not in use).    It is the caller's responsibility to
  2281.       set the reference count to zero after cleaning up.
  2282.     used by network redirectors such as MSCDEX
  2283. SeeAlso: AX=1106h
  2284. --------D-2F1209-----------------------------
  2285. INT 2F U - DOS 3+ internal - FLUSH AND FREE DISK BUFFER
  2286.     AX = 1209h
  2287.     DS:DI -> disk buffer
  2288. Return: disk buffer marked unused, contents written to disk if buffer dirty
  2289. Note:    can be called only from within DOS
  2290. SeeAlso: AX=120Eh,AX=1215h
  2291. --------D-2F120A-----------------------------
  2292. INT 2F U - DOS 3+ internal - PERFORM CRITICAL ERROR INTERRUPT
  2293.     AX = 120Ah
  2294.     DS = SS = DOS DS (must be using a DOS internal stack)
  2295.     STACK: WORD extended error code
  2296. Return: AL = user response (0=ignore, 1=retry, 2=abort, 3=fail)
  2297.     CF clear if retry, set otherwise
  2298.     STACK unchanged
  2299. Notes:    can only be called during a DOS function call, as it uses various
  2300.       fields in the SDA to set up the registers for the INT 24
  2301.     reportedly sets current DPB's first root directory sector to 1
  2302. SeeAlso: INT 24
  2303. --------D-2F120B-----------------------------
  2304. INT 2F U - DOS 3+ internal - SIGNAL SHARING VIOLATION TO USER
  2305.     AX = 120Bh
  2306.     ES:DI -> system file table entry for previous open of file
  2307.     STACK: WORD extended error code (should be 20h--sharing violation)
  2308. Return: CF clear if operation should be retried
  2309.     CF set if operation should not be retried
  2310.         AX = error code (20h) (see #0770 at INT 21/AH=59h)
  2311.     STACK unchanged
  2312. Notes:    can only be called during a DOS function call
  2313.     should only be called if an attempt was made to open an already-open
  2314.       file contrary to the sharing rules
  2315.     invokes INT 24 if SFT file opened via FCB or in compatibility mode with
  2316.       inheritance allowed
  2317. --------D-2F120C-----------------------------
  2318. INT 2F U - DOS 3+ internal - OPEN DEVICE AND SET SFT OWNER/MODE
  2319.     AX = 120Ch
  2320.     SDA current SFT pointer -> SFT for file
  2321.     DS = DOS DS
  2322.     SS = DOS DS (must be using a DOS internal stack)
  2323. Return: ES, DI, AX destroyed
  2324. Notes:    invokes "device open" call on device driver for SFT
  2325.     changes owner of last-accessed SFT to calling process if it was opened
  2326.       via FCB
  2327.     called by network redirectors such as MSCDEX
  2328. --------D-2F120D-----------------------------
  2329. INT 2F U - DOS 3+ internal - GET DATE AND TIME
  2330.     AX = 120Dh
  2331.     SS = DOS DS (must be using a DOS internal stack)
  2332. Return: AX = current date in packed format (see #0762 at INT 21/AX=5700h)
  2333.     DX = current time in packed format (see #0761 at INT 21/AX=5700h)
  2334. SeeAlso: INT 21/AH=2Ah,INT 21/AH=2Ch
  2335. --------D-2F120E-----------------------------
  2336. INT 2F U - DOS 3+ internal - MARK ALL DISK BUFFERS UNREFERENCED
  2337.     AX = 120Eh
  2338.     SS = DOS DS (must be using a DOS internal stack)
  2339. Return: DS:DI -> first disk buffer
  2340. Notes:    clears "referenced" flag on all disk buffers
  2341.     in DOS 5+, this has become essentially a NOP, invoking the same code
  2342.       used by AX=1224h (SHARING DELAY)
  2343. SeeAlso: AX=1209h,AX=1210h,INT 21/AH=0Dh
  2344. --------D-2F120F-----------------------------
  2345. INT 2F U - DOS 3+ internal - MAKE BUFFER MOST RECENTLY USED
  2346.     AX = 120Fh
  2347.     DS:DI -> disk buffer
  2348.     SS = DOS DS (must be using a DOS internal stack)
  2349. Return: DS:DI -> next buffer in buffer list
  2350. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  2351.       recently used is first); under DOS 3.3, the buffer is then moved to
  2352.       the start of the disk buffer chain if it was marked unused
  2353. Note:    this function is the same as AX=1207h except that it returns a
  2354.       pointer to the buffer following the specified buffer in the buffer
  2355.       chain
  2356. SeeAlso: AX=1207h
  2357. --------D-2F1210-----------------------------
  2358. INT 2F U - DOS 3+ internal - FIND UNREFERENCED DISK BUFFER
  2359.     AX = 1210h
  2360.     DS:DI -> first disk buffer to check
  2361. Return: ZF clear if found
  2362.         DS:DI -> first unreferenced disk buffer
  2363.     ZF set if not found
  2364. Note:    in DOS 5+, this has become essentially a NOP, invoking the same code
  2365.       used by AX=1224h (SHARING DELAY)
  2366. SeeAlso: AX=120Eh
  2367. --------D-2F1211-----------------------------
  2368. INT 2F U - DOS 3+ internal - NORMALIZE ASCIZ FILENAME
  2369.     AX = 1211h
  2370.     DS:SI -> ASCIZ filename to normalize
  2371.     ES:DI -> buffer for normalized filename
  2372. Return: destination buffer filled with uppercase filename, with slashes turned
  2373.     to backslashes
  2374. SeeAlso: AX=121Eh,AX=1221h
  2375. --------D-2F1212-----------------------------
  2376. INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  2377.     AX = 1212h
  2378.     ES:DI -> ASCIZ string
  2379. Return: CX = length of string
  2380. SeeAlso: AX=1225h
  2381. --------D-2F1213-----------------------------
  2382. INT 2F U - DOS 3+ internal - UPPERCASE CHARACTER
  2383.     AX = 1213h
  2384.     STACK: WORD character to convert to uppercase
  2385. Return: AL = uppercase character
  2386.     STACK unchanged
  2387. --------D-2F1214-----------------------------
  2388. INT 2F U - DOS 3+ internal - COMPARE FAR POINTERS
  2389.     AX = 1214h
  2390.     DS:SI = first pointer
  2391.     ES:DI = second pointer
  2392. Return: ZF set if pointers are equal, ZF clear if not equal
  2393. --------D-2F1215-----------------------------
  2394. INT 2F U - DOS 3+ internal - FLUSH BUFFER
  2395.     AX = 1215h
  2396.     DS:DI -> disk buffer
  2397.     SS = DOS DS (must be using a DOS internal stack)
  2398.     STACK: WORD drives for which to skip buffer
  2399.         ignore buffer if drive same as high byte, or bytes differ and
  2400.           the buffer is for a drive OTHER than that given in low byte
  2401. Return: STACK unchanged
  2402. Note:    can be called only from within DOS
  2403. SeeAlso: AX=1209h
  2404. --------D-2F1216-----------------------------
  2405. INT 2F U - DOS 3+ internal - GET ADDRESS OF SYSTEM FILE TABLE ENTRY
  2406.     AX = 1216h
  2407.     BX = system file table entry number
  2408. Return: CF clear if successful
  2409.         ES:DI -> system file table entry
  2410.     CF set if BX greater than FILES=
  2411. Note:    supported by DR-DOS 5+
  2412. SeeAlso: AX=1220h
  2413. --------D-2F1217-----------------------------
  2414. INT 2F U - DOS 3+ internal - GET CURRENT DIRECTORY STRUCTURE FOR DRIVE
  2415.     AX = 1217h
  2416.     SS = DOS DS (must be using a DOS internal stack)
  2417.     STACK: WORD drive (0 = A:, 1 = B:, etc)
  2418. Return: CF set on error
  2419.         (drive > LASTDRIVE)
  2420.     CF clear if successful
  2421.         DS:SI -> current directory structure for specified drive
  2422.     STACK unchanged
  2423. SeeAlso: AX=1219h
  2424. --------D-2F1218-----------------------------
  2425. INT 2F U - DOS 3+ internal - GET CALLER'S REGISTERS
  2426.     AX = 1218h
  2427. Return: DS:SI -> saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack)
  2428. Note:    only valid while within DOS
  2429. --------D-2F1219-----------------------------
  2430. INT 2F U - DOS 3+ internal - SET DRIVE???
  2431.     AX = 1219h
  2432.     SS = DOS DS (must be using a DOS internal stack)
  2433.     STACK: WORD drive (0 = default, 1 = A:, etc)
  2434. Return: ???
  2435.     STACK unchanged
  2436. Notes:    calls AX=1217h
  2437.     builds a current directory structure if inside server call
  2438.       (INT 21/AX=5D00h)
  2439. SeeAlso: AX=1217h,AX=121Fh
  2440. --------D-2F121A-----------------------------
  2441. INT 2F U - DOS 3+ internal - GET FILE'S DRIVE
  2442.     AX = 121Ah
  2443.     DS:SI -> filename
  2444. Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid)
  2445.     DS:SI -> filename without leading X: (if present)
  2446. SeeAlso: INT 21/AH=19h,INT 21/AH=60h
  2447. --------D-2F121B-----------------------------
  2448. INT 2F U - DOS 3+ internal - SET YEAR/LENGTH OF FEBRUARY
  2449.     AX = 121Bh
  2450.     CL = year - 1980
  2451. Return: AL = number of days in February
  2452. Note:    requires DS to be set to the DOS data segment
  2453. SeeAlso: INT 21/AH=2Bh
  2454. --------D-2F121C-----------------------------
  2455. INT 2F U - DOS 3+ internal - CHECKSUM MEMORY
  2456.     AX = 121Ch
  2457.     DS:SI -> start of memory to checksum
  2458.     CX = number of bytes
  2459.     DX = initial checksum
  2460.     SS = DOS DS (must be using a DOS internal stack)
  2461. Return: AX, CX destroyed
  2462.     DX = checksum
  2463.     DS:SI -> first byte after checksummed range
  2464. Notes:    used by DOS to determine day count since 1/1/80 given a date
  2465.     supported by DR-DOS 5.0+
  2466. SeeAlso: AX=121Dh
  2467. --------D-2F121D-----------------------------
  2468. INT 2F U - DOS 3+ internal - SUM MEMORY
  2469.     AX = 121Dh
  2470.     DS:SI -> memory to add up
  2471.     CX = 0000h
  2472.     DX = limit
  2473. Return: AL = byte which exceeded limit
  2474.     CX = number of bytes before limit exceeded
  2475.     DX = remainder after adding first CX bytes
  2476.     DS:SI -> byte beyond the one which exceeded the limit
  2477. Notes:    used by DOS to determine year or month given day count since 1/1/80
  2478.     supported by DR-DOS 5.0+
  2479. SeeAlso: AX=121Ch
  2480. --------D-2F121E-----------------------------
  2481. INT 2F U - DOS 3+ internal - COMPARE FILENAMES
  2482.     AX = 121Eh
  2483.     DS:SI -> first ASCIZ filename
  2484.     ES:DI -> second ASCIZ filename
  2485. Return: ZF set if filenames equivalent, ZF clear if not
  2486. Note:    supported by DR-DOS 5.0+
  2487. SeeAlso: AX=1211h,AX=1221h
  2488. --------D-2F121F-----------------------------
  2489. INT 2F U - DOS 3+ internal - BUILD CURRENT DIRECTORY STRUCTURE
  2490.     AX = 121Fh
  2491.     SS = DOS DS (must be using a DOS internal stack)
  2492.     STACK: WORD drive letter
  2493. Return: ES:DI -> current directory structure (will be overwritten by next call)
  2494.     STACK unchanged
  2495. --------D-2F1220-----------------------------
  2496. INT 2F U - DOS 3+ internal - GET JOB FILE TABLE ENTRY
  2497.     AX = 1220h
  2498.     BX = file handle
  2499. Return: CF set on error
  2500.         AL = 6 (invalid file handle)
  2501.     CF clear if successful
  2502.         ES:DI -> JFT entry for file handle in current process
  2503. Notes:    the byte pointed at by ES:DI contains the number of the SFT for the
  2504.       file handle, or FFh if the handle is not open
  2505.     supported by DR-DOS 5.0+
  2506. SeeAlso: AX=1216h,AX=1229h
  2507. --------D-2F1221-----------------------------
  2508. INT 2F U - DOS 3+ internal - CANONICALIZE FILE NAME
  2509.     AX = 1221h
  2510.     DS:SI -> file name to be fully qualified
  2511.     ES:DI -> 128-byte buffer for resulting canonical file name
  2512.     SS = DOS DS (must be using a DOS internal stack)
  2513. Return: (see INT 21/AH=60h)
  2514. Note:    identical to INT 21/AH=60h
  2515. SeeAlso: AX=1123h,INT 21/AH=60h
  2516. --------D-2F1222-----------------------------
  2517. INT 2F U - DOS 3+ internal - SET EXTENDED ERROR INFO
  2518.     AX = 1222h
  2519.     SS = DOS data segment
  2520.     SS:SI -> 4-byte records
  2521.         BYTE    error code, FFh = last record
  2522.         BYTE    error class, FFh = don't change
  2523.         BYTE    suggested action, FFh = don't change
  2524.         BYTE    error locus, FFh = don't change
  2525.     SDA error code set
  2526. Return: SI destroyed
  2527.     SDA error class, error locus, and suggested action fields set
  2528. Note:    can be called only from within DOS
  2529. SeeAlso: AX=122Dh,INT 21/AH=59h,INT 21/AX=5D0Ah
  2530. --------D-2F1223-----------------------------
  2531. INT 2F U - DOS 3+ internal - CHECK IF CHARACTER DEVICE
  2532.     AX = 1223h
  2533.     DS = DOS DS
  2534.     SS = DOS DS (must be using a DOS internal stack)
  2535.     SDA+218h (DOS 3.10-3.30) = eight-character blank-padded name
  2536.     SDA+22Bh (DOS 4.0-6.0) = eight-character blank-padded name
  2537. Return: CF set if no character device by that name found
  2538.     CF clear if found
  2539.         BH = low byte of device attribute word
  2540. Note:    can only be called from within DOS
  2541. SeeAlso: INT 21/AX=5D06h,INT 21/AX=5D0Bh
  2542. --------D-2F1224-----------------------------
  2543. INT 2F U - DOS 3+ internal - SHARING RETRY DELAY
  2544.     AX = 1224h
  2545.     SS = DOS DS (must be using a DOS internal stack)
  2546. Return: after delay set by INT 21/AX=440Bh, unless in server call
  2547.       (INT 21/AX=5D00h)
  2548. Note:    delay is dependent on the processor speed, and is skipped entirely if
  2549.       inside a server call
  2550. SeeAlso: INT 21/AX=440Bh,INT 21/AH=52h,INT 62/AX=0097h
  2551. --------D-2F1225-----------------------------
  2552. INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  2553.     AX = 1225h
  2554.     DS:SI -> ASCIZ string
  2555. Return: CX = length of string
  2556. Note:    supported by DR-DOS 5.0+
  2557. SeeAlso: AX=1212h
  2558. --------D-2F1226-----------------------------
  2559. INT 2F U - DOS 3.3+ internal - OPEN FILE
  2560.     AX = 1226h
  2561.     CL = access mode
  2562.     DS:DX -> ASCIZ filename
  2563.     SS = DOS DS (must be using a DOS internal stack)
  2564. Return: CF set on error
  2565.         AL = error code (see #0770 at INT 21/AH=59h)
  2566.     CF clear if successful
  2567.         AX = file handle
  2568. Notes:    can only be called from within DOS
  2569.     equivalent to INT 21/AH=3Dh
  2570.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  2571. SeeAlso: AX=1227h,INT 21/AH=3Dh
  2572. --------D-2F1227-----------------------------
  2573. INT 2F U - DOS 3.3+ internal - CLOSE FILE
  2574.     AX = 1227h
  2575.     BX = file handle
  2576.     SS = DOS DS (must be using a DOS internal stack)
  2577. Return: CF set on error
  2578.         AL = 06h invalid file handle
  2579.     CF clear if successful
  2580. Notes:    can only be called from within DOS
  2581.     equivalent to INT 21/AH=3Eh
  2582.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  2583. SeeAlso: AX=1106h,AX=1201h,AX=1226h,INT 21/AH=3Eh
  2584. --------D-2F1228BP4200-----------------------
  2585. INT 2F U - DOS 3.3+ internal - MOVE FILE POINTER
  2586.     AX = 1228h
  2587.     BP = 4200h, 4201h, 4202h (see INT 21/AH=42h)
  2588.     BX = file handle
  2589.     CX:DX = offset in bytes
  2590.     SS = DOS DS (must be using a DOS internal stack)
  2591. Return: as for INT 21/AH=42h
  2592. Notes:    equivalent to INT 21/AH=42h, but may only be called from inside a DOS
  2593.       function call
  2594.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  2595.       LSEEK, and restores frame pointer
  2596.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  2597. SeeAlso: INT 21/AH=42h
  2598. --------D-2F1229-----------------------------
  2599. INT 2F U - DOS 3.3+ internal - READ FROM FILE
  2600.     AX = 1229h
  2601.     BX = file handle
  2602.     CX = number of bytes to read
  2603.     DS:DX -> buffer
  2604.     SS = DOS DS (must be using a DOS internal stack)
  2605. Return: as for INT 21/AH=3Fh
  2606. Notes:    equivalent to INT 21/AH=3Fh, but may only be called when already inside
  2607.       a DOS function call
  2608.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  2609. SeeAlso: AX=1226h,INT 21/AH=3Fh
  2610. --------D-2F122A-----------------------------
  2611. INT 2F U - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT
  2612.     AX = 122Ah
  2613.     BX = entry point to set (0001h or 0002h)
  2614.     DS:SI -> FASTOPEN entry point
  2615.         (entry point not set if SI = FFFFh for DOS 4+)
  2616. Return: CF set if specified entry point already set
  2617. Notes:    entry point in BX is ignored under DOS 3.30
  2618.     both entry points set to same handler by DOS 4.01
  2619.     DOS 5.0 and 6.0 only set entry point 1
  2620.  
  2621. (Table 1250)
  2622. Values DOS 3.30+ FASTOPEN is called with:
  2623.     AL = 01h  Lookup
  2624.         CX = ??? seems to be offset
  2625.         DI = ??? seems to be offset
  2626.         SI = offset in DOS DS of filename
  2627.     AL = 02h  insert file into FASTOPEN cache
  2628.     AL = 03h  delete file from FASTOPEN cache
  2629.         SI = offset in DOS DS of filename
  2630.     AL = 04h  purge FASTOPEN cache
  2631.         AH = subfunction (00h,01h,02h)
  2632.         ES:DI -> ???
  2633.         CX = ??? (subfunctions 01h and 02h only)
  2634. Returns: CF set on error or not installed
  2635. Note: function 03h calls function 01h first
  2636.  
  2637. (Table 1251)
  2638. Values PC-DOS 4.01 FASTOPEN is additionally called with:
  2639.     AL = 04h ???
  2640.         AH = 03h
  2641.         ???
  2642.     AL = 05h ???
  2643.     AL = 0Bh ???
  2644.     AL = 0Ch ???
  2645.     AL = 0Dh ???
  2646.     AL = 0Eh ???
  2647.     AL = 0Fh ???
  2648.     AL = 10h ???
  2649.  
  2650. (Table 1252)
  2651. Values MS-DOS 5.0-6.0 FASTOPEN is additionally called with:
  2652.     AL = 04h  purge FASTOPEN cache
  2653.         AH = 03h
  2654.         ???
  2655.     AL = 05h ???
  2656.         DL = drive (00h = A:)
  2657.         ???
  2658.     AL = 06h ???
  2659.         ???
  2660. --------D-2F122B-----------------------------
  2661. INT 2F U - DOS 3.3+ internal - IOCTL
  2662.     AX = 122Bh
  2663.     BP = 44xxh
  2664.     SS = DOS DS (must be using a DOS internal stack)
  2665.     additional registers as appropriate for INT 21/AX=44xxh
  2666. Return: as for INT 21/AH=44h
  2667. Notes:    equivalent to INT 21/AH=44h, but may only be called when already inside
  2668.       a DOS function call
  2669.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  2670.       IOCTL, and restores frame pointer
  2671.     used by NLSFUNC in accessing COUNTRY.SYS when invoked by the DOS kernel
  2672. SeeAlso: INT 21/AH=44h
  2673. --------D-2F122C-----------------------------
  2674. INT 2F U - DOS 3.3+ internal - GET DEVICE CHAIN
  2675.     AX = 122Ch
  2676. Return: BX:AX -> header of second device driver (NUL is first) in driver chain
  2677. Note:    although this function exists in DR-DOS 5.0, it returns 0000h:0000h
  2678. SeeAlso: INT 21/AH=52h
  2679. --------D-2F122D-----------------------------
  2680. INT 2F U - DOS 3.3+ internal - GET EXTENDED ERROR CODE
  2681.     AX = 122Dh
  2682. Return: AX = current extended error code
  2683. SeeAlso: AX=1222h,INT 21/AH=59h
  2684. --------D-2F122E-----------------------------
  2685. INT 2F U - DOS 4+ internal - GET OR SET ERROR TABLE ADDRESSES
  2686.     AX = 122Eh
  2687.     DL = subfunction
  2688.         00h get standard DOS error table (see #1253)
  2689.         Return: ES:DI -> error table
  2690.                  (DOS 4: errors 00h-12h,50h-5Bh)
  2691.                  (DOS 5: errors 00h-26h,4Fh,51h-59h)
  2692.         01h set standard DOS error table
  2693.         ES:DI -> error table
  2694.         02h get parameter error table (errors 00h-0Ah)
  2695.         Return: ES:DI -> error table
  2696.         03h set parameter error table
  2697.         ES:DI -> error table
  2698.         04h get critical/SHARE error table (errors 13h-2Bh)
  2699.         Return: ES:DI -> error table
  2700.         05h set critical/SHARE error table
  2701.         ES:DI -> error table
  2702.         06h get ??? error table
  2703.         Return: ES:DI -> error table or 0000h:0000h
  2704.         07h set ??? error table
  2705.         ES:DI -> error table
  2706.         08h get error message retriever (see #1254)
  2707.         Return: ES:DI -> FAR procedure to fetch error message
  2708.         09h set ??? error table
  2709.         ES:DI -> error table
  2710. Notes:    if the returned segment on a "get" is 0001h, then the offset specifies
  2711.       the offset of the error message table within COMMAND.COM, and the
  2712.       procedure returned by DL=08h should be called
  2713.     DOS 5+ COMMAND.COM does not allow setting any of the addresses (calls
  2714.       with DL odd are ignored); they are always returned with segment 0001h
  2715.     for DOS 5.0, the standard and critical/SHARE error tables are combined
  2716.       into a single error table
  2717. SeeAlso: AX=0500h,INT 21/AH=59h
  2718.  
  2719. Format of DOS 4.x error table:
  2720. Offset    Size    Description    (Table 1253)
  2721.  00h    BYTE    FFh
  2722.  01h  2 BYTEs    04h,00h (DOS version???)
  2723.  03h    BYTE    number of error headers following
  2724.  04h 2N WORDs    table of all error headers for table
  2725.         Offset    Size    Description
  2726.          00h    WORD    error message number
  2727.          02h    WORD    offset of error message from start of header
  2728.                 error messages are count byte followed by msg
  2729. Note:    DOS 5 error tables consist of one word per error number; each word
  2730.       contains either the offset of a counted string or 0000h
  2731.  
  2732. (Table 1254)
  2733. Call error retrieval function with:
  2734.     AX = error number
  2735.     DI = offset of error table
  2736. Return: ES:DI -> error message (counted string)
  2737. Notes:    this function needs to access COMMAND.COM if the messages were not
  2738.       loaded into memory permanently with /MSG; the caller should assume
  2739.       that the returned message will be overwritten by the next call of
  2740.       the function
  2741.     supported by DR-DOS 5.0
  2742.  
  2743. (Table 1255)
  2744. Values for parameter errors:
  2745.  01h    Too many parameters
  2746.  02h    Required Parameter missing
  2747.  03h    Invalid switch
  2748.  04h    Invalid keyword
  2749.  06h    Parameter value not in allowed range
  2750.  07h    Parameter value not allowed
  2751.  08h    Parameter value not allowed
  2752.  09h    Parameter format not correct
  2753.  0Ah    Invalid parameter
  2754.  0Bh    Invalid parameter combination
  2755. --------D-2F122F-----------------------------
  2756. INT 2F U - DOS 4.x internal - SET DOS VERSION NUMBER TO RETURN
  2757.     AX = 122Fh
  2758.     DX = DOS version number (0000h = return true DOS version)
  2759. Note:    not available under DR-DOS 5.0 or 6.0
  2760. SeeAlso: INT 21/AH=30h,INT 21/AX=3306h
  2761. --------m-2F12FFBX0006-----------------------
  2762. INT 2F U - DR-DOS 6, Novell DOS 7 - EMM386.EXE - VIDEO MEMORY SPACE CONTROL
  2763.     AX = 12FFh
  2764.     BX = 0006h
  2765.     DX = 0000h
  2766.     CX = function
  2767.         0000h get status of video memory space (MEMMAX /V)
  2768.         0001h map memory into video memory space (MEMMAX +V)
  2769.         0002h unmap memory from video memory space (MEMMAX -V)
  2770. Return: CF clear if successful
  2771.         AX = 0000h (successful)
  2772.         BX = segment of reserved video RAM
  2773.         CX = segment of used video RAM
  2774.         DX = segment of first upper MCB
  2775. Notes:    this functionality is provided by EMM386, and partially supported by
  2776.       HIDOS.SYS
  2777.     BL specifies which program handles the call, BH is the function number
  2778. SeeAlso: AX=D201h/BX=4849h
  2779. --------O-2F12FFBX0007-----------------------
  2780. INT 2F U - Novell DOS 7 - SCRIPT.EXE - GET ???
  2781.     AX = 12FFh
  2782.     BX = 0007h
  2783.     CX = 0000h
  2784. Return: CF clear if installed
  2785.         AX = 0000h
  2786.         BX = ??? (4426h)
  2787.         CX = ??? (0068h)
  2788.         DX = PSP segment of resident code???
  2789.         SI = ??? (4AFAh)
  2790.         ES = resident code segment
  2791. --------m-2F12FFBX0106-----------------------
  2792. INT 2F U - Novell DOS 7 - EMM386.EXE - GET VERSION???
  2793.     AX = 12FFh
  2794.     BX = 0106h
  2795. Return:    CF clear if successful
  2796.         AX = 0000h (successful)
  2797.         BX = EDC0h (signature)
  2798.         CL = memory manager variant (02h,03h)
  2799.         (02h when DPMI/VCPI disabled, 03h when DPMI/VCPI loaded)
  2800.         CH = ??? (00h)
  2801.         DX = version??? (0300h for v3.0)
  2802.         ES = segment of EMM386 low-memory stub
  2803. Notes:    BL specifies which program handles the call, BH is the function number
  2804.     if the word at ES:0012h is nonzero, if contains the offset within
  2805.       segment ES of the CEMM-compatible entry point (see #1256)
  2806.     if no other program has hooked INT 67, an alternate installation
  2807.       check is to test for the string
  2808.       "NOVELL EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
  2809.       handler's segment; the word immediately preceding this string
  2810.       contains the offset of the API entry point if it is nonzero
  2811. Index:    entry point;Novell EMM386
  2812.  
  2813. (Table 1256)
  2814. Call Novell EMM386.EXE entry point with:
  2815.     AH = 00h get memory manager's status???
  2816.         ???
  2817.     AH = 01h set memory manager's status???
  2818.         ???
  2819.     AH = 02h Weitek coprocessor support???
  2820.         AL = subfunction???
  2821.     more functions???
  2822. SeeAlso: #0621 at INT 21/AX=4402h/SF=02h,#1909 at INT 67/AX=FFA5h
  2823. --------m-2F12FFBL06-------------------------
  2824. INT 2F U - Novell DOS 7 - EMM386.EXE - ???
  2825.     AX = 12FFh
  2826.     BL = 06h
  2827.     BH = function (02h-09h)
  2828.     ???
  2829. Return: ???
  2830. --------O-2F12FFBX0EDC-----------------------
  2831. INT 2F U - Novell DOS 7 - EMM386.EXE - CHECK IF MULTITASKING SUPPORT LOADED???
  2832.     AX = 12FFh
  2833.     BX = 0EDCh
  2834. Return: AX = 0000h if ??? loaded
  2835.         CF clear
  2836.         BX = 0000h
  2837. Notes:    called by Novell DOS 7 TaskMgr
  2838.     if this function returns with AX=0000h, then the code necessary to
  2839.       support the API on INT 2F/AX=2780h is loaded and that API becomes
  2840.       available for use
  2841.     because the request is handled on the initial trap to the memory
  2842.       manager caused by INT instructions, this function must be invoked
  2843.       with an actual INT 2F instruction instead of some simulation such
  2844.       as a far call to the address in the interrupt vector table
  2845. SeeAlso: AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h,AX=2780h/CL=04h
  2846. --------D-2F13-------------------------------
  2847. INT 2F U - DOS 3.2+ - SET DISK INTERRUPT HANDLER
  2848.     AH = 13h
  2849.     DS:DX -> interrupt handler disk driver calls on read/write
  2850.     ES:BX = address to restore INT 13 to on system halt (exit from root
  2851.          shell) or warm boot (INT 19)
  2852. Return: DS:DX set by previous invocation of this function
  2853.     ES:BX set by previous invocation of this function
  2854. Notes:    IO.SYS hooks INT 13 and inserts one or more filters ahead of the
  2855.       original INT 13 handler.  The first is for disk change detection
  2856.       on floppy drives, the second is for tracking formatting calls and
  2857.       correcting DMA boundary errors, the third is for working around
  2858.       problems in a particular version of IBM's ROM BIOS
  2859.     before the first call, ES:BX points at the original BIOS INT 13; DS:DX
  2860.       also points there unless IO.SYS has installed a special filter for
  2861.       hard disk reads (on systems with model byte FCh and BIOS date
  2862.       "01/10/84" only), in which case it points at the special filter
  2863.     most DOS 3.2+ disk access is via the vector in DS:DX, although a few
  2864.       functions are still invoked via an INT 13 instruction
  2865.     this is a dangerous security loophole for any virus-monitoring software
  2866.       which does not trap this call ("INT13", "Nomenklatura", and many
  2867.       Bulgarian viruses are known to use it to get the original ROM entry
  2868.       point)
  2869. SeeAlso: INT 13/AH=01h,INT 19,INT 9D"VIRUS"
  2870. --------N-2F13-------------------------------
  2871. INT 2F U - MS-NET - ???
  2872.     AH = 13h
  2873.     ???
  2874. Return: ???
  2875. Note:    supposedly used to move (or control the movement of) NCBs
  2876. --------U-2F1400-----------------------------
  2877. INT 2F C - NLSFUNC.COM - INSTALLATION CHECK
  2878.     AX = 1400h
  2879. Return: AL = 00h not installed, OK to install
  2880.          01h not installed, not OK
  2881.          FFh installed
  2882. Notes:    this function is called by the DOS v3.3+ kernel
  2883.     supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  2884.     supported by DR-DOS 5.0
  2885.     documented for MS-DOS 5+, but undocumented in prior versions
  2886. SeeAlso: AX=1401h"NLSFUNC",AX=1402h"NLSFUNC"
  2887. --------D-2F1400-----------------------------
  2888. INT 2F - European MS-DOS 4.0 POPUP - "CheckPu" - INSTALLATION CHECK
  2889.     AX = 1400h
  2890. Return: AX = FFFFh if installed
  2891.         BX = maximum memory required to save screen and keyboard info
  2892.     CF clear if successful
  2893.     CF set on error
  2894.         AX = error code
  2895.         0002h invalid function
  2896.         0004h unknown error
  2897. Note:    the POPUP interface is used by background programs (see INT 21/AH=80h)
  2898.       to communicate with the user
  2899. SeeAlso: AX=1401h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  2900. --------U-2F1401-----------------------------
  2901. INT 2F CU - NLSFUNC.COM - CHANGE CODE PAGE
  2902.     AX = 1401h
  2903.     DS:SI -> internal code page structure (see #1257)
  2904.     BX = new code page (see INT 21/AX=6602h)
  2905.     DX = country code???
  2906. Return: AL = status
  2907.          00h successful
  2908.          else DOS error code
  2909. Note:    this function is called by the DOS v3.3+ kernel
  2910. SeeAlso: AX=1400h"NLSFUNC",AX=1402h"NLSFUNC",INT 21/AH=66h
  2911.  
  2912. Format of DOS 3.30 internal code page structure:
  2913. Offset    Size    Description    (Table 1257)
  2914.  00h  8 BYTEs    ???
  2915.  08h 64 BYTEs    name of country information file
  2916.  48h    WORD    system code page
  2917.  4Ah    WORD    number of supported subfunctions
  2918.  4Ch  5 BYTEs    data to return for INT 21/AX=6502h
  2919.  51h  5 BYTEs    data to return for INT 21/AX=6504h
  2920.  56h  5 BYTEs    data to return for INT 21/AX=6505h
  2921.  5Bh  5 BYTEs    data to return for INT 21/AX=6506h
  2922.  60h 41 BYTEs    data to return for INT 21/AX=6501h
  2923. --------D-2F1401-----------------------------
  2924. INT 2F - European MS-DOS 4.0 POPUP - "PostPu" - OPEN/CLOSE POPUP SCREEN
  2925.     AX = 1401h
  2926.     DL = function (00h open, 01h close)
  2927.     DH = wait flag
  2928.         00h block until screen opens
  2929.         01h return error if screen is not available
  2930.         02h urgent--always open screen immediately
  2931. Return: CF clear if successful
  2932.         BX = amount of memory needed to save screen and keyboard info,
  2933.         0000h if default save location can be used (only if DH was 02h)
  2934.     CF set on error
  2935. Note:    the application using the screen is frozen until the popup screen is
  2936.       closed
  2937. SeeAlso: AX=1400h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  2938. --------U-2F1402-----------------------------
  2939. INT 2F CU - NLSFUNC.COM - GET EXTENDED COUNTRY INFO
  2940.     AX = 1402h
  2941.     BP = subfunction (same as AL for INT 21/AH=65h)
  2942.     BX = code page (see INT 21/AX=6602h)
  2943.     DX = country code (see INT 21/AH=38h)
  2944.     DS:SI -> internal code page structure (see #1257)
  2945.     ES:DI -> user buffer
  2946.     CX = size of user buffer
  2947. Return: AL = status
  2948.         00h successful
  2949.         else DOS error code
  2950. Notes:    this function is called by the DOS v3.3+ kernel on INT 21/AH=65h
  2951.     code page structure apparently only needed for COUNTRY.SYS pathname
  2952. SeeAlso: AX=1401h"NLSFUNC",AX=1403h"NLSFUNC",AX=1404h,INT 21/AH=65h
  2953. --------D-2F1402-----------------------------
  2954. INT 2F - European MS-DOS 4.0 POPUP - "SavePu" - SAVE POPUP SCREEN
  2955.     AX = 1402h
  2956.     ES:DI -> save buffer (0000h:0000h for default buffer in POPUP)
  2957. Return: CF clear if successful
  2958.     CF set on error
  2959.         AX = error code (see #1258)
  2960. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1403h"POPUP"
  2961.  
  2962. (Table 1258)
  2963. Values for POPUP error code:
  2964.  0001h    process does not own screen
  2965.  0004h    unknown error
  2966.  0005h    invalid pointer
  2967. --------U-2F1403-----------------------------
  2968. INT 2F CU - NLSFUNC.COM - SET CODE PAGE
  2969.     AX = 1403h
  2970.     DS:SI -> internal code page structure (see #1257)
  2971.     BX = code page (see INT 21/AX=6602h)
  2972.     DX = country code (see INT 21/AH=38h)
  2973. Return: AL = status
  2974.          ???
  2975. Note:    this function is called by the DOS v3.3+ kernel on INT 21/AH=38h
  2976. SeeAlso: AX=1402h"NLSFUNC",AX=1404h,INT 21/AH=38h"SET"
  2977. --------D-2F1403-----------------------------
  2978. INT 2F - European MS-DOS 4.0 POPUP - "RestorePu" - RESTORE SCREEN
  2979.     AX = 1403h
  2980.     ES:DI -> buffer containing saved screen
  2981.         (0000h:0000h for default buffer in POPUP)
  2982. Return: CF clear if successful
  2983.     CF set on error
  2984.         AX = error code (see #1258)
  2985. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1402h"POPUP"
  2986. --------U-2F1404-----------------------------
  2987. INT 2F CU - NLSFUNC.COM - GET COUNTRY INFO
  2988.     AX = 1404h
  2989.     BX = code page (see INT 21/AX=6602h)
  2990.     DX = country code (see INT 21/AH=38h)
  2991.     DS:SI -> internal code page structure (see #1257)
  2992.     ES:DI -> user buffer
  2993. Return: AL = status
  2994.          ???
  2995. Notes:    this function is called by the DOS v3.3+ kernel on INT 21/AH=38h
  2996.     code page structure apparently only needed for COUNTRY.SYS pathname
  2997. SeeAlso: AX=1402h,AX=1403h,INT 21/AH=38h"GET"
  2998. --------U-2F14FE-----------------------------
  2999. INT 2F U - DR-DOS 5.0 NLSFUNC - GET EXTENDED COUNTRY INFORMATION
  3000.     AX = 14FEh
  3001.     BX = code page (FFFFh=global code page) (see INT 21/AX=6602h)
  3002.     DX = country ID (FFFFh=current country) (see INT 21/AH=38h)
  3003.     ES:DI -> country information buffer
  3004.     CL = info ID
  3005.         01h get general internationalization info
  3006.         02h get pointer to uppercase table
  3007.         04h get pointer to filename uppercase table
  3008.         05h get pointer to filename terminator table
  3009.         06h get pointer to collating sequence table
  3010.         07h get pointer to Double-Byte Character Set table
  3011.     CF set (used to return error if not installed)
  3012. Return: CF clear if successful
  3013.         DS:SI -> requested information
  3014.     CF set on error
  3015. Notes:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  3016.       or FFh on entry.
  3017.     the DR-DOS kernel calls this function on INT 21/AX=6501h
  3018.     the value in CL is not range-checked by the DR-DOS 5.0 NLSFUNC
  3019. SeeAlso: AX=14FFh,INT 21/AH=65h
  3020.  
  3021. Format of DR-DOS COUNTRY.SYS file:
  3022. Offset    Size    Description    (Table 1259)
  3023.  00h 126 BYTEs    copyright notice (terminated with Ctrl-Z, padded with NULs)
  3024.  7Eh    WORD    signature EDC1h
  3025.  80h    var    country pointer records
  3026.     Offset    Size    Description
  3027.      00h    WORD    country code (0000h if end of array)
  3028.      02h    WORD    code page
  3029.      04h    WORD    ??? (0000h)
  3030.      06h  7 WORDs    offsets in file for data tables for subfunctions
  3031.               01h-07h
  3032.  var    var    country information
  3033. --------U-2F14FF-----------------------------
  3034. INT 2F U - DR-DOS 5.0 NLSFUNC - PREPARE CODE PAGE
  3035.     AX = 14FFh
  3036.     BX = code page
  3037. Return: AX = ???
  3038.     ZF set if AX=0000h
  3039. Notes:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  3040.       or FFh on entry.
  3041.     passes codepage preparation request to each character device supporting
  3042.       the generic IOCTL call
  3043. SeeAlso: AX=14FEh,INT 21/AX=440Ch,INT 21/AX=6602h
  3044. --------U-2F1500-----------------------------
  3045. INT 2F - DOS 4.00 GRAPHICS.COM - INSTALLATION CHECK
  3046.     AX = 1500h
  3047. Return: AX = FFFFh
  3048.     ES:DI -> ??? (graphics data?)
  3049. Note:    this installation check conflicts with the CD-ROM Extensions
  3050.       installation check; moved to AX=AC00h in later versions
  3051. SeeAlso: AX=AC00h
  3052. --------d-2F1500BX0000-----------------------
  3053. INT 2F - CD-ROM - INSTALLATION CHECK
  3054.     AX = 1500h
  3055.     BX = 0000h
  3056. Return: BX = number of CD-ROM drive letters used
  3057.     CX = starting drive letter (0=A:)
  3058. Notes:    this installation check DOES NOT follow the format used by other
  3059.       software
  3060.     this installation check conflicts with the DOS 4.00 GRAPHICS.COM
  3061.       installation check
  3062. SeeAlso: INT 2F/AX=D000h/BX=4D44h"Lotus"
  3063. --------d-2F1501-----------------------------
  3064. INT 2F - CD-ROM - GET DRIVE DEVICE LIST
  3065.     AX = 1501h
  3066.     ES:BX -> buffer to hold drive letter list (5 bytes per drive letter)
  3067. Return: buffer filled, for each drive letter
  3068.       BYTE    subunit number in driver
  3069.       DWORD address of device driver header
  3070. --------d-2F1502-----------------------------
  3071. INT 2F - CD-ROM - GET COPYRIGHT FILE NAME
  3072.     AX = 1502h
  3073.     ES:BX -> 38-byte buffer for name of copyright file
  3074.     CX = drive number (0=A:)
  3075. Return: CF set if drive is not a CD-ROM drive
  3076.         AX = 000Fh (invalid drive)
  3077.     CF clear if successful
  3078. SeeAlso: AX=1503h
  3079. --------d-2F1503-----------------------------
  3080. INT 2F - CD-ROM - GET ABSTRACT FILE NAME
  3081.     AX = 1503h
  3082.     ES:BX -> 38-byte buffer for name of abstract file
  3083.     CX = drive number (0=A:)
  3084. Return: CF set if drive is not a CD-ROM drive
  3085.         AX = 000Fh (invalid drive)
  3086.     CF clear if successful
  3087. SeeAlso: AX=1502h,AX=1504h
  3088. --------d-2F1504-----------------------------
  3089. INT 2F - CD-ROM - GET BIBLIOGRAPHIC DOC FILE NAME
  3090.     AX = 1504h
  3091.     ES:BX -> 38-byte buffer for name of bibliographic documentation file
  3092.     CX = drive number (0=A:)
  3093. Return: CF set if drive is not a CD-ROM drive
  3094.         AX = 000Fh (invalid drive)
  3095.     CF clear if successful
  3096. SeeAlso: AX=1502h,AX=1503h
  3097. --------d-2F1505-----------------------------
  3098. INT 2F - CD-ROM - READ VTOC
  3099.     AX = 1505h
  3100.     ES:BX -> 2048-byte buffer
  3101.     CX = drive number (0=A:)
  3102.     DX = sector index (0=first volume descriptor,1=second,...)
  3103. Return: CF set on error
  3104.         AX = error code (15=invalid drive,21=not ready)
  3105.     CF clear if successful
  3106.         AX = volume descriptor type (1=standard,FFh=terminator,0=other)
  3107. --------d-2F1506-----------------------------
  3108. INT 2F - CD-ROM - TURN DEBUGGING ON
  3109.     AX = 1506h
  3110.     BX = debugging function to enable
  3111. Note:    reserved for development
  3112. SeeAlso: AX=1507h
  3113. --------d-2F1507-----------------------------
  3114. INT 2F - CD-ROM - TURN DEBUGGING OFF
  3115.     AX = 1507h
  3116.     BX = debugging function to disable
  3117. Note:    reserved for development
  3118. SeeAlso: AX=1506h
  3119. --------d-2F1508-----------------------------
  3120. INT 2F - CD-ROM - ABSOLUTE DISK READ
  3121.     AX = 1508h
  3122.     ES:BX -> buffer
  3123.     CX = drive number (0=A:)
  3124.     SI:DI = starting sector number
  3125.     DX = number of sectors to read
  3126. Return: CF set on error
  3127.         AL = error code (15=invalid drive,21=not ready)
  3128.     CF clear if successful
  3129. SeeAlso: AX=1509h
  3130. --------d-2F1509-----------------------------
  3131. INT 2F - CD-ROM - ABSOLUTE DISK WRITE
  3132.     AX = 1509h
  3133.     ES:BX -> buffer
  3134.     CX = drive number (0=A:)
  3135.     SI:DI = starting sector number
  3136.     DX = number of sectors to write
  3137. Note:    corresponds to INT 26h and is currently reserved and nonfunctional
  3138. SeeAlso: AX=1508h
  3139. --------d-2F150A-----------------------------
  3140. INT 2F - CD-ROM - RESERVED
  3141.     AX = 150Ah
  3142. --------d-2F150B-----------------------------
  3143. INT 2F - CD-ROM v2.00+ - DRIVE CHECK
  3144.     AX = 150Bh
  3145.     CX = drive number (0=A:)
  3146. Return: BX = ADADh if MSCDEX.EXE installed
  3147.         AX = support status
  3148.             0000h if drive not supported
  3149.         nonzero if supported
  3150. SeeAlso: AX=150Dh
  3151. --------d-2F150C-----------------------------
  3152. INT 2F - CD-ROM v2.00+ - GET MSCDEX.EXE VERSION
  3153.     AX = 150Ch
  3154. Return: BH = major version
  3155.     BL = minor version
  3156. Note:    MSCDEX.EXE versions prior to 2.00 return BX=0
  3157. --------d-2F150D-----------------------------
  3158. INT 2F - CD-ROM v2.00+ - GET CD-ROM DRIVE LETTERS
  3159.     AX = 150Dh
  3160.     ES:BX -> buffer for drive letter list (1 byte per drive)
  3161. Return: buffer filled with drive numbers (0=A:).  Each byte corresponds
  3162.     to the drive in the same position for function 1501h
  3163. SeeAlso: AX=150Bh
  3164. --------d-2F150E-----------------------------
  3165. INT 2F - CD-ROM v2.00+ - GET/SET VOLUME DESCRIPTOR PREFERENCE
  3166.     AX = 150Eh
  3167.     BX = subfunction
  3168.         00h get preference
  3169.         DX = 0000h
  3170.         Return: DX = preference settings
  3171.         01h set preference
  3172.         DH = volume descriptor preference
  3173.             01h = primary volume descriptor
  3174.             02h = supplementary volume descriptor
  3175.         DL = supplementary volume descriptor preference
  3176.             01h = shift-Kanji
  3177.     CX = drive number (0=A:)
  3178. Return: CF set on error
  3179.         AX = error code (15=invalid drive,1=invalid function)
  3180.     CF clear if successful
  3181. --------d-2F150F-----------------------------
  3182. INT 2F - CD-ROM v2.00+ - GET DIRECTORY ENTRY
  3183.     AX = 150Fh
  3184.     CL = drive number (0=A:)
  3185.     CH bit 0 = copy flag
  3186.         clear if direct copy
  3187.         set if copy to structure which removes ISO/High Sierra diffs
  3188.     ES:BX -> ASCIZ path name
  3189.     SI:DI -> buffer for directory entry (see #1260)
  3190.          minimum 255 bytes for direct copy
  3191. Return: CF set on error
  3192.         AX = error code
  3193.     CF clear if successful
  3194.         AX = disk format (0=High Sierra,1=ISO 9660)
  3195.  
  3196. Format of CD-ROM directory entry (direct copy):
  3197. Offset    Size    Description    (Table 1260)
  3198.  00h    BYTE  length of directory entry
  3199.  01h    BYTE  length of XAR in Logical Block Numbers
  3200.  02h    DWORD LBN of data, Intel (little-endian) format
  3201.  06h    DWORD LBN of data, Motorola (big-endian) format
  3202.  0Ah    DWORD length of file, Intel format
  3203.  0Eh    DWORD length of file, Motorola format
  3204. ---High Sierra---
  3205.  12h  6 BYTEs date and time
  3206.  18h    BYTE  bit flags
  3207.  19h    BYTE  reserved
  3208. ---ISO 9660---
  3209.  12h  7 BYTEs date and time
  3210.  19h    BYTE  bit flags
  3211. ---both formats---
  3212.  1Ah    BYTE  interleave size
  3213.  1Bh    BYTE  interleave skip factor
  3214.  1Ch    WORD  volume set sequence number, Intel format
  3215.  1Eh    WORD  volume set sequence number, Motorola format
  3216.  20h    BYTE  length of file name
  3217.  21h  N BYTEs file name
  3218.     BYTE (optional) padding if filename is odd length
  3219.       N BYTEs system data
  3220.  
  3221. Format of CD-ROM directory entry (canonicalized):
  3222. Offset    Size    Description    (Table 1261)
  3223.  00h    BYTE    length of XAR in Logical Block Numbers
  3224.  01h    DWORD    Logical Block Number of file start
  3225.  05h    WORD    size of disk in logical blocks
  3226.  07h    DWORD    file length in bytes
  3227.  0Bh  7 BYTEs    date and time
  3228.  12h    BYTE    bit flags
  3229.  13h    BYTE    interleave size
  3230.  14h    BYTE    interleave skip factor
  3231.  15h    WORD    volume set sequence number
  3232.  17h    BYTE    length of file name
  3233.  18h 38 BYTEs    ASCIZ filename
  3234.  3Eh    WORD    file version number
  3235.  40h    BYTE    number of bytes of system use data
  3236.  41h 220 BYTEs    system use data
  3237. --------d-2F1510-----------------------------
  3238. INT 2F - CD-ROM v2.10+ - SEND DEVICE DRIVER REQUEST
  3239.     AX = 1510h
  3240.     CX = CD-ROM drive letter (0 = A, 1 = B, etc)
  3241.     ES:BX -> CD-ROM device driver request header (see #1236 at AX=0802h)
  3242. --------W-2F1600-----------------------------
  3243. INT 2F - MS Windows - WINDOWS ENHANCED MODE INSTALLATION CHECK
  3244.     AX = 1600h
  3245. Return: AL = status
  3246.         00h neither Windows 3.x enhanced mode nor Windows/386 2.x running
  3247.         01h Windows/386 2.x running
  3248.         80h XMS version 1 driver installed (neither Windows 3.x enhanced
  3249.           mode nor Windows/386 2.x running) (obsolete--see note)
  3250.         FFh Windows/386 2.x running
  3251.     AL = anything else
  3252.         AL = Windows major version number >= 3
  3253.         AH = Windows minor version number
  3254. Notes:    INT 2F/AH=16h comprises an API for non-Windows programs (DOS device
  3255.       drivers, TSRs, and applications) to cooperate with multitasking
  3256.       Windows/386 2.x and Windows 3.x and higher enhanced mode.
  3257.     certain calls are also supported in the Microsoft 80286 DOS extender in
  3258.       Windows standard mode
  3259.     this function served as the installation check and AX=1610h served to
  3260.       get the driver entry point for XMS version 1, which is now obsolete.
  3261.       Use AX=4300h and AX=4310h instead
  3262. SeeAlso: AX=160Ah,AX=1610h,AX=4300h,AX=4680h
  3263. Index:    installation check;XMS version 1
  3264. --------W-2F1602-----------------------------
  3265. INT 2F - MS Windows/386 2.x - GET API ENTRY POINT
  3266.     AX = 1602h
  3267. Return: ES:DI -> Windows/386 2.x API procedure entry point
  3268. Notes:    this interface is supported in Windows 3.x only for 2.x compatibility
  3269.     to get the current virtual machine (VM) ID in Windows/386 2.x:
  3270.         AX = 0000h
  3271.         ES:DI -> return address
  3272.         JUMP to address returned from INT 2F/AX=1602h
  3273.     After JUMP, at return address:
  3274.         BX = current VM ID.
  3275. SeeAlso: AX=C020h
  3276. --------W-2F1603-----------------------------
  3277. INT 2F - MS Windows/386 - GET INSTANCE DATA
  3278.     AX = 1603h
  3279. Return: AX = 5248h ('RH') if supported
  3280.         DS:SI -> Windows/386 instance data (see #1262)
  3281. Notes:    reportedly supported by RM Nimbus MS-DOS 3.3 kernel
  3282.     this function is called by DOSMGR when AX=1607h/BX=0015h is not
  3283.       supported, as is the case in DOS versions prior to 5.0
  3284.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  3285.       this function, DOSMGR's behavior, and instancing in general
  3286. SeeAlso: AX=1607h/BX=0015h
  3287.  
  3288. Format of Windows/386 instance data:
  3289. Offset    Size    Description    (Table 1262)
  3290.  00h    WORD    segment of IO.SYS (0000h = default 0070h)
  3291.  02h    WORD    offset in IO.SYS of STACKS data structure (DOS 3.2x)
  3292.         0000h if not applicable
  3293.  04h    WORD    number of instance data entries (max 32)
  3294.  06h    Array of instance data entries
  3295.     Offset    Size    Description
  3296.      00h    WORD    segment (0002h = DOS kernel)
  3297.      02h    WORD    offset
  3298.      04h    WORD    size
  3299. --------W-2F1605-----------------------------
  3300. INT 2F - MS Windows - WINDOWS ENHANCED MODE & 286 DOSX INIT BROADCAST
  3301.     AX = 1605h
  3302.     ES:BX = 0000h:0000h
  3303.     DS:SI = 0000h:0000h
  3304.     CX = 0000h
  3305.     DX = flags
  3306.         bit 0 = 0 if Windows enhanced-mode initialization
  3307.         bit 0 = 1 if Microsoft 286 DOS extender initialization
  3308.         bits 1-15 reserved (undefined)
  3309.     DI = version number (major in upper byte, minor in lower)
  3310. Return: CX = 0000h if okay for Windows to load
  3311.     CX = FFFFh (other registers unchanged) if Windows 3.0 in standard mode
  3312.     CX <> 0 if Windows should not load
  3313.     ES:BX -> startup info structure (see #1263)
  3314.     DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h
  3315. Notes:    the Windows enhanced mode loader and Microsoft 286 DOS extender will
  3316.       broadcast an INT 2F/AX=1605h call when initializing.    Any DOS device
  3317.       driver or TSR can watch for this broadcast and return the appropriate
  3318.       values.  If the driver or TSR returns CX <> 0, it is also its
  3319.       responsibility to display an error message.
  3320.     each handler must first chain to the prior INT 2F handler with
  3321.       registers unchanged before processing the call
  3322.     if the handler requires local data on a per-VM basis, it must store the
  3323.       returned ES:BX in the "next" field of a startup info structure and
  3324.       return a pointer to that structure in ES:BX
  3325.     a single TSR may set the V86 mode enable/disable callback; if DS:SI is
  3326.       already nonzero, the TSR must fail the initialization by setting CX
  3327.       nonzero
  3328.     MSD checks for Windows 3.0 running in standard mode by testing whether
  3329.       CX=FFFFh and other registers are unchanged on return
  3330. SeeAlso: AX=1606h,AX=1608h,AX=4B05h
  3331.  
  3332. Format of Windows Startup Information Structure:
  3333. Offset    Size    Description    (Table 1263)
  3334.  00h  2 BYTEs    major, minor version of info structure
  3335.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  3336.  06h    DWORD    pointer to ASCIZ name of virtual device file or 0000h:0000h
  3337.  0Ah    DWORD    virtual device reference data (see #1265)
  3338.         (only used if above nonzero)
  3339.  0Eh    DWORD    pointer to instance data records (see #1264) or 0000h:0000h
  3340.  
  3341. Format of one Instance Item in array:
  3342. Offset    Size    Description    (Table 1264)
  3343.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  3344.  04h    WORD    size of instance data
  3345.  
  3346. Format of Virtual Device Reference Data:
  3347. Offset    Size    Description    (Table 1265)
  3348.  00h    DWORD    physical address of ??? or 00000000h
  3349.  04h    DWORD    physical address of ??? table
  3350.  08h    DWORD    "DEST_PAGE" address to which pages must be mapped
  3351.  0Ch  N DWORDs    "SRC_PAGE" physical addresses of the pages
  3352.         00000000h = end of table
  3353. Note:    EMM386.EXE sets the first pointer to the start of the device driver
  3354.       chain, the second pointer to a field of 40h bytes followed by a
  3355.       16-bit offset to the end of the SRC_PAGE table, and DEST_PAGE to
  3356.       the start segment of the UMB area
  3357.  
  3358. (Table 1266)
  3359. Values Windows virtual mode enable/disable procedure is called with:
  3360.     AX = 0000h disable V86 mode
  3361.     AX = 0001h enable V86 mode
  3362.     interrupts disabled
  3363. Return: CF set on error
  3364.     CF clear if successful
  3365.     interrupts disabled
  3366. --------W-2F1606-----------------------------
  3367. INT 2F - MS Windows - WINDOWS ENHANCED MODE & 286 DOSX EXIT BROADCAST
  3368.     AX = 1606h
  3369.     DX = flags
  3370.         bit 0 = 0 if Windows enhanced-mode exit
  3371.         bit 0 = 1 if Microsoft 286 DOS extender exit
  3372.         bits 1-15 reserved (undefined)
  3373. Notes:    if the init broadcast fails (AX=1605h returned CX <> 0), then this
  3374.       broadcast will be issued immediately.
  3375.     this call will be issued in real mode
  3376. SeeAlso: AX=1605h,AX=1609h
  3377. --------W-2F1607-----------------------------
  3378. INT 2F - MS Windows - VIRTUAL DEVICE CALL OUT API
  3379.     AX = 1607h
  3380.     BX = virtual device ID (see INT 2F/AX=1684h)
  3381.     CX = (usually) callout subfunction
  3382. Return: (usually) AX,BX,CX,DX,ES contain results
  3383. Notes:    more of a convention than an API, this call specifies a standard
  3384.       mechanism for Windows enhanced-mode virtual devices (VxD's) to talk
  3385.       to DOS device drivers and TSRs
  3386.     see below for details on several virtual devices
  3387. SeeAlso: AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1607h/BX=0015h
  3388. SeeAlso: AX=1684h,AX=C020h
  3389. --------W-2F1607BX0006-----------------------
  3390. INT 2F - MS Windows - "V86MMGR" VIRTUAL DEVICE API
  3391.     AX = 1607h
  3392.     BX = 0006h (VxD identifier of "V86MMGR")
  3393.     CX = 0000h
  3394. Return: AX = status
  3395.         0000h if local A20 state changed
  3396.         1607h if A20 unchanged
  3397.         other if global A20 state changed
  3398. --------W-2F1607BX000C-----------------------
  3399. INT 2F - MS Windows - "VMD" VIRTUAL MOUSE DEVICE API
  3400.     AX = 1607h
  3401.     BX = 000Ch (VxD identifier of "VMD")
  3402. Return: CX = nonzero if mouse driver already virtualized
  3403. Note:    VMD (Virtual Mouse Driver) calls this and then checks whether CX is
  3404.       nonzero; if yes, it will not automatically virtualize the mouse
  3405.       driver.  This would be used if MOUSE.COM already virtualizes
  3406.       itself using the Windows API.
  3407. SeeAlso: AX=1607h/BX=0014h,AX=1607h/BX=0015h
  3408. ----------2F1607BX0010-----------------------
  3409. INT 2F C - MS Windows 3.1 - "BLOCKDEV" VIRTUAL HARD DISK DEVICE API
  3410.     AX = 1607h
  3411.     BX = 0010h (VxD identifier of "BLOCKDEV")
  3412.     CX = function
  3413.         0001h starting FastDisk compatibility tests
  3414.         0002h ending FastDisk compatibility tests
  3415.         0003h check if FastDisk installation allowed
  3416.         Return: CX = 0000h if allowed
  3417. Note:    this interface is called by the Windows FastDisk driver (such as
  3418.       WDCTRL) when it thinks that the INT 13h handler immediately below
  3419.       IO.SYS's INT 13h code is not in ROM; it should be supported by any
  3420.       program which hooks itself underneath IO.SYS's INT 13h code with
  3421.       INT 2F/AH=13h
  3422. SeeAlso: AX=1607h/BX=0014h,INT 2F/AH=13h
  3423. --------W-2F1607BX0014-----------------------
  3424. INT 2F - MS Windows - "VNETBIOS" VIRTUAL DEVICE API
  3425.     AX = 1607h
  3426.     BX = 0014h (VxD identifier of "VNETBIOS")
  3427. Return: ES:DI -> 128-byte table specifying VNETBIOS actions for each NetBIOS
  3428.         command code (see #1267)
  3429. Note:    VNETBIOS (Virtual NetBIOS) calls this function to determine whether
  3430.       the NetBIOS has an extensions Windows should know about
  3431. SeeAlso: AX=1607h/BX=000Ch,AX=1607h/BX=0010h,AX=1607h/BX=0015h
  3432.  
  3433. (Table 1267)
  3434. Values for VNETBIOS action code:
  3435.  00h    "VN_Unknown" unknown command
  3436.  04h    "VN_No_Map"  no memory mapping necessary
  3437.  08h    "VN_Map_In"  input buffer is quickly used, so no global mapping needed
  3438.  0Ch    "VN_Map_In"  output buffer is quickly used, so no global mapping needed
  3439.  10h    "VN_Map_In_Out"     buffer is quickly used, so no global mapping needed
  3440.  14h    "VN_Chain_Send"     the chain-send command
  3441.  18h    "VN_Cancel"    special case for cancel command
  3442.  1Ch    "VN_Buffer_In"    buffer is incoming
  3443.  20h    "VN_Buffer_Out" buffer is outgoing
  3444.  24h    "VN_Buffer_In_Out" buffer used for both incoming and outgoing data
  3445. --------D-2F1607BX0015-----------------------
  3446. INT 2F C - MS Windows - "DOSMGR" VIRTUAL DEVICE API
  3447.     AX = 1607h
  3448.     BX = 0015h (VxD identifier of "DOSMGR")
  3449.     CX = function
  3450.         0000h query instance processing
  3451.         DX = 0000h
  3452.         Return: CX = state
  3453.                 0000h not instanced
  3454.                 other instanced (DOS 5+ kernel returns 0001h)
  3455.                 DX = segment of DOS drivers or 0000h for
  3456.                     default of 0070h
  3457.                 ES:BX -> patch table (see #1269)
  3458.         0001h set patches in DOS
  3459.         DX = bit mask of patch requests (see #1268)
  3460.         Return: AX = B97Ch
  3461.             BX = bit mask of patches applied (see #1268)
  3462.             DX = A2ABh
  3463.         0002h remove patches in DOS (ignored by DOS 5.0 kernel)
  3464.         DX = bit mask of patch requests (see function 0001h)
  3465.         Return: CX = 0000h (DOS 5-6)
  3466.         Note:    return values are ignored by DOSMGR in Windows 3.1
  3467.         0003h get size of DOS data structures
  3468.         DX = bit mask of request (only one bit can be set)
  3469.             bit 0: Current Directory Structure size
  3470.         Return: if supported request:
  3471.                 AX = B97Ch
  3472.                 CX = size in bytes of requested structure
  3473.                 DX = A2ABh
  3474.             else:
  3475.                 CX = 0000h
  3476.                 all other registers preserved
  3477.         0004h determine instanced data structures
  3478.         Return: AX = B97Ch if supported
  3479.             DX = A2ABh if supported (DOS 5+ kernel returns 0000h)
  3480.             BX = bit mask of instanced items
  3481.                 bit 0: CDS
  3482.                 bit 1: SFT
  3483.                 bit 2: device list
  3484.                 bit 3: DOS swappable data area
  3485.         0005h get device driver size
  3486.         ES = segment of device driver
  3487.         Return: DX:AX = 0000h:0000h on error (not dev. driver segment)
  3488.             DX:AX = A2ABh:B97Ch if successful
  3489.                 BX:CX = size of device driver in bytes
  3490. Notes:    DOSMGR (DOS Manager) will check whether the OEM DOS/BIOS data has
  3491.       been instanced via this API and will not perform its own default
  3492.       instancing of the normal DOS/BIOS data if so; if this API is not
  3493.       supported, DOSMGR will also try to access instancing data through
  3494.       INT 2F/AX=1603h
  3495.     these functions are supported by the DOS 5+ kernel; DOSMGR contains
  3496.       tables of instancing information for earlier versions of DOS
  3497.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  3498.       DOSMGR's behavior and instancing in general
  3499. SeeAlso: AX=1603h,AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1684h
  3500.  
  3501. Bitfields for DOSMGR patch requests:
  3502. Bit(s)    Description    (Table 1268)
  3503.  0    enable critical sections
  3504.  1    NOP setting/checking user ID
  3505.  2    turn INT 21/AH=3Fh on STDIN into polling loop
  3506.  3    trap stack fault in "SYSINIT" to WIN386
  3507.  4    BIOS patch to trap "Insert disk X:" to WIN386
  3508.  
  3509. Format of DOSMGR patch table:
  3510. Offset    Size    Description    (Table 1269)
  3511.  00h  2 BYTEs    DOS version (major, minor)
  3512.  02h    WORD    offset in DOS data segment of "SAVEDS"
  3513.  04h    WORD    offset in DOS data segment of "SAVEBX"
  3514.  06h    WORD    offset in DOS data segment of InDOS flag
  3515.  08h    WORD    offset in DOS data segment of User ID word
  3516.  0Ah    WORD    offset in DOS data segment of "CritPatch" table to enable
  3517.           critical section calls (see INT 2A/AH=80h)
  3518.  0Ch    WORD    (DOS 5+ only) offset in DOS data segment of "UMB_HEAD",
  3519.           containing segment of last MCB in conventional memory
  3520. --------E-2F1607BX22C0-----------------------
  3521. INT 2F - Rational Systems DOS/4GW - ???
  3522.     AX = 1607h
  3523.     BX = 22C0h
  3524.     ???
  3525. Return: ???
  3526. SeeAlso: INT 15/AX=BF02h,INT 15/AX=BF04h
  3527. --------W-2F1608-----------------------------
  3528. INT 2F C - MS Windows - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST
  3529.     AX = 1608h
  3530. Notes:    called after all installable devices have been initialized
  3531.     real-mode software may be called between the Windows enhanced-mode init
  3532.       call (AX=1605h) and this call; the software must detect this
  3533.       situation
  3534. SeeAlso: AX=1605h,AX=1609h
  3535. --------W-2F1609-----------------------------
  3536. INT 2F C - MS Windows - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST
  3537.     AX = 1609h
  3538. Note:    called at the beginning of a normal exit sequence; not made in the
  3539.       event of a fatal system crash
  3540. SeeAlso: AX=1606h,AX=1608h
  3541. --------W-2F160A-----------------------------
  3542. INT 2F - MS Windows 3.1 - IDENTIFY WINDOWS VERSION AND TYPE
  3543.     AX = 160Ah
  3544. Return: AX = 0000h if call supported
  3545.         BX = version (BH=major, BL=minor)
  3546.         CX = mode (0002h = standard, 0003h = enhanced)
  3547. SeeAlso: AX=1600h,AX=4680h
  3548. --------W-2F160B-----------------------------
  3549. INT 2F - MS Windows 3.1 - IDENTIFY TSRs
  3550.     AX = 160Bh
  3551.     ES:DI -> communication structure (see #1270) or 0000h:0000h
  3552. Return: ES:DI -> communication structure
  3553. Desc:    this call allows Windows-aware TSRs to make themselves known to
  3554.       Windows.
  3555. Note:    the TSR should allocate a communication structure, place the given
  3556.       ES:DI pointer in the first field, and return a pointer to the new
  3557.       structure
  3558. SeeAlso: AX=1605h,AX=160Ch,AX=4B01h,AX=4B05h
  3559.  
  3560. Format of TSR-to-Windows communication structure:
  3561. Offset    Size    Description    (Table 1270)
  3562.  00h    DWORD    pointer to next structure
  3563.  04h    WORD    PSP segment
  3564.  06h    WORD    API version ID (0100h)
  3565.  08h    WORD    EXEC flags
  3566.         bit 0: "WINEXEC"
  3567.         bit 1: "LOADLIBRARY"
  3568.         bit 2: "OPENDRIVER"
  3569.  0Ah    WORD    "exec_cmd_show"
  3570.  0Ch    DWORD    "exec_cmd"
  3571.  10h  4 BYTEs    reserved (0)
  3572.  14h    DWORD    pointer to TSR ID block (see #1271)
  3573.  18h    DWORD    pointer to TSR data block or 0000h:0000h
  3574.  
  3575. Format of Norton Utilities 6.0 TSR ID block:
  3576. Offset    Size    Description    (Table 1271)
  3577.  00h    WORD    length of name string
  3578.  02h  N BYTEs    name of TSR's executable
  3579. --------W-2F160C-----------------------------
  3580. INT 2F - MS Windows 3.1 - DETECT ROMs
  3581.     AX = 160Ch
  3582.     ???
  3583. Return: ???
  3584. Note:    used by ROM Windows
  3585. SeeAlso: AX=160Bh
  3586. --------m-2F1610-----------------------------
  3587. INT 2F - XMS v1.x only - GET DRIVER ADDRESS
  3588.     AX = 1610h
  3589.     details unavailable
  3590. Note:    this function and AX=1600h were only used in XMS version 1 and are now
  3591.       obsolete.  Use AX=4300h and AX=4310h instead
  3592. SeeAlso: AX=1600h,AX=4310h
  3593. --------W-2F1680-----------------------------
  3594. INT 2F - MS Windows, DPMI, various - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE
  3595.     AX = 1680h
  3596. Return: AL = status
  3597.         00h if the call is supported
  3598.         80h (unchanged) if the call is not supported
  3599. Notes:    programs can use this function in idle loops to enhance performance
  3600.       under multitaskers; this call is supported by MS Windows 3.0, DOS 5+,
  3601.       DPMI 1.0+, and will be supported in OS/2 2.0 for multitasking DOS
  3602.       applications
  3603.     does not block the program; it just gives up the remainder of the time
  3604.       slice
  3605.     should not be used by Windows-specific programs
  3606.      when called very often without intermediate screen output under WIN 3+,
  3607.        the VM will go into an idle-state and will not receive the next slice
  3608.        before 8 seconds. This time can be changed in SYSTEM.INI through
  3609.        "IdleVMWakeUpTime=<seconds>". Setting to zero results in a long wait.
  3610. SeeAlso: INT 15/AX=1000h,INT 15/AX=5305h,INT 21/AH=89h,INT 7A/BX=000Ah
  3611. --------W-2F1681-----------------------------
  3612. INT 2F - MS Windows 3+ - BEGIN CRITICAL SECTION
  3613.     AX = 1681h
  3614. Notes:    used to prevent a task switch from occurring
  3615.     should be followed by an INT 2F/AX=1682h call as soon as possible
  3616.     nested calls are allowed, and must be followed by an appropriate number
  3617.       of "end critical section" calls
  3618.     not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and
  3619.       increment by hand.
  3620. SeeAlso: AX=1682h,INT 15/AX=101Bh,INT 21/AH=34h
  3621. --------W-2F1682-----------------------------
  3622. INT 2F - MS Windows 3+ - END CRITICAL SECTION
  3623.     AX = 1682h
  3624. Notes:    not supported in Windows/386 2.x.  Get InDOS flag with INT 21/AH=34h
  3625.       and decrement by hand, taking care not to decrement InDOS flag
  3626.       through zero
  3627. SeeAlso: AX=1681h,INT 15/AX=101Ch,INT 21/AH=34h
  3628. --------W-2F1683-----------------------------
  3629. INT 2F - MS Windows 3+ - GET CURRENT VIRTUAL MACHINE ID
  3630.     AX = 1683h
  3631. Return: BX = current virtual machine (VM) ID
  3632. Notes:    Windows itself currently runs in VM 1, but this can't be relied upon
  3633.     VM IDs are reused when VMs are destroyed
  3634.     an ID of 0 will never be returned
  3635. SeeAlso: AX=1684h,AX=1685h,AX=168Bh
  3636. --------W-2F1684-----------------------------
  3637. INT 2F - MS Windows - GET DEVICE API ENTRY POINT
  3638.     AX = 1684h
  3639.     BX = virtual device (VxD) ID (see #1272)
  3640.     ES:DI = 0000h:0000h
  3641. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  3642. Note:    some Windows enhanced-mode virtual devices provide services that
  3643.       applications can access.  For example, the Virtual Display Device
  3644.       (VDD) provides an API used in turn by WINOLDAP.
  3645. SeeAlso: AX=1683h
  3646.  
  3647. (Table 1272)
  3648. Values for MS Windows VxD ID:
  3649. Value    Name   CallOut V86 PM    Description
  3650.  0001h    VMM        N  N    Virtual Machine Manager
  3651.  0002h    Debug
  3652.  0003h    VPICD        Y  Y    Virtual Prog. Interrupt Controller (PIC) Device
  3653.  0004h    VDMAD        N  N    Virtual Direct Memory Access (DMA) Device
  3654.  0005h    VTD        Y  Y    Virtual Timer Device
  3655.  0006h    V86MMGR        Y    N  N    Virtual 8086 Mode Device
  3656.  0007h    PageSwap    N  N    Paging Device
  3657.  0008h    Parity        N  N    Parity-check trapper
  3658.  0009h    Reboot        N  Y    Ctrl-Alt-Del handler
  3659.  000Ah    VDD        N  Y    Virtual Display Device (GRABBER)
  3660.  000Bh    VSD        N  N    Virtual Sound Device
  3661.  000Ch    VMD        Y    Y  Y    Virtual Mouse Device
  3662.  000Dh    VKD        N  Y    Virtual Keyboard Device
  3663.  000Eh    VCD        N  Y    Virtual COMM Device
  3664.  000Fh    VPD            Virtual Printer Device
  3665.  0010h    VHD            Virtual Hard Disk Device (Windows 3.0)
  3666.  0010h    BLOCKDEV    N  N    Virtual Hard Disk Device (Windows 3.1)
  3667.  0010h    IOS        N  Y    (Chicago)
  3668.  0011h    VMCPD        Y  Y    Virtual Math CoProcessor Device
  3669.  0012h    EBIOS        N  N    Reserve EBIOS page (e.g., on PS/2)
  3670.  0013h    BIOSXLAT    N  N    Map ROM BIOS API between prot & V86 mode
  3671.  0014h    VNETBIOS    Y    N  N    Virtual NetBIOS Device
  3672.  0015h    DOSMGR        Y    Y  N    DOS data instancing
  3673.  0016h    WINLOAD
  3674.  0017h    SHELL        N  Y
  3675.  0018h    VMPOLL        N  N
  3676.  0019h    VPROD
  3677.  001Ah    DOSNET        N  N    assures network integrity across VMs
  3678.  001Ah    VNETWARE    Y  Y    Novell NetWare DOSNET replacement
  3679.  001Bh    VFD        N  N    Virtual Floppy Device
  3680.  001Ch    VDD2            Secondary display adapter
  3681.  001Ch    LoadHi        N  N    Netroom LoadHi Device (RMLODHI.VXD)
  3682.  001Ch    LoadHi        N  N    386MAX LoadHi Device (386MAX.VXD)
  3683.  001Ch    LoadHi        N  N    Win386 LoadHi Device (EMM386.EXE)
  3684.  001Dh    WINDEBUG    N  Y
  3685.  001Dh    TDDebug        N  Y
  3686.  001Eh    TSRLoad            TSR instance utility
  3687.  001Fh    BiosHook        BIOS interrupt hooker VxD
  3688.  0020h    Int13        N    N  N
  3689.  0021h    PageFile    N  Y    Paging File device
  3690.  0022h    SCSI
  3691.  0023h    MCA_POS
  3692.  0024h    SCSIFD            SCSI FastDisk device
  3693.  0025h    VPEND            Pen device
  3694.  0026h    APM            Advanced Power Management
  3695.  0027h    VXDLDR        Y  Y    (Chicago)
  3696.  002Ah    VWIN32        N  Y    (Chicago)
  3697.  002Bh    VCOMM        Y  Y    (Chicago)
  3698.  0030h    MACH32        N  Y    ATI Mach32 video card
  3699.  0033h    CONFIGMG    Y  Y    (Chicago)
  3700.  0033h    EDOS        N  N    Windows DOS Box Enhancer by Mom's Software
  3701.  0036h    VFBACKUP    Y  Y    (Chicago)
  3702.  0038h    VCOND        Y  Y    (Chicago)
  3703.  0051h    ISAPNP        N  N
  3704.  008Dh    ESDI_506    N  N    (Chicago)
  3705.  0090h    voltrack    N  N
  3706.  00FDh    FAKEIDE        N  N    (Chicago)
  3707.  0102h    CV1        N  N    Microsoft C/C++ 7.00+ CodeView for Windows
  3708.  0200h    VIPX        Y  Y    NetWare Virtual IPX Driver
  3709.  0201h    VNWLSERV    N  N    NetWare Lite 1.1 Server (SERVER.EXE)
  3710.  0202h    WINICE        Y  Y    SoftICE/W
  3711.  0203h    VCLIENT        N  Y    NetWare Lite 1.1+ Client
  3712.  0205h    VCAFT        N  N    Novell Virtual CAFT Driver (LANalyzer for Win)
  3713.  0206h    VTXRX        N  N    Novell Virtual TXRX Driver (LANalyzer for Win)
  3714.  0234h    VCOMMUTE    Y  Y    PC Tools Commute
  3715.  0442h    VTDAPI        N  Y    MMSys Win386 VTAPI Device
  3716.  0444h    VADMAD            Autoinitialize DMA (Windows 3.0)
  3717.  0445h    VSBD        Y  Y    WinResKit: Sound Blaster Device
  3718.  0460h    UNIMODEM    N  Y
  3719.  0483h    VSHARE        N  N    Windows for Workgroups Virtual SHARE
  3720.  0484h    IFSMgr        Y  N    (Chicago) installable file system manager
  3721.  0486h    VFAT        Y  Y    (Chicago)
  3722.  048Bh    VCACHE        Y  Y
  3723.  1021h    VMB        Y  Y    Microsoft C/C++ 7.00 WXSRVR
  3724.  1022h    Vpfd        Y  Y    Microsoft C/C++ 7.00
  3725.  1025h    MMD        Y  Y    Microsoft C/C++ 8.00, Visual C/C++ 1.00
  3726.  21EAh    VADLIBWD    N  Y    Adlib Waveform Driver by John Ridges
  3727.  2200h    VFINTD        Y  Y    Norton VFINTD (Norton Desktop)
  3728.  22C0h    ???        Y        Rational Systems DOS/4GW ??? 
  3729.  2402h    ZMAX        N  N    Qualitas 386MAX v7 DOSMAX handler
  3730.  24A0h    VNSS        N  Y    Norton Screen Saver (Norton Desktop)
  3731.  24A1h    VNDWD        Y  Y    Norton VNDWD Device (Norton Desktop)
  3732.  2640h    VASBID        N  Y    WinResKit: Artisoft Sounding Board Device
  3733.  2860h    COMMTASK    N    N  Y    Windows 386-mode preemptive tasker by James
  3734.                   A. Kenemuth of Interabang Computing
  3735.  28C0h    VXD        N    Y  Y    Generic VxD for real and protected mode by
  3736.                   Andrew Schulman in MSJ February 1993
  3737.  292Dh    VSBPD        Y  Y    Sound Blaster Pro
  3738.  3098h    VstlthD        N    N  N    for QEMM Stealth ROM mode
  3739.  310Eh    WPS        N  N    MS DevNet CD-ROM: Windows Process Status
  3740.  7FE0h    VWFD        N    Y  Y    ??? by Neil Sandlin of Microsoft
  3741.  7FE1h    VWATCHD        N    Y  Y    basic driver w/ no functionality except tracing
  3742.                   by Keith Jin of Microsoft PSS
  3743.  7FE5h    VFINTD        N    Y  Y    Virtual Floppy Interrupt trapper by Neil
  3744.                   Sandlin of Microsoft
  3745.  7FE7h    VMPAGES        N    Y  Y    demonstration of exporting VxD services, by
  3746.                   Neil Sandlin of Microsoft
  3747.  7FE9h    VIdleD        N    N  N    demonstration of Call_When_Idle function, by
  3748.                   Bernie McIlroy of Microsoft
  3749.  7FEBh    VMIOD        N    N  N    Virtual Monitor I/O Traffic Device, by Neil
  3750.                   Sandlin of Microsoft
  3751.  7FEDh    VMIRQD        N    N  N    Virtual Monitor IRQ Traffic Device, by Neil
  3752.                   Sandlin of Microsoft
  3753.  8888h    VbillD            Bill Potvin II's for reversing Compaq LTE video
  3754. Note:    The high bit of the VxD ID is reserved for future use. The
  3755.     next 10 bits are the OEM number which is assigned by Microsoft. The
  3756.     low 5 bits are the device number.  Naturally, this scheme has not
  3757.     been adhered to since there are now more than 32 different VxDs.
  3758.  
  3759. (Table 1273)
  3760. Call VTD.386 entry point with:
  3761.     AX = 0000h get VTD version number
  3762.         Return: AH = major version
  3763.             AL = minor version
  3764.     AX = 0100h get current clock tick time
  3765.         Return: EDX:EAX = clock tick time in 840ns units since Windows was
  3766.                 started
  3767.     AX = 0101h get current system time in milliseconds
  3768.         Return: EAX = time in milliseconds that Windows has been running
  3769.     AX = 0102h get current virtual machine time
  3770.         Return: EAX = cumulative amount of time the virtual machine has
  3771.             been active, in milliseconds
  3772. Note:    should only be called directly when TOOLHELP.DLL TimerCount() cannot
  3773.       be called
  3774.  
  3775. (Table 1274)
  3776. Call DOSMGR entry point with:
  3777.     AX = 0000h get DOSMGR version
  3778.         Return: CF clear
  3779.             AX = version (AH = major, AL = minor)
  3780.     AX = 0001h set critical focus
  3781.         Return: CF clear
  3782.     AX = 0002h crash current virtual machine
  3783.         Return: never
  3784.         Note:   displays message box stating that "application has been
  3785.               stopped by the DOSMGR device"
  3786.     AX = 0003h enter critical section
  3787.         Note:   this function assumes that the code for INT 2A/AX=8001h
  3788.               and INT 2A/AX=8002h have been modified for Windows
  3789.     AX = 0004h get VM ID byte
  3790.         Return: CF clear if successful
  3791.             ES:DI -> VM ID byte
  3792.             CF set on error
  3793.         Note:   this function fails if the INT 2A modifications have not
  3794.               yet been applied
  3795.     AX = 0005h inform Windows of possible media change
  3796.         BL = drive number (00h=A:)
  3797.         Return: CF clear if successful
  3798.             CF set on error
  3799.  
  3800. (Table 1275)
  3801. Call VADMAD entry point with:
  3802.     DX = operation
  3803.         0000h set VADMAD mode
  3804.         AX = desired mode
  3805.         0001h set VADMAD channel
  3806.         AX = desired channel
  3807. Note:    after setting mode/channel, start the DMA operation with an OUT to
  3808.       I/O port 0Bh (channels 0-3) or D6h (channels 4-7)
  3809.  
  3810. (Table 1276)
  3811. Call VbillD entry point with:
  3812.     AX = function
  3813.         0001h set reverse video
  3814.         0002h set normal video
  3815. Return: ???
  3816. --------W-2F1685-----------------------------
  3817. INT 2F - MS Windows - SWITCH VMs AND CALLBACK
  3818.     AX = 1685h
  3819.     BX = VM ID of virtual machine to switch to
  3820.     CX = flags (see #1277)
  3821.     DX:SI = priority boost (see VMM.INC)
  3822.     ES:DI -> FAR procedure to callback
  3823. Return: CF set on error
  3824.         AX = error code
  3825.         01h invalid VM ID
  3826.         02h invalid priority boost
  3827.         03h invalid flags
  3828.     CF clear if successful
  3829.         event will be or has been called
  3830. Notes:    some DOS devices, such as networks, need to call functions in a
  3831.       specific VM. This call forces the appropriate VM to be installed.
  3832.     the callback procedure must preserve all registers and return with IRET
  3833. SeeAlso: AX=1683h,INT 15/AX=1117h
  3834.  
  3835. Bitfields for VM switching flags:
  3836. Bit(s)    Description    (Table 1277)
  3837.  0    wait until interrupts enabled
  3838.  1    wait until critical section unowned
  3839.  2-15    reserved (zero)
  3840. --------E-2F1686-----------------------------
  3841. INT 2F - DOS Protected-Mode Interface - DETECT MODE
  3842.     AX = 1686h
  3843. Return: AX = 0000h if operating in protected mode under DPMI (INT 31 available)
  3844.     AX nonzero if in real/V86 mode or no DPMI (INT 31 not available)
  3845. SeeAlso: AX=1687h
  3846. --------E-2F1687-----------------------------
  3847. INT 2F - DOS Protected-Mode Interface - INSTALLATION CHECK
  3848.     AX = 1687h
  3849. Return: AX = 0000h if installed
  3850.         BX = flags
  3851.         bit 0: 32-bit programs supported
  3852.         CL = processor type (02h=80286, 03h=80386, 04h=80486)
  3853.         DH = DPMI major version
  3854.         DL = two-digit DPMI minor version (binary)
  3855.         SI = number of paragraphs of DOS extender private data
  3856.         ES:DI -> DPMI mode-switch entry point
  3857.     AX nonzero if not installed
  3858. SeeAlso: AX=1686h,AX=43E0h,AX=DE01h/BX=4450h,AX=FB42h/BX=0001h
  3859. SeeAlso: INT 31/AX=0400h,INT 31/AX=5702h,INT 38/AH=10h
  3860.  
  3861. (Table 1278)
  3862. Call DPMI mode switch entry point with:
  3863.     AX = flags
  3864.         bit 0: set if 32-bit program
  3865.     ES = real mode segment of buffer for DPMI private data (ignored if
  3866.         SI was zero)
  3867. Return: CF set on error
  3868.         program still in real mode
  3869.         AX = error code (DPMI 1.0+)
  3870.            8011h unable to allocate all necessary descriptors
  3871.            8021h 32-bit program specified, but 16-bit DPMI host
  3872.     CF clear if successful
  3873.         CS = 16-bit selector corresponding to real-mode CS
  3874.         SS = selector corresponding to real-mode SS (64K limit)
  3875.         DS = selector corresponding to real-mode DS (64K limit)
  3876.         ES = selector to program's PSP (100h byte limit)
  3877.         FS = GS = 0
  3878.         high word of ESP = 0 if 32-bit program
  3879.         program now in protected mode
  3880. Note:    this entry point is only called for the initial switch to protected
  3881.       mode
  3882. --------W-2F1688-----------------------------
  3883. INT 2F U - MS Windows 3.0, 386MAX v6.01 - GET SELECTOR TO LDT
  3884.     AX = 1688h
  3885. Return: AX = status??? (0000h for 386MAX)
  3886.     BX = selector for LDT???
  3887. --------W-2F1689-----------------------------
  3888. INT 2F U - MS Windows 3.0+ - KERNEL IDLE CALL
  3889.     AX = 1689h
  3890.     ???
  3891. Return: ???
  3892. SeeAlso: AX=1680h,INT 15/AX=1000h,INT 28
  3893. --------E-2F168A-----------------------------
  3894. INT 2F - DPMI 0.9+ - GET VENDOR-SPECIFIC API ENTRY POINT
  3895.     AX = 168Ah
  3896.     DS:(E)SI = selector:offset of ASCIZ vendor name
  3897. Return: AL = status
  3898.         00h successful
  3899.            ES:(E)DI -> extended API entry point
  3900.         8Ah unsuccessful
  3901. Notes:    the vendor name is used to determine which entry point to return; it is
  3902.       case-sensitive
  3903.     available in protected mode only
  3904.     32-bit applications use ESI and EDI, 16-bit applications use SI and DI
  3905.     this call is present but not documented for DPMI 0.9
  3906.     the Borland C++ 3.1 DPMILOAD does not handle requests for entry points
  3907.       other than the MS-DOS one gracefully, producing an unhandled
  3908.       exception report; this has been fixed in the Borland Pascal 7 version
  3909. SeeAlso: INT 31/AX=0A00h,INT 31/AH=57h
  3910.  
  3911. (Table 1279)
  3912. Values for DPMI vendor-specific API names:
  3913.  "MS-DOS"    ??? and 386MAX v6.00+
  3914.  "386MAX"    386MAX v6.00+
  3915.  "HELIX_DPMI"    Helix Netroom's DPMI server
  3916.  "Phar Lap"    Phar Lap 286|DOS-Extender RUN286
  3917.  
  3918. (Table 1280)
  3919. Call Phar Lap RUN286 entry point with:
  3920.     AX = 0000h (function "load MSW")
  3921.     BX = new value for MSW register (low word of CR0)
  3922. Return: ???
  3923. --------W-2F168B-----------------------------
  3924. INT 2F - MS Windows 3.1 - SET FOCUS TO SPECIFIED VIRTUAL MACHINE
  3925.     AX = 168Bh
  3926.     BX = virtual machine ID (see AX=1683h), 0000h for current DOS box
  3927. Return: AL = 00h if focus set to specified VM
  3928. Notes:    documented on the Microsoft Developer's Network CD-ROM
  3929.      if the VM is a windowed DOS box, it will be set to full screen
  3930. SeeAlso: AX=1683h
  3931. --------W-2F168C-----------------------------
  3932. INT 2F - MS Windows 3.1 - RESTART COMMAND
  3933.     AX = 168Ch
  3934.     ???
  3935. Return: ???
  3936. Note:    WIN.COM executes specified application
  3937. --------W-2F1700-----------------------------
  3938. INT 2F - MS Windows "WINOLDAP" - IDENTIFY WinOldAp VERSION
  3939.     AX = 1700h
  3940. Return: AX = 1700h if this version of WINOLDAP doesn't support clipboard
  3941.     AX <> 1700h
  3942.         AL = WINOLDAP major version
  3943.         AH = WINOLDAP minor version
  3944. Program: WinOldAp (WINOLDAP.MOD) is a Microsoft Windows extension supporting
  3945.       "old" (character-mode) application access to Dynamic Data Exchange,
  3946.       menus, and the Windows clipboard.
  3947. Note:    this installation check DOES NOT follow the format used by other
  3948.       software of returning AL=FFh
  3949. SeeAlso: AX=1701h,AX=4601h
  3950. Index:    installation check;WINOLDAP
  3951. --------W-2F1701-----------------------------
  3952. INT 2F - MS Windows "WINOLDAP" - OPEN CLIPBOARD
  3953.     AX = 1701h
  3954. Return: AX = status
  3955.         nonzero success
  3956.         0000h   clipboard is already open
  3957. SeeAlso: AX=1700h,AX=1702h,AX=1703h,AX=1704h
  3958. --------W-2F1702-----------------------------
  3959. INT 2F - MS Windows "WINOLDAP" - EMPTY CLIPBOARD
  3960.     AX = 1702h
  3961. Return: AX = status
  3962.         nonzero clipboard has been emptied
  3963.         0000h   failure
  3964. SeeAlso: AX=1700h,AX=1701h,AX=1703h,AX=1704h
  3965. --------W-2F1703-----------------------------
  3966. INT 2F - MS Windows "WINOLDAP" - SET CLIPBOARD DATA
  3967.     AX = 1703h
  3968.     DX = clipboard format supported by WinOldAp (see #1281)
  3969.     ES:BX -> data (see #1282,#1283)
  3970.     SI:CX = size of data
  3971. Return: AX = status
  3972.         nonzero data copied into the Clipboard
  3973.         0000h   failure
  3974.  
  3975. (Table 1281)
  3976. Values for WinOldAp clipboard format:
  3977.  01h    text
  3978.  02h    bitmap
  3979.  03h    metafile picture
  3980.  04h    SYLK
  3981.  05h    DIF
  3982.  06h    TIFF
  3983.  07h    OEM text
  3984.  81h    DSP text
  3985.  82h    DSP bitmap
  3986.  
  3987. Format of Windows Clipboard bitmap:
  3988. Offset    Size    Description    (Table 1282)
  3989.  00h    WORD    type (0000h)
  3990.  02h    WORD    width of bitmap in pixels
  3991.  04h    WORD    height of bitmap in pixels
  3992.  06h    WORD    bytes per line
  3993.  08h    BYTE    number of color planes
  3994.  09h    BYTE    number of adjacent color bits in pixel
  3995.  0Ah    DWORD    pointer to start of data
  3996.  0Eh    WORD    width in 0.1mm units
  3997.  10h    WORD    height in 0.1mm units
  3998.  12h  N BYTEs    bitmap data
  3999.  
  4000. Format of Windows metafile picture:
  4001. Offset    Size    Description    (Table 1283)
  4002.  00h    WORD    mapping mode
  4003.  02h    WORD    X extent
  4004.  04h    WORD    Y extent
  4005.  06h    WORD    picture data
  4006. --------W-2F1704-----------------------------
  4007. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA SIZE
  4008.     AX = 1704h
  4009.     DX = clipboard format supported by WinOldAp (see #1281)
  4010. Return:    DX:AX = size of data in bytes, including any headers
  4011.         0000h:0000h if no data in this format in the Clipboard
  4012. Note:    Windows reportedly rounds up the size of the data to a multiple of 32
  4013.       bytes
  4014. --------W-2F1705-----------------------------
  4015. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA
  4016.     AX = 1705h
  4017.     DX = clipboard format supported by WinOldAp (see #1281)
  4018.     ES:BX -> buffer
  4019. Return: AX = status
  4020.         nonzero success
  4021.         0000h   error, or no data in this format in Clipboard
  4022. --------W-2F1708-----------------------------
  4023. INT 2F - MS Windows "WINOLDAP" - CloseClipboard
  4024.     AX = 1708h
  4025. Return: AX = status
  4026.         0000h failure
  4027.         nonzero success
  4028. --------W-2F1709-----------------------------
  4029. INT 2F - MS Windows "WINOLDAP" - COMPACT CLIPBOARD
  4030.     AX = 1709h
  4031.     SI:CX = desired size in bytes
  4032. Return: DX:AX = number of bytes in largest block of free memory
  4033. Note:    WinOldAp is responsible for including the size of any headers
  4034. --------W-2F170A-----------------------------
  4035. INT 2F - MS Windows "WINOLDAP" - GET DEVICE CAPABILITIES
  4036.     AX = 170Ah
  4037.     DX = GDI information index (see #1284)
  4038. Return: AX = integer value of the desired item
  4039.           (see #1285,#1286,#1287,#1288,#1289,#1290,#1291)
  4040. Note:    This function returns the device-capability bits for the given display
  4041.  
  4042. (Table 1284)
  4043. Values for GDI information index:
  4044.  00h    device driver version
  4045.  02h    device classification
  4046.  04h    width in mm
  4047.  06h    height in mm
  4048.  08h    width in pixels
  4049.  0Ah    height in pixels
  4050.  0Ch    bits per pixel
  4051.  0Eh    number of bit planes
  4052.  10h    number of brushes supported by device
  4053.  12h    number of pens supported by device
  4054.  14h    number of markers supported by device
  4055.  16h    number of fonts supported by device
  4056.  18h    number of colors
  4057.  1Ah    size required for device descriptor
  4058.  1Ch    curve capabilities
  4059.  1Eh    line capabilities
  4060.  20h    polygon capabilities
  4061.  22h    text capabilities
  4062.  24h    clipping capabilities
  4063.  26h    bitblt capabilities
  4064.  28h    X aspect
  4065.  2Ah    Y aspect
  4066.  2Ch    length of hypotenuse of aspect
  4067.  58h    logical pixels per inch of width
  4068.  5Ah    logical pixels per inch of height
  4069. SeeAlso: #1285,#1286,#1287,#1288,#1289,#1290,#1291
  4070.  
  4071. (Table 1285)
  4072. Values for device classification:
  4073.  00h    vector plotter
  4074.  01h    raster display
  4075.  02h    raster printer
  4076.  03h    raster camera
  4077.  04h    character-stream, PLP
  4078.  05h    Metafile, VDM
  4079.  06h    display-file
  4080. SeeAlso: #1284,#1286,#1287,#1288,#1289,#1290,#1291
  4081.  
  4082. Bitfields for curve capabilities:
  4083. Bit(s)    Description    (Table 1286)
  4084.  0    circles
  4085.  1    pie wedges
  4086.  2    chord arcs
  4087.  3    ellipses
  4088.  4    wide lines
  4089.  5    styled lines
  4090.  6    wide styled lines
  4091.  7    interiors
  4092. SeeAlso: #1284,#1285,#1287,#1288,#1289,#1290,#1291
  4093.  
  4094. Bitfields for line capabilities:
  4095. Bit(s)    Description    (Table 1287)
  4096.  1    polylines
  4097.  2    markers
  4098.  3    polymarkers
  4099.  4    wide lines
  4100.  5    styled lines
  4101.  6    wide styled lines
  4102.  7    interiors
  4103. SeeAlso: #1284,#1285,#1286,#1288,#1289,#1290,#1291
  4104.  
  4105. Bitfields for polygon capabilities:
  4106. Bit(s)    Description    (Table 1288)
  4107.  0    polygons
  4108.  1    rectangles
  4109.  2    trapezoids
  4110.  3    scanlines
  4111.  4    wide borders
  4112.  5    styled borders
  4113.  6    wide styled borders
  4114.  7    interiors
  4115. SeeAlso: #1284,#1285,#1286,#1287,#1289,#1290,#1291
  4116.  
  4117. Bitfields for text capabilities:
  4118. Bit(s)    Description    (Table 1289)
  4119.  0    output precision character
  4120.  1    output precision stroke
  4121.  2    clippping precision stroke
  4122.  3    90-degree character rotation
  4123.  4    arbitrary character rotation
  4124.  5    independent X and Y scaling
  4125.  6    double-size
  4126.  7    integer scaling
  4127.  8    continuous scaling
  4128.  9    bold
  4129.  10    italic
  4130.  11    underline
  4131.  12    strikeout
  4132.  13    raster fonts
  4133.  14    vector fonts
  4134.  15    reserved
  4135. SeeAlso: #1284,#1285,#1286,#1287,#1288,#1290,#1291
  4136.  
  4137. (Table 1290)
  4138. Values for clipping capabilities:
  4139.  00h    none
  4140.  01h    clipping to rectangles
  4141. SeeAlso: #1284,#1285,#1286,#1287,#1288,#1289,#1291
  4142.  
  4143. Bitfields for raster capabilities:
  4144. Bit(s)    Description    (Table 1291)
  4145.  0    simple bitBLT
  4146.  1    device requires banding support
  4147.  2    device requires scaling support
  4148.  3    supports >64K bitmap
  4149. SeeAlso: #1284,#1285,#1286,#1287,#1288,#1289,#1290
  4150. ----------2F18-------------------------------
  4151. INT 2F U - MS-Manager
  4152.     AH = 18h
  4153.     ???
  4154. Return: ???
  4155. --------l-2F1900-----------------------------
  4156. INT 2F U - DOS 4.x only SHELLB.COM - INSTALLATION CHECK
  4157.     AX = 1900h
  4158. Return: AL = status
  4159.         00h not installed
  4160.         FFh installed
  4161. --------l-2F1901BL00-------------------------
  4162. INT 2F U - DOS 4.x only SHELLB.COM - SHELLC.EXE INTERFACE
  4163.     AX = 1901h
  4164.     BL = SHELLC type
  4165.         00h transient
  4166.         01h resident
  4167.     DS:DX -> far call entry point for resident SHELLC.EXE
  4168. Return: ES:DI -> SHELLC.EXE workspace within SHELLB.COM
  4169. Note:    SHELLB.COM and SHELLC.EXE are parts of the DOS 4.x shell
  4170. --------l-2F1902-----------------------------
  4171. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM INTERFACE
  4172.     AX = 1902h
  4173.     ES:DI -> ASCIZ full filename of current batch file, with at least the
  4174.           final filename element uppercased
  4175.     DS:DX -> buffer for results
  4176. Return: AL = 00h  failed, either
  4177.         (a) final filename element quoted at ES:DI does not match
  4178.               identity of shell batch file quoted as parameter of most
  4179.               recent call of SHELLB command, or
  4180.         (b) no more Program Start Commands available.
  4181.     AL= FFh     success, then:
  4182.         memory at DS:[DX+1] onwards filled as:
  4183.         DX+1:    BYTE    count of bytes of PSC
  4184.         DX+2: N BYTEs    Program Start Command text
  4185.             BYTE    0Dh terminator
  4186. Desc:    COMMAND.COM executes the result of this call in preference to
  4187.       reading a command from a batch file.  Thus the batch file does not
  4188.       advance in execution for so long as SHELLB provides PSCs from its
  4189.       workspace.
  4190. Note:    The PSCs are planted in SHELLB workspace by SHELLC, the user
  4191.       menu interface.  The final PSC of a sequence is finished with a
  4192.       GOTO COMMON, which causes a loop back in the batch file which called
  4193.       SHELLC so as to execute SHELLC again.  The check on batch file name
  4194.       permits PSCs to CALL nested batch files while PSCs are still stacked
  4195.       up for subsequent execution.
  4196. --------l-2F1903-----------------------------
  4197. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM interface
  4198.     AX = 1903h
  4199.     ES:DI -> ASCIZ batch file name as for AX=1902h
  4200. Return: AL = status
  4201.         FFh quoted batch file name matches last SHELLB parameter
  4202.         00h it does not
  4203. --------l-2F1904-----------------------------
  4204. INT 2F U - DOS 4.x only SHELLB.COM - SHELLB transient to TSR intrface
  4205.     AX = 1904h
  4206. Return: ES:DI -> name of current shell batch file:
  4207.         WORD    number of bytes of name following
  4208.         BYTEs    (8 max) uppercase name of shell batch file
  4209. --------V-2F1A00-----------------------------
  4210. INT 2F - DOS 4+ ANSI.SYS - INSTALLATION CHECK
  4211.     AX = 1A00h
  4212. Return: AL = FFh if installed
  4213. Notes:    AVATAR.SYS also responds to this call
  4214.     documented for DOS 5+, but undocumented for DOS 4.x
  4215. --------V-2F1A00BX414E-----------------------
  4216. INT 2F - ANSIPLUS.SYS - INSTALLATION CHECK
  4217.     AX = 1A00h
  4218.     BX = 414Eh ('AN')
  4219.     CX = 5349h ('SI')
  4220.     DX = 2B2Bh ('++')
  4221. Return: AL = FFh if installed
  4222.         CF clear
  4223.         ES:BX -> INT 29 entry point
  4224. Program: ANSIPLUS.SYS is a CON device driver by Kristofer Sweger which
  4225.       replaces the normal ANSI.SYS is a more powerful version with many
  4226.       additional features
  4227. Note:    ANSIPLUS also identifies itself as ANSI.SYS if BX,CX, or DX differ
  4228.       from the magic values above
  4229. --------V-2F1A00BX4156-----------------------
  4230. INT 2F - AVATAR.SYS - INSTALLATION CHECK
  4231.     AX = 1A00h
  4232.     BX = 4156h ('AV')
  4233.     CX = 4154h ('AT')
  4234.     DX = 4152h ('AR')
  4235. Return: AL = FFh if installed
  4236.         CF clear
  4237.         BX = AVATAR protocol level supported
  4238.         CX = driver type
  4239.         0000h AVATAR.SYS
  4240.         4456h DVAVATAR.COM inside DESQview window
  4241.         DX = 0016h
  4242. Program: AVATAR.SYS is a CON replacement by George Adam Stanislav which
  4243.       interprets AVATAR command codes in the same way that ANSI interprets
  4244.       ANSI command codes
  4245. Notes:    AVATAR also identifies itself as ANSI.SYS if BX, CX, or DX differ from
  4246.       the magic values
  4247. --------V-2F1A01-----------------------------
  4248. INT 2F U - DOS 4+ ANSI.SYS internal - GET/SET DISPLAY INFORMATION
  4249.     AX = 1A01h
  4250.     CL = function
  4251.         7Fh for GET
  4252.         5Fh for SET
  4253.     DS:DX -> parm block as for INT 21,AX=440Ch,CX=037Fh/035Fh respectively
  4254. Return: CF set on error
  4255.         AX = error code (many non-standard)
  4256.     CF clear if successful
  4257.         AX destroyed
  4258. Note:    presumably this is the DOS IOCTL interface to ANSI.SYS
  4259. SeeAlso: AX=1A02h,INT 21/AX=440Ch
  4260. --------V-2F1A02-----------------------------
  4261. INT 2F U - DOS 4+ ANSI.SYS internal - MISCELLANEOUS REQUESTS
  4262.     AX = 1A02h
  4263.     DS:DX -> parameter block (see #1292)
  4264. Note:    DOS 5+ chains to previous handler if AL > 02h on call
  4265. SeeAlso: AX=1A01h
  4266.  
  4267. Format of ANSI.SYS parameter block:
  4268. Offset    Size    Description    (Table 1292)
  4269.  00h    BYTE    subfunction
  4270.         00h set/reset interlock
  4271.         01h get /L flag
  4272.  01h    BYTE    interlock state
  4273.         00h=reset, 01h=set
  4274.           This interlock prevents some of the ANSI.SYS post-processing
  4275.           in its hook onto INT 10, AH=00h mode set
  4276.  02h    BYTE    (returned)
  4277.         00h if /L not in effect
  4278.         01h if /L in effect
  4279. --------V-2F1A21-----------------------------
  4280. INT 2F - AVATAR.SYS - SET DRIVER STATE
  4281.     AX = 1A21h (AL='!')
  4282.     DS:SI -> command string with one or more state characters (see #1293)
  4283.     CX = length of command string
  4284. Return: CF set on error (invalid subfunction)
  4285.     CF clear if successful
  4286. Note:    the characters in the state string are interpreted left to right, and
  4287.       need not be in any particular order
  4288. SeeAlso: AX=1A3Fh
  4289.  
  4290. (Table 1293)
  4291. Values for AVATAR.SYS state characters:
  4292.  'a'    activate driver
  4293.  'd'    disable driver
  4294.  'f'    use fast screen output
  4295.  'g'    always convert gray keys (+ and -) to function keys
  4296.  'G'    never convert gray keys
  4297.  'l'    convert gray keys only when ScrollLock active
  4298.  's'    use slow screen output
  4299.  't'    Tandy 1000 keyboard (not yet implemented)
  4300. --------V-2F1A3C-----------------------------
  4301. INT 2F U - AVATAR.SYS v0.11 - ???
  4302.     AX = 1A3Ch
  4303.     ???
  4304. Return: CX = 0000h
  4305. --------V-2F1A3E-----------------------------
  4306. INT 2F U - AVATAR.SYS v0.11 - ???
  4307.     AX = 1A3Eh
  4308.     CL = ???
  4309.     CH = ???
  4310.     DL = ???
  4311.     DH = ???
  4312. Return: CL = ???
  4313.     CH = ???
  4314.     DL = ???
  4315.     DH = ???
  4316. --------V-2F1A3F-----------------------------
  4317. INT 2F - AVATAR.SYS - QUERY DRIVER STATE
  4318.     AX = 1A3Fh (AL='?')
  4319.     ES:DI -> buffer
  4320.     CX = length of buffer in bytes
  4321. Return: CF clear
  4322.     CX = actual size of returned info
  4323. Note:    the returned information consists of multiple letters whose meanings
  4324.       are described under AX=1A21h
  4325. SeeAlso: AX=1A21h
  4326. --------S-2F1A42BX4156-----------------------
  4327. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ3 HANDLER
  4328.     AX = 1A42h
  4329.     BX = 4156h ('AV')
  4330.     ES:DI -> FAR handler for serial port using IRQ3
  4331.     DS = data segment needed by handler
  4332. Return: AX = status/return value
  4333.         0000h if no more room
  4334.         1A42h if ASD not installed
  4335.         else handle to use when uninstalling
  4336. Notes:    the handler need not save/restore registers or signal EOI to the
  4337.       interrupt controller
  4338.     the handler should return AX=0000h if the interrupt was meant for it,
  4339.       and either leave AX unchanged or return a non-zero value otherwise
  4340.     the most recently installed handler will be called first, continuing
  4341.       to earlier handlers until one returns AX=0000h
  4342. SeeAlso: AX=1A43h,AX=1A62h
  4343. --------S-2F1A43BX4156-----------------------
  4344. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ4 HANDLER
  4345.     AX = 1A43h
  4346.     BX = 4156h ('AV')
  4347.     ES:DI -> FAR handler for serial port using IRQ4
  4348.     DS = data segment needed by handler
  4349. Return: AX = status/return value
  4350.         0000h if no more room
  4351.         1A43h if ASD not installed
  4352.         else handle to use when uninstalling
  4353. Notes:    (see AX=1A42h)
  4354. SeeAlso: AX=1A42h,AX=1A63h
  4355. --------V-2F1A44BX4156-----------------------
  4356. INT 2F - AVATAR.SYS v0.11+ - GET DATA SEGMENT
  4357.     AX = 1A44h
  4358.     BX = 4156h ('AV')
  4359. Return: AX = 0000h
  4360.     DS = data segment
  4361.     CX = size of data segment
  4362. Note:    AVATAR.SYS calls this function whenever it is invoked.    If each
  4363.       process under a multitasker hooks this function and provides a
  4364.       separate data segment, AVATAR.SYS becomes fully reentrant.
  4365. SeeAlso: AX=1A21h,AX=1A3Fh
  4366. --------V-2F1A52-----------------------------
  4367. INT 2F U - AVATAR.SYS v0.11 - GET ???
  4368.     AX = 1A52h
  4369.     CX = size of buffer
  4370.     ES:DI -> buffer
  4371. Return: ??? copied into user buffer
  4372. Note:    the maximum size of the data which may be copied is returned by
  4373.       AX=1A72h
  4374. SeeAlso: AX=1A72h
  4375. --------V-2F1A53-----------------------------
  4376. INT 2F U - AVATAR.SYS v0.11 - ???
  4377.     AX = 1A53h
  4378.     CL = ??? (00h-05h)
  4379.     ???
  4380. Return: ???
  4381. --------S-2F1A62BX4156-----------------------
  4382. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ3 HANDLER
  4383.     AX = 1A62h
  4384.     BX = 4156h ('AV')
  4385.     CX = handle for IRQ routine returned by AX=1A42h
  4386. SeeAlso: AX=1A42h,AX=1A63h
  4387. --------S-2F1A63BX4156-----------------------
  4388. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ4 HANDLER
  4389.     AX = 1A63h
  4390.     BX = 4156h ('AV')
  4391.     CX = handle for IRQ routine returned by AX=1A43h
  4392. SeeAlso: AX=1A43h,AX=1A62h
  4393. --------V-2F1A72-----------------------------
  4394. INT 2F U - AVATAR.SYS v0.11 - GET ??? SIZE
  4395.     AX = 1A72h
  4396. Return: CX = maximum size of ???
  4397. SeeAlso: AX=1A52h
  4398. --------V-2F1A7B-----------------------------
  4399. INT 2F U - AVATAR.SYS v0.11 - ???
  4400.     AX = 1A7Bh
  4401. Return: AX = 0000h
  4402.     CX = 0000h
  4403. --------V-2F1A7D-----------------------------
  4404. INT 2F U - AVATAR.SYS v0.11 - ???
  4405.     AX = 1A7Dh
  4406. Return: AX = ???
  4407. --------V-2F1AADDX0000-----------------------
  4408. INT 2F U - AVATAR.SYS v0.11 - ???
  4409.     AX = 1AADh
  4410.     DX = 0000h
  4411.     CX = subfunction (00h-0Ch)
  4412.     ???
  4413. Return: AX = 0000h if DX was nonzero
  4414.     ???
  4415. --------m-2F1B00-----------------------------
  4416. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - INSTALLATION CHECK
  4417.     AX = 1B00h
  4418. Return: AL = FFh if installed
  4419. Note:    XMA2EMS.SYS extension is only installed if DOS has page frames to hide.
  4420.     This extension hooks onto INT 67/AH=58h and returns from that call data
  4421.       which excludes the physical pages being used by DOS.
  4422. SeeAlso: AH=1Bh"FRAME INFO"
  4423. --------m-2F1B-------------------------------
  4424. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - GET HIDDEN FRAME INFORMATION
  4425.     AH = 1Bh
  4426.     AL <> 00h
  4427.     DI = hidden physical page number
  4428. Return: AX = FFFFh if failed (no such hidden page)
  4429.     AX = 0000h if OK, then
  4430.         ES = segment of page frame
  4431.         DI = physical page number
  4432. Notes:    this corresponds to the data edited out of the INT 67/AH=58h call
  4433.     FASTOPEN makes this call with AL = FFh
  4434. SeeAlso: AX=1B00h
  4435. --------V-2F2300-----------------------------
  4436. INT 2F - DR-DOS 5.0 GRAFTABL - INSTALLATION CHECK
  4437.     AX = 2300h
  4438. Return: AH = FFh
  4439. Note:    this installation check does not follow the usual format
  4440. SeeAlso: AH=23h,AX=2E00h
  4441. --------V-2F23-------------------------------
  4442. INT 2F - DR-DOS 5.0 GRAFTABL - GET GRAPHICS DATA
  4443.     AH = 23h
  4444.     AL nonzero
  4445. Return: AH = FFh
  4446.     ES:BX -> graphics data (8 bytes for each character from 80h to FFh)
  4447. SeeAlso: AX=2300h,AX=2E00h
  4448. --------T-2F2700-----------------------------
  4449. INT 2F - DR-DOS 6.0 TaskMAX - INSTALLATION CHECK
  4450.     AX = 2700h
  4451. Return: AL = status
  4452.         00h not installed
  4453.         FFh installed
  4454. --------T-2F2701-----------------------------
  4455. INT 2F - DR-DOS 6.0 TaskMAX - GET STATUS
  4456.     AX = 2701h
  4457. Return: AX = maximum simultaneous tasks
  4458.     BX = index into TASK_IDS of current foreground task
  4459.     CX = currently-active tasks
  4460.     DX = version number (DL = major, DH = minor)
  4461.         (DR-DOS 6.0 = 0001h, Novell DOS 7 = 0002h)
  4462.     ES:SI -> TASK_IDS
  4463.     ES:DI -> name table (array of 8-byte names, NUL-terminated if <8 chars)
  4464. Notes:    do not attempt to create a new task if CX == AX
  4465.     the task's index is its position on the task menu, while its ID is the
  4466.       position within the internal task name table
  4467. SeeAlso: AX=2714h,AX=2716h
  4468. --------T-2F2702-----------------------------
  4469. INT 2F - DR-DOS 6.0 TaskMAX - GET PER-TASK EMS LIMIT
  4470.     AX = 2702h
  4471. Return: DX = maximum pages INT 67/AH=42h will report available
  4472. Note:    TaskMAX does not limit EMS allocations other than by limiting the
  4473.       amount which is reported as being available at a given time
  4474. SeeAlso: AX=2703h,INT 67/AH=42h
  4475. --------T-2F2703-----------------------------
  4476. INT 2F - DR-DOS 6.0 TaskMAX - SET PER-TASK EMS LIMIT
  4477.     AX = 2703h
  4478.     DX = maximum pages INT 67/AH=42h should report available
  4479. Return: DX = new maximum for reporting
  4480. SeeAlso: AX=2702h,INT 67/AH=42h
  4481. --------T-2F2704-----------------------------
  4482. INT 2F - DR-DOS 6.0 TaskMAX - REGISTER/UNREGISTER TASK MANAGER
  4483.     AX = 2704h
  4484.     DL = subfunction
  4485.         00h unregister task manager
  4486.         01h register task manager
  4487. Return: DL = status
  4488.         00h registered
  4489.         01h unregistered
  4490. Notes:    a task manager replaces TaskMAX's menu system with its own user
  4491.       interface; while one is registered, the TaskMAX hotkeys and
  4492.       Ctrl-Alt-Del invoke the manager rather than the built-in menu system
  4493.     unregister the task manager before terminating it
  4494. SeeAlso: AX=2705h
  4495. Index:    hotkeys;TaskMAX
  4496. --------T-2F2705-----------------------------
  4497. INT 2F - DR-DOS 6.0 TaskMAX - ENABLE/DISABLE DIRECT SWITCHING
  4498.     AX = 2705h
  4499.     DL = subfunction
  4500.         00h disable keystrokes for switching to next/prev/specified task
  4501.         01h enable
  4502. Return: nothing
  4503. Note:    should only be called by a registered task manager (see AX=2704h)
  4504. SeeAlso: AX=2704h,AX=2706h
  4505. --------T-2F2706-----------------------------
  4506. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO SPECIFIED TASK
  4507.     AX = 2706h
  4508.     DX = task index (see AX=2701h) of task to be activated
  4509. Return: DX = task index of previously-active task
  4510. SeeAlso: AX=2705h,AX=2707h,AX=2715h
  4511. --------T-2F2707-----------------------------
  4512. INT 2F - DR-DOS 6.0 TaskMAX - CREATE NEW TASK
  4513.     AX = 2707h
  4514.     DS:DX -> ASCIZ pathname of executable
  4515.     ES:BX -> parameter block (see #1294)
  4516.     CX = number of ticks before automatic return to task manager
  4517.         (0000h = run until termination or explicitly switched)
  4518. Return: DX = new task's task index (FFFFh if task terminated)
  4519. SeeAlso: AX=2706h,AX=2708h
  4520.  
  4521. Format of TaskMAX parameter block:
  4522. Offset    Size    Description    (Table 1294)
  4523.  00h    WORD    reserved, should be 0000h
  4524.  02h    DWORD    pointer to command tail to be copied into child's PSP
  4525.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  4526.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  4527. --------T-2F2708-----------------------------
  4528. INT 2F - DR-DOS 6.0 TaskMAX - DELETE TASK
  4529.     AX = 2708h
  4530.     DX = task index
  4531. Return: DX = FFFFh (task deleted)
  4532. Notes:    this call should only be used for abnormal task termination, after
  4533.       first checking for open files with AX=270Ch; should not be used
  4534.       with programs that allocate EMS or XMS memory
  4535.     switches to specified task first
  4536. SeeAlso: AX=2707h
  4537. --------T-2F2709-----------------------------
  4538. INT 2F - DR-DOS 6.0 TaskMAX - NAME TASK
  4539.     AX = 2709h
  4540.     DX = task index
  4541.     DS:SI -> 8-byte name (8 NULs = remove name)
  4542. Return: AL = task flags
  4543.         00h ID unused or task terminated
  4544.         01h ID in use, task name table entry valid
  4545.         81h ID in use, task name fixed
  4546.     BX = task ID
  4547.     ES:DI -> name in task name table (see AX=2701h)
  4548. Note:    the task retains the given name until it terminates or the name is
  4549.       removed by specifying a name of 8 NULs.
  4550. SeeAlso: AX=2701h,AX=2707h
  4551. --------T-2F270A-----------------------------
  4552. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK INDEX TO TASK ID
  4553.     AX = 270Ah
  4554.     DX = task index
  4555. Return: DX = task ID (FFFFh if index invalid)
  4556. Note:    task IDs stay constant, while indexes can change when other tasks are
  4557.       deleted
  4558. SeeAlso: AX=2701h,AX=270Bh
  4559. --------T-2F270B-----------------------------
  4560. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK ID TO TASK INDEX
  4561.     AX = 270Bh
  4562.     DX = task ID
  4563. Return: DX = task index (FFFFh if task not active)
  4564. SeeAlso: AX=270Ah
  4565. --------T-2F270C-----------------------------
  4566. INT 2F - DR-DOS 6.0 TaskMAX - CHECK OPEN FILES
  4567.     AX = 270Ch
  4568.     DX = task index
  4569. Return: AX = number of files currently open for specified task
  4570. SeeAlso: AX=2708h
  4571. --------T-2F270D-----------------------------
  4572. INT 2F - DR-DOS 6.0 TaskMAX - CHECK IF TASK RUNNING PRIMARY COMMAND INTERPRETER
  4573.     AX = 270Dh
  4574.     DX = task index
  4575. Return: DX = status
  4576.         0000h if primary command interpreter (COMMAND.COM, etc.) running
  4577.         0001h if not in root shell for task
  4578. Note:    TaskMAX will return 0001h if the specified task has spawned another
  4579.       command interpreter with AX=2707h
  4580. SeeAlso: AX=2707h,AX=270Ch
  4581. --------T-2F270E-----------------------------
  4582. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET TEXT PASTE LEAD-IN
  4583.     AX = 270Eh
  4584.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  4585.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  4586. Return: ES:DI -> current lead-in string
  4587. Note:    the specified sequence of keystrokes is sent to the application before
  4588.       every line of a text-mode spreadsheet paste
  4589. SeeAlso: AX=270Fh,AX=2710h,AX=2713h
  4590. --------T-2F270F-----------------------------
  4591. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE LEAD-IN
  4592.     AX = 270Fh
  4593.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  4594.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  4595. Return: ES:DI -> current lead-in string
  4596. Note:    the specified sequence of keystrokes is sent to the application before
  4597.       every number in a numeric-mode spreadsheet paste
  4598. SeeAlso: AX=270Eh,AX=2710h,AX=2711h,AX=2713h
  4599. --------T-2F2710-----------------------------
  4600. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET PASTE LINE TERMINATOR STRING
  4601.     AX = 2710h
  4602.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  4603.     DS:SI -> pasting terminator string (character/scan-code pairs)
  4604. Return: ES:DI -> current terminator string
  4605. Note:    the specified sequence of keystrokes is sent to the application after
  4606.       every line of a spreadsheet paste operation
  4607. SeeAlso: AX=270Eh,AX=270Fh,AX=2713h
  4608. --------T-2F2711-----------------------------
  4609. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE DECIMAL POINT
  4610.     AX = 2711h
  4611.     DX = ASCII code for separator (FFFFh to get current)
  4612. Return: DL = current separator character
  4613. SeeAlso: AX=270Fh
  4614. --------T-2F2712-----------------------------
  4615. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE EXPORTING TASK DATA
  4616.     AX = 2712h
  4617.     DX = task index
  4618. --------T-2F2713-----------------------------
  4619. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE PASTE OPERATION
  4620.     AX = 2713h
  4621.     DX = task index
  4622.     CX = paste mode
  4623.         0000h alphanumeric
  4624.         0001h numeric
  4625.         0002h text
  4626. SeeAlso: AX=270Eh,AX=270Fh,AX=2710h,AX=2711h
  4627. --------T-2F2714-----------------------------
  4628. INT 2F - DR-DOS 6.0 TaskMAX - GET SWAP SPACE INFO
  4629.     AX = 2714h
  4630. Return: CX = total KB of swap space
  4631.     DX = available KB of swap space
  4632. SeeAlso: AX=2701h
  4633. --------T-2F2715-----------------------------
  4634. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO TASK MANAGER
  4635.     AX = 2715h
  4636. Return: only after calling task is again selected
  4637. SeeAlso: AX=2706h
  4638. --------T-2F2716-----------------------------
  4639. INT 2F - DR-DOS 6.0 TaskMAX - GET PASTE BUFFER STATUS
  4640.     AX = 2716h
  4641. Return: AX = 0000h if AX=2716h,AX=2717h,AX=2718h supported
  4642.         CX = bytes in paste buffer
  4643.         DX = current generation number (updated after every copy operation)
  4644. SeeAlso: AX=2701h,AX=2713h,AX=2714h,AX=2717h,AX=2718h
  4645. --------T-2F2717-----------------------------
  4646. INT 2F - DR-DOS 6.0 TaskMAX - PASTE DATA DIRECTLY TO APPLICATION BUFFER
  4647.     AX = 2717h
  4648.     CX = bytes in destination buffer
  4649.     ES:DI -> destination buffer
  4650. Return: AX = 0000h if function supported
  4651.         CX = bytes actually copied (FFFFh if buffer too small)
  4652.         DX = current generation number for paste buffer
  4653. Note:    the destination buffer may be too small if another task adds more data
  4654.       to the paste buffer after the AX=2716h call but before this call
  4655. SeeAlso: AX=2713h,AX=2716h,AX=2718h
  4656. --------T-2F2718-----------------------------
  4657. INT 2F - DR-DOS 6.0 TaskMAX - COPY DATA DIRECTLY INTO PASTE BUFFER
  4658.     AX = 2718h
  4659.     CX = bytes in source buffer
  4660.     DS:SI -> source buffer (plain ASCII, lines terminated with CR LF)
  4661. Return: AX = 0000h if function supported
  4662.         CX = bytes actually copied
  4663.         DX = current generation number for paste buffer
  4664. SeeAlso: AX=2712h,AX=2716h,AX=2717h
  4665. --------T-2F2719-----------------------------
  4666. INT 2F - Novell DOS 7 TaskMGR - NOP
  4667.     AX = 2719h to 271Bh
  4668. --------T-2F271C-----------------------------
  4669. INT 2F U - Novell DOS 7 TaskMGR - ???
  4670.     AX = 271Ch
  4671.     DX = ???
  4672.         bit 0: ???
  4673. Return: ???
  4674.     ---if DX bit 0 set---
  4675.     AX = 0031h
  4676.     CX = 0000h
  4677. BUG:    if the task switcher is running, and DX bit 0 is set on call, this
  4678.       function will crash because its exit code attempts to pop several
  4679.       registers which are not pushed when DX bit 0 is set
  4680. --------m-2F2780CL01-------------------------
  4681. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  4682.     AX = 2780h
  4683.     CL = 01h (function number)
  4684.     CH = subfunction
  4685.         00h unused
  4686.         Return: CX = status (0002h) (see #1295)
  4687.         01h unused
  4688.         Return: CX = status (0002h) (see #1295)
  4689.         02h ???
  4690.         BX = ??? (0005h-000Fh)
  4691.         Return: CX = status (0000h,0030h) (see #1295)
  4692.         03h allocate ???
  4693.         DX = ???
  4694.         Return: CX = status (0000h,0003h) (see #1295)
  4695.         04h get ???
  4696.         Return: CX = 0000h (successful)
  4697.             BX = selector for EMM386 data segment
  4698.             EBX high word cleared
  4699.         05h ???
  4700.         EDX = ???
  4701.         Return: ???
  4702.         06h return to real mode via triple fault
  4703.         07h debugger break
  4704.         Note:    calls INT 03, then INT 21/AH=02h to output a question
  4705.               mark
  4706.         08h get ???
  4707.         Return: CX = 0000h (successful)
  4708.             EBX = ??? (0 or 2)
  4709.         09h ???
  4710.         0Ah ???
  4711.         0Bh unused
  4712.         Return: CX = status (0002h) (see #1295)
  4713.         0Ch ??? manipulates DOS memory chain
  4714.         0Dh ???
  4715.         EBX = ???
  4716.         EDX = ???
  4717.         Return: ???
  4718.         0Eh ???
  4719.         Return: CX = 0000h (successful)
  4720.             BL = ???     \ or BX = 0000h
  4721.             BH = ???     /
  4722.         0Fh get ???
  4723.         Return: CX = 0000h (successful)
  4724.             EBX = ???
  4725.         10h get and set ???
  4726.         EDX = ???
  4727.         Return: CX = 0000h (successful)
  4728.             EBX = old value of ???
  4729.         11h get ???
  4730.         Return: CX = 0000h (successful)
  4731.             EBX = ??? (0100h)
  4732.         12h get and set ???
  4733.         DX = ???
  4734.         Return: CX = 0000h (successful)
  4735.             AX = old value of ???
  4736.         13h ???
  4737.         Return: CX = status (0000h,003Fh) (see #1295)
  4738.             AX = ???
  4739.         14h ???
  4740.         EDX = ???
  4741.         Return: CX = status (0000h,003Fh) (see #1295)
  4742.         15h ???
  4743.         BX = segment of ???
  4744.         Return: CX = 0000h (successful)
  4745.             BX = segment of ???
  4746.         16h ???
  4747.         17h ???
  4748.         EBX = subfunction (0-2)
  4749.         Return: CX = status (0002h if EBX>2) (see #1295)
  4750.             ???
  4751.         18h unused
  4752.         Return: CX = status (0002h) (see #1295)
  4753. Return: CX = status (most subfunctions)
  4754.     (E)AX and/or (E)BX contain return values, depending on function
  4755. Notes:    called by DPMS.EXE and EMM386.EXE
  4756.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  4757.       because the request is handled on the initial trap to the memory
  4758.       manager caused by INT instructions, this API must be invoked with
  4759.       an actual INT 2F instruction instead of some simulation such as a
  4760.       far call to the address in the interrupt vector table
  4761. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=02h,AX=2780h/CL=03h,AX=2780h/CL=04h
  4762.  
  4763. (Table 1295)
  4764. Values for Novell DOS 7 EMM386 function status:
  4765.  0000h    successful
  4766.  0001h    invalid function???
  4767.  0002h    invalid subfunction
  4768.  0003h    ???
  4769.  0004h    invalid ??? index
  4770.  0005h    ???
  4771.  0006h  ???
  4772.  0007h    ???
  4773.  0009h    ???
  4774.  000Ah    ???
  4775.  000Bh    invalid ??? handle
  4776.  000Ch    ???
  4777.  000Dh    ???
  4778.  000Eh    ???
  4779.  000Fh    ???
  4780.  0014h    ???
  4781.  0023h    ???
  4782.  0030h    ???
  4783.  003Fh    ???
  4784. --------m-2F2780CL02-------------------------
  4785. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  4786.     AX = 2780h
  4787.     CL = 02h (function number)
  4788.     CH = subfunction
  4789.         00h ???
  4790.         ???
  4791.         Return: CX = status (0000h,0023h, others???) (see #1295)
  4792.             BX = ??? (0000h if CX=0000h, FFFFh if CX=0023h)
  4793.         Note:    calls func 04h/sf 03h, func 04h/sf 1Eh,func 02h/sf 43h,
  4794.               func 02h/sf 0Bh, and func 04h/sf 01h
  4795.         01h get and clear ???
  4796.         DX = ??? handle or 0000h for default
  4797.         Return: CX = status (0000h,000Bh) (see #1295)
  4798.             EBX = old value of ??? if successful
  4799.             EDX destroyed
  4800.         02h ???
  4801.         DX = index of ???
  4802.         Return: CX = status (0000h,0004h,0005h) (see #1295)
  4803.             EBX = 0000FFFFh on error, 00000000h if successful
  4804.         03h ???
  4805.         DX = index of ???
  4806.         Return: CX = status (0000h,0004h,0006h) (see #1295)
  4807.             BX = FFFFh on error, 0000h if successful
  4808.         04h ???
  4809.         Return: CX = status (0000h,0007h,000Ah) (see #1295)
  4810.         05h ???
  4811.         EDX -> ??? data (first 8 bytes seem to be name)
  4812.         Return: CX = status (0000h,0009h,000Dh) (see #1295)
  4813.         06h ???
  4814.         Note:    calls fn 02h/subfn 05h, then fn 02h/subfn 40h
  4815.         07h ???
  4816.         EDX = ???
  4817.         Return: CX = status (0000h,0009h,000Eh) (see #1295)
  4818.         08h ???
  4819.         EDX = ???
  4820.         Return: CX = status (0000h,0009h,000Eh) (see #1295)
  4821.         09h ???
  4822.         EDX = ???
  4823.         Return: CX = status (0000h,0009h,000Fh) (see #1295)
  4824.         0Ah ???
  4825.         EDX = ???
  4826.         Return: CX = status (0000h,0009h,000Fh) (see #1295)
  4827.         0Bh ???
  4828.         DX = ???
  4829.         Return: CX = 0000h (successful)
  4830.         0Ch ???
  4831.         Return: CX = 0000h (successful)
  4832.         0Dh ???
  4833.         Return: CX = status (0000h,0023h) (see #1295)
  4834.             BX = FFFFh on error, 0000h if successful
  4835.         Note:    calls fn 04h/subfn 03h, fn 04h/subfn 1Eh,
  4836.               fn 02h/subfn 43h, fn 02h/subfn 0Bh, fn 04h/sub 01h
  4837.         0Eh ???
  4838.         ???
  4839.         Return: CX = status (0000h,000Ch) (see #1295)
  4840.             EBX = ??? if successful
  4841.         0Fh ???
  4842.         BX = ???
  4843.         DX = ??? handle or 0000h for default
  4844.         Return: CX = status (0000h,000Bh) (see #1295)
  4845.         10h get ??? handle
  4846.         Return: CX = 0000h (successful)
  4847.             BX = handle of default ???
  4848.             EBX high word cleared
  4849.         11h ???
  4850.         DX = ??? handle or 0000h for default
  4851.         BX = ??? (handle???)
  4852.         Return:    CX = status (0000h,000Bh,0014h) (see #1295)
  4853.         12h ???
  4854.         BX = ???
  4855.         DX = ???
  4856.         Return: CX = 0000h (successful)
  4857.         13h ???
  4858.         DX = ???
  4859.         Return: CX = status (see #1295)
  4860.         14h ???
  4861.         BX = ???
  4862.         DX = ???
  4863.         Return: CX = status (0000h,0014h) (see #1295)
  4864.             BX = FFFFh on error, ??? if successful
  4865.         15h set ??? flags
  4866.         BX = ??? (low two bits only)
  4867.         DX = ??? handle or 0000h for default
  4868.         Return: CX = status (0000h,000Bh) (see #1295)
  4869.             BX = new value of ??? flags (entire word)
  4870.             EBX high register cleared
  4871.         16h clear ??? flag for default ???
  4872.         Return: CX = 0000h (successful)
  4873.         17h ???
  4874.         18h ???
  4875.         19h ???
  4876.         1Ah ???
  4877.         1Bh ???
  4878.         1Ch ???
  4879.         1Dh ???
  4880.         1Eh ???
  4881.         1Fh ???
  4882.         20h ???
  4883.         21h ???
  4884.         22h ???
  4885.         23h ???
  4886.         24h ???
  4887.         25h ???
  4888.         26h ???
  4889.         27h ???
  4890.         28h ???
  4891.         29h ???
  4892.         2Ah ???
  4893.         2Bh ???
  4894.         2Ch ???
  4895.         2Dh ???
  4896.         2Eh ???
  4897.         2Fh ???
  4898.         30h ???
  4899.         31h ???
  4900.         32h ???
  4901.         33h ???
  4902.         34h ???
  4903.         35h ???
  4904.         36h ???
  4905.         37h ???
  4906.         38h ???
  4907.         39h ???
  4908.         3Ah ???
  4909.         3Bh ???
  4910.         3Ch ???
  4911.         3Eh ???
  4912.         3Fh ???
  4913.         40h ???
  4914.         41h ???
  4915.         42h ???
  4916.         43h ???
  4917.         44h ???
  4918.         45h ???
  4919.         46h ???
  4920.         47h ???
  4921. Return: CX = status (most subfunctions)
  4922.     (E)AX and/or (E)BX contain return values, depending on function
  4923. Notes:    called by DPMS.EXE and EMM386.EXE
  4924.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  4925.       because the request is handled on the initial trap to the memory
  4926.       manager caused by INT instructions, this API must be invoked with
  4927.       an actual INT 2F instruction instead of some simulation such as a
  4928.       far call to the address in the interrupt vector table
  4929. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=03h,AX=2780h/CL=04h
  4930. --------m-2F2780CL03-------------------------
  4931. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  4932.     AX = 2780h
  4933.     CL = 03h (function number)
  4934.     CH = subfunction
  4935.         00h ???    
  4936.         01h ???
  4937.         02h ???
  4938.         03h ???
  4939.         04h ???
  4940.         05h ???
  4941.         06h ???
  4942.         07h ???
  4943.         08h ???
  4944.         09h ???
  4945.         0Ah ???
  4946.         0Bh ???
  4947.         0Ch ???
  4948.         0Dh ???
  4949.         0Eh ???
  4950.         0Fh ???
  4951.         10h ???
  4952.         11h ???
  4953.         12h ???
  4954.         13h ???
  4955.         14h ???
  4956.         15h ???
  4957.         16h ???
  4958.         17h ???
  4959.         18h ???
  4960.         19h ???
  4961.         1Ah ???
  4962.         1Bh ???
  4963.         1Ch ???
  4964.         1Dh ???
  4965.         1Eh ???
  4966.         1Fh ???
  4967.         20h ???
  4968.         21h ???
  4969.         22h ???
  4970.         23h ???
  4971.         24h ???
  4972.         25h ???
  4973.         26h ???
  4974.         27h ???
  4975.         28h ???
  4976.         29h ???
  4977.         2Ah ???
  4978.         2Bh ???
  4979.         2Ch ???
  4980.         2Dh ???
  4981.         2Eh ???
  4982.         2Fh ???
  4983.         30h ???
  4984.         31h ???
  4985.         32h ???
  4986.         33h ???
  4987.         34h ???
  4988.         35h ???
  4989.         36h ???
  4990.         37h ???
  4991. Return: CX = status (most subfunctions)
  4992.     (E)AX and/or (E)BX contain return values, depending on function
  4993. Notes:    called by DPMS.EXE and EMM386.EXE
  4994.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  4995.       because the request is handled on the initial trap to the memory
  4996.       manager caused by INT instructions, this API must be invoked with
  4997.       an actual INT 2F instruction instead of some simulation such as a
  4998.       far call to the address in the interrupt vector table
  4999. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=04h
  5000. --------m-2F2780CL04-------------------------
  5001. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  5002.     AX = 2780h
  5003.     CL = 04h (function number)
  5004.     CH = subfunction
  5005.         00h ???    
  5006.         01h ???
  5007.         02h ???
  5008.         03h ???
  5009.         04h ???
  5010.         05h ???
  5011.         06h ???
  5012.         07h ???
  5013.         08h ???
  5014.         09h ???
  5015.         0Ah ???
  5016.         0Bh ???
  5017.         0Ch ???
  5018.         0Dh ???
  5019.         0Eh ???
  5020.         0Fh ???
  5021.         10h ???
  5022.         11h ???
  5023.         12h ???
  5024.         13h ???
  5025.         14h ???
  5026.         15h ???
  5027.         16h ???
  5028.         17h ???
  5029.         18h ???
  5030.         19h ???
  5031.         1Ah ???
  5032.         1Bh ???
  5033.         1Ch ???
  5034.         1Dh ???
  5035.         1Eh ???
  5036.         1Fh ???
  5037.         20h ???
  5038.         21h ???
  5039.         22h ???
  5040.         23h ???
  5041.         24h ???
  5042.         25h ???
  5043.         26h ???
  5044.         27h ???
  5045.         28h ???
  5046.         29h ???
  5047.         2Ah ???
  5048.         2Bh ???
  5049.         2Ch ???
  5050.         2Dh ???
  5051.         2Eh ???
  5052.         2Fh ???
  5053.         30h ???
  5054.         31h ???
  5055.         32h ???
  5056. Return: CX = status (most subfunctions)
  5057.     (E)AX and/or (E)BX contain return values, depending on function
  5058. Notes:    called by DPMS.EXE and EMM386.EXE
  5059.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  5060.       because the request is handled on the initial trap to the memory
  5061.       manager caused by INT instructions, this API must be invoked with
  5062.       an actual INT 2F instruction instead of some simulation such as a
  5063.       far call to the address in the interrupt vector table
  5064. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  5065. --------m-2F2780CL05-------------------------
  5066. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  5067.     AX = 2780h
  5068.     CL = 05h
  5069.     ???
  5070. Return: ???
  5071. Notes:    called by DPMS.EXE and EMM386.EXE
  5072.     the handler for this function may be set by one of the subfunctions
  5073.       of AX=2780h/CL=01h; the default handler returns AX=BX=FFFFh and
  5074.       CX=0001h (see #1295)
  5075.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  5076.       because the request is handled on the initial trap to the memory
  5077.       manager caused by INT instructions, this API must be invoked with
  5078.       an actual INT 2F instruction instead of some simulation such as a
  5079.       far call to the address in the interrupt vector table
  5080. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  5081. --------m-2F2780CL06-------------------------
  5082. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  5083.     AX = 2780h
  5084.     CL = 06h
  5085.     ???
  5086. Return: ???
  5087. Notes:    called by DPMS.EXE and EMM386.EXE
  5088.     the handler for this function may be set by one of the subfunctions
  5089.       of AX=2780h/CL=01h; the default handler returns AX=BX=FFFFh and
  5090.       CX=0001h (see #1295)
  5091.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  5092.       because the request is handled on the initial trap to the memory
  5093.       manager caused by INT instructions, this API must be invoked with
  5094.       an actual INT 2F instruction instead of some simulation such as a
  5095.       far call to the address in the interrupt vector table
  5096. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  5097. --------m-2F2780-----------------------------
  5098. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  5099.     AX = 2780h
  5100.     CL = function (07h-0Fh)
  5101.     ???
  5102. Return: ???
  5103. Notes:    called by DPMS.EXE and EMM386.EXE
  5104.     the handlers for each of these functions may be set individually by
  5105.       one of the subfunctions of AX=2780h/CL=01h; the default handlers
  5106.       return with all registers unchanged
  5107.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  5108.       because the request is handled on the initial trap to the memory
  5109.       manager caused by INT instructions, this API must be invoked with
  5110.       an actual INT 2F instruction instead of some simulation such as a
  5111.       far call to the address in the interrupt vector table
  5112. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  5113. --------T-2F2781-----------------------------
  5114. INT 2F U - Novell DOS 7 TaskMGR - BEGIN CRITICAL SECTION???
  5115.     AX = 2781h
  5116. Return: ???
  5117. SeeAlso: AX=2782h
  5118. --------T-2F2782-----------------------------
  5119. INT 2F U - Novell DOS 7 TaskMGR - END CRITICAL SECTION???
  5120.     AX = 2782h
  5121. Return: ???
  5122. SeeAlso: AX=2781h
  5123. --------m-2F2783-----------------------------
  5124. INT 2F U - Novell DOS 7 - EMM386.EXE - GET ???
  5125.     AX = 2783h
  5126. Return: AX = ???
  5127.     BX = ???
  5128. --------T-2F278F-----------------------------
  5129. INT 2F U - Novell DOS 7 TaskMGR - ??? API
  5130.     AX = 278Fh
  5131.     as for INT 2F/AX=2780h
  5132. Return: as for INT 2F/AX=2780h
  5133. Note:    Novell DOS 7 TaskMGR passes this call through to INT 2F/AX=2780h
  5134.       without changing any other registers
  5135. SeeAlso: AX=2780h,AX=2782h
  5136. --------F-2F2A-------------------------------
  5137. INT 2F - Gammafax DOS Dispatcher INTERFACE
  5138.     AH = 2Ah
  5139. Note:    details not available at this time
  5140. SeeAlso: AX=8000h"FaxBIOS",AX=C000h/BX=444Bh,AX=CB00h,AX=CBDDh,INT 66"BitFax"
  5141. --------V-2F2E00-----------------------------
  5142. INT 2F U - Novell DOS 7 - GRAFTABL - INSTALLATION CHECK
  5143.     AX = 2E00h
  5144. Return: AH = FFh if installed
  5145. Note:    this installation check does not follow the usual format of setting
  5146.       AL to FFh
  5147. SeeAlso: AX=2300h,AH=2Eh"GRAFTABL"
  5148. --------V-2F2E-------------------------------
  5149. INT 2F U - Novell DOS 7 - GRAFTABL - GET FONT TABLE
  5150.     AH = 2Eh
  5151.     AL nonzero
  5152. Return: AH = FFh if installed
  5153.         ES:BX -> graphics data (8 bytes per character from 80h to FFh)
  5154. SeeAlso: AX=2E00h,AH=23h"GRAFTABL"
  5155. --------t-2F3900-----------------------------
  5156. INT 2F - Kingswood TSR INTERFACE - COMPATIBILITY MODE
  5157.     AX = 3900h
  5158. Return: AL = status
  5159.         00h not installed
  5160.         FFh one or more TSRs using this interface is installed
  5161.         DX may be destroyed
  5162. Note:    this function is provided to that the multiplex number will appear used
  5163.       to other programs
  5164. SeeAlso: AH=39h/BL=00h
  5165. --------t-2F39--BL00-------------------------
  5166. INT 2F - Kingswood TSR INTERFACE - INSTALLATION CHECK
  5167.     AH = 39h
  5168.     BL = 00h
  5169.     AL = TSR ID number (01h-FFh, currently only 01h-1Bh used) (see #1296)
  5170. Return: AL = status
  5171.         00h not installed
  5172.         FFh installed
  5173.         DX = segment address of resident module
  5174. Note:    All of Kingswood Software's TSRs use this interface.  Usually the
  5175.       resident module is installed by allocating a block of upper memory,
  5176.       setting its owner ID to 000Ah (used by DOS), and filling the MCB name
  5177.       field with the TSR's name.
  5178. SeeAlso: AX=3900h,AH=39h/BL=01h
  5179.  
  5180. (Table 1296)
  5181. Values for Kingswood TSR ID number:
  5182.  01h    TSR Windows
  5183.  02h    NOBUSY
  5184.  03h    CD STACK
  5185.  04h    DISK WATCH
  5186.  05h    PUSHBP
  5187.  06h    ALIAS
  5188.  07h    KEYMACRO
  5189.  08h    SLOWDOWN
  5190.  09h    ANSIGRAB
  5191.  0Ah    TEE
  5192.  0Bh    FASTMOUS
  5193.  0Ch    EXTWILD
  5194.  0Dh    BREAKOUT
  5195.  0Eh    STOPDISK
  5196.  0Fh    MEMINIT
  5197.  10h    JANUSEXT
  5198.  11h    CAPS
  5199.  12h    ANSI
  5200.  13h    TRAPPER
  5201.  14h    EATMEM
  5202.  15h    WPJOKE
  5203.  16h    SHOWDOS
  5204.  17h    LOGINTS
  5205.  18h    BLANKVGA
  5206.  19h    SWAPEXEC
  5207.  1Ah    SHELL
  5208.  1Bh    TSRGAMES
  5209.  
  5210. Format of Kingswood TSR modules:
  5211. Offset    Size    Description    (Table 1297)
  5212.  00h  4 BYTEs    signature "FTSR"
  5213.  04h    WORD    segment address of this module (used to check validity)
  5214.  06h    WORD    number of words to skip (usually 0000h if no PSP present)
  5215.  08h  N WORDs    module-defined data that must be at a fixed segment offset
  5216.         (usually only a PSP if file access is required)
  5217.      5N BYTEs    interrupt list (see #1298)
  5218.     BYTE    FFh terminator
  5219.  
  5220. Format of Kingswood TSR interrupt list entry:
  5221. Offset    Size    Description    (Table 1298)
  5222.  00h    BYTE    interrupt number (00h-FEh)
  5223.  01h    WORD    offset within segment of DWORD pointer to previous interrupt
  5224.  03h    WORD    offset within segment of begin of interrupt handler code
  5225. --------t-2F39--BL01-------------------------
  5226. INT 2F - Kingswood TSR INTERFACE - REMOVAL CHECK
  5227.     AH = 39h
  5228.     BL = 01h
  5229.     AL = TSR ID number (01h-FFh) (see #1296)
  5230. Return: AL = status
  5231.         00h not ready to be removed
  5232.         FFh resident module may be removed by deassigning the interrupts
  5233.           hooked by the TSR and deallocating the TSR's memory block
  5234.     AH,BX,CX,DX,ES may be destroyed
  5235. SeeAlso: AX=3900h,AH=39h/BL=00h
  5236. --------t-2F39-------------------------------
  5237. INT 2F - Kingswood TSR INTERFACE - APPLICATION-SPECIFIC FUNCTION CALLS
  5238.     AH = 39h
  5239.     BL = function number (02h-FFh)
  5240.     AL = TSR ID number (01h-FFh) (see #1296)
  5241.     CX,DX,SI,DI,DS,ES may contain parameters
  5242.     BH reserved for use by the function dispatcher
  5243. Return: as appropriate for the called function
  5244. SeeAlso: AX=3900h,AH=39h/BL=00h,AX=3901h/BL=02h
  5245. --------r-2F3901BL02-------------------------
  5246. INT 2F - Kingswood TSR Windows - OPEN WINDOW
  5247.     AX = 3901h
  5248.     BL = 02h
  5249. Return: AX = error code (0000h if successful)
  5250.     SI,DI,DS,ES preserved
  5251. Notes:    opens the next TSR window on top of any others.     Only three
  5252.       TSR windows can be opened at any one time.  The three windows
  5253.       are all 40x11 characters, partly overlapping.
  5254. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=03h,AX=3901h/BL=05h,AX=3901h/BL=06h
  5255. --------r-2F3901BL03-------------------------
  5256. INT 2F - Kingswood TSR Windows - HIDE WINDOWS
  5257.     AX = 3901h
  5258.     BL = 03h
  5259. Return: AX = error code (0000h if successful)
  5260.     SI,DI,DS,ES preserved
  5261. Notes:    Hide any visible TSR windows from view.
  5262. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=05h
  5263. --------r-2F3901BL04-------------------------
  5264. INT 2F - Kingswood TSR Windows - SHOW WINDOWS
  5265.     AX = 3901h
  5266.     BL = 04h
  5267. Return: AX = error code (0000h if successful)
  5268.     SI,DI,DS,ES preserved
  5269. Notes:    Re-display all TSR windows after a HIDE WINDOWS call.
  5270. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=03h
  5271. --------r-2F3901BL05-------------------------
  5272. INT 2F - Kingswood TSR Windows - CLOSE WINDOW
  5273.     AX = 3901h
  5274.     BL = 05h
  5275. Return: AX = error code (0000h if successful)
  5276.     SI,DI,DS,ES preserved
  5277. Notes:    Close the last opened TSR window.
  5278. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  5279. --------r-2F3901BL06-------------------------
  5280. INT 2F - Kingswood TSR Windows - SET WINDOW TITLE
  5281.     AX = 3901h
  5282.     BL = 06h
  5283.     DS:SI -> title string
  5284. Return: AX = error code (0000h if successful)
  5285.     SI,DI,DS,ES preserved
  5286. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  5287. --------r-2F3901BL07-------------------------
  5288. INT 2F - Kingswood TSR Windows - POSITION CURSOR
  5289.     AX = 3901h
  5290.     BL = 07h
  5291.     CH = Y coordinate (0-10)
  5292.     CL = X coordinate (0-39)
  5293. Return: AX = error code (0000h if successful)
  5294.     SI,DI,DS,ES preserved
  5295. Note:    the hardware cursor is always disabled when a TSR window is opened;
  5296.       this call only sets a text position
  5297. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=08h,AX=3901h/BL=09h
  5298. --------r-2F3901BL08-------------------------
  5299. INT 2F - Kingswood TSR Windows - DISPLAY STRING
  5300.     AX = 3901h
  5301.     BL = 08h
  5302.     DS:SI -> string
  5303. Return: AX = error code (0000h if successful)
  5304.     SI,DI,DS,ES preserved
  5305. Notes:    The text is not clipped.
  5306.     This routine understands Tab, NewLine and Carriage Return
  5307. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  5308. --------r-2F3901BL09-------------------------
  5309. INT 2F - Kingswood TSR Windows - SCROLL WINDOW
  5310.     AX = 3901h
  5311.     BL = 09h
  5312.     CL = scroll direction: 01h up, FFh down, 00h clear window
  5313. Return: AX = error code (0000h if successful)
  5314.     SI,DI,DS,ES preserved
  5315. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  5316. --------r-2F3901BL0A-------------------------
  5317. INT 2F - Kingswood TSR Windows - SOUND BEEPER
  5318.     AX = 3901h
  5319.     BL = 0Ah
  5320.     DX = sound divisor, or 0 for silence.
  5321.          (divide 1843200 by required frequency to get value for DX)
  5322.     CL = sound length in 18.2 Hz clock ticks
  5323. Return: AX = error code (0000h if successful)
  5324.     SI,DI,DS,ES preserved
  5325. SeeAlso: AH=39h/BL=00h
  5326. --------r-2F3901BL0B-------------------------
  5327. INT 2F - Kingswood TSR Windows - ADD OR REMOVE USER
  5328.     AX = 3901h
  5329.     BL = 0Bh
  5330.     CL = number of users increment: +1 if adding a new user
  5331.                     -1 if removing a user
  5332. Return: AX = error code (0000h if successful)
  5333.     SI,DI,DS,ES preserved
  5334. Note:    the TSR windows resident module may only be removed when the internal
  5335.       user count is zero
  5336. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  5337. --------V-2F3912BL03-------------------------
  5338. INT 2F - Kingswood ANSI display driver - SET COMPATIBILITY MODE
  5339.     AX = 3912h
  5340.     BL = 03h
  5341.     CL = new mode (00h fast, FFh BIOS)
  5342. Return: AL = old compatibility mode
  5343.     SI,DI,DS,ES preserved
  5344. SeeAlso: AX=3900h,AX=3912h/BL=04h
  5345. --------V-2F3912BL04-------------------------
  5346. INT 2F - Kingswood ANSI display driver - SET FLAGS
  5347.     AX = 3912h
  5348.     BL = 04h
  5349.     CL = new flags (see #1299)
  5350. Return: AL = old flags
  5351.     SI,DI,DS,ES preserved
  5352. SeeAlso: AX=3900h,AX=3912h/BL=03h
  5353.  
  5354. Bitfields for Kingswood ANSI flags:
  5355. Bit(s)    Description    (Table 1299)
  5356.  0    do not wrap at end of line
  5357.  1    wait for beeps to end before displaying next character
  5358.  2    do not use graphics cursor
  5359. --------W-2F4000-----------------------------
  5360. INT 2F - Windows 3.x (OS/2 2.x???) - GET VIRTUAL DEVICE DRIVER (VDD) CAPABLTIES
  5361.     AX = 4000h
  5362. Return: AL = video virtualization (see #1300)
  5363. Note:    this function is used by display drivers to find out what capabilities
  5364.       exist for the VDD driver and also trigger the VDD driver to call
  5365.       functions 4005h and 4006h.  This function also gives the Video Driver
  5366.       hardware access to the video registers.
  5367.  
  5368. (Table 1300)
  5369. Values for Windows video virtualization:
  5370.  01h    does not virtualize video access
  5371.  02h    virtualizes the video when in text mode
  5372.  03h    virtualizes the video when in text mode or single plane graphics modes
  5373.  04h    virtualizes the video when in text mode, single plane graphics modes,
  5374.       and VGA multiplane modes
  5375.  FFh    virtualizes the video fully
  5376. --------O-2F4001-----------------------------
  5377. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO BACKGROUND
  5378.     AX = 4001h
  5379. Note:    called by OS/2 when the DOS box is about to be placed in the background
  5380.       and the video driver should save any necessary state
  5381. SeeAlso: AX=4002h,AX=4005h
  5382. --------O-2F4002-----------------------------
  5383. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO FOREGROUND
  5384.     AX = 4002h
  5385. Note:    called by OS/2 when the DOS box is about to be placed in the foreground
  5386.       and the video driver should restore the previously-saved state
  5387. SeeAlso: AX=4001h,AX=4006h
  5388. --------W-2F4003-----------------------------
  5389. INT 2F - Windows 3.x - ENTERING VIDEO DRIVER CRITICAL SECTION
  5390.     AX = 4003h
  5391. Note:    This critical section must be exited within 1 second.
  5392. SeeAlso: AX=4004h
  5393. --------W-2F4004-----------------------------
  5394. INT 2F - Windows 3.x - EXITING VIDEO DRIVER CRITICAL SECTION
  5395.     AX = 4004h
  5396. SeeAlso: AX=4003h
  5397. --------W-2F4005-----------------------------
  5398. INT 2F C - Windows 3.x - SWITCHING DOS TO BACKGROUND
  5399.     AX = 4005h
  5400. Note:    called by Windows when the DOS box is about to be placed in the
  5401.       background and the video driver should save any necessary state
  5402.       information (this may be called only in Standard mode)
  5403. SeeAlso: AX=4001h,AX=4006h
  5404. --------W-2F4006-----------------------------
  5405. INT 2F C - Windows 3.x - SWITCHING DOS TO FOREGROUND
  5406.     AX = 4006h
  5407. Note:    called by Windows when the DOS box is about to be placed in the
  5408.       foreground and the video driver should restore any necessary state
  5409.       information (this may be called only in Standard mode)
  5410. SeeAlso: AX=4002h,AX=4005h
  5411. --------W-2F4007-----------------------------
  5412. INT 2F - Windows 3.x - ENABLE VDD TRAPPING OF VIDEO REGISTERS
  5413.     AX = 4007h
  5414. Note:    used by Windows Standard mode
  5415. --------E-2F4040-----------------------------
  5416. INT 2F - PharLap 286|DOS-Extender Lite v2.5 - ???
  5417.     AX = 4040h
  5418. Return: BX:CX -> ???
  5419. --------N-2F4100-----------------------------
  5420. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - INSTALLATION CHECK
  5421.     AX = 4100h
  5422. Return: CF clear if successful
  5423.         AL = FFh
  5424.     CF set on error
  5425.         AX = ???
  5426. Notes:    MINIPOP and NETPOPUP provide a network message popup service
  5427.     LAN Manager enhanced mode adds features beyond the standard redirector
  5428.       file/printer services
  5429. SeeAlso: AX=118Ah,AX=4103h,AX=4104h,AH=42h,AH=4Bh
  5430. --------N-2F4103-----------------------------
  5431. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  5432.     AX = 4103h
  5433. Return: ???
  5434. SeeAlso: AX=4100h,AX=4104h
  5435. --------N-2F4104-----------------------------
  5436. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  5437.     AX = 4104h
  5438. Return: ???
  5439. SeeAlso: AX=4100h,AX=4103h
  5440. --------N-2F42-------------------------------
  5441. INT 2F - LAN Manager 2.0 DOS Enhanced MSRV.EXE - MESSENGER SERVICE
  5442.     AH = 42h
  5443.     ???
  5444. Return: ???
  5445. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  5446.       file/printer services
  5447. SeeAlso: AX=118Ah,AX=4100h,AH=4Bh
  5448. --------m-2F4300-----------------------------
  5449. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) v2+ - INSTALLATION CHECK
  5450.     AX = 4300h
  5451. Return: AL = 80h XMS driver installed
  5452.     AL <> 80h no driver
  5453. Notes:    XMS gives access to extended memory and noncontiguous/nonEMS memory
  5454.       above 640K
  5455.     this installation check DOES NOT follow the format used by other
  5456.       software
  5457. SeeAlso: AX=4310h
  5458. Index:    installation check;XMS version 2+
  5459. --------m-2F4308-----------------------------
  5460. INT 2F U - HIMEM.SYS v2.77+ - GET A20 HANDLER NUMBER
  5461.     AX = 4308h
  5462. Return: AL = 43h if supported
  5463.         BL = A20 handler number (value of /MACHINE:nn switch)
  5464.         BH = AT A20 switch time (00h medium, 01h fast, 02h slow)
  5465. Note:    if the A20 handler number returned in BL is 00h, an external handler
  5466.       is being used (see AX=4330h)
  5467. SeeAlso: AX=4309h,AX=4330h
  5468. --------m-2F4309-----------------------------
  5469. INT 2F U - HIMEM.SYS v3.09+ - GET XMS HANDLE TABLE
  5470.     AX = 4309h
  5471. Return: AL = 43h if function supported
  5472.         ES:BX -> XMS handle table (see #1301)
  5473. Note:    HIMEM.SYS v3.09 is part of MS-DOS 6.0.
  5474. SeeAlso: AX=4308h
  5475.  
  5476. Format of XMS handle table:
  5477. Offset    Size    Description    (Table 1301)
  5478.  00h    BYTE    ??? (01h in HIMEM.SYS v3.09)
  5479.  01h    BYTE    size of one handle descriptor
  5480.  02h    WORD    number of handles (default = 20h)
  5481.  04h    DWORD    pointer to XMS handle array (see #1302)
  5482. SeeAlso: #1336
  5483.  
  5484. Format of XMS handle descriptor [array]:
  5485. Offset    Size    Description    (Table 1302)
  5486.  00h    BYTE    flag
  5487.         01h=free, 02h=used, 04h=in pool but not associated with any EMB
  5488.  01h    BYTE    lock count (00h=unlocked)
  5489.  02h    DWORD    address of XMS block in KB (shift left by 10 for abs. address)
  5490.  06h    DWORD    size of XMS block in KB
  5491. --------m-2F4310-----------------------------
  5492. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) v2+ - GET DRIVER ADDRESS
  5493.     AX = 4310h
  5494. Return: ES:BX -> driver entry point (see #1303,#1304,#1314,#1333)
  5495. Notes:    HIMEM.SYS v2.77 chains to previous handler if AH is not 00h or 10h
  5496.     HIMEM.SYS requires at least 256 bytes free stack space when calling
  5497.       the driver entry point
  5498. SeeAlso: AX=4300h
  5499.  
  5500. Format of XMS driver entry point:
  5501. Offset    Size    Description    (Table 1303)
  5502.  00h  5 BYTEs    jump to actual handler
  5503.         either short jump (EBh XXh) followed by three NOPs or
  5504.           far jump (EAh XXXX:XXXX) to a program which has hooked itself
  5505.           into the XMS driver chain
  5506. Note:    to hook into the XMS driver chain, a program should follow the chain of
  5507.       far jumps until it reaches the short jump of the driver at the end
  5508.       of the chain; this short jump is to be replaced with a far jump to
  5509.       the new handler's entry point, which should contain a short jump
  5510.       followed by three NOPs.  The new handler must return to the address
  5511.       pointed at by the short jump which was overwritten.  Using this
  5512.       method, the new handler becomes the first to see every XMS request.
  5513.  
  5514. (Table 1304)
  5515. Call the XMS driver "Get XMS version number" function with:
  5516.     AH = 00h
  5517. Return: AX = XMS version (in BCD, AH=major, AL=minor)
  5518.     BX = internal revision number (in BCD for HIMEM.SYS)
  5519.     DX = High Memory Area (HMA) state
  5520.         0001h HMA (1M to 1M + 64K) exists
  5521.         0000h HMA does not exist
  5522.  
  5523. (Table 1305)
  5524. Call the XMS driver "Request High Memory Area" function with:
  5525.     AH = 01h
  5526.     DX = memory in bytes (for TSR or device drivers)
  5527.         FFFFh if application program
  5528. Return: AX = status
  5529.         0001h success
  5530.         0000h failure
  5531.         BL = error code (80h,81h,90h,91h,92h) (see #1334)
  5532. Note:    HIMEM.SYS will fail function 01h with error code 91h if AL=40h and
  5533.       DX=KB free extended memory returned by last call of function 08h
  5534.  
  5535. (Table 1306)
  5536. Call the XMS driver "Release High Memory Area" function with:
  5537.     AH = 02h
  5538. Return: AX = status
  5539.         0001h success
  5540.         0000h failure
  5541.         BL = error code (80h,81h,90h,93h) (see #1334)
  5542.  
  5543. (Table 1307)
  5544. Call the XMS driver "Global enable A20, for using the HMA" function with:
  5545.     AH = 03h
  5546. Return: AX = status
  5547.         0001h success
  5548.         0000h failure
  5549.         BL = error code (80h,81h,82h) (see #1334)
  5550.  
  5551. (Table 1308)
  5552. Call the XMS driver "Global disable A20" function with:
  5553.     AH = 04h
  5554. Return: AX = status
  5555.         0001h success
  5556.         0000h failure
  5557.         BL = error code (80h,81h,82h,94h) (see #1334)
  5558.  
  5559. (Table 1309)
  5560. Call the XMS driver "Local enable A20" function with:
  5561.     AH = 05h
  5562. Return: AX = status
  5563.         0001h success
  5564.         0000h failure
  5565.         BL = error code (80h,81h,82h) (see #1334)
  5566. Note:    this function is used for direct access to extended memory
  5567.  
  5568. (Table 1310)
  5569. Call the XMS driver "Local disable A20" function with:
  5570.     AH = 06h
  5571. Return: AX = status
  5572.         0001h success
  5573.         0000h failure
  5574.         BL = error code (80h,81h,82h,94h) (see #1334)
  5575.  
  5576. (Table 1311)
  5577. Call the XMS driver "Query A20 state" function with:
  5578.     AH = 07h
  5579. Return: AX = status
  5580.         0001h enabled
  5581.         0000h disabled
  5582.         BL = error code (00h,80h,81h) (see #1334)
  5583.  
  5584. (Table 1312)
  5585. Call the XMS driver "Query free extended memory" function with:
  5586.     AH = 08h
  5587.     BL = 00h (some implementations leave BL unchanged on success)
  5588. Return: AX = size of largest extended memory block in KB
  5589.     DX = total extended memory in KB
  5590.     BL = error code (00h,80h,81h,A0h) (see #1334)
  5591. Note:    this function does not include the HMA in the returned memory sizes
  5592.  
  5593. (Table 1313)
  5594. Call the XMS driver "Allocate extended memory block" function with:
  5595.     AH = 09h
  5596.     DX = Kbytes needed
  5597. Return: AX = status
  5598.         0001h success
  5599.         DX = handle for memory block
  5600.         0000h failure
  5601.         BL = error code (80h,81h,A0h) (see #1334)
  5602. SeeAlso: #1331
  5603.  
  5604. (Table 1314)
  5605. Call the XMS driver "Free extended memory block" function with:
  5606.     AH = 0Ah
  5607.     DX = handle of block to free
  5608. Return: AX = status
  5609.         0001h success
  5610.         0000h failure
  5611.         BL = error code (80h,81h,A2h,ABh) (see #1334)
  5612. SeeAlso: #1313,#1331
  5613.  
  5614. (Table 1315)
  5615. Call the XMS driver "Move extended memory block" function with:
  5616.     AH = 0Bh
  5617.     DS:SI -> EMM structure (see #1335)
  5618. Return: AX = status
  5619.         0001h success
  5620.         0000h failure
  5621.         BL = error code (80h-82h,A3h-A9h) (see #1334)
  5622. Note:    if either handle in the EMM structure is 0000h, the corresponding
  5623.       offset is considered to be an absolute segment:offset address in
  5624.       directly addressable memory
  5625.  
  5626. (Table 1316)
  5627. Call the XMS driver "Lock extended memory block" function with:
  5628.     AH = 0Ch
  5629.     DX = handle of block to lock
  5630. Return: AX = status
  5631.         0001h success
  5632.         DX:BX = 32-bit linear address of locked block
  5633.         0000h failure
  5634.         BL = error code (80h,81h,A2h,ACh,ADh) (see #1334)
  5635. Note:    MS Windows 3.x rejects this function for handles allocated after
  5636.       Windows started
  5637.  
  5638. (Table 1317)
  5639. Call the XMS driver "Unlock extended memory block" function with:
  5640.     AH = 0Dh
  5641.     DX = handle of block to unlock
  5642. Return: AX = status
  5643.         0001h success
  5644.         0000h failure
  5645.         BL = error code (80h,81h,A2h,AAh) (see #1334)
  5646.  
  5647. (Table 1318)
  5648. Call the XMS driver "Get handle information" function with:
  5649.     AH = 0Eh
  5650.     DX = handle for which to get info
  5651. Return: AX = status
  5652.         0001h success
  5653.         BH = block's lock count
  5654.         BL = number of free handles left
  5655.         DX = block size in KB
  5656.         0000h failure
  5657.         BL = error code (80h,81h,A2h) (see #1334)
  5658. BUG:    MS Windows 3.10 acts as though unallocated handles are in use
  5659. Note:    MS Windows 3.00 has problems with this call
  5660.  
  5661. (Table 1319)
  5662. Call the XMS driver "Reallocate extended memory block" function with:
  5663.     AH = 0Fh
  5664.     DX = handle of block
  5665.     BX = new size of block in KB
  5666. Return: AX = status
  5667.         0001h success
  5668.         0000h failure
  5669.         BL = error code (80h,81h,A0h-A2h,ABh) (see #1334)
  5670.  
  5671. (Table 1320)
  5672. Call the XMS driver "Request upper memory block" function with:
  5673.     AH = 10h
  5674.     DX = size of block in paragraphs
  5675. Return: AX = status
  5676.         0001h success
  5677.         BX = segment address of UMB
  5678.         DX = actual size of block
  5679.         0000h failure
  5680.         BL = error code (80h,B0h,B1h) (see #1334)
  5681.         DX = largest available block
  5682. Notes:    Upper Memory consists of non-EMS memory between 640K and 1024K
  5683.     the XMS driver need not implement functions 10h through 12h to be
  5684.       considered compliant with the standard
  5685.  
  5686. (Table 1321)
  5687. Call the XMS driver "Release upper memory block" function with:
  5688.     AH = 11h
  5689.     DX = segment address of UMB to release
  5690. Return: AX = status
  5691.         0001h success
  5692.         0000h failure
  5693.         BL = error code (80h,B2h) (see #1334)
  5694. Note:    the XMS driver need not implement functions 10h through 12h to be
  5695.       considered compliant with the standard
  5696.  
  5697. (Table 1322)
  5698. Call the XMS v3.0+ driver "Reallocate upper memory block" function with:
  5699.     AH = 12h
  5700.     DX = segment address of UMB to resize
  5701.     BX = new size of block in paragraphs
  5702. Return: AX = status
  5703.         0001h success
  5704.         0000h failure
  5705.         BL = error code (80h,B0h,B2h) (see #1334)
  5706.         DX = maximum available size (RM386)
  5707. Note:    the XMS driver need not implement functions 10h through 12h to be
  5708.       considered compliant with the standard
  5709.  
  5710. (Table 1323)
  5711. Call the QEMM v5.11 "???" function with:
  5712.     AH = 34h  (QEMM 5.11 only, undocumented)
  5713.     ???
  5714. Return: ???
  5715.  
  5716. (Table 1324)
  5717. Call the QEMM v5.11 "???" function with:
  5718.     AH = 44h  (QEMM 5.11 only, undocumented)
  5719.     ???
  5720. Return: ???
  5721.  
  5722. (Table 1325)
  5723. Call the Netroom RM386 v6.00 "Reallocate upper memory block" function with:
  5724.     AH = 80h
  5725.     DX = segment address of UMB to resize
  5726.     BX = new size of block in paragraphs
  5727. Return: AX = status
  5728.         0001h success
  5729.         0000h failure
  5730.         BL = error code (80h,B0h,B2h) (see #1334)
  5731.         DX = maximum available size
  5732. Note:    this function is identical to function 12h
  5733.  
  5734. (Table 1326)
  5735. Call the Netroom RM386 v6.00 "re-enable HMA allocation" function with:
  5736.     AH = 81h
  5737. Return: AX = 0001h (success)
  5738.  
  5739. (Table 1327)
  5740. Call the Netroom RM386 v6.00 "Cloaking API" function with:
  5741.     AH = 82h
  5742.     DX = XMS handle of block containing protected-mode code
  5743.     CL = code size (00h 16-bit, else 32-bit)
  5744.     ESI, EDI = parameters to pass to protected-mode code
  5745. Return: AX = status
  5746.         0001h success
  5747.         0000h failed
  5748.         BL = error code (A2h,B0h) (see #1334)
  5749. Note:    this function calls offset 0 in the XMS memory block with
  5750.         EBX = physical address of block's start
  5751.         CS = code selector for XMS block at EBX (16-bit or 32-bit)
  5752.         DS = data selector for XMS block, starting at EBX
  5753.         ES = selector for V86 memory access to full real-mode 1088K
  5754.         GS = selector for full flat address space
  5755.         ESI, EDI from V86 mode
  5756.  
  5757. (Table 1328)
  5758. Call the Netroom RM386 v6.00 "Create new UMB entry" function with:
  5759.     AH = 83h
  5760.     BX = segment of high-memory block
  5761.     DX = first page of start of block
  5762.     CX = number of consecutive pages in block
  5763.     DI = start of UMB in block
  5764. Return: AX = 0001h (success)
  5765.     DI = segment of first high-DOS block
  5766. Note:    the new UMB is not linked into the high-memory chain
  5767.  
  5768. (Table 1329)
  5769. Call the Netroom RM386 v6.00 "Get all XMS handles info" function with:
  5770.     AH = 84h
  5771.     CX = size of buffer for handle info
  5772.     ES:DI -> buffer for handle info (see #1336)
  5773. Return: AX = 0001h (success)
  5774.     DX = current number of allocated XMS handles
  5775.  
  5776. (Table 1330)
  5777. Call the XMS v3.0 driver "Query free extended memory" function with:
  5778.     AH = 88h
  5779. Return: EAX = largest block of extended memory, in KB
  5780.     BL = status (00h,80h,81h,A0h) (see #1334)
  5781.     ECX = physical address of highest byte of memory
  5782.         (valid even on error codes 81h and A0h)
  5783.     EDX = total Kbytes of extended memory (0 if status A0h)
  5784. BUG:    HIMEM v3.03-3.07 crash on an 80286 machine if any of the 8Xh functions
  5785.       are called
  5786. SeeAlso: #1312,#1331
  5787.  
  5788. (Table 1331)
  5789. Call the XMS v3.0 driver "Allocate any extended memory" function with:
  5790.     AH = 89h
  5791.     EDX = Kbytes needed
  5792. Return: AX = status
  5793.         0001h success
  5794.         DX = handle for allocated block (free with AH=0Ah) (see #1314)
  5795.         0000h failure
  5796.         BL = status (80h,81h,A0h,A1h,A2h) (see #1334)
  5797. SeeAlso: #1313,#1330
  5798.  
  5799. (Table 1332)
  5800. Call the XMS v3.0 driver "Get extended EMB handle information" function with:
  5801.     AH = 8Eh
  5802.     DX = handle
  5803. Return: AX = status
  5804.         0001h success
  5805.         BH = block's lock count
  5806.         CX = number of free handles left
  5807.         EDX = block size in KB
  5808.         0000h failure
  5809.         BL = status (80h,81h,A2h) (see #1334)
  5810. BUG:    MS-DOS 6.0 HIMEM.SYS leaves CX unchanged
  5811.  
  5812. (Table 1333)
  5813. Call the XMS v3.0 driver "Reallocate any extended memory block" function with:
  5814.     AH = 8Fh
  5815.     DX = unlocked handle
  5816.     EBX = new size in KB
  5817. Return: AX = status
  5818.         0001h success
  5819.         0000h failure
  5820.         BL = status (80h,81h,A0h-A2h,ABh) (see #1334)
  5821. BUG:    HIMEM v3.03-3.07 crash on an 80286 machine if any of the 8Xh functions
  5822.       are called
  5823.  
  5824. (Table 1334)
  5825. Values for XMS error code returned in BL:
  5826.  00h    successful
  5827.  80h    function not implemented
  5828.  81h    Vdisk was detected
  5829.  82h    an A20 error occurred
  5830.  8Eh    a general driver error
  5831.  8Fh    unrecoverable driver error
  5832.  90h    HMA does not exist or is not managed by XMS provider
  5833.  91h    HMA is already in use
  5834.  92h    DX is less than the /HMAMIN= parameter
  5835.  93h    HMA is not allocated
  5836.  94h    A20 line still enabled
  5837.  A0h    all extended memory is allocated
  5838.  A1h    all available extended memory handles are allocated
  5839.  A2h    invalid handle
  5840.  A3h    source handle is invalid
  5841.  A4h    source offset is invalid
  5842.  A5h    destination handle is invalid
  5843.  A6h    destination offset is invalid
  5844.  A7h    length is invalid
  5845.  A8h    move has an invalid overlap
  5846.  A9h    parity error occurred
  5847.  AAh    block is not locked
  5848.  ABh    block is locked
  5849.  ACh    block lock count overflowed
  5850.  ADh    lock failed
  5851.  B0h    only a smaller UMB is available
  5852.  B1h    no UMB's are available
  5853.  B2h    UMB segment number is invalid
  5854.  
  5855. Format of EMM structure:
  5856. Offset    Size    Description    (Table 1335)
  5857.  00h    DWORD    number of bytes to move (must be even)
  5858.  04h    WORD    source handle
  5859.  06h    DWORD    offset into source block
  5860.  0Ah    WORD    destination handle
  5861.  0Ch    DWORD    offset into destination block
  5862. Notes:    if source and destination overlap, only forward moves (source base
  5863.       less than destination base) are guaranteed to work properly
  5864.     if either handle is zero, the corresponding offset is interpreted
  5865.       as a real-mode address referring to memory directly addressable
  5866.       by the processor
  5867.  
  5868. Format of XMS handle info [array]:
  5869. Offset    Size    Description    (Table 1336)
  5870.  00h    BYTE    handle
  5871.  01h    BYTE    lock count
  5872.  02h    DWORD    handle size
  5873.  06h    DWORD    handle physical address (only valid if lock count nonzero)
  5874. SeeAlso: #1301
  5875. --------m-2F4320-----------------------------
  5876. INT 2F U - HIMEM.SYS - Mach 20 SUPPORT
  5877.     AX = 4320h
  5878.     ???
  5879. Return: ???
  5880. --------m-2F4330-----------------------------
  5881. INT 2F CU - HIMEM.SYS v2.77+ - GET EXTERNAL A20 HANDLER ADDRESS
  5882.     AX = 4330h
  5883. Return: AL = 80h if external A20 handler provided
  5884.         ES:BX -> external A20 handler (see #1337)
  5885.         CL = A20 detection support
  5886.         00h handler is unable to report A20 state
  5887.         01h handler supports function 0002h to report A20 state
  5888. Note:    HIMEM.SYS calls this function to allow an external program to provide
  5889.       an A20 handler (i.e. to support a machine not supported by HIMEM
  5890.       itself)
  5891. SeeAlso: AX=4308h,AX=4310h
  5892.  
  5893. (Table 1337)
  5894. Call parameters for external A20 handler are:
  5895.     AX = function
  5896.         0000h disable A20
  5897.         0001h enable A20
  5898.         0002h get A20 state
  5899. Return: AX = status (functions 0000h and 0001h)
  5900.         0000h failure
  5901.         0001h successful
  5902.     AX = A20 state (function 0002h)
  5903.         0000h disabled
  5904.         0001h enabled
  5905. Note:    HIMEM.SYS only calls function 0002h if the returned CL indicated that
  5906.       the handler supports the call
  5907. --------E-2F43E0-----------------------------
  5908. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - INSTALLATION CHECK
  5909.     AX = 43E0h
  5910.     BX = 0000h
  5911.     CX = 4450h ('DP')
  5912.     DX = 4D53h ('MS')
  5913. Return: AX = 0000h if installed
  5914.         CF clear
  5915.         ES:DI -> server structure (see #1338)
  5916.         ES:BX -> registration structure (pre-NWDOS 7 beta spec) (see #1340)
  5917. Note:    the DPMS 1.0 server included with Novell DOS 7.0 supports both the
  5918.       beta and 1.0 specification, setting ES:BX even if CX and DX are not
  5919.       as specified on entry (since the beta specification did not use those
  5920.       registers)
  5921. SeeAlso: AX=43E1h,AX=43E2h,AX=43E3h,INT 2F/AX=1687h
  5922. Index:    signature strings;DPMS
  5923.  
  5924. Format of DPMS 1.0 server structure:
  5925. Offset    Size    Description    (Table 1338)
  5926.  00h  4 BYTEs    signature string "DPMS"
  5927.  04h  2 BYTEs    DPMS version (major,minor)
  5928.  06h  8 BYTEs    blank-padded server OEM name
  5929.  0Eh  2 BYTEs    OEM server version (major,minor)
  5930.  10h    WORD    DPMS flags (see #1339)
  5931.  12h    BYTE    CPU type
  5932.         (02h = 286, 03h = 386 or higher, higher values allowed)
  5933.  
  5934. Bitfields for DPMS flags:
  5935. Bit(s)    Description    (Table 1339)
  5936.  0    fast processor reset available (286 only)
  5937.  1    DPMS server is enabled
  5938.  2    memory is remapped
  5939.  3-15    reserved (undefined)
  5940.  
  5941. Format of beta DPMS registration structure:
  5942. Offset    Size    Description    (Table 1340)
  5943.  00h    DWORD    real-mode API entry point (see #1342)
  5944.  04h    DWORD    16-bit protected-mode API entry point (see #1342)
  5945.  08h  8 BYTEs    reserved (0)
  5946.  10h  8 BYTEs    blank-padded server OEM name
  5947.  18h    WORD    flags
  5948.         bit 0: fast processor reset available (286 only)
  5949.         bits 1-15 reserved (undefined)
  5950.  1Ah  2 BYTEs    DPMS version (major,minor)
  5951.  1Ch    BYTE    CPU type (02h = 286, 03h = 386 or higher)
  5952. ----------2F43E1-----------------------------
  5953. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - REGISTER CLIENT
  5954.     AX = 43E1h
  5955.     CX = required protected-mode stack size in bytes
  5956.     ES:DI -> DPMS client interface structure (see #1341)
  5957. Return: AX = 0000h if supported
  5958.        CF clear
  5959.        ES:DI buffer filled with API entry point code from offset 0Ah
  5960. Note:    the client is allowed to copy the returned API code to any location in
  5961.       memory, and need not keep the three code fields together
  5962. SeeAlso: AX=43E0h,AX=43E2h,AX=43E3h
  5963.  
  5964. Format of DPMS client interface structure:
  5965. Offset    Size    Description    (Table 1341)
  5966.  00h    WORD    0000h (structure version / flags)
  5967.  02h  8 BYTEs    blank-padded client name
  5968.  0Ah  7 BYTEs    real/virtual-86 mode API code (see #1342)
  5969.  11h    BYTE    space for return instruction
  5970.         C3h for near return (default), set to CBh for far return
  5971.  12h  7 BYTEs    16-bit protected-mode API code (see #1342)
  5972.  19h    BYTE    space for return instruction
  5973.         C3h for near return (default), set to CBh for far return
  5974.  1Ah  9 BYTEs    32-bit protected-mode API code (see #1342)
  5975.  23h    BYTE    space for return instruction
  5976.         C3h for near return (default), set to CBh for far return
  5977.  
  5978. (Table 1342)
  5979. Call DPMS entry point with:
  5980.     AX = 0000h unregister client from server
  5981.  ---control transfer functions---
  5982.     AX = 0100h call protected-mode procedure
  5983.         CX = number of words of stack to copy
  5984.         ES:(E)DI -> callup/down register structure (see #1344)
  5985.         Return: CF clear if successful
  5986.             CF set on error
  5987.                 AX = error code (see #1343)
  5988.     AX = 0101h call real-mode procedure (RETF return)
  5989.         CX = number of words of stack to copy
  5990.         ES:(E)DI -> callup/down register structure (see #1344)
  5991.         Return: CF clear if successful
  5992.             CF set on error
  5993.                 AX = error code (see #1343)
  5994.     AX = 0102h call real-mode procedure (IRET return)
  5995.         CX = number of words of stack to copy
  5996.         ES:(E)DI -> callup/down register structure (see #1344)
  5997.         Return: CF clear if successful
  5998.             CF set on error
  5999.                 AX = error code (see #1343)
  6000.     AX = 0103h call real-mode interrupt handler
  6001.         BL = interrupt number
  6002.         CX = number of words of stack to copy
  6003.         ES:(E)DI -> callup/down register structure (see #1344)
  6004.         Return: CF clear if successful
  6005.             CF set on error
  6006.                 AX = error code (see #1343)
  6007.     AX = 0104h register default protected mode procedure
  6008.         ES:(E)DI -> default register structure (see #1345)
  6009.         Return: CF clear if successful
  6010.             CF set on error
  6011.                 AX = error code (see #1343)
  6012.     AX = 0105h register default real-mode procedure (RETF return)
  6013.         ES:(E)DI -> default register structure (see #1345)
  6014.         Return: CF clear if successful
  6015.             CF set on error
  6016.                 AX = error code (see #1343)
  6017.         Note:    the procedure will be called from 16-bit prot. mode
  6018.     AX = 0106h register default real-mode procedure (IRET return)
  6019.         ES:(E)DI -> default register structure (see #1345)
  6020.         Return: CF clear if successful
  6021.             CF set on error
  6022.                 AX = error code (see #1343)
  6023.         Note:    the procedure will be called from 16-bit prot. mode
  6024.     AX = 0107h register default real-mode interrupt handler
  6025.         BL = interrupt number
  6026.         ES:(E)DI -> default register structure (see #1345)
  6027.         Return: CF clear if successful
  6028.             CF set on error
  6029.                 AX = error code (see #1343)
  6030.         Note:    the handler will be called from 16-bit protected mode
  6031.     AX = 0108h register default real-mode procedure (RETF return)
  6032.         ES:(E)DI -> default register structure (see #1345)
  6033.         Return: CF clear if successful
  6034.             CF set on error
  6035.                 AX = error code (see #1343)
  6036.         Note:    the procedure will be called from 32-bit prot. mode
  6037.     AX = 0109h register default real-mode procedure (IRET return)
  6038.         ES:(E)DI -> default register structure (see #1345)
  6039.         Return: CF clear if successful
  6040.             CF set on error
  6041.                 AX = error code (see #1343)
  6042.         Note:    the procedure will be called from 32-bit prot. mode
  6043.     AX = 010Ah register default real-mode interrupt handler
  6044.         BL = interrupt number
  6045.         ES:(E)DI -> default register structure (see #1345)
  6046.         Return: CF clear if successful
  6047.             CF set on error
  6048.                 AX = error code (see #1343)
  6049.         Note:    the handler will be called from 32-bit protected mode
  6050.  ---descriptor management---
  6051.     AX = 0200h allocate descriptors
  6052.         CX = number of descriptors to allocate
  6053.         Return: CF clear if successful
  6054.                 AX = selector for first descriptor allocated
  6055.             CF set on error
  6056.                 AX = error code (see #1343)
  6057.     AX = 0201h free a descriptor
  6058.         BX = selector for descriptor
  6059.         Return: CF clear if successful
  6060.             CF set on error
  6061.                 AX = error code (see #1343)
  6062.     AX = 0202h create alias descriptor
  6063.         BX = selector for descriptor to be aliased
  6064.         Return: CF clear if successful
  6065.                 AX = alias descriptor
  6066.             CF set on error
  6067.                 AX = error code (see #1343)
  6068.     AX = 0203h build alias to real-mode segment
  6069.         BX = descriptor
  6070.         CX = real-mode segment
  6071.         Return: CF clear if successful
  6072.             CF set on error
  6073.                 AX = error code (see #1343)
  6074.     AX = 0204h set descriptor base
  6075.         BX = descriptor
  6076.         CX:DX = base address
  6077.         Return: CF clear if successful
  6078.             CF set on error
  6079.                 AX = error code (see #1343)
  6080.     AX = 0205h set descriptor limit
  6081.         BX = descriptor
  6082.         CX = limit
  6083.         Return: CF clear if successful
  6084.             CF set on error
  6085.                 AX = error code (see #1343)
  6086.     AX = 0206h set descriptor type/attribute
  6087.         BX = descriptor
  6088.         CL = type
  6089.         CH = attribute
  6090.         Return: CF clear if successful
  6091.             CF set on error
  6092.                 AX = error code (see #1343)
  6093.     AX = 0207h get descriptor base
  6094.         BX = descriptor
  6095.         Return: CF clear if successful
  6096.                 CX:DX = base address
  6097.             CF set on error
  6098.                 AX = error code (see #1343)
  6099.  ---linear memory functions---
  6100.     AX = 0300h get size of largest free block of memory
  6101.         Return: CF clear if successful
  6102.                 BX:CX = size
  6103.             CF set on error
  6104.                 AX = error code (see #1343)
  6105.     AX = 0301h allocate block of extended memory
  6106.         BX:CX = required size
  6107.         Return: CF clear if successful
  6108.                 BX:CX = base address
  6109.                 SI:DI = handle
  6110.             CF set on error
  6111.                 AX = error code (see #1343)
  6112.     AX = 0302h free block of extended memory
  6113.         SI:DI = handle
  6114.         Return: CF clear if successful
  6115.             CF set on error
  6116.                 AX = error code (see #1343)
  6117.     AX = 0303h map linear memory
  6118.         ES:(E)DI -> DDS (see #1346)
  6119.         Return: CF clear if successful
  6120.                 BX:CX = base address
  6121.                 SI:DI = handle
  6122.             CF set on error
  6123.                 AX = error code (see #1343)
  6124.     AX = 0304h unmap linear memory
  6125.         SI:DI = handle
  6126.         Return: CF clear if successful
  6127.             CF set on error
  6128.                 AX = error code (see #1343)
  6129.     AX = 0305h get page table entries
  6130.         ESI = linear address
  6131.         (E)CX = count
  6132.         ES:(E)DI -> buffer for page table entries
  6133.         Return: CF clear if successful
  6134.                 ES:(E)DI buffer filled
  6135.             CF set on error
  6136.                 AX = error code (see #1343)
  6137.     AX = 0306h set page table entries
  6138.         EBX = linear memory handle
  6139.         ESI = linear address
  6140.         (E)CX = count
  6141.         ES:(E)DI -> buffer containing page table entries
  6142.         Return: CF clear if successful
  6143.             CF set on error
  6144.                 AX = error code (see #1343)
  6145.     AX = 0307h get largest mappable block size
  6146.         Return: CF clear if successful
  6147.                 BX:CX = size
  6148.             CF set on error
  6149.                 AX = error code (see #1343)
  6150.  ---miscellaneous---
  6151.     AX = 0400h relocate segment to extended memory
  6152.         ES:SI = base address
  6153.         CX = limit
  6154.         BL = type
  6155.         BH = attribute
  6156.         DX = selector or 0000h
  6157.         Return: CF clear if successful
  6158.                 AX = selector
  6159.                 BX:CX = new base address
  6160.                 SI:DI = handle
  6161.             CF set on error
  6162.                 AX = error code (see #1343)
  6163. Note:    the beta DPMS specification, which is still supported by the Novell
  6164.       DOS 7.0 DPMS host, only supported functions 0100h-0103h, 0200h-0207h,
  6165.       0300h-0304h, and 0400h
  6166.  
  6167. (Table 1343)
  6168. Values for DPMS error code:
  6169.  8000h    general error
  6170.  8001h    unsupported function
  6171.  8002h    unable to switch to protected mode
  6172.  8004h    no default stack defined
  6173.  8005h    unknown client
  6174.  8010h    resource unavailable
  6175.  8011h    descriptor unavailable
  6176.  8012h    linear memory unavailable
  6177.  8013h    physical memory unavailable
  6178.  8021h    invalid value
  6179.  8022h    invalid selector
  6180.  8023h    invalid handle
  6181.  8025h    invalid linear address
  6182.  
  6183. Format of DPMS callup/down register structure:
  6184. Offset    Size    Description    (Table 1344)
  6185.  00h    DWORD    EDI
  6186.  04h    DWORD    ESI
  6187.  08h    DWORD    EBP
  6188.  0Ch  4 BYTEs    reserved (0) (ESP, may be used by DPMS server)
  6189.  10h    DWORD    EBX
  6190.  14h    DWORD    EDX
  6191.  18h    DWORD    ECX
  6192.  20h    DWORD    EAX
  6193.  24h    DWORD    EIP
  6194.  28h    WORD    CS
  6195.  2Ah  2 BYTEs    reserved (0)
  6196.  2Ch    DWORD    EFLAGS
  6197.  30h    DWORD    ESP
  6198.  34h    WORD    SS
  6199.  36h  2 BYTEs    reserved (0)
  6200.  38h    WORD    ES
  6201.  3Ah  2 BYTEs    reserved (0)
  6202.  3Ch    WORD    DS
  6203.  3Eh  2 BYTEs    reserved (0)
  6204.  40h    WORD    FS
  6205.  42h  2 BYTEs    reserved (0)
  6206.  44h    WORD    GS
  6207.  46h  2 BYTEs    reserved (0)
  6208.  
  6209. Format of DPMS default register structure:
  6210. Offset    Size    Description    (Table 1345)
  6211.  00h    DWORD    EIP
  6212.  04h    WORD    CS
  6213.  06h  2 BYTEs    reserved (0)
  6214.  08h    WORD    number of words to copy from stack to stack
  6215.  0Ah    BYTE    (call) 00h
  6216.         (return) nonzero if call could not be made
  6217.  0Bh    BYTE    reserved (may be used by some servers)
  6218.  0Ch    DWORD    ESP
  6219.  10h    WORD    SS
  6220.  12h  2 BYTEs    reserved (0)
  6221.  14h    WORD    ES
  6222.  16h  2 BYTEs    reserved (0)
  6223.  18h    WORD    DS
  6224.  1Ah  2 BYTEs    reserved (0)
  6225.  1Ch    WORD    FS
  6226.  1Eh  2 BYTEs    reserved (0)
  6227.  20h    WORD    GS
  6228.  22h  2 BYTEs    reserved (0)
  6229.  24h  9 BYTEs    API entry code (filled in by server)
  6230.  
  6231. Format of DPMS lock DDS:
  6232. Offset    Size    Description    (Table 1346)
  6233.  00h    DWORD    total size in bytes
  6234.  04h    DWORD    offset
  6235.  08h    WORD    segment or selector
  6236.  0Ah    WORD    reserved
  6237.  0Ch    WORD    maximum number of physical blocks structure has space for
  6238.  0Eh    WORD    number of physical blocks listed
  6239.  10h    DWORD    physical address of first block
  6240.  14h    DWORD    size in bytes of first block
  6241.     ...
  6242. ----------2F43E2-----------------------------
  6243. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - ENABLE/DISABLE DPMS
  6244.     AX = 43E2h
  6245.     BX = new state (0000h disable, 0001h enable)
  6246. Return: AX = 0000h if supported
  6247. Note:    this function should normally be called only by system software
  6248. SeeAlso: AX=43E0h,AX=43E1h,AX=43E3h
  6249. ----------2F43E3-----------------------------
  6250. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - DPMS STARTUP BROADCAST
  6251.     AX = 43E3h
  6252.     BX = 0000h
  6253.     CX = 4450h ('DP')
  6254.     DX = 4D53h ('MS')
  6255. SeeAlso: AX=43E0h,AX=43E4h 
  6256. ----------2F43E3-----------------------------
  6257. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - DPMS EXIT BROADCAST
  6258.     AX = 43E4h
  6259.     BX = 0000h
  6260.     CX = 4450h ('DP')
  6261.     DX = 4D53h ('MS')
  6262. SeeAlso: AX=43E0h,AX=43E3h 
  6263. --------E-2F44-------------------------------
  6264. INT 2F U - DOS Extender support???
  6265.     AH = 44h
  6266.     AL = function (at least 0Bh, 15h, 17h)
  6267.     ???
  6268. Return: ???
  6269. Note:    called by Codeview for Windows
  6270. SeeAlso: AH=86h
  6271. --------G-2F4500-----------------------------
  6272. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - INSTALLATION CHECK
  6273.     AX = 4500h
  6274. Return: AL = installation status
  6275.         01h if PROF.COM installed
  6276.         02h if VPROD.386 installed
  6277. SeeAlso: AX=4501h,AX=4502h
  6278. --------G-2F4501-----------------------------
  6279. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SETUP PROFILER
  6280.     AX = 4501h
  6281.     BX = CSIPS buffer size in KB (first parameter for ProfSetup)
  6282.     CX = output limit in KB (second parameter for ProfSetup)
  6283. Note:    this call is not supported by PROF.COM
  6284. SeeAlso: AX=4502h,AX=4503h
  6285. --------G-2F4502-----------------------------
  6286. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SET SAMPLING RATE
  6287.     AX = 4502h
  6288.     BL = sampling rate for PROF.COM (0 < BL <= 13)
  6289.         (01h = 8192/s, 04h = 1024/s, 08h = 32/s, 0Dh = 1/s)
  6290.     CX = sampling rate for VPROD.386
  6291. Note:    for PROF.COM, this programs the CMOS clock by setting BL+2 as the
  6292.       low four bits of CMOS register 0Ah.  The interruption rate is
  6293.       1 SHL (15 - BL) per second.
  6294. SeeAlso: AX=4501h,AX=4503h
  6295. --------G-2F4503-----------------------------
  6296. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - START PROFILING
  6297.     AX = 4503h
  6298. Notes:    Profiling is also turned on by the key combinations
  6299.       LeftShift + RightShift + Alt and LeftShift + RightShift + Ctrl
  6300.     for PROF.COM, this call programs the CMOS clock by reading register
  6301.       0Ch, and setting bit 6 of register 0Bh.  It then makes sure that IRQ8
  6302.       is unmasked
  6303. SeeAlso: AX=4504h
  6304. --------G-2F4504-----------------------------
  6305. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - STOP PROFILING
  6306.     AX = 4504h
  6307. Notes:    profiling is also turned off by the key combination
  6308.       LeftShift + RightShift
  6309.     for PROF.COM, this programs the CMOS clock by reading register 0Ch
  6310.       and clearing bit 6 of register 0Bh.  It then masks IRQ8.
  6311. SeeAlso: AX=4503h,AX=4505h,AX=4506h,AX=4507h
  6312. --------G-2F4505-----------------------------
  6313. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - CLEAR PROFILING DATA
  6314.     AX = 4505h
  6315. SeeAlso: AX=4503h,AX=4504h,AX=4506h
  6316. --------G-2F4506-----------------------------
  6317. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFlush"
  6318.     AX = 4506h
  6319. SeeAlso: AX=4505h,AX=4507h
  6320. --------G-2F4507-----------------------------
  6321. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFinish"
  6322.     AX = 4507h
  6323. Note:    this call is essentially a "ProfStop" (AX=4504h) followed by
  6324.       "ProfFlush" (AX=4506h)
  6325. SeeAlso: AX=4504h,AX=4505h,AX=4506h
  6326. --------G-2F4508-----------------------------
  6327. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - ALTERNATE SEGDEBUG IFACE
  6328.     AX = 4508h
  6329.     BX = ordinal (or 0000h)
  6330.     CX = segment
  6331.     DX = instance (or 0000h)
  6332.     SI = type (or 0000h)
  6333.     ES:DI -> ASCIZ module name
  6334. Notes:    this call is an alternate entry to the profiler's SEGDEBUG
  6335.       interface, but only to function 0, for notifying the profiler of
  6336.       each new segment loaded.  The SHOWHITS utility then examines the
  6337.       profiler's output files (CSIPS.DAT and SEGENTRY.DAT) in conjunction
  6338.       with symbol files to provide information in a useful form.
  6339.     this call does not have a corresponding Windows function
  6340. SeeAlso: AX=4500h
  6341. --------D-2F4601-----------------------------
  6342. INT 2F CU - MS Windows WINOLDAP - SWITCHING ???
  6343.     AX = 4601h
  6344. Return: ???
  6345. Note:    the DOS 5+ kernel intercepts this function and copies the MCB
  6346.        following the caller's PSP memory block into the DOS data segment;
  6347.        in conjunction with AX=4602h, this intercept is used by DOS to
  6348.        avoid corruption of the Windows real-mode heap's end sentinel
  6349. SeeAlso: AX=1700h,AX=4602h
  6350. --------D-2F4602-----------------------------
  6351. INT 2F CU - MS Windows WINOLDAP - SWITCHING ???
  6352.     AX = 4602h
  6353. Return: ???
  6354. Note:    the DOS 5+ kernel intercepts this function and copies the
  6355.       previously-saved MCB from the DOS data segment into the MCB following
  6356.       the caller's PSP memory block; in conjunction with AX=4601h, this
  6357.       intercept is used by DOS to avoid corruption of the Windows real-mode
  6358.       heap's end sentinel
  6359. SeeAlso: AX=1700h,AX=4601h
  6360. --------E-2F46-------------------------------
  6361. INT 2F U - Windows/286 DOS Extender
  6362.     AH = 46h
  6363.     AL = subfunction (03h,04h)
  6364. Return: ???
  6365. Note:    these two subfunctions are called by MS Windows 3.0
  6366. --------v-2F4653CX0002-----------------------
  6367. INT 2F - F-PROT v1.x only - F-LOCK.EXE - API
  6368.     AX = 4653h
  6369.     CX = 0002h
  6370.     BX = subfunction
  6371.         0000h  installation check
  6372.         Return: AX = FFFFh
  6373.         0001h  uninstall
  6374.         Return: AX,BX,ES destroyed
  6375.         0002h  disable (v1.08 and below only)
  6376.         0003h  enable (v1.08 and below only)
  6377. Program: F-LOCK is part of the shareware F-PROT virus/trojan protection
  6378.       package by Fridrik Skulason
  6379. SeeAlso: AX=4653h/CX=0003h,AX=CA00h,INT 21/AX=4BEEh
  6380. Index:    installation check;F-LOCK|uninstall;F-LOCK
  6381. --------v-2F4653CX0003-----------------------
  6382. INT 2F - F-PROT v1.x only - F-XCHK.EXE - API
  6383.     AX = 4653h
  6384.     CX = 0003h
  6385.     BX = subfunction
  6386.         0000h  installation check
  6387.         Return: AX = FFFFh
  6388.         0001h  uninstall
  6389.         Return: AX,BX,ES destroyed
  6390. Program: F-XCHK is part of the shareware F-PROT virus/trojan protection
  6391.       package by Fridrik Skulason
  6392. SeeAlso: AX=4653h/CX=0002h,AX=4653h/CX=0004h,AX=CA00h
  6393. Index:    installation check;F-XCHK|uninstall;F-XCHK
  6394. --------v-2F4653CX0004-----------------------
  6395. INT 2F - F-PROT v1.x only - F-POPUP.EXE - API
  6396.     AX = 4653h
  6397.     CX = 0004h
  6398.     BX = subfunction
  6399.         0000h  installation check
  6400.         Return: AX = FFFFh
  6401.         0001h  uninstall
  6402.         Return: AX,BX,ES destroyed
  6403.         0002h  disable (v1.08 and below only)
  6404.            display message (v1.14+)
  6405.             other registers: ???
  6406.         0003h  enable (v1.08 and below only)
  6407.            display message (v1.14+)
  6408.             other registers: ???
  6409.             Return: AX = key pressed by user
  6410. Program: F-POPUP is part of the shareware F-PROT virus/trojan protection
  6411.       package by Fridrik Skulason
  6412. SeeAlso: AX=4653h/CX=0003h,AX=4653h/CX=0005h,AX=CA00h
  6413. Index:    installation check;F-POPUP|uninstall;F-POPUP
  6414. --------v-2F4653CX0005-----------------------
  6415. INT 2F - F-PROT v1.x only - F-DLOCK.EXE - API
  6416.     AX = 4653h
  6417.     CX = 0005h
  6418.     BX = subfunction
  6419.         0000h installation check
  6420.         Return: AX = FFFFh
  6421.         0001h uninstall
  6422.         Return: AX,BX,ES destroyed
  6423. Program: F-DLOCK is part of the shareware F-PROT virus/trojan protection
  6424.       package by Fridrik Skulason
  6425. SeeAlso: AX=4653h/CX=0004h,AX=CA00h
  6426. Index:    installation check;F-DLOCK|uninstall;F-DLOCK
  6427. --------W-2F4680-----------------------------
  6428. INT 2F U - MS Windows v3.0 - INSTALLATION CHECK
  6429.     AX = 4680h
  6430. Return: AX = result
  6431.         0000h MS Windows 3.0 running in real (/R) or standard (/S) mode,
  6432.           or DOS 5 DOSSHELL active
  6433.         nonzero  no Windows, Windows prior to 3.0, or Windows3 in enhanced
  6434.           mode
  6435. Note:    Windows 3.1 finally provides an installation check which works in all
  6436.       modes (see AX=160Ah)
  6437. SeeAlso: AX=1600h,AX=160Ah
  6438. ----------2F47-------------------------------
  6439. INT 2F U - ???
  6440.     AH = 47h
  6441.     ???
  6442. Return: ???
  6443. Note:    reportedly called by Microsoft BASIC Compiler v7.0
  6444. --------K-2F4800-----------------------------
  6445. INT 2F - DOS 5+ DOSKEY - INSTALLATION CHECK
  6446.     AX = 4800h
  6447. Return: AL = nonzero if installed (DOS 5.0 and 6.0 return AX=AA02h)
  6448.         ES = segment of DOSKEY resident portion
  6449. Note:    DOSKEY chains if AL is not 00h or 10h on entry
  6450. SeeAlso: AX=4800h"PCED",AX=4810h
  6451. --------K-2F4800-----------------------------
  6452. INT 2F - PCED v2.1 - INSTALLATION CHECK
  6453.     AX = 4800h
  6454. Return: AX = AACDh if installed
  6455.         ES = segment of PCED kernel (PCED has multiple code segments)
  6456. Program: PCED v2.1 is a command line editor/history/macro facility by
  6457.       Cove Software.  It is the commercial version of the freeware CED.
  6458. Notes:    DOSKEY also responds to this call if installed, returning AX=AA02h.
  6459.     unlike DOSKEY, PCED does *not* chain if AL contains an
  6460.       unsupported function code.  It IRETs with all registers intact.
  6461. --------K-2F4810-----------------------------
  6462. INT 2F - DOS 5+ DOSKEY, PCED v2.1 - READ INPUT LINE FROM CONSOLE
  6463.     AX = 4810h
  6464.     DS:DX -> line buffer (see INT 21/AH=0Ah)
  6465. Return: AX = 0000h if successful
  6466. Notes:    the first byte (length) of the buffer MUST be 80h, or DOSKEY chains to
  6467.       the previous handler; PCED allows sizes other than 80h
  6468.     if the user's input is a macro name, no text is placed in the buffer
  6469.       even though AX=0000h on return; the program must immediately issue
  6470.       this call again to retrieve the expansion of the macro.  Similarly,
  6471.       if the user enters a special parameter such as $*, this call must
  6472.       be repeated to retrieve the expansion; on the second call, DOSKEY
  6473.       overwrites the macro name on the screen with its expansion.
  6474.     unlike DOSKEY, PCED expands all macros on the first call, so it is
  6475.       not necessary to make two calls; since the buffer is not empty on
  6476.       return, DOSKEY-aware programs will not make the second call
  6477.     DOSKEY chains if AL is not 00h or 10h on entry
  6478. SeeAlso: AX=4800h,INT 21/AH=0Ah
  6479. --------K-2F48C0-----------------------------
  6480. INT 2F - PCED v2.1 - PCED API
  6481.     AX = 48C0h
  6482.     DX = API function code
  6483.     other registers as required by the specified function
  6484. Return: CF clear if successful
  6485.     CF set on error
  6486.         AX = PCED error code
  6487.     other registers as appropriate for API function
  6488. Program: PCED v2.1 is a command line editor/history/macro facility by
  6489.       Cove Software.  It is the commercial version of the freeware CED.
  6490. Note:    the full API information is available from Cove Software
  6491. SeeAlso: AX=4800h"PCED",AX=48C1h,AX=48C2h,AX=48C3h
  6492. ----------2F48C1BL00-------------------------
  6493. INT 2F - PCED/VSTACK - INSTALLATION CHECK
  6494.     AX = 48C1h
  6495.     BL = 00h
  6496. Return: AX = 0000h if installed
  6497.         BX = VSTACK resident segment
  6498. Program: VSTACK is a resident backscroll utility included as part of the PCED
  6499.       package by Cove Software
  6500. Note:    chains if BL <> 00h on entry
  6501. SeeAlso: AX=48C0h,AX=48C2h
  6502. ----------2F48C2BL00-------------------------
  6503. INT 2F - PCED/ATTRIB - INSTALLATION CHECK
  6504.     AX = 48C2h
  6505.     BL = 00h
  6506. Return: AX = 0000h if installed
  6507.         BX = ATTRIB resident segment
  6508. Program: ATTRIB is a resident file attribute changer included as part of the
  6509.       PCED package by Cove Software
  6510. Note:    chains if BL <> 00h on entry
  6511. SeeAlso: AX=48C0h,AX=48C1h,AX=48C3h
  6512. --------K-2F48C3BL00-------------------------
  6513. INT 2F - PCED/KEYDEF - INSTALLATION CHECK
  6514.     AX = 48C3h
  6515.     BL = 00h
  6516. Return: AX = 0000h if installed
  6517.         BX = KEYDEF resident segment
  6518. Program: KEYDEF is a resident keyboard redefinition utility included as part
  6519.       of the PCED package by Cove Software
  6520. Note:    chains if BL <> 00h on entry
  6521. SeeAlso: AX=48C0h,AX=48C2h,AX=48C4h
  6522. ----------2F48C4BL00-------------------------
  6523. INT 2F - PCED/FLIST - INSTALLATION CHECK
  6524.     AX = 48C4h
  6525.     BL = 00h
  6526. Return: AX = 0000h if installed
  6527.         BX = FLIST resident segment
  6528. Program: FLIST is a resident filelist processor included as part of the PCED
  6529.       package by Cove Software
  6530. Note:    chains if BL <> 00h on entry
  6531. SeeAlso: AX=48C0h,AX=48C3h,AX=48C5h
  6532. ----------2F48C4BL00-------------------------
  6533. INT 2F - PCED/ASSOC - INSTALLATION CHECK
  6534.     AX = 48C4h
  6535.     BL = 00h
  6536. Return: AX = 0000h if installed
  6537.         BX = ASSOC resident segment
  6538. Program: ASSOC is a resident utility included as part of the PCED package which
  6539.       associated files with executable programs based on their extensions
  6540. Note:    chains if BL > 02h on entry
  6541. SeeAlso: AX=48C0h,AX=48C4h,AX=48C5h/BL=01h,AX=48C5h/BL=02h
  6542. ----------2F48C5BL01-------------------------
  6543. INT 2F - PCED/ASSOC - VERSION CHECK
  6544.     AX = 48C5h
  6545.     BL = 01h
  6546. Return: AX = 0000h if installed
  6547.         BX = binary ASSOC version (BL = major, BH = minor)
  6548. Note:    chains if BL > 02h on entry
  6549. SeeAlso: AX=48C0h,AX=48C5h/BL=00h,AX=48C5h/BL=02h
  6550. ----------2F48C5BL02-------------------------
  6551. INT 2F - PCED/ASSOC - ASSOCIATION TEST
  6552.     AX = 48C5h
  6553.     BL = 02h
  6554.     DS:SI -> ASCIZ filename
  6555. Return: AX = status
  6556.         0000h if filename is unknown
  6557.         0001h if there is an association defined for the file
  6558.     BX destroyed
  6559. Program: ASSOC is a resident utility included as part of the PCED package which
  6560.       associated files with executable programs based on their extensions
  6561. Note:    chains if BL > 02h on entry
  6562. SeeAlso: AX=48C0h,AX=48C5h/BL=00h,AX=48C5h/BL=01h
  6563. ----------2F49-------------------------------
  6564. INT 2F U - ???
  6565.     AH = 49h
  6566.     ???
  6567. Return: ???
  6568. Note:    reportedly called by DOS 5.0 installation
  6569. --------D-2F4A00CX0000-----------------------
  6570. INT 2F CU - DOS 5+ - FLOPPY-DISK LOGICAL DRIVE CHANGE NOTIFICATION
  6571.     AX = 4A00h
  6572.     CX = 0000h
  6573.     DH = new drive number
  6574.     DL = current drive number
  6575. Return: CX = FFFFh to skip "Insert diskette for drive X:" message
  6576. Note:    called by MS-DOS 5.0+ IO.SYS just before displaying the message
  6577.       "Insert diskette for drive X:" on single-floppy systems
  6578. --------D-2F4A01-----------------------------
  6579. INT 2F - DOS 5+ - QUERY FREE HMA SPACE
  6580.     AX = 4A01h
  6581. Return: BX = number of bytes available in HMA (0000h if DOS not using HMA)
  6582.     ES:DI -> start of available HMA area (FFFFh:FFFFh if not using HMA)
  6583. Note:    called by Windows 3.1 DOSX.EXE
  6584. SeeAlso: AX=4310h,AX=4A02h
  6585. --------D-2F4A02-----------------------------
  6586. INT 2F - DOS 5+ - ALLOCATE HMA SPACE
  6587.     AX = 4A02h
  6588.     BX = number of bytes
  6589. Return: ES:DI -> start of allocated HMA block or FFFFh:FFFFh
  6590.     BX = number of bytes actually allocated (rounded up to next paragraph
  6591.           for DOS 5.0 and 6.0)
  6592. Notes:    this call is not valid unless DOS is loaded in the HMA (DOS=HIGH)
  6593.     called by Windows 3.1 DOSX.EXE
  6594. SeeAlso: AX=4A01h
  6595. --------T-2F4A05-----------------------------
  6596. INT 2F U - DOS 5+ DOSSHELL - TASK SWITCHING API???
  6597.     AX = 4A05h
  6598.     SI = function
  6599.         0000h reset???
  6600.         0001h ???
  6601.         ES:BP -> 80-byte buffer containing ???
  6602.         0002h ???
  6603.         0003h ???
  6604.         0004h ???
  6605.         BL = ???
  6606.         0005h ???
  6607.         0006h get ???
  6608.         Return: ES:SI -> ???
  6609.         0007h get ???
  6610.         Return: AX = ???
  6611.         0008h get ???
  6612.         Return: DX:AX -> ??? (internal control data of some kind)
  6613.         0009h get ???
  6614.         Return: ES:SI -> ??? (apparently identical to function 0006h)
  6615.         000Ah ???
  6616.         BL = length of buffer
  6617.         ES:BP -> buffer containing ???
  6618.         000Bh get ???
  6619.         Return: AX = ???
  6620.         000Ch ???
  6621.         BL = ???
  6622.         Return: if BL nonzero on entry
  6623.                 DX:AX -> ???
  6624.             if BL = 00h on entry
  6625.                 ES:SI -> ???
  6626. Notes:    DOSSHELL chains to the previous handler if SI is not one of the values
  6627.       listed above
  6628.     the DOSSWAP.EXE module calls functions 03h,04h,05h,07h,08h,09h,0Ch
  6629.     the Windows 3.1 DSWAP.EXE and WSWAP.EXE task switchers use these calls
  6630. SeeAlso: AX=4B01h
  6631. --------D-2F4A06-----------------------------
  6632. INT 2F CU - DOS 5+ - DOS SUPERVISOR "REBOOT PANEL" - ADJUST MEMORY SIZE
  6633.     AX = 4A06h
  6634.     DX = segment following last byte of conventional memory
  6635. Return: DX = segment following last byte of memory available for use by DOS
  6636. Desc:    used to override the default memory size when booting diskless
  6637.       workstations
  6638. Notes:    called by MS-DOS 5+ IO.SYS startup code if the signature "RPL" is
  6639.       present three bytes beyond the INT 2F handler; this call overrides
  6640.       the value returned by INT 12
  6641.     hooked by RPL code at the top of memory to protect itself from being
  6642.       overwritten; DOS builds a memory block with owner = 0008h and name
  6643.       "RPL" which must be freed by the RPL code when it is done
  6644. SeeAlso: INT 12
  6645. --------N-2F4A07-----------------------------
  6646. INT 2F U - RESERVED FOR PROTMAN SUPPORT
  6647.     AX = 4A07h
  6648.     ???
  6649. Return: ???
  6650. --------c-2F4A10BX0000-----------------------
  6651. INT 2F - SMARTDRV v4.00+ - INSTALLATION CHECK AND HIT RATIOS
  6652.     AX = 4A10h
  6653.     BX = 0000h
  6654.     CX = EBABh (v4.1+; see Note)
  6655. Return: AX = BABEh if installed
  6656.         DX:BX = cache hits
  6657.         DI:SI = cache misses
  6658.         CX = number of dirty cache elements
  6659.         BP = version in BCD (4.10 = 0410h)
  6660. Notes:    most of the SMARTDRV API, including this call, is supported by
  6661.       PC-Cache v8.0 and recent versions of the Norton Caches
  6662.     if DBLSPACE.BIN is installed but SMARTDRV has not yet been installed,
  6663.       then calls of this function with CX<>EBABh on entry cause
  6664.       DBLSPACE.BIN to display the error message
  6665.       "Cannot run SMARTDrive 4.0 with DoubleSpace" and abort the caller
  6666.       with INT 21/AX=4C00h
  6667.     SMARTDRV v3.x had a completely different API using IOCTL calls, which
  6668.       was also supported by the Norton Caches
  6669. SeeAlso: AX=4A10h/BX=0001h,AX=4A10h/BX=0004h,AX=4A10h/BX=0005h
  6670. SeeAlso: AX=4A10h/BX=0007h,AX=4A10h/BX=1234h,AX=4A11h/BX=0000h
  6671. SeeAlso: INT 21/AX=4402h"SMARTDRV",INT 21/AX=4403h"SMARTDRV"
  6672. ----------2F4A10BX0000-----------------------
  6673. INT 2F U - Novell NWCACHE - ???
  6674.     AX = 4A10h
  6675.     BX = 0000h
  6676.     CX = 0EDCh
  6677. Return: ???
  6678. SeeAlso: AX=4A10h/BX=0001h"NWCACHE"
  6679. --------c-2F4A10BX0001-----------------------
  6680. INT 2F - SMARTDRV v4.00+ - FLUSH BUFFERS (COMMIT CACHE)
  6681.     AX = 4A10h
  6682.     BX = 0001h
  6683. Note:    this function is also supported by PC-Cache v8.0.
  6684. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0002h
  6685. ----------2F4A10BX0001-----------------------
  6686. INT 2F U - Novell NWCACHE - ???
  6687.     AX = 4A10h
  6688.     BX = 0001h
  6689.     CX = 0EDCh
  6690. Return: ???
  6691. SeeAlso: AX=4A10h/BX=0000h"NWCACHE"
  6692. --------c-2F4A10BX0002-----------------------
  6693. INT 2F - SMARTDRV v4.00+ - RESET CACHE
  6694.     AX = 4A10h
  6695.     BX = 0002h
  6696. Note:    this function is also supported by PC-Cache v8.0.
  6697. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0001h
  6698. --------c-2F4A10BX0003-----------------------
  6699. INT 2F - SMARTDRV v4.00+ - STATUS
  6700.     AX = 4A10h
  6701.     BX = 0003h
  6702.     BP = drive number (0=A, 1=B, etc.)
  6703.     DL = subfunction
  6704.         00h only get information
  6705.         01h turn on read cache
  6706.         02h turn off read cache
  6707.         03h turn on write cache
  6708.         04h turn off write cache
  6709. Return: AX = BABEh if OK
  6710.     DL = status (see #1347)
  6711.     DL = FFh if drive does not exist
  6712. Notes:    If the read cache is off, reads will not be cached, but writes will
  6713.       continue to be cached if the write-cache is enabled.
  6714.     this function is also supported by PC-Cache v8.0.
  6715. SeeAlso: AX=4A10h/BX=0000h
  6716.  
  6717. Bitfields for SMARTDRV status:
  6718. Bit(s)    Description    (Table 1347)
  6719.  7    not cached
  6720.  6    write-through (not write-cached)
  6721.  0-5    real drive number (0=A, 1=B...)
  6722. --------c-2F4A10BX0004-----------------------
  6723. INT 2F - SMARTDRV v4.00+ - GET CACHE SIZE
  6724.     AX = 4A10h
  6725.     BX = 0004h
  6726. Return: AX = size in elements of full-sized cache
  6727.     BX = current size in elements
  6728.     CX = size of one element in bytes
  6729.     DX = number of elements under Windows
  6730. Note:    this function is also supported by PC-Cache v8.0.
  6731. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0003h,AX=4A10h/BX=0005h
  6732. --------c-2F4A10BX0005-----------------------
  6733. INT 2F - SMARTDRV v4.00+ - GET DOUBLE-BUFFER STATUS
  6734.     AX = 4A10h
  6735.     BX = 0005h
  6736.     BP = drive number (0=A, 1=B...)
  6737. Return: AX = BABEh if double-buffered
  6738.         ES:DI -> 16-byte array of status bytes for fixed disks (see #1348)
  6739. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0003h,AX=4A10h/BX=0006h
  6740.  
  6741. (Table 1348)
  6742. Values for SMARTDRV status byte:
  6743.  00h    state unknown
  6744.  FFh    drive double-buffered
  6745.  else    not double-buffered
  6746. --------c-2F4A10BX0006-----------------------
  6747. INT 2F CU - SMARTDRV v4.00+ - CHECK IF DRIVE CACHEABLE
  6748.     AX = 4A10h
  6749.     BX = 0006h
  6750.     CL = drive number (01h = A:)
  6751. Return: AX = 0006h if drive should not be cached by SMARTDRV
  6752. Note:    called by SMARTDRV at startup to determine whether it should cache
  6753.       a particular drive
  6754. SeeAlso: AX=4A10h/BX=0000h
  6755. --------c-2F4A10BX0007-----------------------
  6756. INT 2F - SMARTDRV v4.00+ - GET DEVICE DRIVER FOR DRIVE
  6757.     AX = 4A10h
  6758.     BX = 0007h
  6759.     BP = drive number (00h=A:)
  6760. Return: DL = unit number within device driver
  6761.     ES:DI -> device driver header for drive
  6762. Note:    this function is also supported by PC-Cache v8.0.
  6763.     this call is reported to always return the driver header of the
  6764.       standard block driver (A:-C:+) for SmartDrive v5.00 from MS-DOS 6.2
  6765. SeeAlso: AX=4A10h/BX=0000h,AX=4A11h/BX=0003h,AX=4A11h/BX=0004h
  6766. --------c-2F4A10BX0008-----------------------
  6767. INT 2F - SMARTDRV v4.20+ - GET/SET FLUSH BEFORE PROMPT, CD-ROM SUPPORT
  6768.     AX = 4A10h
  6769.     BX = 0008h
  6770.     DL = subfunction
  6771.         00h set
  6772.         DH = new states
  6773.             bit 0: flush before prompt
  6774.             bits 1-7 reserved (0)
  6775.         01h get
  6776.         Return: DH = status flags
  6777.                 bit 0: (v4.2+) flush before prompt
  6778.                 bit 1: (v5.0+) CD-ROM caching support installed
  6779. Note:    v4.2 was an interim release to fix problems in the SMARTDRV included
  6780.       with MS-DOS 6.00; v5.00 is included with MS-DOS 6.2
  6781. --------c-2F4A10BX000A-----------------------
  6782. INT 2F - SMARTDRV v4.00+ - GET ELEMENT STATUS TABLE
  6783.     AX = 4A10h
  6784.     BX = 000Ah
  6785. Return: ES:BX -> information pointer table (see #1349)
  6786. Note:    this function is also supported by PC-Cache v8.0.
  6787. SeeAlso: AX=4A10h/BX=0000h
  6788.  
  6789. Format of SMARTDRV information pointer table:
  6790. Offset    Size    Description    (Table 1349)
  6791.  00h    WORD    offset of ??? byte/word array (byte if elements < 2000h bytes)
  6792.  02h    WORD    offset of dirty flag byte/word array (byte if elts < 2000h)
  6793.         each byte/word is a bit string of the dirty sectors in element
  6794.  04h    WORD    offset of word array containing low halves of unique
  6795.           identifiers for the corresponding element's contents
  6796.  06h    WORD    offset of word array containing high halves of unique
  6797.           identifiers for the corresponding element's contents
  6798.  08h    WORD    offset of WORD containing current number of elements in cache
  6799. --------c-2F4A10BX1234-----------------------
  6800. INT 2F - SMARTDRV v4.00+ - SIGNAL SERIOUS ERROR
  6801.     AX = 4A10h
  6802.     BX = 1234h
  6803. Desc:    this function pops up a message box saying that a serious error
  6804.       occurred and to hit R to retry, then waits for the keypress
  6805. Note:    this function is also supported by PC-Cache v8.0.
  6806. SeeAlso: AX=4A10h/BX=0000h
  6807. --------d-2F4A11BX0000-----------------------
  6808. INT 2F - DBLSPACE.BIN - "GetVersion" - INSTALLATION CHECK
  6809.     AX = 4A11h
  6810.     BX = 0000h
  6811. Return: AX = 0000h (successful)
  6812.     BX = 444Dh ("DM")
  6813.     CL = first drive letter used by DBLSPACE (41h ['A'] = A:)
  6814.     CH = number of drive letters used by DBLSPACE
  6815.     DX = internal DBLSPACE.BIN version number (bits 14-0)
  6816.         bit 15 set if DBLSPACE.BIN has not yet been relocated to final
  6817.           position in memory (i.e. DBLSPACE.SYS /MOVE)
  6818. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  6819.       disk-compression software bundled with MS-DOS 6.0
  6820. SeeAlso: AX=4A11h/BX=0001h,AX=4A11h/BX=0002h,AX=4A11h/BX=0003h
  6821. SeeAlso: AX=4A11h/BX=0005h,AX=4A11h/BX=0007h,AX=4A11h/BX=FFFFh
  6822. SeeAlso: INT 21/AX=4404h"DBLSPACE"
  6823. --------d-2F4A11BX0001-----------------------
  6824. INT 2F - DBLSPACE.BIN - "GetDriveMapping" - GET DRIVE MAPPING
  6825.     AX = 4A11h
  6826.     BX = 0001h
  6827.     DL = drive number (0=A:)
  6828. Return: AX = status (see also #1350)
  6829.         0000h successful
  6830.         if DL was compressed drive,
  6831.             BL = host drive (bit 7 set if drive is compressed)
  6832.         else if DL was host drive,
  6833.             BL = compressed drive
  6834.         else
  6835.             BL = specified drive (if available for DoubleSpace)
  6836.         BH = DoubleSpace sequence number
  6837.         other error code (0101h) (see #1350)
  6838.         apparently never returned for the MS-DOS 6.2 DoubleSpace
  6839. Note:    the compressed volume file for the specified compressed drive is
  6840.       host:\DBLSPACE.sequence
  6841. SeeAlso: AX=4A11h/BX=0000h
  6842.  
  6843. (Table 1350)
  6844. Values for DBLSPACE function status:
  6845.  0000h    successful
  6846.  0100h    bad function
  6847.  0101h    invalid drive
  6848.  0102h    not a compressed drive
  6849.  0103h    drive already swapped
  6850.  0104h    drive not swapped
  6851. --------d-2F4A11BX0002-----------------------
  6852. INT 2F - DBLSPACE.BIN - "Swap Drive" - SWAP DRIVE LETTERS OF CVF AND HOST DRIVE
  6853.     AX = 4A11h
  6854.     BX = 0002h
  6855.     DL = drive number (0=A:) of compressed drive to swap with its host
  6856. Return: AX = status (0000h,0101h,0102h,0103h) (see #1350)
  6857. Note:    this function is intended for use by DBLSPACE.EXE only
  6858. SeeAlso: AX=4A11h/BX=0000h
  6859. --------d-2F4A11BX0003-----------------------
  6860. INT 2F - DBLSPACE.BIN - "DSGetEntryPoints" - GET DEVICE DRIVER ENTRY POINTS
  6861.     AX = 4A11h
  6862.     BX = 0003h
  6863.     CL = drive number (0=A:) of compressed drive
  6864. Return: CL = FFh on error (not compressed drive)
  6865.     CL <> FFh driver unit number of host drive
  6866.         ES:SI -> device driver's strategy routine
  6867.         ES:DI -> device driver's interrupt routine
  6868.     BX destroyed
  6869. Note:    in conjunction with subfunction 0004h, this call allows disk caches
  6870.       like SMARTDRV to apply a device driver wrapper to DoubleSpaced
  6871.       drives just like SMARTDRV applies to regular block devices
  6872. SeeAlso: AX=4A10h/BX=0007h,AX=4A11h/BX=0000h,AX=4A11h/BX=0004h
  6873. --------d-2F4A11BX0004-----------------------
  6874. INT 2F - DBLSPACE.BIN - "DSSetEntryPoints" - SET DEVICE DRIVER ENTRY POINTS
  6875.     AX = 4A11h
  6876.     BX = 0004h
  6877.     CL = drive number (0=A:) of compressed drive
  6878.     DL = unit number for new driver entry points
  6879.     DH = 00h
  6880.     ES:SI -> device driver strategy routine to call for drive
  6881.     ES:DI -> device driver interrupt routine to call for drive
  6882. Return: CL = FFh on error (not a compressed drive)
  6883.     BX destroyed
  6884. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  6885.       disk-compression software bundled with MS-DOS 6.0
  6886. Note:    in conjunction with subfunction 0003h, this call allows disk caches
  6887.       like SMARTDRV to apply a device driver wrapper to DoubleSpaced
  6888.       drives just like SMARTDRV applies to regular block devices
  6889. SeeAlso: AX=4A10h/BX=0007h,AX=4A11h/BX=0000h,AX=4A11h/BX=0003h
  6890. --------d-2F4A11BX0005-----------------------
  6891. INT 2F - DBLSPACE.BIN - "ActivateDrive" - MOUNT COMPRESSED DRIVE
  6892.     AX = 4A11h
  6893.     BX = 0005h
  6894.     DL = drive number (0=A:) to assign to new drive
  6895.     ES:SI -> activation record (see #1351)
  6896. Return: status returned in activation record (see #1352)
  6897. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0006h
  6898.  
  6899. Format of DBLSPACE activation record:
  6900. Offset    Size    Description    (Table 1351)
  6901.  00h  2 BYTEs    signature "MD" (4Dh 44h)
  6902.  02h    BYTE    4Dh ('M') mount command
  6903.  03h    BYTE    error code (set to FFh before calling) (see #1352)
  6904.  04h    BYTE    host drive number (0=A:)
  6905.  05h    ???    DISK_UNIT structure (not documented)
  6906.  
  6907. (Table 1352)
  6908. Values for DBLSPACE Mount error code:
  6909.  00h    successful
  6910.  01h    drive letter not available for DoubleSpace
  6911.  02h    drive letter already in use
  6912.  03h    no more disk units (increase MaxRemovableDrives in .INI)
  6913.  09h    CVF too fragmented
  6914. --------d-2F4A11BX0006-----------------------
  6915. INT 2F - DBLSPACE.BIN - "DeactivateDrive" - UNMOUNT COMPRESSED DRIVE
  6916.     AX = 4A11h
  6917.     BX = 0006h
  6918.     DL = drive number (0=A:) to unmount
  6919. Return: AX = status (0000h,0102h) (see #1350)
  6920. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0005h
  6921. --------d-2F4A11BX0007-----------------------
  6922. INT 2F - DBLSPACE.BIN - "GetDriveSpace" - GET SPACE AVAIL ON COMPRESSED DRIVE
  6923.     AX = 4A11h
  6924.     BX = 0007h
  6925.     DL = compressed drive number (0=A:)
  6926. Return: AX = status (0000h,0102h) (see also #1350)
  6927.         0000h successful
  6928.         DS:SI -> free space record (see #1353)
  6929. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  6930.       disk-compression software bundled with MS-DOS 6.0
  6931. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0008h
  6932.  
  6933. Format of DBLSPACE free space record:
  6934. Offset    Size    Description    (Table 1353)
  6935.  00h    DWORD    total number of sectors in drive's sector heap
  6936.  04h    DWORD    number of free sectors in drive's sector heap
  6937. --------d-2F4A11BX0008-----------------------
  6938. INT 2F - DBLSPACE.BIN - "GetFileFragmentSpace" - GET SIZE OF FRAGMENT HEAP
  6939.     AX = 4A11h
  6940.     BX = 0008h
  6941.     DL = compressed drive number (0=A:)
  6942. Return: AX = status (0000h,0102h) (see also #1350)
  6943.         0000h successful
  6944.         BX = maximum entries in File Fragment heap
  6945.         CX = available entries in File Fragment heap
  6946. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0007h,AX=4A11h/BX=0009h
  6947. --------d-2F4A11BX0009-----------------------
  6948. INT 2F - DBLSPACE.BIN - "GetExtraInfo" - DETERMINE NUMBER OF DISK_UNIT STRUCTS
  6949.     AX = 4A11h
  6950.     BX = 0009h
  6951.     DL = compressed drive number (0=A:)
  6952. Return: AX = status (see also #1350)
  6953.         0000h successful
  6954.         CL = number of DISK_UNIT structures allocated
  6955.               (see AX=4A11h/BX=0005h)
  6956.         CH = DoubleGuard enabled-checks bitflags in bits 6-0 (DOS 6.2)
  6957. Note:    the DoubleGuard checks are enabled or disabled as a block by the
  6958.       DoubleGuard= line in DBLSPACE.INI; they may be individually set with
  6959.       the CheckSum= line.
  6960. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0008h
  6961. --------d-2F4A11BX000A-----------------------
  6962. INT 2F - DBLSPACE.BIN v6.2 - SET AUTOMOUNT DRIVES
  6963.     AX = 4A11h
  6964.     BX = 000Ah
  6965.     CX:DX = bitmask of drives on which to enable AutoMount
  6966.         (DX bit 0 = A:, CX bit 0 = P:, etc.)
  6967. Return: AX = 0000h if supported
  6968.         CX:DX = old mask or 0000h:0000h on error
  6969.     BX destroyed
  6970. SeeAlso: AX=4A11h/BX=000Bh
  6971. --------d-2F4A11BX000B-----------------------
  6972. INT 2F - DBLSPACE.BIN v6.2 - GET AUTOMOUNT DRIVES
  6973.     AX = 4A11h
  6974.     BX = 000Bh
  6975. Return: AX = 0000h if supported
  6976.         CX:DX = mask of drives with AutoMount enabled
  6977.         0000h:0000h on error
  6978.     BX destroyed
  6979. SeeAlso: AX=4A11h/BX=000Ah
  6980. --------d-2F4A11BXFFFE-----------------------
  6981. INT 2F U - DBLSPACE.BIN - RELOCATE
  6982.     AX = 4A11h
  6983.     BX = FFFEh
  6984.     ES = segment to which to relocate DBLSPACE.BIN
  6985. Return: ???
  6986. Notes:    called by DBLSPACE.SYS to relocate DBLSPACE.BIN to its final position
  6987.       in memory
  6988.     this function also unhooks and discards the code providing this
  6989.       function and AX=4A11h/BX=FFFFh
  6990. SeeAlso: AX=4A11h/BX=FFFFh
  6991. --------d-2F4A11BXFFFF-----------------------
  6992. INT 2F U - DBLSPACE.BIN - GET RELOCATION SIZE
  6993.     AX = 4A11h
  6994.     BX = FFFFh
  6995. Return: AX = number of paragraphs needed by DBLSPACE.BIN
  6996. Note:    used by DBLSPACE.SYS to relocate the DBLSPACE driver to its final
  6997.       position in memory
  6998. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=FFFEh
  6999. --------d-2F4A12CX4D52-----------------------
  7000. INT 2F - Microsoft Realtime Compression Interface (MRCI) - RAM-BASED SERVER
  7001.     AX = 4A12h
  7002.     CX = 4D52h ("MR")
  7003.     DX = 4349h ("CI")
  7004. Return: CX = 4943h ("IC") if installed
  7005.     DX = 524Dh ("RM") if installed
  7006.         ES:DI -> MRCINFO structure (see INT 1A/AX=B001h)
  7007. Note:    this call is functionally identical to INT 1A/AX=B001h, but should be
  7008.       called first, as the latter call is used for the first, ROM-based
  7009.       MRCI server, while this call is used for RAM-based servers which
  7010.       may be partially or entirely replacing a prior server
  7011. SeeAlso: INT 1A/AX=B001h
  7012. --------d-2F4A13-----------------------------
  7013. INT 2F U - DBLSPACE.BIN - GET ??? ENTRY POINTS
  7014.     AX = 4A13h
  7015. Return: AX = 134Ah if supported
  7016.         ES:BX -> entry point record (see #1354)
  7017. SeeAlso: AX=4A11h/BX=0000h
  7018.  
  7019. Format of DBLSPACE entry point record:
  7020. Offset    Size    Description    (Table 1354)
  7021.  00h    DWORD    pointer to FAR function for ???
  7022.  04h  5 BYTEs    FAR JUMP instruction to ???
  7023. --------N-2F4B-------------------------------
  7024. INT 2F - LAN Manager 2.0 DOS Enh NETWKSTA.EXE - NETWORK WORKSTATION REDIRECTOR
  7025.     AH = 4Bh
  7026.     ???
  7027. Return: ???
  7028. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  7029.       file/printer services
  7030. SeeAlso: AX=118Ah,AX=4100h,AH=42h
  7031. --------T-2F4B01-----------------------------
  7032. INT 2F C - DOS 5+ TASK SWITCHER - BUILD CALLOUT CHAIN
  7033.     AX = 4B01h
  7034.     CX:DX -> task switcher entry point (see #1357)
  7035.     ES:BX = 0000h:0000h
  7036. Return: ES:BX -> callback info structure (see #1355) or 0000h:0000h
  7037. Notes:    called by the task switcher
  7038.     this function is hooked by clients which require notification of task
  7039.       switcher activities; the call must first be passed on to the prior
  7040.       handler with registers unchanged using a simulated interrupt.     On
  7041.       return, the client must build a callback info structure and store
  7042.       the returned ES:BX in the "next" field, then return the address of
  7043.       its own callback info structure.
  7044.     a client program must add itself to the notification chain if it
  7045.       provides services to other programs; before terminating, it must
  7046.       remove itself from the chain by calling the task switcher's entry
  7047.       point with AX=0005h (see #1357)
  7048.     the task switcher entry point should not be saved, as it is subject to
  7049.       change and will be provided on any notification call
  7050.     the Windows 3.1 Standard Mode supports this API
  7051. SeeAlso: AX=160Bh,AX=4B02h
  7052.  
  7053. Format of task switcher callback info structure:
  7054. Offset    Size    Description    (Table 1355)
  7055.  00h    DWORD    pointer to next callback info structure
  7056.  04h    DWORD    pointer to notification function (see #1356)
  7057.  08h    DWORD    reserved
  7058.  0Ch    DWORD    address of zero-terminated list of API info structures
  7059.         (see #1359)
  7060.  
  7061. (Table 1356)
  7062. Values task switcher notification function is called with:
  7063.     AX = function
  7064.         0000h switcher initialization
  7065.         Return: AX = status
  7066.                 0000h if OK to load
  7067.                 nonzero to abort task switcher
  7068.         0001h query suspend
  7069.         BX = session ID
  7070.         Return: AX = status
  7071.                 0000h if OK to switch session
  7072.                 0001h if not
  7073.         0002h suspend session
  7074.         BX = session ID
  7075.         interrupts disabled
  7076.         Return: AX = 0000h if OK to switch session
  7077.                = 0001h if not
  7078.         0003h activate session
  7079.         BX = session ID
  7080.         CX = session status flags
  7081.             bit 0: set if first activation of session
  7082.             bits 1-15: reserved (0)
  7083.         interrupts disabled
  7084.         Return: AX = 0000h
  7085.         0004h session active
  7086.         BX = session ID
  7087.         CX = session status flags
  7088.             bit 0: set if first activation of session
  7089.             bits 1-15: reserved (0)
  7090.         Return: AX = 0000h
  7091.         0005h create session
  7092.         BX = session ID
  7093.         Return: AX = 0000h if OK to create session
  7094.                = 0001h if not
  7095.         0006h destroy session
  7096.         BX = session ID
  7097.         Return: AX = 0000h
  7098.         0007h switcher termination
  7099.         BX = flags
  7100.             bit 0: set if calling switcher is only switcher loaded
  7101.             bits 1-15: reserved (0)
  7102.         Return: AX = 0000h
  7103.     ES:DI -> task switcher entry point (see #1357)
  7104. Notes:    function 0000h is generally called by the program which controls or
  7105.       invokes the task switcher, rather than by the task switcher itself;
  7106.       the entry point supplied to this function is not necessarily the
  7107.       entry point to the task switcher itself, and may be 0000h:0000h.  If
  7108.       any client indicates that loading is not possible, all clients will
  7109.       be called with function 0007h; thus it is possible for a client to
  7110.       receive a termination notice without a corresponding initialization
  7111.       notice.
  7112.     except for functions 0002h and 0003h, the notification handler is
  7113.       called with interrupts enabled and may make any INT 21h function
  7114.       call; interrupts must not be enabled in functions 0002h and 0003h
  7115.     function 0007h may be called with ES:DI = 0000h:0000h if the entry
  7116.       point is no longer valid
  7117. --------T-2F4B02BX0000-----------------------
  7118. INT 2F - DOS 5+ TASK SWITCHER - INSTALLATION CHECK
  7119.     AX = 4B02h
  7120.     BX = 0000h
  7121.     ES:DI = 0000h:0000h
  7122. Return: ES:DI = 0000h:0000h if task switcher not loaded
  7123.     ES:DI -> task switcher entry point (see #1357) if loaded
  7124.         AX = 0000h
  7125. Notes:    the returned entry point is that for the most-recently loaded task
  7126.       switcher; the entry points for prior task switchers may be determined
  7127.       with the "get version" call (see #1357)
  7128.     this function is supported by PC Tools v8+ CPTASK
  7129. SeeAlso: AX=4A05h,AX=4B03h
  7130.  
  7131. (Table 1357)
  7132. Call task switcher entry point with:
  7133.     AX = 0000h get version
  7134.         Return: CF clear if successful
  7135.                 AX = 0000h
  7136.                 ES:BX -> task switcher version struct (see #1358)
  7137.             CF set if unsupported function
  7138.     AX = 0001h test memory region
  7139.         ES:DI -> first byte to be tested
  7140.         CX = size of region to test
  7141.         Return: CF clear if successful
  7142.                 AX = memory type of tested region
  7143.                 0000h global
  7144.                 0001h global and local
  7145.                 0002h local (replaced on session switch)
  7146.             CF set if unsupported function
  7147.     AX = 0002h suspend switcher
  7148.         ES:DI -> new task switcher's entry point
  7149.         Return: CF clear if successful
  7150.                 AX = state
  7151.                 0000h switcher has been suspended
  7152.                 0001h switcher not suspended, new switcher must
  7153.                     abort
  7154.                 0002h switcher not suspended, but new switcher
  7155.                     may run anyway
  7156.             CF set if unsupported function
  7157.     AX = 0003h resume switcher
  7158.         ES:DI -> new task switcher's entry point
  7159.         Return: CF clear if successful
  7160.                 AX = 0000h
  7161.             CF set if unsupported function
  7162.     AX = 0004h hook notification chain
  7163.         ES:DI -> callback info structure to be added to chain
  7164.               (see #1355)
  7165.         Return: CF clear if successful
  7166.                 AX = 0000h
  7167.             CF set if unsupported function
  7168.     AX = 0005h unhook notification chain
  7169.         ES:DI -> callback info structure to be removed from chain
  7170.               (see #1355)
  7171.         Return: CF clear if successful
  7172.                 AX = 0000h
  7173.             CF set if unsupported function
  7174.     AX = 0006h query API support
  7175.         BX = asynchronous API identifier
  7176.         Return: CF clear if successful
  7177.                 AX = 0000h
  7178.                 ES:BX -> API info structure (see #1359) for the
  7179.                       client which provides the highest
  7180.                       level of API support
  7181.             CF set if unsupported function
  7182.  
  7183. Format of task switcher version structure:
  7184. Offset    Size    Description    (Table 1358)
  7185.  00h    WORD    major version of supported protocol  (current protocol is 1.0)
  7186.  02h    WORD    minor version of supported protocol
  7187.  04h    WORD    major version of task switcher
  7188.  06h    WORD    minor version of task switcher
  7189.  08h    WORD    task switcher ID (see AX=4B03h)
  7190.  0Ah    WORD    operation flags
  7191.         bit 0: set if task switcher disabled
  7192.         bits 1-15: reserved (0)
  7193.  0Ch    DWORD    pointer to ASCIZ task switcher name
  7194.         ("MS-DOS Shell Task Switcher" for DOSSHELL task switcher)
  7195.  10h    DWORD    pointer to previous task switcher's entry point or 0000h:0000h
  7196.  
  7197. Format of API info structure:
  7198. Offset    Size    Description    (Table 1359)
  7199.  00h    WORD    size of structure in bytes (000Ah)
  7200.  02h    WORD    API identifier
  7201.         0001h NetBIOS
  7202.         0002h 802.2
  7203.         0003h TCP/IP
  7204.         0004h LAN Manager named pipes
  7205.         0005h Novell NetWare IPX
  7206.  04h    WORD    major version \ of highest version of API for which the support
  7207.  06h    WORD    minor version / level specified in the next field is provided
  7208.  08h    WORD    support level
  7209.         0001h minimal support
  7210.         0002h API-level support
  7211.         0003h switcher compatibility
  7212.         0004h seamless compatibility
  7213. --------T-2F4B03-----------------------------
  7214. INT 2F - DOS 5+ TASK SWITCHER - ALLOCATE SWITCHER ID
  7215.     AX = 4B03h
  7216.     ES:DI -> task switcher entry point (see #1357)
  7217. Return: AX = 0000h
  7218.     BX = switcher ID (0001h-000Fh), or 0000h if no more available
  7219. Notes:    if a task switcher has determined that it is the first to be loaded, it
  7220.       must allocate an identifier for itself and provide this function to
  7221.       all subsequent task switchers; if it is not the first to be loaded,
  7222.       it must call this function to allocate an ID.     The switcher ID is
  7223.       used as the high four bits of all session identifiers to ensure
  7224.       unique session IDs.
  7225.     if no more switcher IDs are available, the new task switcher making the
  7226.       call must terminate or disable itself
  7227.     the task switcher providing the identifiers may call the new task
  7228.       switcher's entry point as needed
  7229.     this call is available from within DOSSHELL even if the task switcher
  7230.       is not installed
  7231.     this function is supported by PC Tools v8+ CPTASK, but appears to
  7232.       always return an ID of 0000h
  7233. SeeAlso: AX=4B02h,AX=4B04h
  7234. --------T-2F4B04-----------------------------
  7235. INT 2F - DOS 5+ TASK SWITCHER - FREE SWITCHER ID
  7236.     AX = 4B04h
  7237.     BX = switcher ID
  7238.     ES:DI -> task switcher entry point (see #1357)
  7239. Return: AX = 0000h
  7240.     BX = status
  7241.         0000h successful
  7242.         other error (invalid ID or ID not allocated)
  7243. Notes:    called by a task switcher when it exits, unless it was the first loaded
  7244.       and is providing the support for AX=4B03h and AX=4B04h
  7245.     the task switcher providing the identifiers may call the terminating
  7246.       task switcher's entry point as needed
  7247.     this call is available from within DOSSHELL even if the task switcher
  7248.       is not installed
  7249.     this call is supported by PC Tools v8+ CPTASK, but appears to return
  7250.       sucessfully no matter which ID is given
  7251. SeeAlso: AX=4B02h,AX=4B03h
  7252. --------T-2F4B05-----------------------------
  7253. INT 2F C - DOS 5+ TASK SWITCHER - IDENTIFY INSTANCE DATA
  7254.     AX = 4B05h
  7255.     ES:BX = 0000h:0000h
  7256.     CX:DX -> task switcher entry point (see #1357)
  7257. Return: ES:BX -> startup info structure (see #1360) or 0000h:0000h
  7258. Notes:    called by task switcher
  7259.     clients with instance data should hook this call, pass it through to
  7260.       the previous handler with unchanged registers using a simulated
  7261.       interrupt.  On return, the client should create a startup info
  7262.       structure (see #1360), store the returned ES:BX in the "next"
  7263.       field, and return the address of the created structure in ES:BX
  7264.     all MS-DOS function calls are available from within this call
  7265. SeeAlso: AX=1605h,AX=160Bh,AX=4B02h
  7266.  
  7267. Format of task switcher startup info structure:
  7268. Offset    Size    Description    (Table 1360)
  7269.  00h  2 BYTEs    major, minor version of info structure (03h,00h)
  7270.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  7271.  06h    DWORD    0000h:0000h (ignored)
  7272.  0Ah    DWORD    ignored
  7273.  0Eh    DWORD    pointer to instance data records (see #1361)
  7274.  
  7275. Format of one instance data record in array:
  7276. Offset    Size    Description    (Table 1361)
  7277.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  7278.  04h    WORD    size of instance data
  7279. --------W-2F4B20-----------------------------
  7280. INT 2F - MS Windows 3 - WIN.COM - SET PROGRAM TO EXECUTE ON EXIT
  7281.     AX = 4B20h
  7282. Return: AX = 0000h if successful
  7283.         DX:CX -> 256-byte buffer for pathname and commandline (see #1362)
  7284. Note:    when the Windows function ExitWindows is called with an exit code of
  7285.       44h, WIN.COM executes the program specified in the returned buffer
  7286.       and then restarts Windows
  7287.  
  7288. Format of WIN.COM buffer:
  7289. Offset    Size    Description    (Table 1362)
  7290.  00h 128 BYTEs    ASCIZ pathname of program to execute
  7291.  80h 128 BYTEs    commandline for program
  7292. --------p-2F4C-------------------------------
  7293. INT 2F U - Advanced Power Management
  7294.     AH = 4Ch
  7295.     AL = function
  7296.         00h version check
  7297.         01h suspend system requested
  7298.         FFh suspend/resume battery notification
  7299.     ???
  7300. Return: ???
  7301. ----------2F4D-------------------------------
  7302. INT 2F U - ???
  7303.     AH = 4Dh
  7304.     ???
  7305. Return: ???
  7306. Note:    reportedly called by Kana Kanji Converter and MSKK
  7307. --------N-2F4E53BL00-------------------------
  7308. INT 2F - SilverNET v2+ - INSTALLATION CHECK
  7309.     AX = 4E53h ("NS")
  7310.     BL = 00h (function "installation check")
  7311.     BH = module ID (see #1363)
  7312. Return: AX = 0000h if specified module installed
  7313.     BX = 4E53h if installed
  7314. Program: SilverNET is an SMB-compatible peer-to-peer NOS for DOS or
  7315.       Windows systems, by Net-Source, Inc. of Santa Clara, CA.
  7316. SeeAlso: AX=4E53h/BL=01h,AX=4E53h/BL=02h,AX=B800h,AX=B809h
  7317.  
  7318. (Table 1363)
  7319. Values for SilverNET module ID:
  7320.  01h    SilverCACHE
  7321.  02h    Workstation
  7322.  03h    NetBIOS
  7323.  04h    Peer
  7324.  20h    NS Share
  7325.  80h    NetWare help TSR
  7326. --------N-2F4E53BL01-------------------------
  7327. INT 2F - SilverNET - GET RUNTIME PARAMETER
  7328.     AX = 4E53h ("NS")
  7329.     BL = 01h (function "get runtime parameter")
  7330.     BH = module ID (see #1363)
  7331.     CX = parameter index (see #1364,#1366,#1367)
  7332. Return: AX = WORD value at specified index (see #1365)
  7333. Desc:    retrieve a word of data from the specified SilverNET module
  7334.  
  7335. (Table 1364)
  7336. Values for SilverNET Peer parameter index (* = read-only):
  7337.  00h *    maximum outstanding SMB buffers
  7338.  02h *    maximum logged-in nodes
  7339.  04h *    number of shareable resources
  7340.  06h *    number of characters to print per time slice
  7341.  08h *    number of printers that can be shared
  7342.  0Ah *    number of nodes logged in
  7343.  0Ch *    number of files to allow opened
  7344.  0Eh    how fast to despool (/PSLICE)
  7345.  10h    audit flag
  7346.  24h *    far pointer to resource table (each resource is 96 bytes in length)
  7347.  32h *    far pointer to SFT (internal if SilverNET files > CONFIG.SYS files,
  7348.     else DOS SFT)
  7349.  36h    spool flags (see #1365)
  7350.  
  7351. Bitfields for spool flags:
  7352. Bit(s)    Description    (Table 1365)
  7353.  0    LPT1 needs despooling
  7354.  1    LPT2 needs despooling
  7355.  2    LPT2 needs despooling
  7356.  4    COM1 needs despooling
  7357.  5    COM2 needs despooling
  7358.  6    COM3 needs despooling
  7359.  
  7360. (Table 1366)
  7361. Values for NS Share parameter index (* = read-only):
  7362.  00h    version number (high byte = minor, low byte = major)
  7363.  10h *    segment of first lock record (other records in consecutive paragraphs)
  7364.     (if PSP field = 0000h, lock record is free)
  7365.  12h *    maximum possible number of lock records
  7366.  14h *    starting segment of sharing buffer
  7367.     (NS Share's sharing records are identical to DOS SHARE except that
  7368.       fields which are normally offsets into SHARE are segment numbers)
  7369.  18h *    size of sharing buffer in paragraphs
  7370.  1Ah *    total free paragraphs in sharing buffer
  7371.  1Ch *    current number of shared files
  7372.  1Eh *    current number of locked records
  7373.  
  7374. (Table 1367)
  7375. Values for Workstation parameter index (* = read-only):
  7376.  00h    version number (high byte = minor, low byte = major)
  7377.  02h *    size of each network buffer for file operations
  7378.  04h *    number of redirector file buffers
  7379.  06h *    size of each print cache buffer
  7380.  08h *    number of network LPT printers
  7381.  0Ch    flush time in ticks (idle time on network printer before flushing)
  7382.  0Eh    (16 WORDs) last active time for each printer
  7383.  2Eh *    stub segment if program split into two parts
  7384.  60h    receive name number for datagram listens
  7385.  62h *    18-byte machine name
  7386.  74h *    LASTDRIVE (01h = A:, etc.)
  7387.  7Ch    row number of message box on screen
  7388.  7Eh    message time in clock ticks
  7389.  82h *    number of network adapters in use
  7390.  84h    station ID broadcast flag (never set on redirectors)
  7391.  96h *    NetBIOS names left
  7392.  98h *    NCBs left
  7393.  9Ah *    sessions left
  7394.  A2h *    total number of network printers (LPT+COM)
  7395.  A4h *    number of serial network printers
  7396.  A8h *    segment containing file cache buffers
  7397.  AAh *    segment containing print cache buffers
  7398.  ACh *    bytes remaining free in HMA before program loaded
  7399.  AEh *    start of free memory in HMA
  7400.  B2h *    flag: using HMA
  7401. --------N-2F4E53BL02-------------------------
  7402. INT 2F - SilverNET - SET RUNTIME PARAMETERS
  7403.     AX = 4E53h ("NS")
  7404.     BL = 02h (function "set runtime parameters")
  7405.     BH = module ID (see #1363)
  7406.     CX = parameter index (see #1366,#1367)
  7407.     DX = new value for specified parameter
  7408. Desc:    set a WORD value in the specified SilverNET module
  7409. Note:    not all indexed parameters are writable; modifying a read-only
  7410.       parameter can result in system crashes
  7411. SeeAlso: AX=4E53h/BL=00h,AX=4E53h/BL=01h
  7412. --------N-2F5100-----------------------------
  7413. INT 2F U - ODIHLP.EXE - INSTALLATION CHECK
  7414.     AX = 5100h
  7415. Return: AL = FFh if installed
  7416.         BX = 0000h
  7417.         DX:SI -> signature string "ODI$HLP$"
  7418. Program: ODIHLP is a real-mode helper allowing the Windows for Workgroups 3.11
  7419.       protected-mode NDIS3 protocol to work with real-mode ODI drivers
  7420.       and LSL.COM
  7421. Note:    the returned signature string might be the first field of a structure
  7422. SeeAlso: AX=C000h"LSL.COM"
  7423. --------p-2F53-------------------------------
  7424. INT 2F U - POWER.EXE - APM event broadcasting???
  7425.     AH = 53h
  7426.     AL = event???
  7427.         05h CPU idle
  7428.         0Bh PM event broadcast API
  7429. Return: ???
  7430. Note:    called by MS Windows 3.1 POWER.DRV; hooked by MS Mouse driver v8.20+
  7431.       and PC-Cache v8.0
  7432. SeeAlso: AX=530Bh,AH=54h,INT 33/AX=002Fh
  7433. --------p-2F530B-----------------------------
  7434. INT 2F U - ??? (MOUSEPWR.COM, others) - ???
  7435.     AX = 530Bh
  7436.     BX = subfunction
  7437.         0003h ???
  7438.         0004h ???
  7439.     ???
  7440. Return: ???
  7441. Note:    it appears that subfunction 0003h reads or restores the current mouse
  7442.       settings (the MS Mouse driver hooks AX=530Bh), and 0004h might be
  7443.       the converse
  7444. --------p-2F5400-----------------------------
  7445. INT 2F U - POWER.EXE - INSTALLATION CHECK
  7446.     AX = 5400h
  7447. Return: AX = POWER.EXE version (AH = major, AL = minor) if installed
  7448.     BX = 504Dh ("PM")
  7449.     CF clear
  7450. Note:    called by MS Windows 3.1 POWER.DRV
  7451. SeeAlso: AH=53h,AX=5401h,AX=5402h,AX=5481h,AX=5482h
  7452. --------p-2F5401-----------------------------
  7453. INT 2F U - POWER.EXE - GET/SET POWER STATUS
  7454.     AX = 5401h
  7455.     BH = function
  7456.         00h get status
  7457.         Return: BL = current power management status (see #1368)
  7458.         01h set status
  7459.         BL = new power managment status (see #1368)
  7460. Return: AX = function status (see #1369)
  7461. Note:    called by MS Windows 3.1 POWER.DRV
  7462. SeeAlso: AH=53h,AX=5400h,AX=5402h,AX=5403h
  7463.  
  7464. Bitfields for power management status:
  7465. Bit(s)    Description    (Table 1368)
  7466.  0    POWER.EXE power management enabled
  7467.  1    APM firmware power management enabled
  7468.  2-7    reserved (0)
  7469. Notes:    bit 1 is ignored if there is no APM firmware
  7470.     bits 1-0: 00 = POWER OFF, 10 = POWER STD, 11 = POWER ADV
  7471.  
  7472. (Table 1369)
  7473. Values for POWER.EXE function status:
  7474.  0000h    successful
  7475.  0002h    "ERROR_PM_ALREADY_CONNECTED"
  7476.  0003h    "ERROR_PM_NOT_CONNECTED"
  7477.  0087h    "ERROR_PM_INVALID_PARAMETER"
  7478. --------p-2F5402-----------------------------
  7479. INT 2F U - POWER.EXE - GET/SET IDLE DETECTION STRATEGY
  7480.     AX = 5402h
  7481.     BH = subfunction
  7482.         00h get
  7483.         other set
  7484.         BL = detection strategy (00h-0Fh or FFh)
  7485. Return: BX = current/new detection strategy
  7486. SeeAlso: AH=53h,AX=5400h,AX=5401h,AX=5481h,AX=5482h
  7487. --------p-2F5403-----------------------------
  7488. INT 2F U - POWER.EXE - GET/SET ADVANCED POWER MANAGEMENT SETTING
  7489.     AX = 5403h
  7490.     BX = new power management setting or 0000h to get current setting
  7491. Return: AX = status
  7492.         0000h successful
  7493.         BX = power management setting (see #1370)
  7494.         other error code
  7495. SeeAlso: AX=5401h,AX=5480h
  7496.  
  7497. (Table 1370)
  7498. Values for power management setting:
  7499.  0001h-0005h "min"
  7500.  0006h         "reg"
  7501.  0007h-0008h "max"
  7502. --------t-2F5453-----------------------------
  7503. INT 2F - TesSeRact RAM-RESIDENT PROGRAM INTERFACE
  7504.     AX = 5453h
  7505.     BX = subfunction
  7506.         00h installation check
  7507.         CX = 0000h
  7508.         DS:SI -> 8-char blank-padded name
  7509.         Return: AX = FFFFh installed
  7510.                 CX = ID number of already-installed copy
  7511.             AX = anything else, not installed
  7512.                 CX = ID number for TSR when installed
  7513.         01h get user parameters
  7514.         CX = TSR ID number
  7515.         Return: AX = status
  7516.                 0000h successful
  7517.                 ES:BX -> user parameter block (see #1371)
  7518.                 nonzero failed
  7519.         02h check if hotkey in use
  7520.         CL = scan code of hot key
  7521.         Return: AX = FFFFh hot key conflicts with another TSR
  7522.                  otherwise safe to use the hotkey
  7523.         03h replace default critical error handler
  7524.         CX = TSR ID number
  7525.         DS:SI -> new routine for INT 24h
  7526.         Return: AX = nonzero, unable to install new handler
  7527.         04h get internal data area
  7528.         CX = TSR ID number
  7529.         Return: AX = status
  7530.                 0000h successful
  7531.                 ES:BX -> TSR's internal data area (see #1373)
  7532.                 nonzero, TSR not found
  7533.         05h set multiple hot keys
  7534.         CX = TSR ID number
  7535.         DL = number of additional hot keys to allocate
  7536.         DS:SI -> table of hot keys
  7537.             BYTE  hotkey scan code
  7538.             BYTE  hotkey shift state
  7539.             BYTE  flag value to pass to TSR (nonzero)
  7540.         Return: AX = nonzero, unable to install hot keys
  7541.         06h - 0Fh reserved
  7542.         10h enable TSR
  7543.         CX = TSR ID number
  7544.         Return: AX = nonzero, unable to enable
  7545.         11h disable TSR
  7546.         CX = TSR ID number
  7547.         Return: AX = nonzero, unable to disable
  7548.         12h unload TSR
  7549.         CX = TSR ID number
  7550.         Return: AX = nonzero, invalid TSR number
  7551.         Note: if any interrupts used by TSR have been grabbed by
  7552.             another TSR, the TesSeRact routines will wait until
  7553.             it is safe to remove the indicated TSR from memory
  7554.         13h restart TSR
  7555.         CX = TSR ID number of TSR which was unloaded but is still in
  7556.              memory
  7557.         Return: AX = nonzero, unable to restart TSR
  7558.         14h get status word
  7559.         CX = TSR ID number
  7560.         Return: AX = FFFFh invalid ID number
  7561.                = other, successful
  7562.                 BX = bit flags
  7563.         15h set status word
  7564.         CX = TSR ID number
  7565.         DX = new bit flags
  7566.         Return: AX = nonzero, unable to set status word
  7567.         16h get INDOS state at popup
  7568.         CX = TSR ID number
  7569.         Return: AX = 0000h successful
  7570.                 BX = value of INDOS flag
  7571.         17h - 1Fh reserved
  7572.         20h call user procedure
  7573.         CX = TSR ID number
  7574.         ES:DI -> user-defined data
  7575.         Return: AX = 0000h successful
  7576.         21h stuff keystrokes into keyboard buffer
  7577.         CX = TSR ID number
  7578.         DL = speed
  7579.             00h stuff keystrokes only when buffer is empty
  7580.             01h stuff up to four keystrokes per clock tick
  7581.             02h stuff up to 15 keystrokes per clock tick
  7582.         DH = scan code flag
  7583.             if zero, buffer contains alternating ASCII and scan codes
  7584.             if nonzero, buffer contains only ASCII codes
  7585.         SI = number of keystrokes
  7586.         ES:DI -> buffer to stuff
  7587.         Return: AX = 0000h success
  7588.                  F0F0h user aborted with ^C or ^Break
  7589.                  other unable to stuff keystrokes
  7590.         22h (v1.10) trigger popup
  7591.         CX = TSR ID number
  7592.         Return: AX = 0000h success, TSR will either pop up or beep to
  7593.                    indicate that it is unable to pop up
  7594.                  nonzero invalid ID number
  7595.         23h (v1.10) invoke TSR's background function
  7596.         CX = TSR ID number
  7597.         Return: AX = 0000h success
  7598.                  FFFFh not safe to call background function
  7599.                  nonzero invalid ID number
  7600.         24h - 2Fh reserved
  7601. Notes:    Borland's THELP.COM popup help system for Turbo Pascal and Turbo C
  7602.       (versions 1.x and 2.x only) fully supports the TesSeRact API, as
  7603.       do the SWAP?? programs by Innovative Data Concepts.
  7604.     AVATAR.SYS supports functions 00h and 01h (only the first three fields
  7605.       of the user parameter block) using the name "AVATAR  "
  7606. SeeAlso: AX=CAFEh,INT 16/AX=55FFh,INT 2D"AMIS"
  7607. Index:    installation check;TesSeRact TSR interface|uninstall;TesSeRact
  7608.  
  7609. (Table 1371)
  7610. Values for TesSeRact names:
  7611.  "AVATAR  "    AVATAR.SYS
  7612.  "QeditTSR"    TSR version of SemWare's Qedit editor
  7613.  "SCRNBLNK"    Trusted Access screen blanker
  7614.  
  7615. Format of TesSeRact User Parameter Block:
  7616. Offset    Size    Description    (Table 1372)
  7617.  00h  8 BYTEs    blank-padded TSR name
  7618.  08h    WORD    TSR ID number
  7619.  0Ah    DWORD    bitmap of supported functions
  7620.  0Eh    BYTE    scan code of primary hotkey
  7621.         00h = pop up when shift states match
  7622.         FFh = no popup (if shift state also FFh)
  7623.  0Fh    BYTE    shift state of primary hotkey
  7624.         FFh = no popup (if scan code also FFh)
  7625.  10h    BYTE    number of secondary hotkeys
  7626.  11h    DWORD    pointer to extra hotkeys set by func 05h
  7627.  15h    WORD    current TSR status flags
  7628.  17h    WORD    PSP segment of TSR
  7629.  19h    DWORD    DTA for TSR
  7630.  1Dh    WORD    default DS for TSR
  7631.  1Fh    DWORD    stack at popup
  7632.  23h    DWORD    stack at background invocation
  7633. Index:    hotkeys;TesSeRact TSR interface
  7634.  
  7635. Format of TSR internal data area:
  7636. Offset    Size    Description    (Table 1373)
  7637.  00h    BYTE    revision level of TesSeRact library
  7638.  01h    BYTE    type of popup in effect
  7639.  02h    BYTE    INT 08 occurred since last invocation
  7640.  03h    BYTE    INT 13 occurred since last invocation
  7641.  04h    BYTE    active interrupts
  7642.  05h    BYTE    active soft interrupts
  7643.  06h    BYTE    DOS major version
  7644.  07h    BYTE    how long to wait before popping up
  7645.  08h    DWORD    pointer to INDOS flag
  7646.  0CH    DWORD    pointer to DOS critical error flag
  7647.  10h    WORD    PSP segment of interrupted program
  7648.  12h    WORD    PSP segment of prog interrupted by INT 28
  7649.  14h    DWORD    DTA of interrupted program
  7650.  18h    DWORD    DTA of program interrupted by INT 28
  7651.  1Ch    WORD    SS of interrupted program
  7652.  1Eh    WORD    SP of interrupted program
  7653.  20h    WORD    SS of program interrupted by INT 28
  7654.  22h    WORD    SP of program interrupted by INT 28
  7655.  24h    DWORD    INT 24 of interrupted program
  7656.  28h  3 WORDs    DOS 3+ extended error info
  7657.  2Eh    BYTE    old BREAK setting
  7658.  2Fh    BYTE    old VERIFY setting
  7659.  30h    BYTE    were running MS WORD 4.0 before popup
  7660.  31h    BYTE    MS WORD 4.0 special popup flag
  7661.  32h    BYTE    enhanced keyboard call in use
  7662.  33h    BYTE    delay for MS WORD 4.0
  7663. 11 times (for INTs 08h,09h,13h,16h,1Ch,21h,28h,2Fh,1Bh,23h, and 24h):
  7664.     DWORD    old interrupt vector
  7665.     BYTE    interrupt number
  7666.     WORD    offset in TesSeRact code segment of new interrupt handler
  7667. --------p-2F5480-----------------------------
  7668. INT 2F U - POWER.EXE - GET/SET ???
  7669.     AX = 5480h
  7670.     BX = direction
  7671.         0000h get
  7672.         other set
  7673.     CX = size of buffer (at least 0010h)
  7674.     DS:SI -> buffer
  7675. Return: AX = status
  7676.         0000h successful
  7677.         other error code
  7678. SeeAlso: AX=5400h,AX=5481h,AX=548Fh
  7679. --------p-2F5481-----------------------------
  7680. INT 2F U - POWER.EXE - GET STATISTICS
  7681.     AX = 5481h
  7682.     BX = which statistics
  7683.         0000h idle detection
  7684.         0001h APM statistics
  7685.     CX = length of buffer in bytes
  7686.     DS:SI -> buffer for statistics (see #1374,#1375)
  7687. Return: AX = status
  7688.         0000h successful
  7689.         0071h "ERROR_PM_BUFFER_TOO_SMALL"
  7690.         0087h "ERROR_PM_INVALID_PARAMETER"
  7691. SeeAlso: AH=53h,AX=5400h,AX=5480h,AX=5402h,AX=5482h
  7692.  
  7693. Format of POWER.EXE idle detection statistics:
  7694. Offset    Size    Description    (Table 1374)
  7695.  00h    DWORD    "CPU_ON_TIME" total time CPU is active with POWER.EXE idle
  7696.           detection enabled, in timer ticks
  7697.  04h    DWORD    "CPU_IDLE_TIME" timer ticks during which CPU was idle
  7698.         (divide by previous to get idle    rate)
  7699.  08h    DWORD    total idle calls
  7700.  0Ch    DWORD    "TOTAL_APP_IDLE" total INT 2Fh idle calls
  7701.  10h    DWORD    "TOTAL_DOS_YIELD" total INT 28h idle calls
  7702.  14h    DWORD    "TOTAL_KEY_IDLE" total INT 16h idle calls
  7703.  18h    DWORD    "TOTAL_DOS_IDLE" total INT 2Ah idle calls
  7704.  
  7705. Format of APM statistics:
  7706. Offset    Size    Description    (Table 1375)
  7707.  00h    DWORD    "RESUME_COUNT" total number of resumes since last APM_ENABLE
  7708. --------p-2F5482-----------------------------
  7709. INT 2F U - POWER.EXE - GET/SET APM POLLING FREQUENCY
  7710.     AX = 5482h
  7711.     BX = new polling frequency or 0000h to get current frequency
  7712. Return: AX = 0000h (successful)
  7713.     BX = current frequency if BX=0000h on entry
  7714. SeeAlso: AH=53h,AX=5400h,AX=5401h,AX=5480h,AX=5481h,AX=548Fh
  7715. --------p-2F548F-----------------------------
  7716. INT 2F U - POWER.EXE - GET/SET ???
  7717.     AX = 548Fh
  7718.     BX = ??? or 0000h to get current ???
  7719. Return: AX = 0000h (successful)
  7720.     BX = current ???
  7721.     CX = ???
  7722. SeeAlso: AX=5400h,AX=5480h,AX=5482h
  7723. --------l-2F5500-----------------------------
  7724. INT 2F U - DOS 5+ - COMMAND.COM INTERFACE
  7725.     AX = 5500h
  7726. Return: AX = 0000h if an instance of COMMAND.COM is already running
  7727.     DS:SI -> entry point table
  7728. Notes:    used to access the shareable portion of COMMAND.COM, which may have
  7729.       been moved into the HMA; only the primary COMMAND.COM retains this
  7730.       portion
  7731.     procedures called from a dispatcher in COMMAND's resident portion;
  7732.       most assume that the segment address of the resident portion is on
  7733.       the stack and are thus not of general use
  7734. SeeAlso: AX=5501h
  7735. --------l-2F5501-----------------------------
  7736. INT 2F U - DOS 5+ - ROM COMMAND.COM INTERFACE
  7737.     AX = 5501h
  7738. Return: ???
  7739. Note:    used to determine whether the caller is the first instance of ROM
  7740.       COMMAND.COM
  7741. SeeAlso: AX=5500h
  7742. --------R-2F5600DXFFFF-----------------------
  7743. INT 2F - INTERLNK - INSTALLATION CHECK
  7744.     AX = 5600h
  7745.     DX = FFFFh
  7746.     BL = instance number (00h = any, 01h = first loaded, etc.)
  7747. Return: AL = FFh if installed
  7748.         BL = instance number
  7749.         CX = ???
  7750.         DX = resident CS
  7751. SeeAlso: AX=5601h,AX=5602h
  7752. --------R-2F5601DXFFFF-----------------------
  7753. INT 2F - INTERLNK - CHECK IF REDIRECTED DRIVE
  7754.     AX = 5601h
  7755.     DX = FFFFh
  7756.     BH = drive number (0=A:)
  7757.     BL = 00h
  7758. Return: (as for AL=00h if redirected drive)
  7759. SeeAlso: AX=5600h
  7760. --------R-2F5602DXFFFF-----------------------
  7761. INT 2F - INTERLNK - GET ???
  7762.     AX = 5602h
  7763.     DX = FFFFh
  7764. Return: CX = ???
  7765. SeeAlso: AX=5600h
  7766. ----------2F57-------------------------------
  7767. INT 2F U - ???
  7768.     AH = 57h
  7769.     ???
  7770. Return: ???
  7771. Note:    reportedly used by Iomega Corp.
  7772. --------c-2F5758BX4858-----------------------
  7773. INT 2F U - Helix Multimedia Cloaking - CACHECLK - INSTALLATION CHECK
  7774.     AX = 5758h
  7775.     BX = 4858h ('HX')
  7776.     DX = 4443h ('DC')
  7777.     CX <> 5758h
  7778. Return: BX = 6878h if installed
  7779.     DX = 6463h if installed
  7780.        CX = version (CH=major,CL=minor)
  7781. Program: CACHECLK is a 'Cloaked' disk cache by Helix Software
  7782. Note:    returns with registers unchanged if CX=5758h on entry
  7783. SeeAlso: INT 16/AX=5758h/BX=4858h
  7784. --------X-2F5D00-----------------------------
  7785. INT 2F U - PCMCIA - AWARD PCDISK - GET INFO FROM DRIVER ???
  7786.     AX = 5D00h
  7787. Return: ES:BX -> ???
  7788. Note:    supported by Ventura Micro / Award PCDISK.EXE v1.02c PCMCIA/ATA driver
  7789. SeeAlso: AX=5D01h,INT 21/AX=440Dh
  7790. --------X-2F5D01-----------------------------
  7791. INT 2F U - PCMCIA - AWARD PCDISK - PUT INFO INTO DRIVER ???
  7792.     AX = 5D01h
  7793.     ES:BX -> ???
  7794. Return: nothing
  7795. Note:    supported by Ventura Micro / Award PCDISK.EXE v1.02c PCMCIA/ATA driver
  7796. SeeAlso: AX=5D00h,INT 21/AX=440Dh
  7797. --------v-2F6282-----------------------------
  7798. INT 2F U - PC Tools v7.0+ VDEFEND, VSAFE, VWATCH, DATAMON - SET ??? ADDRESS
  7799.     AX = 6282h
  7800.     CX:DX -> ??? or 0000h:0000h
  7801.     DI = segment of ??? record (see #1376) or 0000h/FFFFh to ignore
  7802. Return: BX = 0062h
  7803. Note:    if CX:DX = 0000h:0000h on entry, the ??? address is not changed
  7804.       (DATAMON only)
  7805. SeeAlso: INT 13/AH=FAh"VSAFE",INT 21/AH=FAh"VDEFEND"
  7806.  
  7807. Format of VSAFE/VWATCH record:
  7808. Offset    Size    Description    (Table 1376)
  7809.  00h    DWORD    ???
  7810.  04h    WORD    offset of ??? in record's segment
  7811.         VSAFE 2.0 sets byte at +01h to 56h or 58h
  7812.         VWATCH 2.1 sets byte at +02h to 56h or 58h
  7813.  06h  2 BYTEs    ???
  7814.  08h    BYTE    ??? (01h/other)
  7815. --------v-2F6284BX0000-----------------------
  7816. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT    - INSTALLATION CHECK
  7817.     AX = 6284h
  7818.     BX = 0000h
  7819.     CX = 0000h
  7820. Return: AX = segment of resident code
  7821.     BX = 5555h
  7822.     CX = 5555h
  7823. Note:    also supported by DOS 6 UNDELETE which is licensed from PC Tools
  7824. SeeAlso: AX=6284h/BX=0001h,INT 16/AX=FFA3h
  7825. --------v-2F6284BX0001-----------------------
  7826. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT - GET ???
  7827.     AX = 6284h
  7828.     BX = 0001h
  7829.     CX = 0001h
  7830. Return: AX:BX -> ??? data (see #1377)
  7831.     CX = BX
  7832. SeeAlso: AX=6284h/BX=0000h
  7833.  
  7834. Format of DPROTECT data for v9.0:
  7835. Offset    Size    Description    (Table 1377)
  7836.  00h  5 BYTEs    ???
  7837.  05h    WORD    resident code segment (may be segment of DWORD at +03h)
  7838.  07h    DWORD    -> FAR function to sound alert tone
  7839.     ???
  7840. --------v-2F6284BX0002-----------------------
  7841. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT - GET OPTIONS
  7842.     AX = 6284h
  7843.     BX = 0002h
  7844.     CX = 0002h
  7845. Return: AX = options (see #1378)
  7846.     BX = ??? (0000h for v9)
  7847.     CX = AX
  7848.     DX = BX
  7849. Note:    also supported by DOS 6 UNDELETE which is licensed from PC Tools
  7850. SeeAlso: AX=6284h/BX=0000h,AX=6284h/BX=0003h
  7851.  
  7852. Bitfields for DATAMON/DPROTECT options:
  7853. Bit(s)    Description    (Table 1378)
  7854.  1    ???
  7855.  12    disabled
  7856.  13    using Delete Sentry
  7857.  14    using Delete Tracker
  7858. --------v-2F6284BX0003-----------------------
  7859. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT - SET OPTION??? FLAGS
  7860.     AX = 6284h
  7861.     BX = 0003h
  7862.     CX = flags (see #1379)
  7863.     DX = flags
  7864.         bit 15: ???
  7865. Note:    v9 DPROTECT only checks bit 12 of CX, and ignores DX entirely
  7866. SeeAlso: AX=6284h/BX=0002h
  7867.  
  7868. Bitfields for DATAMON/DPROTECT CX flags:
  7869. Bit(s)    Description    (Table 1379)
  7870.  3    ???
  7871.  5    ???
  7872.  10    ???
  7873.  12    disable DATAMON/DPROTECT
  7874. --------v-2F6284BX0004-----------------------
  7875. INT 2F U - PC Tools v8 DATAMON, v9+ DPROTECT - ???
  7876.     AX = 6284h
  7877.     BX = 0004h
  7878.     CX = 0004h
  7879. Return: AX = 5555h
  7880.     BX = ??? (0800h)
  7881.     CX = ??? (FCCCh for v8, FCCBh for v9)
  7882. --------V-2F6400-----------------------------
  7883. INT 2F - SCRNSAV2.COM - INSTALLATION CHECK
  7884.     AX = 6400h
  7885. Return: AL = installation state
  7886.         00h not installed
  7887.         FFh installed
  7888. Program: SCRNSAV2.COM is a screen saver for PS/2s with VGA by Alan Ballard
  7889. SeeAlso: INT 10/AX=5555h,INT 14/AX=AA01h
  7890. Index:    screen saver;SCRNSAV2
  7891. --------N-2F7000-----------------------------
  7892. INT 2F - License Service API - INSTALLATION CHECK
  7893.     AX = 7000h
  7894.     CX = license server index (0000h to 001Fh)
  7895. Return: AL = status
  7896.         00h not installed
  7897.         FFh installed
  7898. Notes:    The License Service API is being maintained by Microsoft but is being
  7899.       supported by a large number of companies including Apple, Banyan,
  7900.       DEC, HP, Lotus, Microsoft, Novell, Software Publishers Association,
  7901.       and Wordperfect (not a complete list!)
  7902.     Each license service provider must search for the next free index
  7903.       slot to use
  7904. SeeAlso: AX=7001h,AX=7003h,AX=7004h,AX=7005h
  7905. --------N-2F7001-----------------------------
  7906. INT 2F - License Service API - REQUEST LICENSE
  7907.     AX = 7001h
  7908.     CX = license server index (0000h to 001Fh)
  7909.     DS:DX -> SLSREQUEST structure (see #1380)
  7910. Return: AX = status
  7911.         0000h success
  7912.         else  provider error code
  7913.     ES:BX = provider specific handle for the license context
  7914. SeeAlso: AX=7002h,AX=7004h,AX=7005h
  7915.  
  7916. Format of License Service SLSREQUEST structure:
  7917. Offset    Size    Description    (Table 1380)
  7918.  00h    DWORD    (return) status code
  7919.  04h    DWORD    (return) handle identifying context
  7920.  08h    DWORD    (call) address of Publisher string
  7921.  0Ch    DWORD    (call) address of Product string
  7922.  10h    DWORD    (call) address of Version string
  7923.  14h    DWORD    units required
  7924.  18h    DWORD    address of comment string
  7925.  1Ch    DWORD    address of SLSCHALLENGE structure (see #1381)
  7926.  
  7927. Format of License Service SLSCHALLENGE structure:
  7928. Offset    Size    Description    (Table 1381)
  7929.  00h    DWORD    algorithm (currently always 1)
  7930.  04h    DWORD    secret to be challenged (1-255)
  7931.  08h    DWORD    size of challenge in bytes (1-255)
  7932.  0Ch  N BYTEs    challenge data
  7933. --------N-2F7002-----------------------------
  7934. INT 2F - License Service API - RELEASE LICENSE
  7935.     AX = 7002h
  7936.     CX = license server index (0000h to 001Fh)
  7937.     DS:DX -> SLSRELEASE structure (see #1382)
  7938.     ES:BX = provider specific handle for the license context
  7939. Return: AL = status
  7940.         00h not installed
  7941.         FFh installed
  7942. SeeAlso: AX=7001h,AX=7005h
  7943.  
  7944. Format of License Service SLSRELEASE structure:
  7945. Offset    Size    Description    (Table 1382)
  7946.  00h    DWORD    handle indentifying license context
  7947.  04h    DWORD    total units consumed
  7948.  08h    DWORD    address of comment string
  7949. --------N-2F7003-----------------------------
  7950. INT 2F - License Service API - UPDATE
  7951.     AX = 7003h
  7952.     CX = license server index (0000h to 001Fh)
  7953.     DS:DX -> SLSUPDATE structure (see #1383)
  7954.     ES:BX = provider specific handle for the license context
  7955. Return: AL = status
  7956.         00h not installed
  7957.         FFh installed
  7958. SeeAlso: AX=7004h,AX=7005h
  7959.  
  7960. Format of License Service SLSUPDATE structure:
  7961. Offset    Size    Description    (Table 1383)
  7962.  00h    DWORD    (return) status code
  7963.  04h    DWORD    (call) handle identifying license context
  7964.  08h    DWORD    (call) total units consumed
  7965.  0Ch    DWORD    additional units required
  7966.  10h    DWORD    address of comment string
  7967.  14h    DWORD    address of SLSCHALLENGE structure (see #1381)
  7968. --------N-2F7004-----------------------------
  7969. INT 2F - License Service API - GET ERROR
  7970.     AX = 7004h
  7971.     CX = license server index (0000h to 001Fh)
  7972.     DS:DX -> SLSGETERROR structure (see #1384)
  7973.     ES:BX = provider specific handle for the license context
  7974. Return: AL = status
  7975.         00h not installed
  7976.         FFh installed
  7977. SeeAlso: AX=7000h,AX=7001h
  7978.  
  7979. Format of License Service SLSGETERROR structure:
  7980. Offset    Size    Description    (Table 1384)
  7981.  00h    DWORD    (return) status code
  7982.  04h    DWORD    handle identifying license context
  7983.  08h    DWORD    error code
  7984.  0Ch    DWORD    buffer size in bytes
  7985.  10h  N BYTEs    data buffer
  7986. --------N-2F7005-----------------------------
  7987. INT 2F - License Service API - QUERY LICENSE
  7988.     AX = 7005h
  7989.     CX = license server index (0000h to 001Fh)
  7990.     DS:DX -> SLSQUERY structure (see #1385)
  7991.     ES:BX = provider specific handle for the license context
  7992. Return: AL = status
  7993.         00h not installed
  7994.         FFh installed
  7995. SeeAlso: AX=7001h,AX=7002h
  7996.  
  7997. Format of License Service SLSQUERY structure:
  7998. Offset    Size    Description    (Table 1385)
  7999.  00h    DWORD    (return) status code
  8000.  04h    DWORD    handle identifying license context
  8001.  08h    DWORD    information index
  8002.  0Ch    DWORD    buffer size in bytes
  8003.  10h  N BYTEs    data buffer
  8004. --------d-2F7200-----------------------------
  8005. INT 2F - SRDISK v1.30 - INSTALLATION CHECK
  8006.     AX = 7200h
  8007. Return: AL = FFh if installed
  8008.         ES = segment of device driver header (see #1386)
  8009. Program: SRDISK is a freeware resizeable RAMdisk by Marko Kohtala
  8010.  
  8011. Format of SRDISK device driver header:
  8012. Offset    Size    Description    (Table 1386)
  8013.  00h 10 BYTEs    same as standard device driver header (see INT 21/AH=52h)
  8014.  0Ah    BYTE    number of subunits (drives) supported by driver
  8015.  0Bh  3 BYTEs    signature "SRD"
  8016.  0Eh  4 BYTEs    memory type string (currently only "XMS ")
  8017.  12h  4 BYTEs    ASCII driver version string "N.NN"
  8018.  16h    BYTE    00h
  8019.  17h    BYTE    configuration format version (currently 00h)
  8020.  18h    WORD    offset of drive configuration data
  8021. --------N-2F7A00-----------------------------
  8022. INT 2F - Novell NetWare - LOW-LEVEL API (IPX) INSTALLATION CHECK
  8023.     AX = 7A00h
  8024. Return: AL = status
  8025.         00h not installed
  8026.         FFh installed
  8027.         ES:DI -> FAR entry point for routines accessed exclusively
  8028.               through INT 7A in NetWare versions through 2.0a.
  8029.               Call with same values as INT 7A
  8030.         ES:BX -> two bytes containing IPX major/minor version
  8031.             (IPXODI v2.12; BX unchanged by older IPX drivers)
  8032. SeeAlso: AX=7AFFh/BX=0000h,AX=D800h,INT 64"Novell",INT 7A"Novell"
  8033. --------N-2F7A10-----------------------------
  8034. INT 2F U - Novell NetWare - TBMI v1.1+ - GET TBMI STATUS
  8035.     AX = 7A10h
  8036. Return: DH = major TBMI version number
  8037.     DL = minor TBMI version number (01h for v1.1)
  8038.     CX = segment address of TBMI resident part
  8039.     BX = status word of TBMI (see #1387)
  8040. Note:    TBMI is the Task-Switched Buffer Manager Interface
  8041. SeeAlso: AX=7A11h,AX=7A12h,AX=7A13h,AX=7A14h
  8042.  
  8043. Bitfields for NetWare TBMI status word:
  8044. Bit(s)    Description    (Table 1387)
  8045.  0    INT2F intercepted by TBMI
  8046.  1    INT7A intercepted by TBMI
  8047.  2    INT64 intercepted by TBMI
  8048.  3-14    reserved or unused ???
  8049.  15    outstanding task ID was detected
  8050. --------N-2F7A11-----------------------------
  8051. INT 2F U - Novell NetWare - TBMI v1.1+ - GET INT2F HANDLERS
  8052.     AX = 7A11h
  8053. Return: ES:BX -> old INT 2F handler
  8054.     DS:DX -> TBMI INT 2F handler
  8055. SeeAlso: AX=7A10h,AX=7A12h,AX=7A13h,AX=7A1Ah
  8056. --------N-2F7A12-----------------------------
  8057. INT 2F U - Novell NetWare - TBMI v1.1+ - GET INT64 HANDLERS
  8058.     AX = 7A12h
  8059. Return: ES:BX -> old INT 64 handler
  8060.     DS:DX -> TBMI INT 64 handler
  8061. SeeAlso: AX=7A10h,AX=7A11h,AX=7A13h
  8062. --------N-2F7A13-----------------------------
  8063. INT 2F U - Novell NetWare - TBMI v1.1+ - GET INT7A HANDLERS
  8064.     AX = 7A13h
  8065. Return: ES:BX -> old INT 7A handler
  8066.     DS:DX -> TBMI INT 7A handler
  8067. SeeAlso: AX=7A10h,AX=7A11h,AX=7A12h
  8068. --------N-2F7A14-----------------------------
  8069. INT 2F U - Novell NetWare - TBMI v1.1+ - GET STATISTICS
  8070.     AX = 7A14h
  8071.     CX = statistic to retrieve
  8072.         0000h available diagnostic functions???
  8073.         Return: CX = maximum available function??? (000Ch for v2.0)
  8074.         0001h buffers in use
  8075.         Return: CX = TBMI buffers currently in use
  8076.         0002h maximum buffers used
  8077.         Return: CX = maximum number of buffers ever in use
  8078.         0003h unavailable buffers
  8079.         Return: CX = count of unavailable TBMI buffers
  8080.         0004h old interrupt usage
  8081.         Return: CX = TBMI accesses to intercepted old vectors INT 2F,
  8082.                   INT 64, and INT 7A
  8083.         0005h far call usage
  8084.         Return: CX = TBMI accesses to IPX/SPX far call handler (not
  8085.                   including internal accesses)
  8086.         0006h task buffering
  8087.         Return: CX = TBMI task buffering status (enabled/disabled or
  8088.                   disable/enable switch count???)
  8089.         0007h current task ID
  8090.         Return: CX = TBMI current task ID number (0000h if ???)
  8091.         0008h outstanding ID count
  8092.         Return: CX = number of outstanding TBMI IDs
  8093.         0009h configured ECBs
  8094.         Return: CX = number of TBMI Event Control Blocks configured
  8095.         000Ah configured data ECBs
  8096.         Return: CX = number of TBMI data ECBs configured
  8097.         000Bh configured sockets
  8098.         Return: CX = number of TBMI sockets configured (from NETCFG)
  8099.         000Ch current sockets
  8100.         Return: CX = number of TBMI sockets currently in use
  8101. Return: BX = maximum supported subfunction (000Ch)
  8102. SeeAlso: AX=7A10h
  8103. --------N-2F7A15-----------------------------
  8104. INT 2F OU - Novell NetWare - TBMI v1.1 only - RESET ???
  8105.     AX = 7A15h
  8106. Return: BX = new value of ???
  8107. Desc:    set ??? to its default value
  8108. Note:    this call is a NOP under TBMI v2.0 (TBMI2)
  8109. SeeAlso: AX=7A17h
  8110. --------N-2F7A16-----------------------------
  8111. INT 2F OU - Novell NetWare - TBMI v1.1 only - ???
  8112.     AX = 7A16h
  8113.     CX = ???
  8114.     ???
  8115. Return: ???
  8116. Note:    this call is a NOP under TBMI v2.0 (TBMI2)
  8117. --------N-2F7A17-----------------------------
  8118. INT 2F OU - Novell NetWare - TBMI v1.1 only - ???
  8119.     AX = 7A17h
  8120.     ???
  8121. Return: BX = old value of ???
  8122.     CX = new value of ???
  8123. Note:    this call is a NOP under TBMI v2.0 (TBMI2)
  8124. SeeAlso: AX=7A15h
  8125. --------N-2F7A18-----------------------------
  8126. INT 2F U - Novell NetWare - TASKID v1.0 - INSTALLATION CHECK
  8127.     AX = 7A18h
  8128. Return: AL = FFh if installed
  8129.         BX = configuration flags (see #1388)
  8130.         CX = resident code segment
  8131. SeeAlso: AX=7A10h
  8132.  
  8133. Bitfields for NetWare TASKID configuration flags:
  8134. Bit(s)    Description    (Table 1388)
  8135.  0    INT 2F hooked
  8136.  3    INT 08 hooked
  8137.  other    unused
  8138. --------N-2F7A19-----------------------------
  8139. INT 2F U - Novell NetWare - TASKID v1.0 - GET INT 08 HANDLERS
  8140.     AX = 7A19h
  8141. Return: AL = FFh
  8142.     DS:DX -> TASKID INT 08 handler
  8143.     ES:BX -> original INT 08 handler
  8144. --------N-2F7A1A-----------------------------
  8145. INT 2F U - Novell NetWare - TASKID v1.0 - GET INT 2F HANDLERS
  8146.     AX = 7A1Ah
  8147. Return: AL = FFh
  8148.     DX:DX -> TASKID INT 2F handler
  8149.     ES:BX -> original INT 2F handler
  8150. SeeAlso: AX=7A11h,AX=7A19h
  8151. --------N-2F7A1B-----------------------------
  8152. INT 2F U - Novell NetWare - TASKID v1.0 - GET DIAGNOSTICS INFORMATION
  8153.     AX = 7A1Bh
  8154.     CX = desired information
  8155.         0000h supported functions
  8156.         0001h TASKID ID number
  8157.         Return: CX = ID number
  8158.         0002h set-ID count
  8159.         Return: CX = ID set count
  8160. Return: AL = FFh
  8161.     BX = highest supported subfunction number (0002h)
  8162. SeeAlso: AX=7A14h,AX=7A18h
  8163. --------N-2F7A1C-----------------------------
  8164. INT 2F U - Novell NetWare - TBMI v1.1+ - ???
  8165.     AX = 7A1Ch
  8166.     BP = ???
  8167.     CX:DX = ???
  8168. Return: AX = 70FFh
  8169. --------N-2F7A1D-----------------------------
  8170. INT 2F U - Novell NetWare - TBMI v1.1+ - ???
  8171.     AX = 7A1Dh
  8172.     ???
  8173. Return: ES = ???
  8174.     ???
  8175.     SI destroyed
  8176. --------N-2F7A1E-----------------------------
  8177. INT 2F U - Novell NetWare - TBMI v1.1+ - ???
  8178.     AX = 7A1Eh
  8179.     ES:SI -> ???
  8180.     ???
  8181. Return: ???
  8182. --------N-2F7A20BX0000-----------------------
  8183. INT 2F - Novell NetWare - Adv NetWare 4.0 DOS Requester - GET VLM CALL ADDRESS
  8184.     AX = 7A20h
  8185.     BX = 0000h
  8186. Return: AX = 0000h on success (installed)
  8187.         ES:BX -> far call address for DOS Requester (see #1389)
  8188. Notes:    the DOS Requester replaces the NetWare Shell (ANETx, NETx) on
  8189.       NetWare LAN's as of the release of Advanced NetWare 4.0 (1993).  It
  8190.       is backward compatible with NetWare 2.1x through 3.11 servers as
  8191.       well.     Note that there was a NetWare 4.0 in the early 1980's, which
  8192.       can cause confusion.
  8193.     this call is used as the installation check by VLM.EXE, which is the
  8194.       loader for all the modules of the DOS Requester
  8195.     .VLMs are standard old .EXE format executables whose normal entry point
  8196.       merely terminates to prevent loading from the command line.  The
  8197.       real entry point is found by looking at the VLM header at the
  8198.       beginning of the load image (see #1391)
  8199. Index:    installation check;NetWare 4.0 DOS Requester
  8200.  
  8201. (Table 1389)
  8202. Call DOS Requester entry point with:
  8203.     STACK:    WORD    destination function
  8204.         WORD    destination VLM ID
  8205.         WORD    source VLM ID (0000h = application program)
  8206.     registers as appropriate for function
  8207. Return: AX = status code (0000h,8811h,8846h,8848h,8853h,???)
  8208.     other registers as appropriate for function
  8209.     STACK popped
  8210.  
  8211. (Table 1390)
  8212. Values for VLM identifier:
  8213.  0001h    VLM.EXE        Virtual Loadable Modules manager (see also #1392)
  8214.  0010h    CONN.VLM    connection table manager (see also #1393)
  8215.  0020h    TRAN.VLM    transport protocol multiplexor (see also #1394)
  8216.  0021h    IPXNCP.VLM    transport protocol implementation using IPX (see #1396)
  8217.  0022h    reserved for TCPNCP.VLM
  8218.  0030h    NWP.VLM        NetWare protocol multiplexor (see also #1397)
  8219.  0031h    BIND.VLM
  8220.  0032h    NDS.VLM        NetWare Directory Services (see also #1398)
  8221.  0033h    PNW.VLM        Personal NetWare
  8222.  0034h    RSA.VLM        RSA encryption for directory services re-authentication
  8223.  0040h    REDIR.VLM    DOS redirector (see also #1399)
  8224.  0041h    FIO.VLM        file I/O (see also #1401)
  8225.  0042h    PRINT.VLM    printer redirector (see also #1402)
  8226.  0043h    GENERAL.VLM    misc functions for NETx and REDIR (see also #1403)
  8227.  0050h    NETX.VLM    NetWare shell compatibility (see also #1404)
  8228.  0060h    AUTO.VLM    auto-reconnect/auto-retry
  8229.  0061h    SECURITY.VLM    enhanced security module
  8230.  0100h    NMR.VLM        NetWare management responder
  8231.  
  8232. Format of VLM header:
  8233. Offset    Size    Description    (Table 1391)
  8234.  00h    DWORD    -> initialization entry point
  8235.  04h    DWORD    -> VLM API entry point
  8236.  08h    DWORD    -> ??? entry point
  8237.  0Ch    DWORD    -> ??? entry point
  8238.  10h    DWORD    -> ??? entry point
  8239.     ...
  8240.  var    DWORD    00000000h (end of entry point list)
  8241.       4 BYTEs    signature "NVlm"
  8242.         WORD    VLM identifier
  8243. Note:    the number of entry points in the header is reported as "Func" in the
  8244.       VLM /D display.
  8245.  
  8246. (Table 1392)
  8247. Call VLM Manager (VLM.EXE) with:
  8248. Func    Description/Registers
  8249.  01h    VLM Statistics
  8250.  
  8251. (Table 1393)
  8252. Call Connection Manager (CONN.VLM) with:
  8253. Func    Description/Registers
  8254.  01h    Conn Get Version
  8255.  03h    Conn Statistics
  8256.  04h    Conn Alloc Handle
  8257.  05h    Conn Validate Handle
  8258.  06h    Conn Free Handle
  8259.  07h    Conn Get Entry Field
  8260.  08h    Conn Set Entry Field
  8261.  09h    Conn Reset Entry Field
  8262.  0Ah    Conn Lookup Handle
  8263.  0Dh    Conn Name Lookup
  8264.  0Eh    Conn Name To Handle
  8265.     DS:SI -> uppercased server name
  8266.     CX = length of server name, 0000h if ASCIZ name
  8267.     Return: AX = error code or 0000h if successful
  8268.             CX = connection handle if successful
  8269.  0Fh    Conn Get Num Connections
  8270.  
  8271. (Table 1394)
  8272. Call TRAN.VLM with:
  8273. Func    Description/Registers
  8274.  01h    Tran Get Version
  8275.  03h    Tran Statistics
  8276.  06h    Tran Request Reply (see INT 21/AH=F2h)
  8277.     AL = request code (see INT 21/AH=F2h)
  8278.     BH = error handler flag
  8279.         00h default error handler
  8280.         01h return network errors to caller
  8281.         02h handle network errors in requester
  8282.     BL = request list length (max 5 fragments) (see #1395)
  8283.     CX = connection handle
  8284.     DH = 00h (reserved)
  8285.     DL = reply list length (max 5 fragments) (see #1395)
  8286.     Return: AX = error code, 0000h if successful
  8287.         BX,DX destroyed
  8288.         reply buffer updated if successful
  8289.  08h    Tran Schedule/Cancel Event
  8290.  09h    Tran Get Max Size
  8291.  0Ah    Tran Broadcast Mux
  8292.  
  8293. Format of TRAN.VLM request/reply fragment descriptor (array):
  8294. Offset    Size    Description    (Table 1395)
  8295.  00h    DWORD    address of buffer
  8296.  04h    WORD    length of buffer
  8297.  
  8298. (Table 1396)
  8299. Call IPXNCP.VLM with:
  8300. Func    Description/Registers
  8301.  01h    IPX Get Version
  8302.  03h    IPX Statistics
  8303.  
  8304. (Table 1397)
  8305. Call NWP.VLM with:
  8306. Func    Description/Registers
  8307.  01h    NWP Get Version
  8308.  03h    NWP Statistics
  8309.  04h    NWP Connect
  8310.  05h    NWP Disconnect
  8311.  06h    NWP Attach
  8312.  08h    NWP Login
  8313.  09h    NWP Logout
  8314.  0Ah    NWP Get Bindery Object/Get Message Handler
  8315.  0Eh    NWP Ordered Send To All
  8316.  0Fh    NWP Preferred Handler
  8317.  
  8318. (Table 1398)
  8319. Call NDS.VLM with:
  8320. Func    Description/Registers
  8321.  01h    NDS Get Version
  8322.  03h    NDS Statistics
  8323.  08h    NDS Fragment Request
  8324.  
  8325. (Table 1399)
  8326. Call REDIR.VLM with:
  8327. Func    Description/Registers
  8328.  01h    Redir Get Version
  8329.  03h    Redir Statistics
  8330.  04h    Redir Build SFT (see INT 21/AH=B4h"NetWare")
  8331.     CX = connection handle
  8332.     ES:DI -> SFT build request (see #1400)
  8333.     Return: AX = 0000h if successful
  8334.             BX = DOS file handle
  8335.  05h    Redir DOS To NW Handle
  8336.  08h    Redir Specific
  8337.  
  8338. Format of NetWare SFT build request:
  8339. Offset    Size    Description    (Table 1400)
  8340.  00h  6 BYTEs    NetWare handle
  8341.  06h 18 BYTEs    ???
  8342.  18h    LONG    file size
  8343.  1Ch  8 BYTEs    ???
  8344.  
  8345. (Table 1401)
  8346. Call File I/O FIO.VLM with:
  8347. Func    Description/Registers
  8348.  01h    FIO Get Version
  8349.  03h    FIO Statistics
  8350.  04h    FIO Remote Copy
  8351.  
  8352. (Table 1402)
  8353. Call PRINT.VLM with:
  8354. Func    Description/Registers
  8355.  01h    Print Get Version
  8356.  03h    Print Statistics
  8357.  04h    Print Get/Set Data
  8358.  05h    Print Open Capture File
  8359.  07h    Print Get Num Of Printers
  8360.  08h    Print Redirection
  8361.     BX = 0000h
  8362.     CX = connection handle
  8363.     DX = printer (0=LPT1)
  8364.     AX = length of queue name, 0000h to use queue ID
  8365.     DS:SI -> uppercased ASCIZ queue name
  8366.     ES:DI -> queue ID, 0000h:0000h to use queue name
  8367.     Return: AX = 0000h if successful
  8368.  09h    Print Flush And Close Job
  8369.  0Ch    Print Get/Set Banner Name
  8370.  
  8371. (Table 1403)
  8372. Call GENERAL.VLM with:
  8373. Func    Description/Registers
  8374.  01h    Gen Get Version
  8375.  03h    Gen Statistics
  8376.  04h    Gen Get/Set Primary
  8377.  09h    Gen Return Drive Info
  8378.  
  8379. (Table 1404)
  8380. Call NETX.VLM with:
  8381. Func    Description/Registers
  8382.  01h    NetX Get Version
  8383.  03h    NetX Statistics
  8384. --------N-2F7A20BX0001-----------------------
  8385. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET VLM CallA ADDRESS
  8386.     AX = 7A20h
  8387.     BX = 0001h
  8388. Return: AX = 0000h if request was handled
  8389.         ES:BX -> CallA entry point
  8390. --------N-2F7A20BX0002-----------------------
  8391. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET VLM MULTIPLEX ADDRESS
  8392.     AX = 7A20h
  8393.     BX = 0002h
  8394. Return: AX = 0000h
  8395.     ES:BX -> VLM multiplex entry point (see #1405)
  8396. Note:    for v1.10, this function is only available while VLM.EXE is loading
  8397.       the .VLM modules, because ES is destroyed on return
  8398.  
  8399. (Table 1405)
  8400. Call DOS Requester entry point with:
  8401.     BX = function???
  8402.         0000h
  8403.         DX = ???
  8404.         DI = ???
  8405.         BP = ???
  8406.         0002h
  8407.         CX = ???
  8408.         0003h
  8409.         DX = ???
  8410.         BP = ???
  8411.         0006h
  8412.         AH = subfunction???
  8413.         AL = ???
  8414.         STACK: variable (0, 4, 10, 14 bytes seen)
  8415. --------N-2F7A20BX0003-----------------------
  8416. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET VLM PARSE API ADDRESS
  8417.     AX = 7A20h
  8418.     BX = 0003h
  8419. Return: AX = 0000h if request was handled
  8420.         ES:BX -> VLM parse API entry point
  8421. --------N-2F7A20BX0004-----------------------
  8422. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET VLM MULTICAST CALLOUT
  8423.     AX = 7A20h
  8424.     BX = 0004h
  8425. Return: AX = 0000h if request was handled
  8426.         ES:BX -> VLM multicast data (see #1406)
  8427.  
  8428. Format of DOS Requester data:
  8429. Offset    Size    Description    (Table 1406)
  8430.  00h    DWORD    pointer to ??? (code)
  8431.  04h  4 BYTEs    ???
  8432.  08h    DWORD    pointer to ??? (code) (see #1407)
  8433.     ???
  8434.  
  8435. (Table 1407)
  8436. Call offset 08h function with:
  8437.     AL = function (00h-07h)
  8438.     ???
  8439. Return: ???
  8440. --------N-2F7A20BX0005-----------------------
  8441. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET VLM INT 24 ADDRESS
  8442.     AX = 7A20h
  8443.     BX = 0005h
  8444. Return: AX = 0000h if request was handled
  8445.         ES:BX -> VLM INT 24 handler
  8446. --------N-2F7A20BX0006-----------------------
  8447. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET ??? ENTRY POINT
  8448.     AX = 7A20h
  8449.     BX = 0006h
  8450. Return: AX = 0000h if request was handled
  8451.         ES:BX -> ??? entry point (RETF in v1.03 and v1.10)
  8452. --------N-2F7A20BX0007-----------------------
  8453. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET ??? ENTRY POINT
  8454.     AX = 7A20h
  8455.     BX = 0007h
  8456. Return: AX = 0000h
  8457.     ES:BX -> ??? entry point (RETF in v1.03 and v1.10)
  8458. --------N-2F7A20BX0008-----------------------
  8459. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET ??? ENTRY POINT
  8460.     AX = 7A20h
  8461.     BX = 0008h
  8462. Return: AX = 0000h
  8463.     ES:BX -> ??? entry point (RETF in v1.03 and v1.10)
  8464. --------N-2F7A20BX0080-----------------------
  8465. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET ??? ENTRY POINT
  8466.     AX = 7A20h
  8467.     BX = 0080h
  8468. Return: AX = 0000h
  8469.     ES:BX -> ??? entry point (RETF in v1.03 and v1.10)
  8470. Note:    this function is identical to AX=7A20h/BX=0006h in v1.03 and v1.10
  8471. --------N-2F7A20BX0081-----------------------
  8472. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET ??? ENTRY POINT
  8473.     AX = 7A20h
  8474.     BX = 0081h
  8475. Return: AX = 0000h
  8476.     ES:BX -> ??? entry point (RETF in v1.03 and v1.10)
  8477. Note:    this function is identical to AX=7A20h/BX=0007h in v1.03 and v1.10
  8478. --------N-2F7A20BX0082-----------------------
  8479. INT 2F - Novell NetWare - DOS Requester v1.03+ - GET ??? ENTRY POINT
  8480.     AX = 7A20h
  8481.     BX = 0082h
  8482. Return: AX = 0000h
  8483.     ES:BX -> ??? entry point (RETF in v1.03 and v1.10)
  8484. Note:    this function is identical to AX=7A20h/BX=0008h in v1.03 and v1.10
  8485. --------N-2F7A21-----------------------------
  8486. INT 2F u - Novell NetWare - DOS Requester - BROADCAST CALLBACK
  8487.     AX = 7A21h
  8488.     CX = server connection
  8489. Return: CX = 0000h if broadcast handled
  8490. SeeAlso: AX=7A22h,AX=7A85h
  8491. --------N-2F7A22-----------------------------
  8492. INT 2F u - Novell NetWare - DOS Requester - BROADCAST/SFT3 INFORM
  8493.     AX = 7A22h
  8494.     DL = function
  8495.         21h ('!') broadcast
  8496.         40h ('@') SFT3 inform
  8497. Return: AX = 0000h if event handled
  8498. SeeAlso: AX=7A21h
  8499. --------N-2F7A2F-----------------------------
  8500. INT 2F U - Novell NetWare - IPXODI v2.12 - GET ???
  8501.     AX = 7A2Fh
  8502. Return: AX = 0000h if supported and active
  8503.         BX = version??? (0001h)
  8504.         ES:DI -> entry point (see #1408)
  8505. Note:    IPXODI v2.12 is distributed as part of the Personal NetWare system
  8506.       bundled with Novell DOS 7
  8507. SeeAlso: INT 7A/BX=001Fh
  8508.  
  8509. (Table 1408)
  8510. Call IPXODI entry point with:
  8511.     BX = function
  8512.         0000h ???
  8513.         ES:SI -> ??? data
  8514.         0001h ???
  8515.         AX = ???
  8516.         Return: ES:SI -> ??? data
  8517.         0002h get ??? address
  8518.         Return: ES:SI -> ??? buffer
  8519.         0003h send SPX packet???
  8520.         AL = ???
  8521.         CX = ???
  8522.         DX = ???
  8523.         SI = ???
  8524.         Return: ??? (registers from a call to INT 7A/BX=0016h)
  8525. Return: BX corrupted
  8526. --------N-2F7A2FBX0EDC-----------------------
  8527. INT 2F U - Personal NetWare - HRMIB - UNINSTALL
  8528.     AX = 7A2Fh
  8529.     BX = 0EDCh
  8530. Return: ???
  8531. SeeAlso: AX=7AA0h
  8532. --------N-2F7A40-----------------------------
  8533. INT 2F U - Novell NetWare - TCP/IP Protocol Stack - INSTALLATION CHECK
  8534.     AX = 7A40h
  8535. Return: AX = 7AFFh if installed
  8536.         BX = ??? bit flags (see #1409)
  8537.         CX = version (CH=major, CL=minor)
  8538.         DX = 0000h
  8539.         ES:DI -> entry point for TCP/IP stack (see #1410)
  8540. Notes:    Novell's LAN Workplace for DOS TCPIP.EXE also supports this interface
  8541.     this function is also supported by the Beame&Whiteside BWLWP40 shim,
  8542.       but it only returns AL and ES:DI, and does not support AX=7A41h
  8543. SeeAlso: AX=7A41h,INT 15/AX=DE2Eh,INT 60"Excelan"
  8544.  
  8545. Bitfields for returned BX:
  8546. Bit(s)    Description    (Table 1409)
  8547.  0    ???
  8548.  1    ???
  8549.  15-2    reserved???
  8550.  
  8551. (Table 1410)
  8552. Call NetWare TCP/IP entry point with:
  8553.     ES:SI -> parameter block (see #1411)
  8554. Return: ES:SI parameter block updated
  8555.  
  8556. Format of NetWare TCP/IP parameter block:
  8557. Offset    Size    Description    (Table 1411)
  8558.  00h  4 BYTEs    ???
  8559.  04h    WORD    (return) ???
  8560.  06h    WORD    (return) ???
  8561.  08h    DWORD    -> FAR routine called if bit 7 of function code set
  8562.  0Ch    BYTE    flags???
  8563.  0Dh  7 BYTEs    ???
  8564.  14h    BYTE    (return) ???
  8565.  15h    BYTE    (call) function code (bit 7 set if ???) (see #1412)
  8566.  16h    BYTE    socket number
  8567.  17h    BYTE    (return) result or error code
  8568.  18h  4 WORDs    parameter words 0 to 3 (see #1412 for usage)
  8569.  20h    WORD    length of packet sent/received
  8570.  22h    WORD    number of pointer/length pairs following
  8571.  24h 6N BYTEs    buffer descriptors, each
  8572.         Offset    Size    Description
  8573.          00h    DWORD    pointer to buffer
  8574.          04h    WORD    length of buffer
  8575.  
  8576. (Table 1412)
  8577. Values for NetWare TCP/IP function code:
  8578.  01h    "accept"
  8579.  02h    "bind"
  8580.  03h    close socket
  8581.     Call:    socket number field set
  8582.  04h    "connect"
  8583.  05h    get IP address
  8584.     Call:    socket number field set to 0000h
  8585.     Return:    parameter words 1 and 2 contain caller's IP address
  8586.  06h    get hardware address
  8587.  07h    "getpeername"
  8588.  08h    get socket name
  8589.  0Ah    get netmask
  8590.  0Bh    "ioctl"
  8591.  0Ch    "listen"
  8592.  0Dh    "select"
  8593.  10h    "shutdown"
  8594.  11h    open socket
  8595.     Call:    socket number field set to 0000h
  8596.         parameter word 0 = desired protocol (6 = TCP, 17 = UDP)
  8597.     Return: socket number set
  8598.  12h    "read"
  8599.  13h    "recvfrom"
  8600.     Call:    socket number set
  8601.         packet length and buffer descriptors set
  8602.     Return:    packet length and receive buffers updated
  8603.         parameter word 1 = source port number
  8604.         parameter words 2 and 3 = source IP address
  8605.  14h    "write"
  8606.  15h    "sendto"
  8607.     Call:    socket number set
  8608.         flags field = ???
  8609.         parameter word 0 = 0000h
  8610.         parameter word 1 = destination port number
  8611.         parameter words 2 and 3 = destination IP address
  8612.         packet length and buffer descriptors set
  8613.  16h    get BOOTP data
  8614. Note:    these functions are based on the Unix socket interface
  8615. --------N-2F7A41-----------------------------
  8616. INT 2F - Novell NetWare - TCP/IP Protocol Stack - WINDOWS SUPPORT???
  8617.     AX = 7A41h
  8618.     ES:DI -> FAR entry point for ??? (will be called with BX=1,2,3,4)
  8619. Return: AX = 7AFFh if supported
  8620.         BX = ??? (see #1409)
  8621.         CX = version (CH=major, CL=minor)
  8622.         DX = 0000h
  8623.         ES:SI -> DWORD containing passed value of ES:DI
  8624.         ES:DI -> entry point for TCP/IP stack
  8625. Notes:    Novell's LAN Workplace for DOS TCPIP.EXE also supports this interface
  8626.     the pointer which is set to ES:DI is cleared to 0000h:0000h when
  8627.       a Windows exit broadcast is received
  8628. SeeAlso: AX=7A40h
  8629. --------N-2F7A42-----------------------------
  8630. INT 2F - Novell NetWare - TCPIP.EXE v4.1 - GET ??? ENTRY POINT
  8631.     AX = 7A42h
  8632. Return: AX = 7AFFh if supported
  8633.         ES:DI -> ??? entry point (see #1389)
  8634.  
  8635. (Table 1413)
  8636. Call NetWare TCPIP.EXE entry point with:
  8637.     DX = ???
  8638.     ES:DI -> ??? (see #1414)
  8639. Return: AX = 0000h
  8640.     other registers destroyed
  8641.  
  8642. Format of data buffer:
  8643. Offset    Size    Description    (Table 1414)
  8644.  00h    WORD    offset of WORD ??? or 0000h
  8645.  02h    WORD    offset of DWORD ??? or 0000h
  8646.  04h    WORD    offset of DWORD ??? or 0000h
  8647. --------N-2F7A43-----------------------------
  8648. INT 2F - Novell NetWare - TCPIP.EXE v4.1 - GET ???
  8649.     AX = 7A43h
  8650. Return: AX = 7AFFh if supported
  8651.         DX = offset of ???
  8652. SeeAlso: AX=7A44h
  8653. --------N-2F7A44-----------------------------
  8654. INT 2F - Novell NetWare - TCPIP.EXE v4.1 - SET ???
  8655.     AX = 7A44h
  8656.     DX = offset of ??? (see AX=7A43h)
  8657. Return: AX = 7AFFh if supported
  8658. SeeAlso: AX=7A43h
  8659. --------N-2F7A4C-----------------------------
  8660. INT 2F - Novell NetWare - TCPIP.EXE v4.1 - GET ???
  8661.     AX = 7A4Ch
  8662. Return: AX = 7AFFh if supported
  8663.         BX = ??? (0037h)
  8664.         CX = ??? (001Ch)
  8665. --------N-2F7A4DBX0001-----------------------
  8666. INT 2F - Novell NetWare - ???
  8667.     AX = 7A4Dh
  8668.     BX = 0001h
  8669.     ES:DI -> ???
  8670. Return: AL = FFh if ???
  8671.         ES:DI -> ???
  8672. Note:    called by NETBIOS.EXE v3.01
  8673. --------N-2F7A4FBX0001-----------------------
  8674. INT 2F - Novell NetWare - SNMP.EXE - INSTALLATION CHECK
  8675.     AX = 7A4Fh
  8676.     BX = 0001h
  8677. Return: AX = 7AFFh if installed
  8678. --------N-2F7A4FBX0002-----------------------
  8679. INT 2F - Novell NetWare - SNMP.EXE - ???
  8680.     AX = 7A4Fh
  8681.     BX = 0002h
  8682. Return: AL = status
  8683.         4Fh if failed
  8684.         FFh if successful
  8685. --------N-2F7A80-----------------------------
  8686. INT 2F C - Novell NetWare - SHELL 3.01d BROADCAST - ABNORMAL EXIT
  8687.     AX = 7A80h
  8688. Return: nothing
  8689. Notes:    called on abnormal exit of the NetWare shell to notify other Novell
  8690.       TSRs that it is unsafe to call the shell in the future.
  8691.     must be passed through so that all interested programs see the exit
  8692.     on receiving this call, IPXODI clears an internal pointer to a
  8693.       default value; Novell's NETBIOS.EXE clears its INT 21h pointer to
  8694.       0000h:0000h and stops calling it
  8695. SeeAlso: AX=7A81h
  8696. --------N-2F7A81-----------------------------
  8697. INT 2F C - Novell NetWare - SHELL 3.01d BROADCAST - SET SHELL INT 21 HANDLER
  8698.     AX = 7A81h
  8699.     CX:DX -> shell's INT 21h entry point
  8700. Return: nothing
  8701. Notes:    the shell calls this function as it loads to allow interested TSRs
  8702.       and drivers to make a local copy of the shell's entry point
  8703.     must be passed through so that all interested programs see it
  8704. --------N-2F7A85-----------------------------
  8705. INT 2F C - Novell NetWare - shell 3.01 - BROADCAST INFORM
  8706.     AX = 7A85h
  8707.     CX = broadcast server number
  8708. Return: CX = 0000h if broadcast message handled by another program
  8709.     CX unchanged if broadcast not handled
  8710. SeeAlso: AX=7A21h
  8711. --------N-2F7A90-----------------------------
  8712. INT 2F U - Novell NetWare - NETBIOS.EXE 3+ - INSTALLATION CHECK
  8713.     AX = 7A90h
  8714. Return: AL = 00h if present
  8715.         BX = ???
  8716.         CX = PSP segment of NETBIOS resident code
  8717. SeeAlso: AX=7AFEh
  8718. --------N-2F7AA0-----------------------------
  8719. INT 2F U - Personal NetWare - HRMIB - ???
  8720.     AX = 7AA0h
  8721.     BX = function
  8722.         0000h ???
  8723.         0001h ???
  8724. Return: ???
  8725. SeeAlso: AX=7A2Fh/BX=0EDCh
  8726. --------N-2F7AC1-----------------------------
  8727. INT 2F - LAN HiJack - LHR - DISABLE???
  8728.     AX = 7AC1h
  8729. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  8730.       to take over control of a workstation remotely; LHR is the program
  8731.       run on the slave workstation
  8732. SeeAlso: AX=7AC8h,AX=7AC9h,AX=7ACFh
  8733. --------N-2F7AC2-----------------------------
  8734. INT 2F - LAN HiJack - LHR - SYNCHRONIZE SHIFT STATES???
  8735.     AX = 7AC2h
  8736. Note:    sets BIOS keyboard status byte to an internal variable
  8737. SeeAlso: AX=7AC3h,AX=7ACFh
  8738. --------N-2F7AC3-----------------------------
  8739. INT 2F - LAN HiJack - LHR - CLEAR ??? FLAG
  8740.     AX = 7AC3h
  8741. SeeAlso: AX=7AC2h,AX=7ACFh
  8742. --------N-2F7AC8-----------------------------
  8743. INT 2F - LAN HiJack - LHR - ENABLE FUNCTIONS
  8744.     AX = 7AC8h
  8745.     BL = function(s) to enable (see #1415)
  8746. SeeAlso: AX=7AC1h,AX=7AC9h,AX=7ACFh
  8747.  
  8748. Bitfields for LAN HiJack function(s) to enable/disable:
  8749. Bit(s)    Description    (Table 1415)
  8750.  0    ???
  8751.  1    remote keyboard enabled
  8752.  2    support remote's mouse
  8753.  3-7    unused
  8754. --------N-2F7AC9-----------------------------
  8755. INT 2F - LAN HiJack - LHR - DISABLE FUNCTIONS
  8756.     AX = 7AC9h
  8757.     BL = function(s) to disable (see #1415)
  8758. SeeAlso: AX=7AC1h,AX=7AC8h
  8759. --------N-2F7ACA-----------------------------
  8760. INT 2F - LAN HiJack - LHJ - ???
  8761.     AX = 7ACAh
  8762.     BL = ???
  8763. Return: ???
  8764. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  8765.       to take over control of a workstation remotely; LHJ is the program
  8766.       run on the controlling workstation
  8767. --------N-2F7ACB-----------------------------
  8768. INT 2F - LAN HiJack - LHJ - ???
  8769.     AX = 7ACBh
  8770.     BX = ???
  8771. Return: ???
  8772. Note:    this function appears to be related to the keyboard
  8773. SeeAlso: AX=7ACCh
  8774. --------N-2F7ACC-----------------------------
  8775. INT 2F - LAN HiJack - LHJ - ???
  8776.     AX = 7ACCh
  8777.     BX = ???
  8778. Return: ???
  8779. Note:    this function appears to be related to the mouse
  8780. SeeAlso: AX=7ACBh
  8781. --------N-2F7ACFBX0000-----------------------
  8782. INT 2F - LAN HiJack - LHR - INSTALLATION CHECK
  8783.     AX = 7ACFh
  8784.     BX = 0000h
  8785. Return: BX = segment of resident code if installed
  8786. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  8787.       to take over control of a workstation remotely; LHR is the program
  8788.       run on the slave workstation
  8789. --------N-2F7AF0-----------------------------
  8790. INT 2F - Novell NetWare - DOSNP.EXE v1.30G - INSTALLATION CHECK
  8791.     AX = 7AF0h
  8792. Return: AL = FFh if present
  8793.         ES = 7AF0h
  8794.         CX = PSP segment of resident code
  8795. --------N-2F7AF1-----------------------------
  8796. INT 2F - Novell NetWare - Access Server Driver - INSTALLATION CHECK
  8797.     AX = 7AF1h
  8798.     BL = sequence number (01h first driver, 02h second, 00h no driver)
  8799. Return: AX <> 7AF1h if present
  8800.         BH = total number of drivers
  8801.         ---if BL nonzero on entry---
  8802.         AL = number of ports provided by specified driver
  8803.         ES:DI -> driver entry point
  8804.               (see #1416,#1417,#1418,#1419,#1420,#1421,#1422,#1423)
  8805.         ES:DX -> ID string
  8806. SeeAlso: INT 7A/AX=001Ch
  8807.  
  8808. (Table 1416)
  8809. Call Access Server driver "initialize port" function with:
  8810.     AH = 01h
  8811.     AL = port number (00h-0Fh)
  8812.     ES:BX -> configuration parameter block (see #1429)
  8813.     interrupts disabled
  8814. Return: CF clear if successful
  8815.     CF set on error
  8816.  
  8817. (Table 1417)
  8818. Call Access Server driver "get port status" function with:
  8819.     AH = 02h
  8820.     AL = port number (00h-0Fh)
  8821.     interrupts disabled
  8822. Return: CF clear if successful
  8823.         BL = transmitter status (see #1426)
  8824.         BH = receiver status (see #1427)
  8825.         DL = external status signals (see #1428)
  8826.     CF set on error
  8827.     interrupts disabled
  8828.  
  8829. (Table 1418)
  8830. Call Access Server driver "get input from port" function with:
  8831.     AH = 03h
  8832.     AL = port number (00h-0Fh)
  8833.     CX = size of data buffer
  8834.     ES:BX -> buffer for data
  8835.     interrupts disabled
  8836. Return: CF clear if successful
  8837.     CF set on error
  8838.     interrupts disabled
  8839.     CX = number of bytes read
  8840. Note:    the driver will add a NUL to the buffer when a break signal is detected
  8841.  
  8842. (Table 1419)
  8843. Call driver "send output data to port" function with:
  8844.     AH = 04h
  8845.     AL = port number (00h-0Fh)
  8846.     CX = number of bytes to send
  8847.     ES:BX -> buffer containing data
  8848.     interrupts disabled
  8849. Return: CF clear if successful
  8850.     CF set on error
  8851.     interrupts disabled
  8852.     CX = number of bytes actually written
  8853.  
  8854. (Table 1420)
  8855. Call driver "get I/O character counts" function with:
  8856.     AH = 05h
  8857.     AL = port number (00h-0Fh)
  8858.     interrupts disabled
  8859. Return: CF clear if successful
  8860.         BX = number of bytes pending transmission
  8861.         CX = number of bytes available for reading
  8862.     CF set on error
  8863.     interrupts disabled
  8864.  
  8865. (Table 1421)
  8866. Call driver "control XON/XOFF" function with:
  8867.     AH = 06h
  8868.     AL = port number (00h-0Fh)
  8869.     DL = new state
  8870.         (00h software flow control disabled, else enabled)
  8871.     interrupts disabled
  8872. Return: CF clear if successful
  8873.     CF set on error
  8874.     interrupts disabled
  8875.  
  8876. (Table 1422)
  8877. Call driver "get error counts and statistics" function with:
  8878.     AH = 07h
  8879.     AL = port number (00h-0Fh)
  8880.     ES:BX -> buffer for statistics (see #1430)
  8881.     interrupts disabled
  8882. Return: CF clear if successful
  8883.         ES:BX buffer filled
  8884.     CF set on error
  8885.     interrupts disabled
  8886.  
  8887. (Table 1423)
  8888. Call driver "general request" function with:
  8889.     AH = 08h
  8890.     AL = port number (00h-0Fh)
  8891.     DX = requested operations
  8892.         bit 0: flush transmit buffers
  8893.         bit 1: flush receive buffers
  8894.         bit 4: define XON/XOFF characters
  8895.     ES:BX -> XON/XOFF characters (see #1431) if DX bit 4 set
  8896.     interrupts disabled
  8897. Return: CF clear if successful
  8898.     CF set on error
  8899.     interrupts disabled
  8900.  
  8901. (Table 1424)
  8902. Call driver "deadman timer management" function with:
  8903.     AH = 09h
  8904.     AL = port number (00h-0Fh)
  8905.     BX = next time interval in seconds (0000h to disable timer)
  8906.     interrupts disabled
  8907. Return: CF clear
  8908.     interrupts disabled
  8909.  
  8910. (Table 1425)
  8911. Call driver "get buffer sizes" function with:
  8912.     AH = 0Ah
  8913.     AL = port number (00h-0Fh)
  8914.     interrupts disabled
  8915. Return: CF clear if successful
  8916.        BX = size of transmit buffer
  8917.        CX = size of receive buffer
  8918.     CF set on error
  8919.     interrupts disabled
  8920.  
  8921. (Table 1426)
  8922. Values for Access Server transmitter status:
  8923.  00h    uninitialized
  8924.  01h    ready, not transmitting
  8925.  02h    transmitting
  8926.  03h    XOFF received
  8927.  04h    transmitting, buffer full
  8928.  05h    XOFF received and buffer full
  8929.  
  8930. (Table 1427)
  8931. Values for Access Server receiver status:
  8932.  00h    uninitialized
  8933.  01h    ready
  8934.  02h    receive buffer full, data may have been lost
  8935.  
  8936. Bitfields for external status signals:
  8937. Bit(s)    Description    (Table 1428)
  8938.  7,6    undefined
  8939.  5    CTS active
  8940.  4    DSR active
  8941.  3    DCD active
  8942.  2,1    undefined
  8943.  0    ring indicator
  8944.  
  8945. Format of Access Server configuration parameter block:
  8946. Offset    Size    Description    (Table 1429)
  8947.  00h    BYTE    receive baud rate index
  8948.         00h 50 bps, 01h 75 bps, 02h 110 bps, 03h 134.5 bps,
  8949.         04h 150 bps, 05h 300 bps, 06h 600 bps, 07h 1200 bps,
  8950.         08h 1800 bps, 09h 2000 bps, 0Ah 2400 bps, 0Bh 3600 bps,
  8951.         0Ch 4800 bps, 0Dh 7200 bps, 0Eh 9600 bps, 0Fh 19200 bps,
  8952.         10h 38400 bps, 11h 57600 bps, 12h 115200 bps
  8953.  01h    BYTE    receive bits per character (0=5 bits..3=8 bits)
  8954.  02h    BYTE    receive stop bits
  8955.  03h    BYTE    receive parity
  8956.         00h none, 01h odd, 02h even, 03h mark, 04h space
  8957.  04h    BYTE    transmit baud rate index (same as receive baud rate)
  8958.  05h    BYTE    transmit bits per character (0=5 bits..3=8 bits)
  8959.  06h    BYTE    transmit stop bits
  8960.  07h    BYTE    transmit parity (same as receive parity)
  8961.  08h    BYTE    DTR state (00h off, 01h on)
  8962.  09h    BYTE    RTS state (00h off, 01h on)
  8963.  0Ah    BYTE    flow control (00h none, 01h XON/XOFF, 02h RTS/CTS, 03h both)
  8964.  0Bh    BYTE    break control (00h off, 01h on)
  8965.  
  8966. Format of Access Server statistics:
  8967. Offset    Size    Description    (Table 1430)
  8968.  00h    BYTE    port number
  8969.  01h    BYTE    external status signals (see #1428)
  8970.  02h    BYTE    transmitter status (see #1426)
  8971.  03h    BYTE    receiver status (see #1427)
  8972.  04h    DWORD    number of characters received
  8973.  08h    DWORD    number of characters transmitted
  8974.  0Ch    WORD    input parity errors
  8975.  0Eh    WORD    input framing errors
  8976.  10h    WORD    lost characters due to hardware overrun
  8977.  12h    WORD    lost characters due to data buffer overrun
  8978. Note:    the counts are not allowed to wrap around; once a count reaches FFFFh
  8979.       or FFFFFFFFh, it is no longer incremented
  8980.  
  8981. Format of Access Server XON/XOFF characters:
  8982. Offset    Size    Description    (Table 1431)
  8983.  00h    BYTE    04h (number of bytes following)
  8984.  01h    BYTE    transmit XON character
  8985.  02h    BYTE    transmit XOFF character
  8986.  03h    BYTE    receive XON character
  8987.  04h    BYTE    receive XOFF character
  8988. --------N-2F7AFE-----------------------------
  8989. INT 2F - Novell NetWare - DOSNP.EXE - INSTALLATION CHECK
  8990.     AX = 7AFEh
  8991. Return: AL = FFh if present
  8992.         ES = (data???) segment of DOSNP
  8993. Program: DOSNP.EXE provides "named pipes" support for DOS workstations running
  8994.        NetWare
  8995. Note:    the NetWare shell calls this function and refuses to load if DOSNP is
  8996.       present
  8997. SeeAlso: AX=7A90h
  8998. --------N-2F7AFFBX0000-----------------------
  8999. INT 2F - Novell NetWare - TBMI v1.1+ - INSTALLATION CHECK / Windows SUPPORT
  9000.     AX = 7AFFh
  9001.     BX = 0000h
  9002.     CX = 4E65h ("Ne")
  9003.     DX = 7457h ("tW")
  9004.     ES:DI -> Windows support procedure (see #1432)
  9005. Return: AL = FFh if installed
  9006.         CX = configured sockets (14h)
  9007.         DS:SI -> data table ???
  9008.         ES:DI -> IPX far call handler
  9009. Notes:    for IPX/SPX this call reportedly returns DS:SI pointing to the table
  9010.       of pointers to service events queue head and tail
  9011.     this function is also supported by IPXODI; v2.12 does not change DS,
  9012.       but does set SI to an internal address
  9013. SeeAlso: AX=7AFFh/BX=0001h
  9014.  
  9015. (Table 1432)
  9016. Values Windows support procedure called with:
  9017.     BP = function
  9018.         0001h Get ECB
  9019.         BX = socket number
  9020.         Return: ES:SI -> ECB or 0000h:0000h if none available
  9021.         0002h Count Listen ECBs
  9022.         AX = BX = socket
  9023.         Return: CX = number of listen ECBs for socket
  9024.                 (must be >= 2 for SPX to work)
  9025.         0003h ???
  9026.         0004h Inform task switcher of ECB locations
  9027. Notes:    registers other than those listed above are equal to the values when
  9028.       IPX was called
  9029.     the support function will not be called if IPX is called with BX bit
  9030.       15 set
  9031. --------N-2F7AFFBX0001-----------------------
  9032. INT 2F - Novell NetWare - TBMI v1.1+, shell v3.01d - INSTALLATION CHECK???
  9033.     AX = 7AFFh
  9034.     BX = 0001h
  9035.     CX = 4E65h ("Ne")
  9036.     DX = 7457h ("tW")
  9037. Return: AL = FFh if installed
  9038.         CX = ???  (8000h)
  9039.         SI = ??? (or -> ???) (0002h and 0007h seen)
  9040.         ES:DI -> IPX far call handler
  9041.         ES:DX -> 6-byte data area ???
  9042. Note:    this function is also supported by IPXODI, but IPXODI v2.12 does not
  9043.       return ES:DX
  9044. SeeAlso: AX=7AFFh/BX=0000h
  9045. --------d-2F7F00-----------------------------
  9046. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - INSTALLATION CHECK
  9047.     AX = 7F00h
  9048. Return: AL = FFh if installed
  9049. SeeAlso: AX=7F01h,AX=7F02h,AX=7F03h
  9050. --------d-2F7F01-----------------------------
  9051. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - DO COMMAND
  9052.     AX = 7F01h
  9053.     DS:DX -> command record (see #1433)
  9054. Return: AL = status
  9055.         00h successful
  9056.         else error code
  9057. SeeAlso: AX=7F00h,AX=7F02h,INT 11/AH=FFh"SDLP",INT 21/AX=4402h"ASPI"
  9058. SeeAlso: INT 4F/AX=8100h
  9059.  
  9060. Format of CD-ROM redirector command record:
  9061. Offset    Size    Description    (Table 1433)
  9062.  00h    BYTE    ID
  9063.  01h 10 BYTEs    CDB (Command Descriptor Block) for operation
  9064.  0Bh    WORD    segment of buffer
  9065.  0Dh    WORD    offset of buffer
  9066.  0Fh    BYTE    status
  9067.  10h    BYTE    sense
  9068.  12h    WORD    count
  9069. --------d-2F7F02-----------------------------
  9070. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - DO RESET
  9071.     AX = 7F02h
  9072. SeeAlso: AX=7F00h,AX=7F01h
  9073. --------d-2F7F03-----------------------------
  9074. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - UNINSTALL
  9075.     AX = 7F03h
  9076. Return: AL = status
  9077.         00h successful
  9078.         01h unable to uninstall
  9079. SeeAlso: AX=7F00h
  9080. ----------2F7F24-----------------------------
  9081. INT 2F - Multiplex - ???
  9082.     AX = 7F24h
  9083.     ???
  9084. Return: ???
  9085. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  9086. ----------2F7F26-----------------------------
  9087. INT 2F - Multiplex - ???
  9088.     AX = 7F26h
  9089.     ???
  9090. Return: ???
  9091. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  9092. --------!---Section--------------------------
  9093.