home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PROG_GEN / INTER40B.ZIP / INTERRUP.G < prev    next >
Text File  |  1994-04-03  |  294KB  |  7,744 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 below) 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 below)
  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 below)
  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 below), 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 signature string:
  132. Offset    Size    Description
  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 interrupt hook list [array]:
  140. Offset    Size    Description
  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 below)
  145.  
  146. Format of hotkey list:
  147. Offset    Size    Description
  148.  00h    BYTE    type of hotkey checking (see below)
  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 below)
  156.          03h    WORD    disallowed shift states (see below)
  157.          05h    BYTE    flags
  158.                 bit 0: hotkey chained before processing
  159.                 bit 1: hotkey chained after processing
  160.                 bit 2: others should pass through this hotkey
  161.                     so that it can be monitored
  162.                 bit 3: hotkey will not activate if other keys
  163.                     pressed/released before hotkey press is
  164.                     completed
  165.                 bit 4: this key is remapped into some other key
  166.                 bit 5-7: reserved (0)
  167. Notes:    except for bit 7, the shift states correspond exactly to the return
  168.       values from INT 16/AH=12h.  A set bit in the required states word
  169.       indicates that the corresponding shift state must be active when the
  170.       hotkey's scan code is received for the hotkey to be recognized; a
  171.       clear bit means that the corresponding state may be ignored.    A set
  172.       bit in the disallowed shift states word indicates that the
  173.       corresponding shift state must be inactive.
  174.     for the disallowed-states word, if one of the "either" bits is set,
  175.       then both the corresponding left bit and right bit must be set
  176.     examples:
  177.         Ctrl-Alt-Del monitoring: 53h 000Ch 0003h 06h
  178.         Alt-key tap (DESQview):     B8h 0000h 0007h 08h
  179.         Shf-Shf-N (NOTE.COM):     31h 0003h 000Ch 00h
  180. Index:    hotkeys;AMIS
  181.  
  182. Bitfields for type of hotkey checking:
  183. Bit(s)    Description
  184.  0    checks before chaining INT 09
  185.  1    checks after chaining INT 09
  186.  2    checks before chaining INT 15/AH=4Fh
  187.  3    checks after chaining INT 15/AH=4Fh
  188.  4    checks on INT 16/AH=00h,01h,02h
  189.  5    checks on INT 16/AH=10h,11h,12h
  190.  6    checks on INT 16/AH=20h,21h,22h
  191.  7    reserved (0)
  192.  
  193. Bitfields for shift states:
  194. Bit(s)    Description
  195.  0    right shift pressed
  196.  1    left shift pressed
  197.  2    either control key pressed
  198.  3    either Alt key pressed
  199.  4    ScrollLock active
  200.  5    NumLock active
  201.  6    CapsLock active
  202.  7    either shift key pressed
  203.  8    left control key pressed
  204.  9    left Alt key pressed
  205.  10    right control key pressed
  206.  11    right Alt key pressed
  207.  12    ScrollLock pressed
  208.  13    NumLock pressed
  209.  14    CapsLock pressed
  210.  15    SysRq key pressed
  211. Note:    if bit 2 is set, either control key may be pressed for the hotkey; if
  212.       bits 8 and 10 are both set, then both control keys must be pressed.
  213.       Similarly for bits 3 and 9/11, as well as 7 and 0/1.
  214.  
  215. Format of interrupt sharing protocol interrupt handler entry point:
  216. Offset    Size    Description
  217.  00h  2 BYTEs    short jump to actual start of interrupt handler, immediately
  218.         following this data block (EBh 10h)
  219.  02h    DWORD    address of next handler in chain
  220.  06h    WORD    signature 424Bh
  221.  08h    BYTE    EOI flag
  222.         00h software interrupt or secondary hardware interrupt handler
  223.         80h primary hardware interrupt handler (will issue EOI)
  224.  09h  2 BYTEs    short jump to hardware reset routine
  225.         must point at a valid FAR procedure (may be just RETF)
  226.  0Bh  7 BYTEs    reserved (0)
  227.  
  228. Signatures known to be in use:
  229.  'Byrial J' 'EKLAVO  '    permits keyboard entry of Esperanto accented letters
  230.  'CoveSoft' 'Burnout+'    shareware screen saver Burnout Plus
  231.  'Crynwr  ' 'SPELLER '    TSR spelling-checker
  232.  'CSJewell' 'Modula3L'    Curtis Jewell's Modula-3 compiler (non-TSR)
  233.  'DAISYCHA' 'INDRIVER'    Advanced Parallel Port daisy chain driver (vendor name
  234.             in product description field, if desired)
  235.             (see also INT 2D/AL=DCh)
  236.  'ECLIPSE ' 'PLUMP   '    Eclipse Software's printer and plotter spooler
  237.  'GraySoft' 'GIPC    '    GraySoft's Inter-Process Communications driver
  238.  'heathh  ' 'Monitor '
  239.  'J. Berry' 'RATSR   '    RemoteAccess Network Manager workstation module
  240.  'JWB      ' 'RAMLIGHT'    James Birdsall's on-screen RAMdisk activity indicator
  241.  'Nildram ' 'ST         '    Screen Thief graphics screen grabber
  242.  'R-Ware  ' 'dLite   '    run-time data decompression TSR
  243.  'Ralf B  ' 'FASTMOUS'    example TSR included with sample AMIS library code
  244.  'Ralf B  ' 'NOLPT n '    example TSR -- turn LPTn into bit-bucket
  245.  'Ralf B  ' 'NOTE    '    example TSR -- popup note-taker
  246.  'Ralf B  ' 'RBkeyswp'    RBkeyswap v3.0+ -- swap Esc/~ and LCtrl/CapsLock keys
  247.  'Ralf B  ' 'SWITCHAR'    example TSR -- add switchar() support removed from DOS5
  248.  'Ralf B  ' 'VGABLANK'    example TSR -- VGA-only screen blanker
  249.  'Sally IS' 'Mdisk   '    removeable, resizeable RAMdisk
  250.  'Sally IS' 'Scr2Tex '    screen dumper with output in (La)Tex format
  251.  'Thaco      ' 'NEST    '    Eirik Pedersen's programmer's delimiter matcher
  252.  'TifaWARE' 'EATMEM  '    George A. Theall's public domain memory restrictor for
  253.             testing programs (v1.1+)
  254.  'TifaWARE' 'RECALL  '    public domain commandline editor and history (v1.2+)
  255.  'Todd      ' 'XPTR2   '    PC-to-Transputer interface by Todd Radel
  256. --------N-2D--10-----------------------------
  257. INT 2D - RATSR 2.0+ - GET STATUS
  258.     AL = 10h
  259.     AH = AMIS multiplex number for RATSR
  260. Return: AL = status
  261.         01h listening (no connection)
  262.         02h receiving          \
  263.         03h sending               > station being monitored
  264.         04h initializing receive  /
  265.     AH = keyboard lock status (00h unlocked, 01h locked)
  266. Program: RATSR is a utility by James Berry provided with
  267.       RemoteAccess/Professional, a commercial bulletin board system, that
  268.       allows remote control of a station over a network
  269. SeeAlso: INT 2D"AMIS"
  270. --------d-2D--10-----------------------------
  271. INT 2D - dLite 1.0+ - GET PARAMETER BLOCK ADDRESS
  272.     AL = 10h
  273.     AH = AMIS multiplex number for dLite
  274. Return: CF clear if successful
  275.         ES:BX -> parameter block (see below)
  276.     CF set on error
  277. Program: dLite is a shareware TSR by Rainer Schuetze which transparently
  278.       expands compressed files when they are read
  279. SeeAlso: AL=11h"dLite",AL=12h"dLite",INT 21/AX=FEDCh"PCMANAGE"
  280.  
  281. Format of parameter block:
  282. Offset    Size    Description
  283.  00h    BYTE    TSR flags (see below)
  284.  01h    WORD    maximum number of programs needing original filesize
  285.  03h    WORD    current number of programs needing original filesize
  286.  05h    WORD    maximum number of files that can be handled by dLite (should
  287.           be the same as FILES= in CONFIG.SYS)
  288.  07h    WORD    offset (in the same segment as the parameter block) of the
  289.           table of programs needing the original filesize (8 bytes
  290.           each,    without path or extension, uppercase, and zero \
  291.           terminated if    shorter than 8 bytes)
  292.  
  293. Bitfields for TSR flags
  294. Bit(s)    Description
  295.  0    deny FCB access
  296.  1    dLite sleeping rather than activated
  297.  2    always indicate original filesize when reading directory entries,
  298.       rather than only for specified programs
  299.  3-7    reserved
  300. --------V-2D--10-----------------------------
  301. INT 2D - Burnout Plus v3.00 - GET STATE/CONTROL INFORMATION
  302.     AL = 10h
  303.     AH = AMIS multiplex number for Burnout Plus
  304. Return: AL = 01h
  305.     BX = Burnout Plus status (see below)
  306.     CX = record of features loaded (see below)
  307.     ES:DI -> Burnout Plus control structure (see below)
  308. Program: Burnout Plus is a DOS screen saver from Cove Software
  309. SeeAlso: INT 14/AX=AA01h,INT 2D"AMIS"
  310. Index:    screen saver;Burnout Plus
  311.  
  312. Bitfields for status:
  313. Bit(s)    Description
  314.  0    screen is blanked
  315.  1    MS Windows is active (Burnout Plus deactivated)
  316.  2-15    reserved
  317.  
  318. Bitfields for features loaded/features enabled:
  319. Bit(s)    Description
  320.  0    mouse activity monitor
  321.  1    passkey support
  322.  2    password support
  323.  3    continuous clear
  324.  4    software blanking
  325.  5    video activity monitor
  326.  6    disk activity monitor
  327.  7    activating keystroke suppression
  328.  
  329. Format of Burnout Plus control structure:
  330. Offset    Size    Description
  331.  00h    BYTE    size of structure in bytes
  332.  01h    WORD    Burnout Plus version
  333.  03h    WORD    screen blanking reset count in clock ticks
  334.  05h    WORD    current countdown value in clock ticks
  335.  07h    BYTE    type of timeout specification
  336.  08h    BYTE    instant-blank hotkey
  337.  09h    WORD    extended status information (see below)
  338.         the bits for password, passkey, and software blanking are
  339.           ignored and cannot be enabled or disabled externally
  340.  0Bh    WORD    features enabled (see above)
  341. Note:    all fields except the first two may be modified by external programs
  342.       to affect the operation of Burnout Plus
  343. Index:    hotkeys;Burnout Plus
  344.  
  345. Bitfields for extended status information:
  346. Bit(s)    Description
  347.  0    Burnout Plus disabled
  348.  1    force screen to blank on next clock tick
  349.  2    restore screen if currently blanked
  350.  3-15    reserved
  351. Note:    1 and 2 are automatically cleared by Burnout Plus after blanking
  352.       or restoring the screen
  353. --------V-2D--10-----------------------------
  354. INT 2D U - Screen Thief v1.00 - FREE HIGH MEMORY BUFFERS
  355.     AL = 10h
  356.     AH = AMIS multiplex number for Screen Thief
  357. Return: nothing
  358. Program: Screen Thief is a graphics screen grabber
  359. Note:    releases any code and data stored in EMS, DOS UMBs, or XMS UMBs, but
  360.       does not release the low-memory stub; this may be used to effect a
  361.       partial uninstall if INT 2D/AL=02h fails
  362. SeeAlso: INT D8"Screen Thief"
  363. --------i-2D--10-----------------------------
  364. INT 2D U - RAMLIGHT v1.0 - GET MONITORING INFORMATION
  365.     AL = 10h
  366.     AH = AMIS multiplex number for RAMLIGHT
  367. Return: ES:BX -> array of fake device driver headers used in monitoring
  368.     CX = number of drives being monitored???
  369. --------d-2D--11-----------------------------
  370. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET ORIGINAL SIZE
  371.     AL = 11h
  372.     AH = AMIS multiplex number for dLite
  373.     BX = file handle
  374. Return: CF clear if successful
  375.         DX:AX = size of uncompressed file
  376.     CF set on error (not dPressed file)
  377. SeeAlso: AL=10h"dLite",AL=12h"dLite"
  378. --------d-2D--12-----------------------------
  379. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET COMPRESSED SIZE
  380.     AL = 12h
  381.     AH = AMIS multiplex number for dLite
  382.     BX = file handle
  383. Return: CF clear if successful
  384.         DX:AX = size of compressed file
  385.     CF set on error (not dPressed file)
  386. SeeAlso: AL=10h"dLite",AL=11h"dLite"
  387. --------b-2D--DC-----------------------------
  388. INT 2D C - DAISY.SYS - BROADCAST: CHAIN RESCANNED
  389.     AL = DCh
  390.     AH = AMIS multiplex number for signature 'DAISYCHA' 'INDRIVER'
  391.     DL = LPT Port Rescanned
  392. Program: DAISY.SYS is a daisy chain manager for parallel port peripherals
  393.       conforming to the Advanced Parallel Port Committee's daisy chain
  394.       specification.
  395. Desc:    This Broadcast is sent whenever daisy chain IDs are reassigned to
  396.       warn parallel port device drivers that their daisy chain ID may
  397.       have been changed.
  398. Note:    This function is a callout from DAISY.SYS, NOT a call into DAISY.SYS
  399. SeeAlso: INT 17/AX=0200h"Advanced Parallel Port"
  400. --------l-2E---------------------------------
  401. INT 2E U - DOS 2+ - PASS COMMAND TO COMMAND INTERPRETER FOR EXECUTION
  402.     DS:SI -> commandline to execute (see below)
  403. Return: all registers except CS:IP destroyed
  404.     AX = status (4DOS v4.0)
  405.        0000h successful
  406.        FFFFh error before processing command (not enough memory, etc)
  407.        other error number returned by command
  408. Notes:    this call allows execution of arbitrary commands (including COMMAND.COM
  409.       internal commands) without loading another copy of COMMAND.COM
  410.     if COMMAND.COM is the user's command interpreter, the primary copy
  411.       executes the command; this allows the master environment to be
  412.       modified by issuing a "SET" command, but changes in the master
  413.       environment will not become effective until all programs descended
  414.       from the primary COMMAND.COM terminate
  415.     since COMMAND.COM processes the string as if typed from the keyboard,
  416.       the transient portion needs to be present, and the calling program
  417.       must ensure that sufficient memory to load the transient portion can
  418.       be allocated by DOS if necessary
  419.     results are unpredictable if invoked by a program run from a batch file
  420.       because this call is not reentrant and COMMAND.COM uses the same
  421.       internal variables when processing a batch file
  422.     hooked but ignored by 4DOS v3.0 COMMAND.COM replacement unless SHELL2E
  423.       has been loaded
  424.     the MS-DOS 5 Programmer's Reference calls this "Reload Transient"
  425.  
  426. Format of commandline:
  427. Offset    Size    Description
  428.  00h    BYTE    length of command string, not counting trailing CR
  429.  01h    var    command string
  430.   N    BYTE    0Dh (CR)
  431. --------O-2E---------------------------------
  432. INT 2E UP - Windows NT - NATIVE API
  433.     EAX = function number
  434.     EDX = address of parameter block
  435. Return: ???
  436. --------l-2E----BXE22E-----------------------
  437. INT 2E - 4DOS v2.x-3.03 SHELL2E.COM - UNINSTALL
  438.     BX = E22Eh
  439.     DS:SI -> zero byte
  440. Return: if successful, SHELL2E terminates itself with INT 21/AH=4Ch
  441. ----------2F---------------------------------
  442. INT 2F - Multiplex - NOTES
  443.     AH = identifier of program which is to handle the interrupt
  444.        00h-7Fh reserved for DOS
  445.        B8h-BFh reserved for networks
  446.        C0h-FFh reserved for applications
  447.     AL is the function code
  448.    This is a general mechanism for verifying the presence of a TSR and
  449.    communicating with it.  When searching for a free identifier code for AH
  450.    using the installation check (AL=00h), the calling program should set
  451.    BX/CX/DX to 0000h and must not depend on any registers other than CS:IP
  452.    and SS:SP to be valid on return, since numerous programs now use additional
  453.    registers on input and/or output for the installation check.
  454. Notes:    Since the multiplex chain is growing so long, and beginning to
  455.       experience multiplex number collisions, I am proposing an alternate
  456.       multiplex interrupt on INT 2D.  If you decide to use the alternate
  457.       multiplex, please let me know.
  458.     DOS and some other programs return values in the flags register, so
  459.       any TSR which chains by calling the previous handler rather than
  460.       jumping to it should ensure that the returned flags are preserved
  461.       and passed back to the original caller
  462. SeeAlso: INT 2D
  463. --------t-2F---------------------------------
  464. INT 2F - BMB Compuscience Canada Utilities Interface - INSTALLATION CHECK
  465.     AH = xx (dynamically assigned based upon a search for a multiplex
  466.          number which doesn't answer installed)
  467.     AL = 00h installation check
  468.     ES:DI = EBEBh:BEBEh
  469. Return: AL = 00h not installed
  470.          01h not installed, not OK to install
  471.          FFh installed; if ES:DI was EBEBh:BEBEh on entry, ES:DI will point
  472.          to a string of the form 'MMMMPPPPPPPPvNNNN' where MMMM is a
  473.          short form of the manufacturer's name, PPPPPPPP is a product
  474.          name and NNNN is the product's version number
  475. --------t-2F---------------------------------
  476. INT 2F - Ross Wentworth's Turbo Pascal POPUP LIBRARY
  477.     AH = programmer-selected multiplex number
  478.     AL = function
  479.         00h installation check
  480.         Return: AL = FFh if installed
  481.         01h get TSR interrupt vectors
  482.         Return: DX:AX -> vector table (see below)
  483.         02h get TSR code segment
  484.         Return: AX = code segment for all interrupt handlers
  485.         03h call user exit routine and release TSR's memory
  486.         04h get signature string
  487.         Return: DX:AX -> counted string containing signature
  488.         05h get TSR's INT 2F handler
  489.         Return: DX:AX -> INT 2F handler
  490.         06h enable/disable TSR
  491.         BL = new state (00h disabled, 01h enabled)
  492.         07h activate TSR (popup if not disabled)
  493.         08h get hotkeys
  494.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  495.         Return: AX = hotkey (AH = keyflags, AL = scancode)
  496.         09h set hotkey
  497.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  498.         CX = new hotkey (CH = keyflags, CL = scancode)
  499.         0Ah-1Fh reserved
  500. Index:    installation check;Ross Wentworth POPUP library
  501. Index:    hotkeys;Ross Wentworth POPUP library
  502.  
  503. Format of vector table entry:
  504. Offset    Size    Description
  505.  00h    BYTE    vector number (00h = end of table)
  506.  01h    DWORD    original vector
  507.  05h    WORD    offset of interrupt handler in TSR's code segment
  508. --------t-2F---------------------------------
  509. INT 2F - CiriSOFT Spanish University of Valladolid TSR's Interface
  510.     AH = xx (dynamically assigned based upon a search for a multiplex
  511.          number from C0h to FFh which doesn't answer installed)
  512.     AL = 00h installation check
  513.     ES:DI = 1492h:1992h
  514. Return: AL = 00h not installed
  515.          01h not installed, not OK to install
  516.          FFh installed; and if ES:DI was 1492h:1992h on entry, ES:DI will
  517.          point to author_name_ver table (see below)
  518.     AH = FFh
  519. Note:    this interface permits advanced communication with TSRs: it is possible
  520.       to make a generic uninstall utility, advanced TSR relocator programs
  521.       in order to fit fragmented memory areas, etc.
  522. See also: INT 2D"AMIS",INT 2F"Compuscience"
  523. Index:    installation check;CiriSOFT TSR interface
  524. Index:    uninstall;CiriSOFT TSR interface
  525.  
  526. Format of author_name_ver table:
  527. Offset    Size    Description
  528.  -16    WORD    segment of the start of the resident TSR code (CS in programs
  529.         with PSP, XMS upper memory segment if installed as UMB...)
  530.  -14    WORD    offset of the start of the resident TSR code (frequently 100h
  531.         in *.COM programs and 0 in upper memory TSR's).
  532.  -12    WORD    memory used by TSR (in paragraphs). Knowing the memory area
  533.         used by TSR is possible to determine if hooked vectors are
  534.         still pointing it (and if it is safe to uninstall).
  535.  -10    BYTE    characteristics byte (see below)
  536.  -9    BYTE    number of multiplex entry used (redefinition available). Note
  537.         that the TSR must use THIS variable in it's INT 2Fh handler.
  538.  -8    WORD    offset to vector_area table (see below)
  539.  -6    WORD    offset to extra_area table (see bit 7 in offset -10 and below)
  540.  -4   4 BYTEs    signature string "*##*"
  541.  00h    var    "AUTHOR:PROGRAM_NAME:VERSION",0     (variable length, this area
  542.         is used in order to determine if the TSR is already resident
  543.         and it's version code; the ':' char is used as delimiter)
  544.  
  545. Bitfields for characteristics byte:
  546. Bit(s)    Description
  547.  0-2    type
  548.     000 normal program (with PSP)
  549.     001 upper XMS memory block (needed HIMEM.SYS function to free memory
  550.           when uninstalling)
  551.     010 device driver (*.SYS)
  552.     011 device driver in EXE format
  553.     1xx others (reserved)
  554.  3-6    reserved
  555.  7    set if extra_table defined and supported
  556.  
  557. Format of vector_area table:
  558. Offset    Size    Description
  559.  -1    BYTE    number of vectors intercepted by TSR
  560.  00h    BYTE    first vector number
  561.  01h    DWORD    first vector pointer before installing the TSR
  562.  05h    BYTE    second vector number
  563.  06h    DWORD    second vector pointer before installing the TSR
  564.  0Ah    ...    (and so on)
  565. Note:    the TSR must use these variables to invoke the previous interrupt
  566.       handler routines
  567.  
  568. Format of extra_area table (needed only to improve relocation feature):
  569. Offset    Size    Description
  570.  00h    WORD    offset to external_ctrl table (0 if not supported)
  571.  02h    WORD    reserved for future use (0)
  572.  
  573. Format of external_ctrl table:
  574. Offset    Size    Description
  575.  00h    BYTE    bit 0: TSR is relocatable (no absolute segment references)
  576.  01h    WORD    offset to a variable which can activate/inhibit the TSR
  577.  ---And if bit 0 in offset 00h is off:
  578.  03h    DWORD    pointer to ASCIZ pathname for executable file which supports
  579.         /SR parameter (silent installation & inhibit)
  580.  07h    DWORD    pointer to first variable to initialize on the copy reloaded
  581.         from the previous TSR still resident
  582.  0Bh    DWORD    pointer to last variable (all variables packed in one block)
  583. --------c-2F00-------------------------------
  584. INT 2F U - DOS 2.x only PRINT.COM - ???
  585.     AH = 00h
  586.     ???
  587. Return: ???
  588. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  589.     values in AH other than 00h or 01h cause PRINT to return the number of
  590.       files in the queue in AH
  591. SeeAlso: AH=01h
  592. --------P-2F00-------------------------------
  593. INT 2F U - PSPRINT - PRINT JOB CONTROL
  594.     AH = 00h
  595.     ???
  596. Return: ???
  597. --------c-2F0080-----------------------------
  598. INT 2F - DOS 3.1+ PRINT - GIVE PRINT A TIME SLICE
  599.     AX = 0080h
  600. Return: after PRINT executes
  601. Notes:    PRINT returns AL=01h if AH=00h but AL is not 80h on entry
  602.     this function is not supported by the Novell DOS 7 PRINT.COM
  603. --------N-2F00D8-----------------------------
  604. INT 2F - Personal NetWare - VLM - ???
  605.     AX = 00D8h
  606.     ???
  607. Return: ???
  608. Note:    hooked by one of the .VLMs loaded by VLM.EXE v1.10, but apparently a
  609.       NOP
  610. --------c-2F01-------------------------------
  611. INT 2F U - DOS 2.x only PRINT.COM - ???
  612.     AH = 01h
  613.     ???
  614. Return: ???
  615. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  616.     values in AH other than 00h or 01h cause PRINT to return the number of
  617.       files in the queue in AH
  618. SeeAlso: AH=00h
  619. --------c-2F0100-----------------------------
  620. INT 2F - DOS 3+ PRINT - INSTALLATION CHECK
  621.     AX = 0100h
  622. Return: AL = status
  623.         00h not installed
  624.         01h not installed, but not OK to install
  625.         FFh installed
  626.         AH = 00h (Novell DOS 7)
  627. SeeAlso: AX=0101h
  628. --------c-2F0100SI20D6-----------------------
  629. INT 2F U - PrintCache 3.1 PRINT.COM - INSTALLATION CHECK
  630.     AX = 0100h
  631.     SI = 20D6h
  632.     DI = 8761h
  633. Return: AX = 00FFh if installed
  634.     DI = 0001h if PrintCache's PRINT.COM installed and magic values match
  635.         SI = resident code segment
  636. Program: PrintCache PRINT.COM is a DOS PRINT replacement included in
  637.       LaserTools' PrintCache memory/disk-based print spooler package
  638. Note:    if either of SI or DI differ from the indicated magic values, only AX
  639.       will be modified on return, for compatibility with DOS PRINT
  640. SeeAlso: AX=0101h/SI=20D6h,AX=C000h"PCACHE"
  641. --------c-2F0101-----------------------------
  642. INT 2F - DOS 3+ PRINT - SUBMIT FILE FOR PRINTING
  643.     AX = 0101h
  644.     DS:DX -> submit packet (see below)
  645. Return: CF clear if successful
  646.         AL = status
  647.         01h added to queue
  648.         9Eh now printing
  649.     CF set on error
  650.         AX = error code (see below, also INT 21/AH=59h)
  651. SeeAlso: AX=0102h
  652.  
  653. Format of submit packet:
  654. Offset    Size    Description
  655.  00h    BYTE    level (must be 00h)
  656.  01h    DWORD    pointer to ASCIZ filename (no wildcards)
  657.  
  658. Values for PRINT error code:
  659.  0001h invalid function
  660.  0002h file not found
  661.  0003h path not found
  662.  0004h out of file handles
  663.  0005h access denied
  664.  0008h print queue full
  665.  0009h spooler busy
  666.  000Ch name too long
  667.  000Fh invalid drive
  668. --------c-2F0101SI20D6-----------------------
  669. INT 2F U - PrintCache v3.1 PRINT.COM - SUBMIT FILE FOR PRINTING
  670.     AX = 0101h
  671.     SI = 20D6h
  672.     DI = 8761h
  673.     DS:DX -> submit packet (see AX=0101h)
  674.     CL = print options
  675.         bit 4: use default options
  676. Return: CF clear if successful
  677.         AL = status
  678.         01h added to queue
  679.         9Eh now printing
  680.     CF set on error
  681.         AX = error code (see AX=0101h)
  682. Program: PrintCache PRINT.COM is a DOS PRINT replacement included in
  683.       LaserTools' PrintCache memory/disk-based print spooler package
  684. Note:    if either SI or DI differs from the indicated magic values on entry,
  685.       PrintCache will use the default print options for the file for
  686.       compatibility with DOS PRINT
  687. SeeAlso: AX=0100h/SI=20D6h,AX=0101h,AX=0107h"PrintCache"
  688. --------c-2F0102-----------------------------
  689. INT 2F - DOS 3+ PRINT - REMOVE FILE FROM PRINT QUEUE
  690.     AX = 0102h
  691.     DS:DX -> ASCIZ filename (wildcards allowed)
  692. Return: CF clear if successful
  693.     CF set on error
  694.         AX = error code (see AX=0101h)
  695. SeeAlso: AX=0101h,AX=0103h
  696. --------c-2F0103-----------------------------
  697. INT 2F - DOS 3+ PRINT - CANCEL ALL FILES IN PRINT QUEUE
  698.     AX = 0103h
  699. Return: CF clear if successful
  700.     CF set on error
  701.         AX = error code (see AX=0101h)
  702. SeeAlso: AX=0102h
  703. --------c-2F0104-----------------------------
  704. INT 2F - DOS 3+ PRINT - FREEZE PRINT QUEUE TO READ JOB STATUS
  705.     AX = 0104h
  706. Return: CF clear if successful
  707.         DX = error count since status last read
  708.         DS:SI -> print queue
  709.     CF set on error
  710.         AX = error code (see AX=0101h)
  711. Desc:    get the list of print jobs, temporarily suspending PRINT's activities
  712.       to avoid changing the list while it is being examined
  713. Notes:    the print queue is an array of 64-byte ASCIZ filenames terminated by
  714.       an empty filename; the first name is the file currently being printed
  715.     printing is stopped until AX=0105h is called to prevent the queue
  716.       from changing while the filenames are being read
  717. SeeAlso: AX=0101h,AX=0105h
  718. --------c-2F0105-----------------------------
  719. INT 2F - DOS 3+ PRINT - RESTART PRINT QUEUE AFTER STATUS READ
  720.     AX = 0105h
  721. Return: CF clear if successful
  722.     CF set on error
  723.         AX = error code (see AX=0101h)
  724. Desc:    restart PRINT's activities once an application finishes examining the
  725.       print queue
  726. SeeAlso: AX=0104h
  727. --------c-2F0106-----------------------------
  728. INT 2F - DOS 3.3+ PRINT - GET PRINTER DEVICE
  729.     AX = 0106h
  730. Return: CF set if files in print queue
  731.         AX = error code 0008h (queue full)
  732.         DS:SI -> device driver header
  733.     CF clear if print queue empty
  734.         AX = 0000h
  735. Desc:    determine which device, if any, PRINT is currently using for output
  736. Notes:    undocumented prior to the release of MS-DOS 5.0
  737.     this function can be used to allow a program to avoid printing to the
  738.       printer on which PRINT is currently performing output
  739. SeeAlso: AX=0104h
  740. --------c-2F0107-----------------------------
  741. INT 2F U - PrintCache v3.1 PRINT.COM - SET TRAILING FORM FEEDS
  742.     AX = 0107h
  743.     CL bit 0: output form feed between print jobs
  744. Return: AL destroyed
  745. SeeAlso: AX=0100h/SI=20D6h,AX=0101h/SI=20D6h
  746. --------N-2F0200-----------------------------
  747. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALLATION CHECK
  748.     AX = 0200h
  749. Return: AL = FFh if installed
  750. Desc:    determine whether the PC LAN Program redirector is installed
  751. SeeAlso: AX=0201h,AX=0203h
  752. --------N-2F0201-----------------------------
  753. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  754.     AX = 0201h
  755. Return: nothing???
  756. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  757.     AX=0202h appears to be the opposite function
  758.     these functions are supposedly used to signal opening and closing of
  759.       printers
  760. SeeAlso: AX=0202h
  761. --------N-2F0202-----------------------------
  762. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  763.     AX = 0202h
  764.     ???
  765. Return: nothing???
  766. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  767.     these functions are supposedly used to signal opening and closing of
  768.       printers
  769. SeeAlso: AX=0201h
  770. --------N-2F0203-----------------------------
  771. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  772.     AX = 0203h
  773. Return: nothing???
  774. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  775.     AX=0204h appears to be the opposite function
  776.     these functions are supposedly used to signal opening and closing of
  777.       printers
  778. SeeAlso: AX=0200h,AX=0204h
  779. --------N-2F0204-----------------------------
  780. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  781.     AX = 0204h
  782.     ???
  783. Return: nothing???
  784. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  785.     AX=0203h appears to be the opposite function
  786.     these functions are supposedly used to signal opening and closing of
  787.       printers
  788. SeeAlso: AX=0200h,AX=0203h
  789. --------N-2F---------------------------------
  790. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  791.     AX = 02xxh
  792.     ???
  793. Return: ???
  794. --------l-2F0500-----------------------------
  795. INT 2F U - DOS 3+ CRITICAL ERROR HANDLER - INSTALLATION CHECK
  796.     AX = 0500h
  797. Return: AL = 00h not installed, OK to install
  798.          01h not installed, can't install
  799.          FFh installed
  800. Desc:    determine whether a critical error message override is installed
  801. Note:    this set of functions allows a user program to partially or completely
  802.       override the default critical error handler's message in COMMAND.COM
  803. SeeAlso: AH=05h,INT 24
  804. --------l-2F05-------------------------------
  805. INT 2F CU - DOS 3+ CRITICAL ERROR HANDLER - EXPAND ERROR INTO STRING
  806.     AH = 05h
  807. ---DOS 3.x---
  808.     AL = extended error code (not zero)
  809. ---DOS 4+ ---
  810.     AL = error type
  811.         01h DOS extended error code
  812.         02h parameter error
  813.     BX = error code
  814. Return: CF clear if successful
  815.         ES:DI -> ASCIZ error message (read-only)
  816.         AL = completion state
  817.         00h message requires completion with device name, drive, etc.
  818.         01h message is complete as returned
  819.     CF set if error code can't be converted to string
  820.         AX,DI,ES destroyed
  821.     other flags corrupted
  822. Notes:    called at start of COMMAND.COM's default critical error handler if
  823.       installed by a user program, allowing partial or complete overriding
  824.       of the default error messages
  825.     subfunction 02h is called by many DOS 4 external programs
  826.     DR-DOS's COMMAND.COM appends additional info ("0 files copied") to the
  827.       returned string
  828. SeeAlso: AX=0500h,AX=122Eh,INT 24
  829. --------U-2F0600-----------------------------
  830. INT 2F - DOS 3+ ASSIGN - INSTALLATION CHECK
  831.     AX = 0600h
  832. Return: AL = status
  833.         00h not installed
  834.         01h not installed, but not OK to install
  835.         FFh installed
  836. Notes:    ASSIGN is not a TSR in DR-DOS 5.0; it is internally replaced by SUBST
  837.       (see INT 21/AH=52h)
  838.     undocumented prior to the release of DOS 5.0
  839. SeeAlso: AX=0601h,INT 21/AH=52h
  840. --------U-2F0601-----------------------------
  841. INT 2F U - DOS 3+ ASSIGN - GET DRIVE ASSIGNMENT TABLE
  842.     AX = 0601h
  843. Return: ES = segment of ASSIGN work area and assignment table
  844. Note:    under DOS 3+, the 26 bytes starting at ES:0103h specify which drive
  845.       each of A: to Z: is mapped to.  Initially set to 01h 02h 03h....
  846. SeeAlso: AX=0600h
  847. --------D-2F0800-----------------------------
  848. INT 2F U - DRIVER.SYS support - INSTALLATION CHECK
  849.     AX = 0800h
  850. Return: AL = 00h not installed, OK to install
  851.          01h not installed, not OK to install
  852.          FFh installed
  853. Desc:    determine whether the internal support code used by DRIVER.SYS is
  854.       present
  855. Note:    supported by DR-DOS 5.0
  856. --------D-2F0801-----------------------------
  857. INT 2F U - DRIVER.SYS support - ADD NEW BLOCK DEVICE
  858.     AX = 0801h
  859.     DS:DI -> drive data table (see AX=0803h)
  860. Return: AX,BX,SI,ES destroyed
  861. Notes:    moves down internal list of drive data tables, copying and modifying
  862.       the drive description flags word for tables referencing same physical
  863.       drive
  864.     the data table is appended to the chain of tables
  865.     supported by DR-DOS 5.0
  866. SeeAlso: AX=0803h
  867. --------D-2F0802-----------------------------
  868. INT 2F U - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST
  869.     AX = 0802h
  870.     ES:BX -> device driver request header (see below)
  871. Return: request header updated as per requested operation
  872. Notes:    supported by DR-DOS 5.0
  873.     DOS 3.2 executes this function on any AL value from 02h through F7h;
  874.       DOS 4+ executes this function on AL=02h and AL=04h-F7h
  875.     the command codes and structures described below apply to all drivers
  876.       which support the appropriate commands; this call is just one of a
  877.       number of ways in which a device driver request may be invoked
  878. SeeAlso: AX=0800h,AX=0801h,AX=0803h,INT 21/AH=52h,INT 21/AH=99h,INT 21/AH=9Ah
  879.  
  880. Values for command code:
  881.  00h    INIT
  882.  01h    MEDIA CHECK (block devices)
  883.  02h    BUILD BPB (block devices)
  884.  03h    IOCTL INPUT
  885.  04h    INPUT
  886.  05h    NONDESTRUCTIVE INPUT, NO WAIT (character devices)
  887.  06h    INPUT STATUS (character devices)
  888.  07h    INPUT FLUSH (character devices)
  889.  08h    OUTPUT
  890.  09h    OUTPUT WITH VERIFY
  891.  0Ah    OUTPUT STATUS (character devices)
  892.  0Bh    OUTPUT FLUSH (character devices)
  893.  0Ch    IOCTL OUTPUT
  894.  0Dh    (DOS 3+) DEVICE OPEN
  895.  0Eh    (DOS 3+) DEVICE CLOSE
  896.  0Fh    (DOS 3+) REMOVABLE MEDIA (block devices)
  897.  10h    (DOS 3+) OUTPUT UNTIL BUSY (character devices)
  898.  11h    (European MS-DOS 4.0) STOP OUTPUT (console screen drivers only)
  899.  12h    (European MS-DOS 4.0) RESTART OUTPUT (console screen drivers only)
  900.  13h    (DOS 3.2+) GENERIC IOCTL
  901.  14h    unused
  902.  15h    (European MS-DOS 4.0) RESET UNCERTAIN MEDIA FLAG
  903.  16h    unused
  904.  17h    (DOS 3.2+) GET LOGICAL DEVICE
  905.  18h    (DOS 3.2+) SET LOGICAL DEVICE
  906.  19h    (DOS 5+) CHECK GENERIC IOCTL SUPPORT
  907.  80h    (CD-ROM) READ LONG
  908.  81h    (CD-ROM) reserved
  909.  82h    (CD-ROM) READ LONG PREFETCH
  910.  83h    (CD-ROM) SEEK
  911.  84h    (CD-ROM) PLAY AUDIO
  912.  85h    (CD-ROM) STOP AUDIO
  913.  86h    (CD-ROM) WRITE LONG
  914.  87h    (CD-ROM) WRITE LONG VERIFY
  915.  88h    (CD-ROM) RESUME AUDIO
  916.  
  917. Bitfields for device request status:
  918. Bit(s)    Description
  919.  15    error
  920.  14-11    reserved
  921.  10    ??? set by DOS kernel on entry to some driver calls
  922.  9    busy
  923.  8    done (may be clear on return under European MS-DOS 4.0)
  924.  7-0    error code if bit 15 set (see below)
  925.  
  926. Format of device driver request header:
  927. Offset    Size    Description
  928.  00h    BYTE    length of request header
  929.  01h    BYTE    subunit within device driver
  930.  02h    BYTE    command code (see above)
  931.  03h    WORD    status (filled in by device driver) (see above)
  932. ---DOS---
  933.  05h  4 BYTEs    reserved (unused in DOS 2.x and 3.x)
  934.  09h    DWORD    (European MS-DOS 4.0 only) pointer to next request header in
  935.             device's request queue
  936.         (other versions) reserved (unused in DOS 2.x and 3.x)
  937. ---STARLITE architecture---
  938.  05h    DWORD    pointer to next request header
  939.  09h  4 BYTEs    reserved
  940. ---command code 00h---
  941.  0Dh    BYTE    (return) number of units
  942.  0Eh    DWORD    (call) pointer to DOS device helper function (see below)
  943.             (European MS-DOS 4.0 only)
  944.         (call) pointer past end of memory available to driver (DOS 5+)
  945.         (return) address of first free byte following driver
  946.  12h    DWORD    (call) pointer to commandline arguments
  947.         (return) pointer to BPB array (block drivers) or
  948.                 0000h:0000h (character drivers)
  949.  16h    BYTE    (DOS 3+) drive number for first unit of block driver (0=A)
  950.    ---European MS-DOS 4.0---
  951.  17h    DWORD    pointer to function to save registers on stack
  952.    ---DOS 5+ ---
  953.  17h    WORD    (return) error-message flag
  954.             0001h MS-DOS should display error msg on init failure
  955. ---command code 01h---
  956.  0Dh    BYTE    media descriptor
  957.  0Eh    BYTE    returned status
  958.         00h don't know
  959.         01h media has not changed
  960.         FFh media has been changed
  961.  0Fh    DWORD    (return, DOS 3+) pointer to previous volume ID if OPEN/CLOSE/RM
  962.           bit in device header is set and disk changed
  963. ---command code 02h---
  964.  0Dh    BYTE    media descriptor
  965.  0Eh    DWORD    transfer address
  966.         -> scratch sector if NON-IBM FORMAT bit in device header set
  967.         -> first FAT sector otherwise
  968.  12h    DWORD    pointer to BPB (set by driver) (see INT 21/AH=53h)
  969. ---command codes 03h,0Ch--- (see also INT 21/AX=4402h,INT 21/AX=4403h)
  970.  0Dh    BYTE    media descriptor (block devices only)
  971.  0Eh    DWORD    transfer address
  972.  12h    WORD    (call) number of bytes to read/write
  973.         (return) actual number of bytes read or written
  974. ---command codes 04h,08h,09h---
  975.  0Dh    BYTE    media descriptor (block devices only)
  976.  0Eh    DWORD    transfer address
  977.  12h    WORD    byte count (character devices) or sector count (block devices)
  978.  14h    WORD    starting sector number (block devices only)
  979.  16h    DWORD    (DOS 3+) pointer to volume ID if error 0Fh returned
  980.  1Ah    DWORD    (DOS 4+) 32-bit starting sector number (block devices with
  981.         device attribute word bit 1 set only) if starting sector number
  982.         above is FFFFh (see INT 21/AH=52h)
  983. ---command code 05h---
  984.  0Dh    BYTE    byte read from device if BUSY bit clear on return
  985. ---command codes 06h,07h,0Ah,0Bh,0Dh,0Eh,0Fh---
  986.  no further fields
  987. ---command code 10h---
  988.  0Dh    BYTE    unused
  989.  0Eh    DWORD    transfer address
  990.  12h    WORD    (call) number of bytes to write
  991.         (return) actual number of bytes written
  992. ---command codes 11h,12h---
  993.  0Dh    BYTE    reserved
  994. ---command code 15h---
  995.  no further fields
  996. ---command codes 13h,19h---
  997.  0Dh    BYTE    category code
  998.         00h unknown
  999.         01h COMn:
  1000.         03h CON
  1001.         05h LPTn:
  1002.         07h mouse (European MS-DOS 4.0)
  1003.         08h disk
  1004.         9Eh (STARLITE) Media Access Control driver
  1005.  0Eh    BYTE    function code
  1006.         00h (STARLITE) MAC Bind request
  1007.  0Fh    WORD    copy of DS at time of IOCTL call (apparently unused in DOS 3.3)
  1008.         SI contents (European MS-DOS 4.0)
  1009.  11h    WORD    offset of device driver header
  1010.         DI contents (European MS-DOS 4.0)
  1011.  13h    DWORD    pointer to parameter block from INT 21/AX=440Ch or AX=440Dh
  1012. ---command codes 80h,82h---
  1013.  0Dh    BYTE    addressing mode
  1014.         00h HSG (default)
  1015.         01h Phillips/Sony Red Book
  1016.  0Eh    DWORD    transfer address (ignored for command 82h)
  1017.  12h    WORD    number of sectors to read
  1018.         (if 0 for command 82h, request is an advisory seek)
  1019.  14h    DWORD    starting sector number
  1020.         logical sector number in HSG mode
  1021.         frame/second/minute/unused in Red Book mode
  1022.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  1023.  18h    BYTE    data read mode
  1024.         00h cooked (2048 bytes per frame)
  1025.         01h raw (2352 bytes per frame, including EDC/ECC)
  1026.  19h    BYTE    interleave size (number of sectors stored consecutively)
  1027.  1Ah    BYTE    interleave skip factor
  1028.         (number of sectors between consecutive portions)
  1029. ---command code 83h---
  1030.  0Dh    BYTE    addressing mode (see above)
  1031.  0Eh    DWORD    transfer address (ignored)
  1032.  12h    WORD    number of sectors to read (ignored)
  1033.  14h    DWORD    starting sector number (see also above)
  1034. ---command code 84h---
  1035.  0Dh    BYTE    addressing mode (see above)
  1036.  0Eh    DWORD    starting sector number (see also above)
  1037.  12h    DWORD    number of sectors to play
  1038. ---command codes 85h,88h---
  1039.  no further fields
  1040. ---command codes 86h,87h---
  1041.  0Dh    BYTE    addressing mode (see above)
  1042.  0Eh    DWORD    transfer address (ignored in write mode 0)
  1043.  12h    WORD    number of sectors to write
  1044.  14h    DWORD    starting sector number (see also above)
  1045.  18h    BYTE    write mode
  1046.         00h mode 0 (write all zeros)
  1047.         01h mode 1 (default) (2048 bytes per sector)
  1048.         02h mode 2 form 1 (2048 bytes per sector)
  1049.         03h mode 2 form 2 (2336 bytes per sector)
  1050.  19h    BYTE    interleave size (number of sectors stored consecutively)
  1051.  1Ah    BYTE    interleave skip factor
  1052.         (number of sectors between consecutive portions)
  1053.  
  1054. Values for error code:
  1055.  00h    write-protect violation
  1056.  01h    unknown unit
  1057.  02h    drive not ready
  1058.  03h    unknown command
  1059.  04h    CRC error
  1060.  05h    bad drive request structure length
  1061.  06h    seek error
  1062.  07h    unknown media
  1063.  08h    sector not found
  1064.  09h    printer out of paper
  1065.  0Ah    write fault
  1066.  0Bh    read fault
  1067.  0Ch    general failure
  1068.  0Dh    reserved
  1069.  0Eh    (CD-ROM) media unavailable
  1070.  0Fh    invalid disk change
  1071.  
  1072. Call European MS-DOS 4.0 device helper function with:
  1073.     DL = function
  1074.         00h "SchedClock" called on each timer tick
  1075.         AL = tick interval in milliseconds
  1076.         01h "DevDone" device I/O complete
  1077.         ES:BX -> request header
  1078.         Note:    must update status word first; may be called from
  1079.               an interrupt handler
  1080.         02h "PullRequest" pull next request from queue
  1081.         DS:SI -> DWORD pointer to start of device's request queue
  1082.         Return: ZF clear if pending request
  1083.                 ES:BX -> request header
  1084.             ZF set if no more requests
  1085.         03h "PullParticular" remove specific request from queue
  1086.         DS:SI -> DWORD pointer to start of device's request queue
  1087.         ES:BX -> request header
  1088.         Return: ZF set if request header not found
  1089.         04h "PushRequest" push the request onto the queue
  1090.         DS:SI -> DWORD pointer to start of device's request queue
  1091.         ES:BX -> request header
  1092.         interrupts disabled
  1093.         05h "ConsInputFilter" keyboard input check
  1094.         AX = character (high byte 00h if PC ASCII character)
  1095.         Return: ZF set if character should be discarded
  1096.             ZF clear if character should be handled normally
  1097.         Note:    called by keyboard interrupt handler so DOS can scan
  1098.               for special input characters
  1099.         06h "SortRequest" push request in sorted order by starting sector
  1100.         DS:SI -> DWORD pointer to start of device's request queue
  1101.         ES:BX -> request header
  1102.         interrupts disabled
  1103.         07h "SigEvent" send signal on keyboard event
  1104.         AH = event identifier
  1105.         Return: AL,FLAGS destroyed
  1106.         09h "ProcBlock" block on event
  1107.         AX:BX = event identifier (typically a pointer)
  1108.         CX = timeout in ms or 0000h for never
  1109.         DH = interruptable flag (nonzero if pause may be interrupted)
  1110.         interrupts disabled
  1111.         Return: after corresponding ProcRun call
  1112.             CF clear if event wakeup, set if unusual wakeup
  1113.             ZF set if timeout wakeup, clear if interrupted
  1114.             AL = wakeup code, nonzero if unusual wakeup
  1115.             interrupts enabled
  1116.             BX,CX,DX destroyed
  1117.         Note:    block process and schedules another to run
  1118.         0Ah "ProcRun" unblock process
  1119.         AX:BX = event identifier (typically a pointer)
  1120.         Return: AX = number of processes awakened
  1121.             ZF set if no processes awakened
  1122.             BX,CX,DX destroyed
  1123.         0Bh "QueueInit" initialize/clear character queue
  1124.         DS:BX -> character queue structure (see below)
  1125.         Note:    the queue size field must be set before calling
  1126.         0Dh "QueueWrite" put a character in the queue
  1127.         DS:BX -> character queue (see below)
  1128.         AL = character to append to end of queue
  1129.         Return: ZF set if queue is full
  1130.             ZF clear if character stored
  1131.         0Eh "QueueRead" get a character from the queue
  1132.         DS:BX -> character queue (see below)
  1133.         Return: ZF set if queue is empty
  1134.             ZF clear if characters in queue
  1135.                 AL = first character in queue
  1136.         10h "GetDOSVar" return pointer to DOS variable
  1137.         AL = index of variable
  1138.             03h current process ID
  1139.         BX = index into variable if AL specifies an array
  1140.         CX = expected length of variable
  1141.         Return: CF clear if successful
  1142.                 DX:AX -> variable
  1143.             CF set on error
  1144.                 AX,DX destroyed
  1145.             BX,CX destroyed
  1146.         Note:    the variables may not be modified
  1147.         14h "Yield" yield CPU if higher-priority task ready to run
  1148.         Return: FLAGS destroyed
  1149.         1Bh "CritEnter" begin system critical section
  1150.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  1151.         Return: AX,BX,CX,DX destroyed
  1152.         1Ch "CritLeave" end system critical section
  1153.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  1154.         Return: AX,BX,CX,DX destroyed
  1155.         Note:    must be called in the context of the process which
  1156.               called CritEnter on the semaphore
  1157. Note:    the DWORD pointing at the request queue must be allocated by the driver
  1158.       and initialized to 0000h:0000h.  It always points at the next request
  1159.       to be executed
  1160.  
  1161. Format of character queue:
  1162. Offset    Size    Description
  1163.  00h    WORD    size of queue in bytes
  1164.  02h    WORD    index of next character out
  1165.  04h    WORD    count of characters in the queue
  1166.  06h  N BYTEs    queue buffer
  1167. --------D-2F0803-----------------------------
  1168. INT 2F U - DOS 4+ DRIVER.SYS support - GET DRIVE DATA TABLE LIST
  1169.     AX = 0803h
  1170. Return: DS:DI -> first drive data table in list
  1171. Note:    not available under DR-DOS 5.0
  1172. SeeAlso: AX=0801h
  1173.  
  1174. Format of DOS 3.30 drive data table:
  1175. Offset    Size    Description
  1176.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  1177.  04h    BYTE    physical unit number (for INT 13)
  1178.  05h    BYTE    logical drive number (0=A:)
  1179.  06h 19 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  1180.         Offset    Size    Description
  1181.          00h    WORD    bytes per sector
  1182.          02h    BYTE    sectors per cluster, FFh if unknown
  1183.          03h    WORD    number of reserved sectors
  1184.          05h    BYTE    number of FATs
  1185.          06h    WORD    number of root dir entries
  1186.          08h    WORD    total sectors
  1187.          0Ah    BYTE    media descriptor, 00h if unknown
  1188.          0Bh    WORD    sectors per FAT
  1189.          0Dh    WORD    sectors per track
  1190.          0Fh    WORD    number of heads
  1191.          11h    WORD    number of hidden sectors
  1192.  19h    BYTE    flags
  1193.         bit 6: 16-bit FAT instead of 12-bit FAT
  1194.  1Ah    WORD    number of DEVICE OPEN calls without corresponding DEVICE CLOSE
  1195.  1Ch 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  1196.         fixed media)
  1197.  27h    BYTE    terminating null for volume label???
  1198.  28h    BYTE    device type (see INT 21/AX=440Dh)
  1199.  29h    WORD    bit flags describing drive (see below)
  1200.  2Bh    WORD    number of cylinders
  1201.  2Dh 19 BYTEs    BIOS Parameter Block for highest capacity supported
  1202.  40h  3 BYTEs    ???
  1203.  43h  9 BYTEs    filesystem type???, default = "NO NAME    "
  1204.         (apparently only MS-DOS 3.30 fixed media, nulls for removable
  1205.         media and PC-DOS 3.30)
  1206.  4Ch    BYTE    least-significant byte of last-accessed cylinder number
  1207. ---removable media---
  1208.  4Dh    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  1209. ---fixed media---
  1210.  4Dh    WORD    partition (FFFFh = primary, 0001h = extended)
  1211.  4Fh    WORD    absolute cylinder number of partition's start on physical
  1212.         drive (always FFFFh if primary partition)
  1213.  
  1214. Format of COMPAQ DOS 3.31 drive data table:
  1215. Offset    Size    Description
  1216.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  1217.  04h    BYTE    physical unit number (for INT 13)
  1218.  05h    BYTE    logical drive number (0=A:)
  1219.  06h 25 BYTEs    BIOS Parameter Block (see DOS 4.0-6.0 drive data table below)
  1220.  1Fh  6 BYTEs    reserved fields from BPB above???
  1221.  25h    BYTE    flags
  1222.         bit 6: 16-bit FAT instead of 12-bit FAT
  1223.         bit 5: large volume???
  1224.  26h    WORD    device-open count???
  1225.  28h 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  1226.         fixed media)
  1227.  33h    BYTE    terminating null for volume label
  1228.  34h    BYTE    device type (see INT 21/AX=440Dh)
  1229.  35h    WORD    bit flags describing drive (see below)
  1230.  37h    WORD    number of cylinders
  1231.  39h 25 BYTEs    BIOS parameter block for highest capacity drive supports
  1232.  52h  6 BYTEs    ??? apparently always zeros
  1233.  58h    BYTE    least-significant byte of last-accessed cylinder number
  1234. ---removable media---
  1235.  59h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  1236. ---fixed media---
  1237.  59h    WORD    partition (FFFFh = primary, 0001h = extended)
  1238.  5Bh    WORD    absolute cylinder number of partition's start on physical
  1239.         drive (always FFFFh if primary partition)
  1240.  
  1241. Format of DOS 4.0-6.0 drive data table:
  1242. Offset    Size    Description
  1243.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  1244.  04h    BYTE    physical unit number (for INT 13)
  1245.  05h    BYTE    logical drive number (0=A:)
  1246.  06h 25 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  1247.         Offset    Size    Description
  1248.          00h    WORD    bytes per sector
  1249.          02h    BYTE    sectors per cluster, FFh if unknown
  1250.          03h    WORD    number of reserved sectors
  1251.          05h    BYTE    number of FATs
  1252.          06h    WORD    number of root dir entries
  1253.          08h    WORD    total sectors (see offset 15h if zero)
  1254.          0Ah    BYTE    media descriptor, 00h if unknown
  1255.          0Bh    WORD    sectors per FAT
  1256.          0Dh    WORD    sectors per track
  1257.          0Fh    WORD    number of heads
  1258.          11h    DWORD    number of hidden sectors
  1259.          15h    DWORD    total sectors if WORD at 08h is zero
  1260.  1Fh    BYTE    flags
  1261.         bit 6: 16-bit FAT instead of 12-bit
  1262.         bit 7: unsupportable disk (all accesses will return Not Ready)
  1263.  20h    WORD    device-open count
  1264.  22h    BYTE    device type (see INT 21/AX=440Dh)
  1265.  23h    WORD    bit flags describing drive (see below)
  1266.  25h    WORD    number of cylinders (for partition only, if hard disk)
  1267.  27h 25 BYTEs    BIOS Parameter Block for default (highest) capacity supported
  1268.  40h  6 BYTEs    reserved (part of BPB above)
  1269.  46h    BYTE    last track accessed
  1270. ---removable media---
  1271.  47h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  1272. ---fixed media---
  1273.  47h    WORD    partition (FFFFh = primary, 0001h = extended)
  1274.         always 0001h for DOS 5+
  1275.  49h    WORD    absolute cylinder number of partition's start on physical drive
  1276.         (FFFFh if primary partition in DOS 4.x)
  1277. ------
  1278.  4Bh 11 BYTEs    volume label or "NO NAME    " if none (apparently taken from
  1279.         extended boot record rather than root directory)
  1280.  56h    BYTE    terminating null for volume label
  1281.  57h    DWORD    serial number
  1282.  5Bh  8 BYTEs    filesystem type ("FAT12      " or "FAT16    ")
  1283.  63h    BYTE    terminating null for filesystem type
  1284.  
  1285. Bitfields for flags describing drive:
  1286. Bit(s)    Description
  1287.  0    fixed media
  1288.  1    door lock ("changeline") supported
  1289.  2    current BPB locked
  1290.  3    all sectors in a track are the same size
  1291.  4    physical drive has multiple logical units
  1292.  5    current logical drive for shared physical drive
  1293.  6    disk change detected
  1294.  7    set DASD before formatting
  1295.  8    disk reformatted
  1296.  9    unformatted (fixed media only, disables reads and writes)
  1297. --------f-2F1000-----------------------------
  1298. INT 2F - SHARE - INSTALLATION CHECK
  1299.     AX = 1000h
  1300. Return: AL = 00h  not installed, OK to install
  1301.          01h  not installed, not OK to install
  1302.          FFh  installed
  1303. BUGS:    values of AL other than 00h put DOS 3.x SHARE into an infinite loop
  1304.       (08E9: OR  AL,AL
  1305.        08EB: JNZ 08EB) <- the buggy instruction (DOS 3.3)
  1306.     values of AL other than described here put PC-DOS 4.00 into the same
  1307.       loop (the buggy instructions are the same)
  1308. Notes:    supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  1309.     if DOS 4.01 SHARE was automatically loaded, file sharing is in an
  1310.       inactive state (due to the undocumented /NC flag used by the autoload
  1311.       code) until this call is made
  1312.     DOS 5+ chains to the previous handler if AL <> 00h on entry
  1313.     Windows Enhanced mode hooks this call and reports that SHARE is
  1314.       installed even when it is not
  1315. SeeAlso: AX=1080h,INT 21/AH=52h
  1316. --------d-2F1001-----------------------------
  1317. INT 2F U - DR-DOS 6.0 SHARE internal - SET ???
  1318.     AX = 1001h
  1319.     DX:BX -> ???function
  1320. Notes:    this function is also supported by SuperStor, a disk-compression
  1321.       program by Addstor which is bundled with DR-DOS 6.0, and the
  1322.       Novell DOS 7 DELWATCH.EXE
  1323.     the default handler for the pointer set by this call under DELWATCH
  1324.       simply returns with CF set
  1325. SeeAlso: AX=1000h,X=F800h
  1326. --------f-2F1040-----------------------------
  1327. INT 2F U - DOS 4 only SHARE internal - ???
  1328.     AX = 1040h
  1329.     ???
  1330. Return: AL = FFh???
  1331. SeeAlso: AX=1000h
  1332. --------f-2F1080-----------------------------
  1333. INT 2F U - DOS 4 only SHARE internal - TURN ON FILE SHARING CHECKS
  1334.     AX = 1080h
  1335. Return: AL = status
  1336.         F0h successful
  1337.         FFh checking was already on
  1338. Note:    DOS 4.x SHARE has dual functions: FCB support for large (>32M) media
  1339.       and file sharing checks.  The undocumented commandline flag /NC can
  1340.       be used to disable the sharing code.
  1341. SeeAlso: AX=1000h,AX=1081h
  1342. --------f-2F1081-----------------------------
  1343. INT 2F U - DOS 4 only SHARE internal - TURN OFF FILE SHARING CHECKS
  1344.     AX = 1081h
  1345. Return: AL = status
  1346.         F0h successful
  1347.         FFh checking was already off
  1348. Note:    (see AX=1080h)
  1349. SeeAlso: AX=1000h,AX=1080h
  1350. ----------2F10FE-----------------------------
  1351. INT 2F U - Novell DOS 7 DELWATCH.EXE - INSTALLATION CHECK
  1352.     AX = 10FEh
  1353. Return: AX = 20FFh if installed and active
  1354.         DX:BX -> private entry point
  1355.  
  1356. Call private entry point with:
  1357.     AH = function ??? (00h-0Eh,0Fh, or >0Fh)
  1358. --------O-2F10FF-----------------------------
  1359. INT 2F U - Multiplex - DR-DOS 5.0 - ???
  1360.     AX = 10FFh
  1361.     ES:BX -> ???
  1362. Note:    sets pointer in kernel
  1363. --------N-2F1100-----------------------------
  1364. INT 2F C - NETWORK REDIRECTOR - INSTALLATION CHECK
  1365.     AX = 1100h
  1366. Return: AL = status
  1367.         00h not installed, OK to install
  1368.         01h not installed, not OK to install
  1369.         FFh installed
  1370.         AH = product identifier (ad hoc by various manufacturers)
  1371.             00h if PC Tools v8 DRIVEMAP
  1372.             42h ('B') for Beame&Whiteside BWNFS v3.0a
  1373.             6Eh ('n') for NetWare Lite v1.1 CLIENT
  1374. Notes:    this function is called by the DOS 3.1+ kernel
  1375.     in DOS 4.x only, the 11xx calls are all in IFSFUNC.EXE, not in the
  1376.       PC LAN Program redirector; DOS 5+ moves the calls back into the
  1377.       redirector
  1378.     the PC Network 1.00 redirector (renamed to PC LAN Program in 1.1-1.3)
  1379.       only supports AL=00h-27h
  1380. --------d-2F1100SFDADA-----------------------
  1381. INT 2F - MSCDEX (MS CD-ROM Extensions) - INSTALLATION CHECK
  1382.     AX = 1100h subfn DADAh
  1383.     STACK: WORD DADAh
  1384. Return: AL = status
  1385.         00h not installed, OK to install
  1386.         STACK unchanged
  1387.         01h not installed, not OK to install
  1388.         STACK unchanged
  1389.         FFh installed
  1390.         STACK: WORD    ADADh if MSCDEX installed
  1391.                 DADBh if Lotus CD/Networker installed
  1392. Note:    although MSCDEX sets the stack word to ADADh on return, any value other
  1393.       than DADAh is considered to mean that MSCDEX is already installed;
  1394.       Lotus CD/Networker v4+ uses this feature to fool MSCDEX into
  1395.       thinking it is already installed when it is in fact CD/Networker
  1396.       that is installed
  1397. Index:    installation check;Lotus CD/Networker
  1398. Index:    Lotus CD/Networker;installation check
  1399. --------N-2F1101-----------------------------
  1400. INT 2F CU - NETWORK REDIRECTOR - REMOVE REMOTE DIRECTORY
  1401.     AX = 1101h
  1402.     SS = DOS DS
  1403.     SDA first filename pointer -> fully-qualified directory name
  1404.     SDA CDS pointer -> current directory structure for drive with dir
  1405. Return: CF set on error
  1406.         AX = DOS error code (see INT 21/AH=59h)
  1407.     CF clear if successful
  1408. Note:    this function is called by the DOS 3.1+ kernel
  1409. SeeAlso: AX=1103h,AX=1105h,INT 21/AH=3Ah,INT 21/AH=60h
  1410. --------N-2F1102-----------------------------
  1411. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - REMOVE REMOTE DIRECTORY
  1412.     AX = 1102h
  1413.     SS = DOS DS
  1414.     SDA first filename pointer -> fully-qualified directory name
  1415.     SDA CDS pointer -> current directory structure for drive with dir
  1416. Return: CF set on error
  1417.         AX = DOS error code (see INT 21/AH=59h)
  1418.     CF clear if successful
  1419. Note:    appears to be identical to AX=1101h; MS internal documentation calls
  1420.       this function "SEQ_RMDIR"
  1421. SeeAlso: AX=1101h
  1422. --------N-2F1103-----------------------------
  1423. INT 2F CU - NETWORK REDIRECTOR - MAKE REMOTE DIRECTORY
  1424.     AX = 1103h
  1425.     SS = DOS DS
  1426.     SDA first filename pointer -> fully-qualified directory name
  1427.     SDA CDS pointer -> current directory structure for drive with dir
  1428. Return: CF set on error
  1429.         AX = DOS error code (see INT 21/AH=59h)
  1430.     CF clear if successful
  1431. Note:    this function is called by the DOS 3.1+ kernel
  1432. SeeAlso: AX=1101h,AX=1105h,INT 21/AH=39h,INT 21/AH=60h
  1433. --------N-2F1104-----------------------------
  1434. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - MAKE REMOTE DIRECTORY
  1435.     AX = 1104h
  1436.     SS = DOS DS
  1437.     SDA first filename pointer -> fully-qualified directory name
  1438.     SDA CDS pointer -> current directory structure for drive with dir
  1439. Return: CF set on error
  1440.         AX = DOS error code (see INT 21/AH=59h)
  1441.     CF clear if successful
  1442. Note:    appears to be identical to AX=1103h
  1443. SeeAlso: AX=1103h
  1444. --------N-2F1105-----------------------------
  1445. INT 2F CU - NETWORK REDIRECTOR - CHDIR
  1446.     AX = 1105h
  1447.     SS = DOS DS
  1448.     SDA first filename pointer -> fully-qualified directory name
  1449.     SDA CDS pointer -> current directory structure for drive with dir
  1450. Return: CF set on error
  1451.         AX = DOS error code (see INT 21/AH=59h)
  1452.     CF clear if successful
  1453.         CDS updated with new path
  1454. Notes:    this function is called by the DOS 3.1+ kernel
  1455.     directory string in CDS should not have a terminating backslash unless
  1456.       the current directory is the root
  1457. SeeAlso: AX=1101h,AX=1103h,INT 21/AH=3Bh,INT 21/AH=60h
  1458. --------N-2F1106-----------------------------
  1459. INT 2F CU - NETWORK REDIRECTOR - CLOSE REMOTE FILE
  1460.     AX = 1106h
  1461.     BX = device info word from SFT
  1462.     ES:DI -> SFT
  1463.         SFT DPB field -> DPB of drive containing file
  1464. Return: CF set on error
  1465.         AX = DOS error code (see INT 21/AH=59h)
  1466.     CF clear if successful
  1467.         SFT updated (redirector must decrement open count, which may be
  1468.             done with INT 2F/AX=1208h)
  1469. Note:    this function is called by the DOS 3.1+ kernel
  1470. SeeAlso: AX=1116h,AX=1201h,AX=1208h,AX=1227h,INT 21/AH=3Eh
  1471. --------N-2F1107-----------------------------
  1472. INT 2F CU - NETWORK REDIRECTOR - COMMIT REMOTE FILE
  1473.     AX = 1107h
  1474.     ES:DI -> SFT
  1475.         SFT DPB field -> DPB of drive containing file
  1476. Return: CF set on error
  1477.         AX = DOS error code (see INT 21/AH=59h)
  1478.     CF clear if successful
  1479.         all buffers for file flushed
  1480.         directory entry updated
  1481. Note:    this function is called by the DOS 3.1+ kernel
  1482. SeeAlso: INT 21/AH=68h,INT 21/AX=5D01h
  1483. --------N-2F1108-----------------------------
  1484. INT 2F CU - NETWORK REDIRECTOR - READ FROM REMOTE FILE
  1485.     AX = 1108h
  1486.     ES:DI -> SFT
  1487.         SFT DPB field -> DPB of drive containing file
  1488.     CX = number of bytes
  1489.     SS = DOS DS
  1490.     SDA DTA field -> user buffer
  1491. Return: CF set on error
  1492.         AX = DOS error code (see INT 21/AH=59h)
  1493.     CF clear if successful
  1494.         CX = number of bytes read (0000h = end of file)
  1495.         SFT updated
  1496. Note:    this function is called by the DOS 3.1+ kernel
  1497. SeeAlso: AX=1109h,AX=1229h,INT 21/AH=3Fh,INT 21/AX=5D06h
  1498. --------N-2F1109-----------------------------
  1499. INT 2F CU - NETWORK REDIRECTOR - WRITE TO REMOTE FILE
  1500.     AX = 1109h
  1501.     ES:DI -> SFT
  1502.         SFT DPB field -> DPB of drive containing file
  1503.     CX = number of bytes
  1504.     SS = DOS DS
  1505.     SDA DTA field -> user buffer
  1506. Return: CF set on error
  1507.         AX = DOS error code (see INT 21/AH=59h)
  1508.     CF clear if successful
  1509.         CX = number of bytes written
  1510.         SFT updated
  1511. Notes:    this function is called by the DOS 3.1+ kernel
  1512.     PrintCache v3.1 PCACHE.EXE intercepts this function for SFTs where
  1513.       the Device Driver Header field points at PCACHE, but does not
  1514.       intercept any other network redirector functions
  1515. SeeAlso: AX=1107h,AX=1108h,INT 21/AH=40h,INT 21/AX=5D06h
  1516. --------N-2F110A-----------------------------
  1517. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - LOCK REGION OF FILE
  1518.     AX = 110Ah
  1519.     BX = file handle
  1520.     CX:DX = starting offset
  1521.     SI = high word of size
  1522.     STACK: WORD low word of size
  1523.     ES:DI -> SFT
  1524.         SFT DPB field -> DPB of drive containing file
  1525.     SS = DOS DS
  1526. Return: CF set on error
  1527.        AL = DOS error code (see INT 21/AH=59h)
  1528.     STACK unchanged
  1529. Notes:    this function is called by the DOS 3.10-3.31 kernel
  1530.     the redirector is expected to resolve lock conflicts
  1531. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  1532. --------N-2F110A-----------------------------
  1533. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - LOCK/UNLOCK REGION OF FILE
  1534.     AX = 110Ah
  1535.     BL = function
  1536.         00h lock
  1537.         01h unlock
  1538.     CX = number of lock/unlock parameters (0001h for DOS 4.0-6.1)
  1539.     DS:DX -> parameter block (see below)
  1540.     ES:DI -> SFT
  1541.         SFT DPB field -> DPB of drive containing file
  1542.     SS = DOS DS
  1543. Return: CF set on error
  1544.        AL = DOS error code (see INT 21/AH=59h)
  1545. Notes:    this function is called by the DOS 4.0+ kernel
  1546.     the redirector is expected to resolve lock conflicts
  1547. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  1548.  
  1549. Format of parameter block entry [array, but currently limited to single entry]:
  1550. Offset    Size    Description
  1551.  00h    DWORD    start offset
  1552.  04h    DWORD    size of region
  1553. --------N-2F110B-----------------------------
  1554. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - UNLOCK REGION OF FILE
  1555.     AX = 110Bh
  1556.     BX = file handle
  1557.     CX:DX = starting offset
  1558.     SI = high word of size
  1559.     STACK: WORD low word of size
  1560.     ES:DI -> SFT for file
  1561.         SFT DPB field -> DPB of drive containing file
  1562. Return: CF set on error
  1563.        AL = DOS error code (see INT 21/AH=59h)
  1564.     STACK unchanged
  1565. Note:    this function is called by the DOS 3.1-3.31 kernel; DOS 4.0+ calls AX=110Ah instead
  1566. SeeAlso: AX=110Ah,INT 21/AH=5Ch
  1567. --------N-2F110C-----------------------------
  1568. INT 2F CU - NETWORK REDIRECTOR - GET DISK INFORMATION
  1569.     AX = 110Ch
  1570.     ES:DI -> current directory structure for desired drive
  1571. Return: AL = sectors per cluster
  1572.     AH = media ID byte
  1573.     BX = total clusters
  1574.     CX = bytes per sector
  1575.     DX = number of available clusters
  1576. Note:    this function is called by the DOS 3.1+ kernel
  1577. SeeAlso: INT 21/AH=36h
  1578. --------N-2F110D-----------------------------
  1579. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - SET REMOTE FILE'S ATTRIBUTES
  1580.     AX = 110Dh
  1581.     SDA first filename pointer -> name of file
  1582.     ???
  1583. Return: ???
  1584. Note:    similar to AX=110Eh
  1585. SeeAlso: AX=110Eh
  1586. --------N-2F110E-----------------------------
  1587. INT 2F CU - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES
  1588.     AX = 110Eh
  1589.     SS = DOS DS
  1590.     SDA first filename pointer -> fully-qualified name of file
  1591.     SDA CDS pointer -> current directory structure for drive with file
  1592.     STACK: WORD new file attributes
  1593. Return: CF set on error
  1594.         AX = DOS error code (see INT 21/AH=59h)
  1595.     CF clear if successful
  1596.     STACK unchanged
  1597. Note:    this function is called by the DOS 3.1+ kernel
  1598. SeeAlso: AX=110Dh,AX=110Fh,INT 21/AX=4301h,INT 21/AH=60h
  1599. --------N-2F110F-----------------------------
  1600. INT 2F CU - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  1601.     AX = 110Fh
  1602.     SS = DOS DS
  1603.     SDA first filename pointer -> fully-qualified name of file
  1604.     SDA CDS pointer -> current directory structure for drive with file
  1605. Return: CF set on error
  1606.         AX = DOS error code (see INT 21/AH=59h)
  1607.     CF clear if successful
  1608.         AX = file attributes
  1609.         BX:DI = file size
  1610. Note:    this function is called by the DOS 3.1+ kernel
  1611. SeeAlso: AX=110Eh,INT 21/AX=4300h,INT 21/AH=60h
  1612. --------N-2F1110-----------------------------
  1613. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  1614.     AX = 1110h
  1615.     SDA first filename pointer -> name of file
  1616.     ???
  1617. Return: ???
  1618. Note:    appears to be similar to AX=110Fh
  1619. SeeAlso: AX=110Eh
  1620. --------N-2F1111-----------------------------
  1621. INT 2F CU - NETWORK REDIRECTOR - RENAME REMOTE FILE
  1622.     AX = 1111h
  1623.     SS = DS = DOS DS
  1624.     SDA first filename pointer = offset of fully-qualified old name
  1625.     SDA second filename pointer = offset of fully-qualified new name
  1626.     SDA CDS pointer -> current directory structure for drive with file
  1627. Return: CF set on error
  1628.         AX = DOS error code (see INT 21/AH=59h)
  1629.     CF clear if successful
  1630. Note:    this function is called by the DOS 3.1+ kernel
  1631. SeeAlso: AX=1112h,INT 21/AH=56h,INT 21/AH=60h
  1632. --------N-2F1112-----------------------------
  1633. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - RENAME REMOTE FILE
  1634.     AX = 1112h
  1635.     SS = DS = DOS DS
  1636.     SDA first filename pointer -> name of file
  1637.     ???
  1638. Return: ???
  1639. Note:    similar to AX=1111h
  1640. SeeAlso: AX=1111h
  1641. --------N-2F1113-----------------------------
  1642. INT 2F CU - NETWORK REDIRECTOR - DELETE REMOTE FILE
  1643.     AX = 1113h
  1644.     SS = DS = DOS DS
  1645.     SDA first filename pointer -> fully-qualified filename in DOS DS
  1646.     SDA CDS pointer -> current directory structure for drive with file
  1647. Return: CF set on error
  1648.         AX = DOS error code (see INT 21/AH=59h)
  1649.     CF clear if successful
  1650. Notes:    this function is called by the DOS 3.1+ kernel
  1651.     the filespec may contain wildcards
  1652. SeeAlso: AX=1114h,INT 21/AH=41h,INT 21/AH=60h
  1653. --------N-2F1114-----------------------------
  1654. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - DELETE REMOTE FILE
  1655.     AX = 1114h
  1656.     SDA first filename pointer -> name of file
  1657.     ???
  1658. Return: ???
  1659. Note:    similar to AX=1113h
  1660. SeeAlso: AX=1113h
  1661. --------N-2F1115-----------------------------
  1662. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - OPEN REMOTE FILE
  1663.     AX = 1115h
  1664.     SS = DOS DS
  1665.     ES:DI -> SFT ???
  1666.     ???
  1667. Return: ???
  1668. Note:    similar to AX=1116h
  1669. SeeAlso: AX=1116h,AX=112Eh
  1670. --------N-2F1116-----------------------------
  1671. INT 2F CU - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE
  1672.     AX = 1116h
  1673.     ES:DI -> uninitialized SFT
  1674.     SS = DOS DS
  1675.     SDA first filename pointer -> fully-qualified name of file to open
  1676.     STACK: WORD file access and sharing modes (see INT 21/AH=3Dh)
  1677. Return: CF set on error
  1678.         AX = DOS error code (see INT 21/AH=59h)
  1679.     CF clear if successful
  1680.         SFT filled (except handle count, which DOS manages itself)
  1681.     STACK unchanged
  1682. Note:    this function is called by the DOS 3.1+ kernel
  1683. SeeAlso: AX=1106h,AX=1115h,AX=1117h,AX=1118h,AX=112Eh,INT 21/AH=3Dh
  1684. SeeAlso: INT 21/AH=60h
  1685. --------N-2F1117-----------------------------
  1686. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE REMOTE FILE
  1687.     AX = 1117h
  1688.     ES:DI -> uninitialized SFT
  1689.     SS = DOS DS
  1690.     SDA first filename pointer -> fully-qualified name of file to open
  1691.     SDA CDS pointer -> current directory structure for drive with file
  1692.     STACK: WORD file creation mode
  1693.             low byte = file attributes (see INT 21/AH=3Ch)
  1694.             high byte = 00h normal create, 01h create new file
  1695. Return: CF set on error
  1696.         AX = DOS error code (see INT 21/AH=59h)
  1697.     CF clear if successful
  1698.         SFT filled (except handle count, which DOS manages itself)
  1699.     STACK unchanged
  1700. Note:    this function is called by the DOS 3.1+ kernel
  1701. SeeAlso: AX=1106h,AX=1116h,AX=1118h,AX=112Eh,INT 21/AH=3Ch,INT 21/AH=60h
  1702. --------N-2F1118-----------------------------
  1703. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE FILE WITHOUT CDS
  1704.     AX = 1118h
  1705.     ES:DI -> uninitialized SFT
  1706.     SS = DOS DS
  1707.     SDA first filename pointer -> fully-qualified name of file
  1708.     STACK: WORD file creation mode
  1709.             low byte = file attributes
  1710.             high byte = 00h normal create, 01h create new file
  1711. Return: ???
  1712.     STACK unchanged
  1713. Note:    this function is called by the DOS 3.1+ kernel when creating a file on a drive for which the
  1714.       SDA CDS pointer has offset FFFFh
  1715. SeeAlso: AX=1106h,AX=1116h,AX=1117h,AX=112Eh,INT 21/AH=60h
  1716. --------N-2F1119-----------------------------
  1717. INT 2F CU - NETWORK REDIRECTOR - FIND FIRST FILE WITHOUT CDS
  1718.     AX = 1119h
  1719.     SS = DS = DOS DS
  1720.     [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
  1721.     SDA first filename pointer -> fully-qualified search template
  1722.     SDA search attribute = attribute mask for search
  1723. Return: CF set on error
  1724.         AX = DOS error code (see INT 21/AH=59h)
  1725.     CF clear if successful
  1726.         [DTA] = updated findfirst search data
  1727.             (bit 7 of first byte must be set)
  1728.         [DTA+15h] = standard directory entry for file
  1729. Notes:    this function is called by the DOS 3.1+ kernel
  1730.     DOS 4.x IFSFUNC returns CF set, AX=0003h
  1731. SeeAlso: AX=111Ah,AX=111Bh
  1732. --------N-2F111A-----------------------------
  1733. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - FIND NEXT FILE WITHOUT CDS
  1734.     AX = 111Ah
  1735.     ???
  1736. Return: CF set
  1737.         AX = error code (03h for DOS 4.01 IFSFUNC)
  1738. Note:    use AX=111Ch for DOS 5+
  1739. SeeAlso: AX=1119h,AX=111Ch
  1740. --------N-2F111B-----------------------------
  1741. INT 2F CU - NETWORK REDIRECTOR - FINDFIRST
  1742.     AX = 111Bh
  1743.     SS = DS = DOS DS
  1744.     [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
  1745.     SDA first filename pointer -> fully-qualified search template
  1746.     SDA CDS pointer -> current directory structure for drive with file
  1747.     SDA search attribute = attribute mask for search
  1748. Return: CF set on error
  1749.         AX = DOS error code (see INT 21/AH=59h)
  1750.     CF clear if successful
  1751.         [DTA] = updated findfirst search data
  1752.             (bit 7 of first byte must be set)
  1753.         [DTA+15h] = standard directory entry for file
  1754. Note:    this function is called by the DOS 3.1+ kernel
  1755. SeeAlso: AX=1119h,AX=111Ch,INT 21/AH=4Eh,INT 21/AH=60h
  1756. --------N-2F111C-----------------------------
  1757. INT 2F CU - NETWORK REDIRECTOR - FINDNEXT
  1758.     AX = 111Ch
  1759.     SS = DS = DOS DS
  1760.     ES:DI -> CDS
  1761.     [DTA] = 21-byte findfirst search data (see INT 21/AH=4Eh)
  1762. Return: CF set on error
  1763.         AX = DOS error code (see INT 21/AH=59h)
  1764.     CF clear if successful
  1765.         [DTA] = updated findfirst search data
  1766.             (bit 7 of first byte must be set)
  1767.         [DTA+15h] = standard directory entry for file
  1768. Note:    this function is called by the DOS 3.1+ kernel
  1769. SeeAlso: AX=1119h,AX=111Bh,INT 21/AH=4Fh
  1770. --------N-2F111D-----------------------------
  1771. INT 2F CU - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS (ABORT)
  1772.     AX = 111Dh
  1773.     SS = DOS DS
  1774.     SDA PSP segment field = PSP of terminating process
  1775. Return: nothing
  1776. Notes:    used when a process is aborted; the process being terminated is
  1777.       indicated by the "sharing PSP" field in the SDA (offset 1Ah/1Ch)
  1778.     this function is called by the DOS 3.1+ kernel
  1779.     closes all FCBs opened by process
  1780. SeeAlso: INT 21/AX=5D04h
  1781. --------N-2F111E-----------------------------
  1782. INT 2F CU - NETWORK REDIRECTOR - DO REDIRECTION
  1783.     AX = 111Eh
  1784.     SS = DOS DS
  1785.     STACK: WORD function to execute
  1786.         5F00h  get redirection mode
  1787.             BL = type (03h printer, 04h disk)
  1788.             Return: BH = state (00h off, 01h on)
  1789.         5F01h  set redirection mode
  1790.             BL = type (03h printer, 04h disk)
  1791.             BH = state (00h off, 01h on)
  1792.         5F02h  get redirection list entry
  1793.             BX = redirection list index
  1794.             DS:SI -> 16-byte local device name buffer
  1795.             ES:DI -> 128-byte network name buffer
  1796.             Return: must set user's BX to device type and CX to
  1797.                 stored parameter value, using AX=1218h to get
  1798.                 stack frame address
  1799.         5F03h  redirect device
  1800.             BL = device type (see INT 21/AX=5F03h)
  1801.             CX = stored parameter value
  1802.             DS:SI -> ASCIZ source device name
  1803.             ES:DI -> destination ASCIZ network path + ASCIZ passwd
  1804.         5F04h  cancel redirection
  1805.             DS:SI -> ASCIZ device name or network path
  1806.         5F05h  get redirection list extended entry
  1807.             BX = redirection list index
  1808.             DS:SI -> buffer for ASCIZ source device name
  1809.             ES:DI -> buffer for destination ASCIZ network path
  1810.             Return: BH = status flag
  1811.                 BL = type (03h printer, 04h disk)
  1812.                 CX = stored parameter value
  1813.                 BP = NETBIOS local session number
  1814.         5F06h  similar to 5F05h???
  1815. Return: CF set on error
  1816.         AX = error code (see INT 21/AH=59h)
  1817.     STACK unchanged
  1818. Notes:    this function is called by the DOS 3.1+ kernel on INT 21/AH=5Fh
  1819.       (including LAN Manager calls)
  1820.     the PC Network 1.00 redirector does not support function 5F06h
  1821. SeeAlso: INT 21/AX=5F00h,INT 21/AX=5F01h,INT 21/AX=5F02h,INT 21/AX=5F03h
  1822. SeeAlso: INT 21/AX=5F04h,INT 21/AX=5F05h,INT 21/AX=5F06h
  1823. --------N-2F111F-----------------------------
  1824. INT 2F CU - NETWORK REDIRECTOR - PRINTER SETUP
  1825.     AX = 111Fh
  1826.     STACK: WORD function
  1827.         5E02h  set printer setup
  1828.         5E03h  get printer setup
  1829.         5E04h  set printer mode
  1830.         5E05h  get printer mode
  1831. Return: CF set on error
  1832.         AX = error code (see INT 21/AH=59h)
  1833.     STACK unchanged
  1834. Note:    this function is called by the DOS 3.1+ kernel
  1835. SeeAlso: INT 21/AX=5E02h,INT 21/AX=5E03h,INT 21/AX=5E04h,INT 21/AX=5E05h
  1836. --------N-2F1120-----------------------------
  1837. INT 2F CU - NETWORK REDIRECTOR - FLUSH ALL DISK BUFFERS
  1838.     AX = 1120h
  1839.     DS = DOS DS
  1840.     ???
  1841. Return: CF clear (successful)
  1842. Notes:    this function is called by the DOS 3.1+ kernel
  1843.     uses CDS array pointer and LASTDRIVE= entries in DOS list of lists
  1844. SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h
  1845. --------N-2F1121-----------------------------
  1846. INT 2F CU - NETWORK REDIRECTOR - SEEK FROM END OF REMOTE FILE
  1847.     AX = 1121h
  1848.     CX:DX = offset (in bytes) from end
  1849.     ES:DI -> SFT
  1850.         SFT DPB field -> DPB of drive with file
  1851.     SS = DOS DS
  1852. Return: CF set on error
  1853.         AL = DOS error code (see INT 21/AH=59h)
  1854.     CF clear if successful
  1855.         DX:AX = new file position
  1856. Note:    this function is called by the DOS 3.1+ kernel, but only when seeking
  1857.       from the end of a file opened with sharing modes set in such a
  1858.       manner that another process is able to change the size of the file
  1859.       while it is already open
  1860. SeeAlso: AX=1228h,INT 21/AH=42h
  1861. --------N-2F1122-----------------------------
  1862. INT 2F CU - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK
  1863.     AX = 1122h
  1864.     SS = DOS DS
  1865.     DS = PSP of process about to terminate
  1866. Return: ???
  1867. Note:    this function is called by the DOS 3.1+ kernel
  1868. --------N-2F1123-----------------------------
  1869. INT 2F CU - NETWORK REDIRECTOR - QUALIFY REMOTE FILENAME
  1870.     AX = 1123h
  1871.     DS:SI -> ASCIZ filename to canonicalize
  1872.     ES:DI -> 128-byte buffer for qualified name
  1873. Return: CF set if not resolved
  1874. Notes:    called by MS-DOS 3.1+ kernel, but not called by DR-DOS 5.0 unless the
  1875.       filename matches the name of a character device
  1876.     called first when DOS attempts to resolve a filename (unless inside an
  1877.       AX=5D00h server call); if this fails, DOS resolves the name locally
  1878. SeeAlso: AX=1221h,INT 21/AH=60h
  1879. --------N-2F1124-----------------------------
  1880. INT 2F CU - NETWORK REDIRECTOR - TURN OFF REMOTE PRINTER
  1881.     AX = 1124h
  1882.     ES:DI -> SFT
  1883.     SS = DOS DS
  1884.     ???
  1885. Return: CX = ???
  1886. Note:    this function is called by the DOS 3.1+ kernel if AX=1126h returns CF set
  1887. SeeAlso: AX=1126h
  1888. --------N-2F1125-----------------------------
  1889. INT 2F CU - NETWORK REDIRECTOR - REDIRECTED PRINTER MODE
  1890.     AX = 1125h
  1891.     STACK: WORD subfunction
  1892.         5D07h get print stream state
  1893.             Return: DL = current state
  1894.         5D08h set print stream state
  1895.             DL = new state
  1896.         5D09h finish print job
  1897. Return: CF set on error
  1898.         AX = error code (see INT 21/AH=59h)
  1899.     STACK unchanged
  1900. Note:    this function is called by the DOS 3.1+ kernel
  1901. SeeAlso: INT 21/AX=5D07h,INT 21/AX=5D08h,INT 21/AX=5D09h
  1902. --------N-2F1126-----------------------------
  1903. INT 2F CU - NETWORK REDIRECTOR - REMOTE PRINTER ECHO ON/OFF
  1904.     AX = 1126h
  1905.     ES:DI -> SFT for file handle 4???
  1906.     SS = DOS DS???
  1907.     ???
  1908. Return: CF set on error
  1909. Notes:    this function is called by the DOS 3.1+ kernel
  1910.     called when print echoing (^P, ^PrtSc) changes state and STDPRN has
  1911.       bit 11 of the device information word in the SFT set
  1912. SeeAlso: AX=1124h
  1913. --------N-2F1127-----------------------------
  1914. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  1915.     AX = 1127h
  1916. Return: CF set
  1917.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  1918. --------N-2F1128-----------------------------
  1919. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  1920.     AX = 1128h
  1921. Return: CF set
  1922.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  1923. --------N-2F1129-----------------------------
  1924. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  1925.     AX = 1129h
  1926. Return: CF set
  1927.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  1928. --------N-2F112A-----------------------------
  1929. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - CLOSE ALL FILES FOR PROCESS
  1930.     AX = 112Ah
  1931.     DS = DOS DS
  1932.     ???
  1933. Return: ???
  1934. Note:    does something to each IFS driver
  1935. --------N-2F112B-----------------------------
  1936. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GENERIC IOCTL
  1937.     AX = 112Bh
  1938.     SS = DOS DS
  1939.     CX = function/category
  1940.     DS:DX -> parameter block
  1941.     STACK: WORD value of AX on entry to INT 21 (440Ch or 440Dh)
  1942.     ???
  1943. Return: CF set on error
  1944.         AX = DOS error code (see INT 21/AH=59h)
  1945.     CF clear if successful
  1946. Note:    this function is called by the DOS 4.0 kernel
  1947. --------N-2F112C-----------------------------
  1948. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - "UPDATE_CB" - ???
  1949.     AX = 112Ch
  1950.     SS = DOS DS
  1951.     SDA current SFT pointer -> SFT for file
  1952.     ???
  1953. Return: CF set on error
  1954. Note:    called by SHARE in DOS 5.0-6.0
  1955. --------N-2F112D-----------------------------
  1956. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - EXTENDED ATTRIBUTES
  1957.     AX = 112Dh
  1958.     BL = subfunction (value of AL on INT 21)
  1959.         02h get extended attributes
  1960.         03h get extended attribute properties
  1961.         04h set extended attributes
  1962.         Return: CF clear
  1963.         else ???
  1964.         Return: CX = ??? (00h or 02h for DOS 4.01)
  1965.     ES:DI -> SFT for file
  1966.     SS = DOS DS
  1967. Return: DS = DOS DS
  1968. Note:    this function is called by the DOS 4.0 kernel on INT 21/AX=5702h,
  1969.       INT 21/AX=5703h, and INT 21/AX=5704h
  1970. SeeAlso: INT 21/AX=5702h,INT 21/AX=5703h,INT 21/AX=5704h,INT 21/AH=6Eh
  1971. --------N-2F112E-----------------------------
  1972. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - EXTENDED OPEN/CREATE FILE
  1973.     AX = 112Eh
  1974.     SS = DS = DOS DS
  1975.     ES:DI -> uninitialized SFT for file
  1976.     STACK: WORD file attribute for created/truncated file
  1977.             low byte = file attributes
  1978.             high byte = 00h normal create/open, 01h create new file
  1979.     SDA first filename pointer -> fully-qualified filename
  1980.     SDA extended file open action = action code (see INT 21/AX=6C00h)
  1981.     SDA extended file open mode = open mode for file (see INT 21/AX=6C00h)
  1982. Return: CF set on error
  1983.         AX = error code
  1984.     CF clear if successful
  1985.         CX = result code
  1986.         01h file opened
  1987.         02h file created
  1988.         03h file replaced (truncated)
  1989.         SFT initialized (except handle count, which DOS manages itself)
  1990. Note:    this function is called by the DOS 4+ kernel
  1991. SeeAlso: AX=1115h,AX=1116h,AX=1117h,INT 21/AX=6C00h
  1992. --------N-2F112F-----------------------------
  1993. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - IFS IOCTL
  1994.     AX = 112Fh
  1995.     SS = DOS DS
  1996.     STACK: WORD function in low byte
  1997.         00h ???
  1998.             DS:SI -> Current Directory Structure???
  1999.             CL = drive (1=A:)
  2000.         01h ???
  2001.             DS:SI -> ???
  2002.             CL = file handle???
  2003.         02h ???
  2004.             DS:SI -> Current Directory Structure???
  2005.             DI = ???
  2006.             CX = drive (1=A:)
  2007.     ???
  2008. Return: CF set on error
  2009.         AX = DOS error code (see INT 21/AH=59h)
  2010.     CF clear if successful
  2011. Note:    this function is called by the DOS 4.0 kernel
  2012. SeeAlso: INT 21/AH=6Bh
  2013. --------N-2F1130-----------------------------
  2014. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET IFSFUNC SEGMENT
  2015.     AX = 1130h
  2016. Return: ES = CS of resident IFSFUNC
  2017. --------N-2F1180-----------------------------
  2018. INT 2F - LAN Manager Enhanced DOS Services - ???
  2019.     AX = 1180h
  2020.     ???
  2021. Return: ???
  2022. --------N-2F1182-----------------------------
  2023. INT 2F - LAN Manager Enhanced DOS Services - INSTALL SERVICE
  2024.     AX = 1182h
  2025.     ???
  2026. Return: ???
  2027. --------N-2F1184-----------------------------
  2028. INT 2F - LAN Manager Enhanced DOS - ???
  2029.     AX = 1184h
  2030.     ???
  2031. Return: ???
  2032. --------N-2F1186-----------------------------
  2033. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe
  2034.     AX = 1186h
  2035.     DS:SI -> stack frame (see below)
  2036. Return: CF clear if successful
  2037.     CF set if error
  2038.         AX = error code
  2039. Note:    LAN Manager enhance mode adds features beyond the standard redirector
  2040.       file/printer services
  2041. SeeAlso: AX=118Fh,AX=1190h,AX=1191h,INT 21/AX=5F39h
  2042.  
  2043. Format of DosReadAsynchNmPipe stack frame:
  2044. Offset    Size    Description
  2045.  00h    DWORD    -> number of bytes read
  2046.  04h    WORD    size of buffer
  2047.  06h    DWORD    -> buffer
  2048.  0Ah    DWORD    -> return code
  2049.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  2050.  12h    WORD    handle
  2051. --------N-2F118A-----------------------------
  2052. INT 2F - LAN Manager 2.0+ DOS Enhanced ENCRYPT.EXE - STREAM ENCRYPTION SERVICE
  2053.     AX = 118Ah
  2054.     BX = function (0000h or 0001h)
  2055. Return: CF clear if successful
  2056.         AX = 1100h success
  2057.     CF set if error
  2058.         AX = 0001h, etc.
  2059. SeeAlso: AX=1186h,AH=41h,AH=42h,AH=4Bh
  2060. --------N-2F118B-----------------------------
  2061. INT 2F - LAN Manager Enhanced DOS - ???
  2062.     AX = 118Bh
  2063.     ???
  2064. Return: ???
  2065. --------N-2F118C-----------------------------
  2066. INT 2F - LAN Manager Enhanced DOS - ???
  2067.     AX = 118Ch
  2068.     ???
  2069. Return: ???
  2070. --------N-2F118E-----------------------------
  2071. INT 2F - LAN Manager Enhanced DOS - ???
  2072.     AX = 118Eh
  2073.     ???
  2074. Return: ???
  2075. --------N-2F118F-----------------------------
  2076. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe
  2077.     AX = 118Fh
  2078.     DS:SI -> stack frame (see below)
  2079. Return: CF clear if successful
  2080.     CF set if error
  2081.         AX = error code
  2082. SeeAlso: AX=1186h,AX=1191h,INT 21/AX=5F3Ah
  2083.  
  2084. Format of DosReadAsynchNmPipe stack frame:
  2085. Offset    Size    Description
  2086.  00h    DWORD    -> number of bytes read
  2087.  04h    WORD    Size of buffer
  2088.  06h    DWORD    -> buffer
  2089.  0Ah    DWORD    -> return code
  2090.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  2091.  12h    WORD    handle
  2092. --------N-2F1190-----------------------------
  2093. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe2
  2094.     AX = 1190h
  2095.     DS:SI -> stack frame
  2096. Return: CF clear if successful
  2097.     CF set if error
  2098.         AX = error code
  2099. SeeAlso: AX=1186h,AX=1191h
  2100.  
  2101. Format of DosReadAsynchNmPipe2 stack frame:
  2102. Offset    Size    Description
  2103.  00h    DWORD    -> number of bytes read
  2104.  04h    WORD    size of buffer
  2105.  06h    DWORD    -> buffer
  2106.  0Ah    DWORD    -> return code
  2107.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  2108.  12h    WORD    handle
  2109.  14h    DWORD    ???
  2110. --------N-2F1191-----------------------------
  2111. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe2
  2112.     AX = 1191h
  2113.     DS:SI -> stack frame (see below)
  2114. Return: CF clear if successful
  2115.     CF set if error
  2116.         AX = error code
  2117. SeeAlso: AX=118Fh,AX=1190h,INT 21/AX=5F3Ah
  2118.  
  2119. Format of DosReadAsynchNmPipe2 stack frame:
  2120. Offset    Size    Description
  2121.  00h    DWORD    -> number of bytes read
  2122.  04h    WORD    size of buffer
  2123.  06h    DWORD    -> buffer
  2124.  0Ah    DWORD    -> return code
  2125.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  2126.  12h    WORD    handle
  2127.  14h    DWORD    ???
  2128. --------D-2F1200-----------------------------
  2129. INT 2F U - DOS 3+ internal - INSTALLATION CHECK
  2130.     AX = 1200h
  2131. Return: AL = FFh (for compatibility with other INT 2F functions)
  2132. --------D-2F1201-----------------------------
  2133. INT 2F U - DOS 3+ internal - CLOSE CURRENT FILE
  2134.     AX = 1201h
  2135.     SS = DOS DS (must be using a DOS internal stack)
  2136.     SDA current SFT pointer -> SFT of file to close
  2137. Return: CF set on error
  2138.     BX???
  2139.     CX new reference count of SFT
  2140.     ES:DI -> SFT for file
  2141. SeeAlso: AX=1106h,AX=1227h,INT 21/AH=3Eh
  2142. --------D-2F1202-----------------------------
  2143. INT 2F U - DOS 3+ internal - GET INTERRUPT ADDRESS
  2144.     AX = 1202h
  2145.     STACK: WORD vector number
  2146. Return: ES:BX -> interrupt vector
  2147.     STACK unchanged
  2148. --------D-2F1203-----------------------------
  2149. INT 2F U - DOS 3+ internal - GET DOS DATA SEGMENT
  2150.     AX = 1203h
  2151. Return: DS = data segment of IBMDOS.COM/MSDOS.SYS
  2152. Note:    for DOS prior to version 5.0, the data segment is the same as the code
  2153.       segment
  2154. --------D-2F1204-----------------------------
  2155. INT 2F U - DOS 3+ internal - NORMALIZE PATH SEPARATOR
  2156.     AX = 1204h
  2157.     STACK: WORD character to normalize
  2158. Return: AL = normalized character (forward slash turned to backslash, all
  2159.         others unchanged)
  2160.     ZF set if path separator
  2161.     STACK unchanged
  2162. --------D-2F1205-----------------------------
  2163. INT 2F U - DOS 3+ internal - OUTPUT CHARACTER TO STANDARD OUTPUT
  2164.     AX = 1205h
  2165.     STACK: WORD character to output
  2166. Return: STACK unchanged
  2167. Note:    can be called only from within DOS
  2168. --------D-2F1206-----------------------------
  2169. INT 2F U - DOS 3+ internal - INVOKE CRITICAL ERROR
  2170.     AX = 1206h
  2171.     DI = error code
  2172.     BP:SI -> device driver header
  2173.     SS = DOS DS (must be using a DOS internal stack)
  2174.     STACK: WORD value to be passed to INT 24 in AX
  2175. Return: AL = 0-3 for Abort, Retry, Ignore, Fail
  2176.     STACK unchanged
  2177. SeeAlso: INT 24
  2178. --------D-2F1207-----------------------------
  2179. INT 2F U - DOS 3+ internal - MAKE DISK BUFFER MOST-RECENTLY USED
  2180.     AX = 1207h
  2181.     DS:DI -> disk buffer
  2182. Return: nothing
  2183. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  2184.       recently used is first); under DOS 3.3, the buffer is then moved to
  2185.       the start of the disk buffer chain if it was marked unused
  2186. Notes:    can be called only from within DOS
  2187.     this function is nearly the same as AX=120Fh
  2188. SeeAlso: AX=120Fh
  2189. --------D-2F1208-----------------------------
  2190. INT 2F U - DOS 3+ internal - DECREMENT SFT REFERENCE COUNT
  2191.     AX = 1208h
  2192.     ES:DI -> SFT
  2193. Return: AX = original value of reference count
  2194. Notes:    if the reference count was 1, it is set to FFFFh (since 0 indicates
  2195.       that the SFT is not in use).    It is the caller's responsibility to
  2196.       set the reference count to zero after cleaning up.
  2197.     used by network redirectors such as MSCDEX
  2198. SeeAlso: AX=1106h
  2199. --------D-2F1209-----------------------------
  2200. INT 2F U - DOS 3+ internal - FLUSH AND FREE DISK BUFFER
  2201.     AX = 1209h
  2202.     DS:DI -> disk buffer
  2203. Return: disk buffer marked unused, contents written to disk if buffer dirty
  2204. Note:    can be called only from within DOS
  2205. SeeAlso: AX=120Eh,AX=1215h
  2206. --------D-2F120A-----------------------------
  2207. INT 2F U - DOS 3+ internal - PERFORM CRITICAL ERROR INTERRUPT
  2208.     AX = 120Ah
  2209.     DS = SS = DOS DS (must be using a DOS internal stack)
  2210.     STACK: WORD extended error code
  2211. Return: AL = user response (0=ignore, 1=retry, 2=abort, 3=fail)
  2212.     CF clear if retry, set otherwise
  2213.     STACK unchanged
  2214. Notes:    can only be called during a DOS function call, as it uses various
  2215.       fields in the SDA to set up the registers for the INT 24
  2216.     reportedly sets current DPB's first root directory sector to 1
  2217. SeeAlso: INT 24
  2218. --------D-2F120B-----------------------------
  2219. INT 2F U - DOS 3+ internal - SIGNAL SHARING VIOLATION TO USER
  2220.     AX = 120Bh
  2221.     ES:DI -> system file table entry for previous open of file
  2222.     STACK: WORD extended error code (should be 20h--sharing violation)
  2223. Return: CF clear if operation should be retried
  2224.     CF set if operation should not be retried
  2225.         AX = error code (20h) (see INT 21/AH=59h)
  2226.     STACK unchanged
  2227. Notes:    can only be called during a DOS function call
  2228.     should only be called if an attempt was made to open an already-open
  2229.       file contrary to the sharing rules
  2230.     invokes INT 24 if SFT file opened via FCB or in compatibility mode with
  2231.       inheritance allowed
  2232. --------D-2F120C-----------------------------
  2233. INT 2F U - DOS 3+ internal - OPEN DEVICE AND SET SFT OWNER/MODE
  2234.     AX = 120Ch
  2235.     SDA current SFT pointer -> SFT for file
  2236.     DS = DOS DS
  2237.     SS = DOS DS (must be using a DOS internal stack)
  2238. Return: ES, DI, AX destroyed
  2239. Notes:    invokes "device open" call on device driver for SFT
  2240.     changes owner of last-accessed SFT to calling process if it was opened
  2241.       via FCB
  2242.     called by network redirectors such as MSCDEX
  2243. --------D-2F120D-----------------------------
  2244. INT 2F U - DOS 3+ internal - GET DATE AND TIME
  2245.     AX = 120Dh
  2246.     SS = DOS DS (must be using a DOS internal stack)
  2247. Return: AX = current date in packed format (see INT 21/AX=5700h)
  2248.     DX = current time in packed format (see INT 21/AX=5700h)
  2249. SeeAlso: INT 21/AH=2Ah,INT 21/AH=2Ch
  2250. --------D-2F120E-----------------------------
  2251. INT 2F U - DOS 3+ internal - MARK ALL DISK BUFFERS UNREFERENCED
  2252.     AX = 120Eh
  2253.     SS = DOS DS (must be using a DOS internal stack)
  2254. Return: DS:DI -> first disk buffer
  2255. Notes:    clears "referenced" flag on all disk buffers
  2256.     in DOS 5+, this has become essentially a NOP, invoking the same code
  2257.       used by AX=1224h (SHARING DELAY)
  2258. SeeAlso: AX=1209h,AX=1210h,INT 21/AH=0Dh
  2259. --------D-2F120F-----------------------------
  2260. INT 2F U - DOS 3+ internal - MAKE BUFFER MOST RECENTLY USED
  2261.     AX = 120Fh
  2262.     DS:DI -> disk buffer
  2263.     SS = DOS DS (must be using a DOS internal stack)
  2264. Return: DS:DI -> next buffer in buffer list
  2265. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  2266.       recently used is first); under DOS 3.3, the buffer is then moved to
  2267.       the start of the disk buffer chain if it was marked unused
  2268. Note:    this function is the same as AX=1207h except that it returns a
  2269.       pointer to the buffer following the specified buffer in the buffer
  2270.       chain
  2271. SeeAlso: AX=1207h
  2272. --------D-2F1210-----------------------------
  2273. INT 2F U - DOS 3+ internal - FIND UNREFERENCED DISK BUFFER
  2274.     AX = 1210h
  2275.     DS:DI -> first disk buffer to check
  2276. Return: ZF clear if found
  2277.         DS:DI -> first unreferenced disk buffer
  2278.     ZF set if not found
  2279. Note:    in DOS 5+, this has become essentially a NOP, invoking the same code
  2280.       used by AX=1224h (SHARING DELAY)
  2281. SeeAlso: AX=120Eh
  2282. --------D-2F1211-----------------------------
  2283. INT 2F U - DOS 3+ internal - NORMALIZE ASCIZ FILENAME
  2284.     AX = 1211h
  2285.     DS:SI -> ASCIZ filename to normalize
  2286.     ES:DI -> buffer for normalized filename
  2287. Return: destination buffer filled with uppercase filename, with slashes turned
  2288.     to backslashes
  2289. SeeAlso: AX=121Eh,AX=1221h
  2290. --------D-2F1212-----------------------------
  2291. INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  2292.     AX = 1212h
  2293.     ES:DI -> ASCIZ string
  2294. Return: CX = length of string
  2295. SeeAlso: AX=1225h
  2296. --------D-2F1213-----------------------------
  2297. INT 2F U - DOS 3+ internal - UPPERCASE CHARACTER
  2298.     AX = 1213h
  2299.     STACK: WORD character to convert to uppercase
  2300. Return: AL = uppercase character
  2301.     STACK unchanged
  2302. --------D-2F1214-----------------------------
  2303. INT 2F U - DOS 3+ internal - COMPARE FAR POINTERS
  2304.     AX = 1214h
  2305.     DS:SI = first pointer
  2306.     ES:DI = second pointer
  2307. Return: ZF set if pointers are equal, ZF clear if not equal
  2308. --------D-2F1215-----------------------------
  2309. INT 2F U - DOS 3+ internal - FLUSH BUFFER
  2310.     AX = 1215h
  2311.     DS:DI -> disk buffer
  2312.     SS = DOS DS (must be using a DOS internal stack)
  2313.     STACK: WORD drives for which to skip buffer
  2314.         ignore buffer if drive same as high byte, or bytes differ and
  2315.         the buffer is for a drive OTHER than that given in low byte
  2316. Return: STACK unchanged
  2317. Note:    can be called only from within DOS
  2318. SeeAlso: AX=1209h
  2319. --------D-2F1216-----------------------------
  2320. INT 2F U - DOS 3+ internal - GET ADDRESS OF SYSTEM FILE TABLE ENTRY
  2321.     AX = 1216h
  2322.     BX = system file table entry number
  2323. Return: CF clear if successful
  2324.         ES:DI -> system file table entry
  2325.     CF set if BX greater than FILES=
  2326. Note:    supported by DR-DOS 5+
  2327. SeeAlso: AX=1220h
  2328. --------D-2F1217-----------------------------
  2329. INT 2F U - DOS 3+ internal - GET CURRENT DIRECTORY STRUCTURE FOR DRIVE
  2330.     AX = 1217h
  2331.     SS = DOS DS (must be using a DOS internal stack)
  2332.     STACK: WORD drive (0 = A:, 1 = B:, etc)
  2333. Return: CF set on error
  2334.         (drive > LASTDRIVE)
  2335.     CF clear if successful
  2336.         DS:SI -> current directory structure for specified drive
  2337.     STACK unchanged
  2338. SeeAlso: AX=1219h
  2339. --------D-2F1218-----------------------------
  2340. INT 2F U - DOS 3+ internal - GET CALLER'S REGISTERS
  2341.     AX = 1218h
  2342. Return: DS:SI -> saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack)
  2343. Note:    only valid while within DOS
  2344. --------D-2F1219-----------------------------
  2345. INT 2F U - DOS 3+ internal - SET DRIVE???
  2346.     AX = 1219h
  2347.     SS = DOS DS (must be using a DOS internal stack)
  2348.     STACK: WORD drive (0 = default, 1 = A:, etc)
  2349. Return: ???
  2350.     STACK unchanged
  2351. Notes:    calls AX=1217h
  2352.     builds a current directory structure if inside server call
  2353.       (INT 21/AX=5D00h)
  2354. SeeAlso: AX=1217h,AX=121Fh
  2355. --------D-2F121A-----------------------------
  2356. INT 2F U - DOS 3+ internal - GET FILE'S DRIVE
  2357.     AX = 121Ah
  2358.     DS:SI -> filename
  2359. Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid)
  2360.     DS:SI -> filename without leading X: (if present)
  2361. SeeAlso: INT 21/AH=19h,INT 21/AH=60h
  2362. --------D-2F121B-----------------------------
  2363. INT 2F U - DOS 3+ internal - SET YEAR/LENGTH OF FEBRUARY
  2364.     AX = 121Bh
  2365.     CL = year - 1980
  2366. Return: AL = number of days in February
  2367. Note:    requires DS to be set to the DOS data segment
  2368. SeeAlso: INT 21/AH=2Bh
  2369. --------D-2F121C-----------------------------
  2370. INT 2F U - DOS 3+ internal - CHECKSUM MEMORY
  2371.     AX = 121Ch
  2372.     DS:SI -> start of memory to checksum
  2373.     CX = number of bytes
  2374.     DX = initial checksum
  2375.     SS = DOS DS (must be using a DOS internal stack)
  2376. Return: AX, CX destroyed
  2377.     DX = checksum
  2378.     DS:SI -> first byte after checksummed range
  2379. Notes:    used by DOS to determine day count since 1/1/80 given a date
  2380.     supported by DR-DOS 5.0+
  2381. SeeAlso: AX=121Dh
  2382. --------D-2F121D-----------------------------
  2383. INT 2F U - DOS 3+ internal - SUM MEMORY
  2384.     AX = 121Dh
  2385.     DS:SI -> memory to add up
  2386.     CX = 0000h
  2387.     DX = limit
  2388. Return: AL = byte which exceeded limit
  2389.     CX = number of bytes before limit exceeded
  2390.     DX = remainder after adding first CX bytes
  2391.     DS:SI -> byte beyond the one which exceeded the limit
  2392. Notes:    used by DOS to determine year or month given day count since 1/1/80
  2393.     supported by DR-DOS 5.0+
  2394. SeeAlso: AX=121Ch
  2395. --------D-2F121E-----------------------------
  2396. INT 2F U - DOS 3+ internal - COMPARE FILENAMES
  2397.     AX = 121Eh
  2398.     DS:SI -> first ASCIZ filename
  2399.     ES:DI -> second ASCIZ filename
  2400. Return: ZF set if filenames equivalent, ZF clear if not
  2401. Note:    supported by DR-DOS 5.0+
  2402. SeeAlso: AX=1211h,AX=1221h
  2403. --------D-2F121F-----------------------------
  2404. INT 2F U - DOS 3+ internal - BUILD CURRENT DIRECTORY STRUCTURE
  2405.     AX = 121Fh
  2406.     SS = DOS DS (must be using a DOS internal stack)
  2407.     STACK: WORD drive letter
  2408. Return: ES:DI -> current directory structure (will be overwritten by next call)
  2409.     STACK unchanged
  2410. --------D-2F1220-----------------------------
  2411. INT 2F U - DOS 3+ internal - GET JOB FILE TABLE ENTRY
  2412.     AX = 1220h
  2413.     BX = file handle
  2414. Return: CF set on error
  2415.         AL = 6 (invalid file handle)
  2416.     CF clear if successful
  2417.         ES:DI -> JFT entry for file handle in current process
  2418. Notes:    the byte pointed at by ES:DI contains the number of the SFT for the
  2419.       file handle, or FFh if the handle is not open
  2420.     supported by DR-DOS 5.0+
  2421. SeeAlso: AX=1216h,AX=1229h
  2422. --------D-2F1221-----------------------------
  2423. INT 2F U - DOS 3+ internal - CANONICALIZE FILE NAME
  2424.     AX = 1221h
  2425.     DS:SI -> file name to be fully qualified
  2426.     ES:DI -> 128-byte buffer for resulting canonical file name
  2427.     SS = DOS DS (must be using a DOS internal stack)
  2428. Return: (see INT 21/AH=60h)
  2429. Note:    identical to INT 21/AH=60h
  2430. SeeAlso: AX=1123h,INT 21/AH=60h
  2431. --------D-2F1222-----------------------------
  2432. INT 2F U - DOS 3+ internal - SET EXTENDED ERROR INFO
  2433.     AX = 1222h
  2434.     SS = DOS data segment
  2435.     SS:SI -> 4-byte records
  2436.         BYTE    error code, FFh = last record
  2437.         BYTE    error class, FFh = don't change
  2438.         BYTE    suggested action, FFh = don't change
  2439.         BYTE    error locus, FFh = don't change
  2440.     SDA error code set
  2441. Return: SI destroyed
  2442.     SDA error class, error locus, and suggested action fields set
  2443. Note:    can be called only from within DOS
  2444. SeeAlso: AX=122Dh,INT 21/AH=59h,INT 21/AX=5D0Ah
  2445. --------D-2F1223-----------------------------
  2446. INT 2F U - DOS 3+ internal - CHECK IF CHARACTER DEVICE
  2447.     AX = 1223h
  2448.     DS = DOS DS
  2449.     SS = DOS DS (must be using a DOS internal stack)
  2450.     SDA+218h (DOS 3.10-3.30) = eight-character blank-padded name
  2451.     SDA+22Bh (DOS 4.0-6.0) = eight-character blank-padded name
  2452. Return: CF set if no character device by that name found
  2453.     CF clear if found
  2454.         BH = low byte of device attribute word
  2455. Note:    can only be called from within DOS
  2456. SeeAlso: INT 21/AX=5D06h,INT 21/AX=5D0Bh
  2457. --------D-2F1224-----------------------------
  2458. INT 2F U - DOS 3+ internal - SHARING RETRY DELAY
  2459.     AX = 1224h
  2460.     SS = DOS DS (must be using a DOS internal stack)
  2461. Return: after delay set by INT 21/AX=440Bh, unless in server call
  2462.       (INT 21/AX=5D00h)
  2463. Note:    delay is dependent on the processor speed, and is skipped entirely if
  2464.       inside a server call
  2465. SeeAlso: INT 21/AX=440Bh,INT 21/AH=52h,INT 62/AX=0097h
  2466. --------D-2F1225-----------------------------
  2467. INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  2468.     AX = 1225h
  2469.     DS:SI -> ASCIZ string
  2470. Return: CX = length of string
  2471. Note:    supported by DR-DOS 5.0+
  2472. SeeAlso: AX=1212h
  2473. --------D-2F1226-----------------------------
  2474. INT 2F U - DOS 3.3+ internal - OPEN FILE
  2475.     AX = 1226h
  2476.     CL = access mode
  2477.     DS:DX -> ASCIZ filename
  2478.     SS = DOS DS (must be using a DOS internal stack)
  2479. Return: CF set on error
  2480.         AL = error code (see INT 21/AH=59h)
  2481.     CF clear if successful
  2482.         AX = file handle
  2483. Notes:    can only be called from within DOS
  2484.     equivalent to INT 21/AH=3Dh
  2485.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  2486. SeeAlso: AX=1227h,INT 21/AH=3Dh
  2487. --------D-2F1227-----------------------------
  2488. INT 2F U - DOS 3.3+ internal - CLOSE FILE
  2489.     AX = 1227h
  2490.     BX = file handle
  2491.     SS = DOS DS (must be using a DOS internal stack)
  2492. Return: CF set on error
  2493.         AL = 06h invalid file handle
  2494.     CF clear if successful
  2495. Notes:    can only be called from within DOS
  2496.     equivalent to INT 21/AH=3Eh
  2497.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  2498. SeeAlso: AX=1106h,AX=1201h,AX=1226h,INT 21/AH=3Eh
  2499. --------D-2F1228BP4200-----------------------
  2500. INT 2F U - DOS 3.3+ internal - MOVE FILE POINTER
  2501.     AX = 1228h
  2502.     BP = 4200h, 4201h, 4202h (see INT 21/AH=42h)
  2503.     BX = file handle
  2504.     CX:DX = offset in bytes
  2505.     SS = DOS DS (must be using a DOS internal stack)
  2506. Return: as for INT 21/AH=42h
  2507. Notes:    equivalent to INT 21/AH=42h, but may only be called from inside a DOS
  2508.       function call
  2509.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  2510.       LSEEK, and restores frame pointer
  2511.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  2512. SeeAlso: INT 21/AH=42h
  2513. --------D-2F1229-----------------------------
  2514. INT 2F U - DOS 3.3+ internal - READ FROM FILE
  2515.     AX = 1229h
  2516.     BX = file handle
  2517.     CX = number of bytes to read
  2518.     DS:DX -> buffer
  2519.     SS = DOS DS (must be using a DOS internal stack)
  2520. Return: as for INT 21/AH=3Fh
  2521. Notes:    equivalent to INT 21/AH=3Fh, but may only be called when already inside
  2522.       a DOS function call
  2523.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  2524. SeeAlso: AX=1226h,INT 21/AH=3Fh
  2525. --------D-2F122A-----------------------------
  2526. INT 2F U - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT
  2527.     AX = 122Ah
  2528.     BX = entry point to set (0001h or 0002h)
  2529.     DS:SI -> FASTOPEN entry point
  2530.         (entry point not set if SI = FFFFh for DOS 4+)
  2531. Return: CF set if specified entry point already set
  2532. Notes:    entry point in BX is ignored under DOS 3.30
  2533.     both entry points set to same handler by DOS 4.01
  2534.     DOS 5.0 and 6.0 only set entry point 1
  2535.  
  2536. DOS 3.30+ FASTOPEN is called with:
  2537.     AL = 01h  Lookup
  2538.         CX = ??? seems to be offset
  2539.         DI = ??? seems to be offset
  2540.         SI = offset in DOS DS of filename
  2541.     AL = 02h  insert file into FASTOPEN cache
  2542.     AL = 03h  delete file from FASTOPEN cache
  2543.         SI = offset in DOS DS of filename
  2544.     AL = 04h  purge FASTOPEN cache
  2545.         AH = subfunction (00h,01h,02h)
  2546.         ES:DI -> ???
  2547.         CX = ??? (subfunctions 01h and 02h only)
  2548. Returns: CF set on error or not installed
  2549. Note: function 03h calls function 01h first
  2550.  
  2551. PC-DOS 4.01 FASTOPEN is additionally called with:
  2552.     AL = 04h ???
  2553.         AH = 03h
  2554.         ???
  2555.     AL = 05h ???
  2556.     AL = 0Bh ???
  2557.     AL = 0Ch ???
  2558.     AL = 0Dh ???
  2559.     AL = 0Eh ???
  2560.     AL = 0Fh ???
  2561.     AL = 10h ???
  2562.  
  2563. MS-DOS 5.0-6.0 FASTOPEN is additionally called with:
  2564.     AL = 04h  purge FASTOPEN cache
  2565.         AH = 03h
  2566.         ???
  2567.     AL = 05h ???
  2568.         DL = drive (00h = A:)
  2569.         ???
  2570.     AL = 06h ???
  2571.         ???
  2572. --------D-2F122B-----------------------------
  2573. INT 2F U - DOS 3.3+ internal - IOCTL
  2574.     AX = 122Bh
  2575.     BP = 44xxh
  2576.     SS = DOS DS (must be using a DOS internal stack)
  2577.     additional registers as appropriate for INT 21/AX=44xxh
  2578. Return: as for INT 21/AH=44h
  2579. Notes:    equivalent to INT 21/AH=44h, but may only be called when already inside
  2580.       a DOS function call
  2581.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  2582.       IOCTL, and restores frame pointer
  2583.     used by NLSFUNC in accessing COUNTRY.SYS when invoked by the DOS kernel
  2584. SeeAlso: INT 21/AH=44h
  2585. --------D-2F122C-----------------------------
  2586. INT 2F U - DOS 3.3+ internal - GET DEVICE CHAIN
  2587.     AX = 122Ch
  2588. Return: BX:AX -> header of second device driver (NUL is first) in driver chain
  2589. Note:    although this function exists in DR-DOS 5.0, it returns 0000h:0000h
  2590. SeeAlso: INT 21/AH=52h
  2591. --------D-2F122D-----------------------------
  2592. INT 2F U - DOS 3.3+ internal - GET EXTENDED ERROR CODE
  2593.     AX = 122Dh
  2594. Return: AX = current extended error code
  2595. SeeAlso: AX=1222h,INT 21/AH=59h
  2596. --------D-2F122E-----------------------------
  2597. INT 2F U - DOS 4+ internal - GET OR SET ERROR TABLE ADDRESSES
  2598.     AX = 122Eh
  2599.     DL = subfunction
  2600.         00h get standard DOS error table
  2601.         Return: ES:DI -> error table
  2602.                  (DOS 4: errors 00h-12h,50h-5Bh)
  2603.                  (DOS 5: errors 00h-26h,4Fh,51h-59h)
  2604.         01h set standard DOS error table
  2605.         ES:DI -> error table
  2606.         02h get parameter error table (errors 00h-0Ah)
  2607.         Return: ES:DI -> error table
  2608.         03h set parameter error table
  2609.         ES:DI -> error table
  2610.         04h get critical/SHARE error table (errors 13h-2Bh)
  2611.         Return: ES:DI -> error table
  2612.         05h set critical/SHARE error table
  2613.         ES:DI -> error table
  2614.         06h get ??? error table
  2615.         Return: ES:DI -> error table or 0000h:0000h
  2616.         07h set ??? error table
  2617.         ES:DI -> error table
  2618.         08h get error message retriever (see below)
  2619.         Return: ES:DI -> FAR procedure to fetch error message
  2620.         09h set ??? error table
  2621.         ES:DI -> error table
  2622. Notes:    if the returned segment on a "get" is 0001h, then the offset specifies
  2623.       the offset of the error message table within COMMAND.COM, and the
  2624.       procedure returned by DL=08h should be called
  2625.     DOS 5+ COMMAND.COM does not allow setting any of the addresses (calls
  2626.       with DL odd are ignored); they are always returned with segment 0001h
  2627.     for DOS 5.0, the standard and critical/SHARE error tables are combined
  2628.       into a single error table
  2629. SeeAlso: AX=0500h,INT 21/AH=59h
  2630.  
  2631. Format of DOS 4.x error table:
  2632. Offset    Size    Description
  2633.  00h    BYTE    FFh
  2634.  01h  2 BYTEs    04h,00h (DOS version???)
  2635.  03h    BYTE    number of error headers following
  2636.  04h 2N WORDs    table of all error headers for table
  2637.         Offset    Size    Description
  2638.          00h    WORD    error message number
  2639.          02h    WORD    offset of error message from start of header
  2640.                 error messages are count byte followed by msg
  2641. Note:    DOS 5 error tables consist of one word per error number; each word
  2642.       contains either the offset of a counted string or 0000h
  2643.  
  2644. Call error retrieval function with:
  2645.     AX = error number
  2646.     DI = offset of error table
  2647. Return: ES:DI -> error message (counted string)
  2648. Notes:    this function needs to access COMMAND.COM if the messages were not
  2649.       loaded into memory permanently with /MSG; the caller should assume
  2650.       that the returned message will be overwritten by the next call of
  2651.       the function
  2652.     supported by DR-DOS 5.0
  2653.  
  2654. Values for parameter errors:
  2655.  01h    Too many parameters
  2656.  02h    Required Parameter missing
  2657.  03h    Invalid switch
  2658.  04h    Invalid keyword
  2659.  06h    Parameter value not in allowed range
  2660.  07h    Parameter value not allowed
  2661.  08h    Parameter value not allowed
  2662.  09h    Parameter format not correct
  2663.  0Ah    Invalid parameter
  2664.  0Bh    Invalid parameter combination
  2665. --------D-2F122F-----------------------------
  2666. INT 2F U - DOS 4.x internal - SET DOS VERSION NUMBER TO RETURN
  2667.     AX = 122Fh
  2668.     DX = DOS version number (0000h = return true DOS version)
  2669. Note:    not available under DR-DOS 5.0 or 6.0
  2670. SeeAlso: INT 21/AH=30h,INT 21/AX=3306h
  2671. --------O-2F12FFBX0006-----------------------
  2672. INT 2F U - DR-DOS 6 - VIDEO MEMORY SPACE CONTROL
  2673.     AX = 12FFh
  2674.     BX = 0006h
  2675.     DX = 0000h
  2676.     CX = function
  2677.         0000h get status of video memory space (MEMMAX /V)
  2678.         0001h map memory into video memory space (MEMMAX +V)
  2679.         0002h unmap memory from video memory space (MEMMAX -V)
  2680. Return: CF clear if successful
  2681.         AX = 0000h (successful)
  2682.         BX = segment of reserved video RAM
  2683.         CX = segment of used video RAM
  2684.         DX = segment of first upper MCB
  2685. Note:    this functionality is provided by EMM386, and partially supported by
  2686.       HIDOS.SYS
  2687. SeeAlso: AX=D201h/BX=4849h
  2688. ----------2F12FFBX0007-----------------------
  2689. INT 2F U - Novell DOS 7 - SCRIPT.EXE - GET ???
  2690.     AX = 12FFh
  2691.     BX = 0007h
  2692.     CX = 0000h
  2693. Return: CF clear if installed
  2694.         AX = 0000h
  2695.         BX = ??? (4426h)
  2696.         CX = ??? (0068h)
  2697.         DX = PSP segment of resident code???
  2698.         SI = ??? (4AFAh)
  2699.         ES = resident code segment
  2700. --------O-2F12FFBX0106-----------------------
  2701. INT 2F U - Novell DOS 7 - EMM386 - GET ???
  2702.     AX = 12FFh
  2703.     BX = 0106h
  2704. Return:    CF clear if successful
  2705.         AX = 0000h (successful)
  2706.         BX = ??? (EDC0h)
  2707.         CX = ??? (0003h)
  2708.         DX = ??? (0300h)
  2709.         ES = segment of ???
  2710. --------D-2F13-------------------------------
  2711. INT 2F U - DOS 3.2+ - SET DISK INTERRUPT HANDLER
  2712.     AH = 13h
  2713.     DS:DX -> interrupt handler disk driver calls on read/write
  2714.     ES:BX = address to restore INT 13 to on system halt (exit from root
  2715.          shell) or warm boot (INT 19)
  2716. Return: DS:DX set by previous invocation of this function
  2717.     ES:BX set by previous invocation of this function
  2718. Notes:    IO.SYS hooks INT 13 and inserts one or more filters ahead of the
  2719.       original INT 13 handler.  The first is for disk change detection
  2720.       on floppy drives, the second is for tracking formatting calls and
  2721.       correcting DMA boundary errors, the third is for working around
  2722.       problems in a particular version of IBM's ROM BIOS
  2723.     before the first call, ES:BX points at the original BIOS INT 13; DS:DX
  2724.       also points there unless IO.SYS has installed a special filter for
  2725.       hard disk reads (on systems with model byte FCh and BIOS date
  2726.       "01/10/84" only), in which case it points at the special filter
  2727.     most DOS 3.2+ disk access is via the vector in DS:DX, although a few
  2728.       functions are still invoked via an INT 13 instruction
  2729.     this is a dangerous security loophole for any virus-monitoring software
  2730.       which does not trap this call ("INT13", "Nomenklatura", and many
  2731.       Bulgarian viruses are known to use it to get the original ROM entry
  2732.       point)
  2733. SeeAlso: INT 13/AH=01h,INT 19,INT 9D"VIRUS"
  2734. --------N-2F13-------------------------------
  2735. INT 2F U - MS-NET - ???
  2736.     AH = 13h
  2737.     ???
  2738. Return: ???
  2739. Note:    supposedly used to move (or control the movement of) NCBs
  2740. --------U-2F1400-----------------------------
  2741. INT 2F C - NLSFUNC.COM - INSTALLATION CHECK
  2742.     AX = 1400h
  2743. Return: AL = 00h not installed, OK to install
  2744.          01h not installed, not OK
  2745.          FFh installed
  2746. Notes:    this function is called by the DOS v3.3+ kernel
  2747.     supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  2748.     supported by DR-DOS 5.0
  2749.     documented for MS-DOS 5+, but undocumented in prior versions
  2750. SeeAlso: AX=1401h"NLSFUNC",AX=1402h"NLSFUNC"
  2751. --------D-2F1400-----------------------------
  2752. INT 2F - European MS-DOS 4.0 POPUP - "CheckPu" - INSTALLATION CHECK
  2753.     AX = 1400h
  2754. Return: AX = FFFFh if installed
  2755.         BX = maximum memory required to save screen and keyboard info
  2756.     CF clear if successful
  2757.     CF set on error
  2758.         AX = error code
  2759.         0002h invalid function
  2760.         0004h unknown error
  2761. Note:    the POPUP interface is used by background programs (see INT 21/AH=80h)
  2762.       to communicate with the user
  2763. SeeAlso: AX=1401h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  2764. --------U-2F1401-----------------------------
  2765. INT 2F CU - NLSFUNC.COM - CHANGE CODE PAGE
  2766.     AX = 1401h
  2767.     DS:SI -> internal code page structure (see below)
  2768.     BX = new code page (see INT 21/AX=6602h)
  2769.     DX = country code???
  2770. Return: AL = status
  2771.          00h successful
  2772.          else DOS error code
  2773. Note:    this function is called by the DOS v3.3+ kernel
  2774. SeeAlso: AX=1400h"NLSFUNC",AX=1402h"NLSFUNC",INT 21/AH=66h
  2775.  
  2776. Format of DOS 3.30 internal code page structure:
  2777. Offset    Size    Description
  2778.  00h  8 BYTEs    ???
  2779.  08h 64 BYTEs    name of country information file
  2780.  48h    WORD    system code page
  2781.  4Ah    WORD    number of supported subfunctions
  2782.  4Ch  5 BYTEs    data to return for INT 21/AX=6502h
  2783.  51h  5 BYTEs    data to return for INT 21/AX=6504h
  2784.  56h  5 BYTEs    data to return for INT 21/AX=6505h
  2785.  5Bh  5 BYTEs    data to return for INT 21/AX=6506h
  2786.  60h 41 BYTEs    data to return for INT 21/AX=6501h
  2787. --------D-2F1401-----------------------------
  2788. INT 2F - European MS-DOS 4.0 POPUP - "PostPu" - OPEN/CLOSE POPUP SCREEN
  2789.     AX = 1401h
  2790.     DL = function (00h open, 01h close)
  2791.     DH = wait flag
  2792.         00h block until screen opens
  2793.         01h return error if screen is not available
  2794.         02h urgent--always open screen immediately
  2795. Return: CF clear if successful
  2796.         BX = amount of memory needed to save screen and keyboard info,
  2797.         0000h if default save location can be used (only if DH was 02h)
  2798.     CF set on error
  2799. Note:    the application using the screen is frozen until the popup screen is
  2800.       closed
  2801. SeeAlso: AX=1400h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  2802. --------U-2F1402-----------------------------
  2803. INT 2F CU - NLSFUNC.COM - GET EXTENDED COUNTRY INFO
  2804.     AX = 1402h
  2805.     BP = subfunction (same as AL for INT 21/AH=65h)
  2806.     BX = code page (see INT 21/AX=6602h)
  2807.     DX = country code (see INT 21/AH=38h)
  2808.     DS:SI -> internal code page structure (see AX=1401h)
  2809.     ES:DI -> user buffer
  2810.     CX = size of user buffer
  2811. Return: AL = status
  2812.         00h successful
  2813.         else DOS error code
  2814. Notes:    this function is called by the DOS v3.3+ kernel on INT 21/AH=65h
  2815.     code page structure apparently only needed for COUNTRY.SYS pathname
  2816. SeeAlso: AX=1401h"NLSFUNC",AX=1403h"NLSFUNC",AX=1404h,INT 21/AH=65h
  2817. --------D-2F1402-----------------------------
  2818. INT 2F - European MS-DOS 4.0 POPUP - "SavePu" - SAVE POPUP SCREEN
  2819.     AX = 1402h
  2820.     ES:DI -> save buffer (0000h:0000h for default buffer in POPUP)
  2821. Return: CF clear if successful
  2822.     CF set on error
  2823.         AX = error code
  2824.         0001h process does not own screen
  2825.         0004h unknown error
  2826.         0005h invalid pointer
  2827. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1403h"POPUP"
  2828. --------U-2F1403-----------------------------
  2829. INT 2F CU - NLSFUNC.COM - SET CODE PAGE
  2830.     AX = 1403h
  2831.     DS:SI -> internal code page structure (see AX=1401h)
  2832.     BX = code page (see INT 21/AX=6602h)
  2833.     DX = country code (see INT 21/AH=38h)
  2834. Return: AL = status
  2835.          ???
  2836. Note:    this function is called by the DOS v3.3+ kernel on INT 21/AH=38h
  2837. SeeAlso: AX=1402h"NLSFUNC",AX=1404h,INT 21/AH=38h"SET"
  2838. --------D-2F1403-----------------------------
  2839. INT 2F - European MS-DOS 4.0 POPUP - "RestorePu" - RESTORE SCREEN
  2840.     AX = 1403h
  2841.     ES:DI -> buffer containing saved screen
  2842.         (0000h:0000h for default buffer in POPUP)
  2843. Return: CF clear if successful
  2844.     CF set on error
  2845.         AX = error code (see AX=1402h"POPUP")
  2846. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1402h"POPUP"
  2847. --------U-2F1404-----------------------------
  2848. INT 2F CU - NLSFUNC.COM - GET COUNTRY INFO
  2849.     AX = 1404h
  2850.     BX = code page (see INT 21/AX=6602h)
  2851.     DX = country code (see INT 21/AH=38h)
  2852.     DS:SI -> internal code page structure (see AX=1401h)
  2853.     ES:DI -> user buffer
  2854. Return: AL = status
  2855.          ???
  2856. Notes:    this function is called by the DOS v3.3+ kernel on INT 21/AH=38h
  2857.     code page structure apparently only needed for COUNTRY.SYS pathname
  2858. SeeAlso: AX=1402h,AX=1403h,INT 21/AH=38h"GET"
  2859. --------U-2F14FE-----------------------------
  2860. INT 2F U - DR-DOS 5.0 NLSFUNC - GET EXTENDED COUNTRY INFORMATION
  2861.     AX = 14FEh
  2862.     BX = code page (FFFFh=global code page) (see INT 21/AX=6602h)
  2863.     DX = country ID (FFFFh=current country) (see INT 21/AH=38h)
  2864.     ES:DI -> country information buffer
  2865.     CL = info ID
  2866.         01h get general internationalization info
  2867.         02h get pointer to uppercase table
  2868.         04h get pointer to filename uppercase table
  2869.         05h get pointer to filename terminator table
  2870.         06h get pointer to collating sequence table
  2871.         07h get pointer to Double-Byte Character Set table
  2872.     CF set (used to return error if not installed)
  2873. Return: CF clear if successful
  2874.         DS:SI -> requested information
  2875.     CF set on error
  2876. Notes:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  2877.       or FFh on entry.
  2878.     the DR-DOS kernel calls this function on INT 21/AX=6501h
  2879.     the value in CL is not range-checked by the DR-DOS 5.0 NLSFUNC
  2880. SeeAlso: AX=14FFh,INT 21/AH=65h
  2881.  
  2882. Format of DR-DOS COUNTRY.SYS file:
  2883. Offset    Size    Description
  2884.  00h 126 BYTEs    copyright notice (terminated with Ctrl-Z, padded with NULs)
  2885.  7Eh    WORD    signature EDC1h
  2886.  80h    var    country pointer records
  2887.     Offset    Size    Description
  2888.      00h    WORD    country code (0000h if end of array)
  2889.      02h    WORD    code page
  2890.      04h    WORD    ??? (0000h)
  2891.      06h  7 WORDs    offsets in file for data tables for subfunctions
  2892.             01h-07h
  2893.  var    var    country information
  2894. --------U-2F14FF-----------------------------
  2895. INT 2F U - DR-DOS 5.0 NLSFUNC - PREPARE CODE PAGE
  2896.     AX = 14FFh
  2897.     BX = code page
  2898. Return: AX = ???
  2899.     ZF set if AX=0000h
  2900. Notes:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  2901.       or FFh on entry.
  2902.     passes codepage preparation request to each character device supporting
  2903.       the generic IOCTL call
  2904. SeeAlso: AX=14FEh,INT 21/AX=440Ch,INT 21/AX=6602h
  2905. --------U-2F1500-----------------------------
  2906. INT 2F - DOS 4.00 GRAPHICS.COM - INSTALLATION CHECK
  2907.     AX = 1500h
  2908. Return: AX = FFFFh
  2909.     ES:DI -> ??? (graphics data?)
  2910. Note:    this installation check conflicts with the CD-ROM Extensions
  2911.       installation check; moved to AX=AC00h in later versions
  2912. SeeAlso: AX=AC00h
  2913. --------d-2F1500BX0000-----------------------
  2914. INT 2F - CD-ROM - INSTALLATION CHECK
  2915.     AX = 1500h
  2916.     BX = 0000h
  2917. Return: BX = number of CD-ROM drive letters used
  2918.     CX = starting drive letter (0=A:)
  2919. Notes:    this installation check DOES NOT follow the format used by other
  2920.       software
  2921.     this installation check conflicts with the DOS 4.00 GRAPHICS.COM
  2922.       installation check
  2923. SeeAlso: INT 2F/AX=D000h/BX=4D44h"Lotus"
  2924. --------d-2F1501-----------------------------
  2925. INT 2F - CD-ROM - GET DRIVE DEVICE LIST
  2926.     AX = 1501h
  2927.     ES:BX -> buffer to hold drive letter list (5 bytes per drive letter)
  2928. Return: buffer filled, for each drive letter
  2929.       BYTE    subunit number in driver
  2930.       DWORD address of device driver header
  2931. --------d-2F1502-----------------------------
  2932. INT 2F - CD-ROM - GET COPYRIGHT FILE NAME
  2933.     AX = 1502h
  2934.     ES:BX -> 38-byte buffer for name of copyright file
  2935.     CX = drive number (0=A:)
  2936. Return: CF set if drive is not a CD-ROM drive
  2937.         AX = 000Fh (invalid drive)
  2938.     CF clear if successful
  2939. SeeAlso: AX=1503h
  2940. --------d-2F1503-----------------------------
  2941. INT 2F - CD-ROM - GET ABSTRACT FILE NAME
  2942.     AX = 1503h
  2943.     ES:BX -> 38-byte buffer for name of abstract file
  2944.     CX = drive number (0=A:)
  2945. Return: CF set if drive is not a CD-ROM drive
  2946.         AX = 000Fh (invalid drive)
  2947.     CF clear if successful
  2948. SeeAlso: AX=1502h,AX=1504h
  2949. --------d-2F1504-----------------------------
  2950. INT 2F - CD-ROM - GET BIBLIOGRAPHIC DOC FILE NAME
  2951.     AX = 1504h
  2952.     ES:BX -> 38-byte buffer for name of bibliographic documentation file
  2953.     CX = drive number (0=A:)
  2954. Return: CF set if drive is not a CD-ROM drive
  2955.         AX = 000Fh (invalid drive)
  2956.     CF clear if successful
  2957. SeeAlso: AX=1502h,AX=1503h
  2958. --------d-2F1505-----------------------------
  2959. INT 2F - CD-ROM - READ VTOC
  2960.     AX = 1505h
  2961.     ES:BX -> 2048-byte buffer
  2962.     CX = drive number (0=A:)
  2963.     DX = sector index (0=first volume descriptor,1=second,...)
  2964. Return: CF set on error
  2965.         AX = error code (15=invalid drive,21=not ready)
  2966.     CF clear if successful
  2967.         AX = volume descriptor type (1=standard,FFh=terminator,0=other)
  2968. --------d-2F1506-----------------------------
  2969. INT 2F - CD-ROM - TURN DEBUGGING ON
  2970.     AX = 1506h
  2971.     BX = debugging function to enable
  2972. Note:    reserved for development
  2973. SeeAlso: AX=1507h
  2974. --------d-2F1507-----------------------------
  2975. INT 2F - CD-ROM - TURN DEBUGGING OFF
  2976.     AX = 1507h
  2977.     BX = debugging function to disable
  2978. Note:    reserved for development
  2979. SeeAlso: AX=1506h
  2980. --------d-2F1508-----------------------------
  2981. INT 2F - CD-ROM - ABSOLUTE DISK READ
  2982.     AX = 1508h
  2983.     ES:BX -> buffer
  2984.     CX = drive number (0=A:)
  2985.     SI:DI = starting sector number
  2986.     DX = number of sectors to read
  2987. Return: CF set on error
  2988.         AL = error code (15=invalid drive,21=not ready)
  2989.     CF clear if successful
  2990. SeeAlso: AX=1509h
  2991. --------d-2F1509-----------------------------
  2992. INT 2F - CD-ROM - ABSOLUTE DISK WRITE
  2993.     AX = 1509h
  2994.     ES:BX -> buffer
  2995.     CX = drive number (0=A:)
  2996.     SI:DI = starting sector number
  2997.     DX = number of sectors to write
  2998. Note:    corresponds to INT 26h and is currently reserved and nonfunctional
  2999. SeeAlso: AX=1508h
  3000. --------d-2F150A-----------------------------
  3001. INT 2F - CD-ROM - RESERVED
  3002.     AX = 150Ah
  3003. --------d-2F150B-----------------------------
  3004. INT 2F - CD-ROM v2.00+ - DRIVE CHECK
  3005.     AX = 150Bh
  3006.     CX = drive number (0=A:)
  3007. Return: BX = ADADh if MSCDEX.EXE installed
  3008.         AX = 0000h if drive not supported
  3009.         nonzero if supported
  3010. SeeAlso: AX=150Dh
  3011. --------d-2F150C-----------------------------
  3012. INT 2F - CD-ROM v2.00+ - GET MSCDEX.EXE VERSION
  3013.     AX = 150Ch
  3014. Return: BH = major version
  3015.     BL = minor version
  3016. Note:    MSCDEX.EXE versions prior to 2.00 return BX=0
  3017. --------d-2F150D-----------------------------
  3018. INT 2F - CD-ROM v2.00+ - GET CD-ROM DRIVE LETTERS
  3019.     AX = 150Dh
  3020.     ES:BX -> buffer for drive letter list (1 byte per drive)
  3021. Return: buffer filled with drive numbers (0=A:).  Each byte corresponds
  3022.     to the drive in the same position for function 1501h
  3023. SeeAlso: AX=150Bh
  3024. --------d-2F150E-----------------------------
  3025. INT 2F - CD-ROM v2.00+ - GET/SET VOLUME DESCRIPTOR PREFERENCE
  3026.     AX = 150Eh
  3027.     BX = subfunction
  3028.         00h get preference
  3029.         DX = 0000h
  3030.         Return: DX = preference settings
  3031.         01h set preference
  3032.         DH = volume descriptor preference
  3033.             01h = primary volume descriptor
  3034.             02h = supplementary volume descriptor
  3035.         DL = supplementary volume descriptor preference
  3036.             01h = shift-Kanji
  3037.     CX = drive number (0=A:)
  3038. Return: CF set on error
  3039.         AX = error code (15=invalid drive,1=invalid function)
  3040.     CF clear if successful
  3041. --------d-2F150F-----------------------------
  3042. INT 2F - CD-ROM v2.00+ - GET DIRECTORY ENTRY
  3043.     AX = 150Fh
  3044.     CL = drive number (0=A:)
  3045.     CH bit 0 = copy flag
  3046.         clear if direct copy
  3047.         set if copy to structure which removes ISO/High Sierra diffs
  3048.     ES:BX -> ASCIZ path name
  3049.     SI:DI -> buffer for directory entry (see below)
  3050.          minimum 255 bytes for direct copy
  3051. Return: CF set on error
  3052.         AX = error code
  3053.     CF clear if successful
  3054.         AX = disk format (0=High Sierra,1=ISO 9660)
  3055.  
  3056. Format of directory entry (direct copy):
  3057. Offset    Size    Description
  3058.  00h    BYTE  length of directory entry
  3059.  01h    BYTE  length of XAR in Logical Block Numbers
  3060.  02h    DWORD LBN of data, Intel (little-endian) format
  3061.  06h    DWORD LBN of data, Motorola (big-endian) format
  3062.  0Ah    DWORD length of file, Intel format
  3063.  0Eh    DWORD length of file, Motorola format
  3064. ---High Sierra---
  3065.  12h  6 BYTEs date and time
  3066.  18h    BYTE  bit flags
  3067.  19h    BYTE  reserved
  3068. ---ISO 9660---
  3069.  12h  7 BYTEs date and time
  3070.  19h    BYTE  bit flags
  3071. ---both formats---
  3072.  1Ah    BYTE  interleave size
  3073.  1Bh    BYTE  interleave skip factor
  3074.  1Ch    WORD  volume set sequence number, Intel format
  3075.  1Eh    WORD  volume set sequence number, Motorola format
  3076.  20h    BYTE  length of file name
  3077.  21h  N BYTEs file name
  3078.     BYTE (optional) padding if filename is odd length
  3079.       N BYTEs system data
  3080.  
  3081. Format of directory entry (canonicalized):
  3082. Offset    Size    Description
  3083.  00h    BYTE    length of XAR in Logical Block Numbers
  3084.  01h    DWORD    Logical Block Number of file start
  3085.  05h    WORD    size of disk in logical blocks
  3086.  07h    DWORD    file length in bytes
  3087.  0Bh  7 BYTEs    date and time
  3088.  12h    BYTE    bit flags
  3089.  13h    BYTE    interleave size
  3090.  14h    BYTE    interleave skip factor
  3091.  15h    WORD    volume set sequence number
  3092.  17h    BYTE    length of file name
  3093.  18h 38 BYTEs    ASCIZ filename
  3094.  3Eh    WORD    file version number
  3095.  40h    BYTE    number of bytes of system use data
  3096.  41h 220 BYTEs    system use data
  3097. --------d-2F1510-----------------------------
  3098. INT 2F - CD-ROM v2.10+ - SEND DEVICE DRIVER REQUEST
  3099.     AX = 1510h
  3100.     CX = CD-ROM drive letter (0 = A, 1 = B, etc)
  3101.     ES:BX -> CD-ROM device driver request header (see AX=0802h)
  3102. --------W-2F1600-----------------------------
  3103. INT 2F - MS Windows - WINDOWS ENHANCED MODE INSTALLATION CHECK
  3104.     AX = 1600h
  3105. Return: AL = status
  3106.         00h neither Windows 3.x enhanced mode nor Windows/386 2.x running
  3107.         01h Windows/386 2.x running
  3108.         80h XMS version 1 driver installed (neither Windows 3.x enhanced
  3109.          mode nor Windows/386 2.x running) (obsolete--see note)
  3110.         FFh Windows/386 2.x running
  3111.     AL = anything else
  3112.         AL = Windows major version number >= 3
  3113.         AH = Windows minor version number
  3114. Notes:    INT 2F/AH=16h comprises an API for non-Windows programs (DOS device
  3115.       drivers, TSRs, and applications) to cooperate with multitasking
  3116.       Windows/386 2.x and Windows 3.x and higher enhanced mode.
  3117.     certain calls are also supported in the Microsoft 80286 DOS extender in
  3118.       Windows standard mode
  3119.     this function served as the installation check and AX=1610h served to
  3120.       get the driver entry point for XMS version 1, which is now obsolete.
  3121.       Use AX=4300h and AX=4310h instead
  3122. SeeAlso: AX=160Ah,AX=1610h,AX=4300h,AX=4680h
  3123. Index:    installation check;XMS version 1
  3124. --------W-2F1602-----------------------------
  3125. INT 2F - MS Windows/386 2.x - GET API ENTRY POINT
  3126.     AX = 1602h
  3127. Return: ES:DI -> Windows/386 2.x API procedure entry point
  3128. Notes:    this interface is supported in Windows 3.x only for 2.x compatibility
  3129.     to get the current virtual machine (VM) ID in Windows/386 2.x:
  3130.         AX = 0000h
  3131.         ES:DI -> return address
  3132.         JUMP to address returned from INT 2F/AX=1602h
  3133.     After JUMP, at return address:
  3134.         BX = current VM ID.
  3135. SeeAlso: AX=C020h
  3136. --------W-2F1603-----------------------------
  3137. INT 2F - MS Windows/386 - GET INSTANCE DATA
  3138.     AX = 1603h
  3139. Return: AX = 5248h ('RH') if supported
  3140.         DS:SI -> Windows/386 instance data (see below)
  3141. Notes:    reportedly supported by RM Nimbus MS-DOS 3.3 kernel
  3142.     this function is called by DOSMGR when AX=1607h/BX=0015h is not
  3143.       supported, as is the case in DOS versions prior to 5.0
  3144.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  3145.       this function, DOSMGR's behavior, and instancing in general
  3146. SeeAlso: AX=1607h/BX=0015h
  3147.  
  3148. Format of Windows/386 instance data:
  3149. Offset    Size    Description
  3150.  00h    WORD    segment of IO.SYS (0000h = default 0070h)
  3151.  02h    WORD    offset in IO.SYS of STACKS data structure (DOS 3.2x)
  3152.         0000h if not applicable
  3153.  04h    WORD    number of instance data entries (max 32)
  3154.  06h    Array of instance data entries
  3155.     Offset    Size    Description
  3156.      00h    WORD    segment (0002h = DOS kernel)
  3157.      02h    WORD    offset
  3158.      04h    WORD    size
  3159. --------W-2F1605-----------------------------
  3160. INT 2F - MS Windows - WINDOWS ENH MODE & 286 DOSX INIT BROADCAST
  3161.     AX = 1605h
  3162.     ES:BX = 0000h:0000h
  3163.     DS:SI = 0000h:0000h
  3164.     CX = 0000h
  3165.     DX = flags
  3166.         bit 0 = 0 if Windows enhanced-mode initialization
  3167.         bit 0 = 1 if Microsoft 286 DOS extender initialization
  3168.         bits 1-15 reserved (undefined)
  3169.     DI = version number (major in upper byte, minor in lower)
  3170. Return: CX = 0000h if okay for Windows to load
  3171.     CX = FFFFh (other registers unchanged) if Windows 3.0 in standard mode
  3172.     CX <> 0 if Windows should not load
  3173.     ES:BX -> startup info structure (see below)
  3174.     DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h
  3175. Notes:    the Windows enhanced mode loader and Microsoft 286 DOS extender will
  3176.       broadcast an INT 2F/AX=1605h call when initializing.    Any DOS device
  3177.       driver or TSR can watch for this broadcast and return the appropriate
  3178.       values.  If the driver or TSR returns CX <> 0, it is also its
  3179.       responsibility to display an error message.
  3180.     each handler must first chain to the prior INT 2F handler with
  3181.       registers unchanged before processing the call
  3182.     if the handler requires local data on a per-VM basis, it must store the
  3183.       returned ES:BX in the "next" field of a startup info structure and
  3184.       return a pointer to that structure in ES:BX
  3185.     a single TSR may set the V86 mode enable/disable callback; if DS:SI is
  3186.       already nonzero, the TSR must fail the initialization by setting CX
  3187.       nonzero
  3188.     MSD checks for Windows 3.0 running in standard mode by testing whether
  3189.       CX=FFFFh and other registers are unchanged on return
  3190. SeeAlso: AX=1606h,AX=1608h,AX=4B05h
  3191.  
  3192. Format of Startup Information Structure:
  3193. Offset    Size    Description
  3194.  00h  2 BYTEs    major, minor version of info structure
  3195.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  3196.  06h    DWORD    pointer to ASCIZ name of virtual device file or 0000h:0000h
  3197.  0Ah    DWORD    virtual device reference data (see below)
  3198.         (only used if above nonzero)
  3199.  0Eh    DWORD    pointer to instance data records or 0000h:0000h
  3200.  
  3201. Format of one Instance Item in array:
  3202. Offset    Size    Description
  3203.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  3204.  04h    WORD    size of instance data
  3205.  
  3206. Format of Virtual Device Reference Data:
  3207. Offset    Size    Description
  3208.  00h    DWORD    physical address of ??? or 00000000h
  3209.  04h    DWORD    physical address of ??? table
  3210.  08h    DWORD    "DEST_PAGE" address to which pages must be mapped
  3211.  0Ch  N DWORDs    "SRC_PAGE" physical addresses of the pages
  3212.         00000000h = end of table
  3213. Note:    EMM386.EXE sets the first pointer to the start of the device driver
  3214.       chain, the second pointer to a field of 40h bytes followed by a
  3215.       16-bit offset to the end of the SRC_PAGE table, and DEST_PAGE to
  3216.       the start segment of the UMB area
  3217.  
  3218. Virtual mode enable/disable procedure called with:
  3219.     AX = 0000h disable V86 mode
  3220.     AX = 0001h enable V86 mode
  3221.     interrupts disabled
  3222. Return: CF set on error
  3223.     CF clear if successful
  3224.     interrupts disabled
  3225. --------W-2F1606-----------------------------
  3226. INT 2F - MS Windows - WINDOWS ENH MODE & 286 DOSX EXIT BROADCAST
  3227.     AX = 1606h
  3228.     DX = flags
  3229.         bit 0 = 0 if Windows enhanced-mode exit
  3230.         bit 0 = 1 if Microsoft 286 DOS extender exit
  3231.         bits 1-15 reserved (undefined)
  3232. Notes:    if the init broadcast fails (AX=1605h returned CX <> 0), then this
  3233.       broadcast will be issued immediately.
  3234.     this call will be issued in real mode
  3235. SeeAlso: AX=1605h,AX=1609h
  3236. --------W-2F1607-----------------------------
  3237. INT 2F - MS Windows - VIRTUAL DEVICE CALL OUT API
  3238.     AX = 1607h
  3239.     BX = virtual device ID (see INT 2F/AX=1684h)
  3240.     CX = (usually) callout subfunction
  3241. Return: (usually) AX,BX,CX,DX,ES contain results
  3242. Notes:    more of a convention than an API, this call specifies a standard
  3243.       mechanism for Windows enhanced-mode virtual devices (VxD's) to talk
  3244.       to DOS device drivers and TSRs
  3245.     see below for details on several virtual devices
  3246. SeeAlso: AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1607h/BX=0015h
  3247. SeeAlso: AX=1684h,AX=C020h
  3248. --------W-2F1607BX0006-----------------------
  3249. INT 2F - MS Windows - "V86MMGR" VIRTUAL DEVICE API
  3250.     AX = 1607h
  3251.     BX = 0006h (VxD identifier of "V86MMGR")
  3252.     CX = 0000h
  3253. Return: AX = status
  3254.         0000h if local A20 state changed
  3255.         1607h if A20 unchanged
  3256.         other if global A20 state changed
  3257. --------W-2F1607BX000C-----------------------
  3258. INT 2F - MS Windows - "VMD" VIRTUAL MOUSE DEVICE API
  3259.     AX = 1607h
  3260.     BX = 000Ch (VxD identifier of "VMD")
  3261. Return: CX = nonzero if mouse driver already virtualized
  3262. Note:    VMD (Virtual Mouse Driver) calls this and then checks whether CX is
  3263.       nonzero; if yes, it will not automatically virtualize the mouse
  3264.       driver.  This would be used if MOUSE.COM already virtualizes
  3265.       itself using the Windows API.
  3266. SeeAlso: AX=1607h/BX=0014h,AX=1607h/BX=0015h
  3267. ----------2F1607BX0010-----------------------
  3268. INT 2F C - MS Windows 3.1 - "BLOCKDEV" VIRTUAL HARD DISK DEVICE API
  3269.     AX = 1607h
  3270.     BX = 0010h (VxD identifier of "BLOCKDEV")
  3271.     CX = function
  3272.         0001h starting FastDisk compatibility tests
  3273.         0002h ending FastDisk compatibility tests
  3274.         0003h check if FastDisk installation allowed
  3275.         Return: CX = 0000h if allowed
  3276. Note:    this interface is called by the Windows FastDisk driver (such as
  3277.       WDCTRL) when it thinks that the INT 13h handler immediately below
  3278.       IO.SYS's INT 13h code is not in ROM; it should be supported by any
  3279.       program which hooks itself underneath IO.SYS's INT 13h code with
  3280.       INT 2F/AH=13h
  3281. SeeAlso: AX=1607h/BX=0014h,INT 2F/AH=13h
  3282. --------W-2F1607BX0014-----------------------
  3283. INT 2F - MS Windows - "VNETBIOS" VIRTUAL DEVICE API
  3284.     AX = 1607h
  3285.     BX = 0014h (VxD identifier of "VNETBIOS")
  3286. Return: ES:DI -> 128-byte table specifying VNETBIOS actions for each NetBIOS
  3287.         command code (see below)
  3288. Note:    VNETBIOS (Virtual NetBIOS) calls this function to determine whether
  3289.       the NetBIOS has an extensions Windows should know about
  3290. SeeAlso: AX=1607h/BX=000Ch,AX=1607h/BX=0010h,AX=1607h/BX=0015h
  3291.  
  3292. Values for action code:
  3293.  00h    "VN_Unknown" unknown command
  3294.  04h    "VN_No_Map"  no memory mapping necessary
  3295.  08h    "VN_Map_In"  input buffer is quickly used, so no global mapping needed
  3296.  0Ch    "VN_Map_In"  output buffer is quickly used, so no global mapping needed
  3297.  10h    "VN_Map_In_Out"     buffer is quickly used, so no global mapping needed
  3298.  14h    "VN_Chain_Send"     the chain-send command
  3299.  18h    "VN_Cancel"    special case for cancel command
  3300.  1Ch    "VN_Buffer_In"    buffer is incoming
  3301.  20h    "VN_Buffer_Out" buffer is outgoing
  3302.  24h    "VN_Buffer_In_Out" buffer used for both incoming and outgoing data
  3303. --------D-2F1607BX0015-----------------------
  3304. INT 2F C - MS Windows - "DOSMGR" VIRTUAL DEVICE API
  3305.     AX = 1607h
  3306.     BX = 0015h (VxD identifier of "DOSMGR")
  3307.     CX = function
  3308.         0000h query instance processing
  3309.         DX = 0000h
  3310.         Return: CX = state
  3311.                 0000h not instanced
  3312.                 other instanced (DOS 5+ kernel returns 0001h)
  3313.                 DX = segment of DOS drivers or 0000h for
  3314.                     default of 0070h
  3315.                 ES:BX -> patch table (see below)
  3316.         0001h set patches in DOS
  3317.         DX = bit mask of patch requests
  3318.             bit 0 enable critical sections
  3319.             bit 1 NOP setting/checking user ID
  3320.             bit 2 turn INT 21/AH=3Fh on STDIN into polling loop
  3321.             bit 3 trap stack fault in "SYSINIT" to WIN386
  3322.             bit 4 BIOS patch to trap "Insert disk X:" to WIN386
  3323.         Return: AX = B97Ch
  3324.             BX = bit mask of patches applied
  3325.             DX = A2ABh
  3326.         0002h remove patches in DOS (ignored by DOS 5.0 kernel)
  3327.         DX = bit mask of patch requests (see function 0001h)
  3328.         Return: CX = 0000h (DOS 5-6)
  3329.         Note:    return values are ignored by DOSMGR in Windows 3.1
  3330.         0003h get size of DOS data structures
  3331.         DX = bit mask of request (only one bit can be set)
  3332.             bit 0: Current Directory Structure size
  3333.         Return: if supported request:
  3334.                 AX = B97Ch
  3335.                 CX = size in bytes of requested structure
  3336.                 DX = A2ABh
  3337.             else:
  3338.                 CX = 0000h
  3339.                 all other registers preserved
  3340.         0004h determine instanced data structures
  3341.         Return: AX = B97Ch if supported
  3342.             DX = A2ABh if supported (DOS 5+ kernel returns 0000h)
  3343.             BX = bit mask of instanced items
  3344.                 bit 0: CDS
  3345.                 bit 1: SFT
  3346.                 bit 2: device list
  3347.                 bit 3: DOS swappable data area
  3348.         0005h get device driver size
  3349.         ES = segment of device driver
  3350.         Return: DX:AX = 0000h:0000h on error (not dev. driver segment)
  3351.             DX:AX = A2ABh:B97Ch if successful
  3352.                 BX:CX = size of device driver in bytes
  3353. Notes:    DOSMGR (DOS Manager) will check whether the OEM DOS/BIOS data has
  3354.       been instanced via this API and will not perform its own default
  3355.       instancing of the normal DOS/BIOS data if so; if this API is not
  3356.       supported, DOSMGR will also try to access instancing data through
  3357.       INT 2F/AX=1603h
  3358.     these functions are supported by the DOS 5+ kernel; DOSMGR contains
  3359.       tables of instancing information for earlier versions of DOS
  3360.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  3361.       DOSMGR's behavior and instancing in general
  3362. SeeAlso: AX=1603h,AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1684h
  3363.  
  3364. Format of patch table:
  3365. Offset    Size    Description
  3366.  00h  2 BYTEs    DOS version (major, minor)
  3367.  02h    WORD    offset in DOS data segment of "SAVEDS"
  3368.  04h    WORD    offset in DOS data segment of "SAVEBX"
  3369.  06h    WORD    offset in DOS data segment of InDOS flag
  3370.  08h    WORD    offset in DOS data segment of User ID word
  3371.  0Ah    WORD    offset in DOS data segment of "CritPatch" table to enable
  3372.         critical section calls (see INT 2A/AH=80h)
  3373.  0Ch    WORD    (DOS 5+ only) offset in DOS data segment of "UMB_HEAD",
  3374.         containing segment of last MCB in conventional memory
  3375. --------E-2F1607BX22C0-----------------------
  3376. INT 2F - Rational Systems DOS/4GW - ???
  3377.     AX = 1607h
  3378.     BX = 22C0h
  3379.     ???
  3380. Return: ???
  3381. SeeAlso: INT 15/AX=BF02h,INT 15/AX=BF04h
  3382. --------W-2F1608-----------------------------
  3383. INT 2F C - MS Windows - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST
  3384.     AX = 1608h
  3385. Notes:    called after all installable devices have been initialized
  3386.     real-mode software may be called between the Windows enhanced-mode init
  3387.       call (AX=1605h) and this call; the software must detect this
  3388.       situation
  3389. SeeAlso: AX=1605h,AX=1609h
  3390. --------W-2F1609-----------------------------
  3391. INT 2F C - MS Windows - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST
  3392.     AX = 1609h
  3393. Note:    called at the beginning of a normal exit sequence; not made in the
  3394.       event of a fatal system crash
  3395. SeeAlso: AX=1606h,AX=1608h
  3396. --------W-2F160A-----------------------------
  3397. INT 2F - MS Windows 3.1 - IDENTIFY WINDOWS VERSION AND TYPE
  3398.     AX = 160Ah
  3399. Return: AX = 0000h if call supported
  3400.         BX = version (BH=major, BL=minor)
  3401.         CX = mode (0002h = standard, 0003h = enhanced)
  3402. SeeAlso: AX=1600h,AX=4680h
  3403. --------W-2F160B-----------------------------
  3404. INT 2F - MS Windows 3.1 - IDENTIFY TSRs
  3405.     AX = 160Bh
  3406.     ES:DI -> communication structure (see below) or 0000h:0000h
  3407. Return: ES:DI -> communication structure
  3408. Desc:    this call allows Windows-aware TSRs to make themselves known to
  3409.       Windows.
  3410. Note:    the TSR should allocate a communication structure, place the given
  3411.       ES:DI pointer in the first field, and return a pointer to the new
  3412.       structure
  3413. SeeAlso: AX=1605h,AX=160Ch,AX=4B01h,AX=4B05h
  3414.  
  3415. Format of TSR-to-Windows communication structure:
  3416. Offset    Size    Description
  3417.  00h    DWORD    pointer to next structure
  3418.  04h    WORD    PSP segment
  3419.  06h    WORD    API version ID (0100h)
  3420.  08h    WORD    EXEC flags
  3421.         bit 0: "WINEXEC"
  3422.         bit 1: "LOADLIBRARY"
  3423.         bit 2: "OPENDRIVER"
  3424.  0Ah    WORD    "exec_cmd_show"
  3425.  0Ch    DWORD    "exec_cmd"
  3426.  10h  4 BYTEs    reserved (0)
  3427.  14h    DWORD    pointer to TSR ID block (see below)
  3428.  18h    DWORD    pointer to TSR data block or 0000h:0000h
  3429.  
  3430. Format of Norton Utilities 6.0 TSR ID block:
  3431. Offset    Size    Description
  3432.  00h    WORD    length of name string
  3433.  02h  N BYTEs    name of TSR's executable
  3434. --------W-2F160C-----------------------------
  3435. INT 2F - MS Windows 3.1 - DETECT ROMs
  3436.     AX = 160Ch
  3437.     ???
  3438. Return: ???
  3439. Note:    used by ROM Windows
  3440. SeeAlso: AX=160Bh
  3441. --------m-2F1610-----------------------------
  3442. INT 2F - XMS v1.x only - GET DRIVER ADDRESS
  3443.     AX = 1610h
  3444.     details unavailable
  3445. Note:    this function and AX=1600h were only used in XMS version 1 and are now
  3446.       obsolete.  Use AX=4300h and AX=4310h instead
  3447. SeeAlso: AX=1600h,AX=4310h
  3448. --------W-2F1680-----------------------------
  3449. INT 2F - MS Windows, DPMI, various - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE
  3450.     AX = 1680h
  3451. Return: AL = 00h if the call is supported
  3452.     AL = 80h (unchanged) if the call is not supported
  3453. Notes:    programs can use this function in idle loops to enhance performance
  3454.       under multitaskers; this call is supported by MS Windows 3.0, DOS 5+,
  3455.       DPMI 1.0+, and will be supported in OS/2 2.0 for multitasking DOS
  3456.       applications
  3457.     does not block the program; it just gives up the remainder of the time
  3458.       slice
  3459.     should not be used by Windows-specific programs
  3460. SeeAlso: INT 15/AX=1000h,INT 15/AX=5305h,INT 21/AH=89h,INT 7A/BX=000Ah
  3461. --------W-2F1681-----------------------------
  3462. INT 2F - MS Windows 3+ - BEGIN CRITICAL SECTION
  3463.     AX = 1681h
  3464. Notes:    used to prevent a task switch from occurring
  3465.     should be followed by an INT 2F/AX=1682h call as soon as possible
  3466.     nested calls are allowed, and must be followed by an appropriate number
  3467.       of "end critical section" calls
  3468.     not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and
  3469.       increment by hand.
  3470. SeeAlso: AX=1682h,INT 15/AX=101Bh,INT 21/AH=34h
  3471. --------W-2F1682-----------------------------
  3472. INT 2F - MS Windows 3+ - END CRITICAL SECTION
  3473.     AX = 1682h
  3474. Notes:    not supported in Windows/386 2.x.  Get InDOS flag with INT 21/AH=34h
  3475.       and decrement by hand, taking care not to decrement InDOS flag
  3476.       through zero
  3477. SeeAlso: AX=1681h,INT 15/AX=101Ch,INT 21/AH=34h
  3478. --------W-2F1683-----------------------------
  3479. INT 2F - MS Windows 3+ - GET CURRENT VIRTUAL MACHINE ID
  3480.     AX = 1683h
  3481. Return: BX = current virtual machine (VM) ID
  3482. Notes:    Windows itself currently runs in VM 1, but this can't be relied upon
  3483.     VM IDs are reused when VMs are destroyed
  3484.     an ID of 0 will never be returned
  3485. SeeAlso: AX=1684h,AX=1685h,AX=168Bh
  3486. --------W-2F1684-----------------------------
  3487. INT 2F - MS Windows - GET DEVICE API ENTRY POINT
  3488.     AX = 1684h
  3489.     BX = virtual device (VxD) ID (see below)
  3490.     ES:DI = 0000h:0000h
  3491. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  3492. Note:    some Windows enhanced-mode virtual devices provide services that
  3493.       applications can access.  For example, the Virtual Display Device
  3494.       (VDD) provides an API used in turn by WINOLDAP.
  3495. SeeAlso: AX=1683h
  3496.  
  3497. Values for VxD ID:
  3498. Value    Name   CallOut V86 PM    Description
  3499.  0001h    VMM        N  N    Virtual Machine Manager
  3500.  0002h    Debug
  3501.  0003h    VPICD        Y  Y    Virtual Prog. Interrupt Controller (PIC) Device
  3502.  0004h    VDMAD        N  N    Virtual Direct Memory Access (DMA) Device
  3503.  0005h    VTD        Y  Y    Virtual Timer Device
  3504.  0006h    V86MMGR        Y    N  N    Virtual 8086 Mode Device
  3505.  0007h    PageSwap    N  N    Paging Device
  3506.  0008h    Parity        N  N    Parity-check trapper
  3507.  0009h    Reboot        N  Y    Ctrl-Alt-Del handler
  3508.  000Ah    VDD        N  Y    Virtual Display Device (GRABBER)
  3509.  000Bh    VSD        N  N    Virtual Sound Device
  3510.  000Ch    VMD        Y    Y  Y    Virtual Mouse Device
  3511.  000Dh    VKD        N  Y    Virtual Keyboard Device
  3512.  000Eh    VCD        N  Y    Virtual COMM Device
  3513.  000Fh    VPD            Virtual Printer Device
  3514.  0010h    VHD            Virtual Hard Disk Device (Windows 3.0)
  3515.  0010h    BLOCKDEV    N  N    Virtual Hard Disk Device (Windows 3.1)
  3516.  0010h    IOS        N  Y    (Chicago)
  3517.  0011h    VMCPD        Y  Y    Virtual Math CoProcessor Device
  3518.  0012h    EBIOS        N  N    Reserve EBIOS page (e.g., on PS/2)
  3519.  0013h    BIOSXLAT    N  N    Map ROM BIOS API between prot & V86 mode
  3520.  0014h    VNETBIOS    Y    N  N    Virtual NetBIOS Device
  3521.  0015h    DOSMGR        Y    Y  N    DOS data instancing
  3522.  0016h    WINLOAD
  3523.  0017h    SHELL        N  Y
  3524.  0018h    VMPOLL        N  N
  3525.  0019h    VPROD
  3526.  001Ah    DOSNET        N  N    assures network integrity across VMs
  3527.  001Ah    VNETWARE    Y  Y    Novell NetWare DOSNET replacement
  3528.  001Bh    VFD        N  N    Virtual Floppy Device
  3529.  001Ch    VDD2            Secondary display adapter
  3530.  001Ch    LoadHi        N  N    Netroom LoadHi Device (RMLODHI.VXD)
  3531.  001Ch    LoadHi        N  N    386MAX LoadHi Device (386MAX.VXD)
  3532.  001Ch    LoadHi        N  N    Win386 LoadHi Device (EMM386.EXE)
  3533.  001Dh    WINDEBUG    N  Y
  3534.  001Dh    TDDebug        N  Y
  3535.  001Eh    TSRLoad            TSR instance utility
  3536.  001Fh    BiosHook        BIOS interrupt hooker VxD
  3537.  0020h    Int13        N    N  N
  3538.  0021h    PageFile    N  Y    Paging File device
  3539.  0022h    SCSI
  3540.  0023h    MCA_POS
  3541.  0024h    SCSIFD            SCSI FastDisk device
  3542.  0025h    VPEND            Pen device
  3543.  0026h    APM            Advanced Power Management
  3544.  0027h    VXDLDR        Y  Y    (Chicago)
  3545.  002Ah    VWIN32        N  Y    (Chicago)
  3546.  002Bh    VCOMM        Y  Y    (Chicago)
  3547.  0030h    MACH32        N  Y    ATI Mach32 video card
  3548.  0033h    CONFIGMG    Y  Y    (Chicago)
  3549.  0033h    EDOS        N  N    Windows DOS Box Enhancer by Mom's Software
  3550.  0036h    VFBACKUP    Y  Y    (Chicago)
  3551.  0038h    VCOND        Y  Y    (Chicago)
  3552.  0051h    ISAPNP        N  N
  3553.  008Dh    ESDI_506    N  N    (Chicago)
  3554.  0090h    voltrack    N  N
  3555.  00FDh    FAKEIDE        N  N    (Chicago)
  3556.  0102h    CV1        N  N    Microsoft C/C++ 7.00+ CodeView for Windows
  3557.  0200h    VIPX        Y  Y    NetWare Virtual IPX Driver
  3558.  0201h    VNWLSERV    N  N    NetWare Lite 1.1 Server (SERVER.EXE)
  3559.  0202h    WINICE        Y  Y    SoftICE/W
  3560.  0203h    VCLIENT        N  Y    NetWare Lite 1.1+ Client
  3561.  0205h    VCAFT        N  N    Novell Virtual CAFT Driver (LANalyzer for Win)
  3562.  0206h    VTXRX        N  N    Novell Virtual TXRX Driver (LANalyzer for Win)
  3563.  0234h    VCOMMUTE    Y  Y    PC Tools Commute
  3564.  0442h    VTDAPI        N  Y    MMSys Win386 VTAPI Device
  3565.  0444h    VADMAD            Autoinitialize DMA (Windows 3.0)
  3566.  0445h    VSBD        Y  Y    WinResKit: Sound Blaster Device
  3567.  0460h    UNIMODEM    N  Y
  3568.  0483h    VSHARE        N  N    Windows for Workgroups Virtual SHARE
  3569.  0484h    IFSMgr        Y  N    (Chicago) installable file system manager
  3570.  0486h    VFAT        Y  Y    (Chicago)
  3571.  048Bh    VCACHE        Y  Y
  3572.  1021h    VMB        Y  Y    Microsoft C/C++ 7.00 WXSRVR
  3573.  1022h    Vpfd        Y  Y    Microsoft C/C++ 7.00
  3574.  1025h    MMD        Y  Y    Microsoft C/C++ 8.00, Visual C/C++ 1.00
  3575.  21EAh    VADLIBWD    N  Y    Adlib Waveform Driver by John Ridges
  3576.  2200h    VFINTD        Y  Y    Norton VFINTD (Norton Desktop)
  3577.  22C0h    ???        Y        Rational Systems DOS/4GW ??? 
  3578.  2402h    ZMAX        N  N    Qualitas 386MAX v7 DOSMAX handler
  3579.  24A0h    VNSS        N  Y    Norton Screen Saver (Norton Desktop)
  3580.  24A1h    VNDWD        Y  Y    Norton VNDWD Device (Norton Desktop)
  3581.  2640h    VASBID        N  Y    WinResKit: Artisoft Sounding Board Device
  3582.  2860h    COMMTASK    N    N  Y    Windows 386-mode preemptive tasker by James
  3583.                 A. Kenemuth of Interabang Computing
  3584.  28C0h    VXD        N    Y  Y    Generic VxD for real and protected mode by
  3585.                 Andrew Schulman in MSJ February 1993
  3586.  292Dh    VSBPD        Y  Y    Sound Blaster Pro
  3587.  3098h    VstlthD        N    N  N    for QEMM Stealth ROM mode
  3588.  310Eh    WPS        N  N    MS DevNet CD-ROM: Windows Process Status
  3589.  7FE0h    VWFD        N    Y  Y    ??? by Neil Sandlin of Microsoft
  3590.  7FE1h    VWATCHD        N    Y  Y    basic driver w/ no functionality except tracing
  3591.                 by Keith Jin of Microsoft PSS
  3592.  7FE5h    VFINTD        N    Y  Y    Virtual Floppy Interrupt trapper by Neil
  3593.                 Sandlin of Microsoft
  3594.  7FE7h    VMPAGES        N    Y  Y    demonstration of exporting VxD services, by
  3595.                 Neil Sandlin of Microsoft
  3596.  7FE9h    VIdleD        N    N  N    demonstration of Call_When_Idle function, by
  3597.                 Bernie McIlroy of Microsoft
  3598.  7FEBh    VMIOD        N    N  N    Virtual Monitor I/O Traffic Device, by Neil
  3599.                 Sandlin of Microsoft
  3600.  7FEDh    VMIRQD        N    N  N    Virtual Monitor IRQ Traffic Device, by Neil
  3601.                 Sandlin of Microsoft
  3602. Note:    The high bit of the VxD ID is reserved for future use. The
  3603.     next 10 bits are the OEM number which is assigned by Microsoft. The
  3604.     low 5 bits are the device number.  Naturally, this scheme has not
  3605.     been adhered to since there are now more than 32 different VxDs.
  3606.  
  3607. Call VTD.386 entry point with:
  3608.     AX = 0000h get VTD version number
  3609.         Return: AH = major version
  3610.             AL = minor version
  3611.     AX = 0100h get current clock tick time
  3612.         Return: EDX:EAX = clock tick time in 840ns units since Windows was
  3613.                 started
  3614.     AX = 0101h get current system time in milliseconds
  3615.         Return: EAX = time in milliseconds that Windows has been running
  3616.     AX = 0102h get current virtual machine time
  3617.         Return: EAX = cumulative amount of time the virtual machine has
  3618.             been active, in milliseconds
  3619. Note:    should only be called directly when TOOLHELP.DLL TimerCount() cannot
  3620.       be called
  3621.  
  3622. Call DOSMGR entry point with:
  3623.     AX = 0000h get DOSMGR version
  3624.         Return: CF clear
  3625.             AX = version (AH = major, AL = minor)
  3626.     AX = 0001h set critical focus
  3627.         Return: CF clear
  3628.     AX = 0002h crash current virtual machine
  3629.         Return: never
  3630.         Note:   displays message box stating that "application has been
  3631.               stopped by the DOSMGR device"
  3632.     AX = 0003h enter critical section
  3633.         Note:   this function assumes that the code for INT 2A/AX=8001h
  3634.               and INT 2A/AX=8002h have been modified for Windows
  3635.     AX = 0004h get VM ID byte
  3636.         Return: CF clear if successful
  3637.             ES:DI -> VM ID byte
  3638.             CF set on error
  3639.         Note:   this function fails if the INT 2A modifications have not
  3640.               yet been applied
  3641.     AX = 0005h inform Windows of possible media change
  3642.         BL = drive number (00h=A:)
  3643.         Return: CF clear if successful
  3644.             CF set on error
  3645.  
  3646. Call VADMAD entry point with:
  3647.     DX = operation
  3648.         0000h set VADMAD mode
  3649.         AX = desired mode
  3650.         0001h set VADMAD channel
  3651.         AX = desired channel
  3652. Note:    after setting mode/channel, start the DMA operation with an OUT to
  3653.       I/O port 0Bh (channels 0-3) or D6h (channels 4-7)
  3654. --------W-2F1685-----------------------------
  3655. INT 2F - MS Windows - SWITCH VMs AND CALLBACK
  3656.     AX = 1685h
  3657.     BX = VM ID of virtual machine to switch to
  3658.     CX = flags
  3659.         bit 0 wait until interrupts enabled
  3660.         bit 1 wait until critical section unowned
  3661.         bits 2-15 reserved (zero)
  3662.     DX:SI = priority boost (see VMM.INC)
  3663.     ES:DI -> FAR procedure to callback
  3664. Return: CF set on error
  3665.         AX = error code
  3666.         01h invalid VM ID
  3667.         02h invalid priority boost
  3668.         03h invalid flags
  3669.     CF clear if successful
  3670.         event will be or has been called
  3671. Notes:    some DOS devices, such as networks, need to call functions in a
  3672.       specific VM. This call forces the appropriate VM to be installed.
  3673.     the callback procedure must preserve all registers and return with IRET
  3674. SeeAlso: AX=1683h,INT 15/AX=1117h
  3675. --------E-2F1686-----------------------------
  3676. INT 2F - DOS Protected-Mode Interface - DETECT MODE
  3677.     AX = 1686h
  3678. Return: AX = 0000h if operating in protected mode under DPMI (INT 31 available)
  3679.     AX nonzero if in real/V86 mode or no DPMI (INT 31 not available)
  3680. SeeAlso: AX=1687h
  3681. --------E-2F1687-----------------------------
  3682. INT 2F - DOS Protected-Mode Interface - INSTALLATION CHECK
  3683.     AX = 1687h
  3684. Return: AX = 0000h if installed
  3685.         BX = flags
  3686.         bit 0: 32-bit programs supported
  3687.         CL = processor type (02h=80286, 03h=80386, 04h=80486)
  3688.         DH = DPMI major version
  3689.         DL = two-digit DPMI minor version (binary)
  3690.         SI = number of paragraphs of DOS extender private data
  3691.         ES:DI -> DPMI mode-switch entry point
  3692.     AX nonzero if not installed
  3693. SeeAlso: AX=1686h,AX=43E0h,AX=DE01h/BX=4450h,AX=FB42h/BX=0001h
  3694. SeeAlso: INT 31/AX=0400h,INT 31/AX=5702h,INT 38/AH=10h
  3695.  
  3696. Call mode switch entry point with:
  3697.     AX = flags
  3698.         bit 0: set if 32-bit program
  3699.     ES = real mode segment of buffer for DPMI private data (ignored if
  3700.         SI was zero)
  3701. Return: CF set on error
  3702.         program still in real mode
  3703.         AX = error code (DPMI 1.0+)
  3704.            8011h unable to allocate all necessary descriptors
  3705.            8021h 32-bit program specified, but 16-bit DPMI host
  3706.     CF clear if successful
  3707.         CS = 16-bit selector corresponding to real-mode CS
  3708.         SS = selector corresponding to real-mode SS (64K limit)
  3709.         DS = selector corresponding to real-mode DS (64K limit)
  3710.         ES = selector to program's PSP (100h byte limit)
  3711.         FS = GS = 0
  3712.         high word of ESP = 0 if 32-bit program
  3713.         program now in protected mode
  3714. Note:    this entry point is only called for the initial switch to protected
  3715.       mode
  3716. --------W-2F1688-----------------------------
  3717. INT 2F U - MS Windows 3.0, 386MAX v6.01 - GET SELECTOR TO LDT
  3718.     AX = 1688h
  3719. Return: AX = status??? (0000h for 386MAX)
  3720.     BX = selector for ???
  3721. --------W-2F1689-----------------------------
  3722. INT 2F U - MS Windows 3.0+ - KERNEL IDLE CALL
  3723.     AX = 1689h
  3724.     ???
  3725. Return: ???
  3726. SeeAlso: AX=1680h,INT 15/AX=1000h,INT 28
  3727. --------E-2F168A-----------------------------
  3728. INT 2F - DPMI 0.9+ - GET VENDOR-SPECIFIC API ENTRY POINT
  3729.     AX = 168Ah
  3730.     DS:(E)SI = selector:offset of ASCIZ vendor name
  3731. Return: AL = status
  3732.         00h successful
  3733.            ES:(E)DI -> extended API entry point
  3734.         8Ah unsuccessful
  3735. Notes:    the vendor name is used to determine which entry point to return; it is
  3736.       case-sensitive
  3737.     available in protected mode only
  3738.     32-bit applications use ESI and EDI, 16-bit applications use SI and DI
  3739.     this call is present but not documented for DPMI 0.9
  3740.     the Borland C++ 3.1 DPMILOAD does not handle requests for entry points
  3741.       other than the MS-DOS one gracefully, producing an unhandled
  3742.       exception report; this has been fixed in the Borland Pascal 7 version
  3743. SeeAlso: INT 31/AX=0A00h,INT 31/AH=57h
  3744.  
  3745. Vendor names:
  3746.  "MS-DOS"    ??? and 386MAX v6.00+
  3747.  "386MAX"    386MAX v6.00+
  3748.  "HELIX_DPMI"    Helix Netroom's DPMI server
  3749.  "Phar Lap"    Phar Lap 286|DOS-Extender RUN286
  3750.  
  3751. Call Phar Lap RUN286 entry point with:
  3752.     AX = 0000h (function "load MSW")
  3753.     BX = new value for MSW register (low word of CR0)
  3754. Return: ???
  3755. --------W-2F168B-----------------------------
  3756. INT 2F - MS Windows 3.1 - SET FOCUS TO SPECIFIED VIRTUAL MACHINE
  3757.     AX = 168Bh
  3758.     BX = virtual machine ID (see AX=1683h)
  3759. Return: AL = 00h if focus set to specified VM
  3760. Note:    documented on the Microsoft Developer's Network CD-ROM
  3761. SeeAlso: AX=1683h
  3762. --------W-2F168C-----------------------------
  3763. INT 2F - MS Windows 3.1 - RESTART COMMAND
  3764.     AX = 168Ch
  3765.     ???
  3766. Return: ???
  3767. Note:    WIN.COM executes specified application
  3768. --------W-2F1700-----------------------------
  3769. INT 2F - MS Windows "WINOLDAP" - IDENTIFY WinOldAp VERSION
  3770.     AX = 1700h
  3771. Return: AX = 1700h if this version of WINOLDAP doesn't support clipboard
  3772.     AX <> 1700h
  3773.         AL = WINOLDAP major version
  3774.         AH = WINOLDAP minor version
  3775. Program: WinOldAp (WINOLDAP.MOD) is a Microsoft Windows extension supporting
  3776.       "old" (character-mode) application access to Dynamic Data Exchange,
  3777.       menus, and the Windows clipboard.
  3778. Note:    this installation check DOES NOT follow the format used by other
  3779.       software of returning AL=FFh
  3780. SeeAlso: AX=1701h,AX=4601h
  3781. Index:    installation check;WINOLDAP
  3782. --------W-2F1701-----------------------------
  3783. INT 2F - MS Windows "WINOLDAP" - OPEN CLIPBOARD
  3784.     AX = 1701h
  3785. Return: AX <> 0     success
  3786.     AX = 0     clipboard is already open
  3787. SeeAlso: AX=1700h,AX=1702h,AX=1703h,AX=1704h
  3788. --------W-2F1702-----------------------------
  3789. INT 2F - MS Windows "WINOLDAP" - EMPTY CLIPBOARD
  3790.     AX = 1702h
  3791. Return: AX <> 0     clipboard has been emptied
  3792.     AX = 0     failure
  3793. SeeAlso: AX=1700h,AX=1701h,AX=1703h,AX=1704h
  3794. --------W-2F1703-----------------------------
  3795. INT 2F - MS Windows "WINOLDAP" - SET CLIPBOARD DATA
  3796.     AX = 1703h
  3797.     DX = clipboard format supported by WinOldAp:
  3798.         01h text
  3799.         02h bitmap
  3800.         03h metafile picture
  3801.         04h SYLK
  3802.         05h DIF
  3803.         06h TIFF
  3804.         07h OEM text
  3805.         81h DSP text
  3806.         82h DSP bitmap
  3807.     ES:BX -> data (see below)
  3808.     SI:CX = size of data
  3809. Return: AX <> 0 data copied into the Clipboard
  3810.     AX = 0 failure
  3811.  
  3812. Format of bitmap:
  3813. Offset    Size    Description
  3814.  00h    WORD    type (0000h)
  3815.  02h    WORD    width of bitmap in pixels
  3816.  04h    WORD    height of bitmap in pixels
  3817.  06h    WORD    bytes per line
  3818.  08h    BYTE    number of color planes
  3819.  09h    BYTE    number of adjacent color bits in pixel
  3820.  0Ah    DWORD    pointer to start of data
  3821.  0Eh    WORD    width in 0.1mm units
  3822.  10h    WORD    height in 0.1mm units
  3823.  12h  N BYTEs    bitmap data
  3824.  
  3825. Format of metafile picture:
  3826. Offset    Size    Description
  3827.  00h    WORD    mapping mode
  3828.  02h    WORD    X extent
  3829.  04h    WORD    Y extent
  3830.  06h    WORD    picture data
  3831. --------W-2F1704-----------------------------
  3832. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA SIZE
  3833.     AX = 1704h
  3834.     DX = clipboard format supported by WinOldAp (see AX=1703h)
  3835. Return:     DX:AX = size of data in bytes, including any headers
  3836. Failure: DX:AX = 0  no data in this format in the Clipboard
  3837. --------W-2F1705-----------------------------
  3838. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA
  3839.     AX = 1705h
  3840.     DX = clipboard format supported by WinOldAp (see AX=1703h)
  3841.     ES:BX -> buffer
  3842. Return: AX <> 0     success
  3843.     AX = 0     error, or no data in this format in Clipboard
  3844. --------W-2F1708-----------------------------
  3845. INT 2F - MS Windows "WINOLDAP" - CloseClipboard
  3846.     AX = 1708h
  3847. Return: AX <> 0 success
  3848.     AX = 0 failure
  3849. --------W-2F1709-----------------------------
  3850. INT 2F - MS Windows "WINOLDAP" - COMPACT CLIPBOARD
  3851.     AX = 1709h
  3852.     SI:CX = desired size in bytes
  3853. Return: DX:AX = number of bytes in largest block of free memory
  3854. Note:    WinOldAp is responsible for including the size of any headers
  3855. --------W-2F170A-----------------------------
  3856. INT 2F - MS Windows "WINOLDAP" - GET DEVICE CAPABILITIES
  3857.     AX = 170Ah
  3858.     DX = GDI information index
  3859.         00h device driver version
  3860.         02h device classification
  3861.         04h width in mm
  3862.         06h height in mm
  3863.         08h width in pixels
  3864.         0Ah height in pixels
  3865.         0Ch bits per pixel
  3866.         0Eh number of bit planes
  3867.         10h number of brushes supported by device
  3868.         12h number of pens supported by device
  3869.         14h number of markers supported by device
  3870.         16h number of fonts supported by device
  3871.         18h number of colors
  3872.         1Ah size required for device descriptor
  3873.         1Ch curve capabilities
  3874.         1Eh line capabilities
  3875.         20h polygon capabilities
  3876.         22h text capabilities
  3877.         24h clipping capabilities
  3878.         26h bitblt capabilities
  3879.         28h X aspect
  3880.         2Ah Y aspect
  3881.         2Ch length of hypotenuse of aspect
  3882.         58h logical pixels per inch of width
  3883.         5Ah logical pixels per inch of height
  3884. Return:     AX = integer value of the desired item (see below)
  3885. Note:  This function returns the device-capability bits for the given display
  3886.  
  3887. Values for device classification:
  3888.  00h    vector plotter
  3889.  01h    raster display
  3890.  02h    raster printer
  3891.  03h    raster camera
  3892.  04h    character-stream, PLP
  3893.  05h    Metafile, VDM
  3894.  06h    display-file
  3895.  
  3896. Bitfields for curve capabilities:
  3897. Bit(s)    Description
  3898.  0    circles
  3899.  1    pie wedges
  3900.  2    chord arcs
  3901.  3    ellipses
  3902.  4    wide lines
  3903.  5    styled lines
  3904.  6    wide styled lines
  3905.  7    interiors
  3906.  
  3907. Bitfields for line capabilities:
  3908. Bit(s)    Description
  3909.  1    polylines
  3910.  2    markers
  3911.  3    polymarkers
  3912.  4    wide lines
  3913.  5    styled lines
  3914.  6    wide styled lines
  3915.  7    interiors
  3916.  
  3917. Bitfields for polygon capabilities:
  3918. Bit(s)    Description
  3919.  0    polygons
  3920.  1    rectangles
  3921.  2    trapezoids
  3922.  3    scanlines
  3923.  4    wide borders
  3924.  5    styled borders
  3925.  6    wide styled borders
  3926.  7    interiors
  3927.  
  3928. Bitfields for text capabilities:
  3929. Bit(s)    Description
  3930.  0    output precision character
  3931.  1    output precision stroke
  3932.  2    clippping precision stroke
  3933.  3    90-degree character rotation
  3934.  4    arbitrary character rotation
  3935.  5    independent X and Y scaling
  3936.  6    double-size
  3937.  7    integer scaling
  3938.  8    continuous scaling
  3939.  9    bold
  3940.  10    italic
  3941.  11    underline
  3942.  12    strikeout
  3943.  13    raster fonts
  3944.  14    vector fonts
  3945.  15    reserved
  3946.  
  3947. Values for clipping capabilities:
  3948.  00h    none
  3949.  01h    clipping to rectangles
  3950.  
  3951. Bitfields for raster capabilities:
  3952. Bit(s)    Description
  3953.  0    simple bitBLT
  3954.  1    device requires banding support
  3955.  2    device requires scaling support
  3956.  3    supports >64K bitmap
  3957. ----------2F18-------------------------------
  3958. INT 2F U - MS-Manager
  3959.     AH = 18h
  3960.     ???
  3961. Return: ???
  3962. --------l-2F1900-----------------------------
  3963. INT 2F U - DOS 4.x only SHELLB.COM - INSTALLATION CHECK
  3964.     AX = 1900h
  3965. Return: AL = 00h  not installed
  3966.          FFh  installed
  3967. --------l-2F1901BL00-------------------------
  3968. INT 2F U - DOS 4.x only SHELLB.COM - SHELLC.EXE INTERFACE
  3969.     AX = 1901h
  3970.     BL = 00h if SHELLC transient
  3971.          01h if SHELLC resident
  3972.     DS:DX -> far call entry point for resident SHELLC.EXE
  3973. Return: ES:DI -> SHELLC.EXE workspace within SHELLB.COM
  3974. Note:    SHELLB.COM and SHELLC.EXE are parts of the DOS 4.x shell
  3975. --------l-2F1902-----------------------------
  3976. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM INTERFACE
  3977.     AX = 1902h
  3978.     ES:DI -> ASCIZ full filename of current batch file, with at least the
  3979.          final filename element uppercased
  3980.     DS:DX -> buffer for results
  3981. Return: AL = 00h  failed, either
  3982.           (a) final filename element quoted at ES:DI does not match
  3983.               identity of shell batch file quoted as parameter of most
  3984.               recent call of SHELLB command, or
  3985.           (b) no more Program Start Commands available.
  3986.     AL= FFh     success, then:
  3987.         memory at DS:[DX+1] onwards filled as:
  3988.         DX+1:    BYTE    count of bytes of PSC
  3989.         DX+2: N BYTEs    Program Start Command text
  3990.             BYTE    0Dh terminator
  3991. Explanation: COMMAND.COM executes the result of this call in preference to
  3992.     reading a command from a batch file. Thus the batch file does not
  3993.     advance in execution for so long as SHELLB provides PSCs from its
  3994.     workspace. The PSCs are planted in SHELLB workspace by SHELLC, the user
  3995.     menu interface. The final PSC of a sequence is finished with a
  3996.     GOTO COMMON, which causes a loop back in the batch file which called
  3997.     SHELLC so as to execute SHELLC again. The check on batch file name
  3998.     permits PSCs to CALL nested batch files while PSCs are still stacked
  3999.     up for subsequent execution.
  4000. --------l-2F1903-----------------------------
  4001. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM interface
  4002.     AX = 1903h
  4003.     ES:DI -> ASCIZ batch file name as for AX=1902h
  4004. Return: AL = FFh if quoted batch file name matches last SHELLB parameter
  4005.     AL = 00h if it does not
  4006. --------l-2F1904-----------------------------
  4007. INT 2F U - DOS 4.x only SHELLB.COM - SHELLB transient to TSR intrface
  4008.     AX = 1904h
  4009. Return: ES:DI -> name of current shell batch file:
  4010.         WORD    number of bytes of name following
  4011.         BYTEs    (8 max) uppercase name of shell batch file
  4012. --------V-2F1A00-----------------------------
  4013. INT 2F - DOS 4+ ANSI.SYS - INSTALLATION CHECK
  4014.     AX = 1A00h
  4015. Return: AL = FFh if installed
  4016. Notes:    AVATAR.SYS also responds to this call
  4017.     documented for DOS 5+, but undocumented for DOS 4.x
  4018. --------V-2F1A00BX414E-----------------------
  4019. INT 2F - ANSIPLUS.SYS - INSTALLATION CHECK
  4020.     AX = 1A00h
  4021.     BX = 414Eh ('AN')
  4022.     CX = 5349h ('SI')
  4023.     DX = 2B2Bh ('++')
  4024. Return: AL = FFh if installed
  4025.         CF clear
  4026.         ES:BX -> INT 29 entry point
  4027. Program: ANSIPLUS.SYS is a CON device driver by Kristofer Sweger which
  4028.       replaces the normal ANSI.SYS is a more powerful version with many
  4029.       additional features
  4030. Note:    ANSIPLUS also identifies itself as ANSI.SYS if BX,CX, or DX differ
  4031.       from the magic values above
  4032. --------V-2F1A00BX4156-----------------------
  4033. INT 2F - AVATAR.SYS - INSTALLATION CHECK
  4034.     AX = 1A00h
  4035.     BX = 4156h ('AV')
  4036.     CX = 4154h ('AT')
  4037.     DX = 4152h ('AR')
  4038. Return: AL = FFh if installed
  4039.         CF clear
  4040.         BX = AVATAR protocol level supported
  4041.         CX = driver type
  4042.         0000h AVATAR.SYS
  4043.         4456h DVAVATAR.COM inside DESQview window
  4044.         DX = 0016h
  4045. Program: AVATAR.SYS is a CON replacement by George Adam Stanislav which
  4046.       interprets AVATAR command codes in the same way that ANSI interprets
  4047.       ANSI command codes
  4048. Notes:    AVATAR also identifies itself as ANSI.SYS if BX, CX, or DX differ from
  4049.       the magic values
  4050. --------V-2F1A01-----------------------------
  4051. INT 2F U - DOS 4+ ANSI.SYS internal - GET/SET DISPLAY INFORMATION
  4052.     AX = 1A01h
  4053.     CL = function
  4054.         7Fh for GET
  4055.         5Fh for SET
  4056.     DS:DX -> parm block as for INT 21,AX=440Ch,CX=037Fh/035Fh respectively
  4057. Return: CF set on error
  4058.         AX = error code (many non-standard)
  4059.     CF clear if successful
  4060.         AX destroyed
  4061. Note:    presumably this is the DOS IOCTL interface to ANSI.SYS
  4062. SeeAlso: AX=1A02h,INT 21/AX=440Ch
  4063. --------V-2F1A02-----------------------------
  4064. INT 2F U - DOS 4+ ANSI.SYS internal - MISCELLANEOUS REQUESTS
  4065.     AX = 1A02h
  4066.     DS:DX -> parameter block (see below)
  4067. Note:    DOS 5+ chains to previous handler if AL > 02h on call
  4068. SeeAlso: AX=1A01h
  4069.  
  4070. Format of parameter block:
  4071. Offset    Size    Description
  4072.  00h    BYTE    subfunction
  4073.         00h set/reset interlock
  4074.         01h get /L flag
  4075.  01h    BYTE    interlock state
  4076.         00h=reset, 01h=set
  4077.           This interlock prevents some of the ANSI.SYS post-processing
  4078.           in its hook onto INT 10, AH=00h mode set
  4079.  02h    BYTE    (returned)
  4080.         00h if /L not in effect
  4081.         01h if /L in effect
  4082. --------V-2F1A21-----------------------------
  4083. INT 2F - AVATAR.SYS - SET DRIVER STATE
  4084.     AX = 1A21h (AL='!')
  4085.     DS:SI -> command string with one or more state characters
  4086.     CX = length of command string
  4087. Return: CF set on error (invalid subfunction)
  4088.     CF clear if successful
  4089. Note:    the characters in the state string are interpreted left to right, and
  4090.       need not be in any particular order
  4091. SeeAlso: AX=1A3Fh
  4092.  
  4093. Values for state characters:
  4094.  'a'    activate driver
  4095.  'd'    disable driver
  4096.  'f'    use fast screen output
  4097.  'g'    always convert gray keys (+ and -) to function keys
  4098.  'G'    never convert gray keys
  4099.  'l'    convert gray keys only when ScrollLock active
  4100.  's'    use slow screen output
  4101.  't'    Tandy 1000 keyboard (not yet implemented)
  4102. --------V-2F1A3C-----------------------------
  4103. INT 2F U - AVATAR.SYS v0.11 - ???
  4104.     AX = 1A3Ch
  4105.     ???
  4106. Return: CX = 0000h
  4107. --------V-2F1A3E-----------------------------
  4108. INT 2F U - AVATAR.SYS v0.11 - ???
  4109.     AX = 1A3Eh
  4110.     CL = ???
  4111.     CH = ???
  4112.     DL = ???
  4113.     DH = ???
  4114. Return: CL = ???
  4115.     CH = ???
  4116.     DL = ???
  4117.     DH = ???
  4118. --------V-2F1A3F-----------------------------
  4119. INT 2F - AVATAR.SYS - QUERY DRIVER STATE
  4120.     AX = 1A3Fh (AL='?')
  4121.     ES:DI -> buffer
  4122.     CX = length of buffer in bytes
  4123. Return: CF clear
  4124.     CX = actual size of returned info
  4125. Note:    the returned information consists of multiple letters whose meanings
  4126.       are described under AX=1A21h
  4127. SeeAlso: AX=1A21h
  4128. --------S-2F1A42BX4156-----------------------
  4129. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ3 HANDLER
  4130.     AX = 1A42h
  4131.     BX = 4156h ('AV')
  4132.     ES:DI -> FAR handler for serial port using IRQ3
  4133.     DS = data segment needed by handler
  4134. Return: AX = 1A42h if ASD not installed
  4135.        = 0000h if no more room
  4136.        else handle to use when uninstalling
  4137. Notes:    the handler need not save/restore registers or signal EOI to the
  4138.       interrupt controller
  4139.     the handler should return AX=0000h if the interrupt was meant for it,
  4140.       and either leave AX unchanged or return a non-zero value otherwise
  4141.     the most recently installed handler will be called first, continuing
  4142.       to earlier handlers until one returns AX=0000h
  4143. SeeAlso: AX=1A43h,AX=1A62h
  4144. --------S-2F1A43BX4156-----------------------
  4145. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ4 HANDLER
  4146.     AX = 1A43h
  4147.     BX = 4156h ('AV')
  4148.     ES:DI -> FAR handler for serial port using IRQ4
  4149.     DS = data segment needed by handler
  4150. Return: AX = 1A43h if ASD not installed
  4151.        = 0000h if no more room
  4152.        else handle to use when uninstalling
  4153. Notes:    (see AX=1A42h)
  4154. SeeAlso: AX=1A42h,AX=1A63h
  4155. --------V-2F1A44BX4156-----------------------
  4156. INT 2F - AVATAR.SYS v0.11+ - GET DATA SEGMENT
  4157.     AX = 1A44h
  4158.     BX = 4156h ('AV')
  4159. Return: AX = 0000h
  4160.     DS = data segment
  4161.     CX = size of data segment
  4162. Note:    AVATAR.SYS calls this function whenever it is invoked.    If each
  4163.       process under a multitasker hooks this function and provides a
  4164.       separate data segment, AVATAR.SYS becomes fully reentrant.
  4165. SeeAlso: AX=1A21h,AX=1A3Fh
  4166. --------V-2F1A52-----------------------------
  4167. INT 2F U - AVATAR.SYS v0.11 - GET ???
  4168.     AX = 1A52h
  4169.     CX = size of buffer
  4170.     ES:DI -> buffer
  4171. Return: ??? copied into user buffer
  4172. Note:    the maximum size of the data which may be copied is returned by
  4173.       AX=1A72h
  4174. SeeAlso: AX=1A72h
  4175. --------V-2F1A53-----------------------------
  4176. INT 2F U - AVATAR.SYS v0.11 - ???
  4177.     AX = 1A53h
  4178.     CL = ??? (00h-05h)
  4179.     ???
  4180. Return: ???
  4181. --------S-2F1A62BX4156-----------------------
  4182. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ3 HANDLER
  4183.     AX = 1A62h
  4184.     BX = 4156h ('AV')
  4185.     CX = handle for IRQ routine returned by AX=1A42h
  4186. SeeAlso: AX=1A42h,AX=1A63h
  4187. --------S-2F1A63BX4156-----------------------
  4188. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ4 HANDLER
  4189.     AX = 1A63h
  4190.     BX = 4156h ('AV')
  4191.     CX = handle for IRQ routine returned by AX=1A43h
  4192. SeeAlso: AX=1A43h,AX=1A62h
  4193. --------V-2F1A72-----------------------------
  4194. INT 2F U - AVATAR.SYS v0.11 - GET ??? SIZE
  4195.     AX = 1A72h
  4196. Return: CX = maximum size of ???
  4197. SeeAlso: AX=1A52h
  4198. --------V-2F1A7B-----------------------------
  4199. INT 2F U - AVATAR.SYS v0.11 - ???
  4200.     AX = 1A7Bh
  4201. Return: AX = 0000h
  4202.     CX = 0000h
  4203. --------V-2F1A7D-----------------------------
  4204. INT 2F U - AVATAR.SYS v0.11 - ???
  4205.     AX = 1A7Dh
  4206. Return: AX = ???
  4207. --------V-2F1AADDX0000-----------------------
  4208. INT 2F U - AVATAR.SYS v0.11 - ???
  4209.     AX = 1AADh
  4210.     DX = 0000h
  4211.     CX = subfunction (00h-0Ch)
  4212.     ???
  4213. Return: AX = 0000h if DX was nonzero
  4214.     ???
  4215. --------m-2F1B00-----------------------------
  4216. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - INSTALLATION CHECK
  4217.     AX = 1B00h
  4218. Return: AL = FFh if installed
  4219. Note:    XMA2EMS.SYS extension is only installed if DOS has page frames to hide.
  4220.     This extension hooks onto INT 67/AH=58h and returns from that call data
  4221.       which excludes the physical pages being used by DOS.
  4222. SeeAlso: AH=1Bh"FRAME INFO"
  4223. --------m-2F1B-------------------------------
  4224. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - GET HIDDEN FRAME INFORMATION
  4225.     AH = 1Bh
  4226.     AL <> 00h
  4227.     DI = hidden physical page number
  4228. Return: AX = FFFFh if failed (no such hidden page)
  4229.     AX = 0000h if OK, then
  4230.          ES = segment of page frame
  4231.          DI = physical page number
  4232. Notes:    this corresponds to the data edited out of the INT 67/AH=58h call
  4233.     FASTOPEN makes this call with AL = FFh
  4234. SeeAlso: AX=1B00h
  4235. --------V-2F2300-----------------------------
  4236. INT 2F - DR-DOS 5.0 GRAFTABL - INSTALLATION CHECK
  4237.     AX = 2300h
  4238. Return: AH = FFh
  4239. Note:    this installation check does not follow the usual format
  4240. SeeAlso: AH=23h,AX=2E00h
  4241. --------V-2F23-------------------------------
  4242. INT 2F - DR-DOS 5.0 GRAFTABL - GET GRAPHICS DATA
  4243.     AH = 23h
  4244.     AL nonzero
  4245. Return: AH = FFh
  4246.     ES:BX -> graphics data (8 bytes for each character from 80h to FFh)
  4247. SeeAlso: AX=2300h,AX=2E00h
  4248. --------T-2F2700-----------------------------
  4249. INT 2F - DR-DOS 6.0 TaskMAX - INSTALLATION CHECK
  4250.     AX = 2700h
  4251. Return: AL = 00h not installed
  4252.        = FFh installed
  4253. --------T-2F2701-----------------------------
  4254. INT 2F - DR-DOS 6.0 TaskMAX - GET STATUS
  4255.     AX = 2701h
  4256. Return: AX = maximum simultaneous tasks
  4257.     BX = index into TASK_IDS of current foreground task
  4258.     CX = currently-active tasks
  4259.     DX = version number (DR-DOS 6.0 = 0001h)
  4260.     ES:SI -> TASK_IDS
  4261.     ES:DI -> name table (array of 8-byte names, NUL-terminated if <8 chars)
  4262. Notes:    do not attempt to create a new task if CX == AX
  4263.     the task's index is its position on the task menu, while its ID is the
  4264.       position within the internal task name table
  4265. SeeAlso: AX=2714h,AX=2716h
  4266. --------T-2F2702-----------------------------
  4267. INT 2F - DR-DOS 6.0 TaskMAX - GET PER-TASK EMS LIMIT
  4268.     AX = 2702h
  4269. Return: DX = maximum pages INT 67/AH=42h will report available
  4270. Note:    TaskMAX does not limit EMS allocations other than by limiting the
  4271.       amount which is reported as being available at a given time
  4272. SeeAlso: AX=2703h,INT 67/AH=42h
  4273. --------T-2F2703-----------------------------
  4274. INT 2F - DR-DOS 6.0 TaskMAX - SET PER-TASK EMS LIMIT
  4275.     AX = 2703h
  4276.     DX = maximum pages INT 67/AH=42h should report available
  4277. Return: DX = new maximum for reporting
  4278. SeeAlso: AX=2702h,INT 67/AH=42h
  4279. --------T-2F2704-----------------------------
  4280. INT 2F - DR-DOS 6.0 TaskMAX - REGISTER/UNREGISTER TASK MANAGER
  4281.     AX = 2704h
  4282.     DL = subfunction
  4283.         00h unregister task manager
  4284.         01h register task manager
  4285. Return: DL = status
  4286.         00h registered
  4287.         01h unregistered
  4288. Notes:    a task manager replaces TaskMAX's menu system with its own user
  4289.       interface; while one is registered, the TaskMAX hotkeys and
  4290.       Ctrl-Alt-Del invoke the manager rather than the built-in menu system
  4291.     unregister the task manager before terminating it
  4292. SeeAlso: AX=2705h
  4293. Index:    hotkeys;TaskMAX
  4294. --------T-2F2705-----------------------------
  4295. INT 2F - DR-DOS 6.0 TaskMAX - ENABLE/DISABLE DIRECT SWITCHING
  4296.     AX = 2705h
  4297.     DL = subfunction
  4298.         00h disable keystrokes for switching to next/prev/specified task
  4299.         01h enable
  4300. Return: nothing
  4301. Note:    should only be called by a registered task manager (see AX=2704h)
  4302. SeeAlso: AX=2704h,AX=2706h
  4303. --------T-2F2706-----------------------------
  4304. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO SPECIFIED TASK
  4305.     AX = 2706h
  4306.     DX = task index (see AX=2701h) of task to be activated
  4307. Return: DX = task index of previously-active task
  4308. SeeAlso: AX=2705h,AX=2707h,AX=2715h
  4309. --------T-2F2707-----------------------------
  4310. INT 2F - DR-DOS 6.0 TaskMAX - CREATE NEW TASK
  4311.     AX = 2707h
  4312.     DS:DX -> ASCIZ pathname of executable
  4313.     ES:BX -> parameter block (see below)
  4314.     CX = number of ticks before automatic return to task manager
  4315.         (0000h = run until termination or explicitly switched)
  4316. Return: DX = new task's task index (FFFFh if task terminated)
  4317. SeeAlso: AX=2706h,AX=2708h
  4318.  
  4319. Format of parameter block:
  4320. Offset    Size    Description
  4321.  00h    WORD    reserved, should be 0000h
  4322.  02h    DWORD    pointer to command tail to be copied into child's PSP
  4323.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  4324.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  4325. --------T-2F2708-----------------------------
  4326. INT 2F - DR-DOS 6.0 TaskMAX - DELETE TASK
  4327.     AX = 2708h
  4328.     DX = task index
  4329. Return: DX = FFFFh (task deleted)
  4330. Notes:    this call should only be used for abnormal task termination, after
  4331.       first checking for open files with AX=270Ch; should not be used
  4332.       with programs that allocate EMS or XMS memory
  4333.     switches to specified task first
  4334. SeeAlso: AX=2707h
  4335. --------T-2F2709-----------------------------
  4336. INT 2F - DR-DOS 6.0 TaskMAX - NAME TASK
  4337.     AX = 2709h
  4338.     DX = task index
  4339.     DS:SI -> 8-byte name (8 NULs = remove name)
  4340. Return: AL = task flags
  4341.         00h ID unused or task terminated
  4342.         01h ID in use, task name table entry valid
  4343.         81h ID in use, task name fixed
  4344.     BX = task ID
  4345.     ES:DI -> name in task name table (see AX=2701h)
  4346. Note:    the task retains the given name until it terminates or the name is
  4347.       removed by specifying a name of 8 NULs.
  4348. SeeAlso: AX=2701h,AX=2707h
  4349. --------T-2F270A-----------------------------
  4350. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK INDEX TO TASK ID
  4351.     AX = 270Ah
  4352.     DX = task index
  4353. Return: DX = task ID (FFFFh if index invalid)
  4354. Note:    task IDs stay constant, while indexes can change when other tasks are
  4355.       deleted
  4356. SeeAlso: AX=2701h,AX=270Bh
  4357. --------T-2F270B-----------------------------
  4358. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK ID TO TASK INDEX
  4359.     AX = 270Bh
  4360.     DX = task ID
  4361. Return: DX = task index (FFFFh if task not active)
  4362. SeeAlso: AX=270Ah
  4363. --------T-2F270C-----------------------------
  4364. INT 2F - DR-DOS 6.0 TaskMAX - CHECK OPEN FILES
  4365.     AX = 270Ch
  4366.     DX = task index
  4367. Return: AX = number of files currently open for specified task
  4368. SeeAlso: AX=2708h
  4369. --------T-2F270D-----------------------------
  4370. INT 2F - DR-DOS 6.0 TaskMAX - CHECK IF TASK RUNNING PRIMARY COMMAND INTERPRETER
  4371.     AX = 270Dh
  4372.     DX = task index
  4373. Return: DX = status
  4374.         0000h if primary command interpreter (COMMAND.COM, etc.) running
  4375.         0001h if not in root shell for task
  4376. Note:    TaskMAX will return 0001h if the specified task has spawned another
  4377.       command interpreter with AX=2707h
  4378. SeeAlso: AX=2707h,AX=270Ch
  4379. --------T-2F270E-----------------------------
  4380. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET TEXT PASTE LEAD-IN
  4381.     AX = 270Eh
  4382.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  4383.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  4384. Return: ES:DI -> current lead-in string
  4385. Note:    the specified sequence of keystrokes is sent to the application before
  4386.       every line of a text-mode spreadsheet paste
  4387. SeeAlso: AX=270Fh,AX=2710h,AX=2713h
  4388. --------T-2F270F-----------------------------
  4389. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE LEAD-IN
  4390.     AX = 270Fh
  4391.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  4392.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  4393. Return: ES:DI -> current lead-in string
  4394. Note:    the specified sequence of keystrokes is sent to the application before
  4395.       every number in a numeric-mode spreadsheet paste
  4396. SeeAlso: AX=270Eh,AX=2710h,AX=2711h,AX=2713h
  4397. --------T-2F2710-----------------------------
  4398. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET PASTE LINE TERMINATOR STRING
  4399.     AX = 2710h
  4400.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  4401.     DS:SI -> pasting terminator string (character/scan-code pairs)
  4402. Return: ES:DI -> current terminator string
  4403. Note:    the specified sequence of keystrokes is sent to the application after
  4404.       every line of a spreadsheet paste operation
  4405. SeeAlso: AX=270Eh,AX=270Fh,AX=2713h
  4406. --------T-2F2711-----------------------------
  4407. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE DECIMAL POINT
  4408.     AX = 2711h
  4409.     DX = ASCII code for separator (FFFFh to get current)
  4410. Return: DL = current separator character
  4411. SeeAlso: AX=270Fh
  4412. --------T-2F2712-----------------------------
  4413. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE EXPORTING TASK DATA
  4414.     AX = 2712h
  4415.     DX = task index
  4416. --------T-2F2713-----------------------------
  4417. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE PASTE OPERATION
  4418.     AX = 2713h
  4419.     DX = task index
  4420.     CX = paste mode
  4421.         0000h alphanumeric
  4422.         0001h numeric
  4423.         0002h text
  4424. SeeAlso: AX=270Eh,AX=270Fh,AX=2710h,AX=2711h
  4425. --------T-2F2714-----------------------------
  4426. INT 2F - DR-DOS 6.0 TaskMAX - GET SWAP SPACE INFO
  4427.     AX = 2714h
  4428. Return: CX = total KB of swap space
  4429.     DX = available KB of swap space
  4430. SeeAlso: AX=2701h
  4431. --------T-2F2715-----------------------------
  4432. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO TASK MANAGER
  4433.     AX = 2715h
  4434. Return: only after calling task is again selected
  4435. SeeAlso: AX=2706h
  4436. --------T-2F2716-----------------------------
  4437. INT 2F - DR-DOS 6.0 TaskMAX - GET PASTE BUFFER STATUS
  4438.     AX = 2716h
  4439. Return: AX = 0000h if AX=2716h,AX=2717h,AX=2718h supported
  4440.         CX = bytes in paste buffer
  4441.         DX = current generation number (updated after every copy operation)
  4442. SeeAlso: AX=2701h,AX=2713h,AX=2714h,AX=2717h,AX=2718h
  4443. --------T-2F2717-----------------------------
  4444. INT 2F - DR-DOS 6.0 TaskMAX - PASTE DATA DIRECTLY TO APPLICATION BUFFER
  4445.     AX = 2717h
  4446.     CX = bytes in destination buffer
  4447.     ES:DI -> destination buffer
  4448. Return: AX = 0000h if function supported
  4449.         CX = bytes actually copied (FFFFh if buffer too small)
  4450.         DX = current generation number for paste buffer
  4451. Note:    the destination buffer may be too small if another task adds more data
  4452.       to the paste buffer after the AX=2716h call but before this call
  4453. SeeAlso: AX=2713h,AX=2716h,AX=2718h
  4454. --------T-2F2718-----------------------------
  4455. INT 2F - DR-DOS 6.0 TaskMAX - COPY DATA DIRECTLY INTO PASTE BUFFER
  4456.     AX = 2718h
  4457.     CX = bytes in source buffer
  4458.     DS:SI -> source buffer (plain ASCII, lines terminated with CR LF)
  4459. Return: AX = 0000h if function supported
  4460.         CX = bytes actually copied
  4461.         DX = current generation number for paste buffer
  4462. SeeAlso: AX=2712h,AX=2716h,AX=2717h
  4463. ----------2F2719-----------------------------
  4464. INT 2F - Novell DOS 7 TaskMGR - NOP
  4465.     AX = 2719h to 271Bh
  4466. ----------2F271C-----------------------------
  4467. INT 2F U - Novell DOS 7 TaskMGR - ???
  4468.     AX = 271Ch
  4469.     DX = ???
  4470.         bit 0: ???
  4471. Return: ???
  4472.     ---if DX bit 0 set---
  4473.     AX = 0031h
  4474.     CX = 0000h
  4475. --------T-2F2781-----------------------------
  4476. INT 2F - Novell DOS 7 TaskMGR - BEGIN CRITICAL SECTION???
  4477.     AX = 2781h
  4478. Return: ???
  4479. SeeAlso: AX=2782h
  4480. --------T-2F2782-----------------------------
  4481. INT 2F - Novell DOS 7 TaskMGR - END CRITICAL SECTION???
  4482.     AX = 2782h
  4483. Return: ???
  4484. SeeAlso: AX=2781h
  4485. --------T-2F278F-----------------------------
  4486. INT 2F - Novell DOS 7 TaskMGR - ???
  4487.     AX = 278Fh
  4488.     ???
  4489. Return: ???
  4490. SeeAlso: AX=2782h
  4491. --------F-2F2A-------------------------------
  4492. INT 2F - Gammafax DOS Dispatcher INTERFACE
  4493.     AH = 2Ah
  4494. Note:    details not available at this time
  4495. SeeAlso: AX=8000h"FaxBIOS",AX=C000h/BX=444Bh,AX=CB00h,AX=CBDDh,INT 66"BitFax"
  4496. --------V-2F2E00-----------------------------
  4497. INT 2F U - Novell DOS 7 - GRAFTABL - INSTALLATION CHECK
  4498.     AX = 2E00h
  4499. Return: AH = FFh if installed
  4500. Note:    this installation check does not follow the usual format of setting
  4501.       AL to FFh
  4502. SeeAlso: AX=2300h,AH=2Eh"GRAFTABL"
  4503. --------V-2F2E-------------------------------
  4504. INT 2F U - Novell DOS 7 - GRAFTABL - GET FONT TABLE
  4505.     AH = 2Eh
  4506.     AL nonzero
  4507. Return: AH = FFh if installed
  4508.         ES:BX -> graphics data (8 bytes per character from 80h to FFh)
  4509. SeeAlso: AX=2E00h,AH=23h"GRAFTABL"
  4510. --------t-2F3900-----------------------------
  4511. INT 2F - Kingswood TSR INTERFACE - COMPATIBILITY MODE
  4512.     AX = 3900h
  4513. Return: AL = status
  4514.         00h not installed
  4515.         FFh one or more TSRs using this interface is installed
  4516.         DX may be destroyed
  4517. Note:    this function is provided to that the multiplex number will appear used
  4518.       to other programs
  4519. SeeAlso: AH=39h/BL=00h
  4520. --------t-2F39--BL00-------------------------
  4521. INT 2F - Kingswood TSR INTERFACE - INSTALLATION CHECK
  4522.     AH = 39h
  4523.     BL = 00h
  4524.     AL = TSR ID number (01h-FFh, currently only 01h-1Bh used) (see below)
  4525. Return: AL = status
  4526.         00h not installed
  4527.         FFh installed
  4528.         DX = segment address of resident module
  4529. Note:    All of Kingswood Software's TSRs use this interface.  Usually the
  4530.       resident module is installed by allocating a block of upper memory,
  4531.       setting its owner ID to 000Ah (used by DOS), and filling the MCB name
  4532.       field with the TSR's name.
  4533. SeeAlso: AX=3900h,AH=39h/BL=01h
  4534.  
  4535. Values for TSR ID number:
  4536.  01h    TSR Windows
  4537.  02h    NOBUSY
  4538.  03h    CD STACK
  4539.  04h    DISK WATCH
  4540.  05h    PUSHBP
  4541.  06h    ALIAS
  4542.  07h    KEYMACRO
  4543.  08h    SLOWDOWN
  4544.  09h    ANSIGRAB
  4545.  0Ah    TEE
  4546.  0Bh    FASTMOUS
  4547.  0Ch    EXTWILD
  4548.  0Dh    BREAKOUT
  4549.  0Eh    STOPDISK
  4550.  0Fh    MEMINIT
  4551.  10h    JANUSEXT
  4552.  11h    CAPS
  4553.  12h    ANSI
  4554.  13h    TRAPPER
  4555.  14h    EATMEM
  4556.  15h    WPJOKE
  4557.  16h    SHOWDOS
  4558.  17h    LOGINTS
  4559.  18h    BLANKVGA
  4560.  19h    SWAPEXEC
  4561.  1Ah    SHELL
  4562.  1Bh    TSRGAMES
  4563.  
  4564. Format of TSR modules:
  4565. Offset    Size    Description
  4566.  00h  4 BYTEs    signature "FTSR"
  4567.  04h    WORD    segment address of this module (used to check validity)
  4568.  06h    WORD    number of words to skip (usually 0000h if no PSP present)
  4569.  08h  N WORDs    module-defined data that must be at a fixed segment offset
  4570.         (usually only a PSP if file access is required)
  4571.      5N BYTEs    interrupt list (see below)
  4572.     BYTE    FFh terminator
  4573.  
  4574. Format of interrupt list entry:
  4575. Offset    Size    Description
  4576.  00h    BYTE    interrupt number (00h-FEh)
  4577.  01h    WORD    offset within segment of DWORD pointer to previous interrupt
  4578.  03h    WORD    offset within segment of begin of interrupt handler code
  4579. --------t-2F39--BL01-------------------------
  4580. INT 2F - Kingswood TSR INTERFACE - REMOVAL CHECK
  4581.     AH = 39h
  4582.     BL = 01h
  4583.     AL = TSR ID number (01h-FFh) (see AH=39h/BL=00h)
  4584. Return: AL = status
  4585.         00h not ready to be removed
  4586.         FFh resident module may be removed by deassigning the interrupts
  4587.         hooked by the TSR and deallocating the TSR's memory block
  4588.     AH,BX,CX,DX,ES may be destroyed
  4589. SeeAlso: AX=3900h,AH=39h/BL=00h
  4590. --------t-2F39-------------------------------
  4591. INT 2F - Kingswood TSR INTERFACE - APPLICATION-SPECIFIC FUNCTION CALLS
  4592.     AH = 39h
  4593.     BL = function number (02h-FFh)
  4594.     AL = TSR ID number (01h-FFh)
  4595.     CX,DX,SI,DI,DS,ES may contain parameters
  4596.     BH reserved for use by the function dispatcher
  4597. Return: as appropriate for the called function
  4598. SeeAlso: AX=3900h,AH=39h/BL=00h,AX=3901h/BL=02h
  4599. --------r-2F3901BL02-------------------------
  4600. INT 2F - Kingswood TSR Windows - OPEN WINDOW
  4601.     AX = 3901h
  4602.     BL = 02h
  4603. Return: AX = error code (0000h if successful)
  4604.     SI,DI,DS,ES preserved
  4605. Notes:    opens the next TSR window on top of any others.     Only three
  4606.       TSR windows can be opened at any one time.  The three windows
  4607.       are all 40x11 characters, partly overlapping.
  4608. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=03h,AX=3901h/BL=05h,AX=3901h/BL=06h
  4609. --------r-2F3901BL03-------------------------
  4610. INT 2F - Kingswood TSR Windows - HIDE WINDOWS
  4611.     AX = 3901h
  4612.     BL = 03h
  4613. Return: AX = error code (0000h if successful)
  4614.     SI,DI,DS,ES preserved
  4615. Notes:    Hide any visible TSR windows from view.
  4616. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=05h
  4617. --------r-2F3901BL04-------------------------
  4618. INT 2F - Kingswood TSR Windows - SHOW WINDOWS
  4619.     AX = 3901h
  4620.     BL = 04h
  4621. Return: AX = error code (0000h if successful)
  4622.     SI,DI,DS,ES preserved
  4623. Notes:    Re-display all TSR windows after a HIDE WINDOWS call.
  4624. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=03h
  4625. --------r-2F3901BL05-------------------------
  4626. INT 2F - Kingswood TSR Windows - CLOSE WINDOW
  4627.     AX = 3901h
  4628.     BL = 05h
  4629. Return: AX = error code (0000h if successful)
  4630.     SI,DI,DS,ES preserved
  4631. Notes:    Close the last opened TSR window.
  4632. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  4633. --------r-2F3901BL06-------------------------
  4634. INT 2F - Kingswood TSR Windows - SET WINDOW TITLE
  4635.     AX = 3901h
  4636.     BL = 06h
  4637.     DS:SI -> title string
  4638. Return: AX = error code (0000h if successful)
  4639.     SI,DI,DS,ES preserved
  4640. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  4641. --------r-2F3901BL07-------------------------
  4642. INT 2F - Kingswood TSR Windows - POSITION CURSOR
  4643.     AX = 3901h
  4644.     BL = 07h
  4645.     CH = Y coordinate (0-10)
  4646.     CL = X coordinate (0-39)
  4647. Return: AX = error code (0000h if successful)
  4648.     SI,DI,DS,ES preserved
  4649. Note:    the hardware cursor is always disabled when a TSR window is opened;
  4650.       this call only sets a text position
  4651. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=08h,AX=3901h/BL=09h
  4652. --------r-2F3901BL08-------------------------
  4653. INT 2F - Kingswood TSR Windows - DISPLAY STRING
  4654.     AX = 3901h
  4655.     BL = 08h
  4656.     DS:SI -> string
  4657. Return: AX = error code (0000h if successful)
  4658.     SI,DI,DS,ES preserved
  4659. Notes:    The text is not clipped.
  4660.     This routine understands Tab, NewLine and Carriage Return
  4661. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  4662. --------r-2F3901BL09-------------------------
  4663. INT 2F - Kingswood TSR Windows - SCROLL WINDOW
  4664.     AX = 3901h
  4665.     BL = 09h
  4666.     CL = scroll direction: 01h up, FFh down, 00h clear window
  4667. Return: AX = error code (0000h if successful)
  4668.     SI,DI,DS,ES preserved
  4669. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  4670. --------r-2F3901BL0A-------------------------
  4671. INT 2F - Kingswood TSR Windows - SOUND BEEPER
  4672.     AX = 3901h
  4673.     BL = 0Ah
  4674.     DX = sound divisor, or 0 for silence.
  4675.          (divide 1843200 by required frequency to get value for DX)
  4676.     CL = sound length in 18.2 Hz clock ticks
  4677. Return: AX = error code (0000h if successful)
  4678.     SI,DI,DS,ES preserved
  4679. SeeAlso: AH=39h/BL=00h
  4680. --------r-2F3901BL0B-------------------------
  4681. INT 2F - Kingswood TSR Windows - ADD OR REMOVE USER
  4682.     AX = 3901h
  4683.     BL = 0Bh
  4684.     CL = number of users increment: +1 if adding a new user
  4685.                     -1 if removing a user
  4686. Return: AX = error code (0000h if successful)
  4687.     SI,DI,DS,ES preserved
  4688. Note:    the TSR windows resident module may only be removed when the internal
  4689.       user count is zero
  4690. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  4691. --------V-2F3912BL03-------------------------
  4692. INT 2F - Kingswood ANSI display driver - SET COMPATIBILITY MODE
  4693.     AX = 3912h
  4694.     BL = 03h
  4695.     CL = new mode (00h fast, FFh BIOS)
  4696. Return: AL = old compatibility mode
  4697.     SI,DI,DS,ES preserved
  4698. SeeAlso: AX=3900h,AX=3912h/BL=04h
  4699. --------V-2F3912BL04-------------------------
  4700. INT 2F - Kingswood ANSI display driver - SET FLAGS
  4701.     AX = 3912h
  4702.     BL = 04h
  4703.     CL = new flags
  4704.         bit 0: do not wrap at end of line
  4705.         bit 1: wait for beeps to end before displaying next character
  4706.         bit 2: do not use graphics cursor
  4707. Return: AL = old flags
  4708.     SI,DI,DS,ES preserved
  4709. SeeAlso: AX=3900h,AX=3912h/BL=03h
  4710. --------W-2F4000-----------------------------
  4711. INT 2F - Windows 3.x (OS/2 2.x???) - GET VIRTUAL DEVICE DRIVER (VDD) CAPABLTIES
  4712.     AX = 4000h
  4713. Return: AL = 01h does not virtualize video access
  4714.          02h virtualizes the video when in text mode
  4715.          03h virtualizes the video when in text mode or single plane
  4716.          graphics modes
  4717.          04h virtualizes the video when in text mode, single plane
  4718.          graphics modes, and VGA multiplane modes
  4719.          FFh virtualizes the video fully
  4720. Note:    this function is used by display drivers to find out what capabilities
  4721.       exist for the VDD driver and also trigger the VDD driver to call
  4722.       functions 4005h and 4006h.  This function also gives the Video Driver
  4723.       hardware access to the video registers.
  4724. --------O-2F4001-----------------------------
  4725. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO BACKGROUND
  4726.     AX = 4001h
  4727. Note:    called by OS/2 when the DOS box is about to be placed in the background
  4728.       and the video driver should save any necessary state
  4729. SeeAlso: AX=4002h,AX=4005h
  4730. --------O-2F4002-----------------------------
  4731. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO FOREGROUND
  4732.     AX = 4002h
  4733. Note:    called by OS/2 when the DOS box is about to be placed in the foreground
  4734.       and the video driver should restore the previously-saved state
  4735. SeeAlso: AX=4001h,AX=4006h
  4736. --------W-2F4003-----------------------------
  4737. INT 2F - Windows 3.x - ENTERING VIDEO DRIVER CRITICAL SECTION
  4738.     AX = 4003h
  4739. Note:    This critical section must be exited within 1 second.
  4740. SeeAlso: AX=4004h
  4741. --------W-2F4004-----------------------------
  4742. INT 2F - Windows 3.x - EXITING VIDEO DRIVER CRITICAL SECTION
  4743.     AX = 4004h
  4744. SeeAlso: AX=4003h
  4745. --------W-2F4005-----------------------------
  4746. INT 2F C - Windows 3.x - SWITCHING DOS TO BACKGROUND
  4747.     AX = 4005h
  4748. Note:    called by Windows when the DOS box is about to be placed in the
  4749.       background and the video driver should save any necessary state
  4750.       information (this may be called only in Standard mode)
  4751. SeeAlso: AX=4001h,AX=4006h
  4752. --------W-2F4006-----------------------------
  4753. INT 2F C - Windows 3.x - SWITCHING DOS TO FOREGROUND
  4754.     AX = 4006h
  4755. Note:    called by Windows when the DOS box is about to be placed in the
  4756.       foreground and the video driver should restore any necessary state
  4757.       information (this may be called only in Standard mode)
  4758. SeeAlso: AX=4002h,AX=4005h
  4759. --------W-2F4007-----------------------------
  4760. INT 2F - Windows 3.x - ENABLE VDD TRAPPING OF VIDEO REGISTERS
  4761.     AX = 4007h
  4762. Note:    used by Windows Standard mode
  4763. --------E-2F4040-----------------------------
  4764. INT 2F - PharLap 286|DOS-Extender Lite v2.5 - ???
  4765.     AX = 4040h
  4766. Return: BX:CX -> ???
  4767. --------N-2F4100-----------------------------
  4768. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - INSTALLATION CHECK
  4769.     AX = 4100h
  4770. Return: CF clear if successful
  4771.         AL = FFh
  4772.     CF set on error
  4773.         AX = ???
  4774. Notes:    MINIPOP and NETPOPUP provide a network message popup service
  4775.     LAN Manager enhanced mode adds features beyond the standard redirector
  4776.       file/printer services
  4777. SeeAlso: AX=118Ah,AX=4103h,AX=4104h,AH=42h,AH=4Bh
  4778. --------N-2F4103-----------------------------
  4779. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  4780.     AX = 4103h
  4781. Return: ???
  4782. SeeAlso: AX=4100h,AX=4104h
  4783. --------N-2F4104-----------------------------
  4784. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  4785.     AX = 4104h
  4786. Return: ???
  4787. SeeAlso: AX=4100h,AX=4103h
  4788. --------N-2F42-------------------------------
  4789. INT 2F - LAN Manager 2.0 DOS Enhanced MSRV.EXE - MESSENGER SERVICE
  4790.     AH = 42h
  4791.     ???
  4792. Return: ???
  4793. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  4794.       file/printer services
  4795. SeeAlso: AX=118Ah,AX=4100h,AH=4Bh
  4796. --------m-2F4300-----------------------------
  4797. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) v2+ - INSTALLATION CHECK
  4798.     AX = 4300h
  4799. Return: AL = 80h XMS driver installed
  4800.     AL <> 80h no driver
  4801. Notes:    XMS gives access to extended memory and noncontiguous/nonEMS memory
  4802.       above 640K
  4803.     this installation check DOES NOT follow the format used by other
  4804.       software
  4805. SeeAlso: AX=4310h
  4806. Index:    installation check;XMS version 2+
  4807. --------m-2F4308-----------------------------
  4808. INT 2F U - HIMEM.SYS v2.77+ - GET A20 HANDLER NUMBER
  4809.     AX = 4308h
  4810. Return: AL = 43h if supported
  4811.         BL = A20 handler number (value of /MACHINE:nn switch)
  4812.         BH = AT A20 switch time (00h medium, 01h fast, 02h slow)
  4813. Note:    if the A20 handler number returned in BL is 00h, an external handler
  4814.       is being used (see AX=4330h)
  4815. SeeAlso: AX=4309h,AX=4330h
  4816. --------m-2F4309-----------------------------
  4817. INT 2F U - HIMEM.SYS v3.09+ - GET XMS HANDLE TABLE
  4818.     AX = 4309h
  4819. Return: AL = 43h if function supported
  4820.         ES:BX -> XMS handle table (see below)
  4821. Note:    HIMEM.SYS v3.09 is part of MS-DOS 6.0.
  4822. SeeAlso: AX=4308h
  4823.  
  4824. Format of XMS handle table:
  4825. Offset    Size    Description
  4826.  00h    BYTE    ??? (01h in HIMEM.SYS v3.09)
  4827.  01h    BYTE    size of one handle descriptor
  4828.  02h    WORD    number of handles (default = 20h)
  4829.  04h    DWORD    pointer to XMS handle array (see below)
  4830.  
  4831. Format of XMS handle descriptor [array]:
  4832. Offset    Size    Description
  4833.  00h    BYTE    flag
  4834.         01h=free, 02h=used, 04h=in pool but not associated with any EMB
  4835.  01h    BYTE    lock count (00h=unlocked)
  4836.  02h    DWORD    address of XMS block in KB (shift left by 10 for abs. address)
  4837.  06h    DWORD    size of XMS block in KB
  4838. --------m-2F4310-----------------------------
  4839. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) v2+ - GET DRIVER ADDRESS
  4840.     AX = 4310h
  4841. Return: ES:BX -> driver entry point
  4842. Note:    HIMEM.SYS v2.77 chains to previous handler if AH is not 00h or 10h
  4843. SeeAlso: AX=4300h
  4844.  
  4845. Call the driver entry point with:
  4846.     AH    function
  4847.     00h  Get XMS version number
  4848.          Return: AX = XMS version (in BCD, AH=major, AL=minor)
  4849.              BX = internal revision number (in BCD for HIMEM.SYS)
  4850.              DX = 0001h if HMA (1M to 1M + 64K) exists
  4851.               0000h if HMA does not exist
  4852.     01h  Request High Memory Area (1M to 1M + 64K)
  4853.          DX = memory in bytes (for TSR or device drivers)
  4854.           FFFFh if application program
  4855.          Return: AX = 0001h success
  4856.             = 0000h failure
  4857.                BL = error code (80h,81h,90h,91h,92h) (see below)
  4858.     02h  Release High Memory Area
  4859.          Return: AX = 0001h success
  4860.             = 0000h failure
  4861.                BL = error code (80h,81h,90h,93h) (see below)
  4862.     03h  Global enable A20, for using the HMA
  4863.          Return: AX = 0001h success
  4864.             = 0000h failure
  4865.                BL = error code (80h,81h,82h) (see below)
  4866.     04h  Global disable A20
  4867.          Return: AX = 0001h success
  4868.             = 0000h failure
  4869.                BL = error code (80h,81h,82h,94h) (see below)
  4870.     05h  Local enable A20, for direct access to extended memory
  4871.          Return: AX = 0001h success
  4872.             = 0000h failure
  4873.                BL = error code (80h,81h,82h) (see below)
  4874.     06h  Local disable A20
  4875.          Return: AX = 0001h success
  4876.             = 0000h failure
  4877.                BL = error code (80h,81h,82h,94h) (see below)
  4878.     07h  Query A20 state
  4879.          Return: AX = 0001h enabled
  4880.             = 0000h disabled
  4881.              BL = error code (00h,80h,81h) (see below)
  4882.     08h  Query free extended memory, not counting HMA
  4883.          BL = 00h (some implementations leave BL unchanged on success)
  4884.          Return: AX = size of largest extended memory block in KB
  4885.              DX = total extended memory in KB
  4886.              BL = error code (00h,80h,81h,A0h) (see below)
  4887.     09h  Allocate extended memory block
  4888.          DX = Kbytes needed
  4889.          Return: AX = 0001h success
  4890.                DX = handle for memory block
  4891.             = 0000h failure
  4892.                BL = error code (80h,81h,A0h) (see below)
  4893.     0Ah  Free extended memory block
  4894.          DX = handle of block to free
  4895.          Return: AX = 0001h success
  4896.             = 0000h failure
  4897.                BL = error code (80h,81h,A2h,ABh) (see below)
  4898.     0Bh  Move extended memory block
  4899.          DS:SI -> EMM structure (see below)
  4900.          Note: if either handle is 0000h, the corresponding offset is
  4901.            considered to be an absolute segment:offset address in
  4902.            directly addressable memory
  4903.          Return: AX = 0001h success
  4904.             = 0000h failure
  4905.                BL = error code (80h-82h,A3h-A9h) (see below)
  4906.     0Ch  Lock extended memory block
  4907.          DX = handle of block to lock
  4908.          Return: AX = 0001h success
  4909.                DX:BX = 32-bit linear address of locked block
  4910.             = 0000h failure
  4911.                BL = error code (80h,81h,A2h,ACh,ADh) (see below)
  4912.          Note: MS Windows 3.x rejects this function for handles allocated
  4913.             after Windows started
  4914.     0Dh  Unlock extended memory block
  4915.          DX = handle of block to unlock
  4916.          Return: AX = 0001h success
  4917.             = 0000h failure
  4918.                BL = error code (80h,81h,A2h,AAh) (see below)
  4919.     0Eh  Get handle information
  4920.          DX = handle for which to get info
  4921.          Return: AX = 0001h success
  4922.                BH = block's lock count
  4923.                BL = number of free handles left
  4924.                DX = block size in KB
  4925.             = 0000h failure
  4926.                BL = error code (80h,81h,A2h) (see below)
  4927.          BUG: MS Windows 3.10 acts as though unallocated handles are in use
  4928.          Note: MS Windows 3.00 has problems with this call
  4929.     0Fh  Reallocate extended memory block
  4930.          DX = handle of block
  4931.          BX = new size of block in KB
  4932.          Return: AX = 0001h success
  4933.             = 0000h failure
  4934.                BL = error code (80h,81h,A0h-A2h,ABh) (see below)
  4935.     10h  Request upper memory block (nonEMS memory above 640K)
  4936.          DX = size of block in paragraphs
  4937.          Return: AX = 0001h success
  4938.                BX = segment address of UMB
  4939.                DX = actual size of block
  4940.             = 0000h failure
  4941.                BL = error code (80h,B0h,B1h) (see below)
  4942.                DX = largest available block
  4943.     11h  Release upper memory block
  4944.          DX = segment address of UMB to release
  4945.          Return: AX = 0001h success
  4946.             = 0000h failure
  4947.                BL = error code (80h,B2h) (see below)
  4948.     12h  (XMS v3.0) Reallocate upper memory block
  4949.          DX = segment address of UMB to resize
  4950.          BX = new size of block in paragraphs
  4951.          Return: AX = 0001h success
  4952.             = 0000h failure
  4953.                BL = error code (80h,B0h,B2h) (see below)
  4954.                DX = maximum available size (RM386)
  4955.     34h  (QEMM 5.11 only, undocumented) ???
  4956.     44h  (QEMM 5.11 only, undocumented) ???
  4957.     80h  (Netroom RM386 v6.00) Reallocate upper memory block
  4958.          this function is identical to function 12h
  4959.     81h  (Netroom RM386 v6.00) re-enable HMA allocation
  4960.          Return: AX = 0001h (success)
  4961.     82h  (Netroom RM386 v6.00) Cloaking API
  4962.          DX = XMS handle of block containing protected-mode code
  4963.          CL = code size (00h 16-bit, else 32-bit)
  4964.          ESI, EDI = parameters to pass to protected-mode code
  4965.          Return: AX = status
  4966.              0001h success
  4967.              0000h failed
  4968.                  BL = error code (A2h,B0h) (see below)
  4969.          Note: this calls offset 0 in the XMS memory block with
  4970.         EBX = physical address of block's start
  4971.         CS = code selector for XMS block at EBX (16-bit or 32-bit)
  4972.         DS = data selector for XMS block, starting at EBX
  4973.         ES = selector for V86 memory access to full real-mode 1088K
  4974.         GS = selector for full flat address space
  4975.         ESI, EDI from V86 mode
  4976.     83h  (Netroom RM386 v6.00) Create new UMB entry
  4977.          BX = segment of high-memory block
  4978.          DX = first page of start of block
  4979.          CX = number of consecutive pages in block
  4980.          DI = start of UMB in block
  4981.          Return: AX = 0001h (success)
  4982.              DI = segment of first high-DOS block
  4983.          Note: the new UMB is not linked into the high-memory chain
  4984.     84h  (Netroom RM386 v6.00) Get all XMS handles info
  4985.          CX = size of buffer for handle info
  4986.          ES:DI -> buffer for handle info (see below)
  4987.          Return: AX = 0001h (success)
  4988.              DX = current number of allocated XMS handles
  4989.     88h  (XMS v3.0) Query free extended memory
  4990.          Return: EAX = largest block of extended memory, in KB
  4991.              BL = status
  4992.              00h success
  4993.              80h not implemented (i.e. on a 286 system)
  4994.              81h VDISK detected
  4995.              A0h all extended memory allocated
  4996.              ECX = physical address of highest byte of memory
  4997.                 (valid even on error codes 81h and A0h)
  4998.              EDX = total Kbytes of extended memory (0 if status A0h)
  4999.     89h  (XMS v3.0) Allocate any extended memory
  5000.          EDX = Kbytes needed
  5001.          Return: AX = 0001h success
  5002.                 DX = handle for allocated block (free with AH=0Ah)
  5003.             = 0000h failure
  5004.                 BL = status (80h,81h,A0h,A1h,A2h) (see below)
  5005.     8Eh  (XMS v3.0) Get extended EMB handle information
  5006.          DX = handle
  5007.          Return: AX = 0001h success
  5008.                 BH = block's lock count
  5009.                 CX = number of free handles left
  5010.                 EDX = block size in KB
  5011.             = 0000h failure
  5012.                 BL = status (80h,81h,A2h) (see below)
  5013.          BUG: DOS 6.0 HIMEM.SYS leaves CX unchanged
  5014.     8Fh  (XMS v3.0) Reallocate any extended memory block
  5015.          DX = unlocked handle
  5016.          EBX = new size in KB
  5017.          Return: AX = 0001h success
  5018.             = 0000h failure
  5019.                 BL = status (80h,81h,A0h-A2h,ABh) (see below)
  5020. Notes:    HIMEM.SYS requires at least 256 bytes free stack space
  5021.     HIMEM.SYS will fail function 01h with error code 91h if AL=40h and
  5022.       DX=KB free extended memory returned by last call of function 08h
  5023.     the XMS driver need not implement functions 10h through 12h to be
  5024.       considered compliant with the standard
  5025. BUG:    HIMEM v3.03-3.07 crash on an 80286 machine if any of the 8Xh functions
  5026.       are called
  5027.  
  5028. Error codes returned in BL:
  5029.  00h    successful
  5030.  80h    function not implemented
  5031.  81h    Vdisk was detected
  5032.  82h    an A20 error occurred
  5033.  8Eh    a general driver error
  5034.  8Fh    unrecoverable driver error
  5035.  90h    HMA does not exist or is not managed by XMS provider
  5036.  91h    HMA is already in use
  5037.  92h    DX is less than the /HMAMIN= parameter
  5038.  93h    HMA is not allocated
  5039.  94h    A20 line still enabled
  5040.  A0h    all extended memory is allocated
  5041.  A1h    all available extended memory handles are allocated
  5042.  A2h    invalid handle
  5043.  A3h    source handle is invalid
  5044.  A4h    source offset is invalid
  5045.  A5h    destination handle is invalid
  5046.  A6h    destination offset is invalid
  5047.  A7h    length is invalid
  5048.  A8h    move has an invalid overlap
  5049.  A9h    parity error occurred
  5050.  AAh    block is not locked
  5051.  ABh    block is locked
  5052.  ACh    block lock count overflowed
  5053.  ADh    lock failed
  5054.  B0h    only a smaller UMB is available
  5055.  B1h    no UMB's are available
  5056.  B2h    UMB segment number is invalid
  5057.  
  5058. Format of EMM structure:
  5059. Offset    Size    Description
  5060.  00h    DWORD    number of bytes to move (must be even)
  5061.  04h    WORD    source handle
  5062.  06h    DWORD    offset into source block
  5063.  0Ah    WORD    destination handle
  5064.  0Ch    DWORD    offset into destination block
  5065. Notes:    if source and destination overlap, only forward moves (source base
  5066.       less than destination base) are guaranteed to work properly
  5067.     if either handle is zero, the corresponding offset is interpreted
  5068.       as a real-mode address referring to memory directly addressable
  5069.       by the processor
  5070.  
  5071. Format of XMS handle info [array]:
  5072. Offset    Size    Description
  5073.  00h    BYTE    handle
  5074.  01h    BYTE    lock count
  5075.  02h    DWORD    handle size
  5076.  06h    DWORD    handle physical address (only valid if lock count nonzero)
  5077. --------m-2F4320-----------------------------
  5078. INT 2F U - HIMEM.SYS - Mach 20 SUPPORT
  5079.     AX = 4320h
  5080.     ???
  5081. Return: ???
  5082. --------m-2F4330-----------------------------
  5083. INT 2F CU - HIMEM.SYS v2.77+ - GET EXTERNAL A20 HANDLER ADDRESS
  5084.     AX = 4330h
  5085. Return: AL = 80h if external A20 handler provided
  5086.         ES:BX -> external A20 handler
  5087.         CL = A20 detection support
  5088.         00h handler is unable to report A20 state
  5089.         01h handler supports function 0002h to report A20 state
  5090. Note:    HIMEM.SYS calls this function to allow an external program to provide
  5091.       an A20 handler (i.e. to support a machine not supported by HIMEM
  5092.       itself)
  5093. SeeAlso: AX=4308h,AX=4310h
  5094.  
  5095. External A20 handler called with:
  5096.     AX = function
  5097.         0000h disable A20
  5098.         0001h enable A20
  5099.         0002h get A20 state
  5100. Return: AX = status (functions 0000h and 0001h)
  5101.         0000h failure
  5102.         0001h successful
  5103.     AX = A20 state (function 0002h)
  5104.         0000h disabled
  5105.         0001h enabled
  5106. Note:    HIMEM.SYS only calls function 0002h if the returned CL indicated that
  5107.       the handler supports the call
  5108. --------E-2F43E0-----------------------------
  5109. INT 2F - Novell DOS Protected Mode Services (DPMS) - INSTALLATION CHECK
  5110.     AX = 43E0h
  5111. Return: AX = 0000h if installed
  5112.         ES:BX -> registration structure (see below)
  5113. Note:    this specification is still in beta
  5114. SeeAlso: INT 2F/AX=1687h
  5115.  
  5116. Format of registration structure:
  5117. Offset    Size    Description
  5118.  00h    DWORD    real-mode API entry point
  5119.  04h    DWORD    16-bit protected-mode API entry point
  5120.  08h  8 BYTEs    reserved (0)
  5121.  10h  8 BYTEs    blank-padded server OEM name
  5122.  18h    WORD    flags
  5123.         bit 0: fast processor reset available (286 only)
  5124.         bits 1-15 reserved (undefined)
  5125.  1Ah  2 BYTEs    DPMS version (major,minor)
  5126.  1Ch    BYTE    CPU type (02h = 286, 03h = 386 or higher)
  5127.  
  5128. Call DPMS entry point with:
  5129.     AX = 0100h call protected-mode procedure
  5130.         CX = number of words of stack to copy
  5131.         ES:DI -> callup/down register structure (see below)
  5132.         Return: CF clear if successful
  5133.             CF set on error
  5134.                 AX = error code (see below)
  5135.     AX = 0101h call real-mode procedure (RETF return)
  5136.         CX = number of words of stack to copy
  5137.         ES:DI -> callup/down register structure (see below)
  5138.         Return: CF clear if successful
  5139.             CF set on error
  5140.                 AX = error code (see below)
  5141.     AX = 0102h call real-mode procedure (IRET return)
  5142.         CX = number of words of stack to copy
  5143.         ES:DI -> callup/down register structure (see below)
  5144.         Return: CF clear if successful
  5145.             CF set on error
  5146.                 AX = error code (see below)
  5147.     AX = 0103h call real-mode interrupt handler
  5148.         BL = interrupt number
  5149.         CX = number of words of stack to copy
  5150.         ES:DI -> callup/down register structure (see below)
  5151.         Return: CF clear if successful
  5152.             CF set on error
  5153.                 AX = error code (see below)
  5154.     AX = 0200h allocate descriptors
  5155.         CX = number of descriptors to allocate
  5156.         Return: CF clear if successful
  5157.                 AX = first descriptor allocated
  5158.             CF set on error
  5159.                 AX = error code (see below)
  5160.     AX = 0201h free a descriptor
  5161.         BX = descriptor
  5162.         Return: CF clear if successful
  5163.             CF set on error
  5164.                 AX = error code (see below)
  5165.     AX = 0202h create alias descriptor
  5166.         BX = descriptor
  5167.         Return: CF clear if successful
  5168.                 AX = alias descriptor
  5169.             CF set on error
  5170.                 AX = error code (see below)
  5171.     AX = 0203h build alias to real-mode segment
  5172.         BX = descriptor
  5173.         CX = real-mode segment
  5174.         Return: CF clear if successful
  5175.             CF set on error
  5176.                 AX = error code (see below)
  5177.     AX = 0204h set descriptor base
  5178.         BX = descriptor
  5179.         CX:DX = base address
  5180.         Return: CF clear if successful
  5181.             CF set on error
  5182.                 AX = error code (see below)
  5183.     AX = 0205h set descriptor limit
  5184.         BX = descriptor
  5185.         CX = limit
  5186.         Return: CF clear if successful
  5187.             CF set on error
  5188.                 AX = error code (see below)
  5189.     AX = 0206h set descriptor type/attribute
  5190.         BX = descriptor
  5191.         CL = type
  5192.         CH = attribute
  5193.         Return: CF clear if successful
  5194.             CF set on error
  5195.                 AX = error code (see below)
  5196.     AX = 0207h get descriptor base
  5197.         BX = descriptor
  5198.         Return: CF clear if successful
  5199.                 CX:DX = base address
  5200.             CF set on error
  5201.                 AX = error code (see below)
  5202.     AX = 0300h get size of largest free block of memory
  5203.         Return: CF clear if successful
  5204.                 BX:CX = size
  5205.             CF set on error
  5206.                 AX = error code (see below)
  5207.     AX = 0301h allocate block of extended memory
  5208.         BX:CX = size
  5209.         Return: CF clear if successful
  5210.                 BX:CX = base address
  5211.                 SI:DI = handle
  5212.             CF set on error
  5213.                 AX = error code (see below)
  5214.     AX = 0302h free block of extended memory
  5215.         SI:DI = handle
  5216.         Return: CF clear if successful
  5217.             CF set on error
  5218.                 AX = error code (see below)
  5219.     AX = 0303h map linear memory
  5220.         ES:[DI] = DDS
  5221.         Return: CF clear if successful
  5222.                 BX:CX = base address
  5223.                 SI:DI = handle
  5224.             CF set on error
  5225.                 AX = error code (see below)
  5226.     AX = 0304h unmap linear memory
  5227.         SI:DI = handle
  5228.         Return: CF clear if successful
  5229.             CF set on error
  5230.                 AX = error code (see below)
  5231.     AX = 0400h relocate segment to extended memory
  5232.         ES:SI = base address
  5233.         CX = limit
  5234.         BL = type
  5235.         BH = attribute
  5236.         DX = selector or 0000h
  5237.         Return: CF clear if successful
  5238.                 AX = selector
  5239.                 BX:CX = new base address
  5240.                 SI:DI = handle
  5241.             CF set on error
  5242.                 AX = error code (see below)
  5243.  
  5244. Values for error code:
  5245.  8000h    general error
  5246.  8001h    unsupported function
  5247.  8011h    descriptor unavailable
  5248.  8012h    linear memory unavailable
  5249.  8013h    physical memory unavailable
  5250.  8021h    invalid value
  5251.  8022h    invalid selector
  5252.  8023h    invalid handle
  5253.  
  5254. Format of callup/down register structure:
  5255. Offset    Size    Description
  5256.  00h    DWORD    EDI
  5257.  04h    DWORD    ESI
  5258.  08h    DWORD    EBP
  5259.  0Ch  4 BYTEs    reserved (0)
  5260.  10h    DWORD    EBX
  5261.  14h    DWORD    EDX
  5262.  18h    DWORD    ECX
  5263.  20h    DWORD    EAX
  5264.  24h    DWORD    EIP
  5265.  28h    WORD    CS
  5266.  2Ah  2 BYTEs    reserved (0)
  5267.  2Ch    DWORD    EFLAGS
  5268.  30h    DWORD    ESP
  5269.  34h    WORD    SS
  5270.  36h  2 BYTEs    reserved (0)
  5271.  38h    WORD    ES
  5272.  3Ah  2 BYTEs    reserved (0)
  5273.  3Ch    WORD    DS
  5274.  3Eh  2 BYTEs    reserved (0)
  5275.  40h    WORD    FS
  5276.  42h  2 BYTEs    reserved (0)
  5277.  44h    WORD    GS
  5278.  46h  2 BYTEs    reserved (0)
  5279. ----------2F43E1-----------------------------
  5280. INT 2F U - Novell DOS Protected Mode Services (DPMS) - ???
  5281.     AX = 43E1h
  5282.     ES:DI -> buffer for ???
  5283. Return: AX = 0000h if supported
  5284.        ES:DI buffer filled beginning at offset 0Ah
  5285. SeeAlso: AX=43E0h,AX=43E2h
  5286. ----------2F43E2-----------------------------
  5287. INT 2F U - Novell DOS Protected Mode Services (DPMS) - SET/CLEAR ??? FLAG
  5288.     AX = 43E2h
  5289.     BX = new state (0000h clear, else set)
  5290. Return: AX = 0000h if supported
  5291. SeeAlso: AX=43E0h,AX=43E1h
  5292. --------E-2F44-------------------------------
  5293. INT 2F U - DOS Extender support???
  5294.     AH = 44h
  5295.     AL = function (at least 0Bh, 15h, 17h)
  5296.     ???
  5297. Return: ???
  5298. Note:    called by Codeview for Windows
  5299. SeeAlso: AH=86h
  5300. --------G-2F4500-----------------------------
  5301. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - INSTALLATION CHECK
  5302.     AX = 4500h
  5303. Return: AL = 01h if PROF.COM installed
  5304.     AL = 02h if VPROD.386 installed
  5305. SeeAlso: AX=4501h,AX=4502h
  5306. --------G-2F4501-----------------------------
  5307. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SETUP PROFILER
  5308.     AX = 4501h
  5309.     BX = CSIPS buffer size in KB (first parameter for ProfSetup)
  5310.     CX = output limit in KB (second parameter for ProfSetup)
  5311. Note:    this call is not supported by PROF.COM
  5312. SeeAlso: AX=4502h,AX=4503h
  5313. --------G-2F4502-----------------------------
  5314. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SET SAMPLING RATE
  5315.     AX = 4502h
  5316.     BL = sampling rate for PROF.COM (0 < BL <= 13)
  5317.         (01h = 8192/s, 04h = 1024/s, 08h = 32/s, 0Dh = 1/s)
  5318.     CX = sampling rate for VPROD.386
  5319. Note:    for PROF.COM, this programs the CMOS clock by setting BL+2 as the
  5320.       low four bits of CMOS register 0Ah.  The interruption rate is
  5321.       1 SHL (15 - BL) per second.
  5322. SeeAlso: AX=4501h,AX=4503h
  5323. --------G-2F4503-----------------------------
  5324. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - START PROFILING
  5325.     AX = 4503h
  5326. Notes:    Profiling is also turned on by the key combinations
  5327.       LeftShift + RightShift + Alt
  5328.       LeftShift + RightShift + Ctrl
  5329.     for PROF.COM, this call programs the CMOS clock by reading register
  5330.       0Ch, and setting bit 6 of register 0Bh.  It then makes sure that IRQ8
  5331.       is unmasked
  5332. SeeAlso: AX=4504h
  5333. --------G-2F4504-----------------------------
  5334. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - STOP PROFILING
  5335.     AX = 4504h
  5336. Notes:    profiling is also turned off by the key combination
  5337.       LeftShift + RightShift
  5338.     for PROF.COM, this programs the CMOS clock by reading register 0Ch
  5339.       and clearing bit 6 of register 0Bh.  It then masks IRQ8.
  5340. SeeAlso: AX=4503h,AX=4505h,AX=4506h,AX=4507h
  5341. --------G-2F4505-----------------------------
  5342. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - CLEAR PROFILING DATA
  5343.     AX = 4505h
  5344. SeeAlso: AX=4503h,AX=4504h,AX=4506h
  5345. --------G-2F4506-----------------------------
  5346. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFlush"
  5347.     AX = 4506h
  5348. SeeAlso: AX=4505h,AX=4507h
  5349. --------G-2F4507-----------------------------
  5350. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFinish"
  5351.     AX = 4507h
  5352. Note:    this call is essentially a "ProfStop" (AX=4504h) followed by
  5353.       "ProfFlush" (AX=4506h)
  5354. SeeAlso: AX=4504h,AX=4505h,AX=4506h
  5355. --------G-2F4508-----------------------------
  5356. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - ALTERNATE SEGDEBUG IFACE
  5357.     AX = 4508h
  5358.     BX = ordinal (or 0000h)
  5359.     CX = segment
  5360.     DX = instance (or 0000h)
  5361.     SI = type (or 0000h)
  5362.     ES:DI -> ASCIZ module name
  5363. Notes:    this call is an alternate entry to the profiler's SEGDEBUG
  5364.       interface, but only to function 0, for notifying the profiler of
  5365.       each new segment loaded.  The SHOWHITS utility then examines the
  5366.       profiler's output files (CSIPS.DAT and SEGENTRY.DAT) in conjunction
  5367.       with symbol files to provide information in a useful form.
  5368.     this call does not have a corresponding Windows function
  5369. SeeAlso: AX=4500h
  5370. --------D-2F4601-----------------------------
  5371. INT 2F CU - MS Windows WINOLDAP - SWITCHING ???
  5372.     AX = 4601h
  5373. Return: ???
  5374. Note:    the DOS 5+ kernel intercepts this function and copies the MCB
  5375.        following the caller's PSP memory block into the DOS data segment;
  5376.        in conjunction with AX=4602h, this intercept is used by DOS to
  5377.        avoid corruption of the Windows real-mode heap's end sentinel
  5378. SeeAlso: AX=1700h,AX=4602h
  5379. --------D-2F4602-----------------------------
  5380. INT 2F CU - MS Windows WINOLDAP - SWITCHING ???
  5381.     AX = 4602h
  5382. Return: ???
  5383. Note:    the DOS 5+ kernel intercepts this function and copies the
  5384.       previously-saved MCB from the DOS data segment into the MCB following
  5385.       the caller's PSP memory block; in conjunction with AX=4601h, this
  5386.       intercept is used by DOS to avoid corruption of the Windows real-mode
  5387.       heap's end sentinel
  5388. SeeAlso: AX=1700h,AX=4601h
  5389. --------E-2F46-------------------------------
  5390. INT 2F U - Windows/286 DOS Extender
  5391.     AH = 46h
  5392.     AL = subfunction (03h,04h)
  5393. Return: ???
  5394. Note:    these two subfunctions are called by MS Windows 3.0
  5395. --------v-2F4653CX0002-----------------------
  5396. INT 2F - F-PROT v1.x only - F-LOCK.EXE
  5397.     AX = 4653h
  5398.     CX = 0002h
  5399.     BX = subfunction
  5400.         0000h  installation check
  5401.         Return: AX = FFFFh
  5402.         0001h  uninstall
  5403.         Return: AX,BX,ES destroyed
  5404.         0002h  disable (v1.08 and below only)
  5405.         0003h  enable (v1.08 and below only)
  5406. Note:    F-LOCK is part of the F-PROT virus/trojan protection package by Fridrik
  5407.       Skulason
  5408. SeeAlso: AX=4653h/CX=0003h,AX=CA00h,INT 21/AX=4BEEh
  5409. Index:    installation check;F-LOCK|uninstall;F-LOCK
  5410. --------v-2F4653CX0003-----------------------
  5411. INT 2F - F-PROT v1.x only - F-XCHK.EXE
  5412.     AX = 4653h
  5413.     CX = 0003h
  5414.     BX = subfunction
  5415.         0000h  installation check
  5416.         Return: AX = FFFFh
  5417.         0001h  uninstall
  5418.         Return: AX,BX,ES destroyed
  5419. Note:    F-XCHK is part of the F-PROT virus/trojan protection package by Fridrik
  5420.       Skulason
  5421. SeeAlso: AX=4653h/CX=0002h,AX=4653h/CX=0004h,AX=CA00h
  5422. Index:    installation check;F-XCHK|uninstall;F-XCHK
  5423. --------v-2F4653CX0004-----------------------
  5424. INT 2F - F-PROT v1.x only - F-POPUP.EXE
  5425.     AX = 4653h
  5426.     CX = 0004h
  5427.     BX = subfunction
  5428.         0000h  installation check
  5429.         Return: AX = FFFFh
  5430.         0001h  uninstall
  5431.         Return: AX,BX,ES destroyed
  5432.         0002h  disable (v1.08 and below only)
  5433.            display message (v1.14+)
  5434.             other registers: ???
  5435.         0003h  enable (v1.08 and below only)
  5436.            display message (v1.14+)
  5437.             other registers: ???
  5438.             Return: AX = key pressed by user
  5439. Note:    F-POPUP is part of the F-PROT virus/trojan protection package by
  5440.       Fridrik Skulason
  5441. SeeAlso: AX=4653h/CX=0003h,AX=4653h/CX=0005h,AX=CA00h
  5442. Index:    installation check;F-POPUP|uninstall;F-POPUP
  5443. --------v-2F4653CX0005-----------------------
  5444. INT 2F - F-PROT v1.x only - F-DLOCK.EXE
  5445.     AX = 4653h
  5446.     CX = 0005h
  5447.     BX = subfunction
  5448.         0000h installation check
  5449.         Return: AX = FFFFh
  5450.         0001h uninstall
  5451.         Return: AX,BX,ES destroyed
  5452. Note:    F-DLOCK is part of the F-PROT virus/trojan protection package by
  5453.       Fridrik Skulason
  5454. SeeAlso: AX=4653h/CX=0004h,AX=CA00h
  5455. Index:    installation check;F-DLOCK|uninstall;F-DLOCK
  5456. --------W-2F4680-----------------------------
  5457. INT 2F U - MS Windows v3.0 - INSTALLATION CHECK
  5458.     AX = 4680h
  5459. Return: AX = 0000h MS Windows 3.0 running in real (/R) or standard (/S) mode,
  5460.            or DOS 5 DOSSHELL active
  5461.        nonzero  no Windows, Windows prior to 3.0, or Windows3 in enhanced
  5462.             mode
  5463. Note:    Windows 3.1 finally provides an installation check which works in all
  5464.       modes (see AX=160Ah)
  5465. SeeAlso: AX=1600h,AX=160Ah
  5466. ----------2F47-------------------------------
  5467. INT 2F U - ???
  5468.     AH = 47h
  5469.     ???
  5470. Return: ???
  5471. Note:    reportedly called by Microsoft BASIC Compiler v7.0
  5472. --------K-2F4800-----------------------------
  5473. INT 2F - DOS 5+ DOSKEY - INSTALLATION CHECK
  5474.     AX = 4800h
  5475. Return: AL = nonzero if installed (DOS 5.0 and 6.0 return AX=AA02h)
  5476.         ES = segment of DOSKEY resident portion
  5477. Note:    DOSKEY chains if AL is not 00h or 10h on entry
  5478. SeeAlso: AX=4800h"PCED",AX=4810h
  5479. --------K-2F4800-----------------------------
  5480. INT 2F - PCED v2.1 - INSTALLATION CHECK
  5481.     AX = 4800h
  5482. Return: AX = AACDh if installed
  5483.         ES = segment of PCED kernel (PCED has multiple code segments)
  5484. Program: PCED v2.1 is a command line editor/history/macro facility by
  5485.       Cove Software.  It is the commercial version of the freeware CED.
  5486. Notes:    DOSKEY also responds to this call if installed, returning AX=AA02h.
  5487.     unlike DOSKEY, PCED does *not* chain if AL contains an
  5488.       unsupported function code.  It IRETs with all registers intact.
  5489. --------K-2F4810-----------------------------
  5490. INT 2F - DOS 5+ DOSKEY, PCED v2.1 - READ INPUT LINE FROM CONSOLE
  5491.     AX = 4810h
  5492.     DS:DX -> line buffer (see INT 21/AH=0Ah)
  5493. Return: AX = 0000h if successful
  5494. Notes:    the first byte (length) of the buffer MUST be 80h, or DOSKEY chains to
  5495.       the previous handler; PCED allows sizes other than 80h
  5496.     if the user's input is a macro name, no text is placed in the buffer
  5497.       even though AX=0000h on return; the program must immediately issue
  5498.       this call again to retrieve the expansion of the macro.  Similarly,
  5499.       if the user enters a special parameter such as $*, this call must
  5500.       be repeated to retrieve the expansion; on the second call, DOSKEY
  5501.       overwrites the macro name on the screen with its expansion.
  5502.     unlike DOSKEY, PCED expands all macros on the first call, so it is
  5503.       not necessary to make two calls; since the buffer is not empty on
  5504.       return, DOSKEY-aware programs will not make the second call
  5505.     DOSKEY chains if AL is not 00h or 10h on entry
  5506. SeeAlso: AX=4800h,INT 21/AH=0Ah
  5507. --------K-2F48C0-----------------------------
  5508. INT 2F - PCED v2.1 - PCED API
  5509.     AX = 48C0h
  5510.     DX = API function code
  5511.     other registers as required by the specified function
  5512. Return: CF clear if successful
  5513.     CF set on error
  5514.         AX = PCED error code
  5515.     other registers as appropriate for API function
  5516. Program: PCED v2.1 is a command line editor/history/macro facility by
  5517.       Cove Software.  It is the commercial version of the freeware CED.
  5518. Note:    the full API information is available from Cove Software
  5519. SeeAlso: AX=4800h"PCED",AX=48C1h,AX=48C2h,AX=48C3h
  5520. ----------2F48C1BL00-------------------------
  5521. INT 2F - PCED/VSTACK - INSTALLATION CHECK
  5522.     AX = 48C1h
  5523.     BL = 00h
  5524. Return: AX = 0000h if installed
  5525.         BX = VSTACK resident segment
  5526. Program: VSTACK is a resident backscroll utility included as part of the PCED
  5527.       package
  5528. Note:    chains if BL <> 00h on entry
  5529. SeeAlso: AX=48C0h,AX=48C2h
  5530. ----------2F48C2BL00-------------------------
  5531. INT 2F - PCED/ATTRIB - INSTALLATION CHECK
  5532.     AX = 48C2h
  5533.     BL = 00h
  5534. Return: AX = 0000h if installed
  5535.         BX = ATTRIB resident segment
  5536. Program: ATTRIB is a resident file attribute changer included as part of the
  5537.       PCED package
  5538. Note:    chains if BL <> 00h on entry
  5539. SeeAlso: AX=48C0h,AX=48C1h,AX=48C3h
  5540. --------K-2F48C3BL00-------------------------
  5541. INT 2F - PCED/KEYDEF - INSTALLATION CHECK
  5542.     AX = 48C3h
  5543.     BL = 00h
  5544. Return: AX = 0000h if installed
  5545.         BX = KEYDEF resident segment
  5546. Program: KEYDEF is a resident keyboard redefinition utility included as part
  5547.       of the PCED package
  5548. Note:    chains if BL <> 00h on entry
  5549. SeeAlso: AX=48C0h,AX=48C2h,AX=48C4h
  5550. ----------2F48C4BL00-------------------------
  5551. INT 2F - PCED/FLIST - INSTALLATION CHECK
  5552.     AX = 48C4h
  5553.     BL = 00h
  5554. Return: AX = 0000h if installed
  5555.         BX = FLIST resident segment
  5556. Program: FLIST is a resident filelist processor included as part of the PCED
  5557.       package
  5558. Note:    chains if BL <> 00h on entry
  5559. SeeAlso: AX=48C0h,AX=48C3h,AX=48C5h
  5560. ----------2F48C4BL00-------------------------
  5561. INT 2F - PCED/ASSOC - INSTALLATION CHECK
  5562.     AX = 48C4h
  5563.     BL = 00h
  5564. Return: AX = 0000h if installed
  5565.         BX = ASSOC resident segment
  5566. Program: ASSOC is a resident utility included as part of the PCED package which
  5567.       associated files with executable programs based on their extensions
  5568. Note:    chains if BL > 02h on entry
  5569. SeeAlso: AX=48C0h,AX=48C4h,AX=48C5h/BL=01h,AX=48C5h/BL=02h
  5570. ----------2F48C5BL01-------------------------
  5571. INT 2F - PCED/ASSOC - VERSION CHECK
  5572.     AX = 48C5h
  5573.     BL = 01h
  5574. Return: AX = 0000h if installed
  5575.         BX = binary ASSOC version (BL = major, BH = minor)
  5576. Note:    chains if BL > 02h on entry
  5577. SeeAlso: AX=48C0h,AX=48C5h/BL=00h,AX=48C5h/BL=02h
  5578. ----------2F48C5BL02-------------------------
  5579. INT 2F - PCED/ASSOC - ASSOCIATION TEST
  5580.     AX = 48C5h
  5581.     BL = 02h
  5582.     DS:SI -> ASCIZ filename
  5583. Return: AX = status
  5584.         0000h if filename is unknown
  5585.         0001h if there is an association defined for the file
  5586.     BX destroyed
  5587. Program: ASSOC is a resident utility included as part of the PCED package which
  5588.       associated files with executable programs based on their extensions
  5589. Note:    chains if BL > 02h on entry
  5590. SeeAlso: AX=48C0h,AX=48C5h/BL=00h,AX=48C5h/BL=01h
  5591. ----------2F49-------------------------------
  5592. INT 2F U - ???
  5593.     AH = 49h
  5594.     ???
  5595. Return: ???
  5596. Note:    reportedly called by DOS 5.0 installation
  5597. --------D-2F4A00CX0000-----------------------
  5598. INT 2F CU - DOS 5+ - FLOPPY-DISK LOGICAL DRIVE CHANGE NOTIFICATION
  5599.     AX = 4A00h
  5600.     CX = 0000h
  5601.     DH = new drive number
  5602.     DL = current drive number
  5603. Return: CX = FFFFh to skip "Insert diskette for drive X:" message
  5604. Note:    called by MS-DOS 5.0+ IO.SYS just before displaying the message
  5605.       "Insert diskette for drive X:" on single-floppy systems
  5606. --------D-2F4A01-----------------------------
  5607. INT 2F - DOS 5+ - QUERY FREE HMA SPACE
  5608.     AX = 4A01h
  5609. Return: BX = number of bytes available in HMA (0000h if DOS not using HMA)
  5610.     ES:DI -> start of available HMA area (FFFFh:FFFFh if not using HMA)
  5611. Note:    called by Windows 3.1 DOSX.EXE
  5612. SeeAlso: AX=4310h,AX=4A02h
  5613. --------D-2F4A02-----------------------------
  5614. INT 2F - DOS 5+ - ALLOCATE HMA SPACE
  5615.     AX = 4A02h
  5616.     BX = number of bytes
  5617. Return: ES:DI -> start of allocated HMA block or FFFFh:FFFFh
  5618.     BX = number of bytes actually allocated (rounded up to next paragraph
  5619.         for DOS 5.0 and 6.0)
  5620. Notes:    this call is not valid unless DOS is loaded in the HMA (DOS=HIGH)
  5621.     called by Windows 3.1 DOSX.EXE
  5622. SeeAlso: AX=4A01h
  5623. --------T-2F4A05-----------------------------
  5624. INT 2F U - DOS 5+ DOSSHELL - TASK SWITCHING API???
  5625.     AX = 4A05h
  5626.     SI = function
  5627.         0000h reset???
  5628.         0001h ???
  5629.         ES:BP -> 80-byte buffer containing ???
  5630.         0002h ???
  5631.         0003h ???
  5632.         0004h ???
  5633.         BL = ???
  5634.         0005h ???
  5635.         0006h get ???
  5636.         Return: ES:SI -> ???
  5637.         0007h get ???
  5638.         Return: AX = ???
  5639.         0008h get ???
  5640.         Return: DX:AX -> ??? (internal control data of some kind)
  5641.         0009h get ???
  5642.         Return: ES:SI -> ??? (apparently identical to function 0006h)
  5643.         000Ah ???
  5644.         BL = length of buffer
  5645.         ES:BP -> buffer containing ???
  5646.         000Bh get ???
  5647.         Return: AX = ???
  5648.         000Ch ???
  5649.         BL = ???
  5650.         Return: if BL nonzero on entry
  5651.                 DX:AX -> ???
  5652.             if BL = 00h on entry
  5653.                 ES:SI -> ???
  5654. Notes:    DOSSHELL chains to the previous handler if SI is not one of the values
  5655.       listed above
  5656.     the DOSSWAP.EXE module calls functions 03h,04h,05h,07h,08h,09h,0Ch
  5657.     the Windows 3.1 DSWAP.EXE and WSWAP.EXE task switchers use these calls
  5658. SeeAlso: AX=4B01h
  5659. --------D-2F4A06-----------------------------
  5660. INT 2F CU - DOS 5+ - DOS SUPERVISOR "REBOOT PANEL" - ADJUST MEMORY SIZE
  5661.     AX = 4A06h
  5662.     DX = segment following last byte of conventional memory
  5663. Return: DX = segment following last byte of memory available for use by DOS
  5664. Desc:    used to override the default memory size when booting diskless
  5665.       workstations
  5666. Notes:    called by MS-DOS 5+ IO.SYS startup code if the signature "RPL" is
  5667.       present three bytes beyond the INT 2F handler; this call overrides
  5668.       the value returned by INT 12
  5669.     hooked by RPL code at the top of memory to protect itself from being
  5670.       overwritten; DOS builds a memory block with owner = 0008h and name
  5671.       "RPL" which must be freed by the RPL code when it is done
  5672. SeeAlso: INT 12
  5673. --------N-2F4A07-----------------------------
  5674. INT 2F U - RESERVED FOR PROTMAN SUPPORT
  5675.     AX = 4A07h
  5676.     ???
  5677. Return: ???
  5678. --------c-2F4A10BX0000-----------------------
  5679. INT 2F - SMARTDRV v4.00+ - INSTALLATION CHECK AND HIT RATIOS
  5680.     AX = 4A10h
  5681.     BX = 0000h
  5682.     CX = EBABh (v4.1+; see Note)
  5683. Return: AX = BABEh if installed
  5684.         DX:BX = cache hits
  5685.         DI:SI = cache misses
  5686.         CX = number of dirty cache elements
  5687.         BP = version in BCD (4.10 = 0410h)
  5688. Notes:    most of the SMARTDRV API, including this call, is supported by
  5689.       PC-Cache v8.0 and recent versions of the Norton Caches
  5690.     if DBLSPACE.BIN is installed but SMARTDRV has not yet been installed,
  5691.       then calls of this function with CX<>EBABh on entry cause
  5692.       DBLSPACE.BIN to display the error message
  5693.       "Cannot run SMARTDrive 4.0 with DoubleSpace" and abort the caller
  5694.       with INT 21/AX=4C00h
  5695.     SMARTDRV v3.x had a completely different API using IOCTL calls, which
  5696.       was also supported by the Norton Caches
  5697. SeeAlso: AX=4A10h/BX=0001h,AX=4A10h/BX=0004h,AX=4A10h/BX=0005h
  5698. SeeAlso: AX=4A10h/BX=0007h,AX=4A10h/BX=1234h,AX=4A11h/BX=0000h
  5699. SeeAlso: INT 21/AX=4402h"SMARTDRV",INT 21/AX=4403h"SMARTDRV"
  5700. ----------2F4A10BX0000-----------------------
  5701. INT 2F U - Novell NWCACHE - ???
  5702.     AX = 4A10h
  5703.     BX = 0000h
  5704.     CX = 0EDCh
  5705. Return: ???
  5706. SeeAlso: AX=4A10h/BX=0001h"NWCACHE"
  5707. --------c-2F4A10BX0001-----------------------
  5708. INT 2F - SMARTDRV v4.00+ - FLUSH BUFFERS (COMMIT CACHE)
  5709.     AX = 4A10h
  5710.     BX = 0001h
  5711. Note:    this function is also supported by PC-Cache v8.0.
  5712. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0002h
  5713. ----------2F4A10BX0001-----------------------
  5714. INT 2F U - Novell NWCACHE - ???
  5715.     AX = 4A10h
  5716.     BX = 0001h
  5717.     CX = 0EDCh
  5718. Return: ???
  5719. SeeAlso: AX=4A10h/BX=0000h"NWCACHE"
  5720. --------c-2F4A10BX0002-----------------------
  5721. INT 2F - SMARTDRV v4.00+ - RESET CACHE
  5722.     AX = 4A10h
  5723.     BX = 0002h
  5724. Note:    this function is also supported by PC-Cache v8.0.
  5725. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0001h
  5726. --------c-2F4A10BX0003-----------------------
  5727. INT 2F - SMARTDRV v4.00+ - STATUS
  5728.     AX = 4A10h
  5729.     BX = 0003h
  5730.     BP = drive number (0=A, 1=B, etc.)
  5731.     DL = subfunction
  5732.         00h only get information
  5733.         01h turn on read cache
  5734.         02h turn off read cache
  5735.         03h turn on write cache
  5736.         04h turn off write cache
  5737. Return: AX = BABEh if OK
  5738.     DL = status
  5739.         bit 7  not cached
  5740.         bit 6  write-through (not write-cached)
  5741.         bits 0-5 real drive number (0=A, 1=B...)
  5742.     DL = FFh if drive does not exist
  5743. Notes:    If the read cache is off, reads will not be cached, but writes will
  5744.       continue to be cached if the write-cache is enabled.
  5745.     this function is also supported by PC-Cache v8.0.
  5746. SeeAlso: AX=4A10h/BX=0000h
  5747. --------c-2F4A10BX0004-----------------------
  5748. INT 2F - SMARTDRV v4.00+ - GET CACHE SIZE
  5749.     AX = 4A10h
  5750.     BX = 0004h
  5751. Return: AX = size in elements of full-sized cache
  5752.     BX = current size in elements
  5753.     CX = size of one element in bytes
  5754.     DX = number of elements under Windows
  5755. Note:    this function is also supported by PC-Cache v8.0.
  5756. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0003h,AX=4A10h/BX=0005h
  5757. --------c-2F4A10BX0005-----------------------
  5758. INT 2F - SMARTDRV v4.00+ - GET DOUBLE-BUFFER STATUS
  5759.     AX = 4A10h
  5760.     BX = 0005h
  5761.     BP = drive number (0=A, 1=B...)
  5762. Return: AX = BABEh if double-buffered
  5763.         ES:DI -> 16-byte array of status bytes for fixed disks
  5764. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0003h,AX=4A10h/BX=0006h
  5765.  
  5766. Values for status byte:
  5767.  00h    state unknown
  5768.  FFh    drive double-buffered
  5769.  else    not double-buffered
  5770. --------c-2F4A10BX0006-----------------------
  5771. INT 2F CU - SMARTDRV v4.00+ - CHECK IF DRIVE CACHEABLE
  5772.     AX = 4A10h
  5773.     BX = 0006h
  5774.     CL = drive number (01h = A:)
  5775. Return: AX = 0006h if drive should not be cached by SMARTDRV
  5776. Note:    called by SMARTDRV at startup to determine whether it should cache
  5777.       a particular drive
  5778. SeeAlso: AX=4A10h/BX=0000h
  5779. --------c-2F4A10BX0007-----------------------
  5780. INT 2F - SMARTDRV v4.00+ - GET DEVICE DRIVER FOR DRIVE
  5781.     AX = 4A10h
  5782.     BX = 0007h
  5783.     BP = drive number (00h=A:)
  5784. Return: DL = unit number within device driver
  5785.     ES:DI -> device driver header for drive
  5786. Note:    this function is also supported by PC-Cache v8.0.
  5787.     this call is reported to always return the driver header of the
  5788.       standard block driver (A:-C:+) for SmartDrive v5.00 from MS-DOS 6.2
  5789. SeeAlso: AX=4A10h/BX=0000h,AX=4A11h/BX=0003h,AX=4A11h/BX=0004h
  5790. --------c-2F4A10BX0008-----------------------
  5791. INT 2F - SMARTDRV v4.20+ - GET/SET FLUSH BEFORE PROMPT, CD-ROM SUPPORT
  5792.     AX = 4A10h
  5793.     BX = 0008h
  5794.     DL = subfunction
  5795.         00h set
  5796.         DH = new states
  5797.             bit 0: flush before prompt
  5798.             bits 1-7 reserved
  5799.         01h get
  5800.         Return: DH = status flags
  5801.                 bit 0: (v4.2+) flush before prompt
  5802.                 bit 1: (v5.0+) CD-ROM caching support installed
  5803. Note:    v4.2 was an interim release to fix problems in the SMARTDRV included
  5804.       with MS-DOS 6.00; v5.00 is included with MS-DOS 6.2
  5805. --------c-2F4A10BX000A-----------------------
  5806. INT 2F - SMARTDRV v4.00+ - GET ELEMENT STATUS TABLE
  5807.     AX = 4A10h
  5808.     BX = 000Ah
  5809. Return: ES:BX -> table of about 10 bytes or 5 words. Seems to be words
  5810.          pointing to memory addresses containing info??? (see below)
  5811. Note:    this function is also supported by PC-Cache v8.0.
  5812. SeeAlso: AX=4A10h/BX=0000h
  5813.  
  5814. Format of data table:
  5815. Offset    Size    Description
  5816.  00h    WORD    offset of ??? byte/word array (byte if elements < 2000h bytes)
  5817.  02h    WORD    offset of dirty flag byte/word array (byte if elts < 2000h)
  5818.         each byte/word is a bit string of the dirty sectors in element
  5819.  04h    WORD    offset of word array containing low halves of unique
  5820.           identifiers for the corresponding element's contents
  5821.  06h    WORD    offset of word array containing high halves of unique
  5822.           identifiers for the corresponding element's contents
  5823.  08h    WORD    offset of WORD containing current number of elements in cache
  5824. --------c-2F4A10BX1234-----------------------
  5825. INT 2F - SMARTDRV v4.00+ - SIGNAL SERIOUS ERROR
  5826.     AX = 4A10h
  5827.     BX = 1234h
  5828. Desc:    this function pops up a message box saying that a serious error
  5829.       occurred and to hit R to retry, then waits for the keypress
  5830. Note:    this function is also supported by PC-Cache v8.0.
  5831. SeeAlso: AX=4A10h/BX=0000h
  5832. --------d-2F4A11BX0000-----------------------
  5833. INT 2F - DBLSPACE.BIN - "GetVersion" - INSTALLATION CHECK
  5834.     AX = 4A11h
  5835.     BX = 0000h
  5836. Return: AX = 0000h (successful)
  5837.     BX = 444Dh ("DM")
  5838.     CL = first drive letter used by DBLSPACE (41h ['A'] = A:)
  5839.     CH = number of drive letters used by DBLSPACE
  5840.     DX = internal DBLSPACE.BIN version number (bits 14-0)
  5841.         bit 15 set if DBLSPACE.BIN has not yet been relocated to final
  5842.         position in memory (i.e. DBLSPACE.SYS /MOVE)
  5843. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  5844.       disk-compression software bundled with MS-DOS 6.0
  5845. SeeAlso: AX=4A11h/BX=0001h,AX=4A11h/BX=0002h,AX=4A11h/BX=0003h
  5846. SeeAlso: AX=4A11h/BX=0005h,AX=4A11h/BX=0007h,AX=4A11h/BX=FFFFh
  5847. SeeAlso: INT 21/AX=4404h"DBLSPACE"
  5848. --------d-2F4A11BX0001-----------------------
  5849. INT 2F - DBLSPACE.BIN - "GetDriveMapping" - GET DRIVE MAPPING
  5850.     AX = 4A11h
  5851.     BX = 0001h
  5852.     DL = drive number (0=A:)
  5853. Return: AX = status (see also below)
  5854.         0000h successful
  5855.         if DL was compressed drive,
  5856.             BL = host drive (bit 7 set if drive is compressed)
  5857.         else if DL was host drive,
  5858.             BL = compressed drive
  5859.         else
  5860.             BL = specified drive (if available for DoubleSpace)
  5861.         BH = DoubleSpace sequence number
  5862.         other error code (0101h) (see below)
  5863.         apparently never returned for the MS-DOS 6.2 DoubleSpace
  5864. Note:    the compressed volume file for the specified compressed drive is
  5865.       host:\DBLSPACE.sequence
  5866. SeeAlso: AX=4A11h/BX=0000h
  5867.  
  5868. Values for status:
  5869.  0000h    successful
  5870.  0100h    bad function
  5871.  0101h    invalid drive
  5872.  0102h    not a compressed drive
  5873.  0103h    drive already swapped
  5874.  0104h    drive not swapped
  5875. --------d-2F4A11BX0002-----------------------
  5876. INT 2F - DBLSPACE.BIN - "Swap Drive" - SWAP DRIVE LETTERS OF CVF AND HOST DRIVE
  5877.     AX = 4A11h
  5878.     BX = 0002h
  5879.     DL = drive number (0=A:) of compressed drive to swap with its host
  5880. Return: AX = status (0000h,0101h,0102h,0103h) (see AX=4A11h/BX=0001h)
  5881. Note:    this function is intended for use by DBLSPACE.EXE only
  5882. SeeAlso: AX=4A11h/BX=0000h
  5883. --------d-2F4A11BX0003-----------------------
  5884. INT 2F - DBLSPACE.BIN - "DSGetEntryPoints" - GET DEVICE DRIVER ENTRY POINTS
  5885.     AX = 4A11h
  5886.     BX = 0003h
  5887.     CL = drive number (0=A:) of compressed drive
  5888. Return: CL = FFh on error (not compressed drive)
  5889.        = other driver unit number of host drive
  5890.         ES:SI -> device driver's strategy routine
  5891.         ES:DI -> device driver's interrupt routine
  5892.     BX destroyed
  5893. Note:    in conjunction with subfunction 0004h, this call allows disk caches
  5894.       like SMARTDRV to apply a device driver wrapper to DoubleSpaced
  5895.       drives just like SMARTDRV applies to regular block devices
  5896. SeeAlso: AX=4A10h/BX=0007h,AX=4A11h/BX=0000h,AX=4A11h/BX=0004h
  5897. --------d-2F4A11BX0004-----------------------
  5898. INT 2F - DBLSPACE.BIN - "DSSetEntryPoints" - SET DEVICE DRIVER ENTRY POINTS
  5899.     AX = 4A11h
  5900.     BX = 0004h
  5901.     CL = drive number (0=A:) of compressed drive
  5902.     DL = unit number for new driver entry points
  5903.     DH = 00h
  5904.     ES:SI -> device driver strategy routine to call for drive
  5905.     ES:DI -> device driver interrupt routine to call for drive
  5906. Return: CL = FFh on error (not a compressed drive)
  5907.     BX destroyed
  5908. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  5909.       disk-compression software bundled with MS-DOS 6.0
  5910. Note:    in conjunction with subfunction 0003h, this call allows disk caches
  5911.       like SMARTDRV to apply a device driver wrapper to DoubleSpaced
  5912.       drives just like SMARTDRV applies to regular block devices
  5913. SeeAlso: AX=4A10h/BX=0007h,AX=4A11h/BX=0000h,AX=4A11h/BX=0003h
  5914. --------d-2F4A11BX0005-----------------------
  5915. INT 2F - DBLSPACE.BIN - "ActivateDrive" - MOUNT COMPRESSED DRIVE
  5916.     AX = 4A11h
  5917.     BX = 0005h
  5918.     DL = drive number (0=A:) to assign to new drive
  5919.     ES:SI -> activation record (see below)
  5920. Return: status returned in activation record (see below)
  5921. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0006h
  5922.  
  5923. Format of activation record:
  5924. Offset    Size    Description
  5925.  00h  2 BYTEs    signature "MD" (4Dh 44h)
  5926.  02h    BYTE    4Dh ('M') mount command
  5927.  03h    BYTE    error code (set to FFh before calling)
  5928.         00h successful
  5929.         01h drive letter not available for DoubleSpace
  5930.         02h drive letter already in use
  5931.         03h no more disk units (increase MaxRemovableDrives in .INI)
  5932.         09h CVF too fragmented
  5933.  04h    BYTE    host drive number (0=A:)
  5934.  05h    ???    DISK_UNIT structure (not documented)
  5935. --------d-2F4A11BX0006-----------------------
  5936. INT 2F - DBLSPACE.BIN - "DeactivateDrive" - UNMOUNT COMPRESSED DRIVE
  5937.     AX = 4A11h
  5938.     BX = 0006h
  5939.     DL = drive number (0=A:) to unmount
  5940. Return: AX = status (0000h,0102h) (see AX=4A11h/BX=0001h)
  5941. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0005h
  5942. --------d-2F4A11BX0007-----------------------
  5943. INT 2F - DBLSPACE.BIN - "GetDriveSpace" - GET SPACE AVAIL ON COMPRESSED DRIVE
  5944.     AX = 4A11h
  5945.     BX = 0007h
  5946.     DL = compressed drive number (0=A:)
  5947. Return: AX = status (0000h,0102h) (see also AX=4A11h/BX=0001h)
  5948.         0000h successful
  5949.         DS:SI -> free space record (see below)
  5950. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  5951.       disk-compression software bundled with MS-DOS 6.0
  5952. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0008h
  5953.  
  5954. Format of free space record:
  5955. Offset    Size    Description
  5956.  00h    DWORD    total number of sectors in drive's sector heap
  5957.  04h    DWORD    number of free sectors in drive's sector heap
  5958. --------d-2F4A11BX0008-----------------------
  5959. INT 2F - DBLSPACE.BIN - "GetFileFragmentSpace" - GET SIZE OF FRAGMENT HEAP
  5960.     AX = 4A11h
  5961.     BX = 0008h
  5962.     DL = compressed drive number (0=A:)
  5963. Return: AX = status (0000h,0102h) (see also AX=4A11h/BX=0001h)
  5964.         0000h successful
  5965.         BX = maximum entries in File Fragment heap
  5966.         CX = available entries in File Fragment heap
  5967. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0007h,AX=4A11h/BX=0009h
  5968. --------d-2F4A11BX0009-----------------------
  5969. INT 2F - DBLSPACE.BIN - "GetExtraInfo" - DETERMINE NUMBER OF DISK_UNIT STRUCTS
  5970.     AX = 4A11h
  5971.     BX = 0009h
  5972.     DL = compressed drive number (0=A:)
  5973. Return: AX = status (see also AX=4A11h/BX=0001h)
  5974.         0000h successful
  5975.         CL = number of DISK_UNIT structures allocated
  5976.             (see AX=4A11h/BX=0005h)
  5977.         CH = DoubleGuard enabled-checks bitflags in bits 6-0 (DOS 6.2)
  5978. Note:    the DoubleGuard checks are enabled or disabled as a block by the
  5979.       DoubleGuard= line in DBLSPACE.INI; they may be individually set with
  5980.       the CheckSum= line.
  5981. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0008h
  5982. --------d-2F4A11BX000A-----------------------
  5983. INT 2F - DBLSPACE.BIN 6.2 - SET AUTOMOUNT DRIVES
  5984.     AX = 4A11h
  5985.     BX = 000Ah
  5986.     CX:DX = bitmask of drives on which to enable AutoMount
  5987.         (DX bit 0 = A:, CX bit 0 = P:, etc.)
  5988. Return: AX = 0000h if supported
  5989.         CX:DX = old mask or 0000h:0000h on error
  5990.     BX destroyed
  5991. SeeAlso: AX=4A11h/BX=000Bh
  5992. --------d-2F4A11BX000B-----------------------
  5993. INT 2F - DBLSPACE.BIN 6.2 - GET AUTOMOUNT DRIVES
  5994.     AX = 4A11h
  5995.     BX = 000Bh
  5996. Return: AX = 0000h if supported
  5997.         CX:DX = mask of drives with AutoMount enabled
  5998.         0000h:0000h on error
  5999.     BX destroyed
  6000. SeeAlso: AX=4A11h/BX=000Ah
  6001. --------d-2F4A11BXFFFE-----------------------
  6002. INT 2F U - DBLSPACE.BIN - RELOCATE
  6003.     AX = 4A11h
  6004.     BX = FFFEh
  6005.     ES = segment to which to relocate DBLSPACE.BIN
  6006. Return: ???
  6007. Notes:    called by DBLSPACE.SYS to relocate DBLSPACE.BIN to its final position
  6008.       in memory
  6009.     this function also unhooks and discards the code providing this
  6010.       function and AX=4A11h/BX=FFFFh
  6011. SeeAlso: AX=4A11h/BX=FFFFh
  6012. --------d-2F4A11BXFFFF-----------------------
  6013. INT 2F U - DBLSPACE.BIN - GET RELOCATION SIZE
  6014.     AX = 4A11h
  6015.     BX = FFFFh
  6016. Return: AX = number of paragraphs needed by DBLSPACE.BIN
  6017. Note:    used by DBLSPACE.SYS to relocate the DBLSPACE driver to its final
  6018.       position in memory
  6019. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=FFFEh
  6020. --------d-2F4A12CX4D52-----------------------
  6021. INT 2F - Microsoft Realtime Compression Interface (MRCI) - RAM-BASED SERVER
  6022.     AX = 4A12h
  6023.     CX = 4D52h ("MR")
  6024.     DX = 4349h ("CI")
  6025. Return: CX = 4943h ("IC") if installed
  6026.     DX = 524Dh ("RM") if installed
  6027.         ES:DI -> MRCINFO structure (see INT 1A/AX=B001h)
  6028. Note:    this call is functionally identical to INT 1A/AX=B001h, but should be
  6029.       called first, as the latter call is used for the first, ROM-based
  6030.       MRCI server, while this call is used for RAM-based servers which
  6031.       may be partially or entirely replacing a prior server
  6032. SeeAlso: INT 1A/AX=B001h
  6033. --------d-2F4A13-----------------------------
  6034. INT 2F U - DBLSPACE.BIN - GET ??? ENTRY POINTS
  6035.     AX = 4A13h
  6036. Return: AX = 134Ah if supported
  6037.         ES:BX -> entry point record (see below)
  6038. SeeAlso: AX=4A11h/BX=0000h
  6039.  
  6040. Format of entry point record:
  6041. Offset    Size    Description
  6042.  00h    DWORD    pointer to FAR function for ???
  6043.  04h  5 BYTEs    FAR JUMP instruction to ???
  6044. --------N-2F4B-------------------------------
  6045. INT 2F - LAN Manager 2.0 DOS Enh NETWKSTA.EXE - NETWORK WORKSTATION REDIRECTOR
  6046.     AH = 4Bh
  6047.     ???
  6048. Return: ???
  6049. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  6050.       file/printer services
  6051. SeeAlso: AX=118Ah,AX=4100h,AH=42h
  6052. --------T-2F4B01-----------------------------
  6053. INT 2F C - DOS 5+ TASK SWITCHER - BUILD CALLOUT CHAIN
  6054.     AX = 4B01h
  6055.     CX:DX -> task switcher entry point (see AX=4B02h)
  6056.     ES:BX = 0000h:0000h
  6057. Return: ES:BX -> callback info structure (see below) or 0000h:0000h
  6058. Notes:    called by the task switcher
  6059.     this function is hooked by clients which require notification of task
  6060.       switcher activities; the call must first be passed on to the prior
  6061.       handler with registers unchanged using a simulated interrupt.     On
  6062.       return, the client must build a callback info structure and store
  6063.       the returned ES:BX in the "next" field, then return the address of
  6064.       its own callback info structure.
  6065.     a client program must add itself to the notification chain if it
  6066.       provides services to other programs; before terminating, it must
  6067.       remove itself from the chain by calling the task switcher's entry
  6068.       point with AX=0005h (see AX=4B02h)
  6069.     the task switcher entry point should not be saved, as it is subject to
  6070.       change and will be provided on any notification call
  6071.     the Windows 3.1 Standard Mode supports this API
  6072. SeeAlso: AX=160Bh,AX=4B02h
  6073.  
  6074. Format of callback info structure:
  6075. Offset    Size    Description
  6076.  00h    DWORD    pointer to next callback info structure
  6077.  04h    DWORD    pointer to notification function (see below)
  6078.  08h    DWORD    reserved
  6079.  0Ch    DWORD    address of zero-terminated list of API info structures
  6080.         (see AX=4B02h)
  6081.  
  6082. Notification function is called with:
  6083.     AX = function
  6084.         0000h switcher initialization
  6085.         Return: AX = 0000h if OK to load
  6086.                = nonzero to abort task switcher
  6087.         0001h query suspend
  6088.         BX = session ID
  6089.         Return: AX = 0000h if OK to switch session
  6090.                = 0001h if not
  6091.         0002h suspend session
  6092.         BX = session ID
  6093.         interrupts disabled
  6094.         Return: AX = 0000h if OK to switch session
  6095.                = 0001h if not
  6096.         0003h activate session
  6097.         BX = session ID
  6098.         CX = session status flags
  6099.             bit 0: set if first activation of session
  6100.             bits 1-15: reserved (0)
  6101.         interrupts disabled
  6102.         Return: AX = 0000h
  6103.         0004h session active
  6104.         BX = session ID
  6105.         CX = session status flags
  6106.             bit 0: set if first activation of session
  6107.             bits 1-15: reserved (0)
  6108.         Return: AX = 0000h
  6109.         0005h create session
  6110.         BX = session ID
  6111.         Return: AX = 0000h if OK to create session
  6112.                = 0001h if not
  6113.         0006h destroy session
  6114.         BX = session ID
  6115.         Return: AX = 0000h
  6116.         0007h switcher termination
  6117.         BX = flags
  6118.             bit 0: set if calling switcher is only switcher loaded
  6119.             bits 1-15: reserved (0)
  6120.         Return: AX = 0000h
  6121.     ES:DI -> task switcher entry point (see AX=4B02h)
  6122. Notes:    function 0000h is generally called by the program which controls or
  6123.       invokes the task switcher, rather than by the task switcher itself;
  6124.       the entry point supplied to this function is not necessarily the
  6125.       entry point to the task switcher itself, and may be 0000h:0000h.  If
  6126.       any client indicates that loading is not possible, all clients will
  6127.       be called with function 0007h; thus it is possible for a client to
  6128.       receive a termination notice without a corresponding initialization
  6129.       notice.
  6130.     except for functions 0002h and 0003h, the notification handler is
  6131.       called with interrupts enabled and may make any INT 21h function
  6132.       call; interrupts must not be enabled in functions 0002h and 0003h
  6133.     function 0007h may be called with ES:DI = 0000h:0000h if the entry
  6134.       point is no longer valid
  6135. --------T-2F4B02BX0000-----------------------
  6136. INT 2F - DOS 5+ TASK SWITCHER - INSTALLATION CHECK
  6137.     AX = 4B02h
  6138.     BX = 0000h
  6139.     ES:DI = 0000h:0000h
  6140. Return: ES:DI = 0000h:0000h if task switcher not loaded
  6141.     ES:DI -> task switcher entry point (see below) if loaded
  6142.         AX = 0000h
  6143. Notes:    the returned entry point is that for the most-recently loaded task
  6144.       switcher; the entry points for prior task switchers may be determined
  6145.       with the "get version" call (see below)
  6146.     this function is supported by PC Tools v8+ CPTASK
  6147. SeeAlso: AX=4A05h,AX=4B03h
  6148.  
  6149. Call task switcher entry point with:
  6150.     AX = 0000h get version
  6151.         Return: CF clear if successful
  6152.                 AX = 0000h
  6153.                 ES:BX -> task switcher version struct (see below)
  6154.             CF set if unsupported function
  6155.     AX = 0001h test memory region
  6156.         ES:DI -> first byte to be tested
  6157.         CX = size of region to test
  6158.         Return: CF clear if successful
  6159.                 AX = memory type of tested region
  6160.                 0000h global
  6161.                 0001h global and local
  6162.                 0002h local (replaced on session switch)
  6163.             CF set if unsupported function
  6164.     AX = 0002h suspend switcher
  6165.         ES:DI -> new task switcher's entry point
  6166.         Return: CF clear if successful
  6167.                 AX = state
  6168.                 0000h switcher has been suspended
  6169.                 0001h switcher not suspended, new switcher must
  6170.                     abort
  6171.                 0002h switcher not suspended, but new switcher
  6172.                     may run anyway
  6173.             CF set if unsupported function
  6174.     AX = 0003h resume switcher
  6175.         ES:DI -> new task switcher's entry point
  6176.         Return: CF clear if successful
  6177.                 AX = 0000h
  6178.             CF set if unsupported function
  6179.     AX = 0004h hook notification chain
  6180.         ES:DI -> callback info structure to be added to chain
  6181.             (see AX=4B01h)
  6182.         Return: CF clear if successful
  6183.                 AX = 0000h
  6184.             CF set if unsupported function
  6185.     AX = 0005h unhook notification chain
  6186.         ES:DI -> callback info structure to be removed from chain
  6187.             (see AX=4B01h)
  6188.         Return: CF clear if successful
  6189.                 AX = 0000h
  6190.             CF set if unsupported function
  6191.     AX = 0006h query API support
  6192.         BX = asynchronous API identifier
  6193.         Return: CF clear if successful
  6194.                 AX = 0000h
  6195.                 ES:BX -> API info structure (see below) for the
  6196.                     client which provides the highest
  6197.                     level of
  6198.             CF set if unsupported function
  6199.  
  6200. Format of task switcher version structure:
  6201. Offset    Size    Description
  6202.  00h    WORD    major version of supported protocol  (current protocol is 1.0)
  6203.  02h    WORD    minor version of supported protocol
  6204.  04h    WORD    major version of task switcher
  6205.  06h    WORD    minor version of task switcher
  6206.  08h    WORD    task switcher ID (see AX=4B03h)
  6207.  0Ah    WORD    operation flags
  6208.         bit 0: set if task switcher disabled
  6209.         bits 1-15: reserved (0)
  6210.  0Ch    DWORD    pointer to ASCIZ task switcher name
  6211.         ("MS-DOS Shell Task Switcher" for DOSSHELL task switcher)
  6212.  10h    DWORD    pointer to previous task switcher's entry point or 0000h:0000h
  6213.  
  6214. Format of API info structure:
  6215. Offset    Size    Description
  6216.  00h    WORD    size of structure in bytes (000Ah)
  6217.  02h    WORD    API identifier
  6218.         0001h NetBIOS
  6219.         0002h 802.2
  6220.         0003h TCP/IP
  6221.         0004h LAN Manager named pipes
  6222.         0005h Novell NetWare IPX
  6223.  04h    WORD    major version \ of highest version of API for which the support
  6224.  06h    WORD    minor version / level specified in the next field is provided
  6225.  08h    WORD    support level
  6226.         0001h minimal support
  6227.         0002h API-level support
  6228.         0003h switcher compatibility
  6229.         0004h seamless compatibility
  6230. --------T-2F4B03-----------------------------
  6231. INT 2F - DOS 5+ TASK SWITCHER - ALLOCATE SWITCHER ID
  6232.     AX = 4B03h
  6233.     ES:DI -> task switcher entry point (see AX=4B02h)
  6234. Return: AX = 0000h
  6235.     BX = switcher ID (0001h-000Fh), or 0000h if no more available
  6236. Notes:    if a task switcher has determined that it is the first to be loaded, it
  6237.       must allocate an identifier for itself and provide this function to
  6238.       all subsequent task switchers; if it is not the first to be loaded,
  6239.       it must call this function to allocate an ID.     The switcher ID is
  6240.       used as the high four bits of all session identifiers to ensure
  6241.       unique session IDs.
  6242.     if no more switcher IDs are available, the new task switcher making the
  6243.       call must terminate or disable itself
  6244.     the task switcher providing the identifiers may call the new task
  6245.       switcher's entry point as needed
  6246.     this call is available from within DOSSHELL even if the task switcher
  6247.       is not installed
  6248.     this function is supported by PC Tools v8+ CPTASK, but appears to
  6249.       always return an ID of 0000h
  6250. SeeAlso: AX=4B02h,AX=4B04h
  6251. --------T-2F4B04-----------------------------
  6252. INT 2F - DOS 5+ TASK SWITCHER - FREE SWITCHER ID
  6253.     AX = 4B04h
  6254.     BX = switcher ID
  6255.     ES:DI -> task switcher entry point (see AX=4B02h)
  6256. Return: AX = 0000h
  6257.     BX = status
  6258.         0000h successful
  6259.         other error (invalid ID or ID not allocated)
  6260. Notes:    called by a task switcher when it exits, unless it was the first loaded
  6261.       and is providing the support for AX=4B03h and AX=4B04h
  6262.     the task switcher providing the identifiers may call the terminating
  6263.       task switcher's entry point as needed
  6264.     this call is available from within DOSSHELL even if the task switcher
  6265.       is not installed
  6266.     this call is supported by PC Tools v8+ CPTASK, but appears to return
  6267.       sucessfully no matter which ID is given
  6268. SeeAlso: AX=4B02h,AX=4B03h
  6269. --------T-2F4B05-----------------------------
  6270. INT 2F C - DOS 5+ TASK SWITCHER - IDENTIFY INSTANCE DATA
  6271.     AX = 4B05h
  6272.     ES:BX = 0000h:0000h
  6273.     CX:DX -> task switcher entry point (see AX=4B02h)
  6274. Return: ES:BX -> startup info structure (see below) or 0000h:0000h
  6275. Notes:    called by task switcher
  6276.     clients with instance data should hook this call, pass it through to
  6277.       the previous handler with unchanged registers using a simulated
  6278.       interrupt.  On return, the client should create a startup info
  6279.       structure (see below), store the returned ES:BX in the "next"
  6280.       field, and return the address of the created structure in ES:BX
  6281.     all MS-DOS function calls are available from within this call
  6282. SeeAlso: AX=1605h,AX=160Bh,AX=4B02h
  6283.  
  6284. Format of startup info structure:
  6285. Offset    Size    Description
  6286.  00h  2 BYTEs    major, minor version of info structure (03h,00h)
  6287.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  6288.  06h    DWORD    0000h:0000h (ignored)
  6289.  0Ah    DWORD    ignored
  6290.  0Eh    DWORD    pointer to instance data records
  6291.  
  6292. Format of one instance data record in array:
  6293. Offset    Size    Description
  6294.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  6295.  04h    WORD    size of instance data
  6296. --------W-2F4B20-----------------------------
  6297. INT 2F - MS Windows 3 - WIN.COM - SET PROGRAM TO EXECUTE ON EXIT
  6298.     AX = 4B20h
  6299. Return: AX = 0000h if successful
  6300.         DX:CX -> 256-byte buffer for pathname and commandline (see below)
  6301. Note:    when the Windows function ExitWindows is called with an exit code of
  6302.       44h, WIN.COM executes the program specified in the returned buffer
  6303.       and then restarts Windows
  6304.  
  6305. Format of buffer:
  6306. Offset    Size    Description
  6307.  00h 128 BYTEs    ASCIZ pathname of program to execute
  6308.  80h 128 BYTEs    commandline for program
  6309. --------p-2F4C-------------------------------
  6310. INT 2F U - Advanced Power Management
  6311.     AH = 4Ch
  6312.     AL = function
  6313.         00h version check
  6314.         01h suspend system requested
  6315.         FFh suspend/resume battery notification
  6316.     ???
  6317. Return: ???
  6318. ----------2F4D-------------------------------
  6319. INT 2F U - ???
  6320.     AH = 4Dh
  6321.     ???
  6322. Return: ???
  6323. Note:    reportedly called by Kana Kanji Converter and MSKK
  6324. --------N-2F4E53BL00-------------------------
  6325. INT 2F - SilverNET v2+ - INSTALLATION CHECK
  6326.     AX = 4E53h ("NS")
  6327.     BL = 00h (function "installation check")
  6328.     BH = module ID (see below)
  6329. Return: AX = 0000h if specified module installed
  6330.     BX = 4E53h if installed
  6331. Program: SilverNET is an SMB-compatible peer-to-peer NOS for DOS or
  6332.       Windows systems, by Net-Source, Inc. of Santa Clara, CA.
  6333. SeeAlso: AX=4E53h/BL=01h,AX=4E53h/BL=02h,AX=B800h,AX=B809h
  6334.  
  6335. Values for module ID:
  6336.  01h    SilverCACHE
  6337.  02h    Workstation
  6338.  03h    NetBIOS
  6339.  04h    Peer
  6340.  20h    NS Share
  6341.  80h    NetWare help TSR
  6342. --------N-2F4E53BL01-------------------------
  6343. INT 2F - SilverNET - GET RUNTIME PARAMETER
  6344.     AX = 4E53h ("NS")
  6345.     BL = 01h (function "get runtime parameter")
  6346.     BH = module ID (see AX=4E53h/BL=00h)
  6347.     CX = parameter index (see below)
  6348. Return: AX = WORD value at specified index
  6349. Desc:    retrieve a word of data from the specified SilverNET module
  6350.  
  6351. Values for Peer parameter index (* = read-only):
  6352.  00h *    maximum outstanding SMB buffers
  6353.  02h *    maximum logged-in nodes
  6354.  04h *    number of shareable resources
  6355.  06h *    number of characters to print per time slice
  6356.  08h *    number of printers that can be shared
  6357.  0Ah *    number of nodes logged in
  6358.  0Ch *    number of files to allow opened
  6359.  0Eh    how fast to despool (/PSLICE)
  6360.  10h    audit flag
  6361.  24h *    far pointer to resource table (each resource is 96 bytes in length)
  6362.  32h *    far pointer to SFT (internal if SilverNET files > CONFIG.SYS files,
  6363.     else DOS SFT)
  6364.  36h    spool flags (see below)
  6365.  
  6366. Bitfields for spool flags:
  6367. Bit(s)    Description
  6368.  0    LPT1 needs despooling
  6369.  1    LPT2 needs despooling
  6370.  2    LPT2 needs despooling
  6371.  4    COM1 needs despooling
  6372.  5    COM2 needs despooling
  6373.  6    COM3 needs despooling
  6374.  
  6375. Values for NS Share parameter index (* = read-only):
  6376.  00h    version number (high byte = minor, low byte = major)
  6377.  10h *    segment of first lock record (other records in consecutive paragraphs)
  6378.     (if PSP field = 0000h, lock record is free)
  6379.  12h *    maximum possible number of lock records
  6380.  14h *    starting segment of sharing buffer
  6381.     (NS Share's sharing records are identical to DOS SHARE except that
  6382.       fields which are normally offsets into SHARE are segment numbers)
  6383.  18h *    size of sharing buffer in paragraphs
  6384.  1Ah *    total free paragraphs in sharing buffer
  6385.  1Ch *    current number of shared files
  6386.  1Eh *    current number of locked records
  6387.  
  6388. Values for Workstation parameter index (* = read-only):
  6389.  00h    version number (high byte = minor, low byte = major)
  6390.  02h *    size of each network buffer for file operations
  6391.  04h *    number of redirector file buffers
  6392.  06h *    size of each print cache buffer
  6393.  08h *    number of network LPT printers
  6394.  0Ch    flush time in ticks (idle time on network printer before flushing)
  6395.  0Eh    (16 WORDs) last active time for each printer
  6396.  2Eh *    stub segment if program split into two parts
  6397.  60h    receive name number for datagram listens
  6398.  62h *    18-byte machine name
  6399.  74h *    LASTDRIVE (01h = A:, etc.)
  6400.  7Ch    row number of message box on screen
  6401.  7Eh    message time in clock ticks
  6402.  82h *    number of network adapters in use
  6403.  84h    station ID broadcast flag (never set on redirectors)
  6404.  96h *    NetBIOS names left
  6405.  98h *    NCBs left
  6406.  9Ah *    sessions left
  6407.  A2h *    total number of network printers (LPT+COM)
  6408.  A4h *    number of serial network printers
  6409.  A8h *    segment containing file cache buffers
  6410.  AAh *    segment containing print cache buffers
  6411.  ACh *    bytes remaining free in HMA before program loaded
  6412.  AEh *    start of free memory in HMA
  6413.  B2h *    flag: using HMA
  6414. --------N-2F4E53BL02-------------------------
  6415. INT 2F - SilverNET - SET RUNTIME PARAMETERS
  6416.     AX = 4E53h ("NS")
  6417.     BL = 02h (function "set runtime parameters")
  6418.     BH = module ID (see AX=4E53h/BL=00h)
  6419.     CX = parameter index (see AX=4E53h/BL=01h)
  6420.     DX = new value for specified parameter
  6421. Desc:    set a WORD value in the specified SilverNET module
  6422. Note:    not all indexed parameters are writable; modifying a read-only
  6423.       parameter can result in system crashes
  6424. SeeAlso: AX=4E53h/BL=00h,AX=4E53h/BL=01h
  6425. --------p-2F53-------------------------------
  6426. INT 2F U - POWER.EXE - APM event broadcasting???
  6427.     AH = 53h
  6428.     AL = event???
  6429.         05h CPU idle
  6430.         0Bh PM event broadcast API
  6431. Return: ???
  6432. Note:    called by MS Windows 3.1 POWER.DRV; hooked by MS Mouse driver v8.20+
  6433.       and PC-Cache v8.0
  6434. SeeAlso: AX=530Bh,AH=54h,INT 33/AX=002Fh
  6435. --------p-2F530B-----------------------------
  6436. INT 2F U - ??? (MOUSEPWR.COM, others) - ???
  6437.     AX = 530Bh
  6438.     BX = subfunction
  6439.         0003h ???
  6440.         0004h ???
  6441.     ???
  6442. Return: ???
  6443. Note:    it appears that subfunction 0003h reads or restores the current mouse
  6444.       settings (the MS Mouse driver hooks AX=530Bh), and 0004h might be
  6445.       the converse
  6446. --------p-2F5400-----------------------------
  6447. INT 2F U - POWER.EXE - INSTALLATION CHECK
  6448.     AX = 5400h
  6449. Return: AX = POWER.EXE version (AH = major, AL = minor) if installed
  6450.     BX = 504Dh ("PM")
  6451.     CF clear
  6452. Note:    called by MS Windows 3.1 POWER.DRV
  6453. SeeAlso: AH=53h,AX=5401h,AX=5402h,AX=5481h,AX=5482h
  6454. --------p-2F5401-----------------------------
  6455. INT 2F U - POWER.EXE - GET/SET POWER STATUS
  6456.     AX = 5401h
  6457.     BX = function
  6458.         0000h get status
  6459.         Return: BL = power management status
  6460.                 bit 0: CPU idle
  6461.                 bit 1: ???
  6462.         ???
  6463. Return: AX = function status
  6464.         0000h success
  6465.         else  error code
  6466. Note:    called by MS Windows 3.1 POWER.DRV
  6467. SeeAlso: AH=53h,AX=5400h,AX=5402h,AX=5403h
  6468. --------p-2F5402-----------------------------
  6469. INT 2F U - POWER.EXE - GET/SET IDLE DETECTION STRATEGY
  6470.     AX = 5402h
  6471.     BH = subfunction
  6472.         00h get
  6473.         other set
  6474.         BL = detection strategy (00h-0Fh or FFh)
  6475. Return: BX = current/new detection strategy
  6476. SeeAlso: AH=53h,AX=5400h,AX=5401h,AX=5481h,AX=5482h
  6477. --------p-2F5403-----------------------------
  6478. INT 2F U - POWER.EXE - GET/SET ADVANCED POWER MANAGEMENT SETTING
  6479.     AX = 5403h
  6480.     BX = new power management setting or 0000h to get current setting
  6481. Return: AX = status
  6482.         0000h successful
  6483.         BX = power management setting (see below)
  6484.         other error code
  6485. SeeAlso: AX=5401h,AX=5480h
  6486.  
  6487. Values for power management setting:
  6488.  0001h-0005h "min"
  6489.  0006h         "reg"
  6490.  0007h-0008h "max"
  6491. --------t-2F5453-----------------------------
  6492. INT 2F - TesSeRact RAM-RESIDENT PROGRAM INTERFACE
  6493.     AX = 5453h
  6494.     BX = subfunction
  6495.         00h installation check
  6496.         CX = 0000h
  6497.         DS:SI -> 8-char blank-padded name
  6498.         Return: AX = FFFFh installed
  6499.                 CX = ID number of already-installed copy
  6500.                = anything else, not installed
  6501.                 CX = ID number for TSR when installed
  6502.         01h get user parameters
  6503.         CX = TSR ID number
  6504.         Return: AX = 0000h successful
  6505.                ES:BX -> user parameter block (see below)
  6506.                = nonzero failed
  6507.         02h check if hotkey in use
  6508.         CL = scan code of hot key
  6509.         Return: AX = FFFFh hot key conflicts with another TSR
  6510.                  otherwise safe to use the hotkey
  6511.         03h replace default critical error handler
  6512.         CX = TSR ID number
  6513.         DS:SI -> new routine for INT 24h
  6514.         Return: AX = nonzero, unable to install new handler
  6515.         04h get internal data area
  6516.         CX = TSR ID number
  6517.         Return: AX = 0000h
  6518.                 ES:BX -> TSR's internal data area (see below)
  6519.                = nonzero, TSR not found
  6520.         05h set multiple hot keys
  6521.         CX = TSR ID number
  6522.         DL = number of additional hot keys to allocate
  6523.         DS:SI -> table of hot keys
  6524.             BYTE  hotkey scan code
  6525.             BYTE  hotkey shift state
  6526.             BYTE  flag value to pass to TSR (nonzero)
  6527.         Return: AX = nonzero, unable to install hot keys
  6528.         06h - 0Fh reserved
  6529.         10h enable TSR
  6530.         CX = TSR ID number
  6531.         Return: AX = nonzero, unable to enable
  6532.         11h disable TSR
  6533.         CX = TSR ID number
  6534.         Return: AX = nonzero, unable to disable
  6535.         12h unload TSR
  6536.         CX = TSR ID number
  6537.         Return: AX = nonzero, invalid TSR number
  6538.         Note: if any interrupts used by TSR have been grabbed by
  6539.             another TSR, the TesSeRact routines will wait until
  6540.             it is safe to remove the indicated TSR from memory
  6541.         13h restart TSR
  6542.         CX = TSR ID number of TSR which was unloaded but is still in
  6543.              memory
  6544.         Return: AX = nonzero, unable to restart TSR
  6545.         14h get status word
  6546.         CX = TSR ID number
  6547.         Return: AX = FFFFh invalid ID number
  6548.                = other, successful
  6549.                 BX = bit flags
  6550.         15h set status word
  6551.         CX = TSR ID number
  6552.         DX = new bit flags
  6553.         Return: AX = nonzero, unable to set status word
  6554.         16h get INDOS state at popup
  6555.         CX = TSR ID number
  6556.         Return: AX = 0000h successful
  6557.                 BX = value of INDOS flag
  6558.         17h - 1Fh reserved
  6559.         20h call user procedure
  6560.         CX = TSR ID number
  6561.         ES:DI -> user-defined data
  6562.         Return: AX = 0000h successful
  6563.         21h stuff keystrokes into keyboard buffer
  6564.         CX = TSR ID number
  6565.         DL = speed
  6566.             00h stuff keystrokes only when buffer is empty
  6567.             01h stuff up to four keystrokes per clock tick
  6568.             02h stuff up to 15 keystrokes per clock tick
  6569.         DH = scan code flag
  6570.             if zero, buffer contains alternating ASCII and scan codes
  6571.             if nonzero, buffer contains only ASCII codes
  6572.         SI = number of keystrokes
  6573.         ES:DI -> buffer to stuff
  6574.         Return: AX = 0000h success
  6575.                  F0F0h user aborted with ^C or ^Break
  6576.                  other unable to stuff keystrokes
  6577.         22h (v1.10) trigger popup
  6578.         CX = TSR ID number
  6579.         Return: AX = 0000h success, TSR will either pop up or beep to
  6580.                    indicate that it is unable to pop up
  6581.                  nonzero invalid ID number
  6582.         23h (v1.10) invoke TSR's background function
  6583.         CX = TSR ID number
  6584.         Return: AX = 0000h success
  6585.                  FFFFh not safe to call background function
  6586.                  nonzero invalid ID number
  6587.         24h - 2Fh reserved
  6588. Notes:    Borland's THELP.COM popup help system for Turbo Pascal and Turbo C
  6589.       (versions 1.x and 2.x only) fully supports the TesSeRact API, as
  6590.       do the SWAP?? programs by Innovative Data Concepts.
  6591.     AVATAR.SYS supports functions 00h and 01h (only the first three fields
  6592.       of the user parameter block) using the name "AVATAR  "
  6593. SeeAlso: AX=CAFEh,INT 16/AX=55FFh,INT 2D"AMIS"
  6594. Index:    installation check;TesSeRact TSR interface|uninstall;TesSeRact
  6595.  
  6596. Values for TesSeract names:
  6597.  "AVATAR  "    AVATAR.SYS
  6598.  "QeditTSR"    TSR version of SemWare's Qedit editor
  6599.  "SCRNBLNK"    Trusted Access screen blanker
  6600.  
  6601. Format of User Parameter Block:
  6602. Offset    Size    Description
  6603.  00h  8 BYTEs    blank-padded TSR name
  6604.  08h    WORD    TSR ID number
  6605.  0Ah    DWORD    bitmap of supported functions
  6606.  0Eh    BYTE    scan code of primary hotkey
  6607.             00h = pop up when shift states match
  6608.             FFh = no popup (if shift state also FFh)
  6609.  0Fh    BYTE    shift state of primary hotkey
  6610.             FFh = no popup (if scan code also FFh)
  6611.  10h    BYTE    number of secondary hotkeys
  6612.  11h    DWORD    pointer to extra hotkeys set by func 05h
  6613.  15h    WORD    current TSR status flags
  6614.  17h    WORD    PSP segment of TSR
  6615.  19h    DWORD    DTA for TSR
  6616.  1Dh    WORD    default DS for TSR
  6617.  1Fh    DWORD    stack at popup
  6618.  23h    DWORD    stack at background invocation
  6619. Index:    hotkeys;TesSeRact TSR interface
  6620.  
  6621. Format of TSR internal data area:
  6622. Offset    Size    Description
  6623.  00h    BYTE    revision level of TesSeRact library
  6624.  01h    BYTE    type of popup in effect
  6625.  02h    BYTE    INT 08 occurred since last invocation
  6626.  03h    BYTE    INT 13 occurred since last invocation
  6627.  04h    BYTE    active interrupts
  6628.  05h    BYTE    active soft interrupts
  6629.  06h    BYTE    DOS major version
  6630.  07h    BYTE    how long to wait before popping up
  6631.  08h    DWORD    pointer to INDOS flag
  6632.  0CH    DWORD    pointer to DOS critical error flag
  6633.  10h    WORD    PSP segment of interrupted program
  6634.  12h    WORD    PSP segment of prog interrupted by INT 28
  6635.  14h    DWORD    DTA of interrupted program
  6636.  18h    DWORD    DTA of program interrupted by INT 28
  6637.  1Ch    WORD    SS of interrupted program
  6638.  1Eh    WORD    SP of interrupted program
  6639.  20h    WORD    SS of program interrupted by INT 28
  6640.  22h    WORD    SP of program interrupted by INT 28
  6641.  24h    DWORD    INT 24 of interrupted program
  6642.  28h  3 WORDs    DOS 3+ extended error info
  6643.  2Eh    BYTE    old BREAK setting
  6644.  2Fh    BYTE    old VERIFY setting
  6645.  30h    BYTE    were running MS WORD 4.0 before popup
  6646.  31h    BYTE    MS WORD 4.0 special popup flag
  6647.  32h    BYTE    enhanced keyboard call in use
  6648.  33h    BYTE    delay for MS WORD 4.0
  6649. 11 times (for INTs 08h,09h,13h,16h,1Ch,21h,28h,2Fh,1Bh,23h, and 24h):
  6650.     DWORD    old interrupt vector
  6651.     BYTE    interrupt number
  6652.     WORD    offset in TesSeRact code segment of new interrupt handler
  6653. --------p-2F5480-----------------------------
  6654. INT 2F U - POWER.EXE - GET/SET ???
  6655.     AX = 5480h
  6656.     BX = direction
  6657.         0000h get
  6658.         other set
  6659.     CX = size of buffer (at least 0010h)
  6660.     DS:SI -> buffer
  6661. Return: AX = status
  6662.         0000h successful
  6663.         other error code
  6664. SeeAlso: AX=5400h,AX=5481h,AX=548Fh
  6665. --------p-2F5481-----------------------------
  6666. INT 2F U - POWER.EXE - GET STATISTICS
  6667.     AX = 5481h
  6668.     BX = ??? (0000h or 0001h)
  6669.     CX = length of buffer
  6670.     DS:SI -> buffer for statistics (see below)
  6671. Return: AX = status
  6672.         0000h successful
  6673.         else  error code
  6674. SeeAlso: AH=53h,AX=5400h,AX=5480h,AX=5402h,AX=5482h
  6675.  
  6676. Format of statistics:
  6677. Offset    Size    Description
  6678.  00h    DWORD    total ???
  6679.  04h    DWORD    ??? during which CPU was idle (divide by previous to get idle
  6680.             rate)
  6681. --------p-2F5482-----------------------------
  6682. INT 2F U - POWER.EXE - GET/SET APM POLLING FREQUENCY
  6683.     AX = 5482h
  6684.     BX = new polling frequency or 0000h to get current frequency
  6685. Return: AX = 0000h (successful)
  6686.     BX = current frequency if BX=0000h on entry
  6687. SeeAlso: AH=53h,AX=5400h,AX=5401h,AX=5480h,AX=5481h,AX=548Fh
  6688. --------p-2F548F-----------------------------
  6689. INT 2F U - POWER.EXE - GET/SET ???
  6690.     AX = 548Fh
  6691.     BX = ??? or 0000h to get current ???
  6692. Return: AX = 0000h (successful)
  6693.     BX = current ???
  6694.     CX = ???
  6695. SeeAlso: AX=5400h,AX=5480h,AX=5482h
  6696. --------l-2F5500-----------------------------
  6697. INT 2F U - DOS 5+ - COMMAND.COM INTERFACE
  6698.     AX = 5500h
  6699. Return: AX = 0000h if an instance of COMMAND.COM is already running
  6700.     DS:SI -> entry point table
  6701. Notes:    used to access the shareable portion of COMMAND.COM, which may have
  6702.       been moved into the HMA; only the primary COMMAND.COM retains this
  6703.       portion
  6704.     procedures called from a dispatcher in COMMAND's resident portion;
  6705.       most assume that the segment address of the resident portion is on
  6706.       the stack and are thus not of general use
  6707. SeeAlso: AX=5501h
  6708. --------l-2F5501-----------------------------
  6709. INT 2F U - DOS 5+ - ROM COMMAND.COM INTERFACE
  6710.     AX = 5501h
  6711. Return: ???
  6712. Note:    used to determine whether the caller is the first instance of ROM
  6713.       COMMAND.COM
  6714. SeeAlso: AX=5500h
  6715. --------R-2F5600DXFFFF-----------------------
  6716. INT 2F - INTERLNK - INSTALLATION CHECK
  6717.     AX = 5600h
  6718.     DX = FFFFh
  6719.     BL = instance number (00h = any, 01h = first loaded, etc.)
  6720. Return: AL = FFh if installed
  6721.         BL = instance number
  6722.         CX = ???
  6723.         DX = resident CS
  6724. SeeAlso: AX=5601h,AX=5602h
  6725. --------R-2F5601DXFFFF-----------------------
  6726. INT 2F - INTERLNK - CHECK IF REDIRECTED DRIVE
  6727.     AX = 5601h
  6728.     DX = FFFFh
  6729.     BH = drive number (0=A:)
  6730.     BL = 00h
  6731. Return: (as for AL=00h if redirected drive)
  6732. SeeAlso: AX=5600h
  6733. --------R-2F5602DXFFFF-----------------------
  6734. INT 2F - INTERLNK - GET ???
  6735.     AX = 5602h
  6736.     DX = FFFFh
  6737. Return: CX = ???
  6738. SeeAlso: AX=5600h
  6739. ----------2F57-------------------------------
  6740. INT 2F U - ???
  6741.     AH = 57h
  6742.     ???
  6743. Return: ???
  6744. Note:    reportedly used by Iomega Corp.
  6745. --------X-2F5D00-----------------------------
  6746. INT 2F U - PCMCIA - AWARD PCDISK - GET INFO FROM DRIVER ???
  6747.     AX = 5D00h
  6748. Return: ES:BX -> ???
  6749. Note:    supported by Ventura Micro / Award PCDISK.EXE v1.02c PCMCIA/ATA driver
  6750. SeeAlso: AX=5D01h,INT 21/AX=440Dh
  6751. --------X-2F5D01-----------------------------
  6752. INT 2F U - PCMCIA - AWARD PCDISK - PUT INFO INTO DRIVER ???
  6753.     AX = 5D01h
  6754.     ES:BX -> ???
  6755. Return: nothing
  6756. Note:    supported by Ventura Micro / Award PCDISK.EXE v1.02c PCMCIA/ATA driver
  6757. SeeAlso: AX=5D00h,INT 21/AX=440Dh
  6758. --------v-2F6282-----------------------------
  6759. INT 2F U - PC Tools v7.0+ VDEFEND, VSAFE, VWATCH, DATAMON - SET ??? ADDRESS
  6760.     AX = 6282h
  6761.     CX:DX -> ??? or 0000h:0000h
  6762.     DI = segment of ??? record (see below) or 0000h/FFFFh to ignore
  6763. Return: BX = 0062h
  6764. Note:    if CX:DX = 0000h:0000h on entry, the ??? address is not changed
  6765.       (DATAMON only)
  6766. SeeAlso: INT 13/AH=FAh"VSAFE",INT 21/AH=FAh"VDEFEND"
  6767.  
  6768. Format of record:
  6769. Offset    Size    Description
  6770.  00h    DWORD    ???
  6771.  04h    WORD    offset of ??? in record's segment
  6772.         VSAFE 2.0 sets byte at +01h to 56h or 58h
  6773.         VWATCH 2.1 sets byte at +02h to 56h or 58h
  6774.  06h  2 BYTEs    ???
  6775.  08h    BYTE    ??? (01h/other)
  6776. --------v-2F6284BX0000-----------------------
  6777. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT    - INSTALLATION CHECK
  6778.     AX = 6284h
  6779.     BX = 0000h
  6780.     CX = 0000h
  6781. Return: AX = segment of resident code
  6782.     BX = 5555h
  6783.     CX = 5555h
  6784. --------v-2F6284BX0001-----------------------
  6785. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT - GET ???
  6786.     AX = 6284h
  6787.     BX = 0001h
  6788.     CX = 0001h
  6789. Return: AX:BX -> ??? data (see below)
  6790.     CX = BX
  6791.  
  6792. Format of data for v9.0:
  6793. Offset    Size    Description
  6794.  00h  5 BYTEs    ???
  6795.  05h    WORD    resident code segment (may be segment of DWORD at +03h)
  6796.  07h    DWORD    -> FAR function to sound alert tone
  6797.     ???
  6798. --------v-2F6284BX0002-----------------------
  6799. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT - GET OPTIONS
  6800.     AX = 6284h
  6801.     BX = 0002h
  6802.     CX = 0002h
  6803. Return: AX = options (see below)
  6804.     BX = ??? (0000h for v9)
  6805.     CX = AX
  6806.     DX = BX
  6807.  
  6808. Bitfields for options:
  6809. Bit(s)    Description
  6810.  14    using Delete Tracker
  6811.  13    using Delete Sentry
  6812.  12    disabled
  6813.  1    ???
  6814. --------v-2F6284BX0003-----------------------
  6815. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT - SET ??? FLAGS
  6816.     AX = 6284h
  6817.     BX = 0003h
  6818.     CX = flags
  6819.         bit 12: disable DATAMON/DPROTECT
  6820.         bit 10: ???
  6821.         bit     5: ???
  6822.         bit     3: ???
  6823.     DX = flags
  6824.         bit 15: ???
  6825. Note:    v9 DPROTECT only checks bit 12 of CX, and ignores DX entirely
  6826. --------v-2F6284BX0004-----------------------
  6827. INT 2F U - PC Tools v8 DATAMON, v9+ DPROTECT - ???
  6828.     AX = 6284h
  6829.     BX = 0004h
  6830.     CX = 0004h
  6831. Return: AX = 5555h
  6832.     BX = ??? (0800h)
  6833.     CX = ??? (FCCCh for v8, FCCBh for v9)
  6834. --------V-2F6400-----------------------------
  6835. INT 2F - SCRNSAV2.COM - INSTALLATION CHECK
  6836.     AX = 6400h
  6837. Return: AL = 00h not installed
  6838.          FFh installed
  6839. Program: SCRNSAV2.COM is a screen saver for PS/2s with VGA by Alan Ballard
  6840. SeeAlso: INT 10/AX=5555h,INT 14/AX=AA01h
  6841. Index:    screen saver;SCRNSAV2
  6842. --------N-2F7000-----------------------------
  6843. INT 2F - License Service API - INSTALLATION CHECK
  6844.     AX = 7000h
  6845.     CX = license server index (0000h to 001Fh)
  6846. Return: AL = status
  6847.         00h not installed
  6848.         FFh installed
  6849. Notes:    The License Service API is being maintained by Microsoft but is being
  6850.       supported by a large number of companies including Apple, Banyan,
  6851.       DEC, HP, Lotus, Microsoft, Novell, Software Publishers Association,
  6852.       and Wordperfect (not a complete list!)
  6853.     Each license service provider must search for the next free index
  6854.       slot to use
  6855. SeeAlso: AX=7001h,AX=7003h,AX=7004h,AX=7005h
  6856. --------N-2F7001-----------------------------
  6857. INT 2F - License Service API - REQUEST LICENSE
  6858.     AX = 7001h
  6859.     CX = license server index (0000h to 001Fh)
  6860.     DS:DX -> SLSREQUEST structure (see below)
  6861. Return: AX = status
  6862.         0000h success
  6863.         else  provider error code
  6864.     ES:BX = provider specific handle for the license context
  6865. SeeAlso: AX=7002h,AX=7004h,AX=7005h
  6866.  
  6867. Format of SLSREQUEST structure:
  6868. Offset    Size    Description
  6869.  00h    DWORD    (return) status code
  6870.  04h    DWORD    (return) handle identifying context
  6871.  08h    DWORD    (call) address of Publisher string
  6872.  0Ch    DWORD    (call) address of Product string
  6873.  10h    DWORD    (call) address of Version string
  6874.  14h    DWORD    units required
  6875.  18h    DWORD    address of comment string
  6876.  1Ch    DWORD    address of SLSCHALLENGE structure (see below)
  6877.  
  6878. Format of SLSCHALLENGE structure:
  6879. Offset    Size    Description
  6880.  00h    DWORD    algorithm (currently always 1)
  6881.  04h    DWORD    secret to be challenged (1-255)
  6882.  08h    DWORD    size of challenge in bytes (1-255)
  6883.  0Ch  N BYTEs    challenge data
  6884. --------N-2F7002-----------------------------
  6885. INT 2F - License Service API - RELEASE LICENSE
  6886.     AX = 7002h
  6887.     CX = license server index (0000h to 001Fh)
  6888.     DS:DX -> SLSRELEASE structure (see below)
  6889.     ES:BX = provider specific handle for the license context
  6890. Return: AL = status
  6891.         00h not installed
  6892.         FFh installed
  6893. SeeAlso: AX=7001h,AX=7005h
  6894.  
  6895. Format of SLSRELEASE structure:
  6896. Offset    Size    Description
  6897.  00h    DWORD    handle indentifying license context
  6898.  04h    DWORD    total units consumed
  6899.  08h    DWORD    address of comment string
  6900. --------N-2F7003-----------------------------
  6901. INT 2F - License Service API - UPDATE
  6902.     AX = 7003h
  6903.     CX = license server index (0000h to 001Fh)
  6904.     DS:DX -> SLSUPDATE structure
  6905.     ES:BX = provider specific handle for the license context
  6906. Return: AL = status
  6907.         00h not installed
  6908.         FFh installed
  6909. SeeAlso: AX=7004h,AX=7005h
  6910.  
  6911. Format of SLSUPDATE structure:
  6912. Offset    Size    Description
  6913.  00h    DWORD    (return) status code
  6914.  04h    DWORD    (call) handle identifying license context
  6915.  08h    DWORD    (call) total units consumed
  6916.  0Ch    DWORD    additional units required
  6917.  10h    DWORD    address of comment string
  6918.  14h    DWORD    address of SLSCHALLENGE structure (see AX=7001h)
  6919. --------N-2F7004-----------------------------
  6920. INT 2F - License Service API - GET ERROR
  6921.     AX = 7004h
  6922.     CX = license server index (0000h to 001Fh)
  6923.     DS:DX -> SLSGETERROR structure (see below)
  6924.     ES:BX = provider specific handle for the license context
  6925. Return: AL = status
  6926.         00h not installed
  6927.         FFh installed
  6928. SeeAlso: AX=7000h,AX=7001h
  6929.  
  6930. Format of SLSGETERROR structure:
  6931. Offset    Size    Description
  6932.  00h    DWORD    (return) status code
  6933.  04h    DWORD    handle identifying license context
  6934.  08h    DWORD    error code
  6935.  0Ch    DWORD    buffer size in bytes
  6936.  10h  N BYTEs    data buffer
  6937. --------N-2F7005-----------------------------
  6938. INT 2F - License Service API - QUERY LICENSE
  6939.     AX = 7005h
  6940.     CX = license server index (0000h to 001Fh)
  6941.     DS:DX -> SLSQUERY structure (see below)
  6942.     ES:BX = provider specific handle for the license context
  6943. Return: AL = status
  6944.         00h not installed
  6945.         FFh installed
  6946. SeeAlso: AX=7001h,AX=7002h
  6947.  
  6948. Format of SLSQUERY structure:
  6949. Offset    Size    Description
  6950.  00h    DWORD    (return) status code
  6951.  04h    DWORD    handle identifying license context
  6952.  08h    DWORD    information index
  6953.  0Ch    DWORD    buffer size in bytes
  6954.  10h  N BYTEs    data buffer
  6955. --------d-2F7200-----------------------------
  6956. INT 2F - SRDISK v1.30 - INSTALLATION CHECK
  6957.     AX = 7200h
  6958. Return: AL = FFh if installed
  6959.         ES = segment of device driver header (see below)
  6960. Program: SRDISK is a freeware resizeable RAMdisk by Marko Kohtala
  6961.  
  6962. Format of device driver header:
  6963. Offset    Size    Description
  6964.  00h 10 BYTEs    same as standard device driver header (see INT 21/AH=52h)
  6965.  0Ah    BYTE    number of subunits (drives) supported by driver
  6966.  0Bh  3 BYTEs    signature "SRD"
  6967.  0Eh  4 BYTEs    memory type string (currently only "XMS ")
  6968.  12h  4 BYTEs    ASCII driver version string "N.NN"
  6969.  16h    BYTE    00h
  6970.  17h    BYTE    configuration format version (currently 00h)
  6971.  18h    WORD    offset of drive configuration data
  6972. --------N-2F7A00-----------------------------
  6973. INT 2F - Novell NetWare - LOW-LEVEL API (IPX) INSTALLATION CHECK
  6974.     AX = 7A00h
  6975. Return: AL = status
  6976.         00h not installed
  6977.         FFh installed
  6978.         ES:DI -> FAR entry point for routines accessed exclusively
  6979.             through INT 7A in NetWare versions through 2.0a.  Call
  6980.             with same values as INT 7A
  6981.         BX = ??? (IPXODI v2.12)
  6982. SeeAlso: AX=7AFFh/BX=0000h,AX=D800h,INT 64"Novell",INT 7A"Novell"
  6983. --------N-2F7A10-----------------------------
  6984. INT 2F U - Novell NetWare - TBMI v1.1+ - GET TBMI STATUS
  6985.     AX = 7A10h
  6986. Return: DH = major TBMI version number
  6987.     DL = minor TBMI version number (01h for v1.1)
  6988.     CX = segment address of TBMI resident part
  6989.     BX = status word of TBMI (see below)
  6990. Note:    TBMI is the Task-Switched Buffer Manager Interface
  6991. SeeAlso: AX=7A11h,AX=7A12h,AX=7A13h,AX=7A14h
  6992.  
  6993. Bitfields for status word:
  6994. Bit(s)    Description
  6995.  0    INT2F intercepted by TBMI
  6996.  1    INT7A intercepted by TBMI
  6997.  2    INT64 intercepted by TBMI
  6998.  3-14    reserved or unused ???
  6999.  15    outstanding task ID was detected
  7000. --------N-2F7A11-----------------------------
  7001. INT 2F U - Novell NetWare - TBMI v1.1+ - GET INT2F HANDLERS
  7002.     AX = 7A11h
  7003. Return: ES:BX -> old INT 2F handler
  7004.     DS:DX -> TBMI INT 2F handler
  7005. SeeAlso: AX=7A10h,AX=7A12h,AX=7A13h,AX=7A1Ah
  7006. --------N-2F7A12-----------------------------
  7007. INT 2F U - Novell NetWare - TBMI v1.1+ - GET INT64 HANDLERS
  7008.     AX = 7A12h
  7009. Return: ES:BX -> old INT 64 handler
  7010.     DS:DX -> TBMI INT 64 handler
  7011. SeeAlso: AX=7A10h,AX=7A11h,AX=7A13h
  7012. --------N-2F7A13-----------------------------
  7013. INT 2F U - Novell NetWare - TBMI v1.1+ - GET INT7A HANDLERS
  7014.     AX = 7A13h
  7015. Return: ES:BX -> old INT 7A handler
  7016.     DS:DX -> TBMI INT 7A handler
  7017. SeeAlso: AX=7A10h,AX=7A11h,AX=7A12h
  7018. --------N-2F7A14-----------------------------
  7019. INT 2F U - Novell NetWare - TBMI v1.1+ - GET STATISTICS
  7020.     AX = 7A14h
  7021.     CX = statistic to retrieve
  7022.         0000h available diagnostic functions???
  7023.         Return: CX = maximum available function??? (000Ch for v2.0)
  7024.         0001h buffers in use
  7025.         Return: CX = TBMI buffers currently in use
  7026.         0002h maximum buffers used
  7027.         Return: CX = maximum number of buffers ever in use
  7028.         0003h unavailable buffers
  7029.         Return: CX = count of unavailable TBMI buffers
  7030.         0004h old interrupt usage
  7031.         Return: CX = TBMI accesses to intercepted old vectors INT 2F,
  7032.                 INT 64, and INT 7A
  7033.         0005h far call usage
  7034.         Return: CX = TBMI accesses to IPX/SPX far call handler (not
  7035.                 including internal accesses)
  7036.         0006h task buffering
  7037.         Return: CX = TBMI task buffering status (enabled/disabled or
  7038.                 disable/enable switch count???)
  7039.         0007h current task ID
  7040.         Return: CX = TBMI current task ID number (0000h if ???)
  7041.         0008h outstanding ID count
  7042.         Return: CX = number of outstanding TBMI IDs
  7043.         0009h configured ECBs
  7044.         Return: CX = number of TBMI Event Control Blocks configured
  7045.         000Ah configured data ECBs
  7046.         Return: CX = number of TBMI data ECBs configured
  7047.         000Bh configured sockets
  7048.         Return: CX = number of TBMI sockets configured (from NETCFG)
  7049.         000Ch current sockets
  7050.         Return: CX = number of TBMI sockets currently in use
  7051. Return: BX = maximum supported subfunction (000Ch)
  7052. SeeAlso: AX=7A10h
  7053. --------N-2F7A15-----------------------------
  7054. INT 2F OU - Novell NetWare - TBMI v1.1 only - RESET ???
  7055.     AX = 7A15h
  7056. Return: BX = new value of ???
  7057. Desc:    set ??? to its default value
  7058. Note:    this call is a NOP under TBMI v2.0 (TBMI2)
  7059. SeeAlso: AX=7A17h
  7060. --------N-2F7A16-----------------------------
  7061. INT 2F OU - Novell NetWare - TBMI v1.1 only - ???
  7062.     AX = 7A16h
  7063.     CX = ???
  7064.     ???
  7065. Return: ???
  7066. Note:    this call is a NOP under TBMI v2.0 (TBMI2)
  7067. --------N-2F7A17-----------------------------
  7068. INT 2F OU - Novell NetWare - TBMI v1.1 only - ???
  7069.     AX = 7A17h
  7070.     ???
  7071. Return: BX = old value of ???
  7072.     CX = new value of ???
  7073. Note:    this call is a NOP under TBMI v2.0 (TBMI2)
  7074. SeeAlso: AX=7A15h
  7075. --------N-2F7A18-----------------------------
  7076. INT 2F U - Novell NetWare - TASKID v1.0 - INSTALLATION CHECK
  7077.     AX = 7A18h
  7078. Return: AL = FFh if installed
  7079.         BX = configuration flags (see below)
  7080.         CX = resident code segment
  7081. SeeAlso: AX=7A10h
  7082.  
  7083. Bitfields for configuration flags:
  7084. Bit(s)    Description
  7085.  0    INT 2F hooked
  7086.  3    INT 08 hooked
  7087.  other    unused
  7088. --------N-2F7A19-----------------------------
  7089. INT 2F U - Novell NetWare - TASKID v1.0 - GET INT 08 HANDLERS
  7090.     AX = 7A19h
  7091. Return: AL = FFh
  7092.     DS:DX -> TASKID INT 08 handler
  7093.     ES:BX -> original INT 08 handler
  7094. --------N-2F7A1A-----------------------------
  7095. INT 2F U - Novell NetWare - TASKID v1.0 - GET INT 2F HANDLERS
  7096.     AX = 7A1Ah
  7097. Return: AL = FFh
  7098.     DX:DX -> TASKID INT 2F handler
  7099.     ES:BX -> original INT 2F handler
  7100. SeeAlso: AX=7A11h,AX=7A19h
  7101. --------N-2F7A1B-----------------------------
  7102. INT 2F U - Novell NetWare - TASKID v1.0 - GET DIAGNOSTICS INFORMATION
  7103.     AX = 7A1Bh
  7104.     CX = desired information
  7105.         0000h supported functions
  7106.         0001h TASKID ID number
  7107.         Return: CX = ID number
  7108.         0002h set-ID count
  7109.         Return: CX = ID set count
  7110. Return: AL = FFh
  7111.     BX = highest supported subfunction number (0002h)
  7112. SeeAlso: AX=7A14h,AX=7A18h
  7113. --------N-2F7A1C-----------------------------
  7114. INT 2F U - Novell NetWare - TBMI v1.1+ - ???
  7115.     AX = 7A1Ch
  7116.     BP = ???
  7117.     CX:DX = ???
  7118. Return: AX = 70FFh
  7119. --------N-2F7A1D-----------------------------
  7120. INT 2F U - Novell NetWare - TBMI v1.1+ - ???
  7121.     AX = 7A1Dh
  7122.     ???
  7123. Return: ES = ???
  7124.     ???
  7125.     SI destroyed
  7126. --------N-2F7A1E-----------------------------
  7127. INT 2F U - Novell NetWare - TBMI v1.1+ - ???
  7128.     AX = 7A1Eh
  7129.     ES:SI -> ???
  7130.     ???
  7131. Return: ???
  7132. --------N-2F7A20BX0000-----------------------
  7133. INT 2F - Novell NetWare - Advanced NetWare 4.0 DOS Requester - GET CALL ADDRESS
  7134.     AX = 7A20h
  7135.     BX = 0000h
  7136. Return: AX = 0000h on success (installed)
  7137.         ES:BX -> far call address for DOS Requester
  7138. Notes:    the DOS Requester replaces the NetWare Shell (ANETx, NETx) on
  7139.       NetWare LAN's as of the release of Advanced NetWare 4.0 (1993).  It
  7140.       is backward compatible with NetWare 2.1x through 3.11 servers as
  7141.       well.     Note that there was a NetWare 4.0 in the early 1980's, which
  7142.       can cause confusion.
  7143.     this call is used as the installation check by VLM.EXE, which is the
  7144.       loader for all the modules of the DOS Requester
  7145. Index:    installation check;NetWare 4.0 DOS Requester
  7146. --------N-2F7A20BX0001-----------------------
  7147. INT 2F - Novell NetWare - DOS Requester v1.03 - GET ??? ENTRY POINT
  7148.     AX = 7A20h
  7149.     BX = 0001h
  7150. Return: AX = 0000h
  7151.     ES:BX -> ??? entry point
  7152. --------N-2F7A20BX0002-----------------------
  7153. INT 2F - Novell NetWare - DOS Requester v1.03 - GET ??? ADDRESS
  7154.     AX = 7A20h
  7155.     BX = 0002h
  7156. Return: AX = 0000h
  7157.     ES:BX -> ??? data
  7158. --------N-2F7A20BX0003-----------------------
  7159. INT 2F - Novell NetWare - DOS Requester v1.03 - GET ???
  7160.     AX = 7A20h
  7161.     BX = 0003h
  7162. Return: AX = 0000h
  7163.     ES:BX -> ???
  7164. --------N-2F7A20BX0004-----------------------
  7165. INT 2F - Novell NetWare - DOS Requester v1.03 - GET ??? ADDRESS
  7166.     AX = 7A20h
  7167.     BX = 0004h
  7168. Return: AX = 0000h
  7169.     ES:BX -> ??? data (see below)
  7170.  
  7171. Format of data:
  7172. Offset    Size    Description
  7173.  00h    DWORD    pointer to ??? (code)
  7174.  04h  4 BYTEs    ???
  7175.  08h    DWORD    pointer to ??? (code)
  7176.     ???
  7177. --------N-2F7A20BX0005-----------------------
  7178. INT 2F - Novell NetWare - DOS Requester v1.03 - GET ??? ENTRY POINT
  7179.     AX = 7A20h
  7180.     BX = 0005h
  7181. Return: AX = 0000h
  7182.     ES:BX -> ??? entry point
  7183. --------N-2F7A20BX0006-----------------------
  7184. INT 2F - Novell NetWare - DOS Requester v1.03 - GET ??? ENTRY POINT
  7185.     AX = 7A20h
  7186.     BX = 0006h
  7187. Return: AX = 0000h
  7188.     ES:BX -> ??? entry point (RETF in v1.03)
  7189. --------N-2F7A20BX0007-----------------------
  7190. INT 2F - Novell NetWare - DOS Requester v1.03 - GET ??? ENTRY POINT
  7191.     AX = 7A20h
  7192.     BX = 0007h
  7193. Return: AX = 0000h
  7194.     ES:BX -> ??? entry point (RETF in v1.03)
  7195. --------N-2F7A20BX0008-----------------------
  7196. INT 2F - Novell NetWare - DOS Requester v1.03 - GET ??? ENTRY POINT
  7197.     AX = 7A20h
  7198.     BX = 0008h
  7199. Return: AX = 0000h
  7200.     ES:BX -> ??? entry point (RETF in v1.03)
  7201. --------N-2F7A20BX0080-----------------------
  7202. INT 2F - Novell NetWare - DOS Requester v1.03 - GET ??? ENTRY POINT
  7203.     AX = 7A20h
  7204.     BX = 0080h
  7205. Return: AX = 0000h
  7206.     ES:BX -> ??? entry point (RETF in v1.03)
  7207. Note:    this function is identical to AX=7A20h/BX=0006h in v1.03
  7208. --------N-2F7A20BX0081-----------------------
  7209. INT 2F - Novell NetWare - DOS Requester v1.03 - GET ??? ENTRY POINT
  7210.     AX = 7A20h
  7211.     BX = 0081h
  7212. Return: AX = 0000h
  7213.     ES:BX -> ??? entry point (RETF in v1.03)
  7214. Note:    this function is identical to AX=7A20h/BX=0007h in v1.03
  7215. --------N-2F7A20BX0082-----------------------
  7216. INT 2F - Novell NetWare - DOS Requester v1.03 - GET ??? ENTRY POINT
  7217.     AX = 7A20h
  7218.     BX = 0082h
  7219. Return: AX = 0000h
  7220.     ES:BX -> ??? entry point (RETF in v1.03)
  7221. Note:    this function is identical to AX=7A20h/BX=0008h in v1.03
  7222. --------N-2F7A2F-----------------------------
  7223. INT 2F U - Novell NetWare - IPXODI v2.12 - GET ???
  7224.     AX = 7A2Fh
  7225. Return: AX = 0000h if supported and active
  7226.         BX = version??? (0001h)
  7227.         ES:DI -> entry point (see below)
  7228. Note:    IPXODI v2.12 is distributed as part of the Personal NetWare system
  7229.       bundled with Novell DOS 7
  7230. SeeAlso: INT 7A/BX=001Fh
  7231.  
  7232. Call entry point with:
  7233.     BX = function
  7234.         0000h ???
  7235.         ES:SI -> ??? data
  7236.         0001h ???
  7237.         AX = ???
  7238.         Return: ES:SI -> ??? data
  7239.         0002h get ??? address
  7240.         Return: ES:SI -> ??? buffer
  7241.         0003h send SPX packet???
  7242.         AL = ???
  7243.         CX = ???
  7244.         DX = ???
  7245.         SI = ???
  7246.         Return: ??? (registers from a call to INT 7A/BX=0016h)
  7247. Return: BX corrupted
  7248. --------N-2F7A2FBX0EDC-----------------------
  7249. INT 2F U - Personal NetWare - HRMIB - UNINSTALL
  7250.     AX = 7A2Fh
  7251.     BX = 0EDCh
  7252. Return: ???
  7253. SeeAlso: AX=7AA0h
  7254. --------N-2F7A40-----------------------------
  7255. INT 2F U - Novell NetWare - TCP/IP Protocol Stack - INSTALLATION CHECK
  7256.     AX = 7A40h
  7257. Return: AX = 7AFFh if installed
  7258.         BX = ??? bit flags (see below)
  7259.         CX = version (CH=major, CL=minor)
  7260.         DX = 0000h
  7261.         ES:DI -> entry point for TCP/IP stack (see below)
  7262. Notes:    Novell's LAN Workplace for DOS TCPIP.EXE also supports this interface
  7263.     this function is also supported by the Beame&Whiteside BWLWP40 shim,
  7264.       but it only returns AL and ES:DI, and does not support AX=7A41h
  7265. SeeAlso: AX=7A41h,INT 15/AX=DE2Eh,INT 60"Excelan"
  7266.  
  7267. Bitfields for returned BX:
  7268. Bit(s)    Description
  7269.  0    ???
  7270.  1    ???
  7271.  15-2    reserved???
  7272.  
  7273. Call entry point with:
  7274.     ES:SI -> parameter block (see below)
  7275. Return: ES:SI parameter block updated
  7276.  
  7277. Format of parameter block:
  7278. Offset    Size    Description
  7279.  00h  4 BYTEs    ???
  7280.  04h    WORD    (return) ???
  7281.  06h    WORD    (return) ???
  7282.  08h    DWORD    -> FAR routine called if bit 7 of function code set
  7283.  0Ch    BYTE    flags???
  7284.  0Dh  7 BYTEs    ???
  7285.  14h    BYTE    (return) ???
  7286.  15h    BYTE    (call) function code (bit 7 set if ???) (see below)
  7287.  16h    BYTE    socket number
  7288.  17h    BYTE    (return) result or error code
  7289.  18h  4 WORDs    parameters
  7290.  20h    WORD    length of packet sent/received
  7291.  22h    WORD    number of pointer/length pairs following
  7292.  24h 6N BYTEs    buffer descriptors, each
  7293.         Offset    Size    Description
  7294.          00h    DWORD    pointer to buffer
  7295.          04h    WORD    length of buffer
  7296.  
  7297. Values for function code:
  7298.  02h    "bind"
  7299.  03h    close socket
  7300.  04h    "connect"
  7301.  05h    get IP address
  7302.  06h    get hardware address
  7303.  0Ah    get netmask
  7304.  0Bh    "ioctl"
  7305.  0Ch    "listen"
  7306.  0Dh    "select"
  7307.  10h    "shutdown"
  7308.  11h    open socket
  7309.  12h    "read"
  7310.  13h    "recvfrom"
  7311.  14h    "write"
  7312.  15h    "sendto"
  7313. Note:    these functions are based on the Unix socket interface
  7314. --------N-2F7A41-----------------------------
  7315. INT 2F - Novell NetWare - TCP/IP Protocol Stack - WINDOWS SUPPORT???
  7316.     AX = 7A41h
  7317.     ES:DI -> FAR entry point for ??? (will be called with BX=1,2,3,4)
  7318. Return: AX = 7AFFh if supported
  7319.         BX = ??? (see AX=7A40h)
  7320.         CX = version (CH=major, CL=minor)
  7321.         DX = 0000h
  7322.         ES:SI -> DWORD containing passed value of ES:DI
  7323.         ES:DI -> entry point for TCP/IP stack
  7324. Notes:    Novell's LAN Workplace for DOS TCPIP.EXE also supports this interface
  7325.     the pointer which is set to ES:DI is cleared to 0000h:0000h when
  7326.       a Windows exit broadcast is received
  7327. SeeAlso: AX=7A40h
  7328. --------N-2F7A42-----------------------------
  7329. INT 2F - Novell NetWare - TCPIP.EXE v4.1 - GET ??? ENTRY POINT
  7330.     AX = 7A42h
  7331. Return: AX = 7AFFh if supported
  7332.         ES:DI -> ??? entry point (see below)
  7333.  
  7334. Call entry point with:
  7335.     DX = ???
  7336.     ES:DI -> ??? (see below)
  7337. Return: AX = 0000h
  7338.     other registers destroyed
  7339.  
  7340. Format of data buffer:
  7341. Offset    Size    Description
  7342.  00h    WORD    offset of WORD ??? or 0000h
  7343.  02h    WORD    offset of DWORD ??? or 0000h
  7344.  04h    WORD    offset of DWORD ??? or 0000h
  7345. --------N-2F7A43-----------------------------
  7346. INT 2F - Novell NetWare - TCPIP.EXE v4.1 - ???
  7347.     AX = 7A43h
  7348. Return: AX = 7AFFh if supported
  7349.         DX = offset of ???
  7350. SeeAlso: AX=7A44h
  7351. --------N-2F7A44-----------------------------
  7352. INT 2F - Novell NetWare - TCPIP.EXE v4.1 - ???
  7353.     AX = 7A44h
  7354.     DX = offset of ??? (see AX=7A43h)
  7355. Return: AX = 7AFFh if supported
  7356. SeeAlso: AX=7A43h
  7357. --------N-2F7A4C-----------------------------
  7358. INT 2F - Novell NetWare - TCPIP.EXE v4.1 - GET ???
  7359.     AX = 7A4Ch
  7360. Return: AX = 7AFFh if supported
  7361.         BX = ??? (0037h)
  7362.         CX = ??? (001Ch)
  7363. --------N-2F7A4DBX0001-----------------------
  7364. INT 2F - Novell NetWare - ???
  7365.     AX = 7A4Dh
  7366.     BX = 0001h
  7367.     ES:DI -> ???
  7368. Return: AL = FFh if ???
  7369.         ES:DI -> ???
  7370. Note:    called by NETBIOS.EXE v3.01
  7371. --------N-2F7A4FBX0001-----------------------
  7372. INT 2F - Novell NetWare - SNMP.EXE - INSTALLATION CHECK
  7373.     AX = 7A4Fh
  7374.     BX = 0001h
  7375. Return: AX = 7AFFh if installed
  7376. --------N-2F7A4FBX0002-----------------------
  7377. INT 2F - Novell NetWare - SNMP.EXE - ???
  7378.     AX = 7A4Fh
  7379.     BX = 0002h
  7380. Return: AL = status
  7381.         4Fh if failed
  7382.         FFh if successful
  7383. --------N-2F7A80-----------------------------
  7384. INT 2F C - Novell NetWare - SHELL 3.01d BROADCAST - ABNORMAL EXIT
  7385.     AX = 7A80h
  7386. Return: nothing
  7387. Notes:    called on abnormal exit of the NetWare shell to notify other Novell
  7388.       TSRs that it is unsafe to call the shell in the future.
  7389.     must be passed through so that all interested programs see the exit
  7390.     on receiving this call, IPXODI clears an internal pointer to a
  7391.       default value; Novell's NETBIOS.EXE clears its INT 21h pointer to
  7392.       0000h:0000h and stops calling it
  7393. SeeAlso: AX=7A81h
  7394. --------N-2F7A81-----------------------------
  7395. INT 2F C - Novell NetWare - SHELL 3.01d BROADCAST - SET SHELL INT 21 HANDLER
  7396.     AX = 7A81h
  7397.     CX:DX -> shell's INT 21h entry point
  7398. Return: nothing
  7399. Notes:    the shell calls this function as it loads to allow interested TSRs
  7400.       and drivers to make a local copy of the shell's entry point
  7401.     must be passed through so that all interested programs see it
  7402. --------N-2F7A85-----------------------------
  7403. INT 2F C - Novell NetWare - shell 3.01 - BROADCAST INFORM
  7404.     AX = 7A85h
  7405.     CX = broadcast server number
  7406. Return: CX = 0000h if broadcast message handled by another program
  7407.     CX unchanged if broadcast not handled
  7408. --------N-2F7A90-----------------------------
  7409. INT 2F U - Novell NetWare - NETBIOS.EXE 3+ - INSTALLATION CHECK
  7410.     AX = 7A90h
  7411. Return: AL = 00h if present
  7412.         BX = ???
  7413.         CX = PSP segment of NETBIOS resident code
  7414. SeeAlso: AX=7AFEh
  7415. --------N-2F7AA0-----------------------------
  7416. INT 2F U - Personal NetWare - HRMIB - ???
  7417.     AX = 7AA0h
  7418.     BX = function
  7419.         0000h ???
  7420.         0001h ???
  7421. Return: ???
  7422. SeeAlso: AX=7A2Fh/BX=0EDCh
  7423. --------N-2F7AC1-----------------------------
  7424. INT 2F - LAN HiJack - LHR - DISABLE???
  7425.     AX = 7AC1h
  7426. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  7427.       to take over control of a workstation remotely; LHR is the program
  7428.       run on the slave workstation
  7429. SeeAlso: AX=7AC8h,AX=7AC9h,AX=7ACFh
  7430. --------N-2F7AC2-----------------------------
  7431. INT 2F - LAN HiJack - LHR - SYNCHRONIZE SHIFT STATES???
  7432.     AX = 7AC2h
  7433. Note:    sets BIOS keyboard status byte to an internal variable
  7434. SeeAlso: AX=7AC3h,AX=7ACFh
  7435. --------N-2F7AC3-----------------------------
  7436. INT 2F - LAN HiJack - LHR - CLEAR ??? FLAG
  7437.     AX = 7AC3h
  7438. SeeAlso: AX=7AC2h,AX=7ACFh
  7439. --------N-2F7AC8-----------------------------
  7440. INT 2F - LAN HiJack - LHR - ENABLE FUNCTIONS
  7441.     AX = 7AC8h
  7442.     BL = function(s) to enable (see below)
  7443. SeeAlso: AX=7AC1h,AX=7AC9h,AX=7ACFh
  7444.  
  7445. Bitfields for function(s) to enable/disable:
  7446. Bit(s)    Description
  7447.  0    ???
  7448.  1    remote keyboard enabled
  7449.  2    support remote's mouse
  7450.  3-7    unused
  7451. --------N-2F7AC9-----------------------------
  7452. INT 2F - LAN HiJack - LHR - DISABLE FUNCTIONS
  7453.     AX = 7AC9h
  7454.     BL = function(s) to disable (see AX=7AC8h)
  7455. SeeAlso: AX=7AC1h,AX=7AC8h
  7456. --------N-2F7ACA-----------------------------
  7457. INT 2F - LAN HiJack - LHJ - ???
  7458.     AX = 7ACAh
  7459.     BL = ???
  7460. Return: ???
  7461. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  7462.       to take over control of a workstation remotely; LHJ is the program
  7463.       run on the controlling workstation
  7464. --------N-2F7ACB-----------------------------
  7465. INT 2F - LAN HiJack - LHJ - ???
  7466.     AX = 7ACBh
  7467.     BX = ???
  7468. Return: ???
  7469. Note:    this function appears to be related to the keyboard
  7470. SeeAlso: AX=7ACCh
  7471. --------N-2F7ACC-----------------------------
  7472. INT 2F - LAN HiJack - LHJ - ???
  7473.     AX = 7ACCh
  7474.     BX = ???
  7475. Return: ???
  7476. Note:    this function appears to be related to the mouse
  7477. SeeAlso: AX=7ACBh
  7478. --------N-2F7ACFBX0000-----------------------
  7479. INT 2F - LAN HiJack - LHR - INSTALLATION CHECK
  7480.     AX = 7ACFh
  7481.     BX = 0000h
  7482. Return: BX = segment of resident code if installed
  7483. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  7484.       to take over control of a workstation remotely; LHR is the program
  7485.       run on the slave workstation
  7486. --------N-2F7AF0-----------------------------
  7487. INT 2F - Novell NetWare - DOSNP.EXE v1.30G - INSTALLATION CHECK
  7488.     AX = 7AF0h
  7489. Return: AL = FFh if present
  7490.         ES = 7AF0h
  7491.         CX = PSP segment of resident code
  7492. --------N-2F7AF1-----------------------------
  7493. INT 2F - Novell NetWare - Access Server Driver - INSTALLATION CHECK
  7494.     AX = 7AF1h
  7495.     BL = sequence number (01h first driver, 02h second, 00h no driver)
  7496. Return: AX <> 7AF1h if present
  7497.         BH = total number of drivers
  7498.         ---if BL nonzero on entry---
  7499.         AL = number of ports provided by specified driver
  7500.         ES:DI -> driver entry point (see below)
  7501.         ES:DX -> ID string
  7502.  
  7503. Call driver entry point with:
  7504.    AH    function
  7505.    01h initialize port
  7506.     AL = port number (00h-0Fh)
  7507.     ES:BX -> configuration parameter block (see below)
  7508.     interrupts disabled
  7509.     Return: CF clear if successful
  7510.         CF set on error
  7511.    02h get port status
  7512.     AL = port number (00h-0Fh)
  7513.     interrupts disabled
  7514.     Return: CF clear if successful
  7515.             BL = transmitter status (see below)
  7516.             BH = receiver status (see below)
  7517.             DL = external status signals (see below)
  7518.         CF set on error
  7519.         interrupts disabled
  7520.    03h get input from port
  7521.     AL = port number (00h-0Fh)
  7522.     CX = size of data buffer
  7523.     ES:BX -> buffer for data
  7524.     interrupts disabled
  7525.     Return: CF clear if successful
  7526.         CF set on error
  7527.         interrupts disabled
  7528.         CX = number of bytes read
  7529.     Note:    the driver will add a NUL to the buffer when a break
  7530.           signal is detected
  7531.    04h send output data to port
  7532.     AL = port number (00h-0Fh)
  7533.     CX = number of bytes to send
  7534.     ES:BX -> buffer containing data
  7535.     interrupts disabled
  7536.     Return: CF clear if successful
  7537.         CF set on error
  7538.         interrupts disabled
  7539.         CX = number of bytes actually written
  7540.    05h get I/O character counts
  7541.     AL = port number (00h-0Fh)
  7542.     interrupts disabled
  7543.     Return: CF clear if successful
  7544.             BX = number of bytes pending transmission
  7545.             CX = number of bytes available for reading
  7546.         CF set on error
  7547.         interrupts disabled
  7548.    06h control XON/XOFF
  7549.     AL = port number (00h-0Fh)
  7550.     DL = new state
  7551.         (00h software flow control disabled, else enabled)
  7552.     interrupts disabled
  7553.     Return: CF clear if successful
  7554.         CF set on error
  7555.         interrupts disabled
  7556.    07h get error counts and statistics
  7557.     AL = port number (00h-0Fh)
  7558.     ES:BX -> buffer for statistics (see below)
  7559.     interrupts disabled
  7560.     Return: CF clear if successful
  7561.             ES:BX buffer filled
  7562.         CF set on error
  7563.         interrupts disabled
  7564.    08h general request
  7565.     AL = port number (00h-0Fh)
  7566.     DX = requested operations
  7567.         bit 0: flush transmit buffers
  7568.         bit 1: flush receive buffers
  7569.         bit 4: define XON/XOFF characters
  7570.     ES:BX -> XON/XOFF characters (see below) if DX bit 4 set
  7571.     interrupts disabled
  7572.     Return: CF clear if successful
  7573.         CF set on error
  7574.         interrupts disabled
  7575.    09h deadman timer management
  7576.     AL = port number (00h-0Fh)
  7577.     BX = next time interval in seconds (0000h to disable timer)
  7578.     interrupts disabled
  7579.     Return: CF clear
  7580.         interrupts disabled
  7581.    0Ah get buffer sizes
  7582.     AL = port number (00h-0Fh)
  7583.     interrupts disabled
  7584.     Return: CF clear if successful
  7585.            BX = size of transmit buffer
  7586.            CX = size of receive buffer
  7587.         CF set on error
  7588.         interrupts disabled
  7589.  
  7590. Values for transmitter status:
  7591.  00h    uninitialized
  7592.  01h    ready, not transmitting
  7593.  02h    transmitting
  7594.  03h    XOFF received
  7595.  04h    transmitting, buffer full
  7596.  05h    XOFF received and buffer full
  7597.  
  7598. Values for receiver status:
  7599.  00h    uninitialized
  7600.  01h    ready
  7601.  02h    receive buffer full, data may have been lost
  7602.  
  7603. Bitfields for external status signals:
  7604. Bit(s)    Description
  7605.  7,6    undefined
  7606.  5    CTS active
  7607.  4    DSR active
  7608.  3    DCD active
  7609.  2,1    undefined
  7610.  0    ring indicator
  7611.  
  7612. Format of configuration parameter block:
  7613. Offset    Size    Description
  7614.  00h    BYTE    receive baud rate index
  7615.         00h 50 bps, 01h 75 bps, 02h 110 bps, 03h 134.5 bps,
  7616.         04h 150 bps, 05h 300 bps, 06h 600 bps, 07h 1200 bps,
  7617.         08h 1800 bps, 09h 2000 bps, 0Ah 2400 bps, 0Bh 3600 bps,
  7618.         0Ch 4800 bps, 0Dh 7200 bps, 0Eh 9600 bps, 0Fh 19200 bps,
  7619.         10h 38400 bps, 11h 57600 bps, 12h 115200 bps
  7620.  01h    BYTE    receive bits per character (0=5 bits..3=8 bits)
  7621.  02h    BYTE    receive stop bits
  7622.  03h    BYTE    receive parity
  7623.         00h none, 01h odd, 02h even, 03h mark, 04h space
  7624.  04h    BYTE    transmit baud rate index (same as receive baud rate)
  7625.  05h    BYTE    transmit bits per character (0=5 bits..3=8 bits)
  7626.  06h    BYTE    transmit stop bits
  7627.  07h    BYTE    transmit parity (same as receive parity)
  7628.  08h    BYTE    DTR state (00h off, 01h on)
  7629.  09h    BYTE    RTS state (00h off, 01h on)
  7630.  0Ah    BYTE    flow control
  7631.         00h none, 01h XON/XOFF, 02h RTS/CTS, 03h both
  7632.  0Bh    BYTE    break control (00h off, 01h on)
  7633.  
  7634. Format of statistics:
  7635. Offset    Size    Description
  7636.  00h    BYTE    port number
  7637.  01h    BYTE    external status signals (see above)
  7638.  02h    BYTE    transmitter status (see above)
  7639.  03h    BYTE    receiver status (see above)
  7640.  04h    DWORD    number of characters received
  7641.  08h    DWORD    number of characters transmitted
  7642.  0Ch    WORD    input parity errors
  7643.  0Eh    WORD    input framing errors
  7644.  10h    WORD    lost characters due to hardware overrun
  7645.  12h    WORD    lost characters due to data buffer overrun
  7646. Note:    the counts are not allowed to wrap around; once a count reaches FFFFh
  7647.       or FFFFFFFFh, it is no longer incremented
  7648.  
  7649. Format of XON/XOFF characters:
  7650. Offset    Size    Description
  7651.  00h    BYTE    04h (number of bytes following)
  7652.  01h    BYTE    transmit XON character
  7653.  02h    BYTE    transmit XOFF character
  7654.  03h    BYTE    receive XON character
  7655.  04h    BYTE    receive XOFF character
  7656. --------N-2F7AFE-----------------------------
  7657. INT 2F - Novell NetWare - DOSNP.EXE - INSTALLATION CHECK
  7658.     AX = 7AFEh
  7659. Return: AL = FFh if present
  7660.         ES = (data???) segment of DOSNP
  7661. Program: DOSNP.EXE provides "named pipes" support for DOS workstations running
  7662.        NetWare
  7663. Note:    the NetWare shell calls this function and refuses to load if DOSNP is
  7664.       present
  7665. SeeAlso: AX=7A90h
  7666. --------N-2F7AFFBX0000-----------------------
  7667. INT 2F - Novell NetWare - TBMI v1.1+ - INSTALLATION CHECK???
  7668.     AX = 7AFFh
  7669.     BX = 0000h
  7670.     CX = 4E65h ("Ne")
  7671.     DX = 7457h ("tW")
  7672.     ES:DI -> IPX/SPX special handler (XMS/EMS ???)
  7673. Return: AL = FFh if installed
  7674.         CX = configured sockets (14h)
  7675.         DS:SI -> data table ???
  7676.         ES:DI -> IPX far call handler
  7677. Notes:    for IPX/SPX this call reportedly returns DS:SI pointing to the table
  7678.       of pointers to service events queue head and tail
  7679.     this function is also supported by IPXODI; v2.12 does not change DS,
  7680.       but does set SI to an internal address
  7681. SeeAlso: AX=7AFFh/BX=0001h
  7682. --------N-2F7AFFBX0001-----------------------
  7683. INT 2F - Novell NetWare - TBMI v1.1+, shell v3.01d - INSTALLATION CHECK???
  7684.     AX = 7AFFh
  7685.     BX = 0001h
  7686.     CX = 4E65h ("Ne")
  7687.     DX = 7457h ("tW")
  7688. Return: AL = FFh if installed
  7689.         CX = ???  (8000h)
  7690.         SI = ??? (or -> ???) (0002h and 0007h seen)
  7691.         ES:DI -> IPX far call handler
  7692.         ES:DX -> 6-byte data area ???
  7693. Note:    this function is also supported by IPXODI, but IPXODI v2.12 does not
  7694.       return ES:DX
  7695. SeeAlso: AX=7AFFh/BX=0000h
  7696. --------d-2F7F00-----------------------------
  7697. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - INSTALLATION CHECK
  7698.     AX = 7F00h
  7699. Return: AL = FFh if installed
  7700. SeeAlso: AX=7F01h,AX=7F02h,AX=7F03h
  7701. --------d-2F7F01-----------------------------
  7702. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - DO COMMAND
  7703.     AX = 7F01h
  7704.     DS:DX -> command record (see below)
  7705. Return: AL = status
  7706.         00h successful
  7707.         else error code
  7708. SeeAlso: AX=7F00h,AX=7F02h,INT 11/AH=FFh"SDLP",INT 21/AX=4402h"ASPI"
  7709. SeeAlso: INT 4F/AX=8100h
  7710.  
  7711. Format of command record:
  7712. Offset    Size    Description
  7713.  00h    BYTE    ID
  7714.  01h 10 BYTEs    CDB (Command Descriptor Block) for operation
  7715.  0Bh    WORD    segment of buffer
  7716.  0Dh    WORD    offset of buffer
  7717.  0Fh    BYTE    status
  7718.  10h    BYTE    sense
  7719.  12h    WORD    count
  7720. --------d-2F7F02-----------------------------
  7721. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - DO RESET
  7722.     AX = 7F02h
  7723. SeeAlso: AX=7F00h,AX=7F01h
  7724. --------d-2F7F03-----------------------------
  7725. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - UNINSTALL
  7726.     AX = 7F03h
  7727. Return: AL = status
  7728.         00h successful
  7729.         01h unable to uninstall
  7730. SeeAlso: AX=7F00h
  7731. ----------2F7F24-----------------------------
  7732. INT 2F - Multiplex - ???
  7733.     AX = 7F24h
  7734.     ???
  7735. Return: ???
  7736. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  7737. ----------2F7F26-----------------------------
  7738. INT 2F - Multiplex - ???
  7739.     AX = 7F26h
  7740.     ???
  7741. Return: ???
  7742. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  7743. --------!------------------------------------
  7744.